:root{
  --bg:#070a11;--panel:#0d111b;--text:#eef2ff;--muted:#8993aa;--line:rgba(255,255,255,.09);
  --accent:#9bb5ff;--accent2:#79e4d7;--warm:#ffc980;--danger:#ff8797;--ok:#8fe0b1;
  --ease:cubic-bezier(.22,.78,.18,1);--safe-b:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",sans-serif}button,input,select{font:inherit}button,a{color:inherit}.noise{position:fixed;inset:0;pointer-events:none;z-index:50;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.7'/%3E%3C/svg%3E")}.aurora{position:fixed;border-radius:50%;filter:blur(90px);pointer-events:none;opacity:.2;transition:transform 1.4s var(--ease)}.aurora-a{width:55vw;height:55vw;background:#3557bb;left:-20vw;top:-22vw}.aurora-b{width:45vw;height:45vw;background:#08766e;right:-16vw;bottom:-20vw}.stars{position:fixed;inset:0;pointer-events:none;overflow:hidden}.star{position:absolute;width:2px;height:2px;border-radius:50%;background:white;opacity:.16;animation:twinkle 3.5s infinite alternate}.hud-top{position:fixed;z-index:30;left:clamp(18px,4vw,54px);right:clamp(18px,4vw,54px);top:18px;display:flex;align-items:center;justify-content:space-between;pointer-events:none}.hud-top>*{pointer-events:auto}.brand{display:flex;align-items:center;gap:10px;border:0;background:transparent;color:var(--text);padding:0;cursor:pointer;text-align:left}.brand-glyph{width:35px;height:35px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.16);border-radius:13px;background:rgba(255,255,255,.045);font-weight:800}.brand b{font-size:13px;display:block;letter-spacing:.02em}.brand small{display:block;color:var(--muted);font-size:10px;margin-top:2px}.hud-context{position:absolute;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:8px;color:var(--muted);font-size:11px;letter-spacing:.07em;text-transform:uppercase}.hud-context i{width:1px;height:12px;background:var(--line)}.online-dot{width:6px;height:6px;border-radius:50%;background:var(--ok);box-shadow:0 0 12px var(--ok)}.online-dot.off{background:var(--danger);box-shadow:0 0 12px var(--danger)}.hud-clock{font-variant-numeric:tabular-nums;font-size:18px;letter-spacing:.04em}
.world{position:fixed;inset:0;will-change:transform;transition:transform 950ms var(--ease);transform:translate3d(calc(var(--wx,0) * -100vw),calc(var(--wy,0) * -100vh),0)}.scene{position:absolute;left:calc(var(--sx) * 100vw);top:calc(var(--sy) * 100vh);width:100vw;height:100vh;padding:96px clamp(22px,5vw,74px) 104px;overflow:hidden;opacity:.32;transform:scale(.91);transition:opacity .8s var(--ease),transform .9s var(--ease);pointer-events:none}.scene.active{opacity:1;transform:scale(1);pointer-events:auto}.overline{font-size:10px;font-weight:750;letter-spacing:.22em;color:var(--accent);margin:0 0 12px;text-transform:uppercase}.scene-heading h2,.home-copy h1{font-size:clamp(34px,5vw,72px);font-weight:550;letter-spacing:-.055em;line-height:.95;margin:0}.scene-heading>p:last-child{max-width:620px;color:var(--muted);font-size:14px;line-height:1.6}.home-copy{position:absolute;left:clamp(22px,6vw,92px);top:15vh;z-index:5;max-width:min(42vw,560px)}.home-copy h1{font-size:clamp(40px,6.5vw,92px)}.context-sentence{color:#bbc3d7;font-size:clamp(14px,1.5vw,19px);line-height:1.65;max-width:520px;margin:20px 0}.context-action{border:0;border-bottom:1px solid rgba(255,255,255,.28);padding:8px 0;background:none;cursor:pointer;color:var(--text);font-size:13px;transition:.25s}.context-action:hover{border-color:white;letter-spacing:.02em}.context-action span{margin-left:8px}.emo-system{position:absolute;right:7vw;top:50%;transform:translateY(-51%);width:min(48vw,650px);aspect-ratio:1;display:grid;place-items:center}.emo-core{position:relative;width:43%;aspect-ratio:1;border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle at 40% 35%,rgba(255,255,255,.09),rgba(13,18,31,.86) 45%,rgba(6,8,15,.98) 74%);border:1px solid rgba(255,255,255,.12);box-shadow:0 0 90px rgba(94,128,255,.15),inset 0 0 35px rgba(255,255,255,.03);z-index:4}.emo-glow{position:absolute;inset:16%;border-radius:50%;background:radial-gradient(circle,rgba(110,145,255,.2),transparent 65%);filter:blur(18px);animation:breathe 5s ease-in-out infinite}.emo-canvas{width:72%;height:auto;image-rendering:auto;position:relative;z-index:2;filter:drop-shadow(0 0 14px rgba(255,255,255,.12))}.emo-label{position:absolute;bottom:14%;font-size:9px;letter-spacing:.4em;color:#67728e;margin-left:.4em}.orbit{position:absolute;border:1px solid rgba(255,255,255,.07);border-radius:50%;pointer-events:none}.orbit-outer{width:93%;height:93%;animation:spin 55s linear infinite}.orbit-mid{width:69%;height:69%;border-style:dashed;animation:spin 35s linear infinite reverse}.orbit-outer:before,.orbit-mid:before{content:"";position:absolute;width:5px;height:5px;border-radius:50%;background:var(--accent);left:48%;top:-3px;box-shadow:0 0 18px var(--accent)}.orbit-particle{position:absolute;width:3px;height:3px;background:white;border-radius:50%;opacity:.5}.particle-a{right:7%;top:43%;box-shadow:0 0 16px white}.particle-b{left:17%;bottom:13%;box-shadow:0 0 12px white}.orbit-node{position:absolute;z-index:6;border:0;background:rgba(8,12,21,.72);backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.09);border-radius:999px;min-width:126px;padding:12px 16px;color:var(--text);cursor:pointer;text-align:left;transition:transform .28s var(--ease),background .28s,border-color .28s}.orbit-node:hover{transform:scale(1.05);background:rgba(20,27,44,.86);border-color:rgba(155,181,255,.34)}.orbit-node b{font-size:12px;font-weight:650}.orbit-node small{display:block;color:var(--muted);font-size:9px;margin-top:3px;white-space:nowrap}.node-schedule{right:4%;top:18%}.node-transport{left:0;top:30%}.node-focus{right:-2%;bottom:24%}.node-attendance{left:8%;bottom:14%}.signal-strip{position:absolute;left:clamp(22px,6vw,92px);right:clamp(22px,6vw,92px);bottom:86px;display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);padding-top:16px;gap:26px}.signal{min-width:0}.signal span{display:block;font-size:8px;color:#626d85;letter-spacing:.22em;margin-bottom:5px}.signal strong{display:block;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.signal small{display:block;color:var(--muted);font-size:10px;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pocket-handle{position:absolute;z-index:12;right:clamp(22px,4vw,55px);bottom:88px;border:1px solid var(--line);background:rgba(12,16,26,.6);backdrop-filter:blur(12px);border-radius:999px;color:var(--muted);padding:9px 13px;cursor:pointer;font-size:10px;letter-spacing:.08em;text-transform:uppercase}.pocket-handle span{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--warm);margin-right:6px}.pocket{position:absolute;z-index:20;right:clamp(18px,4vw,55px);bottom:78px;width:min(390px,calc(100vw - 36px));max-height:62vh;padding:22px;border:1px solid rgba(255,255,255,.1);border-radius:28px;background:rgba(9,13,22,.92);backdrop-filter:blur(28px);box-shadow:0 30px 80px rgba(0,0,0,.45);transform:translateY(30px) scale(.94);opacity:0;pointer-events:none;transition:.38s var(--ease);overflow:auto}.pocket.open{transform:none;opacity:1;pointer-events:auto}.pocket-head{display:flex;justify-content:space-between;align-items:flex-start}.pocket-head span{font-size:9px;letter-spacing:.22em;color:var(--warm)}.pocket-head h2{font-size:22px;margin:5px 0 18px;letter-spacing:-.03em}.pocket-head button{border:0;background:none;color:var(--muted);font-size:24px;cursor:pointer}.task-form{display:flex;border-bottom:1px solid var(--line);padding-bottom:9px}.task-form input{flex:1;border:0;outline:0;background:none;color:white;min-width:0}.task-form button{width:34px;height:34px;border:0;border-radius:50%;background:#edf2ff;color:#111625;cursor:pointer}.task-list{padding:12px 0;display:grid;gap:4px}.task{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;padding:9px 0;color:#c7cede;font-size:12px}.task.done span{text-decoration:line-through;opacity:.45}.task button{border:0;background:none;color:#647089;cursor:pointer}.quick-row{display:flex;gap:8px;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:14px}.quick-row a{font-size:10px;color:#aeb8cc;text-decoration:none;border:1px solid var(--line);padding:7px 10px;border-radius:99px}
.scene-dock{position:fixed;z-index:35;left:50%;transform:translateX(-50%);bottom:calc(18px + var(--safe-b));display:flex;gap:5px;padding:5px;border:1px solid rgba(255,255,255,.09);border-radius:999px;background:rgba(9,12,20,.7);backdrop-filter:blur(22px);box-shadow:0 14px 50px rgba(0,0,0,.25)}.scene-dock button{border:0;background:transparent;color:#667089;border-radius:999px;padding:9px 12px;display:flex;align-items:center;gap:7px;cursor:pointer;transition:.25s}.scene-dock button.active{background:rgba(255,255,255,.08);color:#f1f4ff}.scene-dock i{font-style:normal;font-size:14px}.scene-dock span{font-size:10px;font-weight:650}.portal{position:fixed;z-index:29;width:24px;height:24px;border-radius:50%;pointer-events:none;opacity:0;background:radial-gradient(circle,rgba(161,184,255,.2),rgba(115,126,255,.08) 45%,transparent 70%);box-shadow:0 0 120px 50px rgba(90,120,255,.05)}
/* Schedule */.schedule-heading{position:absolute;left:6vw;top:14vh;max-width:54vw}.day-rail{position:absolute;left:6vw;top:42vh;display:flex;gap:8px;z-index:4}.day-rail button{border:0;border-bottom:1px solid rgba(255,255,255,.14);background:none;color:#667089;padding:8px 2px;margin-right:18px;cursor:pointer;font-size:11px}.day-rail button.active{color:white;border-color:var(--accent)}.course-track-wrap{position:absolute;left:6vw;right:29vw;bottom:15vh;height:25vh;overflow-x:auto;overflow-y:hidden;padding:35px 0 20px;scrollbar-width:none}.course-track-wrap::-webkit-scrollbar{display:none}.course-track-line{position:absolute;left:0;right:0;top:82px;height:1px;background:linear-gradient(90deg,rgba(155,181,255,.7),rgba(255,255,255,.07))}.course-track{display:flex;align-items:flex-start;gap:26px;min-width:max-content}.course-stop{width:155px;position:relative;border:0;background:none;color:var(--text);text-align:left;cursor:pointer;padding:0}.course-stop:after{content:"";position:absolute;top:43px;left:5px;width:9px;height:9px;border-radius:50%;background:#111725;border:2px solid #7886a8;box-shadow:0 0 0 5px rgba(120,134,168,.06);transition:.25s}.course-stop.online:after{border-color:var(--accent2)}.course-stop.active:after{background:var(--accent);border-color:white;box-shadow:0 0 25px var(--accent)}.course-stop time{font-size:11px;color:#8f9ab2;font-variant-numeric:tabular-nums}.course-stop strong{display:block;margin-top:49px;font-size:13px;line-height:1.25}.course-stop small{display:block;color:#6f7a91;font-size:9px;margin-top:5px}.course-inspector{position:absolute;right:5vw;top:30vh;width:min(22vw,330px);border-left:1px solid var(--line);padding-left:26px}.inspector-kicker{font-size:8px;letter-spacing:.2em;color:var(--accent)}.course-inspector h3{font-size:25px;letter-spacing:-.035em;margin:10px 0}.course-inspector p{color:var(--muted);font-size:12px;line-height:1.6}.inspector-meta{display:flex;gap:6px;flex-wrap:wrap;margin:18px 0}.inspector-meta span{font-size:9px;border:1px solid var(--line);border-radius:99px;padding:6px 8px;color:#9ca7bc}.study-note{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}.study-note b{font-size:10px}.study-note p{margin-top:7px}
/* Transport */.transport-heading{position:absolute;left:6vw;top:13vh;max-width:56vw}.route-visual{position:absolute;left:7vw;right:7vw;top:44vh;height:28vh}.route-horizon{position:absolute;left:-10%;right:-10%;top:50%;height:1px;background:linear-gradient(90deg,transparent,rgba(125,155,255,.12),transparent)}.route-line{position:absolute;left:4%;right:4%;top:52%;height:2px;background:linear-gradient(90deg,rgba(121,228,215,.18),rgba(155,181,255,.75),rgba(255,201,128,.2));transform:perspective(500px) rotateX(55deg);box-shadow:0 0 28px rgba(155,181,255,.12)}.route-line:before,.route-line:after{content:"";position:absolute;left:0;right:0;height:1px;background:rgba(255,255,255,.06)}.route-line:before{top:-18px}.route-line:after{top:18px}.route-bus{position:absolute;z-index:4;left:12%;top:-18px;width:38px;height:28px;border-radius:8px 8px 5px 5px;background:#edf2ff;color:#0b1020;display:grid;place-items:center;font-size:9px;font-style:normal;font-weight:900;transform:rotateX(-55deg);box-shadow:0 12px 30px rgba(126,150,255,.28);transition:left 1s var(--ease)}.route-stop{position:absolute;top:-42px;transform:rotateX(-55deg);display:grid;gap:2px;text-align:center}.route-stop:after{content:"";width:8px;height:8px;margin:7px auto 0;background:#0e1422;border:2px solid #9bb5ff;border-radius:50%}.route-stop b{font-size:10px}.route-stop small{font-size:8px;color:var(--muted)}.stop-a{left:10%}.stop-b{left:49%}.stop-c{right:8%}.next-arrival{position:absolute;right:2%;top:-50px;text-align:right}.next-arrival span{font-size:8px;letter-spacing:.2em;color:var(--muted)}.next-arrival strong{display:block;font-size:clamp(45px,7vw,92px);font-weight:450;letter-spacing:-.06em;line-height:.9;margin:7px 0}.next-arrival small{font-size:10px;color:#9aa5ba}.departures{position:absolute;left:7vw;bottom:12vh;display:flex;gap:24px;right:35vw;overflow:hidden}.departure{min-width:130px}.departure span{font-size:9px;color:var(--accent2);font-weight:800}.departure strong{display:block;font-size:15px;margin:6px 0}.departure small{font-size:9px;color:var(--muted)}.transport-tools{position:absolute;right:6vw;bottom:11vh;display:grid;gap:10px;justify-items:end}.transport-tools label{font-size:9px;color:var(--muted);display:grid;gap:5px}.transport-tools select{background:#0b101a;color:#dce3f5;border:1px solid var(--line);border-radius:10px;padding:8px 10px}.transport-tools a{font-size:10px;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.25);padding-bottom:4px}
/* Focus */.scene-focus{display:grid;grid-template-columns:1fr 1fr;align-items:center;padding-left:9vw;padding-right:9vw}.focus-lens{width:min(43vw,560px);aspect-ratio:1;border-radius:50%;position:relative;display:grid;place-items:center;border:1px solid rgba(255,255,255,.06);background:radial-gradient(circle at center,rgba(122,154,255,.08),transparent 58%)}.lens-ring{position:absolute;border-radius:50%;border:1px solid rgba(255,255,255,.08)}.ring-one{inset:11%;border-color:rgba(155,181,255,.18)}.ring-two{inset:23%;border-style:dashed;animation:spin 40s linear infinite}.ring-three{inset:34%;border-color:rgba(121,228,215,.13)}.focus-time{font-size:clamp(60px,9vw,122px);font-weight:350;letter-spacing:-.07em;font-variant-numeric:tabular-nums;position:relative;z-index:3}.focus-lens>span{position:absolute;top:67%;font-size:9px;letter-spacing:.3em;color:var(--muted)}.focus-lens>button{position:absolute;bottom:15%;border:1px solid var(--line);background:rgba(255,255,255,.045);color:white;border-radius:99px;padding:8px 17px;font-size:10px;cursor:pointer}.focus-copy{max-width:470px}.focus-copy h2{font-size:clamp(36px,5vw,67px);font-weight:500;letter-spacing:-.05em;line-height:.95;margin:0 0 22px}.focus-copy>p:last-of-type{font-size:14px;line-height:1.7;color:#a7b0c5}.focus-presets{display:flex;gap:8px;margin-top:25px;flex-wrap:wrap}.focus-presets button{border:1px solid var(--line);background:transparent;color:#7f8aa2;border-radius:99px;padding:8px 12px;font-size:10px;cursor:pointer}.focus-presets button.active{color:white;border-color:rgba(155,181,255,.5);background:rgba(155,181,255,.08)}.focus-status{position:absolute;bottom:90px;left:50%;transform:translateX(-50%);color:#657088;font-size:10px;letter-spacing:.04em;text-align:center}
/* Attendance */.attendance-heading{position:absolute;left:7vw;top:14vh;max-width:58vw}.attendance-orbit{position:absolute;left:7vw;bottom:12vh;width:260px;aspect-ratio:1;border-radius:50%;display:grid;place-items:center}.attendance-ring{position:absolute;inset:0;border:1px dashed rgba(255,255,255,.12);border-radius:50%;animation:spin 45s linear infinite}.attendance-ring:after{content:"";position:absolute;left:49%;top:-4px;width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 20px var(--ok)}.attendance-core{text-align:center}.attendance-core strong{font-size:60px;font-weight:430;letter-spacing:-.06em}.attendance-core span{display:block;color:var(--muted);font-size:9px}.attendance-stream{position:absolute;left:38vw;right:7vw;top:29vh;bottom:12vh;overflow:auto;scrollbar-width:none}.attendance-stream::-webkit-scrollbar{display:none}.attendance-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:18px;padding:14px 0;border-bottom:1px solid var(--line)}.attendance-row b{font-size:13px;font-weight:560}.attendance-row small{display:block;color:var(--muted);font-size:9px;margin-top:4px}.attendance-pct{font-size:20px;font-variant-numeric:tabular-nums}.attendance-row.warn .attendance-pct{color:var(--warm)}.attendance-row.danger .attendance-pct{color:var(--danger)}.attendance-step{display:flex;border:1px solid var(--line);border-radius:99px;overflow:hidden}.attendance-step button{width:29px;height:29px;border:0;background:transparent;color:#94a0b7;cursor:pointer}.attendance-step button+button{border-left:1px solid var(--line)}
.intro{position:fixed;z-index:100;inset:0;background:#05070c;display:grid;place-items:center;transition:opacity .8s var(--ease),visibility .8s}.intro.hide{opacity:0;visibility:hidden}.intro-ring{position:absolute;width:270px;height:270px;border:1px solid rgba(255,255,255,.08);border-radius:50%;animation:introPulse 1.7s ease-out infinite}.intro-emo{width:190px}.intro>span{position:absolute;top:66%;font-size:9px;letter-spacing:.42em;color:#5f6980}.empty{color:var(--muted);font-size:11px;padding:22px 0}.mode-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--accent2);margin-right:5px}.mode-dot.physical{background:var(--warm)}
@keyframes spin{to{transform:rotate(360deg)}}@keyframes breathe{50%{transform:scale(1.12);opacity:.7}}@keyframes twinkle{to{opacity:.5;transform:scale(1.7)}}@keyframes introPulse{0%{transform:scale(.7);opacity:.1}70%{opacity:.5}100%{transform:scale(1.3);opacity:0}}
@media(max-width:900px){.hud-context{display:none}.scene{padding-left:20px;padding-right:20px}.home-copy{top:12vh;left:22px;right:22px;max-width:none}.home-copy h1{font-size:44px}.context-sentence{max-width:82vw}.emo-system{width:78vw;right:-8vw;top:57%}.node-schedule{right:7%;top:12%}.node-transport{left:3%;top:33%}.node-focus{right:0;bottom:23%}.node-attendance{left:9%;bottom:10%}.signal-strip{left:22px;right:22px;bottom:84px;gap:12px}.signal strong{font-size:11px}.pocket-handle{bottom:132px}.schedule-heading,.transport-heading,.attendance-heading{left:22px;top:12vh;max-width:88vw}.scene-heading h2{font-size:42px}.day-rail{left:22px;top:33vh;right:20px;overflow-x:auto}.course-track-wrap{left:22px;right:22px;bottom:25vh;height:26vh}.course-inspector{left:22px;right:22px;top:auto;bottom:9vh;width:auto;border-left:0;border-top:1px solid var(--line);padding:14px 0 0;max-height:16vh;overflow:auto}.course-inspector h3{font-size:18px;margin:5px 0}.course-inspector p{font-size:10px;margin:4px 0}.route-visual{left:22px;right:22px;top:42vh}.departures{left:22px;right:22px;bottom:18vh}.transport-tools{right:22px;bottom:9vh}.scene-focus{grid-template-columns:1fr;padding:100px 22px 92px;align-content:center;gap:24px}.focus-lens{width:min(78vw,420px);justify-self:center}.focus-copy{max-width:none}.focus-copy h2{font-size:36px}.focus-status{bottom:78px}.attendance-orbit{left:22px;bottom:auto;top:33vh;width:180px}.attendance-core strong{font-size:44px}.attendance-stream{left:42vw;right:22px;top:32vh;bottom:11vh}.attendance-row{grid-template-columns:1fr auto;gap:8px}.attendance-step{grid-column:1/-1;justify-self:start}.scene-dock span{display:none}.scene-dock button{padding:10px 13px}.scene-dock i{font-size:16px}}
@media(max-width:600px){.brand small{display:none}.home-copy{top:13vh}.context-sentence{font-size:13px}.emo-system{width:92vw;right:-20vw;top:59%}.emo-core{width:45%}.orbit-node{min-width:108px;padding:10px 12px}.node-transport{left:-1%}.signal-strip{grid-template-columns:1fr 1fr;bottom:79px}.signal-weather{display:none}.pocket-handle{bottom:126px}.schedule-heading h2,.transport-heading h2,.attendance-heading h2{font-size:35px}.day-rail{top:31vh}.course-track-wrap{top:39vh;bottom:auto;height:25vh}.course-inspector{bottom:9vh;max-height:18vh}.route-visual{top:39vh}.next-arrival{top:-20px}.next-arrival strong{font-size:54px}.departures{bottom:20vh;gap:14px}.departure{min-width:105px}.transport-tools{bottom:9vh}.focus-copy>p:last-of-type{font-size:12px}.attendance-orbit{top:30vh;width:145px}.attendance-stream{left:46vw;top:29vh}.attendance-row b{font-size:11px}.attendance-pct{font-size:16px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

/* =========================
   v4 — EMO alive / spatial polish
   ========================= */
.sky-events,.celestial-glow{position:fixed;inset:0;pointer-events:none;overflow:hidden}
.sky-events{z-index:0}.celestial-glow{z-index:0;opacity:.42;background:radial-gradient(circle at 62% 38%,rgba(80,105,180,.08),transparent 28%),radial-gradient(circle at 24% 75%,rgba(39,117,110,.05),transparent 24%)}
.shooting-star{position:absolute;width:130px;height:1px;opacity:0;background:linear-gradient(90deg,rgba(255,255,255,.95),rgba(163,190,255,.35),transparent);filter:drop-shadow(0 0 4px rgba(200,220,255,.55));transform:rotate(var(--shoot-angle,-28deg)) translateX(-20px);animation:shoot 1.55s ease-out forwards;transform-origin:left center}
.shooting-star.large{width:220px;height:1.5px;filter:drop-shadow(0 0 7px rgba(210,225,255,.65))}
.distant-planet{position:absolute;width:min(34vw,420px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 34% 28%,rgba(185,202,255,.2),rgba(47,56,86,.16) 32%,rgba(12,16,28,.22) 58%,rgba(4,7,13,.8) 72%);box-shadow:inset -34px -25px 70px rgba(0,0,0,.55),0 0 80px rgba(91,118,198,.08);opacity:.45;filter:blur(.15px);animation:planetDrift 26s ease-in-out infinite alternate}
.distant-planet:after{content:"";position:absolute;inset:42% -22%;height:7%;border:1px solid rgba(188,201,242,.13);border-radius:50%;transform:rotate(-11deg);box-shadow:0 0 24px rgba(151,175,234,.05)}
.nebula-cloud{position:absolute;width:62vw;height:44vh;border-radius:50%;background:radial-gradient(ellipse at center,rgba(89,104,186,.09),rgba(25,80,93,.055) 35%,transparent 70%);filter:blur(34px);opacity:.72;animation:nebulaFloat 18s ease-in-out infinite alternate}
.supernova{position:absolute;width:7px;height:7px;border-radius:50%;opacity:.45;background:#fff;box-shadow:0 0 14px rgba(255,255,255,.85),0 0 38px rgba(152,183,255,.45);transition:none}
.supernova:before,.supernova:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.04);width:180px;height:180px;border-radius:50%;border:1px solid rgba(205,220,255,.7);opacity:0}
.supernova.ignite{animation:supernovaFlash 4.8s ease-out forwards}
.supernova.ignite:before{animation:shockwave 4.2s .15s ease-out forwards}.supernova.ignite:after{width:330px;height:330px;border-color:rgba(125,151,225,.22);animation:shockwave 4.5s .45s ease-out forwards}
.comet{position:absolute;right:-20vw;width:260px;height:2px;background:linear-gradient(90deg,transparent,rgba(137,173,255,.12),rgba(255,255,255,.86));filter:drop-shadow(0 0 6px rgba(186,208,255,.45));transform:rotate(-15deg);animation:cometPass 9s 1.2s cubic-bezier(.17,.65,.25,1) forwards;opacity:0}
.comet:after{content:"";position:absolute;right:-3px;top:-2px;width:6px;height:6px;border-radius:50%;background:#fff;box-shadow:0 0 16px 5px rgba(185,205,255,.28)}
@keyframes shoot{0%{opacity:0;transform:rotate(var(--shoot-angle)) translateX(0)}8%{opacity:1}100%{opacity:0;transform:rotate(var(--shoot-angle)) translateX(-430px)}}
@keyframes planetDrift{to{transform:translate3d(16px,-9px,0) scale(1.025)}}
@keyframes nebulaFloat{to{transform:translate3d(3vw,-2vh,0) scale(1.08) rotate(5deg)}}
@keyframes supernovaFlash{0%{opacity:.45;transform:scale(1)}7%{opacity:1;transform:scale(3);box-shadow:0 0 24px 7px white,0 0 90px 35px rgba(146,176,255,.42)}30%{opacity:.8;transform:scale(1.4)}100%{opacity:.08;transform:scale(.9);box-shadow:0 0 28px rgba(170,195,255,.2)}}
@keyframes shockwave{0%{opacity:.8;transform:translate(-50%,-50%) scale(.05)}100%{opacity:0;transform:translate(-50%,-50%) scale(2.6)}}
@keyframes cometPass{0%{opacity:0;transform:translate3d(0,0,0) rotate(-15deg)}8%{opacity:.75}85%{opacity:.6}100%{opacity:0;transform:translate3d(-145vw,55vh,0) rotate(-15deg)}}

/* Home is now actually centered around EMO. All orbit nodes stay inside the viewport. */
.home-copy{top:14vh;max-width:min(35vw,510px)}
.home-copy h1{font-size:clamp(38px,5.4vw,78px)}
.context-sentence{max-width:470px}
.emo-system{left:50%;right:auto;top:52%;transform:translate(-50%,-50%);width:min(54vw,68vh,680px);max-width:calc(100vw - 90px)}
.emo-core{cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none;outline:none;transition:transform .26s var(--ease),border-color .3s,box-shadow .3s}
.emo-core:focus-visible{border-color:rgba(155,181,255,.58);box-shadow:0 0 0 3px rgba(155,181,255,.1),0 0 90px rgba(94,128,255,.17)}
.emo-core:hover{transform:scale(1.018)}
.emo-label{bottom:11%;font-size:8px;letter-spacing:.23em;margin-left:.23em;white-space:nowrap}
.emo-whisper{position:absolute;z-index:8;right:-17%;top:4%;width:min(205px,26vw);padding:12px 14px;border-left:1px solid rgba(155,181,255,.24);background:linear-gradient(90deg,rgba(10,14,24,.56),transparent);backdrop-filter:blur(7px);pointer-events:none}
.emo-whisper span{display:block;color:#7281a2;font-size:8px;font-weight:800;letter-spacing:.22em;margin-bottom:6px}
.emo-whisper p{margin:0;color:#b7c0d3;font-size:10px;line-height:1.52}
.emo-touch-ripple{position:absolute;inset:12%;border-radius:50%;border:1px solid rgba(255,255,255,0);pointer-events:none;transition:.25s}
.emo-touch-ripple.petting{border-color:rgba(157,197,255,.18);box-shadow:0 0 24px rgba(110,160,255,.12),inset 0 0 25px rgba(255,255,255,.025);animation:petPulse .7s ease-in-out infinite alternate}
.emo-core.mood-pop{animation:moodPop .42s var(--ease)}
.emo-core.emo-shake{animation:emoShake .48s ease-in-out}
body[data-emo-mood="happy"] .emo-glow,body[data-emo-mood="loved"] .emo-glow{background:radial-gradient(circle,rgba(99,194,185,.22),transparent 65%)}
body[data-emo-mood="grumpy"] .emo-glow{background:radial-gradient(circle,rgba(192,104,116,.18),transparent 65%)}
body[data-emo-mood="sad"] .emo-glow{background:radial-gradient(circle,rgba(92,120,186,.16),transparent 65%)}
body[data-emo-mood="excited"] .emo-glow{animation-duration:2.4s;background:radial-gradient(circle,rgba(120,157,255,.28),transparent 65%)}
body[data-emo-mood="sleepy"] .emo-glow{opacity:.6;animation-duration:7s}
@keyframes petPulse{to{transform:scale(1.08);opacity:.52}}
@keyframes moodPop{0%{transform:scale(1)}42%{transform:scale(1.055)}100%{transform:scale(1)}}
@keyframes emoShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-6px) rotate(-1deg)}40%{transform:translateX(6px) rotate(1deg)}60%{transform:translateX(-4px)}80%{transform:translateX(3px)}}

.node-schedule{right:5%;top:21%}.node-transport{left:3%;top:32%}.node-focus{right:3%;bottom:25%}.node-attendance{left:8%;bottom:16%}
.course-stop.practice{border-color:rgba(121,228,215,.12)}
.mode-dot.online{background:var(--accent)}.mode-dot.practice{background:var(--accent2)}.mode-dot.physical{background:var(--warm)}

/* Tablet landscape — designed around 4:3 / 3:2 / 16:10 Android tablets. */
@media (min-width:700px) and (max-width:1200px) and (orientation:landscape){
  .hud-top{left:28px;right:28px;top:16px}.brand small{display:none}.hud-clock{font-size:16px}
  .home-copy{left:30px;top:13vh;max-width:31vw}.home-copy h1{font-size:clamp(35px,4.6vw,50px)}.context-sentence{font-size:12px;line-height:1.55;margin:14px 0;max-width:31vw}.context-action{font-size:11px}
  .emo-system{top:50%;width:min(50vw,65vh,560px);max-width:none}.emo-core{width:42%}.orbit-node{min-width:112px;padding:10px 12px}.orbit-node b{font-size:11px}.orbit-node small{font-size:8px}
  .emo-whisper{right:-19%;top:2%;width:180px}.emo-whisper p{font-size:9px}
  .signal-strip{left:30px;right:30px;bottom:78px;gap:18px}.signal strong{font-size:11px}.signal small{font-size:9px}.pocket-handle{right:30px;bottom:121px}
  .schedule-heading,.transport-heading,.attendance-heading{left:30px;top:12vh;max-width:52vw}.scene-heading h2{font-size:clamp(34px,4.5vw,48px)}.scene-heading>p:last-child{font-size:12px}
  .day-rail{left:30px;top:36vh}.course-track-wrap{left:30px;right:28vw;bottom:13vh;height:34vh}.course-inspector{right:28px;top:27vh;width:24vw}
  .route-visual{left:30px;right:30px;top:40vh}.departures{left:30px;bottom:12vh;right:34vw}.transport-tools{right:30px;bottom:10vh}
  .scene-focus{padding-left:6vw;padding-right:6vw;grid-template-columns:1.05fr .95fr}.focus-lens{width:min(47vw,58vh)}.focus-copy h2{font-size:38px}
  .attendance-orbit{left:5vw;bottom:13vh;width:min(25vw,210px)}.attendance-stream{left:35vw;right:30px;top:27vh;bottom:11vh}
}

/* Tablet portrait keeps EMO central while putting copy above it. */
@media (min-width:650px) and (max-width:1100px) and (orientation:portrait){
  .home-copy{left:34px;right:34px;top:10vh;max-width:82vw}.home-copy h1{font-size:48px}.context-sentence{max-width:70vw;font-size:13px;margin:14px 0}.context-action{font-size:11px}
  .emo-system{left:50%;right:auto;top:56%;width:min(82vw,52vh,620px);max-width:none}.emo-whisper{right:-4%;top:2%;width:190px}.orbit-node{min-width:116px;padding:10px 12px}
  .signal-strip{left:34px;right:34px;bottom:88px}.pocket-handle{right:34px;bottom:135px}
  .schedule-heading,.transport-heading,.attendance-heading{left:34px;top:10vh;max-width:80vw}.day-rail{left:34px;top:28vh}.course-track-wrap{left:34px;right:34px;top:36vh;height:28vh}.course-inspector{left:34px;right:34px;bottom:10vh;top:auto;width:auto;max-height:20vh}
  .route-visual{left:34px;right:34px;top:37vh}.departures{left:34px;right:34px;bottom:19vh}.transport-tools{right:34px;bottom:10vh}
  .scene-focus{grid-template-columns:1fr;padding:88px 34px 92px;align-content:center}.focus-lens{width:min(70vw,46vh);justify-self:center}.focus-copy{max-width:80vw}.focus-copy h2{font-size:42px}
  .attendance-orbit{left:34px;top:30vh;width:190px}.attendance-stream{left:38vw;right:34px;top:29vh;bottom:11vh}
}

/* Phones: preserve the spatial feel without throwing orbit controls off-screen. */
@media (max-width:699px){
  .home-copy{top:11vh;left:20px;right:20px;max-width:none}.home-copy h1{font-size:39px}.context-sentence{max-width:88vw;font-size:12px;line-height:1.5;margin:12px 0}
  .emo-system{left:50%;right:auto;top:57%;transform:translate(-50%,-50%);width:min(94vw,53vh,480px);max-width:none}.emo-core{width:43%}.orbit-node{min-width:101px;padding:9px 10px}.orbit-node b{font-size:10px}.orbit-node small{font-size:7.5px}.node-schedule{right:4%;top:20%}.node-transport{left:2%;top:33%}.node-focus{right:2%;bottom:24%}.node-attendance{left:7%;bottom:15%}
  .emo-whisper{right:0;top:-4%;width:150px;padding:9px 10px}.emo-whisper p{font-size:8.5px}.emo-whisper span{font-size:7px}
  .signal-strip{left:20px;right:20px;bottom:78px;gap:10px}.pocket-handle{right:20px;bottom:124px}
}

@media (max-height:650px) and (orientation:landscape){
  .home-copy{top:12vh}.home-copy h1{font-size:34px}.context-sentence{font-size:11px;margin:10px 0}.emo-system{top:51%;width:min(48vw,67vh)}.emo-whisper{top:0}.signal-strip{bottom:70px;padding-top:10px}.pocket-handle{bottom:110px}.scene-dock{bottom:10px}
}


/* v5 polish */
html,body,button,a,select,canvas,div{ -webkit-tap-highlight-color: transparent; }
body{ -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; }
input,textarea{ -webkit-user-select:text; user-select:text; }
*:focus{ outline:none; }
::selection{ background:transparent; }
:root{ --bg:#09101b; --panel:#101827; --muted:#95a2c0; --line:rgba(255,255,255,.11); }
.aurora{opacity:.34; filter:blur(86px)}
.aurora-a{background:radial-gradient(circle at 35% 35%, rgba(104,138,255,.8), rgba(73,99,203,.25) 55%, transparent 76%);}
.aurora-b{background:radial-gradient(circle at 40% 40%, rgba(65,210,192,.55), rgba(17,115,111,.18) 50%, transparent 72%);}
.star{box-shadow:0 0 8px rgba(255,255,255,.22);}
.celestial-glow{opacity:.72;background:radial-gradient(circle at 68% 30%,rgba(105,132,255,.14),transparent 25%),radial-gradient(circle at 24% 74%,rgba(72,197,193,.12),transparent 24%),radial-gradient(circle at 38% 44%,rgba(255,158,214,.08),transparent 18%);}
.nebula-cloud{background:radial-gradient(ellipse at center,rgba(127,142,255,.20),rgba(53,102,180,.11) 28%,rgba(70,216,194,.07) 48%,transparent 72%); filter:blur(38px); opacity:.88;}
.nebula-cloud.subtle{width:54vw; height:38vh; opacity:.5; filter:blur(44px);}
.distant-planet{opacity:.62; box-shadow:inset -34px -25px 70px rgba(0,0,0,.48),0 0 120px rgba(111,140,255,.12);}
.supernova{opacity:.65;}
.emo-canvas{filter:drop-shadow(0 0 8px rgba(255,255,255,.10));}
.emo-core{box-shadow:0 0 100px rgba(94,128,255,.18), inset 0 0 38px rgba(255,255,255,.04);}
.orbit-node{background:rgba(10,16,29,.62);}
.signal{background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,0)); padding:10px 12px; border:1px solid rgba(255,255,255,.05); border-radius:18px; backdrop-filter: blur(12px);}
.route-stop b{white-space:nowrap;}
@media (min-width:700px) and (max-width:1200px) and (orientation:landscape){
  .emo-system{width:min(54vw,68vh,590px);}
  .node-schedule{right:6%;top:19%}.node-transport{left:6%;top:31%}.node-focus{right:5%;bottom:24%}.node-attendance{left:10%;bottom:15%}
}
@media (max-width:699px){
  .node-schedule{right:8%;top:21%}.node-transport{left:4%;top:33%}.node-focus{right:4%;bottom:26%}.node-attendance{left:10%;bottom:16%}
}
