/* Layout: one phone screen — level strip and a striped stall awning on top, the straw bales with skewers filling the
   middle, a row of saucers for spare fruit, and three tool buttons at the bottom */
/* Fonts are served from this site, subset to the characters the game uses. Rebuild with fonts/subset.sh after
   changing any on-screen text. */
@font-face{font-family:"Ma Shan Zheng";src:url("fonts/mashanzheng.woff2") format("woff2");font-display:swap}
@font-face{font-family:"Baloo 2";src:url("fonts/baloo2-800.woff2") format("woff2");font-weight:700 800;font-display:swap}
:root{
  /* winter dusk over a street stall: cold sky, red lacquer awning, golden straw, glazed fruit */
  --sky-1:#cfe0ec; --sky-2:#eef4f7;
  --lacquer:#c53a2c; --lacquer-dk:#8e2219; --paper:#fff7ec;
  --straw:#e3b553; --straw-dk:#b68429; --straw-lt:#f3d58a;
  --stick-lt:#e6c48f; --stick:#c99a5b; --stick-dk:#8c6431;
  --ink:#3b2a21; --ink-soft:#7a6252;
  --gold:#f4c430; --mint:#3f9b6e; --mint-dk:#2b7350; --danger:#d9483b;
  --font-sign:"Ma Shan Zheng","STKaiti","KaiTi","Kaiti SC",serif;
  --font-num:"Baloo 2",system-ui,sans-serif;
  --font-body:system-ui,-apple-system,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  color-scheme:light;
}
html{height:100%;box-sizing:border-box;background:var(--sky-1)}
*,*::before,*::after{box-sizing:inherit}
[hidden]{display:none!important}
body{height:100%;margin:0;background:var(--sky-1);color:var(--ink);font-family:var(--font-body);overflow:hidden;overscroll-behavior:none;
  -webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation}
button:focus-visible{outline:3px solid var(--gold);outline-offset:2px}

#game{position:relative;height:100%;max-width:480px;margin:0 auto;display:flex;flex-direction:column;overflow:hidden;touch-action:manipulation;
  background:
    radial-gradient(1.5px 1.5px at 12% 18%,#fff 98%,transparent),radial-gradient(2px 2px at 68% 9%,#fff 98%,transparent),
    radial-gradient(1.5px 1.5px at 84% 31%,#fff 98%,transparent),radial-gradient(2px 2px at 33% 41%,#fff 98%,transparent),
    radial-gradient(1.5px 1.5px at 52% 63%,#fff 98%,transparent),radial-gradient(2px 2px at 8% 72%,#fff 98%,transparent),
    linear-gradient(var(--sky-1),var(--sky-2) 70%)}

/* HUD */
.hud{flex:none;height:52px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding-inline:16px;position:relative;z-index:6}
.iconbtn{width:40px;height:40px;border:0;border-radius:12px;background:var(--paper);display:grid;place-items:center;
  box-shadow:0 3px 0 var(--straw-dk),inset 0 0 0 2px var(--straw)}
.iconbtn:active{transform:translateY(2px);box-shadow:0 1px 0 var(--straw-dk),inset 0 0 0 2px var(--straw)}
.iconbtn svg{width:20px;height:20px}
.title{display:flex;align-items:baseline;gap:8px}
.title b{font-family:var(--font-sign);font-weight:400;font-size:28px;line-height:1;color:var(--lacquer-dk);letter-spacing:.04em}
.tier{font-size:12px;padding:2px 8px;border-radius:999px;background:var(--lacquer);color:var(--paper);letter-spacing:.12em;transform:translateY(-3px)}
.sold{display:flex;flex-direction:column;align-items:center;line-height:1;min-width:48px}
.sold small{font-size:11px;color:var(--ink-soft);letter-spacing:.12em}
.sold b{font-family:var(--font-num);font-weight:800;font-size:22px;color:var(--lacquer);font-variant-numeric:tabular-nums}
.sold.bump b{animation:bump .5s ease-out}
@keyframes bump{30%{transform:scale(1.35)}}

/* Awning: red/white stripes with a scalloped edge and a hanging signboard */
.awning{flex:none;position:relative;height:30px;z-index:5;
  background:repeating-linear-gradient(90deg,var(--lacquer) 0 24px,var(--paper) 24px 48px)}
.awning::after{content:"";position:absolute;left:0;right:0;bottom:-10px;height:10px;
  background:radial-gradient(circle at 12px 0,var(--lacquer) 11.5px,transparent 12px) 0 0/48px 10px repeat-x,
             radial-gradient(circle at 12px 0,var(--paper) 11.5px,transparent 12px) 24px 0/48px 10px repeat-x}
.awning span{position:absolute;left:50%;top:6px;transform:translateX(-50%);padding:1px 14px 3px;border-radius:4px;
  background:var(--lacquer-dk);color:var(--gold);font-family:var(--font-sign);font-size:18px;letter-spacing:.3em;white-space:nowrap;
  box-shadow:0 2px 0 rgba(0,0,0,.25)}

/* Board: straw bales and skewer hit areas are placed by JS */
#board{position:relative;flex:1;min-height:0}
.bale{position:absolute;z-index:2;border-radius:14px;
  background:repeating-linear-gradient(115deg,transparent 0 5px,rgba(182,132,41,.45) 5px 6px),
             repeating-linear-gradient(65deg,transparent 0 7px,rgba(243,213,138,.6) 7px 8px),
             linear-gradient(var(--straw-lt),var(--straw) 45%,var(--straw-dk));
  box-shadow:0 5px 0 rgba(120,80,20,.35),inset 0 2px 0 rgba(255,255,255,.4)}
.bale::before,.bale::after{content:"";position:absolute;top:-2px;bottom:-2px;width:8px;background:var(--lacquer);border-radius:3px;opacity:.85}
.bale::before{left:18%}.bale::after{right:18%}
.stick{position:absolute;z-index:1;width:5px;background:linear-gradient(90deg,var(--stick-lt) 0 35%,var(--stick) 60%,var(--stick-dk));
  clip-path:polygon(50% 0,100% 12px,100% 100%,0 100%,0 12px);transform-origin:50% 100%;transition:opacity .2s}
.slot{position:absolute;z-index:3;border-radius:14px}
/* "已售" sign pushed into the bale where a finished skewer stood */
.tag{position:absolute;z-index:3;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;pointer-events:none}
.tag b{padding:2px 7px 4px;border-radius:3px;background:var(--lacquer);color:var(--paper);font-family:var(--font-sign);font-weight:400;font-size:15px;
  letter-spacing:.1em;white-space:nowrap;transform:rotate(-5deg);box-shadow:0 2px 0 rgba(0,0,0,.2)}
.tag i{display:block;width:4px;height:14px;background:var(--stick-dk);border-radius:0 0 2px 2px}
.plus{position:absolute;z-index:9;font-family:var(--font-num);font-weight:800;font-size:18px;color:var(--lacquer);pointer-events:none;transform:translate(-50%,-50%)}

/* Saucers */
.saucers{flex:none;display:flex;align-items:center;gap:10px;padding-inline:16px;padding-block:6px;z-index:2}
.saucers-label{font-family:var(--font-sign);font-size:18px;color:var(--ink-soft);writing-mode:vertical-rl;letter-spacing:.2em}
#tray{flex:1;display:flex;justify-content:center;gap:10px}
.saucer{position:relative;border:0;padding:0;border-radius:50%;
  background:radial-gradient(ellipse at 50% 45%,#fff 0 52%,#e9eef2 53% 64%,#fff 65% 70%,#d3dde4 71%);
  box-shadow:0 3px 0 rgba(59,42,33,.18)}
.saucer.locked{background:radial-gradient(circle,rgba(255,255,255,.55) 0 69%,transparent 70%);box-shadow:none;outline:2px dashed var(--ink-soft);outline-offset:-4px;
  color:var(--ink-soft);font-size:22px;font-weight:700}
.saucer.full{box-shadow:0 3px 0 rgba(217,72,59,.5)}

/* Tools */
.tools{flex:none;display:flex;justify-content:center;gap:12px;padding-inline:16px;padding-block:6px 12px;z-index:2}
.tool{position:relative;flex:1;max-width:120px;height:52px;border:0;border-radius:16px;display:flex;align-items:center;justify-content:center;gap:6px;
  background:var(--paper);color:var(--ink);font-size:15px;font-weight:600;box-shadow:0 4px 0 var(--straw-dk),inset 0 0 0 2px var(--straw)}
.tool svg{width:20px;height:20px;color:var(--lacquer)}
.tool i{position:absolute;top:-7px;right:-5px;min-width:22px;height:22px;padding-inline:5px;border-radius:11px;border:2px solid var(--paper);
  background:var(--lacquer);color:var(--paper);font:800 12px/18px var(--font-num);font-style:normal;text-align:center}
.tool:active{transform:translateY(3px);box-shadow:0 1px 0 var(--straw-dk),inset 0 0 0 2px var(--straw)}
.tool.off{opacity:.5}
.tool.off i{background:var(--ink-soft)}

/* Fruit layer: every fruit lives here so it can fly between skewers and saucers */
#layer{position:absolute;inset:0;pointer-events:none;z-index:4}
.fruit{position:absolute;left:0;top:0;will-change:transform;
  transition:transform .3s cubic-bezier(.3,1.25,.5,1),opacity .25s}
.fruit svg{display:block;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 1.5px 0 rgba(59,42,33,.28))}
.fruit.flip{animation:flip .35s ease-out}
@keyframes flip{0%{scale:1 1}45%{scale:0 1}100%{scale:1 1}}
.fruit.sel svg{filter:drop-shadow(0 0 2px var(--gold)) drop-shadow(0 0 5px rgba(244,196,48,.85))}
.fruit.gone{opacity:0;transition:none}
/* A finished tanghulu leaving the stall: stick and fruit travel together */
.carrier{position:absolute;left:0;top:0;z-index:8;pointer-events:none;transform-origin:50% 85%}
.carrier .stick{position:absolute;transition:none}
.carrier .fruit{transition:none}

/* Messages */
#toast{position:absolute;left:16px;right:16px;top:54px;z-index:8;margin:0 auto;max-width:360px;padding:9px 14px;border-radius:12px;
  background:rgba(59,42,33,.9);color:#fff;font-size:14px;line-height:1.45;text-align:center;pointer-events:none}
.modal{position:absolute;inset:0;z-index:50;display:grid;place-items:center;padding-inline:16px;background:rgba(40,28,22,.5)}
.card{width:min(100%,340px);max-height:88%;overflow:auto;background:var(--paper);border-radius:20px;padding:22px 20px 20px;text-align:center;
  display:flex;flex-direction:column;gap:12px;box-shadow:0 6px 0 var(--straw-dk),0 20px 44px rgba(40,28,22,.35);border-top:8px solid var(--lacquer)}
.card h2{margin:0;font-family:var(--font-sign);font-weight:400;font-size:34px;color:var(--lacquer-dk);text-wrap:balance}
.card h3{margin:6px 0 0;font-size:14px;font-weight:600;color:var(--ink-soft);letter-spacing:.15em}
.card p{margin:0;color:var(--ink-soft);font-size:14px;line-height:1.55}
.acts{display:flex;flex-direction:column;gap:12px;margin-top:4px}
.btn{border:0;border-radius:14px;padding:12px 18px;font-size:17px;font-weight:700;letter-spacing:.1em;color:var(--paper);
  background:var(--lacquer);box-shadow:0 4px 0 var(--lacquer-dk)}
.btn.alt{background:#fff;color:var(--ink);box-shadow:0 4px 0 var(--straw-dk),inset 0 0 0 2px var(--straw)}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--lacquer-dk)}
.stars{display:flex;justify-content:center;gap:8px;font-size:42px;line-height:1}
.stars i{font-style:normal;color:#e6d8c3}
.stars i.on{color:var(--gold);text-shadow:0 2px 0 var(--straw-dk);animation:star .45s cubic-bezier(.3,1.6,.5,1) both}
.stars i.on:nth-child(2){animation-delay:.15s}.stars i.on:nth-child(3){animation-delay:.3s}
@keyframes star{from{transform:scale(0) rotate(-40deg)}to{transform:scale(1)}}
.stats{display:flex;justify-content:center;gap:18px;font-size:13px;color:var(--ink-soft)}
.stats b{display:block;font-family:var(--font-num);font-weight:800;font-size:20px;color:var(--ink);font-variant-numeric:tabular-nums}
.grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
.lv{aspect-ratio:1;border:0;border-radius:12px;padding:0;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  box-shadow:0 3px 0 var(--straw-dk),inset 0 0 0 2px var(--straw)}
.lv b{font:800 19px/1 var(--font-num)}
.lv small{font-size:9px;color:var(--gold);min-height:10px}
.lv.cur{background:var(--lacquer);color:var(--paper);box-shadow:0 3px 0 var(--lacquer-dk)}
.lv:disabled{background:rgba(255,255,255,.5);color:#c3b4a0;box-shadow:none;cursor:default}
.lv:disabled svg{width:15px;height:15px}
.setrow{display:flex;justify-content:space-between;align-items:center;padding:4px 2px;font-size:15px}
.switch{border:0;border-radius:999px;padding:6px 14px;background:#efe3d0;font-size:14px;font-weight:600}
.switch.on{background:var(--mint);color:#fff}

@media (prefers-reduced-motion: reduce){
  .fruit{transition:transform .12s linear,opacity .12s}
  .fruit.flip,.stars i.on,.sold.bump b{animation:none}
}
