.modal-open{overflow:hidden}.shell .intro.instructions-overlay{background:0 0;width:100%;max-width:740px;margin:-8px auto 0;padding:0;display:block;position:static;overflow:visible}.shell .intro .intro-heading{text-align:center;margin:0 0 16px;position:relative}.shell .intro .intro-heading h1{outline:none;margin:0;font-size:30px;line-height:1.2}.shell .intro .instructions-card{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:100%;max-height:none;box-shadow:none;background:#fafafad1;border:1px solid #d7ddd8a6;border-radius:10px;flex-direction:column;padding:20px 24px;display:flex}.shell .intro .instructions{border:0;grid-template-columns:1fr 1fr;gap:10px 24px;padding:0;font-size:13px;line-height:1.5;display:grid}.shell .intro .instructions p{max-width:none;margin:0}.shell .intro .instructions>p:first-child{grid-area:1/1}.shell .intro .instructions>p:nth-child(2){grid-area:2/1}.shell .intro .instructions>p:nth-child(3){grid-area:1/2/3}.shell .intro .instructions>p:nth-child(4){grid-area:3/1/auto/-1}.shell .intro .instruction-controls{color:#68746b;grid-area:4/1/auto/-1;font-size:12px}.shell .intro .touch-instruction{display:none}.shell .intro #intro-timing{border-top:1px solid #dfe3df;grid-column:1/-1;padding-top:10px}.shell .intro #intro-join{order:0;padding-top:14px}.shell .intro .actions{gap:10px;margin:0}.shell .intro .actions button{min-height:44px;padding:8px 18px;font-size:13px}.shell .intro #intro-error:empty{display:none}.shell .intro #intro-error:not(:empty){margin:10px 0 0}.shell .intro #join-note{order:1;margin:12px 0 0;font-size:11px;line-height:1.4}.shell .intro #close-instructions{border-radius:4px;min-width:44px;min-height:44px;padding:8px;font-size:13px;position:absolute;top:-4px;right:0}.shell[data-screen=intro]>header,.shell[data-screen=intro] #close-instructions{display:none}.shell[data-screen=intro]{flex-direction:column;height:auto;min-height:100svh;padding:0 32px;display:flex}.shell[data-screen=intro] #world.world{flex:none;min-height:0;display:block}.shell[data-screen=intro] #surface.game-surface{flex:none;height:clamp(200px,100svh - 470px,400px);min-height:0}.shell[data-screen=intro] footer{min-height:44px;margin-top:auto;padding-top:12px}.shell footer #saved-games{min-height:44px}.shell .intro.instructions-overlay.modal{background:#fafafa59;flex-direction:column;justify-content:center;align-items:center;width:100%;max-width:none;margin:0;padding:24px;display:flex;position:fixed;inset:0;overflow:auto}.shell .intro.modal .intro-heading,.shell .intro.modal .instructions-card{width:min(100%,740px)}.shell .intro.modal .instructions-card{background:#fafafaf0;max-height:calc(100svh - 120px);overflow:auto}.saved-modal{background:#fafafa59;justify-content:flex-end;align-items:flex-end;padding:20px;display:flex}.saved-panel{background:#fafafa;border:1px solid #dfe3df;border-radius:10px;width:min(100%,420px);max-height:calc(100svh - 40px);padding:20px;overflow:auto;box-shadow:0 12px 36px #222d2414}.saved-panel h2{margin:0;font-size:18px}.saved-panel .history{margin-top:16px;padding-top:16px}.saved-panel #clear,.saved-panel #close-saved{min-height:44px}.saved-panel #saved-error:empty{display:none}.shell[data-screen=game]{flex-direction:column;height:100svh;min-height:620px;display:flex}.shell[data-screen=game] #world.world{flex-direction:column;flex:1;min-height:280px;display:flex}.shell[data-screen=game] #surface.game-surface{flex:1;height:auto;min-height:210px}.shell[data-screen=waiting] footer,.shell[data-screen=game] footer{display:none}.shell #game .game-status{min-height:60px;padding:12px 0 20px}.shell #game #status.round-result{letter-spacing:-.035em;margin-bottom:10px;font-size:32px;font-weight:500;line-height:1.2}.shell #game #ready{color:#fff;background:#303d33;border:1px solid #303d33;border-radius:6px;min-width:148px;min-height:46px;margin-top:12px;padding:9px 24px;font-size:15px;text-decoration:none}.shell #game .touch-controls{color:#68746b;border-top:1px solid #e3e6e1;justify-content:space-between;align-items:center;gap:16px;padding:10px 0;font-size:12px;display:flex}.shell #game #finish{min-width:100px;min-height:44px;padding:8px 20px;font-size:14px}:is(.shell #game:has(#ready:not(.hidden)) .touch-controls,.shell #game:has(.round-result) .touch-controls){display:none}.shell #game .controls{border:0;padding:8px 0}:is(.shell #game:has(#ready:not(.hidden)) .controls,.shell #game:has(.round-result) .controls){display:none}@media (max-width:650px){.shell[data-screen=intro]{padding:0 16px}.shell[data-screen=intro] #surface.game-surface{width:calc(100% + 16px);height:190px;margin-inline:-8px}.shell .intro .intro-heading{margin-bottom:14px}.shell .intro .intro-heading h1{font-size:28px}.shell .intro .instructions-card{padding:16px 18px}.shell .intro .instructions{font-size:13px;line-height:1.45;display:block}.shell .intro .instructions p,.shell .intro .instruction-controls{margin-bottom:10px}.shell .intro .keyboard-instruction{display:none}.shell .intro .touch-instruction{display:block}.shell .intro .actions button{flex:1;padding:8px}.shell .intro #intro-error:empty{display:none}.shell .intro #intro-error:not(:empty){margin:10px 0 0}.shell .intro #join-note{margin-top:10px}.shell #game #status.round-result{font-size:28px}.shell #game .game-status{padding:8px 0 16px}.shell .intro.instructions-overlay.modal{padding:16px}}@media (pointer:coarse){.shell .intro .keyboard-instruction{display:none}.shell .intro .touch-instruction{display:block}.move-pointer-hint{font-size:0}.move-pointer-hint:after{content:"Tap an adjacent square to move";font-size:12px}}@media (prefers-reduced-transparency:reduce){.shell .intro .instructions-card{-webkit-backdrop-filter:none;backdrop-filter:none;background:#fafafa}}@media (min-width:1000px){.shell[data-screen=intro]{--landing-font:clamp(13px, min(1.05vw, 1.6svh), 20px);max-width:2000px}.shell[data-screen=intro] .intro.instructions-overlay{max-width:clamp(740px,min(58vw,100svh),1120px)}.shell[data-screen=intro] #surface.game-surface{height:clamp(250px,100svh - clamp(470px,50svh,650px),700px)}.shell[data-screen=intro] .intro-heading{margin-bottom:clamp(16px,1.6svh,24px)}.shell[data-screen=intro] .intro-heading h1{font-size:clamp(30px,min(2.5vw,4svh),48px)}.shell[data-screen=intro] .instructions-card{padding:clamp(20px,2svh,32px) clamp(24px,2vw,36px)}.shell[data-screen=intro] .instructions{font-size:var(--landing-font);gap:clamp(10px,1svh,16px) clamp(24px,2.4vw,40px)}.shell[data-screen=intro] .instruction-controls{font-size:calc(var(--landing-font) * .923)}.shell[data-screen=intro] .actions button{min-height:clamp(44px,5svh,58px);font-size:var(--landing-font)}.shell[data-screen=intro] #join-note{font-size:clamp(11px,min(.9vw,1.4svh),15px)}}.shell[data-layout=vertical][data-screen=game],.shell[data-layout=vertical][data-screen=waiting]{height:100svh;min-height:100svh;padding:max(8px, env(safe-area-inset-top)) 12px max(8px, env(safe-area-inset-bottom));flex-direction:column;display:flex}.shell[data-layout=vertical]>header{flex:none;min-height:44px}.shell[data-layout=vertical] .brand{font-size:16px}.shell[data-layout=vertical] #how-to-play{font-size:11px}.shell[data-layout=vertical][data-screen=game] #world,.shell[data-layout=vertical][data-screen=waiting] #world{flex-direction:column;flex:1;min-height:0;display:flex}.shell[data-layout=vertical][data-screen=game] #surface,.shell[data-layout=vertical][data-screen=waiting] #surface{touch-action:pan-y pinch-zoom;flex:1;height:auto;min-height:270px}.shell[data-layout=vertical] .game-top{flex-wrap:nowrap;flex:none;gap:8px;min-height:38px;margin-top:0;line-height:1.4}.shell[data-layout=vertical] #phase-name{letter-spacing:.035em;font-size:9px}.shell[data-layout=vertical] #round-name{font-size:10px}.shell[data-layout=vertical] .stats{flex-shrink:0;gap:12px}.shell[data-layout=vertical] .stat strong{font-size:18px}.shell .board-labels>div[data-placement=below]{white-space:nowrap;color:#626e65;justify-content:center;align-items:baseline;gap:5px;font-size:10px;line-height:14px;display:flex;transform:translate(-50%)}.shell .board-labels>div[data-placement=below] strong{font-weight:400;display:inline}.shell .board-labels>div[data-placement=below] span{color:#626e65;font-size:10px}.shell .board-labels>div[data-placement=below] span:not(:empty):before{content:"· "}.shell[data-layout=vertical] #game{flex:none;position:relative}.shell[data-layout=vertical] #game .game-status{min-height:0;padding:4px 0 8px;font-size:13px}.shell[data-layout=vertical] #game[data-feedback=empty] .game-status{display:none}.shell[data-layout=vertical] #game .game-status #sub-status{font-size:11px}.shell[data-layout=vertical] #game #ready{min-height:44px;margin-top:8px}.shell[data-layout=vertical] #game .touch-controls{border:0;min-height:56px;padding:6px 0}.shell[data-layout=vertical] #game #finish{min-width:108px;min-height:48px;margin-left:auto}.shell[data-layout=vertical] #game .game-bottom{min-height:44px}.shell[data-layout=vertical] .move-pointer-hint{opacity:1;max-width:230px;transition:opacity .3s,max-width .3s;overflow:hidden}.shell[data-layout=vertical][data-guidance=settled] .move-pointer-hint{opacity:0;visibility:hidden;max-width:0;transition:opacity .3s,max-width .3s,visibility 0s .3s}@media (pointer:coarse) and (orientation:landscape) and (max-height:550px){.shell[data-screen=game]{min-height:100svh;padding-block:max(4px, env(safe-area-inset-top)) max(4px, env(safe-area-inset-bottom));padding-inline:max(20px, env(safe-area-inset-left)) max(20px, env(safe-area-inset-right))}.shell[data-screen=game] #world.world{min-height:0}.shell[data-screen=game] #surface.game-surface{min-height:120px}.shell[data-screen=game] #game .game-status{min-height:0;padding:0 0 4px;font-size:12px}.shell[data-screen=game] #game[data-feedback=empty] .game-status{display:none}.shell[data-screen=game] #game .game-status #sub-status{font-size:11px}.shell[data-screen=game] #game .touch-controls{border:0;padding:4px 0}.shell[data-screen=game] #game #ready{min-height:44px;margin-top:4px}.shell[data-screen=game] #game{position:relative}.shell[data-screen=game] #game[data-feedback-layout=inline] .game-status{text-align:left;pointer-events:none;width:calc(100% - 124px);padding:0;position:absolute;top:4px;left:0}.shell[data-screen=game] #game[data-feedback-layout=inline][data-feedback=visible] .move-pointer-hint,.shell[data-screen=game][data-guidance=settled] .move-pointer-hint{visibility:hidden}.shell[data-screen=game] #game .game-status:has(.round-result){text-align:left;grid-template-columns:1fr auto;align-items:center;column-gap:16px;display:grid}.shell[data-screen=game] #game .round-result{grid-column:1;margin-bottom:0;font-size:24px}.shell[data-screen=game] #game .game-status:has(.round-result) #sub-status{grid-column:1;margin-bottom:0}.shell[data-screen=game] #game .game-status:has(.round-result) #ready{grid-area:1/2/3;margin:0}.shell[data-screen=waiting]{height:100svh;min-height:100svh;padding:max(4px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-right)) max(4px, env(safe-area-inset-bottom)) max(20px, env(safe-area-inset-left));flex-direction:column;display:flex}.shell[data-screen=waiting]>header{flex:none;min-height:44px}.shell[data-screen=waiting] #world.world{flex-direction:column;flex:1;min-height:0;display:flex}.shell[data-screen=waiting] #surface.game-surface{flex:1;height:auto;min-height:110px}.shell[data-screen=waiting] .waiting{margin:0 auto}.shell[data-screen=waiting] .waiting h1{margin-bottom:2px;font-size:20px}.shell[data-screen=waiting] .waiting p{margin-bottom:2px;font-size:11px}.shell[data-screen=waiting] .invite{margin:4px 0}.shell[data-screen=waiting] #cancel-wait,.shell[data-screen=waiting] #copy{min-height:44px}.shell[data-screen=waiting] #copy-status:empty{display:none}.shell[data-screen=game] #game{grid-template-columns:auto 1fr auto;align-items:center;column-gap:16px;display:grid}.shell[data-screen=game] #game .game-status{grid-column:1/-1}.shell[data-screen=game] #game[data-feedback-layout=inline] .touch-controls{display:contents}.shell[data-screen=game] #game .move-pointer-hint{grid-area:2/2}.shell[data-screen=game] #game #finish{grid-area:2/3;min-height:48px}.shell[data-screen=game] #game .game-bottom{grid-area:2/1;min-height:48px}.shell[data-screen=game] #game[data-feedback-layout=panel] .game-bottom{grid-column:1/-1}.shell[data-screen=game] #game[data-feedback-layout=inline] .game-status{width:calc(100% - 204px);left:80px}}.shell[data-layout=vertical] #game[data-feedback-layout=inline] .game-status{text-align:left;pointer-events:none;width:calc(100% - 124px);padding:0;position:absolute;top:6px;left:0}.shell[data-layout=vertical] #game[data-feedback-layout=inline][data-feedback=visible] .move-pointer-hint{visibility:hidden}.shell[data-layout=vertical] .keyboard-controls,.shell[data-layout=vertical] .keyboard-instruction{display:none}.shell[data-layout=vertical] .touch-instruction{display:block}.shell[data-layout=vertical] .text-button{min-height:44px}.shell[data-layout=vertical] .stat span{letter-spacing:.035em;font-size:9px}.shell[data-layout=vertical] #phase-name,.shell[data-layout=vertical] .stat span{white-space:nowrap}@media (prefers-reduced-motion:reduce){.shell[data-layout=vertical] .move-pointer-hint,.shell[data-layout=vertical][data-guidance=settled] .move-pointer-hint{transition:none}}.shell[data-layout=vertical] .waiting{margin-bottom:0}.shell[data-layout=vertical] .waiting h1{margin-bottom:6px;font-size:23px}.shell[data-layout=vertical] .waiting p{margin-bottom:6px;font-size:12px}.shell[data-layout=vertical] #copy-status:empty{display:none}:root{color:#272d29;font-synthesis:none;background:#fafafa;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:16px;line-height:1.6}*{box-sizing:border-box}body{margin:0}button,input,textarea{font:inherit}button,a,input,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit;background:0 0;border:1px solid #d5dad6;border-radius:7px;padding:10px 20px;transition:background .12s,transform .12s}button:hover{background:#eef0ed}button:active{transform:translateY(1px)}button:disabled{opacity:.45;cursor:default}button.primary{color:#fff;background:#303d33;border-color:#303d33}button.primary:hover{background:#445549}a{color:inherit;text-underline-offset:4px}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible{outline-offset:4px;outline:2px solid #4e6c57}input,textarea{color:inherit;background:#fff;border:1px solid #d5dad6;border-radius:6px;width:100%;padding:10px}textarea{resize:vertical;min-height:90px}h1,h2,h3,p{margin-top:0}h1{letter-spacing:-.05em;font-size:clamp(36px,5vw,56px);font-weight:550;line-height:1.15}h2{letter-spacing:-.035em;font-size:24px;font-weight:550}h3{font-size:17px;font-weight:550}p{margin-bottom:20px}.muted,.caption{color:#6e7770}.caption{font-size:13px;line-height:1.55}.eyebrow{letter-spacing:.09em;text-transform:uppercase;color:#758078;font-size:12px}.row{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.spread{justify-content:space-between}.hidden{display:none!important}.error{color:#a73737}.notice{background:#f0f3ef;border-left:2px solid #8f9f91;padding:12px 16px;font-size:14px}.text-button{text-underline-offset:4px;color:#6e7770;border:0;padding:5px 0;font-size:13px;text-decoration:underline}.shell{max-width:1240px;margin:auto;padding:18px 38px}.brand{letter-spacing:-.035em;font-size:16px;font-weight:600;text-decoration:none}.world-heading{text-align:center;margin:28px 0 0}.world-heading h1{margin-bottom:0;font-size:clamp(36px,4vw,48px)}.world{position:relative}.instructions{border-top:1px solid #dfe3df;padding-top:26px}.instructions p{max-width:53ch}.actions{margin:32px 0 18px}.fine{color:#7e867f;font-size:12px;line-height:1.6}.history{border-top:1px solid #dfe3df;margin-top:44px;padding-top:20px}.history button{text-align:left;width:100%;margin-bottom:8px;display:block}.game-top{min-height:42px;margin-top:12px}.stats{font-variant-numeric:tabular-nums;gap:28px;display:flex}.stat span{text-transform:uppercase;letter-spacing:.08em;color:#758078;font-size:11px;display:block}.stat strong{font-size:24px;font-weight:500;line-height:1.3}.board-labels{z-index:1;pointer-events:none;text-align:center;color:#68746b;margin:0;font-size:13px;position:absolute;inset:0}.board-labels>div{position:absolute;left:25%;transform:translate(-50%,-100%)}.board-labels>div:last-child{left:75%}.board-labels strong{font-weight:500;display:block}.board-labels span{color:#919990;font-size:11px}.game-surface{outline:0;height:clamp(320px,100svh - 296px,700px);position:relative}.game-surface:focus-visible{border-radius:8px;box-shadow:inset 0 0 0 1px #c5d0c5}.game-surface canvas{width:100%;height:100%;display:block}.shell[data-screen=waiting] .game-surface{height:clamp(320px,100svh - 310px,620px)}.shell[data-screen=game] footer{display:none}.game-status{text-align:center;min-height:74px}.game-status #ready{padding:1px 0}.game-bottom{min-height:30px}.game-status p{margin:0 0 5px}.controls{color:#818a82;border-top:1px solid #e3e6e1;flex-wrap:wrap;justify-content:center;gap:28px;margin-top:0;padding:10px 0;font-size:12px;display:flex}.direction-legend,.direction-legend>span{align-items:center;gap:2px;display:inline-flex}.direction-legend{gap:9px}.direction-legend>span>span{color:#59685e;font-size:15px}kbd{font:inherit;color:#424f44;background:#fff;border:1px solid #d9dfd8;border-bottom-width:2px;border-radius:4px;margin-right:4px;padding:2px 7px}.waiting{text-align:center;max-width:480px;margin:0 auto 24px}.waiting h1{margin-bottom:10px;font-size:27px}.waiting p{margin-bottom:12px}.invite{gap:8px;margin:16px 0;display:flex}.invite input{font-size:13px}.summary{max-width:800px;margin:64px auto}.summary h1{font-size:42px}.summary .stats{margin:28px 0 40px}.chart svg{fill:#808880;width:100%;font-family:inherit;font-size:11px;display:block}.chart{margin:30px 0}.tabs button{padding:6px 12px;font-size:13px}.tabs button.active{background:#e9eee8}.debrief,.records{border-top:1px solid #dfe3df;margin-top:35px;padding-top:24px}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13px}td,th{text-align:left;border-bottom:1px solid #e6e9e3;padding:12px 8px}th{color:#798279;font-weight:500}footer{color:#9aa19a;margin-top:60px;font-size:12px}.modal{z-index:5;background:#fafafaf5;padding:40px;position:fixed;inset:0;overflow:auto}.modal-inner{max-width:850px;margin:30px auto}.badge{border:1px solid #dce2da;border-radius:4px;padding:3px 8px;font-size:11px}.replay-surface{height:380px}.timeline{width:100%;padding:0}.event-log{white-space:pre-wrap;max-height:260px;font-size:12px;overflow:auto}.operator{max-width:1000px;margin:45px auto}.operator header{margin-bottom:30px}@media (max-width:650px){.shell{padding:18px 20px}.world-heading{margin-top:22px}.game-top{margin-top:12px}.game-surface{height:clamp(280px,100svh - 310px,520px)}.shell[data-screen=waiting] .game-surface{height:clamp(280px,100svh - 340px,480px)}.stats{gap:18px}.stat strong{font-size:20px}.board-labels{font-size:12px}.controls{gap:12px}.modal{padding:20px}.summary{margin-top:36px}.instructions-overlay .instructions{font-size:14px;line-height:1.45;display:block}.instructions-overlay .instructions p{margin-bottom:10px}.instructions-overlay #intro-timing{padding-top:10px}.instructions-overlay .actions{gap:8px}.instructions-overlay .actions button{white-space:nowrap;flex:1;min-height:44px;padding:9px 10px;font-size:14px}}@media (pointer:coarse){.keyboard-controls{display:none}.touch-controls{justify-content:space-between;align-items:center;gap:12px;padding:8px 0;font-size:12px;display:flex}#finish{min-width:108px;min-height:48px}#ready{min-height:44px;padding:8px 16px}.shell[data-screen=game] #game:has(#ready:not(.hidden)) .touch-controls{display:none}}@media (pointer:coarse) and (orientation:landscape) and (max-height:550px){.shell[data-screen=game]{flex-direction:column;height:100svh;padding:4px 20px;display:flex}.shell[data-screen=game] header{min-height:44px}.shell[data-screen=game] #world{flex-direction:column;flex:1;min-height:140px;display:flex}.shell[data-screen=game] #surface{flex:1;height:auto;min-height:100px}.shell[data-screen=game] .game-top{min-height:35px;margin-top:0}.shell[data-screen=game] .game-status{min-height:0;font-size:13px}.shell[data-screen=game] .game-bottom,.shell[data-screen=game] .game-bottom .text-button{min-height:44px}}@media (prefers-reduced-motion:reduce){button{transition:none}}
