/* Hallmark · pre-emit critique: P4 H4 E4 S5 R4 V4 */
/* Campus pixel RPG · cream masonry, blue glass, stepped outlines. */
.map .route-progress{stroke-dasharray:var(--route-length,2000);stroke-dashoffset:var(--route-length,2000);transition:none}.map.travel .route-progress{stroke-dashoffset:0;transition:stroke-dashoffset 2s var(--ease-out)}
body{background:var(--paper);background-image:linear-gradient(90deg,var(--transparent) 98%,var(--blue-soft) 98%),linear-gradient(var(--transparent) 98%,var(--blue-soft) 98%);background-size:48px 48px}
.app{background:var(--paper);padding-top:22px;padding-bottom:28px}.top{border-bottom:2px solid var(--px-blue-dark);padding-bottom:17px}.brand{gap:13px}.brand strong{font-weight:800;font-size:19px;letter-spacing:2px;color:var(--px-outline);text-shadow:1px 1px 0 var(--px-highlight)}.brand small{font-weight:700;color:var(--px-blue-dark);font-size:10px;letter-spacing:1.5px}.logo{border:3px solid var(--px-outline);border-radius:0;background:var(--blue);color:var(--white);box-shadow:3px 3px 0 var(--px-blue-dark);font-family:var(--font-body);font-weight:800;font-size:22px}.logo:after{right:-5px;background:var(--paper);border-width:3px}.sound{border:2px solid var(--px-outline);border-radius:0;background:var(--white);box-shadow:2px 2px 0 var(--px-stone)}.sound[aria-pressed=true]{background:var(--px-gold)}.quiet{color:var(--px-blue-dark);font-size:11px}.hero{padding:25px 0 24px;align-items:center}.eyebrow{font-size:11px;letter-spacing:2px;color:var(--px-blue-dark);font-weight:600}.hero h1{font-size:clamp(27px,3.8vw,43px);font-family:var(--font-display);font-weight:800;letter-spacing:3px;text-shadow:3px 3px 0 var(--blue-soft);margin-bottom:10px}.hero p{font-size:12px;line-height:1.8;color:var(--muted)}.clock{padding:13px 17px 11px;background:var(--white);border:3px solid var(--px-outline);box-shadow:4px 4px 0 var(--px-stone);line-height:1;font-size:0;flex-shrink:0}.pixel-clock{display:block;width:191px;height:33px;image-rendering:pixelated}.clock small{font-size:10px;text-align:center;letter-spacing:.6px;margin-top:10px;font-weight:600}.clock.urgent{color:var(--red);box-shadow:4px 4px 0 var(--red-soft)}
.play-area{border:3px solid var(--px-outline);border-radius:0;box-shadow:6px 6px 0 var(--px-stone);background:var(--px-ground)}.map{shape-rendering:crispEdges;image-rendering:pixelated;min-height:420px}.map .label{font-weight:700;fill:var(--px-outline);letter-spacing:1px;font-size:15px;paint-order:stroke;stroke:var(--px-ground);stroke-width:3px;stroke-linejoin:miter}.map .sub{fill:var(--px-blue-dark);font-weight:600;font-size:10px;paint-order:stroke;stroke:var(--px-ground);stroke-width:2px}.map .route{stroke:var(--px-green-dark);stroke-width:3;stroke-dasharray:6 6;stroke-linecap:butt;stroke-linejoin:miter}.map .route-progress{stroke:var(--px-green);stroke-width:5;stroke-linejoin:miter}.map-tag{background:var(--white);border:2px solid var(--px-outline);padding:8px 12px;left:15px;top:13px;font-weight:700;box-shadow:2px 2px 0 var(--px-stone);font-size:10px}.dot{border-radius:0;width:7px;height:7px;box-shadow:2px 2px 0 var(--px-green-dark)}.map-status{border:2px solid var(--px-outline);border-radius:0;background:var(--white);box-shadow:3px 3px 0 var(--px-stone);left:15px;bottom:22px;padding:11px 13px;font-size:11px}.map-status span{color:var(--px-blue-dark)}.map-note{font-size:9px;background:var(--px-ground);padding:3px 5px;bottom:4px;right:8px;color:var(--px-blue-dark)}
.setup{gap:24px;padding:25px 0 21px}.field label{font-weight:700;letter-spacing:1px;color:var(--px-blue-dark);font-size:11px}.choice,.primary,.freeze-button,.practice button{border:2px solid var(--px-outline);border-radius:0;box-shadow:3px 3px 0 var(--px-blue-dark);background:var(--white);font-weight:700;transition:background var(--dur-fast);white-space:nowrap}.choice{padding:9px 16px;font-size:12px}.choice.selected{background:var(--blue);color:var(--px-outline);border-color:var(--px-outline);box-shadow:3px 3px 0 var(--px-blue-dark),inset 2px 2px 0 var(--blue-soft)}.choice:disabled{opacity:.55;box-shadow:2px 2px 0 var(--px-stone)}.primary{background:var(--green-soft);color:var(--px-outline);padding:14px 25px;box-shadow:4px 4px 0 var(--px-outline),inset 2px 2px 0 var(--white);font-size:13px;letter-spacing:1px}.primary:hover{background:var(--px-green-light)}.primary .arrow{margin-left:20px}.primary:active,.choice:not(:disabled):active,.freeze-button:active,.practice button:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--px-outline)}.practice{gap:9px;padding-bottom:20px}.practice>span{font-weight:700;color:var(--px-blue-dark)}.practice button{font-size:11px;padding:6px 11px;box-shadow:2px 2px 0 var(--px-stone);font-weight:500}.practice button:hover{background:var(--blue-soft)}.bottom{border-top:2px solid var(--px-blue-dark);font-size:10px;color:var(--px-blue-dark)}.key{border:2px solid var(--px-outline);border-bottom-width:3px;border-radius:0;font-size:9px;background:var(--white);font-weight:700}.journey{color:var(--px-blue-dark)}
.game-hud{background:var(--white);border-bottom:3px solid var(--px-outline);padding:12px 18px;min-height:49px;font-weight:600}.energy-wrap{color:var(--px-blue-dark)}.energy{border-radius:0;height:9px;background:var(--px-stone);width:98px;box-shadow:inset 0 2px 0 var(--shadow)}.energy-fill{background:var(--px-green);background-image:repeating-linear-gradient(90deg,var(--transparent) 0 15px,var(--white) 15px 17px);box-shadow:inset 0 2px 0 var(--px-green-light)}.energy-value{font-weight:700;font-size:12px}.stage-wrap,.stage{background:var(--px-cream)}.stage-grid{background-image:linear-gradient(var(--transparent) 97%,var(--px-path) 97%),linear-gradient(90deg,var(--transparent) 97%,var(--px-path) 97%);background-size:45px 45px;opacity:.7}.stage-banner{font-weight:700;color:var(--px-blue-dark);letter-spacing:.5px}.freeze-word{font-weight:700;letter-spacing:1px}.scene-window{border:3px solid var(--px-outline);border-radius:0;box-shadow:5px 5px 0 var(--px-stone);background:var(--px-cream);image-rendering:pixelated}.window-head{background:var(--blue);border-bottom:3px solid var(--px-outline);box-shadow:inset 0 2px 0 var(--blue-soft);font-weight:700;color:var(--px-outline)}.window-head span:last-child{font-weight:700}.frozen .right .window-head,.frozen .station-window .window-head{background:var(--green-soft);box-shadow:inset 0 2px 0 var(--white)}.room-decor{background:var(--px-cream) url('assets/dorm-room.svg') center bottom/100% 100% no-repeat;image-rendering:pixelated}.room-decor:before,.shelf{display:none}.right .room-decor{background-image:url('assets/corridor.svg')}.room-sign{background:var(--white);border:2px solid var(--px-outline);border-radius:0;color:var(--px-blue-dark);font-size:11px;padding:5px 8px;font-weight:700}.floor{background:var(--px-stone);background-image:linear-gradient(var(--transparent) 95%,var(--px-blue-dark) 95%),linear-gradient(90deg,var(--transparent) 96%,var(--px-blue-dark) 96%);background-size:48px 24px;border-top:4px solid var(--px-outline)}.floor:after{border-top:2px solid var(--blue-soft);top:2px}.connected .floor{border-top-color:var(--px-green-dark)}.guide-line{border-top:2px dashed var(--green)}.seam{border:2px solid var(--px-outline);border-radius:0;box-shadow:2px 2px 0 var(--px-stone);font-weight:700;width:24px;height:24px}.connected .seam{background:var(--green-soft);border-color:var(--px-green-dark);color:var(--px-green-dark)}.stage .scene-hint{background:var(--white);border-top:2px solid var(--line);color:var(--px-blue-dark);font-size:11px;font-weight:600;padding:9px 14px;bottom:0;letter-spacing:.5px}.controls{border-top:3px solid var(--px-outline);background:var(--white);padding:13px 17px}.freeze-button{padding:9px 12px;font-size:11px;background:var(--blue-soft);box-shadow:2px 2px 0 var(--px-blue-dark)}.freeze-button[aria-pressed=true]{background:var(--green-soft);border-color:var(--px-green-dark);box-shadow:2px 2px 0 var(--px-green-dark)}.retry{font-size:11px;color:var(--px-blue-dark);font-weight:600;padding:9px}.retry:hover{background:var(--blue-soft)}.stepper{font-size:10px;font-weight:600;gap:13px}.stepper .active{background:var(--blue-soft);padding:4px 6px;box-shadow:2px 2px 0 var(--line)}.stepper .complete{color:var(--px-green-dark)}
.actor{width:32px;height:48px;background:url('assets/student-walk.svg') 0 0/64px 48px no-repeat;image-rendering:pixelated;animation:pixel-run .3s steps(2) infinite;margin-left:-3px;margin-top:2px}.actor>*{display:none}.frozen .actor{animation-play-state:paused;filter:drop-shadow(-5px 0 0 var(--blue))}.actor.done{display:none}@keyframes pixel-run{to{background-position:-64px 0}}
.overlay,.pause-layer{background:var(--night);background-image:linear-gradient(var(--transparent) 96%,var(--night-soft) 96%),linear-gradient(90deg,var(--transparent) 96%,var(--night-soft) 96%);background-size:48px 48px;color:var(--white)}.sleep-sheet h2,.intro-card h2,.pause-layer h2{font-family:var(--font-display);font-weight:800;letter-spacing:2px;text-shadow:2px 2px 0 var(--px-blue-dark)}.intro-caption{font-size:11px;color:var(--blue-soft);letter-spacing:2px}.sleep-option{border:3px solid var(--blue);border-radius:0;background:var(--night-soft);box-shadow:4px 4px 0 var(--px-outline);padding:18px 15px}.sleep-option strong{font-size:27px;font-weight:700}.sleep-option span{color:var(--blue-soft);font-size:11px}.sleep-option.selected{border-color:var(--px-gold);background:var(--night);box-shadow:4px 4px 0 var(--px-blue-dark)}.sleep-option.selected:after{color:var(--px-gold);font-weight:700}.wake-preview{color:var(--blue-soft)}.sleep-sheet>.primary,.intro-card .primary,.pause-layer .primary{background:var(--green-soft);color:var(--px-outline)}.intro-time{font-family:var(--font-mono);font-weight:700;font-size:72px;color:var(--px-gold);letter-spacing:0;text-shadow:4px 4px 0 var(--px-blue-dark)}.introView-enter .intro-time{color:var(--px-gold)}.dorm-scene{opacity:.6;background:var(--night);background-image:linear-gradient(var(--transparent) 97%,var(--night-soft) 97%),linear-gradient(90deg,var(--transparent) 97%,var(--night-soft) 97%);background-size:55px 55px}.bed{border:4px solid var(--px-outline);border-radius:0;background:var(--px-brick);box-shadow:4px 6px 0 var(--night-soft)}.bed:before{border-radius:0;background:var(--white);box-shadow:3px 3px 0 var(--px-stone)}.bed:after{border-radius:0;background:var(--blue);background-image:linear-gradient(90deg,var(--transparent) 45%,var(--blue-soft) 45% 50%,var(--transparent) 50%),linear-gradient(var(--transparent) 45%,var(--blue-soft) 45% 50%,var(--transparent) 50%);background-size:20px 20px;border:3px solid var(--px-blue-dark)}
.bus-road{background:var(--px-stone);border-top:4px solid var(--px-outline)}.bus-road:after{border-top:4px dashed var(--white)}.station-window{background:var(--px-cream)}.station-sign{background:var(--blue-soft);border:3px solid var(--px-outline);color:var(--px-blue-dark);box-shadow:3px 3px 0 var(--px-stone);font-weight:700}.station-window .floor{background-color:var(--px-stone)}.bus-vehicle{border:3px solid var(--px-outline);border-radius:0;background:var(--blue);box-shadow:5px 5px 0 var(--px-blue-dark),inset 3px 3px 0 var(--blue-soft)}.bus-top{background:var(--px-blue-dark);font-size:11px;font-weight:700;color:var(--white);box-shadow:inset 0 2px 0 var(--blue)}.bus-glass{border:3px solid var(--px-outline);border-radius:0;background:var(--blue-soft);box-shadow:inset 3px 3px 0 var(--px-highlight)}.bus-glass span{border-right:4px solid var(--blue)}.bus-passenger{background:url('assets/student.svg') center 4px/24px 36px no-repeat;width:28px;height:40px;margin-top:25px;border-radius:0;image-rendering:pixelated}.bus-passenger:before{display:none}.bus-door{border-color:var(--px-outline);background:var(--px-cream)}.bus-door.ready{border-color:var(--px-green-dark);background:var(--green-soft)}.bus-wheel{border-radius:0;border-width:8px;clip-path:polygon(20% 0,80% 0,80% 10%,100% 10%,100% 85%,85% 85%,85% 100%,15% 100%,15% 85%,0 85%,0 15%,20% 15%);background:var(--px-stone)}.bus-name{font-size:12px;font-weight:700;color:var(--px-blue-dark)}.bus-status{border:2px solid var(--px-outline);border-radius:0;box-shadow:2px 2px 0 var(--px-stone);font-weight:700}.bus-status.ready{background:var(--green-soft);color:var(--px-green-dark);border-color:var(--px-green-dark)}
.canteen-floor{opacity:1;background-color:var(--px-cream);background-image:linear-gradient(var(--transparent) 96%,var(--px-path-shadow) 96%),linear-gradient(90deg,var(--transparent) 96%,var(--px-path-shadow) 96%);background-size:45px 45px}.canteen-stall{border:3px solid var(--px-outline);background:var(--px-peach);box-shadow:inset -5px 0 0 var(--px-brick)}.stall-awning{border:3px solid var(--px-outline);border-radius:0;box-shadow:0 5px 0 var(--px-blue-dark);height:40px;background:repeating-linear-gradient(90deg,var(--blue) 0 18px,var(--white) 18px 36px)}.stall-name{font-family:var(--font-body);font-weight:800;font-size:24px;letter-spacing:4px;color:var(--px-outline)}.stall-port{background:var(--green-soft);border:2px solid var(--px-green-dark);width:9px}.bun{border:2px solid var(--px-outline);background:var(--px-cream);border-radius:0;clip-path:polygon(20% 0,80% 0,80% 10%,100% 10%,100% 85%,80% 85%,80% 100%,20% 100%,20% 85%,0 85%,0 15%,20% 15%)}.bun:after{border-color:var(--px-peach)}.crowd-person,.crowd-person:nth-child(2n),.crowd-person:nth-child(3n){width:28px;height:42px;background:var(--transparent) url('assets/student.svg') center/28px 42px no-repeat;border:0;border-radius:0;image-rendering:pixelated;margin-top:-9px}.crowd-person:nth-child(3n){background-image:url('assets/student-green.svg')}.crowd-person:nth-child(3n+1){background-image:url('assets/student-peach.svg')}.crowd-person:before{display:none}.crowd-lane{background:var(--green-soft);border-top:2px dashed var(--green);border-bottom:2px dashed var(--green);opacity:.65}.crowd-handle{border:2px solid var(--px-outline);border-radius:0;box-shadow:3px 3px 0 var(--px-stone);background:var(--blue);font-size:10px;font-weight:700}.gap-marker{border-radius:0;border-width:2px}.crowd-column.next .gap-marker{border-color:var(--px-green-dark);background:var(--px-highlight);opacity:.7}.crowd-target{border-color:var(--px-green-dark)}.gap-label{font-size:10px;font-weight:700;color:var(--px-blue-dark)}
.scan-wall{background-color:var(--px-cream);background-image:linear-gradient(var(--transparent) 94%,var(--px-path) 94%),linear-gradient(90deg,var(--transparent) 96%,var(--px-path) 96%);background-size:90px 45px}.scan-wall:after{background:var(--px-stone);border-top:4px solid var(--px-outline);background-image:linear-gradient(var(--transparent) 94%,var(--px-blue-dark) 94%),linear-gradient(90deg,var(--transparent) 96%,var(--px-blue-dark) 96%);background-size:60px 30px}.class-label{font-family:var(--font-display);font-weight:800;font-size:34px;text-shadow:2px 2px 0 var(--px-peach)}.class-label small{font-weight:500;letter-spacing:1px;text-shadow:none}.qr-poster{border:3px solid var(--px-blue-dark);box-shadow:4px 4px 0 var(--px-stone);background:var(--white)}.qr-poster h3{font-weight:700;line-height:14px;color:var(--px-blue-dark)}.qr-code{shape-rendering:crispEdges;image-rendering:pixelated;color:var(--px-outline)}.scan-phone{border-color:var(--px-outline);border-radius:0;box-shadow:5px 5px 0 var(--px-blue-dark)}.phone-grip{background:var(--px-blue-dark);color:var(--white);border-radius:0;font-size:10px;font-weight:700;box-shadow:inset 0 3px 0 var(--blue)}.finder{border-radius:0;border-width:3px}.finder.aligned{box-shadow:none;border-color:var(--px-green-dark)}.phone-bottom{background:var(--white);border-top:2px solid var(--line);font-weight:700;font-size:10px;color:var(--px-blue-dark)}.scan-progress{background:var(--px-stone)}.scan-progress div{background:var(--px-green)}
.result{background:var(--px-cream);background-image:linear-gradient(var(--transparent) 97%,var(--px-path) 97%),linear-gradient(90deg,var(--transparent) 97%,var(--px-path) 97%);background-size:32px 32px}.result-inner{background:var(--white);padding:28px 25px;border:3px solid var(--px-outline);box-shadow:6px 6px 0 var(--px-stone);max-width:500px}.stamp{border:3px solid var(--px-green-dark);background:var(--green-soft);color:var(--px-green-dark);transform:none;font-size:11px;letter-spacing:3px;font-weight:700;box-shadow:3px 3px 0 var(--px-green);padding:8px 16px}.result h2{font-family:var(--font-display);font-size:32px;font-weight:800;letter-spacing:2px}.result .result-time{font-weight:700;font-size:38px;color:var(--px-blue-dark)}.result p{font-size:12px;line-height:1.9}.failed .stamp{background:var(--red-soft);border-color:var(--red);box-shadow:3px 3px 0 var(--px-brick)}.failed .result-time{color:var(--red)}
@media(max-width:700px){.app{padding:16px 15px 23px}.brand strong{font-size:15px;letter-spacing:1px}.brand small{font-size:8px;letter-spacing:.4px}.hero{padding:22px 0;gap:10px;align-items:start}.hero h1{font-size:25px;letter-spacing:1px;line-height:1.35}.hero p{font-size:11px}.clock{padding:10px 9px;border-width:2px;box-shadow:3px 3px 0 var(--px-stone)}.pixel-clock{width:115px;height:21px}.clock small{font-size:8px;max-width:119px;line-height:1.5;margin-top:6px}.eyebrow{font-size:9px;letter-spacing:.7px}.map{min-height:280px}.map-tag{font-size:9px;padding:6px 8px;top:10px;left:10px}.map .label{font-size:23px}.map .sub{font-size:14px}.map-status{left:10px;bottom:22px;font-size:9px;padding:7px 9px}.map-status span{margin-left:3px}.map-note{font-size:8px}.setup{gap:18px;padding:23px 0 18px}.choice{padding:8px 11px;font-size:11px}.primary{font-size:12px;padding:12px 18px}.practice{gap:7px;padding-bottom:17px}.practice button{font-size:10px;padding:6px 8px}.bottom{font-size:10px}.game-hud{font-size:10px;padding:10px}.energy-wrap{gap:6px;font-size:10px}.energy{width:64px}.energy-value{font-size:10px}.controls{padding:11px 10px}.stepper{font-size:9px;gap:7px}.stepper .active{padding:3px 4px}.sleep-sheet h2{font-size:23px}.sleep-option{padding:13px 8px;border-width:2px}.sleep-option strong{font-size:20px}.sleep-option span{font-size:10px}.result-inner{padding:22px 16px}.result h2{font-size:24px}.result .result-time{font-size:30px}.result p{font-size:11px}.intro-time{font-size:60px}}
@media(max-width:370px){.hero{display:block;position:relative;padding-bottom:17px}.hero>div:first-child{max-width:100%}.hero h1{font-size:28px}.hero p{max-width:100%}.clock{position:absolute;right:0;top:55px}.hero p{max-width:155px;font-size:10px}.pixel-clock{width:92px;height:18px}.clock small{font-size:8px;max-width:98px}.practice>span{width:100%}.energy-wrap{font-size:9px}.setup{column-gap:12px}.choice{padding:7px 9px}.scene-hint{letter-spacing:0}}
@media(prefers-reduced-motion:reduce){.actor{animation:none!important}}
.map .label{font-size:calc(13px / var(--map-scale,1))}.map .sub{font-size:calc(10px / var(--map-scale,1))}
@media(max-width:414px){.setup{grid-template-columns:1fr}.hero{display:grid;grid-template-columns:1fr;gap:14px}.hero>div:first-child{max-width:100%}.hero p{max-width:100%;font-size:11px}.clock{position:static;justify-self:start}.pixel-clock{width:135px;height:24px}.clock small{max-width:150px;font-size:9px}.hero h1{font-size:28px}.map .sub{display:none}}
