:root{--bg: #0a0e15;--bg-deep: #060910;--panel: #101724;--panel-2: #16202f;--line: #22304a;--line-soft: #1a2537;--text: #dfe8f4;--dim: #7e90a8;--faint: #55657c;--accent: #ffb454;--accent-deep: #d98b2b;--accent-soft: rgba(255, 180, 84, .13);--accent-glow: rgba(255, 180, 84, .28);--danger: #ff6262;--danger-soft: rgba(255, 98, 98, .12);--radius: 16px;--radius-s: 11px;--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Mono", Menlo, Consolas, monospace}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html{height:100%}body{min-height:100%;background:radial-gradient(1200px 700px at 50% -180px,#101a2c 0%,var(--bg) 55%) fixed,var(--bg);color:var(--text);font-family:var(--mono);font-size:14px;line-height:1.45;overflow-x:hidden}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}svg{width:20px;height:20px;display:block}.app{max-width:440px;margin:0 auto;padding:env(safe-area-inset-top) max(12px,env(safe-area-inset-right)) calc(28px + env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}.boot{min-height:80vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px}.boot-logo{font-size:26px;letter-spacing:.42em;padding-left:.42em;color:var(--accent);text-shadow:0 0 24px var(--accent-glow);animation:bootpulse 1.2s ease-in-out infinite alternate}.boot-sub{color:var(--dim);font-size:12px}@keyframes bootpulse{0%{opacity:.55}to{opacity:1}}.topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 2px 10px}.brand{flex:1;text-align:center;font-size:19px;letter-spacing:.38em;color:var(--accent);text-shadow:0 0 18px var(--accent-glow)}.topbar-actions{display:flex;gap:6px}.iconbtn{width:44px;height:44px;display:grid;place-items:center;border-radius:12px;color:var(--dim);border:1px solid transparent;transition:color .15s,border-color .15s}.iconbtn:active,.iconbtn:hover{color:var(--accent);border-color:var(--line)}.meta{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}.meta-row{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.chip{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;border-radius:999px;border:1px solid var(--line-soft);background:var(--panel);color:var(--dim);font-size:12px;min-height:32px}.chip b{color:var(--text)}.chip svg{width:15px;height:15px}.chip.flame{color:var(--accent);border-color:#ffb45459}.chip.ghost{background:none}.chip.hypo .delta{color:var(--accent);font-size:11px}.chip.hypo .delta em{color:var(--faint);font-style:normal}.moons{display:flex;gap:7px;padding:2px 0}.moon{color:var(--accent);opacity:.95;filter:drop-shadow(0 0 6px var(--accent-glow));transition:opacity .5s,filter .5s}.moon svg{width:21px;height:21px}.moon.burned{color:var(--faint);opacity:.35;filter:none}.moon.active{animation:moonpulse 1.6s ease-in-out infinite}@keyframes moonpulse{0%,to{filter:drop-shadow(0 0 4px var(--accent-glow))}50%{filter:drop-shadow(0 0 12px var(--accent))}}.card{background:linear-gradient(180deg,var(--panel) 0%,#0e1520 100%);border:1px solid var(--line-soft);border-radius:var(--radius);padding:14px;margin-bottom:12px}.card-title{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--faint);margin-bottom:10px}.rule{display:flex;align-items:baseline;gap:10px;padding:7px 9px;border-radius:var(--radius-s);background:var(--panel-2);border:1px solid var(--line-soft);margin-bottom:7px;font-size:12.5px}.rule-id{color:var(--accent);font-size:11px;flex:none;padding-top:1px}.rule-id.glitch{animation:glitch 2.4s steps(2) infinite}@keyframes glitch{0%,92%{opacity:1;transform:none}94%{opacity:.4;transform:translate(1px)}96%{opacity:1;transform:translate(-1px)}98%{opacity:.6;transform:none}}.rule-body em{font-style:normal;color:var(--faint);font-size:10.5px;letter-spacing:.08em}.rule-body b{color:var(--accent);font-weight:600}.ghost-rule{border-style:dashed;border-color:var(--line);background:none;color:var(--faint)}.lore{font-size:11.5px;color:var(--dim);padding:4px 2px 0}.lore b{color:var(--text)}.tabs{display:grid;grid-template-columns:1fr 1fr;gap:6px;background:var(--bg-deep);border-radius:12px;padding:4px;margin-bottom:12px}.tab{min-height:40px;border-radius:9px;color:var(--dim);letter-spacing:.06em;transition:background .15s,color .15s}.tab.on{background:var(--panel-2);color:var(--accent);box-shadow:inset 0 0 0 1px var(--line)}.tab:disabled{opacity:.4}.banner{border-radius:var(--radius-s);padding:9px 12px;font-size:12px;margin-bottom:12px}.banner.danger{background:var(--danger-soft);border:1px solid rgba(255,98,98,.35);color:#ffb3b3}.night-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.night-name{font-size:11px;letter-spacing:.22em;color:var(--faint)}.timeline{display:flex;align-items:center;gap:4px}.slot{font-size:10.5px;color:var(--faint);border:1px solid var(--line-soft);border-radius:999px;padding:3px 8px}.slot.done{color:var(--accent-deep);border-color:#ffb4544d}.slot.now{color:var(--accent);border-color:var(--accent);box-shadow:0 0 10px var(--accent-glow)}.slot-sep{width:6px;height:1px;background:var(--line)}.sensors{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.sensor{display:flex;align-items:center;gap:10px;min-height:48px;padding:6px 10px;border-radius:var(--radius-s);background:var(--panel-2);border:1px solid var(--line-soft);text-align:left;transition:border-color .15s,background .15s}.sensor .s-icon{color:var(--faint);transition:color .15s}.sensor .s-name{flex:1;color:var(--dim);transition:color .15s}.sensor .s-state{font-size:10px;letter-spacing:.14em;color:var(--faint);width:38px;text-align:right}.sensor.on{border-color:#ffb45466;background:linear-gradient(90deg,var(--panel-2),rgba(255,180,84,.07))}.sensor.on .s-icon,.sensor.on .s-name{color:var(--text)}.sensor.on .s-state{color:var(--accent)}.switch{flex:none;width:42px;height:25px;border-radius:999px;background:var(--bg-deep);border:1px solid var(--line);position:relative;transition:background .18s,border-color .18s}.switch .knob{position:absolute;top:2px;left:2px;width:19px;height:19px;border-radius:50%;background:var(--faint);transition:transform .18s,background .18s}.sensor.on .switch{background:var(--accent-soft);border-color:var(--accent)}.sensor.on .switch .knob{transform:translate(17px);background:var(--accent);box-shadow:0 0 8px var(--accent-glow)}.devices-cap{font-size:11px;color:var(--accent-deep);margin-bottom:7px;letter-spacing:.04em}.devices-cap.dim{color:var(--faint)}.devices{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:14px}.tile{display:flex;flex-direction:column;align-items:center;gap:5px;padding:9px 3px 7px;border-radius:var(--radius-s);background:var(--bg-deep);border:1px solid var(--line-soft);min-height:74px;justify-content:flex-start;transition:background .3s,border-color .3s,box-shadow .3s}.tile .t-icon{color:var(--faint);transition:color .3s,filter .3s}.tile .t-name{font-size:8.5px;color:var(--faint);text-align:center;line-height:1.2}.tile .t-dot{width:5px;height:5px;border-radius:50%;background:var(--line);margin-top:1px}.tile .t-badge{font-size:8px;color:var(--accent-deep);border:1px solid rgba(255,180,84,.3);border-radius:999px;padding:1px 5px;white-space:nowrap}.tile .t-badge.alert{color:var(--accent);border-color:var(--accent);animation:badgeblink 1.1s ease-in-out 2}@keyframes badgeblink{50%{opacity:.3}}.tile.lit{background:linear-gradient(180deg,#ffb45429,#ffb4540d);border-color:#ffb45473}.tile.lit .t-icon{color:var(--accent);filter:drop-shadow(0 0 7px var(--accent-glow))}.tile.lit .t-name{color:var(--text)}.tile.unexpected{border-color:var(--accent);box-shadow:0 0 16px var(--accent-glow)}.devices.reveal .tile{animation:tilein .45s both;animation-delay:calc(var(--i, 0) * 90ms)}@keyframes tilein{0%{opacity:.15;transform:translateY(4px)}to{opacity:1;transform:none}}.cta{width:100%;min-height:50px;border-radius:13px;background:linear-gradient(180deg,var(--accent),var(--accent-deep));color:#241503;font-weight:700;letter-spacing:.05em;font-size:14px;box-shadow:0 4px 22px #ffb45438;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .08s,filter .15s}.cta:active{transform:scale(.985)}.cta:disabled{filter:grayscale(.7) brightness(.55);box-shadow:none}.cta svg{width:17px;height:17px}.cta.ghost{background:none;color:var(--dim);border:1px solid var(--line);box-shadow:none;font-weight:500;margin-top:8px}.cta.warn{background:linear-gradient(180deg,#2a1d10,#221709);color:var(--accent);border:1px solid rgba(255,180,84,.5);box-shadow:none}.cta.danger{background:linear-gradient(180deg,#ff7a63,#d8422f);color:#2b0a05}.acc-intro{font-size:11.5px;color:var(--dim);margin-bottom:10px}.picks{display:flex;flex-direction:column;gap:6px}.picks.devs{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.pick{display:flex;align-items:center;gap:10px;min-height:46px;padding:5px 10px;border-radius:var(--radius-s);background:var(--panel-2);border:1px solid var(--line-soft);text-align:left;color:var(--dim);transition:border-color .15s,background .15s,color .15s}.pick .s-icon{color:var(--faint)}.pick .s-name{flex:1;font-size:12.5px}.pick-state{font-size:10px;letter-spacing:.14em;color:var(--faint)}.pick.pos{border-color:#ffb45480;color:var(--text)}.pick.pos .pick-state,.pick.pos .s-icon{color:var(--accent)}.pick.neg{border-color:var(--line);color:var(--text);background:var(--bg-deep)}.pick.neg .pick-state{color:var(--danger)}.pick.neg .s-icon{color:var(--dim)}.pick.dev{flex-direction:column;gap:5px;min-height:66px;padding:8px 2px;justify-content:center}.pick.dev .s-name{flex:none;font-size:8.5px;text-align:center}.pick.dev.sel{border-color:var(--accent);background:var(--accent-soft);color:var(--text)}.pick.dev.sel .s-icon{color:var(--accent)}.acc-sep{text-align:center;color:var(--faint);font-size:10.5px;letter-spacing:.22em;margin:10px 0 8px}.acc-preview{margin:12px 0 4px;padding:10px 12px;border-radius:var(--radius-s);border:1px dashed var(--line);color:var(--faint);font-size:12.5px;text-align:center}.acc-preview.ok{border-style:solid;border-color:#ffb45480;color:var(--text);background:var(--accent-soft)}.acc-preview i{color:var(--faint)}.acc-hint{font-size:11px;color:#ffcf9a;background:var(--accent-soft);border-radius:var(--radius-s);padding:8px 10px;margin:6px 0}.acc-cost{font-size:10.5px;color:var(--faint);margin:8px 0 10px;text-align:center}.journal{margin-top:4px}.j-night{background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--radius-s);padding:9px 11px;margin-bottom:7px}.j-head{display:flex;align-items:center;gap:9px;font-size:10.5px;letter-spacing:.14em;color:var(--faint);margin-bottom:6px}.j-mark{font-size:12px;letter-spacing:0}.j-bits{margin-left:auto;letter-spacing:0;color:var(--dim)}.j-probe{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:11px}.j-time{color:var(--faint);font-size:10px;width:34px;flex:none}.j-dots{display:flex;gap:3px}.dot{width:7px;height:7px;border-radius:50%;background:var(--line)}.dot.on{background:var(--accent);box-shadow:0 0 5px var(--accent-glow)}.j-arrow{color:var(--faint)}.j-devs{display:flex;gap:5px;align-items:center}.j-dev{color:var(--accent-deep)}.j-dev.alert{color:var(--accent);filter:drop-shadow(0 0 4px var(--accent-glow))}.j-dev svg{width:15px;height:15px}.j-none{color:var(--faint)}.j-accuse{color:var(--dim);font-size:11.5px}.endcard{text-align:center;padding:20px 16px}.endcard.win{border-color:#ffb45480;box-shadow:0 0 34px #ffb4541f}.endcard.lose{border-color:var(--line)}.end-title{letter-spacing:.28em;font-size:13px;color:var(--accent);margin-bottom:12px}.endcard.lose .end-title{color:var(--danger)}.end-rule{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-s);padding:10px;font-size:13px;margin-bottom:12px}.end-score{font-size:16px;margin-bottom:6px}.end-score .opt{font-size:11px;color:var(--faint)}.end-grid{font-size:21px;letter-spacing:3px;margin-bottom:10px}.end-stats{font-size:11px;color:var(--dim);margin-bottom:12px}.end-actions{display:flex;flex-direction:column;gap:2px}.end-next{margin-top:12px;font-size:10.5px;color:var(--faint)}.overlay{position:fixed;inset:0;z-index:40;background:radial-gradient(900px 500px at 50% 0%,#0d1626,var(--bg-deep) 70%);display:none;opacity:0;transition:opacity .25s}.overlay.show{display:block;opacity:1}.ov-sky{position:relative;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;overflow:hidden}.ov-moon{color:var(--accent);filter:drop-shadow(0 0 26px var(--accent-glow));animation:moonarc 1.4s ease-in-out both}.overlay:not(.long) .ov-moon{animation-duration:.8s}.ov-moon svg{width:74px;height:74px}@keyframes moonarc{0%{transform:translate(-70px,46px) rotate(-24deg) scale(.82);opacity:0}30%{opacity:1}to{transform:translate(0) rotate(0) scale(1);opacity:1}}.ov-time{font-size:34px;letter-spacing:.18em;color:var(--text)}.ov-sub{color:var(--dim);font-size:12px}.ov-stars i{position:absolute;width:2px;height:2px;border-radius:50%;background:#cfe1ff;opacity:.6;animation:twinkle 2.2s ease-in-out infinite}.ov-stars i:nth-child(3n){animation-delay:.6s}.ov-stars i:nth-child(3n+1){animation-delay:1.2s}.ov-stars i:nth-child(1){top:12%;left:18%}.ov-stars i:nth-child(2){top:22%;left:74%}.ov-stars i:nth-child(3){top:8%;left:52%}.ov-stars i:nth-child(4){top:31%;left:30%}.ov-stars i:nth-child(5){top:17%;left:88%}.ov-stars i:nth-child(6){top:40%;left:12%}.ov-stars i:nth-child(7){top:36%;left:62%}.ov-stars i:nth-child(8){top:6%;left:33%}.ov-stars i:nth-child(9){top:26%;left:45%}.ov-stars i:nth-child(10){top:44%;left:82%}.ov-stars i:nth-child(11){top:55%;left:24%}.ov-stars i:nth-child(12){top:60%;left:70%}.ov-stars i:nth-child(13){top:66%;left:40%}.ov-stars i:nth-child(14){top:50%;left:55%}@keyframes twinkle{0%,to{opacity:.15}50%{opacity:.8}}.modal-root{position:fixed;inset:0;z-index:50;display:none}.modal-root.show{display:block}.modal-back{position:absolute;inset:0;background:#04060ab8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.modal{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(420px,calc(100vw - 28px));max-height:min(80vh,640px);overflow-y:auto;padding:18px}.modal p{font-size:12.5px;color:var(--dim);margin-bottom:10px}.modal p b{color:var(--text)}.modal .tip{background:var(--accent-soft);border:1px solid rgba(255,180,84,.25);border-radius:var(--radius-s);padding:9px 11px;color:var(--text)}.modal .legend{background:var(--panel-2);border-radius:var(--radius-s);padding:9px 11px}.modal .cta{margin-top:8px}.stats-line{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));transform:translate(-50%,16px);z-index:60;background:#1a2333;border:1px solid var(--line);color:var(--text);border-radius:12px;padding:10px 16px;font-size:12.5px;max-width:min(400px,calc(100vw - 32px));opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;box-shadow:0 10px 30px #00000080}.toast.show{opacity:1;transform:translate(-50%)}.footnote{text-align:center;color:var(--faint);font-size:10px;margin-top:18px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(min-width:700px){body{font-size:14.5px}.app{padding-top:20px}}.map-card{margin-bottom:12px}.map-intro{font-size:12px;color:var(--dim);margin:-4px 0 12px}.levels{display:flex;flex-direction:column;gap:8px}.lv{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:11px 12px;border-radius:var(--radius-s);border:1px solid var(--line-soft);background:var(--panel-2);transition:border-color .15s,transform .1s}.lv:active{transform:scale(.99)}.lv:hover{border-color:var(--line)}.lv.next{border-color:#ffb45473;background:linear-gradient(180deg,var(--accent-soft),var(--panel-2))}.lv.locked{opacity:.45}.lv-num{flex:none;width:30px;height:30px;display:grid;place-items:center;border-radius:9px;border:1px solid var(--line);color:var(--dim);font-size:13px}.lv.next .lv-num,.lv.done .lv-num{color:var(--accent);border-color:#ffb45466}.lv-body{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.lv-title{color:var(--text);font-size:13px}.lv-goal{color:var(--faint);font-size:11.5px;line-height:1.35}.lv-state{flex:none;color:var(--faint);font-size:13px}.lv-state.done{color:#6ddf9a}.lv-state.open{color:var(--accent)}.lv-state svg{width:17px;height:17px}.lv.big .lv-num svg{width:17px;height:17px}.map-note{margin-top:10px;font-size:11.5px;color:var(--faint);line-height:1.4}.briefcard{margin-bottom:12px;border-color:var(--line)}.briefcard p{font-size:12.5px;color:var(--dim);margin-bottom:8px}.briefcard p:last-child{margin-bottom:0}.briefcard b{color:var(--text)}.briefcard code{color:var(--accent);font-size:12px;background:var(--panel-2);padding:1px 5px;border-radius:5px}.coach{display:block}.coachcard{display:flex;align-items:flex-start;gap:10px;margin-bottom:12px;padding:11px 12px;border-radius:var(--radius-s);border:1px solid rgba(255,180,84,.3);background:var(--accent-soft)}.coach-tag{flex:none;margin-top:1px;padding:2px 7px;border-radius:999px;background:var(--accent);color:#17120a;font-size:10px;letter-spacing:.12em;text-transform:uppercase}.coachcard p{font-size:12.5px;color:var(--text);line-height:1.5}.coachcard b{color:var(--accent)}.end-lesson{margin:10px 0 4px;padding:10px 11px;border-radius:var(--radius-s);background:#ffffff08;font-size:12.5px;color:var(--dim);line-height:1.5}.end-lesson b{color:var(--text)}.chip.stale{color:var(--accent);border-color:var(--accent);background:var(--accent-soft);animation:stalepulse 1.8s ease-in-out infinite}@keyframes stalepulse{0%,to{box-shadow:0 0 #ffb45400}50%{box-shadow:0 0 14px var(--accent-glow)}}.end-next .chip.stale{margin-top:2px}.stats-bars{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.sbar{display:flex;align-items:center;gap:9px;font-size:11.5px;color:var(--dim)}.sbar-label{width:58px;flex:none;text-align:right;color:var(--faint)}.sbar-track{flex:1;height:12px;border-radius:999px;background:var(--bg-deep);border:1px solid var(--line-soft);overflow:hidden}.sbar-fill{display:block;height:100%;min-width:3px;border-radius:999px;background:linear-gradient(90deg,var(--accent-deep),var(--accent))}.sbar-fill.lose{background:linear-gradient(90deg,#7a3a3a,var(--danger))}.sbar b{width:26px;flex:none;color:var(--text)}
