*{box-sizing:border-box}html{background:#294f59;color:#f6ecd5;font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif}body{margin:0;min-height:100dvh;background:radial-gradient(circle at 15% 0,#688d88,#345d63 52%,#244850)}button{font:inherit;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,#board:focus-visible{outline:3px solid #f3bf68;outline-offset:3px}a{color:inherit;text-decoration:none}.app{width:min(700px,calc(100% - 24px));margin:auto;padding:9px 0}header{height:49px;display:flex;align-items:center;justify-content:space-between;gap:8px}header>a{font-size:11px;color:#cfddd1}header strong{text-align:center;font-size:21px;letter-spacing:3px}header small{display:block;font-size:6px;letter-spacing:2px;color:#9bb7ae;margin-top:3px}button{min-width:44px;min-height:44px;border:1px solid #a9855c;border-radius:10px;background:#f8e7c3;color:#4f5043;box-shadow:0 3px #806447;padding:7px 11px;font-weight:800}#sound{font-size:10px}.route{display:flex;align-items:center;gap:12px;margin:8px 0}.levels{display:flex;gap:6px;flex:1}.levels button{flex:1;min-width:0;font-size:10px}.levels small{display:block;font-size:7px;margin-top:2px}.levels .active{background:#d26452;color:#fff4d3;border-color:#963d35;box-shadow:0 3px #963d35}.stats{display:flex;gap:8px;text-align:center;color:#a6bbb0;font-size:8px}.stats b{display:block;color:#f6e2b9;font-size:17px;font-variant-numeric:tabular-nums}.desk{width:min(100%,510px);margin:auto;padding:15px;border-radius:15px;background:repeating-linear-gradient(90deg,#76583c 0 30px,#805f41 30px 60px);box-shadow:inset 0 3px #a47e58,0 8px #443529,0 17px 28px #15343999}.postcard{position:relative;aspect-ratio:1;padding:13px;background:#f5e6c8;box-shadow:0 3px 8px #3f322888;transform:rotate(-.4deg)}#board{height:100%;display:grid;grid-template-columns:repeat(var(--size),1fr);gap:4px;background:#cbb991;padding:4px;outline:none}.tile{min-width:0;min-height:0;border:0;border-radius:3px;padding:0;box-shadow:inset 0 0 0 1px #fff6d055,0 2px #5c594155;background-repeat:no-repeat;position:relative;overflow:hidden}.tile small{position:absolute;right:5px;bottom:3px;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#fff4d5d9;color:#4d6258;font-size:8px;box-shadow:none}.tile.flower{background-image:radial-gradient(circle at 28% 33%,#f7df75 0 4%,transparent 5%),radial-gradient(circle at 70% 68%,#f07d68 0 5%,transparent 6%),linear-gradient(150deg,#d8e7a8 0 45%,#80b07a 46% 72%,#537c63 73%)}.tile.harbor{background-image:radial-gradient(circle at 72% 22%,#fff2aa 0 8%,transparent 9%),linear-gradient(170deg,transparent 0 45%,#f5dcad 46% 55%,#75aebb 56% 73%,#386c79 74%)}.tile.night{background-image:radial-gradient(circle at 68% 23%,#ffe89b 0 7%,transparent 8%),radial-gradient(circle at 24% 30%,#fff 0 1%,transparent 2%),linear-gradient(160deg,#273d68 0 45%,#536a89 46% 62%,#1f5755 63%)}.empty{visibility:hidden}#preview{position:absolute;inset:13px;background-repeat:no-repeat;background-size:cover;z-index:7;display:flex;align-items:flex-end;justify-content:center;padding:18px;box-shadow:inset 0 0 0 6px #fff4d5}#preview[hidden]{display:none}#preview>div{background:#fff0d8e6;color:#385c59;text-align:center;padding:8px 18px;border-radius:8px}#preview small{display:block;font-size:8px;margin-top:3px}#overlay{position:absolute;inset:0;background:#f8ead0f4;color:#385b59;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:18px;z-index:8}#overlay[hidden]{display:none}.stamp{width:39px;height:39px;border:2px dashed #c8594b;color:#c8594b;display:grid;place-items:center;transform:rotate(8deg)}#kicker{font-size:7px;letter-spacing:2px;color:#8a7f6a;margin-top:9px}h1{font-size:clamp(24px,5vw,34px);line-height:1.2;margin:7px 0}h1 em{font-style:normal;display:block;color:#c55d4d}#copy{font-size:11px;line-height:1.8;margin:3px 0 11px;color:#6e7868}#primary{background:#396b68;color:#fff2d2;border-color:#214d4d;box-shadow:0 4px #214d4d;min-width:180px}#overlay a{font-size:9px;color:#7d806e;margin-top:11px}.controls{display:flex;justify-content:center;gap:8px;margin:14px 0 0}.controls button{font-size:11px}.controls button:disabled{opacity:.45}.notice,#notice{text-align:center;min-height:17px;margin:9px 0 5px;font-size:10px;color:#bfd0c0}footer{display:flex;justify-content:space-between;font-size:8px;color:#89a9a0}.paused #board{filter:grayscale(.7) blur(2px);opacity:.45}[hidden]{display:none!important}
@media(max-width:500px){.app{width:calc(100% - 12px);padding:4px 0}header{height:44px}header strong{font-size:17px;letter-spacing:2px}header small{font-size:5px}.route{display:block;margin:4px 0}.levels{height:43px}.levels button{min-height:40px;padding:4px}.stats{position:absolute;top:53px;left:50%;transform:translateX(-50%);z-index:3}.stats span{min-width:58px;background:#315b5bdd;border-radius:8px;padding:2px}.stats b{font-size:14px}.desk{width:min(100%,calc(100svh - 185px));padding:8px}.postcard{padding:7px}#board{gap:3px;padding:3px}#preview{inset:7px}.controls{margin-top:10px;gap:5px}.controls button{padding:6px 8px;font-size:10px}.notice,#notice{margin:7px 0 3px}footer{justify-content:center}footer span:last-child{display:none}}
@media(max-width:340px){header strong{font-size:15px}.controls{gap:3px}.controls button{padding:5px 6px;font-size:9px}.desk{width:min(100%,calc(100svh - 180px))}}
@media(max-height:500px) and (orientation:landscape){.app{height:100svh;width:calc(100% - 16px);display:grid;grid-template-columns:320px 1fr;grid-template-rows:50px 74px 1fr 22px;gap:5px 12px;padding:5px 0}header{grid-column:1;grid-row:1;height:auto}.route{grid-column:1;grid-row:2;display:block;margin:0}.levels{height:42px}.stats{margin-top:3px}.desk{grid-column:2;grid-row:1/5;width:auto;height:calc(100svh - 17px);padding:8px;align-self:center}.postcard{height:100%;aspect-ratio:1;padding:7px}.controls{grid-column:1;grid-row:3;align-self:center;margin:0;flex-wrap:wrap}.notice,#notice{grid-column:1;grid-row:4;margin:0}footer{display:none}#copy{font-size:10px;line-height:1.55}h1{font-size:24px}#overlay{padding:12px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
