:root,[data-theme=light]{--canvas: #f7f8fa;--panel: #ffffff;--line: #e6ebf0;--line2: #eef1f5;--thead: #fcfdfe;--field: #f7f8fa;--hov: #f4f6f8;--ink: #002033;--body: #37424f;--sec: #62687c;--ghost: #9aa3b1;--muted: #828998;--faint: #bcc4d0;--bd: #e1e6ec;--bdh: #b4bdc9;--brand: #0078d2;--brand-h: #0067b8;--brand-soft: rgba(0, 120, 210, .08);--onbrand: #ffffff;--ok: #15a33a;--warn: #f0a30a;--warnT: #b9770a;--err: #d6332b;--errB: #eb5757;--info: #0071b2;--violet: #7c5cbf;--err-soft: rgba(214, 51, 43, .06);--err-bd: rgba(214, 51, 43, .22);--glass: rgba(255, 255, 255, .82);--glass-ink: rgba(0, 32, 51, .65);--glassgrad: linear-gradient(to top, rgba(255, 255, 255, .95), transparent);--hero-bg: linear-gradient(135deg, #eef6fd, #f7fbfe);--hero-bd: #d3e6f7}[data-theme=dark]{--canvas: #0e151d;--panel: #151f29;--line: #233040;--line2: #1d2937;--thead: #18232f;--field: #0e151d;--hov: #1b2733;--ink: #e9eff5;--body: #c4cdd7;--sec: #93a1b0;--ghost: #677484;--muted: #7b8898;--faint: #4d5a69;--bd: #2b3a4b;--bdh: #48596c;--brand: #2f9ae8;--brand-h: #4dabee;--brand-soft: rgba(47, 154, 232, .14);--onbrand: #10161d;--ok: #2fbf59;--warn: #f0a30a;--warnT: #e3a63a;--err: #f0564e;--errB: #f0564e;--info: #3f9fd8;--violet: #a186d8;--err-soft: rgba(240, 86, 78, .1);--err-bd: rgba(240, 86, 78, .35);--glass: rgba(10, 16, 22, .72);--glass-ink: rgba(233, 239, 245, .75);--glassgrad: linear-gradient(to top, rgba(10, 16, 22, .92), transparent);--hero-bg: linear-gradient(135deg, #132435, #151f29);--hero-bd: #28455e}[data-fork=corporate]{--brand: #0078d2;--brand-h: #0067b8;--brand-soft: rgba(0, 120, 210, .09);--onbrand: #ffffff}[data-fork=government]{--brand: #2fa8c9;--brand-h: #4cbcd9;--brand-soft: rgba(47, 168, 201, .16);--onbrand: #10161d}[data-fork=stadiums]{--brand: #14894e;--brand-h: #0f723f;--brand-soft: rgba(20, 137, 78, .09);--onbrand: #ffffff}[data-fork=education]{--brand: #7c3aad;--brand-h: #692f95;--brand-soft: rgba(124, 58, 173, .09);--onbrand: #ffffff}[data-fork=publicspaces]{--brand: #d96c0b;--brand-h: #bd5d07;--brand-soft: rgba(217, 108, 11, .09);--onbrand: #ffffff}[data-fork=airports]{--brand: #e8b421;--brand-h: #f2c443;--brand-soft: rgba(232, 180, 33, .16);--onbrand: #10161d}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--canvas);color:var(--ink);font-family:Inter,system-ui,sans-serif;font-size:13.5px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#808c9b66;border-radius:8px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#808c9b99;background-clip:content-box}::-webkit-scrollbar-track{background:transparent}::selection{background:var(--brand-soft)}input::placeholder{color:var(--ghost)}button{font-family:inherit}@keyframes lvpulse{0%,to{opacity:1}50%{opacity:.3}}.app{display:flex;flex-direction:column;height:100vh;width:100%;overflow:hidden;background:var(--canvas);color:var(--ink)}.app-main{flex:1;overflow-y:auto;padding:24px 28px 56px}.hdr{flex:0 0 auto;height:60px;display:flex;align-items:center;gap:16px;padding:0 22px;background:var(--panel);border-bottom:1px solid var(--line)}.hdr-logo{display:flex;align-items:center;gap:10px}.hdr-logo-mark{width:30px;height:30px;border-radius:5px;background:var(--brand);color:var(--onbrand);display:flex;align-items:center;justify-content:center}.hdr-logo-name{font-size:15.5px;font-weight:700;letter-spacing:-.2px;color:var(--ink)}.hdr-env{display:flex;align-items:center;gap:7px;height:32px;padding:0 9px 0 11px;border:1px solid var(--bd);border-radius:4px;cursor:pointer;background:none;transition:border-color .2s ease}.hdr-env:hover{border-color:var(--bdh)}.hdr-env-dot{width:6px;height:6px;border-radius:50%;background:var(--ok)}.hdr-env-label{font-size:12.5px;font-weight:500;color:var(--body)}.hdr-spacer{flex:1}.hdr-search{display:flex;align-items:center;gap:9px;height:34px;width:250px;padding:0 12px;background:var(--field);border:1px solid var(--bd);border-radius:4px;color:var(--ghost);cursor:pointer;transition:border-color .2s ease}.hdr-search:hover{border-color:var(--bdh)}.hdr-search-text{font-size:13px;flex:1;text-align:left}.hdr-search-kbd{font-size:10.5px;font-weight:600;background:var(--panel);border:1px solid var(--bd);border-radius:3px;padding:1px 5px;color:var(--ghost)}.hdr-iconbtn{position:relative;width:34px;height:34px;display:flex;align-items:center;justify-content:center;background:none;border:1px solid var(--bd);border-radius:4px;cursor:pointer;color:var(--sec);transition:border-color .2s ease,color .2s ease}.hdr-iconbtn:hover{border-color:var(--bdh);color:var(--ink)}.hdr-badge{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--err);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;border:2px solid var(--panel)}.hdr-divider{width:1px;height:28px;background:var(--line)}.hdr-user{display:flex;align-items:center;gap:10px;cursor:pointer;padding:3px 6px 3px 3px;border:none;background:none;border-radius:4px;transition:background .2s ease}.hdr-user:hover{background:var(--hov)}.hdr-avatar{width:32px;height:32px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.hdr-user-meta{line-height:1.25;text-align:left}.hdr-user-name{font-size:12.5px;font-weight:600;color:var(--ink);white-space:nowrap}.hdr-user-role{font-size:11px;color:var(--ghost)}.tabs{flex:0 0 auto;display:flex;align-items:center;gap:0;padding:0 14px;background:var(--panel);border-bottom:1px solid var(--line)}.tab{display:flex;align-items:center;height:46px;padding:0 16px;font-size:13.5px;font-weight:500;color:var(--sec);border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;white-space:nowrap;text-decoration:none;transition:color .2s ease}.tab:hover{color:var(--ink)}.tab.active{font-weight:600;color:var(--ink);border-bottom-color:var(--brand)}.tabs-spacer{flex:1}.primary-action{display:flex;align-items:center;gap:7px;height:34px;padding:0 14px;background:var(--brand);color:var(--onbrand);border:none;border-radius:4px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background .2s ease}.primary-action:hover{background:var(--brand-h)}.tabular-nums{font-variant-numeric:tabular-nums}.hdr-usermenu{position:relative}.hdr-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20}.hdr-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:21;min-width:180px;padding:6px;background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:0 8px 24px #00203324}.hdr-menu-label{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--ghost);padding:6px 8px 4px}.hdr-menu-item{display:block;width:100%;text-align:left;padding:7px 8px;font-size:12.5px;color:var(--body);background:none;border:none;border-radius:4px;cursor:pointer;transition:background .15s ease}.hdr-menu-item:hover{background:var(--hov);color:var(--ink)}.hdr-menu-item.active{color:var(--brand);font-weight:600}.hdr-menu-sep{height:1px;margin:6px 4px;background:var(--line)}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--canvas);color:var(--ink)}.auth-loading{color:var(--sec);font-size:13px}.auth-card{width:100%;max-width:380px;padding:32px 28px 20px;background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:0 12px 40px #0020331a}.auth-logo{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:20px}.auth-title{font-size:18px;font-weight:700;letter-spacing:-.2px;text-align:center;color:var(--ink)}.auth-subtitle{margin-top:6px;font-size:12.5px;line-height:1.5;text-align:center;color:var(--sec)}.auth-form{margin-top:22px;display:flex;flex-direction:column;gap:14px}.auth-field{display:flex;flex-direction:column;gap:6px}.auth-label{font-size:12px;font-weight:500;color:var(--body)}.auth-input{height:36px;padding:0 11px;font-size:13px;color:var(--ink);background:var(--field);border:1px solid var(--bd);border-radius:4px;outline:none;transition:border-color .2s ease,box-shadow .2s ease}.auth-input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.auth-code{letter-spacing:4px;text-align:center;font-size:16px}.auth-btn{height:36px;margin-top:4px;font-size:13px;font-weight:600;color:var(--onbrand);background:var(--brand);border:none;border-radius:4px;cursor:pointer;transition:background .2s ease}.auth-btn:hover:not(:disabled){background:var(--brand-h)}.auth-btn:disabled{opacity:.6;cursor:default}.auth-link{font-size:12.5px;color:var(--brand);background:none;border:none;cursor:pointer;padding:2px}.auth-link:hover{color:var(--brand-h)}.auth-error{font-size:12.5px;color:var(--err);background:var(--err-soft);border:1px solid var(--err-bd);border-radius:4px;padding:8px 10px}.auth-hint{font-size:11.5px;color:var(--ghost);text-align:center}.auth-enroll{display:flex;flex-direction:column;align-items:center;gap:10px;padding:16px;background:var(--field);border:1px solid var(--line);border-radius:6px}.auth-enroll-title{font-size:12px;font-weight:600;color:var(--body)}.auth-qr{width:132px;height:132px;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--ghost);background:var(--panel);border:1px dashed var(--bd);border-radius:6px}.auth-enroll-hint{font-size:11.5px;line-height:1.5;text-align:center;color:var(--sec)}.auth-lang{display:flex;justify-content:center;gap:6px;margin-top:18px}.auth-lang-btn{font-size:11.5px;font-weight:600;color:var(--sec);background:none;border:1px solid var(--bd);border-radius:4px;padding:4px 10px;cursor:pointer;transition:border-color .2s ease,color .2s ease}.auth-lang-btn:hover{border-color:var(--bdh);color:var(--ink)}.auth-lang-btn.active{color:var(--brand);border-color:var(--brand)}.module-placeholder{background:var(--panel);border:1px dashed var(--bd);border-radius:4px;padding:48px 32px;text-align:center}.module-placeholder h2{font-size:14px;font-weight:600;color:var(--ink)}.module-placeholder p{font-size:12.5px;color:var(--ghost);margin-top:6px}
