:root{color-scheme:dark;--bg:#07172f;--panel:#102852;--line:#244b7f;--text:#eff7ff;--muted:#96b5d7;--blue:#62d9ff;--gold:#ffdc70;font-family:ui-rounded,"Arial Rounded MT Bold",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-synthesis:none}
*{box-sizing:border-box}
body{margin:0;background:radial-gradient(ellipse at 25% 0,#173d78 0,transparent 65%),var(--bg);color:var(--text);min-height:100svh}
button{font:inherit;cursor:pointer;color:inherit;border:0;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
button:disabled{cursor:default;opacity:.42}
button:focus-visible{outline:3px solid #fff0a2;outline-offset:4px}
button:hover:not(:disabled){filter:brightness(1.15)}
h1,h2,h3,p{margin:0}
h1,h2,h3{font-weight:800;letter-spacing:-1px}
h1{font-size:clamp(25px,2.7vw,34px);line-height:1.1}
h2{font-size:28px}
h3{font-size:21px}
p{font-size:16px;line-height:1.5}
.eyebrow{font:750 12px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:1px;color:var(--muted);display:block}
.small{font-size:13px;line-height:1.5}
.muted{color:var(--muted)}
.app-shell{max-width:1120px;padding:0 28px;margin:auto}
.topbar{height:92px;display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:1px solid #2c5786}
.brand{display:flex;align-items:center;gap:12px}
.brand-logo{display:block;position:relative;font-size:35px;font-weight:900;letter-spacing:-4px;line-height:1;color:var(--blue);width:38px}
.brand-logo span{position:absolute;right:-5px;top:-4px;font-size:13px;color:#ffc84c;letter-spacing:0}
.brand b{font-size:22px;font-weight:900;letter-spacing:2px;display:block}
.brand div>span{font:700 12px ui-monospace,monospace;letter-spacing:3px;display:block;margin-top:3px;color:#81c7f3}
.top-center{font:700 12px ui-monospace,monospace;letter-spacing:.7px;color:#b4d2f4}
.top-center span{font-size:12px;display:block;margin-top:7px;color:#7194be}
.top-actions{display:flex;align-items:center;gap:8px}
.coin-wallet{display:flex;align-items:center;gap:10px;border:1px solid #52698d;background:#142e53;border-radius:10px;padding:10px 14px;min-width:100px;box-shadow:0 3px 0 #061326}
.coin-wallet span{color:var(--gold);font-size:23px}
.coin-wallet strong{font-variant-numeric:tabular-nums;font-size:23px}
.icon-button{width:35px;height:35px;background:#102a50;border:1px solid #355880;border-radius:9px;font-size:17px;color:#cce7ff}

.workspace{display:grid;grid-template-columns:minmax(380px,1fr) 320px;gap:35px;padding-top:26px;align-items:start}
.town-panel{min-width:0}
.town-heading{display:flex;justify-content:space-between;gap:15px;align-items:center;margin-bottom:15px}
.town-heading .eyebrow{margin-bottom:7px;color:#87cbef}
.town-size{background:#1d4272;border:1px solid #4878a8;border-radius:10px;padding:8px 11px;font:750 19px ui-monospace,monospace;white-space:nowrap}
.town-size span{display:none}
.town-meter{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:11px;font-size:12px;font-weight:700}
.town-meter>span:first-child{color:#96e1ff;letter-spacing:.7px}
#round-label{color:#95b4d8}
#stage-progress{display:flex;gap:10px}
.stage{color:#698bb4;font-size:12px;display:flex;align-items:center;gap:4px}
.stage b{font-weight:650}
.stage.active{color:#fff5bc}
.stage+.stage:before{content:'›';color:#466791;margin-right:4px}
.board-wrap{position:relative;background:#0e2b54;border:1px solid #477bb3;border-radius:12px;box-shadow:0 8px 0 #030f24,0 20px 45px #02102355;padding:12px 14px 0;overflow:hidden}
.board-topline{display:flex;justify-content:space-between;font:700 12px ui-monospace,monospace;color:#a6c9ed;margin-bottom:11px;gap:10px}
.board-topline span:last-child{color:#ffe29c}
.town-stage{position:relative}
.board-frame{position:relative;padding:6px;background:#0a1c38;border:2px solid #4983b5;box-shadow:0 0 0 3px #092342;border-radius:8px;aspect-ratio:1;overflow:visible}
.board{display:grid;grid-template-columns:repeat(var(--n),1fr);gap:5px;aspect-ratio:1;position:relative;isolation:isolate}
.tile{position:relative;aspect-ratio:1;min-width:0;padding:0;border-radius:6px;isolation:isolate;touch-action:manipulation;border:1px solid #294d78;background:#0d2648;overflow:visible}
.tile.empty{background:linear-gradient(135deg,#12345b,#102b4e);border:1px dashed #33658f}
.tile.empty:after{content:'+';position:absolute;inset:0;display:grid;place-items:center;color:#37668e;font-size:20px;font-weight:300;pointer-events:none}
.tile.filled{background:linear-gradient(140deg,color-mix(in srgb,var(--land),#fff 15%),var(--land));border:1px solid color-mix(in srgb,var(--land),#fff 35%);border-bottom:4px solid color-mix(in srgb,var(--land),#00142e 45%);box-shadow:inset 0 1px #ffffff55,0 2px 0 #051934;color:#04162e}
.land-art{display:block;aspect-ratio:1;background-image:url('./assets/land.webp');background-size:300% 200%;background-repeat:no-repeat}
.land-0{background-position:0 0}
.land-1{background-position:50% 0}
.land-2{background-position:100% 0}
.land-3{background-position:0 100%}
.land-4{background-position:50% 100%}
.land-5{background-position:100% 100%}
.land-6,.land-7,.land-8{background-image:url('./assets/expansions.webp');background-size:300% 100%}
.land-6{background-position:0 0}
.land-7{background-position:50% 0}
.land-8{background-position:100% 0}
.tile>.land-art{position:absolute;inset:7% 6% 2%;width:88%;height:91%;z-index:2;pointer-events:none;transform-origin:50% 80%;filter:drop-shadow(0 3px 1px #071b3566)}
.tile-code{position:absolute;left:3px;top:2px;font:900 12px/1 ui-monospace,monospace;color:#082340a6;z-index:4;pointer-events:none}
.village-mark{position:absolute;right:2px;top:2px;font-size:12px;color:#765b11;z-index:4}
.tile.guide{border:2px dashed #80ddff;background:#1d5585}
.tile.guide:after{color:#7fccec}
.tile.ghost{background:color-mix(in srgb,var(--land) 50%,#103555);border:2px solid #b2f4ff}
.tile.ghost .land-art{opacity:.8}
.tile.ghost:after{display:none}
.tile.invalid{background:#703944;border-color:#ff7c92}
.tile.chosen{z-index:7;outline:3px solid #fff;outline-offset:0;box-shadow:0 0 20px #d5f4ff99}
.tile.matching{z-index:4;box-shadow:0 0 20px color-mix(in srgb,var(--land) 80%,transparent);filter:brightness(1.1)}
.tile.matching>.land-art{animation:produce .34s ease-in-out infinite alternate}
.tile.matching .production-particle{opacity:1;animation:resource .65s ease-out infinite}
.production-particle{position:absolute;right:15%;top:0;z-index:9;color:#fff;opacity:0;font-size:20px;text-shadow:0 2px #143253;pointer-events:none}
.tile[data-kind="3"].matching>.land-art{animation:mill-work .45s ease-in-out infinite alternate}
.tile[data-kind="2"].matching>.land-art{animation:tree-work .35s ease-in-out infinite alternate}
.tile[data-kind="1"].matching>.land-art,.tile[data-kind="8"].matching>.land-art{animation:mine-work .4s ease-in-out infinite alternate}
.tile.planted>.land-art,.tile.grown>.land-art{animation:sprout .48s cubic-bezier(.2,1.5,.4,1)}
.tile.merging,.tile.picked{background:#102b4e;border-color:#2e567f;box-shadow:none;outline:0}
.tile.merging>*{opacity:0!important;animation:none!important}
.tile.picked>.land-art,.tile.picked>.tile-code{opacity:0}
.tile.born{z-index:8;animation:village-birth .6s cubic-bezier(.2,1.5,.4,1)}
.tile.born:before{content:'';position:absolute;inset:-10px;border:2px solid #fff3ba;border-radius:50%;animation:village-ring .6s ease-out both}
.tile.falling{z-index:5;animation:gravity var(--gravity-time,440ms) cubic-bezier(.38,.03,.65,1.25) both}
.tile.swapped>.land-art{animation:sprout .3s ease-out}
.board.swapping .tile.chosen:not(.picked)>.land-art{animation:swap-plot var(--move-time,360ms) ease-in-out forwards}
.merge-layer,.board-effect{position:absolute;inset:6px;pointer-events:none;z-index:14;overflow:visible}
.merge-token{position:absolute;background:var(--land);border:2px solid #fff9;border-radius:6px;box-shadow:0 0 12px var(--land);will-change:transform;display:grid;place-items:center}
.merge-token .land-art{width:90%}
.board-effect{display:grid;place-items:center;z-index:30}
.coin-burst{position:absolute;color:#ffebac;font-size:clamp(25px,5vw,42px);font-weight:900;text-shadow:0 3px #052347,0 0 12px #001b3b;animation:float-coin 1.25s ease-out forwards}
.coin-burst small{display:block;font:800 12px ui-monospace,monospace;letter-spacing:1px;text-align:center;margin-top:5px;color:white}

.knome-yard{height:76px;position:relative;background:linear-gradient(#153c66,#113155);margin-top:3px;border-bottom:1px solid #38658d;overflow:hidden}
.yard-route{position:absolute;left:10px;right:10px;bottom:17px;border-top:2px dashed #7babcd32}
.yard-caption{position:absolute;right:6px;bottom:5px;font:700 12px ui-monospace,monospace;letter-spacing:1px;color:#5b84ac}
#yard-label{position:absolute;left:6px;bottom:5px;color:#80a3c6;font-size:12px}
.actor-layer{position:absolute;inset:0;pointer-events:none;z-index:20;overflow:visible}
.knome-actor{position:absolute;width:60px;height:57px;pointer-events:none;will-change:left,top;z-index:1}
.knome-body{display:block;width:60px;height:57px;position:relative;transform:scaleX(var(--facing,1));z-index:2}
.knome-sprite{position:absolute;inset:0;background-image:url('./assets/walk.webp');background-repeat:no-repeat;background-size:373.214% 400%;background-position:0 var(--row,0%);filter:drop-shadow(0 2px 1px #020f2488)}
.sprite-worker{--row:0%}
.sprite-wizard{--row:33.3333%}
.sprite-gardener{--row:66.6667%}
.sprite-smith{--row:100%}
.knome-actor.walking .knome-sprite,.knome-actor.idle .knome-sprite{animation:walk-frames .52s step-end infinite}
.knome-actor.idle{animation:yard-wander 7s ease-in-out infinite alternate;animation-delay:var(--roam-delay)}
.knome-actor.working .knome-body{animation:lift .32s ease-in-out infinite alternate}
.knome-actor.echo{filter:sepia(.1) hue-rotate(135deg) drop-shadow(0 0 5px #58ceff);opacity:.72}
.knome-actor.walking,.knome-actor.working{z-index:5}
.actor-name{position:absolute;bottom:calc(100% + 1px);left:50%;transform:translateX(-50%);background:#dff8ff;color:#082443;font-size:12px;font-weight:800;white-space:nowrap;padding:2px 5px;border-radius:4px;opacity:0}
.knome-actor.walking .actor-name,.knome-actor.working .actor-name{opacity:1}
.actor-shadow{position:absolute;bottom:0;left:12px;right:4px;height:7px;background:#00132c66;border-radius:50%;filter:blur(1px)}
.carried-plot{display:none;position:absolute;left:39px;top:23px;width:28px;height:28px;border-radius:4px;background:var(--land);border:1px solid #e4f7ff;box-shadow:0 2px #092343;z-index:3;transform:rotate(-9deg)}
.carried-plot .land-art{width:100%;height:100%}
.carrying .carried-plot{display:block}
.work-line{min-height:43px;padding:8px 2px;display:flex;align-items:center;font-size:14px;line-height:1.35;color:#bbd9f5}
.work-progress{margin:0 -14px;height:3px;background:#061a34}
.work-progress i{display:block;height:100%;width:0%;background:#68d9ff;transition:width .3s}

.build-dock{display:flex;align-items:center;justify-content:space-between;gap:15px;background:#102b53;border:1px solid #366397;border-radius:10px;padding:12px 15px;margin-top:17px;min-height:110px}
.piece-main{display:flex;align-items:center;justify-content:space-between;gap:20px;flex:1;min-width:0}
.piece-label .eyebrow{color:#85d9fc}
.piece-label>span:last-child{display:block;color:#779fc6;font-size:12px;line-height:1.4;margin-top:7px;max-width:105px}
.piece-preview{padding:5px;display:grid;grid-template-columns:repeat(var(--cols),29px);grid-template-rows:repeat(var(--rows),29px);gap:3px;position:relative;background:transparent;touch-action:none;cursor:grab;flex:none}
.piece-preview:active{cursor:grabbing}
.piece-cell{background:var(--land);border:1px solid #fff5;border-bottom:2px solid #13284a66;border-radius:3px;width:100%;height:100%;pointer-events:none}
.piece-cell .land-art{width:100%;height:100%;pointer-events:none}
.piece-actions{display:grid;gap:6px;min-width:105px}
.control-button{border:1px solid #456fa0;background:#204977;padding:8px 10px;border-radius:6px;font-size:14px;display:flex;align-items:center;justify-content:center;gap:6px;min-height:35px;white-space:nowrap}
.control-button b{font-size:12px;background:#0c294e;color:#88e7ff;border-radius:3px;padding:2px 5px}
.hint-button{background:transparent;font-size:12px;color:#9abfe0;text-decoration:underline;text-underline-offset:3px;padding:2px}
.work-dock{display:flex;align-items:center;justify-content:space-between;gap:14px;background:#133663;border:1px solid #3b6898;border-radius:10px;margin-top:16px;padding:15px;min-height:88px}
.active-worker{display:flex;align-items:center;gap:10px;min-width:0}
.active-worker .eyebrow{font-size:12px;letter-spacing:.6px;color:#72dfff}
.active-worker strong{font-size:14px;line-height:1.4;display:block;margin-top:6px;font-weight:600}
.work-beacon{font-size:28px;color:#7ce6ff}
.work-controls{display:flex;gap:6px;flex:none}
.work-controls .control-button{min-width:45px}
.overflow{display:flex;align-items:center;gap:14px;margin:16px 3px 10px;min-height:49px;overflow:hidden}
.overflow>div:first-child{flex:none;display:grid;gap:5px}
.overflow .eyebrow{font-size:12px;letter-spacing:.8px}
.overflow .small{font-size:12px;color:#709cc5}
#overflow-pieces{display:flex;align-items:center;gap:13px;flex:1;overflow:hidden}
.queue-piece{display:grid;grid-template-columns:repeat(var(--cols),14px);grid-template-rows:repeat(var(--rows),14px);gap:2px;flex:none}
.queue-piece:nth-child(n+3){opacity:.65}
.queue-piece .piece-cell{border-radius:2px}
.queue-piece .land-art{opacity:.8}
.overflow-arrow{font-size:22px;color:#5cbde8}
.overflow-placeholder{font-size:13px;color:#749bbd}
.town-foot{display:flex;justify-content:space-between;gap:12px;font-size:12px;line-height:1.4;color:#7899bb;border-top:1px solid #224778;padding-top:12px}

.town-hall{border-left:1px solid #345681;padding-left:24px;min-width:0}
.hall-tabs{display:flex;border-bottom:1px solid #32547e;margin-bottom:24px;gap:16px}
.hall-tabs button{background:transparent;padding:8px 0 13px;color:#729bbf;font-size:14px;font-weight:700;border-bottom:3px solid transparent}
.hall-tabs button.selected{color:#8ee9ff;border-bottom-color:#66d4ff}
.section-heading{margin:0 0 22px}
.section-heading .eyebrow{margin-bottom:8px}
.upgrade-card{display:grid;grid-template-columns:34px 1fr;gap:10px;padding:18px 0;border-bottom:1px solid #294a73}
.upgrade-icon{width:34px;height:34px;background:#16406b;color:#80d7ff;border:1px solid #32628e;border-radius:7px;display:grid;place-items:center;font-size:22px}
.upgrade-card h3{font-size:16px;letter-spacing:-.25px;margin-bottom:5px}
.upgrade-card p{font-size:13px;line-height:1.5;color:#92b2d0}
.upgrade-bottom{grid-column:2/-1;display:flex;justify-content:space-between;align-items:center;gap:10px}
.upgrade-level{font-size:12px;color:#6498c5}
.buy-button{border:1px solid #496d96;background:#162f52;padding:7px 10px;min-width:70px;border-radius:6px;min-height:34px;font-size:14px;font-weight:750}
.buy-button:disabled{opacity:1;color:#5c7ca2;border-color:#29476d}
.buy-button.affordable{background:#67dbff;border-color:#a7edff;color:#062745;box-shadow:0 2px 0 #266c91}
.board-upgrade{background:linear-gradient(90deg,#184b7822,transparent)}
.expansion-banner{padding:13px;background:#184673;border:1px solid #3478a7;border-radius:9px;font-size:13px;line-height:1.45;color:#b1dbf6;margin-bottom:6px}
.expansion-banner strong{color:#d8f8ff;display:block;margin-bottom:5px}
.expansion-banner button{background:#77d7ff;color:#082b4c;padding:8px 10px;border-radius:5px;margin-top:9px;font-size:13px;font-weight:750}
.ledger{margin-top:28px}
.ledger p{font-size:13px;line-height:1.5;color:#7e9fbe;border-bottom:1px dashed #274975;padding:10px 0}
.crew-panel{display:none}
body[data-view=crew] .crew-panel{display:block}
body[data-view=crew] .upgrade-panel{display:none}
.portrait{background-image:url('./assets/knomes.webp');background-size:200% 200%;background-repeat:no-repeat;width:92px;aspect-ratio:1;flex:none;filter:drop-shadow(0 4px 4px #061b38)}
.portrait.worker{background-position:0 0}
.portrait.wizard{background-position:100% 0}
.portrait.gardener{background-position:0 100%}
.portrait.smith{background-position:100% 100%}
.pip-intro{display:flex;gap:15px;align-items:center}
.pip-intro .portrait{width:116px}
.tiny-tag{font-size:12px;color:#7eabcf}
.pip-intro h3{font-size:28px;margin:5px 0}
.pip-intro p{font-size:14px;line-height:1.5;color:#94b6d6}
.crew-facts{display:flex;justify-content:space-between;gap:20px;margin:20px 0;border-top:1px solid #32547a;border-bottom:1px solid #32547a;padding:15px 0}
.crew-facts strong{font-size:25px;color:#8addff;display:block}
.crew-facts span{font-size:12px;color:#829fbe;display:block;margin-top:4px}
.specialist{display:grid;grid-template-columns:70px 1fr;gap:9px;padding:20px 0;border-bottom:1px solid #305278}
.specialist .portrait{width:77px}
.specialist h3{font-size:16px;letter-spacing:-.3px;margin:4px 0 6px}
.specialist p{font-size:13px;line-height:1.5;color:#91b4d4}
.specialist.locked .portrait{filter:saturate(.65);opacity:.7}
.level{font:700 12px ui-monospace,monospace;color:#66a7d6}
.recruit{grid-column:2/-1;background:#214b78;border:1px solid #437aa3;padding:9px;border-radius:6px;font-size:13px;min-height:37px;color:#b8eafa}
.field-guide{margin-top:28px}
.field-guide>p{margin-top:14px}
#land-legend{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:16px}
#land-legend>div{display:flex;gap:8px;align-items:center;font-size:13px;color:#b0cdea}
#land-legend .legend-art{width:32px;height:32px;flex:none;border-radius:6px;background-color:var(--land);box-shadow:0 2px #052344}
.legend-locked{opacity:.35}

.reward-panel{position:absolute;inset:5%;z-index:40;background:#0c2853f5;border:2px solid #8ddfff;border-radius:10px;box-shadow:0 8px 40px #001832aa;backdrop-filter:blur(8px);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:18px}
.reward-panel .eyebrow{color:#85dfff;font-size:12px}
.reward-panel h2{font-size:clamp(23px,3vw,32px);margin-top:8px}
.reward-amount{font-size:clamp(38px,6vw,60px);font-weight:900;letter-spacing:-2px;color:#ffde85;margin:9px 0 4px}
.reward-meta{font-size:13px;color:#9fc3e7;margin-bottom:13px}
.reward-panel p{font-size:14px;line-height:1.45;color:#c2d9ef;max-width:310px;margin-bottom:14px}
.primary-button{background:#70deff;color:#06244b;font-size:15px;font-weight:800;padding:12px 18px;border:1px solid #c2f6ff;border-radius:7px;box-shadow:0 3px #22739e;min-height:44px}
.reward-panel .primary-button{width:90%;max-width:280px}
.text-button{background:transparent;color:#99ccef;text-decoration:underline;text-underline-offset:4px;padding:10px 0;font-size:14px}
.reward-panel .text-button{font-size:13px}
.desktop-footer{display:flex;align-items:center;justify-content:space-between;gap:15px;padding:25px 0;color:#6085af;font:600 12px ui-monospace,monospace}
.desktop-footer button{background:transparent;color:#7fb6df;font-size:12px}
.mobile-nav{display:none}
.toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%) translateY(12px);background:#d3f4ff;color:#103456;border:1px solid #87dbff;padding:13px 20px;border-radius:8px;max-width:min(90vw,460px);z-index:100;font-size:14px;text-align:center;line-height:1.45;opacity:0;pointer-events:none;transition:.2s;box-shadow:0 4px 30px #03132b66}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
dialog{background:#112f5c;color:var(--text);border:1px solid #5893c9;border-radius:15px;padding:28px;max-height:87svh;width:min(620px,calc(100vw - 24px));box-shadow:0 25px 90px #011126aa}
dialog::backdrop{background:#020f28c9;backdrop-filter:blur(7px)}
dialog h2{font-size:30px;line-height:1.1;margin:10px 0 18px}
.close-dialog{position:absolute;right:12px;top:12px;width:33px;height:33px;border-radius:5px;background:#214878;font-size:26px}
.rules{padding-left:20px}
.rules li{font-size:15px;line-height:1.55;color:#b1cce7;margin:16px 0;padding-left:4px}
.rules strong{color:#effbff}
.help-note{font-size:14px;background:#123a68;border-left:3px solid #72d8ff;padding:14px;margin:18px 0}
.dialog-footer{display:flex;gap:16px;align-items:center;justify-content:space-between;margin-top:20px}
.expansion-choice{display:grid;grid-template-columns:77px 1fr;gap:12px;border:1px solid var(--land);background:color-mix(in srgb,var(--land) 12%,#102952);border-radius:9px;padding:12px;margin:12px 0;text-align:left;width:100%}
.expansion-choice>.land-art{width:77px}
.expansion-choice strong{display:block;color:var(--land);font-size:19px;margin:6px 0}
.expansion-choice p{font-size:14px;line-height:1.4;color:#c4d9ef}
.expansion-choice span:last-child{font-size:12px;display:block;margin-top:7px;color:#8fdcff}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
[hidden]{display:none!important}
.noscript{padding:30px;background:#962d52;text-align:center}
.error-shake{animation:shake .3s ease}
body.paused *{animation-play-state:paused!important}
.board.reshuffle{animation:shuffle .55s ease}

@keyframes produce{from{transform:translateY(0) scale(.9)}
to{transform:translateY(-5px) scale(1.08)}
}
@keyframes resource{to{transform:translateY(-28px) rotate(25deg);opacity:0}
}
@keyframes mill-work{to{transform:rotate(6deg) translateY(-4px);filter:drop-shadow(0 0 7px #9efaff)}
}
@keyframes tree-work{to{transform:skewX(-5deg) scale(1.1)}
}
@keyframes mine-work{to{filter:brightness(1.7) drop-shadow(0 0 7px #e5c9ff);transform:scale(1.1)}
}
@keyframes sprout{0%{transform:scale(.3) translateY(20px);opacity:.3}
60%{transform:scale(1.12) translateY(-4px)}
100%{transform:scale(1)}
}
@keyframes village-birth{0%{transform:scale(.08) rotate(-25deg);filter:brightness(3)}
65%{transform:scale(1.13) rotate(5deg)}
100%{transform:scale(1)}
}
@keyframes village-ring{to{transform:scale(1.8);opacity:0}
}
@keyframes gravity{0%{transform:translateY(var(--fall-from))}
85%{transform:translateY(3px) scaleY(.94)}
100%{transform:translateY(0) scaleY(1)}
}
@keyframes swap-plot{to{transform:translate(var(--swap-x),var(--swap-y))}
}
@keyframes float-coin{0%{opacity:0;transform:translateY(20px) scale(.5)}
15%{opacity:1;transform:translateY(-5px) scale(1.08)}
70%{opacity:1}
100%{opacity:0;transform:translateY(-70px) scale(.9)}
}
@keyframes walk-frames{0%{background-position-x:0%}
25%{background-position-x:34.15%}
50%{background-position-x:68.3%}
75%{background-position-x:102.45%}
}
@keyframes yard-wander{0%,12%{transform:translateX(0)}
88%,100%{transform:translateX(var(--roam-range))}
}
@keyframes lift{to{transform:scaleX(var(--facing,1)) translateY(-2px) rotate(-3deg)}
}
@keyframes shake{25%{transform:translateX(-4px)}
75%{transform:translateX(4px)}
}
@keyframes shuffle{50%{transform:scale(.96);opacity:.5}
}

@media(max-width:1000px){.app-shell{padding:0 22px}
.workspace{grid-template-columns:minmax(360px,1fr) 280px;gap:24px}
.town-hall{padding-left:20px}
.top-center{display:none}
.town-heading h1{font-size:27px}
.piece-main{gap:10px}
.piece-preview{grid-template-columns:repeat(var(--cols),25px);grid-template-rows:repeat(var(--rows),25px)}
}

@media(max-width:760px){.app-shell{max-width:580px;padding:0 14px}
.topbar{height:66px;gap:12px}
.brand{gap:9px}
.brand-logo{font-size:29px;width:29px}
.brand b{font-size:18px;letter-spacing:1px}
.brand div>span{font-size:12px;letter-spacing:2px}
.top-actions{gap:6px}
.coin-wallet{min-width:75px;padding:6px 9px;gap:7px;border-radius:7px}
.coin-wallet strong{font-size:20px}
.coin-wallet span{font-size:20px}
.icon-button{width:29px;height:31px;font-size:15px}
.workspace{display:block;padding-top:14px;padding-bottom:90px}
.town-heading{margin-bottom:11px;gap:8px}
.town-heading .eyebrow{display:none}
.town-heading h1{font-size:25px;letter-spacing:-.9px}
.town-size{font-size:16px;padding:6px 8px;border-radius:6px}
.town-meter{margin-bottom:9px;font-size:12px;gap:5px}
#stage-progress{gap:7px}
.stage{font-size:12px;gap:3px}
.board-wrap{padding:9px 10px 0;border-radius:10px}
.board-topline{font-size:12px;margin-bottom:9px}
.board-frame{padding:5px;border-radius:6px;width:min(100%,max(270px,calc(100svh - 455px)));margin:auto}
.board{gap:4px}
.tile{border-radius:4px}
.tile.filled{border-bottom-width:3px}
.tile-code{font-size:12px}
.work-line{font-size:13px;min-height:39px;line-height:1.35;padding:7px 1px}
.work-progress{margin:0 -10px}
.knome-yard{height:62px;margin-top:3px}
.knome-actor{width:54px;height:51px}
.knome-body{width:54px;height:51px}
.carried-plot{left:35px;top:20px;width:25px;height:25px}
.actor-name{font-size:12px;bottom:100%}
.yard-caption{font-size:12px}
#yard-label{font-size:12px}
.build-dock{margin-top:13px;padding:9px 10px;gap:10px;min-height:99px}
.piece-main{gap:8px}
.piece-label .eyebrow{font-size:12px;letter-spacing:.5px;max-width:85px}
.piece-label>span:last-child{font-size:12px;max-width:85px;margin-top:5px}
.piece-preview{grid-template-columns:repeat(var(--cols),25px);grid-template-rows:repeat(var(--rows),25px);gap:2px;padding:3px}
.piece-actions{min-width:94px;gap:4px}
.control-button{font-size:13px;min-height:33px;padding:7px 8px}
.hint-button{font-size:12px}
.work-dock{padding:11px 12px;min-height:80px;margin-top:13px;gap:8px}
.active-worker{gap:7px}
.active-worker .eyebrow{font-size:12px}
.active-worker strong{font-size:13px;margin-top:5px}
.work-beacon{display:none}
.work-controls{display:grid;gap:5px}
.work-controls .control-button{min-width:52px;min-height:30px}
.overflow{margin-top:13px;gap:10px;min-height:48px}
.overflow .eyebrow{font-size:12px}
.overflow .small{font-size:12px}
#overflow-pieces{gap:10px}
.queue-piece{grid-template-columns:repeat(var(--cols),12px);grid-template-rows:repeat(var(--rows),12px)}
.town-foot{font-size:12px;gap:8px}
.town-hall{display:none;border:none;padding:0}
.hall-tabs{display:none}
body[data-view=upgrades] .town-panel,body[data-view=crew] .town-panel{display:none}
body[data-view=upgrades] .town-hall,body[data-view=crew] .town-hall{display:block}
.section-heading{margin:8px 0 25px}
.section-heading h2{font-size:31px}
.upgrade-card{padding:20px 2px;grid-template-columns:44px 1fr;gap:12px}
.upgrade-icon{width:44px;height:44px;font-size:28px}
.upgrade-card h3{font-size:18px}
.upgrade-card p{font-size:14px}
.upgrade-level{font-size:13px}
.buy-button{font-size:16px;padding:9px 13px;min-height:40px}
.expansion-banner{font-size:15px;padding:16px}
.expansion-banner button{font-size:15px;min-height:39px}
.specialist{grid-template-columns:95px 1fr}
.specialist .portrait{width:95px}
.specialist h3{font-size:18px}
.specialist p{font-size:14px}
.specialist .recruit{font-size:15px}
.pip-intro .portrait{width:136px}
.pip-intro p{font-size:16px}
.crew-facts span{font-size:14px}
#land-legend>div{font-size:15px}
#land-legend .legend-art{width:43px;height:43px}
.mobile-nav{display:flex;position:fixed;bottom:0;left:0;right:0;z-index:60;background:#091e42f2;backdrop-filter:blur(15px);border-top:1px solid #3b6591;justify-content:center;padding:7px 16px calc(7px + env(safe-area-inset-bottom))}
.mobile-nav button{background:transparent;color:#6d9ac4;font-size:13px;font-weight:750;min-height:34px;display:flex;align-items:center;justify-content:center;gap:8px;flex:1;max-width:200px}
.mobile-nav button>span{font-size:23px}
.mobile-nav button.selected{color:#94e6ff}
.desktop-footer{display:none}
.toast{bottom:calc(70px + env(safe-area-inset-bottom));font-size:13px}
.reward-panel{padding:14px;inset:4%}
.reward-panel h2{font-size:24px}
.reward-panel .eyebrow{font-size:12px}
.reward-amount{font-size:40px;margin:6px 0 2px}
.reward-meta{font-size:12px;margin-bottom:9px}
.reward-panel p{font-size:13px;margin-bottom:10px}
.reward-panel .primary-button{font-size:13px;min-height:38px;padding:9px 12px}
.reward-panel .text-button{font-size:12px;padding:8px 0}
dialog{padding:25px 19px}
dialog h2{font-size:28px}
.dialog-footer{gap:9px;flex-wrap:wrap}
}

@media(max-width:370px){.app-shell{padding:0 10px}
.town-heading h1{font-size:22px}
.town-meter{font-size:12px}
.piece-main{gap:3px}
.piece-preview{grid-template-columns:repeat(var(--cols),23px);grid-template-rows:repeat(var(--rows),23px)}
.piece-label .eyebrow{font-size:12px}
.piece-label>span:last-child{font-size:12px}
.build-dock{padding:8px;gap:7px}
.piece-actions{min-width:83px}
.control-button{font-size:12px}
.board-wrap{padding-left:8px;padding-right:8px}
.work-progress{margin:0 -8px}
.board-frame{width:100%}
.reward-panel h2{font-size:21px}
.reward-panel p{font-size:12px}
.reward-amount{font-size:33px}
}

@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
}


/* The production town keeps its original colour language; the city gets real illustrated land. */
.tier-art{background-image:url('./assets/buildings-progression.webp');background-size:600% 600%}
.terrain-art{background-image:url('./assets/terrain-obstacles.webp');background-size:300% 100%}
.tile.terrain{background:#15283e;border:1px solid #5a7288;border-bottom:4px solid #020a19;cursor:default}
.tile.terrain>.land-art{inset:0;width:100%;height:100%;filter:drop-shadow(0 3px 2px #0009)}
.tile.terrain .tile-code{color:#dff6ff;text-shadow:0 1px 2px #000}
.tile.terrain[data-kind="-3"]{box-shadow:inset 0 0 20px #18ccff33}
.tile.terrain[data-kind="-4"]{box-shadow:inset 0 0 20px #000}
.tier-badge{position:absolute;right:3px;bottom:3px;z-index:5;min-width:16px;padding:2px 3px;background:#07172fdb;color:#e4f5ff;border:1px solid #b0e2ff6b;border-radius:4px;font:800 12px/1 ui-monospace,monospace;pointer-events:none}
.tile.neon{border-color:#c3ffed;background:linear-gradient(135deg,#074f59,#171740);box-shadow:0 0 10px #49ffd4,inset 0 0 18px #e14eff80;animation:neon-hum 2s ease-in-out infinite alternate}
.tile.neon>.land-art{filter:drop-shadow(0 0 3px #26ffd8) drop-shadow(0 0 5px #e757ff) saturate(1.35)}
.tile.neon .tile-code{color:#a1fff1}.tile.neon .tier-badge{color:#b2ffdf;border-color:#70ffc8}
.coin-wallet .gdp-label{font:850 12px/1 ui-monospace,monospace;letter-spacing:.5px}
.coin-burst{text-align:center;max-width:92%;line-height:1.1;animation:float-gdp 1.8s ease-out forwards;filter:drop-shadow(0 0 12px #010812)}
.coin-burst em{font:800 .4em/1 ui-monospace,monospace;font-style:normal}
.coin-burst small{font-size:12px;letter-spacing:.3px;line-height:1.4;background:#07172feb;padding:6px 9px;border-radius:6px;border:1px solid #688cbd88;margin-top:9px}
.combo-result{margin-top:14px;border-left:3px solid #73ffd1;background:#0d2b45;padding:11px 12px;min-height:66px;color:#d1e7f7}
.combo-result strong{display:block;font-size:14px;line-height:1.4;color:#a9ffe3}.combo-result strong b{float:right;color:#ffdf84;font-size:14px;margin-left:8px}
.combo-result>span{display:block;margin-top:5px;font-size:13px;line-height:1.4;color:#a5c4de}
.work-bonuses{display:flex;flex-wrap:wrap;gap:7px;font-size:12px;line-height:1.4;margin-top:6px;color:#adc8e1}
#neon-charge{color:#a3ffe2;border:1px solid #4ebc9c;background:#11574650;padding:5px 8px;border-radius:5px;font-weight:800}
#terrain-count:not(:empty){padding:5px 0;color:#ffbf99}
.land-survey{display:flex;align-items:center;gap:12px;background:#3a2c34;border:1px solid #976651;margin-top:9px;padding:10px;border-radius:8px}
.land-survey p{font-size:13px;line-height:1.4;color:#f2ccaf;flex:1}.land-survey button{flex:none;background:#794b39;border-color:#c68c63;color:#fff4cf;font-size:13px}
[hidden]{display:none!important}
.city-yard{margin-top:16px;border-top:1px solid #396886;position:relative;padding-top:12px}
.city-heading{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:4px}
.city-heading .eyebrow{font-size:12px;letter-spacing:.6px;color:#8bb4ce}.city-heading strong{font-size:18px;color:#dfefc7;display:block;margin-top:3px}
.city-stage{font:800 16px ui-monospace,monospace;color:#d9ffd1;border:1px solid #77906566;padding:7px 9px;border-radius:6px;background:#133235}
.knome-yard{height:auto;aspect-ratio:2/1;background:#062043;margin:0;border:0;overflow:hidden;border-radius:6px}
.city-scenery{position:absolute;inset:0;background-image:url('./assets/city-eras.webp');background-size:200% 500%;background-repeat:no-repeat}
.city-lots{position:absolute;inset:0;pointer-events:none}
.city-lot{position:absolute;width:15%;aspect-ratio:1;transform:translateX(-5%);filter:drop-shadow(0 3px 2px #0006)}
.city-lot .land-art,.city-landmark .land-art{width:100%;height:100%}
.city-lot.new-lot{animation:district-rise .85s cubic-bezier(.2,1.4,.4,1) both}
.city-landmark{position:absolute;width:12%;aspect-ratio:1;filter:drop-shadow(0 0 4px var(--land));z-index:3}
.city-landmark b{position:absolute;right:1px;bottom:2px;background:#072644;color:#e9ffa9;border:1px solid #94af86;border-radius:3px;font:800 12px/1 ui-monospace;padding:2px}
#yard-label{left:8px;bottom:5px;background:#071c3bdb;border:1px solid #45648255;border-radius:5px;padding:3px 7px;color:#c4dcd6;font-size:12px;z-index:30}
.city-growth{height:4px;border-radius:3px;overflow:hidden;background:#071b2e;margin-top:6px}.city-growth i{display:block;height:100%;background:linear-gradient(90deg,#70dab6,#d1f398);transition:width .5s}
.city-next{font-size:12px;line-height:1.5;color:#a3c3b9;margin-top:5px;padding-bottom:6px}
.harvest-square{position:absolute;border:3px solid #ebffe9;background:#b5fff422;box-shadow:0 0 18px #b9ffe9,inset 0 0 28px #66ffc666;border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:white;z-index:25}
.harvest-square b{font:900 85px/1 ui-monospace;filter:drop-shadow(0 0 8px #5affe5)}
.harvest-square span{font:900 14px ui-monospace;background:#063531e8;padding:5px 8px;border-radius:4px}
.combo-orbit{position:absolute;border:3px dashed var(--land);border-radius:50%;box-shadow:0 0 22px var(--land),inset 0 0 18px var(--land)}
.creation-reveal{position:absolute;border-radius:7px;background:#092a43b0;z-index:28;filter:drop-shadow(0 0 14px var(--land));border:2px solid #ffeda4}
.creation-reveal .land-art{width:100%;height:100%}.creation-reveal b{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);white-space:nowrap;background:#fff3b2;color:#052b39;border-radius:4px;padding:4px 7px;font:900 12px ui-monospace;margin-bottom:6px}
.neon-reveal{border-color:#b4fffa;box-shadow:0 0 25px #a763ff,0 0 35px #17ffce}.neon-reveal b{background:#b7ffee;color:#17354a}
.fall-caption{position:absolute;left:50%;top:38%;transform:translateX(-50%) rotate(-7deg);padding:10px 15px;border:2px solid #fff4d1;background:#682c4aed;color:#fff3b2;box-shadow:0 5px 0 #0006;border-radius:8px;font:900 clamp(16px,3vw,23px) ui-monospace;white-space:nowrap;z-index:35;animation:fall-pop .7s ease-out both}
.tile.matching .land-art{animation:production-wild .45s ease-in-out infinite alternate}
.tile[data-kind="0"].matching>.land-art{animation:produce .23s ease-in-out infinite alternate}
.tile[data-kind="4"].matching>.land-art{animation:market-spin .48s ease-in-out infinite alternate}
.tile[data-kind="6"].matching>.land-art{animation:bakery-bounce .26s ease-in-out infinite alternate}
.tile[data-kind="7"].matching>.land-art{animation:forge-stamp .24s ease-in-out infinite alternate}
.production-particle{font-size:24px;text-shadow:0 0 9px var(--land),0 2px #143253}
@keyframes neon-hum{from{box-shadow:0 0 6px #49ffd4,inset 0 0 10px #e14eff60}to{box-shadow:0 0 15px #c373ff,inset 0 0 20px #36ffe980}}
@keyframes float-gdp{0%{transform:translateY(20px) scale(.5);opacity:0}15%,55%{transform:translateY(-8px) scale(1);opacity:1}100%{transform:translateY(-85px) scale(1.02);opacity:0}}
@keyframes district-rise{from{opacity:0;translate:0 -22px;scale:.6}to{opacity:1;translate:0 0;scale:1}}
@keyframes fall-pop{0%{opacity:0;scale:.4}25%,80%{opacity:1;scale:1}100%{opacity:0;scale:1.15}}
@keyframes production-wild{to{transform:translateY(-9%) scale(1.13) rotate(5deg);filter:drop-shadow(0 0 5px var(--land))}}
@keyframes market-spin{to{transform:rotateY(35deg) rotateZ(-8deg) scale(1.1)}}
@keyframes bakery-bounce{to{transform:translateY(-13%) scale(1.1,.9)}}
@keyframes forge-stamp{to{transform:translateY(5%) scale(1.16,.85);filter:brightness(1.5) drop-shadow(0 0 7px #ff9840)}}
@media(max-width:760px){
  .city-yard{margin-top:12px;padding-top:9px}.city-heading strong{font-size:16px}.city-heading .eyebrow{font-size:12px}.city-stage{font-size:14px;padding:5px 8px}
  .knome-yard{height:auto;aspect-ratio:2/1}.knome-actor,.knome-body{width:44px;height:42px}.carried-plot{left:28px;top:17px;width:23px;height:23px}
  .city-lot{width:15%}.city-next{font-size:12px}.combo-result{margin-top:12px;padding:10px}.combo-result strong{font-size:13px}.combo-result>span{font-size:12px}.combo-result strong b{font-size:13px}
  .land-survey{flex-wrap:wrap;gap:8px}.land-survey p{min-width:170px}.land-survey button{min-height:38px}
  .tile>.land-art{inset:5% 2% 1%;width:96%;height:94%}.tile-code{font-size:12px}.tier-badge{right:1px;bottom:1px;font-size:12px;padding:1px 2px}
  .build-dock{position:sticky;bottom:calc(56px + env(safe-area-inset-bottom));z-index:40;box-shadow:0 -5px 20px #06132d66}
  .coin-wallet strong{max-width:100px;font-size:18px}.coin-wallet{min-width:70px}.coin-wallet .gdp-label{font-size:12px}
  .buy-button,.recruit{min-height:44px}.icon-button{min-width:34px;min-height:36px}.control-button{min-height:36px}
}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}
/* Village days: the board is the screen, and the crew owns payday. */
.quota-strip{padding:12px 2px 14px;display:grid;gap:7px}.quota-strip strong{display:flex;justify-content:space-between;gap:12px;font-size:14px;color:#bbecff}.quota-strip>span{font-size:12px;color:#a5c5e7}.quota-track{height:7px;border-radius:9px;overflow:hidden;background:#213f69}.quota-track i{display:block;height:100%;width:0;background:linear-gradient(90deg,#4bc9ff,#a3ffca);transition:width .35s}.advanced-art{background-size:900% 300%;background-repeat:no-repeat}.advanced-a{background-image:url('./assets/advanced-a.webp')}.advanced-b{background-image:url('./assets/advanced-b.webp')}.tier-badge{font-size:12px!important;min-width:19px;padding:2px 3px;background:#071b46e6;color:#fff}.reward-panel{z-index:42}.reward-amount small{font-size:16px}.personality{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid #38537c;opacity:.6}.personality.hired{opacity:1}.personality .portrait{flex:0 0 54px;width:54px;height:60px}.personality strong{font-size:14px}.personality p{font-size:14px;color:#9cdeff}.personality small{font-size:12px;line-height:1.4;color:#c3d2e7;display:block}.actor-speech{display:none;position:absolute;bottom:65px;left:50%;transform:translateX(-50%);width:max-content;max-width:170px;background:#f4fbff;color:#173659;border-radius:14px 14px 14px 3px;padding:7px 10px;box-shadow:0 3px 10px #071a4288;font-size:12px;font-weight:750;text-align:center;z-index:5}.chatty .actor-speech{display:block}.knome-actor .sprite-worker{filter:hue-rotate(var(--personality-hue,0deg))}.knome-actor[data-mood] .knome-sprite{background-image:url('./assets/curious.webp');background-size:400% 400%;animation:curiousFrames .6s steps(1) infinite}.knome-actor[data-mood=inspect] .knome-sprite{background-position-y:0%}.knome-actor[data-mood=hop] .knome-sprite{background-position-y:33.333%}.knome-actor[data-mood=haul] .knome-sprite{background-position-y:66.667%}.knome-actor[data-mood=bow] .knome-sprite{background-position-y:100%}.paused .knome-actor[data-mood] .knome-sprite{animation-play-state:paused}.knome-actor.idle:nth-child(3n) .knome-body{animation:curiousPeek 5s ease-in-out infinite}.knome-actor.idle:nth-child(3n + 1) .knome-body{animation:happyBounce 6s ease-in-out infinite}.knome-actor.idle:nth-child(3n + 2) .knome-body{animation:shyTilt 7s ease-in-out infinite}
@keyframes curiousFrames{0%,24%{background-position-x:0%}25%,49%{background-position-x:33.333%}50%,74%{background-position-x:66.667%}75%,100%{background-position-x:100%}}
@keyframes curiousPeek{0%,70%,100%{rotate:0deg}78%{rotate:12deg}87%{rotate:-8deg}}@keyframes happyBounce{0%,74%,88%,100%{translate:0 0}80%,94%{translate:0 -8px}}@keyframes shyTilt{0%,75%,100%{rotate:0deg}84%,92%{rotate:-9deg}}
@media(min-width:761px){.app-shell{max-width:1450px}.workspace{grid-template-columns:minmax(430px,1fr) 340px;gap:26px}.board-frame{max-width:760px;margin:auto}.town-heading{margin-bottom:8px}.topbar{height:72px}.actor-speech{max-width:190px}}
@media(max-width:760px){.app-shell{padding:0!important;max-width:none}.workspace{padding-top:0!important;display:block}.topbar{height:54px;padding:0 10px;gap:6px}.brand-logo{display:none}.brand b{font-size:17px}.brand div>span{font-size:10px;margin-top:0}.coin-wallet{padding:5px 8px;min-width:80px}.coin-wallet strong{font-size:18px}.top-actions{gap:5px}.town-heading{display:none}.town-meter{margin:0;padding:8px 10px;font-size:12px}.quota-strip{padding:7px 10px 10px;gap:5px}.quota-strip strong{font-size:13px}.board-wrap{padding:0!important;border:0;border-radius:0;box-shadow:none;overflow:visible}.board-topline{padding:4px 10px;margin:0;font-size:12px}.board-frame{width:100%!important;max-width:none!important;margin:0!important;padding:2px;border:0;border-radius:0;box-shadow:none}.board{gap:4px}.tile{border-radius:3px}.city-yard{margin:0;border-radius:0;border:0}.city-heading,.city-growth,.city-next{display:none}.knome-yard{height:58px!important;min-height:58px!important;border-radius:0}.city-scenery{opacity:.75}.city-lots{opacity:.6}#yard-label{font-size:12px;bottom:2px}.work-line{padding:6px 10px;min-height:36px}.work-line #instruction{font-size:13px}.build-dock,.work-dock{margin:8px 8px 0;padding:10px;gap:8px}.piece-main{gap:10px}.piece-label .eyebrow{font-size:12px}.piece-label #piece-kind{font-size:12px}.piece-preview{--cell:32px}.piece-actions{gap:5px}.control-button{padding:8px 10px;min-height:36px;font-size:14px}.land-survey{margin:6px 8px;padding:8px}.land-survey p{font-size:12px}.combo-result{margin:6px 8px;padding:8px}.work-bonuses{padding:0 10px}.overflow,.town-foot{margin:8px 10px}.town-hall{padding:12px}.actor-speech{max-width:135px;font-size:12px}.knome-actor{width:54px}.mobile-nav{height:58px;padding-bottom:env(safe-area-inset-bottom)}.town-panel{padding-bottom:80px}.reward-panel h2{font-size:clamp(22px,6vw,32px)}.reward-panel p{font-size:14px}.reward-meta{font-size:13px}}
@media(prefers-reduced-motion:reduce){.knome-actor.idle .knome-body,.knome-actor[data-mood] .knome-sprite{animation:none!important}.quota-track i{transition:none}}
.economy-panel{margin:12px 0;border:1px solid #375e86;border-radius:10px;padding:10px 12px;background:#102749}.economy-panel summary{font-size:14px;color:#bcf2ff;cursor:pointer}.economy-panel p{font-size:13px;line-height:1.5;margin:8px 0}.economy-panel label{display:flex;gap:7px;align-items:center;font-size:14px}.economy-panel input{width:18px;height:18px}#infra-tools{display:flex;gap:5px;flex-wrap:wrap;margin:8px 0}#infra-tools button{padding:9px;background:#1d4978;border:1px solid #518fbb;border-radius:6px;font-size:12px}#infra-tools button.selected{background:#387350;border-color:#b6ffd7}.infra-marker{position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-size:25px;z-index:6;text-shadow:0 2px 4px #071834}.infra-road{background:#657f9b!important;border-style:solid!important}.infra-bridge{box-shadow:inset 0 0 0 4px #d0a861!important}.infra-warehouse{background:#426883!important}.infra.empty:after{display:none}.merge-preview{position:fixed;bottom:76px;left:50%;transform:translateX(-50%);width:min(540px,calc(100vw - 16px));z-index:85;background:#0c2549f5;border:2px solid #72d7ee;border-radius:14px;padding:13px;box-shadow:0 10px 50px #0009}.merge-preview[hidden]{display:none}.merge-preview #merge-detail{display:grid;gap:5px;max-height:170px;overflow:auto;margin:8px 0}.merge-preview strong{font-size:16px;color:#ffd98d}.merge-preview span{font-size:13px}.merge-preview>div:last-child{display:flex;gap:8px}.merge-preview button{padding:10px;font-size:14px}.personality select{background:#163963;color:#fff;font-size:14px;padding:6px;border:1px solid #7ba0ba;border-radius:6px}.personality label{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:14px}.personality details{font-size:12px;margin-top:8px}.personality details p{font-size:12px}.goods-basket{display:grid;place-items:center;background:#b7813b;color:#fff;border:2px solid #ffe3a5;border-radius:6px;font-size:19px;width:36px;height:32px;box-shadow:0 3px 0 #543616}.goods-basket small{position:absolute;right:-4px;bottom:-4px;background:#092345;font-size:11px;border-radius:9px;padding:1px 3px}
@media(max-width:760px){.economy-panel{margin:8px}.merge-preview{bottom:calc(64px + env(safe-area-inset-bottom))}}
/* 0.5 — a little civilization, with room for small hands. */
.layer-switch{display:flex;gap:6px;align-items:center;padding:8px 4px}.layer-switch button{padding:8px 11px;min-height:40px;background:#102a52;border:1px solid #416392;border-radius:20px;color:#9bbde4;font-weight:700}.layer-switch button.selected{background:#a6ebff;color:#08254a;border-color:#a6ebff}.layer-switch span{margin-left:auto;font:700 11px/1.2 var(--mono,monospace);color:#b7d3ee;text-align:right}.extra-terrain-art{background-image:url('./assets/hazards-extra.webp');background-size:300% 200%;border-radius:9px}.underground-art{background-image:url('./assets/underground.webp');background-size:200% 200%}.comfort-art{opacity:.95}.infra-marker{z-index:5;position:absolute;bottom:2px;right:3px;background:#0a234de0;border-radius:5px;font-size:15px;color:#c9f1ff;padding:0 3px}.infra-home,.infra-garden,.infra-tavern{background:#315e82!important;border:1px solid #7ba7b9!important}
#underground-tools{padding:12px;background:#172842;border:1px solid #587591;border-radius:10px;margin-bottom:6px}#underground-tools p{font-size:12px;color:#a9bfd4;margin:6px 0}#underground-tools>div{display:flex;flex-wrap:wrap;gap:5px;margin:9px 0}#underground-tools button{background:#244466;border:1px solid #51708d;color:#dcecff;border-radius:6px;padding:8px;font-size:12px;min-height:40px}#underground-tools button.selected{background:#a8dfff;color:#0e2945}#underground-tools small{color:#c6d3df;font-size:12px}.under-tile{background:radial-gradient(ellipse at top,#324467,#102138)!important;border:1px solid #5c6880!important;overflow:hidden;display:flex;align-items:center;justify-content:center}.under-tile .land-art{position:absolute;width:100%;height:100%;inset:0}.under-tile>b{position:absolute;left:1px;right:1px;bottom:17px;font-size:clamp(7px,1.7vw,12px);color:#fff;text-shadow:0 1px 4px #000;z-index:2}.under-tile>span:not(.land-art){position:relative;font-size:22px;color:#7b9abb}.under-tile>span:not(.land-art) small{display:block;font-size:10px}.under-tile.dug>span:not(.land-art){position:absolute;bottom:1px;font-size:clamp(7px,1.4vw,10px);background:#0a203ddb;left:1px;right:1px;color:#a7f5ca;line-height:1.2;padding:2px;z-index:2}.under-tile.room-warning{border-color:#eeaf79!important}.under-tile.room-warning>span:not(.land-art){color:#ffd08e}.underground-view #actor-layer,.underground-view .overflow{visibility:hidden}.underground-view #board{background:#0a142b}
.delivery-dialog{width:min(600px,calc(100vw - 20px));padding:28px 24px;max-height:94svh;background:radial-gradient(circle at 90% 0,#244e8d,#10294e 70%);border:1px solid #5e8cc5}.delivery-dialog h2{font-size:clamp(25px,6vw,36px);letter-spacing:-1.3px;margin-bottom:8px}.delivery-dialog>p{color:#b8d2ed;font-size:14px;line-height:1.45}.delivery-dialog::backdrop{background:#06152af2;backdrop-filter:blur(12px)}#delivery-choices{display:grid;gap:10px;margin:20px 0}.delivery-choice{display:grid;grid-template-columns:110px 1fr auto;align-items:center;gap:15px;width:100%;padding:16px 14px;border:1px solid #5b8bbd;border-radius:12px;background:#204572;color:#f0f8ff;text-align:left;min-height:105px;box-shadow:inset 0 1px #ffffff12;transition:transform .15s,background .15s}.delivery-choice:hover,.delivery-choice:focus-visible{background:#2c5d96;transform:translateY(-2px);outline:2px solid #a0ebff;outline-offset:3px}.delivery-choice>span>strong{display:block;font-size:17px;margin-bottom:5px}.delivery-choice small{font-size:12px;color:#b9d3e9}.delivery-choice>b{font-size:12px;color:#91e9ff}.delivery-choice.no-fit{opacity:.5}.offer-grid,.lifted-grid{display:grid;grid-template-columns:repeat(var(--cols),26px);grid-template-rows:repeat(var(--rows),26px);gap:3px;justify-content:center;align-content:center}.offer-grid .piece-cell,.lifted-grid .piece-cell{width:100%;height:100%;position:relative;border-radius:5px;background:var(--land);box-shadow:inset 0 -2px #0003}.offer-grid .land-art,.lifted-grid .land-art{position:absolute;inset:0;width:100%;height:100%}#reroll-deliveries{width:100%;min-height:48px}.delivery-dialog .text-button{display:block;margin:14px auto 0}.delivery-dialog #delivery-note{font-size:11px;text-align:center;color:#81a2c7}.choose-cue{font-size:40px;line-height:1;color:#b6ebff}#lifted-piece{position:fixed;z-index:200;pointer-events:none;transform:translate(-45%,-115%);padding:10px;background:#102b55de;border:2px solid #ba7c88;border-radius:10px;box-shadow:0 14px 28px #00112b99;opacity:.95}#lifted-piece.fits{border-color:#9cffe0;box-shadow:0 0 25px #53c8b36b}.lifted-grid{grid-template-columns:repeat(var(--cols),34px);grid-template-rows:repeat(var(--rows),34px)}.tile.ghost{box-shadow:inset 0 0 0 3px #b7ffe8,0 0 18px #5defb971;background:#72cbd3!important;opacity:.88}.tile.ghost .land-art{opacity:.85}.piece-actions #open-picker{font-size:12px;color:#a1eaff}
.knome-status{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12px;margin:9px 0}.knome-status b{color:#a8eaff}.knome-status span{color:#b5cee3}.knome-status i{display:block;flex:0 0 100%;height:4px;background:linear-gradient(to right,#9fdfbd var(--energy),#163559 var(--energy));border-radius:8px}.knome-training{display:grid;gap:8px;margin:9px 0}.knome-training button{padding:9px 10px;min-height:40px;border:1px solid #597daf;background:#244d7b;border-radius:7px;color:#d7f1ff;font-size:12px;text-align:left}.knome-training button:disabled{opacity:.42}.personality label{display:block;color:#9fc2e3;font-size:11px}.personality select{display:block;width:100%;max-width:100%;padding:8px;margin:4px 0;color:#e3f1ff;background:#102b50;border:1px solid #50749e;border-radius:5px;font-size:12px}.specialty-perk{padding:8px 10px;border-left:2px solid #7addff;background:#133055;font-size:12px!important;color:#bddcf3!important}.personality details summary{padding:10px 0;cursor:pointer;font-size:12px;color:#9eeaff}.personality details p{font-size:11px;border-bottom:1px solid #739ed51c;padding:5px 0;margin:0;line-height:1.4}.personality>div:last-child{min-width:0}.knome-actor.benched{opacity:.4;filter:grayscale(.7);animation:none!important}.knome-actor.benched .actor-name:after{content:' · OUT';color:#ffb7ab}.knome-actor.benched .knome-body{animation:none!important}.knome-actor[data-specialty] .knome-sprite{background-image:url('./assets/specialist-work.webp')!important;background-size:900% 400%!important;background-position:var(--trade-column) 0%;animation:specialty-work .7s steps(1) infinite!important;width:100%;height:100%}@keyframes specialty-work{0%,100%{background-position:var(--trade-column) 0%}25%{background-position:var(--trade-column) 33.333%}50%{background-position:var(--trade-column) 66.667%}75%{background-position:var(--trade-column) 100%}}
.inventions{margin:16px 0;padding:17px;border:1px solid #5d72b2;border-radius:12px;background:linear-gradient(135deg,#1c3764,#252e59)}.inventions h3{font-size:18px;margin:8px 0}.inventions>p,.owned-invention p{font-size:12px;color:#b2c7e6;line-height:1.45}.inventions>button{display:grid;gap:7px;background:#102a4cc9;border:1px solid #657fac;border-radius:9px;padding:13px;margin:9px 0;text-align:left;width:100%;color:#e6f2ff}.inventions>button span{font-size:12px;line-height:1.5;color:#acc8e5}.inventions>button b{font-size:11px;color:#9af2e1}.inventions>button:hover{border-color:#a6dfff;background:#224776}.owned-invention{padding:9px 0;border-top:1px solid #56759d}.owned-invention strong{font-size:13px}.owned-invention small{color:#a1e5cc;font-size:11px}.keeper-card{display:grid;grid-template-columns:60px 1fr;gap:4px 10px;text-align:left;background:#173963bd;border:1px solid #5d91bd;border-radius:10px;padding:9px 12px;margin:12px auto;max-width:350px;align-items:center}.keeper-card>.land-art{grid-row:1/3;width:60px;height:60px}.keeper-card strong{font-size:13px}.keeper-card>span:not(.land-art){font-size:11px;color:#a7c7e5;line-height:1.3}#comfort-status{color:#d2e6f5;font-size:13px;line-height:1.5}#infra-tools button{min-height:40px}#infra-tools button.selected{background:#b7ebff;color:#102744}#buy-meal{font-size:12px;margin-bottom:12px}.economy-panel summary{min-height:42px;display:flex;align-items:center;cursor:pointer}.economy-panel summary:before{content:'＋';margin-right:9px;color:#9bdfff}.economy-panel[open] summary:before{content:'−'}
@media(max-width:760px){.layer-switch{padding:5px 8px;gap:5px}.layer-switch button{font-size:11px;min-height:34px;padding:6px 10px}.layer-switch span{font-size:10px;max-width:72px}#underground-tools{margin:0 6px 6px}.delivery-dialog{padding:23px 15px}.delivery-choice{grid-template-columns:96px 1fr auto;gap:10px;padding:12px 9px;min-height:100px}.delivery-choice>span>strong{font-size:15px}.delivery-choice small{font-size:11px}.delivery-choice>b{font-size:10px}.keeper-card{max-width:300px}.build-dock{position:relative;bottom:auto}.build-dock .piece-actions{display:grid;grid-template-columns:1fr 1fr;gap:5px}.build-dock .piece-main{flex:1;min-width:0;flex-wrap:wrap;justify-content:center}.build-dock .piece-label{display:none}.piece-actions .control-button{font-size:12px;padding:7px 8px}.piece-actions .hint-button{font-size:11px}#piece{grid-template-columns:repeat(var(--cols),30px);grid-template-rows:repeat(var(--rows),30px)}.under-tile>b{font-size:8px}.under-tile.dug>span:not(.land-art){font-size:7px}.economy-panel{margin:8px}.reward-panel{padding:18px 14px}.reward-amount{font-size:38px}}
@media(prefers-reduced-motion:reduce){.knome-actor[data-specialty] .knome-sprite{animation:none!important}.delivery-choice{transition:none}}
.infra-marker{inset:auto 3px 2px auto;display:block;line-height:1.2}.reward-panel{overflow-y:auto;justify-content:flex-start;max-height:calc(100% - 10px);inset:5px;padding:14px}.reward-panel>*{flex-shrink:0}.reward-panel h2{margin:6px 0}.reward-panel p{margin:5px 0 9px}.reward-amount{line-height:1.1}.keeper-card{margin:8px auto}.paused .knome-actor[data-specialty] .knome-sprite{animation-play-state:paused!important}.tile.under-tile>.underground-art{inset:0;width:100%;height:100%}.knome-actor.resting{opacity:.5}.knome-actor.resting .actor-name:after{content:' · Zzz'}
@media(min-width:761px){.reward-panel{justify-content:center;padding:20px}}@media(max-width:400px){.reward-panel .eyebrow{font-size:10px}.reward-panel h2{font-size:22px}.keeper-card{padding:5px 8px;grid-template-columns:44px 1fr}.keeper-card>.land-art{width:44px;height:44px}.reward-panel .reward-meta{font-size:11px}.reward-panel p{font-size:11px}.reward-panel .reward-amount{font-size:34px}}
