@font-face{font-family:Lilita;src:url(../lilita-one.ttf) format("truetype");font-weight:400;font-display:swap}:root{--sage:#b9cfaf;--sage-light:#d2e0c6;--ink:#203c49;--road:#304c5c;--ivory:#fff9e9;--coral:#e97c65;--coral-dark:#873b2c;--muted:#3d5746;--teal:#247f80;--line:#8aa48b;--focus:#164f70;--radius:12px;--shadow:0 8px 24px #203c4918;color:var(--ink);font-family:Trebuchet MS,PingFang SC,Microsoft YaHei,sans-serif;font-size:16px;font-synthesis:none}*{box-sizing:border-box}html,body{width:100%;min-height:100%;margin:0}body{background:var(--sage)}button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}button:disabled{cursor:default;opacity:.42}button,dialog{border:0}button:focus-visible{outline:3px solid var(--focus);outline-offset:3px}button:not(:disabled):active{transform:translateY(1px)}button svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}button{min-height:44px;border-radius:var(--radius);background:var(--sage-light);transition:background .15s ease-out}button:not(:disabled):hover{background:#dfebd3}.primary:not(:disabled):hover{background:#3e606d}::selection{background:var(--teal);color:var(--ivory)}[hidden]{display:none!important}#app{width:min(1180px,100%);min-height:100svh;padding:24px 28px 16px;margin:auto;display:flex;flex-direction:column;gap:24px}.header{display:flex;align-items:center;gap:24px;min-height:52px}.brand{display:flex;gap:12px;align-items:center}.brand>svg{width:42px;height:42px;fill:var(--ivory);stroke:var(--ink);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}h1{font-size:26px;letter-spacing:-.035em;line-height:1.1;margin:0;white-space:nowrap}html[lang=en] h1{font:400 34px/1.1 Lilita,sans-serif;letter-spacing:0}.progress-button{display:flex;align-items:center;gap:8px;padding:0 12px;background:transparent;border:1px solid var(--line);font-size:14px;font-variant-numeric:tabular-nums;margin-left:auto;white-space:nowrap}.progress-button svg{width:16px}.header-tools{display:flex;gap:4px;align-items:center}.plain{padding:0 12px;background:transparent;font-size:14px;font-weight:700}.icon-button{display:grid;place-items:center;width:44px;min-width:44px;background:transparent}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 304px;align-items:center;gap:32px;flex:1}.board-zone{min-width:0;align-self:center;display:grid;gap:12px}.map{position:relative;container-type:inline-size;width:100%;aspect-ratio:1;border-radius:24px;box-shadow:0 12px 32px #304c5c1c;isolation:isolate}#canvas,#signs{position:absolute;top:0;right:0;bottom:0;left:0}#canvas{border-radius:24px;overflow:hidden}#canvas canvas{display:block;width:100%!important;height:100%!important}#signs{pointer-events:none}.sign{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;width:clamp(44px,6.6vw,52px);height:clamp(44px,6.6vw,52px);min-height:0;max-width:calc(100cqw / 7 - 2px);max-height:calc(100cqw / 7 - 2px);padding:8px;display:grid;place-items:center;border:2px solid var(--ivory);border-radius:50%;box-shadow:0 3px 7px #203c492a;background:var(--ivory);color:var(--road)}.sign:not(:disabled):active{transform:translate(-50%,-50%) scale(.94)}.sign:disabled{opacity:1;cursor:default}.sign svg,.sign span{pointer-events:none}.sign svg{width:100%;height:100%;stroke-width:2.6}.pad{background:var(--road);border:2px dashed #ede5c8;color:var(--ivory);border-radius:10px;width:44px;height:44px;padding:10px}.pad span{position:absolute;right:-5px;top:-7px;font-size:12px;background:var(--ivory);color:var(--ink);border-radius:50%;width:18px;line-height:18px;font-weight:700}.pad.enabled{background:#d9b56b;color:var(--ink);border-color:var(--ivory)}.pad:not(.enabled){opacity:.75}.sign:not(:disabled):hover{background:#d5e6d1}.pad.enabled:not(:disabled):hover{background:#ebc987}#pause-cover{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;border-radius:24px;background:#203c49e8;color:var(--ivory);display:flex;flex-direction:column;gap:12px;justify-content:center;align-items:center;padding:24px;text-align:center}#pause-cover strong{font-size:28px}#pause-cover span{font-size:14px}.beat-strip{display:flex;align-items:center;gap:12px;padding:0 8px;font-size:12px;font-weight:700;min-height:32px}.beat-dots{display:flex;gap:5px}.beat-dots i{width:7px;height:7px;background:#7f9e87;border-radius:50%}.beat-dots i.current{background:var(--ink);transform:scale(1.3)}#beat-number{font-variant-numeric:tabular-nums;font-size:16px;min-width:24px}.van-status{font-size:12px;white-space:nowrap}.van-status.a{margin-left:auto;color:#823d30}.van-status.b{color:#185d5f}.dispatch-desk{display:flex;flex-direction:column;gap:20px;min-width:0}.level-heading{display:flex;align-items:center;gap:8px;justify-content:space-between}#level-number{font-size:13px;font-variant-numeric:tabular-nums;font-weight:700;display:block;margin-bottom:8px;color:var(--muted)}h2{font-size:28px;letter-spacing:-.03em;line-height:1.18;margin:0;text-wrap:balance}.level-nav{display:flex;gap:0}.level-nav .icon-button{width:32px;min-width:32px}.instruction{font-size:15px;line-height:1.65;margin:0;text-wrap:pretty;min-height:75px}.feedback{display:flex;flex-direction:column;gap:8px;padding:16px 0;border-top:1px solid var(--line);min-height:108px}.feedback strong{font-size:18px;line-height:1.4}.feedback span{font-size:14px;line-height:1.55}.feedback.failed{color:var(--coral-dark)}.feedback.success{color:#185d5f}.feedback.success strong{font-size:23px}.dispatch-actions{display:grid;gap:8px}.primary{background:var(--road);color:var(--ivory);font-weight:700;font-size:17px;display:flex;justify-content:center;align-items:center;gap:12px;min-height:56px}.secondary-row{display:flex;gap:8px}.secondary-row button{flex:1;font-size:13px;background:transparent;border:1px solid var(--line)}.planning-tools{display:flex;gap:4px}.planning-tools button{flex:1;background:transparent;font-size:13px;border-radius:8px}.route-tip{font-size:12px;line-height:1.5;margin:-12px 0 0;color:var(--muted)}.save-line{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted);line-height:1.4;min-height:18px}.save-line button{font-size:12px;min-height:32px;padding:0 8px;white-space:nowrap}.save-error{color:var(--coral-dark)}#hint-panel{font-size:13px;line-height:1.7;padding:12px;background:var(--sage-light);border-radius:8px;max-height:132px;overflow:auto}dialog{background:var(--ivory);color:var(--ink);padding:24px;border-radius:20px;width:min(600px,calc(100% - 32px));max-height:85svh;box-shadow:0 16px 64px #203c4940}dialog::backdrop{background:#203c4977}.dialog-top{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.dialog-top h2{font-size:24px}#rules{padding-left:24px;margin:0;display:grid;gap:16px;font-size:15px;line-height:1.65}#level-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.level-tile{min-height:108px;text-align:left;display:flex;flex-direction:column;gap:6px;padding:12px;background:#e3eadb;border:1px solid transparent}.level-tile strong{font-size:24px;font-variant-numeric:tabular-nums}.level-tile span{font-size:13px;font-weight:700}.level-tile small{font-size:11px}.level-tile.complete{background:#c9dfcc}.level-tile.selected{border-color:var(--teal)}*{scrollbar-width:thin;scrollbar-color:var(--line) transparent}@media(min-width:901px){.map{max-width:min(100%,calc(100svh - 166px))}.board-zone{align-items:center;justify-items:center}.beat-strip{width:100%}#hint-panel{position:fixed;z-index:6;right:max(28px,calc((100vw - 1124px)/2));bottom:24px;max-width:304px;box-shadow:var(--shadow)}}@media(max-width:900px)and (min-height:501px){#app{padding:16px;gap:16px;max-width:600px}.header{gap:8px;min-height:44px}.brand{gap:8px}.brand>svg{width:32px;height:32px}h1{font-size:21px}html[lang=en] h1{font-size:27px}.progress-button{border:0;padding:0 4px;font-size:12px}.header-tools{gap:0}.icon-button{width:40px;min-width:40px}.plain{padding:0 8px}.header-tools #sound{width:36px;min-width:36px}.brand>svg{display:none}.header{gap:4px}.header-tools .plain{padding:0 6px}.game-layout{display:flex;flex-direction:column;gap:12px;flex:0}.board-zone{width:100%;order:2;gap:8px}.dispatch-desk{display:contents}.level-heading{order:0;width:100%}.level-heading>div:first-child{display:flex;align-items:baseline;gap:12px}#level-number{margin:0;white-space:nowrap}h2{font-size:23px}.instruction{order:1;min-height:0;font-size:14px;line-height:1.5;width:100%;margin-top:-8px}.feedback{order:3;width:100%;min-height:0;padding:0;border:0;gap:2px}.feedback strong{font-size:15px}.feedback span{font-size:13px}.feedback.planning span{display:none}.dispatch-actions{order:4;width:100%;grid-template-columns:1fr auto;gap:8px}.primary{font-size:16px;min-height:48px}.secondary-row{gap:4px}.secondary-row button{min-width:56px;max-width:88px;font-size:12px;padding:0 8px}.planning-tools{order:5;width:100%;margin-top:-4px}.planning-tools button{min-height:36px}.route-tip{order:6;margin:-12px 0 0;font-size:11px}.save-line{order:8;min-height:16px;margin-top:-6px}#hint-panel{order:7;width:100%}.beat-strip{gap:8px;padding:0;font-size:11px}.van-status{font-size:11px}.beat-dots{gap:4px}.beat-dots i{width:5px;height:5px}.map{border-radius:20px}.sign{width:44px;height:44px}.header-tools #help{width:32px;min-width:32px}.beat-strip{min-height:24px}}@media(max-width:380px)and (min-height:501px){#app{padding:8px 12px;gap:8px}.header{gap:4px}.brand>svg{display:none}h1{font-size:20px}html[lang=en] h1{font-size:26px}.header-tools .plain{font-size:12px}.game-layout{gap:8px}.instruction{font-size:12px;line-height:1.45;margin:0}.level-heading h2{font-size:21px}.level-nav .icon-button{min-height:36px}.level-heading>div:first-child{gap:8px}.map{width:min(100%,calc(100svh - 264px));margin:auto}.beat-strip{gap:6px}.beat-dots{display:none}.feedback strong{font-size:14px}.feedback span{font-size:12px}.primary{min-height:44px;font-size:15px}.planning-tools{margin:0}.planning-tools button{min-height:32px}.route-tip{display:none}.save-line{font-size:10px;margin:0}.secondary-row button{padding:0 6px;min-width:44px}.feedback.success strong{font-size:17px}.sign{width:42px;height:42px;padding:8px}.pad{padding:10px}}@media(max-height:500px)and (min-width:501px){#app{padding:4px 12px;gap:4px;height:100svh;min-height:0;max-width:1050px}.header{min-height:36px;gap:12px}.brand>svg{width:30px;height:30px}h1{font-size:22px}html[lang=en] h1{font-size:28px}.header-tools{gap:0}.progress-button{font-size:12px;min-height:36px}.header-tools .icon-button,.plain{min-height:36px}.game-layout{grid-template-columns:minmax(0,min(50%,calc(100svh - 72px))) minmax(0,1fr);gap:16px;min-height:0;align-items:center}.board-zone{height:100%;gap:4px;justify-items:center;align-content:center}.map{width:min(100%,calc(100svh - 72px));max-height:100%;border-radius:16px}.beat-strip{width:100%;font-size:10px;gap:6px;min-height:20px}.beat-dots{display:none}.van-status{font-size:10px}#beat-number{font-size:13px;min-width:18px}.dispatch-desk{gap:6px;max-height:100%;position:relative}.level-heading h2{font-size:18px}.level-heading>div:first-child{display:flex;gap:8px;align-items:baseline}#level-number{font-size:12px;margin:0;white-space:nowrap}.level-nav .icon-button{min-height:36px}.instruction{font-size:12px;line-height:1.45;min-height:0}.feedback{padding:0;border:0;min-height:32px;gap:0}.feedback strong{font-size:14px}.feedback span{font-size:12px;line-height:1.4}.feedback.planning span{display:none}.feedback.success strong{font-size:17px}.dispatch-actions{grid-template-columns:1fr auto;gap:6px}.primary{min-height:44px;font-size:14px;gap:6px;padding:0 10px}.secondary-row{gap:4px}.secondary-row button{font-size:11px;padding:0 7px}.planning-tools button{min-height:32px;font-size:12px}.route-tip{font-size:10px;margin:0}.save-line{font-size:10px;min-height:14px}#hint-panel{position:absolute;bottom:0;right:0;left:0;z-index:6;max-height:150px;box-shadow:var(--shadow)}.sign{width:44px;height:44px;padding:clamp(4px,2cqw,9px)}.pad{padding:clamp(5px,2.5cqw,10px)}.save-line button{min-height:26px;font-size:10px}html[data-status=failed] .instruction,html[data-status=success] .instruction,html[data-status=running] .instruction{display:none}}@media(max-width:380px)and (min-height:501px){#app{gap:4px}html[lang=en] h1{font-size:22px}.header{min-height:36px;gap:2px}.header .plain{white-space:nowrap;padding:0 4px;min-width:36px}.header .progress-button{font-size:10px;gap:2px}.header button{min-height:36px}.game-layout{gap:4px}.level-heading h2{font-size:17px}.level-heading>div:first-child{gap:6px}.level-nav .icon-button{min-height:32px;min-width:30px;width:30px}#level-number{font-size:11px}.map{width:min(100%,calc(100svh - 280px))}.board-zone{gap:4px}.beat-strip{min-height:20px}.planning-tools button{min-height:32px}.save-line{min-height:12px;font-size:10px}.feedback{gap:0}.feedback strong{font-size:13px}.feedback span{font-size:11px}.feedback.success strong{font-size:15px}html[data-status=failed] .instruction,html[data-status=success] .instruction,html[data-status=running] .instruction{display:none}}#hint-panel p{margin:0}#hint-panel .hint-close{float:right;min-height:44px;width:44px;margin:0 0 4px 4px}html[data-status=running] .sign,html[data-status=failed] .sign{opacity:.18}html[data-status=success] .sign{opacity:.4}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation:none!important;scroll-behavior:auto!important}}
