:root,:root[data-theme=night]{--canvas:#181916;--panel:#242521;--raised:#30312c;--heading:#eee9df;--text-primary:#d7cfc0;--text-secondary:#948e84;--accent-bg:#b98e55;--accent-text:#d0b173;--on-accent:#181916;--sand:#c7b79d;--avatar-text:#181916;--border:#30312c;--danger:#c7735f;--focus:#d0b173;--overlay:#0000008c}:root[data-theme=morning]{--canvas:#eee9df;--panel:#f8f5ef;--raised:#e7e0d4;--heading:#181916;--text-primary:#30312c;--text-secondary:#625c52;--accent-bg:#805d35;--accent-text:#805d35;--on-accent:#eee9df;--sand:#c7b79d;--avatar-text:#181916;--border:#d7cfc0;--danger:#9a4a3a;--focus:#805d35;--overlay:#18191659}:root{--font:-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;--radius-sm:8px;--radius-lg:16px}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--canvas);color:var(--text-primary);font:400 14px/22px var(--font);-webkit-font-smoothing:antialiased;margin:0}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.muted{color:var(--text-secondary)}.error{color:var(--danger);margin:0;font-size:12px;line-height:20px}.spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.btn{border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;height:40px;padding:0 16px;font-weight:500;display:inline-flex}.btn:disabled{opacity:.55;cursor:default}.btn.primary{background:var(--accent-bg);color:var(--on-accent)}.btn.secondary{border-color:var(--border);color:var(--text-primary)}.btn.danger{background:var(--danger);color:var(--on-accent)}.btn.text{color:var(--accent-text);padding:0 4px}.btn.danger-text{color:var(--danger);padding:0 4px}.btn.block{width:100%}.mark{border-radius:var(--radius-sm);background:var(--accent-bg);width:34px;height:34px;color:var(--on-accent);font:600 20px/24px var(--font);flex:none;place-items:center;display:grid}.wordmark{color:var(--heading);font:600 18px/26px var(--font);margin:0}.brand{flex:none;align-items:center;gap:12px;height:52px;display:flex}.shell{grid-template-columns:248px minmax(0,1fr);min-height:100dvh;display:grid}.sidebar{background:var(--canvas);flex-direction:column;gap:24px;height:100dvh;padding:32px 20px 24px;display:flex;position:sticky;top:0;overflow-y:auto}.nav-group{flex-direction:column;gap:8px;display:flex}.nav-caption{color:var(--text-secondary);margin:0;font-size:12px;line-height:20px}.nav-item{border-radius:var(--radius-sm);min-height:44px;color:var(--text-secondary);align-items:center;gap:12px;padding:0 12px;font-weight:500;display:flex}.nav-item:hover,.nav-item[aria-current=page]{background:var(--raised);color:var(--accent-text)}.nav-item .label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.nav-item .grip{color:var(--text-secondary);cursor:grab;opacity:0;touch-action:none;background:0 0;border:0;margin-right:-4px;padding:4px;display:flex}.nav-item:hover .grip,.nav-item .grip:focus-visible{opacity:1}.nav-empty{color:var(--text-secondary);margin:0;padding:0 12px;font-size:12px;line-height:20px}.sidebar-spacer{flex:1}.user{border-top:1px solid var(--raised);align-items:center;gap:12px;padding-top:16px;display:flex}.avatar{border-radius:var(--radius-sm);background:var(--sand);width:36px;height:36px;color:var(--avatar-text);font:600 18px/26px var(--font);flex:none;place-items:center;display:grid}.user-text{min-width:0}.user-text p{text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.user-name{font-weight:500}.user-email{color:var(--text-secondary);font-size:12px;line-height:20px}.main{flex-direction:column;min-width:0;min-height:100dvh;display:flex}.topbar{flex:none;align-items:center;gap:16px;height:72px;padding:0 40px;display:flex}.crumb{white-space:nowrap;gap:12px;font-size:12px;line-height:20px;display:flex}.crumb .muted{color:var(--text-secondary)}.topbar .spacer{flex:1}.date{color:var(--text-secondary);font:500 11px/18px var(--font)}.theme-switch{border-radius:var(--radius-sm);background:var(--panel);gap:4px;padding:4px;display:flex}.theme-switch button{color:var(--text-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:5px 16px;font-size:12px;line-height:20px}.theme-switch button[aria-pressed=true]{background:var(--raised);color:var(--accent-text)}.content{flex-direction:column;flex:1;gap:24px;min-width:0;padding:32px 40px 24px;display:flex}.footer{color:var(--text-secondary);font:500 11px/18px var(--font);margin-top:auto;padding-top:8px}.page-head{align-items:flex-end;gap:16px;display:flex}.page-head>div{flex:1;min-width:0}.page-title{color:var(--heading);font:600 28px/40px var(--font);margin:0}.page-sub{color:var(--text-secondary);margin:4px 0 0}.widgets{grid-template-columns:repeat(auto-fill,minmax(min(100%,420px),1fr));align-items:start;gap:24px;display:grid}.widget{border-radius:var(--radius-lg);background:var(--panel);flex-direction:column;gap:12px;padding:20px;display:flex}.widget.dragging{opacity:.6}.widget-head{cursor:grab;touch-action:none;align-items:center;gap:12px;display:flex}.widget-head h2{color:var(--heading);font:500 16px/24px var(--font);flex:1;margin:0}.widget-head a{color:var(--text-secondary);display:flex}.widget-head a:hover{color:var(--accent-text)}.frame-box{position:relative}.frame-slot iframe{background:0 0;border:0;width:100%;display:block}.widget .frame-slot iframe{height:120px}.add-card{border:1px dashed var(--border);border-radius:var(--radius-lg);min-height:170px;color:var(--text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:8px;font-weight:500;display:flex}.add-card:hover{color:var(--accent-text);border-color:var(--accent-text)}.empty{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;display:flex}.empty h2{color:var(--heading);font:500 16px/24px var(--font);margin:0}.empty p{color:var(--text-secondary);margin:0}.icon-box{border-radius:var(--radius-lg);background:var(--panel);width:56px;height:56px;color:var(--text-secondary);place-items:center;display:grid}.module-area{flex:1;min-height:480px;display:flex;position:relative}.module-area .frame-box,.module-area .frame-slot{flex:1;display:flex}.module-area .frame-slot iframe{flex:1;min-height:480px}.frame-state{text-align:center;background:var(--canvas);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex;position:absolute;inset:0}.frame-state h2{color:var(--heading);font:500 16px/24px var(--font);margin:0}.frame-state p{color:var(--text-secondary);margin:0}.widget .frame-state{background:var(--panel);gap:8px}.frame-state .icon-box.danger{color:var(--danger)}.list{flex-direction:column;gap:16px;display:flex}.module-row{border-radius:var(--radius-lg);background:var(--panel);align-items:center;gap:16px;padding:20px;display:flex}.module-row .info{flex:1;min-width:0}.module-row h2{color:var(--heading);font:500 16px/24px var(--font);margin:0}.module-row p{margin:0}.module-row .meta{color:var(--text-secondary);font-size:12px;line-height:20px}.tag{background:var(--raised);color:var(--accent-text);font:500 11px/18px var(--font);border-radius:999px;padding:2px 10px}.cards{flex-direction:column;gap:24px;max-width:720px;display:flex}.card{border-radius:var(--radius-lg);background:var(--panel);flex-direction:column;gap:16px;padding:24px;display:flex}.card h2{color:var(--heading);font:500 16px/24px var(--font);margin:0}.card .hint{color:var(--text-secondary);margin:4px 0 0;font-size:12px;line-height:20px}.account{align-items:center;gap:12px;display:flex}.account p{margin:0}.method{align-items:center;gap:16px;padding:14px 16px;display:flex}.method+.method{border-top:1px solid var(--raised)}.method .icon-box{border-radius:var(--radius-sm);background:var(--raised);width:40px;height:40px;color:var(--heading)}.method .info{flex:1;min-width:0}.method .info p{margin:0}.method .detail{color:var(--text-secondary);font-size:12px;line-height:20px}.login{justify-content:center;align-items:center;min-height:100dvh;padding:72px 24px;display:flex;position:relative}.login .theme-switch{position:absolute;top:24px;right:40px}.login .footer{position:absolute;bottom:24px;left:40px}.login-card{border-radius:var(--radius-lg);background:var(--panel);flex-direction:column;gap:24px;width:440px;max-width:100%;padding:40px;display:flex}.login-card h1{color:var(--heading);font:600 18px/26px var(--font);margin:0}.login-card .lead{color:var(--text-secondary);margin:6px 0 0}.divider{color:var(--text-secondary);align-items:center;gap:12px;font-size:12px;display:flex}.divider:before,.divider:after{content:"";background:var(--raised);flex:1;height:1px}.field{flex-direction:column;gap:8px;display:flex}.field label{color:var(--text-secondary);font-size:12px;line-height:20px}.input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--canvas);height:44px;color:var(--text-primary);font:inherit;padding:0 14px}.input:focus{border-color:var(--focus);box-shadow:0 0 0 .5px var(--focus);outline:none}.code{gap:9px;display:flex}.code input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--canvas);width:52px;height:56px;color:var(--heading);font:600 18px/26px var(--font);text-align:center;padding:0}.code input:focus{border-color:var(--focus);box-shadow:0 0 0 .5px var(--focus);outline:none}.row-between{justify-content:space-between;align-items:center;gap:12px;display:flex}.dialog{border-radius:var(--radius-lg);background:var(--panel);width:420px;max-width:calc(100vw - 48px);color:var(--text-primary);border:0;padding:24px;box-shadow:0 16px 48px #00000059}.dialog::backdrop{background:var(--overlay)}.dialog .source{color:var(--text-secondary);font:500 11px/18px var(--font);margin:0}.dialog h2{color:var(--heading);font:600 18px/26px var(--font);margin:12px 0 0}.dialog p.message{margin:12px 0 0}.dialog .actions{justify-content:flex-end;gap:12px;padding-top:24px;display:flex}@media (width<=767px){.shell{grid-template-columns:minmax(0,1fr)}.sidebar{height:auto;position:static}.topbar,.content{padding-left:16px;padding-right:16px}}
