.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.login-page{background:var(--bg-gradient);place-items:center;min-height:100%;padding:1.5rem;display:grid}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:400px;box-shadow:var(--shadow-lg);padding:2rem 2rem 1.75rem;animation:.35s ease-out rise}.login-header{text-align:center;margin-bottom:1.5rem}.login-header .login-logo{width:44px;height:44px}.login-header h1{letter-spacing:-.01em;margin:.75rem 0 .15rem;font-size:1.35rem;font-weight:700}.login-header p{color:var(--text-muted);margin:0;font-size:.9rem}.login-form{flex-direction:column;gap:.9rem;display:flex}.login-form .login-submit{width:100%;margin-top:.25rem}.login-error{border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);padding:.6rem .8rem;font-size:.875rem}.login-divider{color:var(--text-muted);align-items:center;gap:.75rem;margin:1.25rem 0 1rem;font-size:.8rem;display:flex}.login-divider:before,.login-divider:after{content:"";background:var(--border);flex:1;height:1px}.google-button{justify-content:center;min-height:44px;display:flex}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.login-card{animation:none}}.app-frame{inset:var(--topbar-height) 0 0 0;background:var(--bg);position:fixed}.app-frame #app-iframe{background:var(--surface);border:0;width:100%;height:100%;display:block}.modal-backdrop{z-index:10;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#0a0c1473;place-items:center;padding:1.5rem;animation:.15s ease-out fade;display:grid;position:fixed;inset:0}.modal-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(720px,100%);max-height:100%;box-shadow:var(--shadow-lg);flex-direction:column;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:.9rem .9rem .9rem 1.25rem;display:flex}.modal-header h2{margin:0;font-size:1.05rem;font-weight:600}.modal-body{padding:1.25rem;overflow:auto}@keyframes fade{0%{opacity:0}to{opacity:1}}.top-bar{z-index:3;height:var(--topbar-height);background:var(--surface-translucent);-webkit-backdrop-filter:saturate(160%)blur(10px);backdrop-filter:saturate(160%)blur(10px);border-bottom:1px solid var(--border);box-shadow:var(--shadow-sm);justify-content:space-between;align-items:center;padding:0 .75rem 0 .5rem;display:flex;position:fixed;inset:0 0 auto}.top-bar .left,.top-bar .right{align-items:center;gap:.25rem;display:flex}.top-bar .brand{border-radius:var(--radius-sm);cursor:pointer;letter-spacing:-.01em;background:0 0;border:0;align-items:center;gap:.5rem;height:34px;padding:0 .5rem;font-weight:700;display:inline-flex}.top-bar .brand:hover{background:var(--accent-soft)}.top-bar .brand .brand-logo{width:22px;height:22px}.top-bar .user{color:var(--text-muted);align-items:center;gap:.5rem;margin-right:.25rem;font-size:.85rem;display:inline-flex}.top-bar .user .avatar{background:var(--accent-soft);width:26px;height:26px;color:var(--accent);border-radius:50%;place-items:center;font-size:.8rem;font-weight:700;display:inline-grid}.top-bar .user .username{text-overflow:ellipsis;white-space:nowrap;max-width:16rem;overflow:hidden}@media (width<=520px){.top-bar .brand-name,.top-bar .username{display:none}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--font-sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "PingFang SC", "Microsoft YaHei", sans-serif;--accent:#4f46e5;--accent-hover:#4338ca;--accent-soft:#4f46e51f;--on-accent:#fff;--bg:#f4f5f9;--bg-gradient:radial-gradient(1200px 600px at 10% -10%, #e0e7ff 0%, transparent 60%), radial-gradient(900px 500px at 110% 110%, #fce7f3 0%, transparent 55%), #f4f5f9;--surface:#fff;--surface-translucent:#ffffffd1;--border:#e4e6ee;--text:#171923;--text-muted:#6b7280;--danger:#dc2626;--danger-soft:#dc26261a;--shadow-sm:0 1px 2px #1018280f;--shadow-md:0 8px 24px #1018281a;--shadow-lg:0 24px 60px #10182829;--radius-sm:8px;--radius-md:12px;--radius-lg:18px;--topbar-height:44px;--focus-ring:0 0 0 3px var(--accent-soft)}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--accent:#818cf8;--accent-hover:#a5b4fc;--accent-soft:#818cf833;--on-accent:#0b0d17;--bg:#0f1117;--bg-gradient:radial-gradient(1200px 600px at 10% -10%, #6366f140 0%, transparent 60%), radial-gradient(900px 500px at 110% 110%, #ec48992e 0%, transparent 55%), #0f1117;--surface:#181b25;--surface-translucent:#181b25cc;--border:#2a2f3d;--text:#e6e8ef;--text-muted:#9aa1b2;--danger:#f87171;--danger-soft:#f8717124;--shadow-sm:0 1px 2px #0006;--shadow-md:0 8px 24px #00000073;--shadow-lg:0 24px 60px #0009}}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font-sans);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5}button,input{font:inherit;color:inherit}:focus-visible{box-shadow:var(--focus-ring);outline:none}.btn{border-radius:var(--radius-sm);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;height:42px;padding:0 1rem;font-weight:600;transition:background-color .15s,border-color .15s,transform 50ms;display:inline-flex}.btn:active{transform:translateY(1px)}.btn:disabled{cursor:default;opacity:.6;transform:none}.btn-primary{background:var(--accent);color:var(--on-accent)}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.icon-btn{width:34px;height:34px;color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:50%;justify-content:center;align-items:center;transition:background-color .15s,color .15s;display:inline-flex}.icon-btn:hover{background:var(--accent-soft);color:var(--text)}.icon-btn svg{width:20px;height:20px}.field{flex-direction:column;gap:.35rem;display:flex}.field label{color:var(--text-muted);font-size:.8rem;font-weight:600}.field input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);height:42px;padding:0 .85rem;transition:border-color .15s,box-shadow .15s}.field input::placeholder{color:var(--text-muted);opacity:.7}.field input:focus{border-color:var(--accent);box-shadow:var(--focus-ring)}.field input:disabled{opacity:.6}
