:root{--navy:#183355;--orange:#f8aa10;--cyan:#6ac6dd;--red:#e84b11}*{box-sizing:border-box}body,html{margin:0;height:100%;height:100dvh;overflow:hidden;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}a{color:inherit}.app{height:100%;height:100dvh;display:grid;grid-template-rows:64px 1fr;grid-template-columns:300px 1fr 330px;grid-template-areas:"top top top" "left main right";transition:background .8s,color .8s;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.app.day{--bg:#eef3f8;--panel:rgba(255,255,255,.86);--panel-solid:#ffffff;--chrome-bg:#ffffff;--text:#0f1c2e;--muted:#5b6b80;--line:rgba(24,51,85,.12);--sky-a:#7cc4ef;--sky-b:#d9f0fb;--wall-top:#f7f4ee;--wall-bot:#ebe5da;--side:#ddd5c8;--floor-a:#d6b98c;--floor-b:#c2a070;--floor-line:rgba(0,0,0,.08);--win-a:#8fd3f5;--win-b:#d8f1fd;--frame:#5b6b80;--slab:#183355;--rail:#cbbfae;--desk:#6b4f3a;--desk-top:#8a6a50;--lamp:#fff7d6;--facade:#22436d;--glass:#a9d9ef;--door:rgba(169,217,239,.85);--street:#4b5563;--street-line:#e5e7eb;--screen:#cfe8ff}.app.night{--bg:#070d1a;--panel:rgba(13,22,40,.88);--panel-solid:#10192c;--chrome-bg:#0d1628;--text:#e6edf7;--muted:#93a3ba;--line:rgba(255,255,255,.09);--sky-a:#050a18;--sky-b:#1b2a4a;--wall-top:#3a3550;--wall-bot:#2d2940;--side:#4a5f80;--floor-a:#4a3d32;--floor-b:#3a3027;--floor-line:rgba(255,255,255,.05);--win-a:#0b1530;--win-b:#22325a;--frame:#1b2236;--slab:#1a3154;--rail:#4a4560;--desk:#3d2c20;--desk-top:#57412f;--lamp:#ffd77a;--facade:#3d5a82;--glass:#f6d68a;--door:rgba(246,214,138,.75);--street:#1f2937;--street-line:#4b5563;--screen:#4ec1ff;--win-lit:#ffd36a;--win-dark:#152238;--ground-glow:rgba(255,186,80,.34)}.app{background:var(--bg);color:var(--text)}.app.preview{min-height:100dvh}.app.preview,.app.preview .tower-wrap{height:auto;overflow:visible}.app.preview .sky{position:absolute;inset:0;height:100%;margin:0}.app.preview .campus-stage{overflow:visible;height:auto}.topbar{grid-area:top;gap:24px;padding:env(safe-area-inset-top) 20px 0;min-height:calc(64px + env(safe-area-inset-top));background:var(--panel);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);z-index:5}.brand,.topbar{display:flex;align-items:center}.brand{gap:10px;min-width:300px}.logo{height:38px;width:auto}.title{font-weight:800;font-size:18px;letter-spacing:-.01em;white-space:nowrap}.dot-sep{color:var(--orange);margin-right:8px}.counters{display:flex;gap:10px;margin:0 auto}.ctr{display:flex;align-items:center;gap:8px;padding:7px 14px;border-radius:999px;background:var(--line);font-weight:800;font-size:16px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.ctr small{font-weight:600;font-size:12px;color:var(--muted)}.ctr i{width:9px;height:9px;border-radius:50%}.ctr.working i{background:#3b82f6;box-shadow:0 0 0 0 rgba(59,130,246,.6);animation:ping 1.6s infinite}.ctr.waiting i{background:var(--orange)}.ctr.error i{background:#dc2626}.ctr.resting i{background:#94a3b8}.right{gap:14px}.live,.right{display:flex;align-items:center}.live{gap:8px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:14px}.live .pulse{width:9px;height:9px;border-radius:50%;background:#22c55e;animation:ping 1.8s infinite}.live.off .pulse{background:#dc2626;animation:none}.toggle{display:flex;border:1px solid var(--line);background:var(--line);border-radius:999px;padding:3px;cursor:pointer;color:var(--text);font:inherit}.toggle span{padding:5px 11px;border-radius:999px;font-size:13px;font-weight:600;transition:background .3s,color .3s;color:var(--muted)}.toggle span.on{background:var(--navy);color:#fff}.night .toggle span.on{background:var(--orange);color:#1b1300}.logout{padding:7px 11px}.logout:hover,.panel-toggle{color:var(--text)}.panel-toggle{display:inline-flex;align-items:center;justify-content:center;flex:none;width:34px;height:34px;padding:0;border-radius:10px;border:1px solid var(--line);background:var(--line);cursor:pointer}.panel-toggle:hover{background:var(--panel-solid)}.panel-toggle svg{display:block}.app{transition:grid-template-columns .28s ease}.app.left-collapsed{grid-template-columns:0 1fr 330px}.app.right-collapsed{grid-template-columns:300px 1fr 0}.app.left-collapsed.right-collapsed{grid-template-columns:0 1fr 0}.app.left-collapsed .left,.app.right-collapsed .right-panel{overflow:hidden;padding:0;border:0;min-width:0;visibility:hidden;pointer-events:none}@keyframes ping{0%{box-shadow:0 0 0 0 rgba(34,197,94,.55)}80%,to{box-shadow:0 0 0 9px rgba(34,197,94,0)}}.panel{overflow-y:auto;padding:14px 16px calc(24px + env(safe-area-inset-bottom));background:var(--panel);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:2;scrollbar-width:thin}.left{grid-area:left;border-right:1px solid var(--line)}.right-panel{grid-area:right;border-left:1px solid var(--line);display:flex;flex-direction:column;gap:10px}.panel h3{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:18px 0 8px;display:flex;align-items:center;gap:8px}.panel h3:first-child{margin-top:4px}.pill{font-size:11px;padding:1px 8px;border-radius:999px;background:var(--line);color:var(--text);letter-spacing:0}.pill.warn{background:var(--orange);color:#241800}.pill.ok{background:#16a34a;color:#fff}.empty{color:var(--muted);font-size:13px;margin:2px 0}.floors-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px}.floors-list li{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;cursor:pointer;font-weight:600;font-size:14px;transition:background .25s,transform .25s}.floors-list li:hover{background:var(--line);transform:translateX(2px)}.floors-list li.active{background:var(--navy);color:#fff}.night .floors-list li.active{background:#23406a}.lvl{font-size:11px;font-weight:800;width:30px;text-align:center;padding:2px 0;border-radius:6px;background:var(--line)}.floors-list li.active .lvl{background:var(--orange);color:#241800}.dots{display:flex;gap:3px;margin-left:auto}.cnt{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:inherit;opacity:.7;width:16px;text-align:right}.sd{display:inline-block;width:8px;height:8px;border-radius:50%;background:#94a3b8;flex:none}.sd.st-working{background:#3b82f6}.sd.st-waiting_user{background:var(--orange)}.sd.st-error{background:#dc2626}.sd.st-done{background:#16a34a}.sd.st-none{background:transparent;border:1.5px dashed #94a3b8}.card{display:flex;align-items:center;gap:10px;padding:10px;border-radius:12px;background:var(--line);margin-bottom:6px;font-size:13px}.card.wait{border:1px solid rgba(248,170,16,.6);background:color-mix(in srgb,var(--orange) 22%,var(--panel-solid));animation:glow 2.4s ease-in-out infinite}.card .grow,.detail .grow{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:2px}.card em,.card span,.step{color:var(--text)}.card small{color:var(--muted);font-size:11px}.night .card small{color:#d0dae8}.card.small{display:grid;grid-template-columns:10px auto 1fr auto;grid-gap:8px;gap:8px}.card.small span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes glow{50%{box-shadow:0 0 0 4px rgba(248,170,16,.18)}}.btn{display:inline-block;text-decoration:none;background:var(--orange);color:#241800;font-weight:700;font-size:12px;padding:7px 11px;border-radius:9px;white-space:nowrap;transition:transform .2s,filter .2s}.btn:hover{transform:translateY(-1px);filter:brightness(1.05)}.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--text);align-self:flex-start}.routine{padding:8px 0;border-bottom:1px solid var(--line)}.rhead{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;margin-bottom:3px}.rhead i{width:10px;height:10px;border-radius:3px}.ritem{display:flex;flex-direction:column;font-size:12px;padding-left:18px;margin-top:2px}.ritem small{color:var(--muted)}.routine>.empty{padding-left:18px;font-size:12px}.log{list-style:none;padding:0;margin:0;font-size:12px}.log li{display:grid;grid-template-columns:38px 10px auto;grid-gap:4px 8px;gap:4px 8px;align-items:center;padding:6px 0;border-bottom:1px dashed var(--line);animation:slidein .5s ease both}.log time{color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.log span{grid-column:3/4;color:var(--muted)}.log b{font-size:12px}@keyframes slidein{0%{opacity:0;transform:translateY(-6px)}}.foot{color:var(--muted);font-size:11px;margin-top:14px}.detail{padding:12px;border-radius:14px;background:var(--line);display:flex;flex-direction:column;gap:8px;animation:slidein .45s ease both}.dtop{display:flex;align-items:center;gap:10px}.dtop b{font-size:15px}.status-pill{align-self:flex-start;font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;background:#94a3b8;color:#fff}.status-pill.st-working{background:#3b82f6}.status-pill.st-waiting_user{background:var(--orange);color:#241800}.status-pill.st-error{background:#dc2626}.status-pill.st-done{background:#16a34a}.status-pill.st-none{background:transparent;color:var(--muted);border:1px dashed var(--muted)}.step{margin:0;font-size:13px;line-height:1.4}dl{display:grid;grid-template-columns:auto 1fr;grid-gap:3px 10px;gap:3px 10px;margin:0;font-size:12px}dt{color:var(--muted)}dd{margin:0}.usage{margin-top:auto;padding:14px;border-radius:14px;background:var(--navy);color:#fff;box-shadow:0 10px 30px rgba(24,51,85,.25)}.night .usage{background:#13284a}.uhead{display:flex;justify-content:space-between;font-size:14px;margin-bottom:9px}.uhead span{font-weight:800;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.bar{height:10px;background:rgba(255,255,255,.18);overflow:hidden}.bar,.fill{border-radius:999px}.fill{height:100%;background:linear-gradient(90deg,var(--cyan),#3b82f6);transition:width 1.2s cubic-bezier(.2,.8,.2,1)}.fill.warm{background:linear-gradient(90deg,var(--orange),#f97316)}.fill.hot{background:linear-gradient(90deg,#f97316,#dc2626)}.usage small{display:block;margin-top:8px;opacity:.8;font-size:12px}.ubots{list-style:none;padding:0;margin:8px 0 0;font-size:12px}.ubots li{display:flex;justify-content:space-between}.tower-wrap{grid-area:main;position:relative;overflow:hidden;touch-action:none}.sky{position:absolute;inset:0;height:auto;margin:0;background:linear-gradient(180deg,var(--sky-a),var(--sky-b));transition:background 1s;pointer-events:none;overflow:hidden;z-index:0}.campus-stage{position:relative;z-index:1;width:100%;height:100%;overflow:hidden;cursor:-webkit-grab;cursor:grab}.campus-stage:active{cursor:-webkit-grabbing;cursor:grabbing}.moon,.sun{position:absolute;right:9%;top:9%;width:86px;height:86px;border-radius:50%;transition:transform 1.2s cubic-bezier(.3,.8,.3,1),opacity 1s}.sun{background:radial-gradient(circle,#fff6c8,#fbbf24 60%,rgba(251,191,36,0) 72%)}.moon{background:radial-gradient(circle at 35% 35%,#ffffff,#d6def0 60%);box-shadow:0 0 40px rgba(214,222,240,.4);width:60px;height:60px}.day .moon,.night .sun{opacity:0;transform:translateY(140px)}.cloud{position:absolute;height:26px;border-radius:999px;background:rgba(255,255,255,.85);filter:blur(1px);animation:drift linear infinite;transition:opacity 1s}.cloud:before{content:"";position:absolute;width:50%;height:180%;left:20%;bottom:20%;border-radius:50%;background:inherit}.cloud.c1{width:140px;top:14%;animation-duration:70s}.cloud.c2{width:90px;top:34%;animation-duration:95s;animation-delay:-40s}.cloud.c3{width:180px;top:62%;animation-duration:120s;animation-delay:-80s}.night .cloud{opacity:.07}@keyframes drift{0%{transform:translateX(-220px)}to{transform:translateX(110vw)}}.stars{position:absolute;inset:0;opacity:0;transition:opacity 1.2s;background-image:radial-gradient(1.5px 1.5px at 10% 20%,#fff,transparent),radial-gradient(1px 1px at 30% 70%,#fff,transparent),radial-gradient(1.5px 1.5px at 55% 15%,#fff,transparent),radial-gradient(1px 1px at 75% 45%,#fff,transparent),radial-gradient(1.2px 1.2px at 88% 80%,#fff,transparent),radial-gradient(1px 1px at 20% 90%,#fff,transparent),radial-gradient(1.4px 1.4px at 65% 85%,#fff,transparent),radial-gradient(1px 1px at 42% 40%,#fff,transparent);animation:twinkle 4s ease-in-out infinite}.night .stars{opacity:1}@keyframes twinkle{50%{filter:brightness(.6)}}.campus{position:relative;z-index:1;display:flex;flex-direction:row;align-items:flex-end;justify-content:safe flex-start;gap:24px;width:max-content;min-width:100%;min-height:100%;padding:40px 20px 24px;box-sizing:border-box;will-change:transform;opacity:0;--zoom:1;--label-scale:1}.campus.is-ready{opacity:1}.campus.is-animating{transition:transform .28s ease}@media (prefers-reduced-motion:reduce){.campus.is-animating{transition:none}}.building{flex:1 1 220px;min-width:240px;max-width:720px;display:flex;flex-direction:column}.building.hq{flex:1.65 1 320px;max-width:920px}.building .tower{width:100%;margin:0}.tower{position:relative;z-index:1;width:min(1000px,92%);margin:40px auto 0;display:flex;flex-direction:column}.billboard .blabel{display:block;color:#fff;font-weight:800;font-size:22px;letter-spacing:-.02em;line-height:1.15;text-align:center;max-width:260px;padding:4px 0}.billboard .blabel.long{font-size:16px;max-width:280px}.chrome{display:contents}.bldg-switcher,.dock,.floor-rail,.mob-section,.sheet-root{display:none}.bldg-nav{margin-bottom:10px}.bldg-nav-title{font-size:13px;font-weight:800;margin:4px 2px 6px}.floor-stations{display:none;list-style:none;margin:0;padding:8px 10px 12px;flex-direction:column;gap:8px;background:var(--facade)}.station-card{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;min-height:64px;border-radius:14px;background:var(--panel);color:var(--text);box-shadow:0 2px 8px rgba(0,0,0,.12);border:1px solid transparent;text-align:left;font:inherit;cursor:pointer}.station-card .grow{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;min-width:0;flex:1 1}.station-card b{font-size:15px;font-weight:700;line-height:1.2;margin-right:4px}.station-card em{font-style:normal;font-size:13px;color:var(--text);line-height:1.35;overflow-wrap:anywhere;flex:1 1 100%;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.station-card .status-pill{font-size:12px}.station-card.st-waiting_user{border-color:rgba(248,170,16,.65);background:color-mix(in srgb,var(--orange) 22%,var(--panel-solid))}.station-card.st-error{border-color:rgba(220,38,38,.45)}.station-card.st-working{border-color:rgba(59,130,246,.35)}.loading{padding:80px;text-align:center;font-weight:700;color:var(--muted)}.roof{display:flex;flex-direction:column;align-items:center}.billboard{background:var(--navy);border:3px solid var(--orange);border-radius:14px;padding:12px 34px;box-shadow:0 14px 40px rgba(0,0,0,.25);position:relative;animation:float 6s ease-in-out infinite;max-width:calc(100% - 8px);box-sizing:border-box}.billboard:after,.billboard:before{content:"";position:absolute;bottom:-26px;width:6px;height:26px;background:#334155}.billboard:before{left:25%}.billboard:after{right:25%}.billboard img{height:56px;width:auto;max-width:100%;display:block;object-fit:contain}.billboard.light{background:#fffdf8;border-color:var(--orange);padding:10px 14px}.billboard.light img{height:auto;max-height:44px;max-width:100%}.night .billboard{box-shadow:0 0 40px rgba(248,170,16,.35),0 14px 40px rgba(0,0,0,.4)}.night .billboard.light{box-shadow:0 0 24px rgba(255,255,255,.18),0 14px 40px rgba(0,0,0,.4)}.roof-slab{margin-top:26px;width:104%;height:18px;background:var(--slab);border-radius:6px 6px 0 0;box-shadow:inset 0 -2px 0 rgba(255,255,255,.15)}@keyframes float{50%{transform:translateY(-4px)}}.floor{background:var(--facade);padding:0 14px;cursor:pointer;transition:filter .6s,transform .6s cubic-bezier(.2,.8,.2,1)}.floor,.floor .room{position:relative}.room-svg{display:block;width:100%;height:auto}.floor:not(.sel){filter:saturate(.8) brightness(.93)}.floor.sel{transform:scale(1.015);z-index:2;filter:none}.floor.sel:after{content:"";position:absolute;inset:0;border:3px solid var(--orange);border-radius:4px;pointer-events:none;box-shadow:0 0 0 4px rgba(248,170,16,.18),0 20px 50px rgba(0,0,0,.25)}.floor-tag{position:absolute;left:24px;bottom:10px;z-index:3;display:flex;align-items:center;gap:8px;background:rgba(24,51,85,.88);color:#fff;font-weight:700;font-size:13px;padding:5px 11px 5px 5px;border-radius:999px;transform:scale(var(--label-scale));transform-origin:left bottom}.floor-tag span{background:var(--orange);color:#241800;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:800}.floor-tag em{font-style:normal;opacity:.65;font-weight:500;font-size:11px}.lobby{padding-bottom:0}.lobby .floor-tag{bottom:auto;top:22px;transform-origin:left top}.campus.is-overview .floor:not(.sel){filter:saturate(.92) brightness(.97)}.campus.is-overview .floor.sel{transform:none}.bubble{position:absolute;--bubble-scale:clamp(1,calc(1 / var(--zoom, 1)),2);transform:translate(-50%,-92%) scale(calc(.96 * var(--bubble-scale)));max-width:210px;min-width:120px;background:#fff;color:#0f1c2e;border-radius:12px;padding:6px 10px;font-size:12px;line-height:1.3;box-shadow:0 6px 18px rgba(0,0,0,.18);display:flex;flex-direction:column;gap:1px;z-index:3;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .18s ease,visibility .18s ease,transform .18s ease}.bubble:after{content:"";position:absolute;left:50%;bottom:-6px;width:12px;height:12px;background:inherit;transform:translateX(-50%) rotate(45deg);border-radius:2px}.bubble b{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:#64748b}.bubble span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.bubble.st-working b{color:#2563eb}.bubble.st-done b{color:#16a34a}.bubble.st-error b{color:#dc2626}.bubble.st-waiting_user{background:#fff4dc;box-shadow:0 0 0 2px var(--orange),0 6px 18px rgba(0,0,0,.2)}.bubble.st-waiting_user b{color:#b45309}.bubble.st-none{background:rgba(255,255,255,.7);color:#64748b;font-style:italic}.bubble.is-on{opacity:1;visibility:visible;transform:translate(-50%,-100%) scale(var(--bubble-scale))}.campus.zoom-dim{--label-scale:clamp(1,calc(1 / var(--zoom, 1)),1.8)}.campus.zoom-dim .floor-tag em{display:none}.campus.zoom-dim .nameplate{opacity:0}.campus.zoom-dim .bubble:not(.st-waiting_user){opacity:0;visibility:hidden}.bubble.compact{padding:3px 8px;min-width:0;max-width:148px;font-size:11px;border-radius:9px;gap:0}.bubble.compact b{font-size:9px;letter-spacing:.04em}.bubble.compact span{-webkit-line-clamp:1}@keyframes pop{0%{opacity:0;transform:translate(-50%,-80%) scale(.85)}}.avatar .bob{transform-box:fill-box;transform-origin:center bottom}.avatar.st-working .bob{animation:bob 1.1s ease-in-out infinite}.avatar.st-done .bob,.avatar.st-idle .bob{animation:breathe 4s ease-in-out infinite}.avatar.st-waiting_user .bob{animation:hop 1.6s cubic-bezier(.3,1.6,.5,1) infinite}.avatar.st-error .bob{animation:shake .5s ease-in-out infinite}.avatar.st-none{opacity:.55;filter:grayscale(.7)}.avatar .eyes{transform-box:fill-box;transform-origin:center;animation:blink 5s infinite}.avatar.st-working .pupil{animation:look 2.2s ease-in-out infinite}.antenna-tip{animation:tip 1.4s ease-in-out infinite}@keyframes bob{50%{transform:translateY(-3px) rotate(-1.5deg)}}@keyframes breathe{50%{transform:scale(1.025,.975)}}@keyframes hop{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-9px)}}@keyframes shake{25%{transform:translateX(-2px) rotate(-2deg)}75%{transform:translateX(2px) rotate(2deg)}}@keyframes blink{0%,94%,to{transform:scaleY(1)}97%{transform:scaleY(.1)}}@keyframes look{0%,to{transform:translateX(0)}40%{transform:translateX(1.6px)}70%{transform:translateX(-.6px)}}@keyframes tip{50%{opacity:.45}}.monitor .screen{fill:#0f172a;transition:fill .6s}.station.st-working .monitor .screen{fill:var(--screen)}.monitor .code{fill:transparent}.station.st-working .monitor .code{fill:#1e3a8a;animation:type 1.2s steps(4) infinite;transform-box:fill-box;transform-origin:left}.night .station.st-working .monitor .code{fill:#0b1a3a}.station.st-working .code.c2{animation-delay:.3s}.station.st-working .code.c3{animation-delay:.6s}.station.st-waiting_user .monitor .screen{fill:#fde7b0}.station.st-error .monitor .screen{fill:#fecaca}.station.st-done .monitor .screen{fill:#bbf7d0}@keyframes type{0%{transform:scaleX(.2)}to{transform:scaleX(1)}}.nameplate{font-size:14px;font-weight:700;fill:#f8f3ea;letter-spacing:.02em}.badge-wait{animation:badge 1.2s ease-in-out infinite}.badge-err,.badge-wait{transform-box:fill-box;transform-origin:center}.badge-err{animation:badge .8s ease-in-out infinite}@keyframes badge{50%{transform:scale(1.18)}}.zzz{fill:var(--muted);animation:zz 3s ease-in-out infinite}@keyframes zz{0%{opacity:0;transform:translateY(4px)}50%{opacity:.9}to{opacity:0;transform:translate(8px,-12px)}}.lamp ellipse{filter:drop-shadow(0 0 6px var(--lamp))}.night .street-lamp{filter:drop-shadow(0 0 16px #ffd77a) drop-shadow(0 0 28px rgba(255,180,70,.7))}.night .building{position:relative}.night .building:after{content:"";position:absolute;left:6%;right:6%;bottom:0;height:120px;background:radial-gradient(ellipse at 50% 88%,rgba(255,186,80,.4),rgba(255,186,80,.1) 45%,transparent 72%);pointer-events:none;z-index:2}.night .floor{box-shadow:inset 0 1px 0 rgba(255,236,200,.22),0 0 0 1px rgba(255,214,160,.38),0 8px 28px rgba(255,190,100,.18)}.night .roof-slab{box-shadow:inset 0 -2px 0 rgba(255,255,255,.15),0 0 18px rgba(255,200,120,.28)}.night .billboard .blabel,.night .billboard img{filter:none;image-rendering:auto}.night .ground-glow{pointer-events:none}.door{transition:transform 1s cubic-bezier(.3,.8,.3,1)}.lobby:hover .door.l{transform:translateX(-60px)}.lobby:hover .door.r{transform:translateX(60px)}.zoom-controls{position:absolute;right:16px;bottom:16px;z-index:6;align-items:flex-end;gap:6px}.zoom-box,.zoom-controls{display:flex;flex-direction:column}.zoom-box{align-items:stretch;background:var(--panel);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:14px;box-shadow:0 8px 24px rgba(0,0,0,.18);overflow:hidden;min-width:64px}.zoom-btn,.zoom-fit,.zoom-reset{font:inherit;color:var(--text);background:transparent;border:0;cursor:pointer}.zoom-btn{font-size:20px;font-weight:700;line-height:1;width:100%;height:36px;padding:0}.zoom-btn:hover,.zoom-fit:hover,.zoom-reset:hover{background:var(--line)}.zoom-pct{font-size:11px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-align:center;color:var(--muted);padding:2px 8px 4px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.zoom-fit{border:1px solid var(--line);font-size:12px;font-weight:700;padding:8px 12px;white-space:nowrap}.zoom-fit,.zoom-reset{background:var(--panel);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:999px;box-shadow:0 8px 24px rgba(0,0,0,.18)}.zoom-reset{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--line)}.zoom-reset svg{display:block}.toasts{position:fixed;top:76px;left:50%;transform:translateX(-50%);z-index:20;display:flex;flex-direction:column;gap:8px}.toast{display:flex;align-items:center;gap:12px;padding:10px 14px;background:#fff;color:#0f1c2e;border-radius:14px;border:2px solid var(--orange);box-shadow:0 16px 40px rgba(0,0,0,.25);animation:toastin .6s cubic-bezier(.2,1.3,.4,1) both,toastout .5s ease 8.5s forwards;min-width:360px}.toast div{display:flex;flex-direction:column;flex:1 1;font-size:13px}.toast span{color:#5b6b80}@keyframes toastin{0%{opacity:0;transform:translateY(-24px) scale(.95)}}@keyframes toastout{to{opacity:0;transform:translateY(-16px)}}@media (max-width:1400px){.campus{justify-content:flex-start}}@media (max-width:1200px){.app{grid-template-columns:270px 1fr;grid-template-areas:"top top" "left main"}.app.left-collapsed,.app.left-collapsed.right-collapsed{grid-template-columns:0 1fr}.app.right-collapsed{grid-template-columns:270px 1fr}.counters small,.panel-toggle.for-right,.right-panel{display:none}}@media (max-width:800px){body,html{overflow:auto}.app,body,html{overflow-x:hidden;height:auto;min-height:100dvh}.app{overflow-y:visible;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);padding-bottom:calc(64px + env(safe-area-inset-bottom))}.app,.chrome{display:flex;flex-direction:column}.chrome{position:-webkit-sticky;position:sticky;top:0;z-index:12;background:var(--chrome-bg);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}.topbar{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;grid-gap:8px;gap:8px;flex-wrap:nowrap;height:auto;min-height:52px;padding:calc(8px + env(safe-area-inset-top)) 12px 8px;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;border-bottom:0}.brand{min-width:auto;overflow:visible;gap:8px}.brand,.logo{flex-shrink:0}.logo{height:28px;width:92px;object-fit:contain;object-position:left center;display:block}.title{display:none}.counters{margin:0;gap:5px;flex-wrap:nowrap;justify-self:end;overflow:visible;min-width:0}.ctr{padding:5px 8px;font-size:13px;gap:5px;min-height:32px;flex-shrink:0}.ctr small{display:none}.right{margin:0;gap:6px;flex-shrink:0}.live{font-size:13px;gap:6px;white-space:nowrap}.live-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.logout-form{display:none}.toggle{min-height:44px}.toggle span{padding:8px 10px;font-size:13px}.toggle span em{display:none}.btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 14px;min-height:44px;font-size:14px}.left,.panel-toggle,.right-panel{display:none!important}.app.tab-office{height:100dvh;overflow:hidden}.tower-wrap{order:1;overflow:hidden;min-height:0;position:relative;flex:1 1;height:auto;touch-action:none;overscroll-behavior:none}.campus-stage{min-height:100%}.zoom-controls{right:10px;bottom:10px}.zoom-btn{height:40px}.zoom-fit{min-height:40px;padding:8px 12px}.zoom-reset{width:40px;height:40px}.app.tab-done .tower-wrap,.app.tab-more .tower-wrap,.app.tab-waiting .tower-wrap{display:none}.sky{position:absolute;inset:0;height:100%;margin:0}.campus{flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0;padding:12px 10px 20px;width:100%}.building,.building.hq{flex:none;width:100%;min-width:0;max-width:none}.campus .building:not(.is-shown){display:none}.campus.is-overview-layout{flex-direction:row;flex-wrap:wrap;align-items:flex-end;justify-content:center;gap:10px;padding:10px 8px 8px;min-height:100%}.campus.is-overview-layout .building,.campus.is-overview-layout .building.hq{display:flex;flex-grow:1;flex-shrink:1;flex-basis:calc(50% - 10px);width:calc(50% - 10px);min-width:140px;max-width:calc(50% - 10px)}.campus.is-overview-layout .building:not(.is-shown){display:flex}.campus.is-overview-layout .floor-stations{display:none}.campus.is-overview-layout .floor .room-svg{max-height:56px}.floor-stations{display:flex}.bubble{display:none}.lamp,.station,.station *{visibility:hidden}.floor{scroll-margin-top:8px;padding:0 8px}.floor.sel{transform:none}.floor.sel:after{border-radius:8px;border-width:2px;box-shadow:0 0 0 3px rgba(248,170,16,.16)}.floor .room-svg{max-height:80px}.floor-tag{position:static;margin:0;border-radius:0;width:100%;justify-content:flex-start;padding:8px 10px;font-size:14px;background:rgba(24,51,85,.94)}.floor-tag span{font-size:12px;padding:3px 8px}.floor-tag em{font-size:12px}.lobby .floor-tag{position:static}.billboard{padding:10px 16px}.billboard img{height:44px}.billboard.light img{max-height:40px}.nameplate{font-size:20px}.card small,.foot,.lvl,.panel h3,.pill,.status-pill{font-size:12px}.log,.log b,.ritem,.usage small,dl{font-size:13px}.empty{font-size:14px}.toasts{top:calc(8px + env(safe-area-inset-top) + 52px);width:calc(100% - 24px);max-width:420px;left:50%}.toast{min-width:0;width:100%}.app.tab-office .bldg-switcher,.bldg-switcher{display:flex}.app.tab-done .bldg-switcher,.app.tab-more .bldg-switcher,.app.tab-waiting .bldg-switcher{display:none}.bldg-switcher{gap:6px;padding:0 10px 8px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}.bldg-switcher::-webkit-scrollbar{display:none}.bldg-switcher button{flex:0 0 auto;font:inherit;font-size:14px;font-weight:700;color:var(--muted);background:var(--line);border:0;border-radius:999px;padding:8px 14px;min-height:40px;cursor:pointer;white-space:nowrap}.bldg-switcher button.on{background:var(--navy);color:#fff}.night .bldg-switcher button.on{background:#23406a;color:#fff}.floor-rail{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;border-top:1px solid var(--line);padding:8px 10px;scroll-padding-inline:10px;-webkit-mask-image:linear-gradient(90deg,#000 0,#000 calc(100% - 22px),transparent);mask-image:linear-gradient(90deg,#000 0,#000 calc(100% - 22px),transparent)}.floor-rail::-webkit-scrollbar{display:none}.floor-rail button{flex:0 0 auto;display:flex;align-items:center;gap:6px;font:inherit;font-size:13px;font-weight:650;color:var(--text);background:transparent;border:1px solid var(--line);border-radius:999px;padding:7px 10px;min-height:40px;cursor:pointer;white-space:nowrap}.floor-rail button span{font-size:12px;font-weight:800;background:var(--line);border-radius:999px;padding:2px 7px}.floor-rail button.on{background:var(--navy);color:#fff;border-color:transparent}.floor-rail button.on span{background:var(--orange);color:#241800}.night .floor-rail button.on{background:#23406a}.mob-section{order:1;border:0;min-height:50vh;padding:16px 16px 28px}.app.tab-done .mob-section,.app.tab-more .mob-section,.app.tab-waiting .mob-section{display:block}.card.as-btn{width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid transparent}.card.as-btn.small{border:0}.mob-acc{margin:8px 0 16px;border:1px solid var(--line);border-radius:14px;padding:4px 12px 10px}.mob-acc summary{font-size:15px;font-weight:800;padding:12px 4px;cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;min-height:44px}.mob-acc summary::-webkit-details-marker{display:none}.mob-acc summary:after{content:"▾";color:var(--muted);font-size:14px}.mob-acc:not([open]) summary:after{content:"▸"}.logout-more{margin-top:16px}.logout-more .logout{min-height:44px;width:100%;font-size:14px;padding:10px 14px}.dock{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:16;background:var(--chrome-bg);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-top:1px solid var(--line);padding:4px calc(6px + env(safe-area-inset-right)) calc(4px + env(safe-area-inset-bottom)) calc(6px + env(safe-area-inset-left))}.dock button{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;position:relative;min-height:52px;border:0;background:transparent;color:var(--muted);font:inherit;font-size:12px;font-weight:700;cursor:pointer;border-radius:12px}.dock button.on{color:var(--navy)}.night .dock button.on{color:var(--orange)}.dock-badge{position:absolute;top:4px;right:calc(50% - 22px);min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--orange);color:#241800;font-size:12px;line-height:16px;font-weight:800}.sheet-root{display:block;position:fixed;inset:0;z-index:20}.sheet-backdrop{position:absolute;inset:0;border:0;background:rgba(8,12,24,.45);cursor:pointer}.sheet{position:absolute;left:0;right:0;bottom:0;max-height:min(86dvh,720px);overflow:auto;background:var(--panel-solid);color:var(--text);border-radius:20px 20px 0 0;padding:8px 16px calc(20px + env(safe-area-inset-bottom));box-shadow:0 -16px 40px rgba(0,0,0,.25)}.sheet-handle{width:40px;height:4px;border-radius:999px;background:var(--line);margin:6px auto 10px}.sheet-close{position:absolute;top:12px;right:12px;border:0;background:var(--line);color:var(--text);font:inherit;font-size:14px;font-weight:700;padding:8px 12px;min-height:44px;border-radius:999px;cursor:pointer}.sheet .detail{margin-top:28px;background:transparent;padding:0}.sheet .btn{align-self:stretch;text-align:center}}@media (max-width:480px){.topbar{grid-template-columns:minmax(120px,1fr) auto;grid-template-areas:"brand right" "counters counters";gap:6px 10px;min-height:0;padding:calc(6px + env(safe-area-inset-top)) 12px 6px}.brand{grid-area:brand;min-width:110px}.logo{height:32px;width:105px}.right{grid-area:right}.counters{grid-area:counters;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:6px;gap:6px;justify-self:stretch;overflow:visible}.ctr{min-height:28px;padding:4px 6px;font-size:13px;justify-content:center}.toggle{min-height:40px}.toggle span{padding:6px 8px}.bldg-switcher{padding:0 10px 6px}.bldg-switcher button{min-height:36px;padding:6px 12px}.floor-rail{padding:6px 10px}.floor-rail button{min-height:36px;padding:6px 10px}.toasts{top:calc(6px + env(safe-area-inset-top) + 78px)}}@media (min-width:600px) and (max-width:800px){.title{display:block;font-size:15px}.logo{height:30px;width:98px}.live-text{position:static;width:auto;height:auto;clip:auto;overflow:visible}.floor-stations{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.campus{padding:16px 16px 24px}.bldg-switcher button{font-size:15px;padding:8px 16px}.floor .room-svg{max-height:96px}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation:none!important;transition:none!important}}.auth-page{min-height:100vh;display:grid;place-items:center;background:radial-gradient(1200px 600px at 20% 10%,#d9f0fb,transparent),linear-gradient(180deg,#eef3f8,#dfe8f2);padding:20px;overflow:auto;height:100vh}.auth-card{width:min(420px,100%);background:#fff;border-radius:20px;padding:32px;box-shadow:0 20px 60px rgba(24,51,85,.18);display:flex;flex-direction:column;gap:12px;color:#0f1c2e;animation:slidein .5s ease both}.auth-logo{width:190px;height:auto}.auth-card h1{margin:6px 0 0;font-size:22px;color:#183355}.auth-card p{margin:0 0 6px;color:#5b6b80;font-size:14px;line-height:1.5}.auth-card input{font:inherit;padding:12px 14px;border-radius:10px;border:1px solid #cbd5e1;outline:none;transition:border-color .2s,box-shadow .2s}.auth-card input:focus{border-color:#183355;box-shadow:0 0 0 3px rgba(24,51,85,.12)}.auth-card button{font:inherit;font-weight:700;padding:12px;border-radius:10px;border:0;background:#f8aa10;color:#241800;cursor:pointer;transition:transform .2s,filter .2s}.auth-card button:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.05)}.auth-card button:disabled{opacity:.6;cursor:default}.auth-card small{color:#5b6b80;font-size:12px}.auth-ok{background:#ecfdf5;color:#065f46}.auth-err,.auth-ok{border-radius:10px;padding:10px 12px;font-size:13px}.auth-err{background:#fef2f2;color:#991b1b}.logout{font:inherit;font-size:12px;font-weight:600;background:transparent;border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:6px 11px;cursor:pointer}.gate{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;background:linear-gradient(180deg,#0b1a33,#183355 55%,#0e2340);color:#fff;padding:max(32px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(32px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));position:relative;overflow:hidden}.skyline{position:absolute;inset:auto 0 0 0;height:180px;background:linear-gradient(#0e2340,#0e2340) 8% 100%/18px 70px no-repeat,linear-gradient(#122c4e,#122c4e) 16% 100%/40px 110px no-repeat,linear-gradient(#0e2340,#0e2340) 28% 100%/28px 80px no-repeat,linear-gradient(#16345a,#16345a) 40% 100%/52px 140px no-repeat,linear-gradient(#0e2340,#0e2340) 58% 100%/24px 90px no-repeat,linear-gradient(#122c4e,#122c4e) 70% 100%/46px 120px no-repeat,linear-gradient(#0e2340,#0e2340) 84% 100%/32px 75px no-repeat,linear-gradient(#16345a,#16345a) 94% 100%/44px 130px no-repeat;opacity:.85;pointer-events:none}.gate .gate-card{display:flex;flex-direction:column;align-items:stretch;position:relative;z-index:1;width:min(420px,100%);background:rgba(14,35,64,.88);border:2px solid #f8aa10;border-radius:20px;padding:36px 32px 32px;box-shadow:0 0 0 6px rgba(248,170,16,.12),0 30px 60px rgba(0,0,0,.35);text-align:center}.gate .logo{height:52px;width:auto;margin:0 auto 18px;display:block}.gate h1{margin:0 0 8px;font-size:22px;font-weight:800;letter-spacing:-.02em}.lede{margin:0 0 24px;color:#c9d6e8;font-size:14px;line-height:1.45}.gate form{display:flex;flex-direction:column;gap:8px;text-align:left}.gate label{font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#93a3ba}.gate input{font:inherit;font-size:16px;padding:12px 14px;min-height:44px;border-radius:10px;border:1px solid rgba(255,255,255,.18);background:#0b1a33;color:#fff;-webkit-text-size-adjust:100%}.gate input:focus{outline:2px solid #f8aa10;border-color:transparent}.gate button{margin-top:10px;font:inherit;font-weight:800;padding:12px 16px;min-height:44px;border:0;border-radius:10px;background:#f8aa10;color:#241800;cursor:pointer}.gate button:disabled{opacity:.7;cursor:wait}.notice{margin:0;padding:14px 16px;border-radius:12px;background:rgba(248,170,16,.14);border:1px solid rgba(248,170,16,.45);color:#fff4dc;font-size:14px;line-height:1.45}