:root{
  --bg:#0f1c20; --panel:#16272c; --line:#27414a; --ink:#e7efe9; --mute:#8fa7a6; --acc:#f0b43c;
  --grass:#4f8a4a; --grass2:#4a8245; --cell:44px;
  color-scheme: dark;
}
@media (prefers-color-scheme: light){ :root{ --bg:#eef3ec; --panel:#fff; --line:#cdd9cf; --ink:#18262a; --mute:#5b7172; --acc:#b87a0c; --grass:#8fc27f; --grass2:#86b977; color-scheme: light; } }
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--bg);color:var(--ink);font:15px/1.45 "Trebuchet MS","Segoe UI",system-ui,sans-serif;display:flex;flex-direction:column}
#topbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--panel)}
#topbar h1{margin:0;font-size:20px;letter-spacing:.02em}
#resources{display:flex;gap:6px 14px;flex-wrap:wrap;list-style:none;margin:0 0 0 auto;padding:0}
#resources li{display:flex;gap:6px;align-items:center;font-variant-numeric:tabular-nums}
#resources b{min-width:2ch}
#game{flex:1;min-height:0;display:flex}
#mapWrap{flex:1;min-width:0;overflow:auto;padding:16px;display:flex;align-items:flex-start;justify-content:center}
#map{display:grid;grid-template-columns:repeat(var(--cols),var(--cell));grid-template-rows:repeat(var(--rows),var(--cell));gap:1px;background:var(--line);border:2px solid var(--line);border-radius:6px;outline:none;touch-action:manipulation}
#map:focus-visible{box-shadow:0 0 0 3px var(--acc)}
.cell{display:flex;align-items:center;justify-content:center;font-size:24px;background:var(--grass);cursor:pointer;user-select:none;position:relative}
.cell:nth-child(even){background:var(--grass2)}
.cell:hover{filter:brightness(1.15)}
.cell.cursor{outline:3px solid var(--acc);outline-offset:-3px;z-index:1}
.cell.env{font-size:22px}
.cell.bld.solid{background:var(--b);box-shadow:inset 0 -4px 0 rgba(0,0,0,.25)}
.cell.bld.road{background:var(--b);font-size:18px;color:rgba(255,255,255,.7)}
.cell.pop{animation:pop .25s ease-out}
@keyframes pop{0%{transform:scale(.7)}60%{transform:scale(1.12)}100%{transform:scale(1)}}
#panel{width:300px;flex:none;border-left:1px solid var(--line);background:var(--panel);overflow:auto;padding:12px;display:flex;flex-direction:column;gap:10px}
#tools h3{margin:12px 0 6px;font-size:13px;font-weight:600;color:var(--mute)}
#tools .grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.tool{font:inherit;color:inherit;text-align:left;background:transparent;border:1px solid var(--line);border-left:5px solid var(--b,var(--line));border-radius:6px;padding:6px 8px;cursor:pointer;display:grid;grid-template-columns:auto 1fr;gap:0 6px;align-items:center}
.tool .nm{font-weight:600;font-size:13px}
.tool .cs{grid-column:1/-1;font-size:11.5px;color:var(--mute)}
.tool:hover{background:rgba(127,160,150,.12)}
.tool.on{border-color:var(--acc);background:rgba(240,180,60,.14)}
.tool.poor .cs{color:#e0715c}
.tool.demolish{width:100%;display:block;border-left-color:#c55}
#info{border-top:1px solid var(--line);padding-top:8px;font-size:13.5px}
#info p{margin:0 0 8px}.tile{color:var(--mute)}
#toast{position:fixed;left:50%;bottom:16px;transform:translate(-50%,20px);opacity:0;pointer-events:none;background:var(--ink);color:var(--bg);padding:8px 16px;border-radius:20px;font-size:14px;transition:.2s}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast.bad{background:#c4503c;color:#fff}
@media (max-width:760px){
  :root{--cell:34px}
  #game{flex-direction:column}
  #mapWrap{flex:none;padding:8px}
  #panel{width:auto;border-left:0;border-top:1px solid var(--line);flex:1}
  .cell{font-size:19px}
}
@media (prefers-reduced-motion:reduce){ .cell.pop{animation:none} #toast{transition:none} }

/* Tahap 2: grafis vektor */
#map{gap:0;background:#3d7a3c;border:0;border-radius:10px;overflow:hidden;box-shadow:0 10px 28px rgba(0,0,0,.4)}
.cell{font-size:0;background-image:radial-gradient(circle at 25% 30%,rgba(255,255,255,.07) 0 2.5px,transparent 3.5px),radial-gradient(circle at 72% 74%,rgba(0,0,0,.08) 0 3px,transparent 4px)}
.cell.v1{background-color:#4a8a46}.cell.v2{background-color:#549650}.cell.v3{background-color:#478246}
.cell svg{width:100%;height:100%;display:block;pointer-events:none}
.cell.idle svg{filter:grayscale(.75) brightness(.8)}
.cell.idle::after{content:"";position:absolute;top:3px;right:3px;width:9px;height:9px;border-radius:50%;background:#e5533d;border:1.5px solid #fff}
.tool .ic svg{width:30px;height:30px;display:block}
.tool{grid-template-columns:30px 1fr}
.ri{width:14px;height:14px;vertical-align:-2px}
#resources li{background:rgba(127,160,150,.12);padding:3px 9px 3px 6px;border-radius:14px}
#dayBox{display:flex;gap:10px;align-items:center}
#nextDay{font:inherit;font-weight:700;background:var(--acc);color:#1b1405;border:0;border-radius:6px;padding:6px 12px;cursor:pointer}
#nextDay:hover{filter:brightness(1.1)}
#report{border-top:1px solid var(--line);font-size:13px}
#report:empty{display:none}
#report h3{margin:8px 0 4px;font-size:13px;color:var(--mute)}
#report p{margin:0 0 6px}#report ul{margin:0;padding-left:18px;color:#e0715c}
@media (max-width:760px){#resources{margin:0}}

/* Tahap 3: tujuan, dialog, kontrol hari */
#nextDay.sec,#dayBox .sec{background:transparent;color:var(--ink);border:1px solid var(--line);font-weight:600}
#goals h3,#report h3{margin:0 0 6px;font-size:13px;color:var(--mute);font-weight:600}
.goal{position:relative;display:flex;justify-content:space-between;gap:8px;padding:5px 8px;margin-bottom:5px;border:1px solid var(--line);border-radius:6px;font-size:12.5px;overflow:hidden}
.goal span,.goal b{position:relative;z-index:1}
.goal i{position:absolute;left:0;top:0;bottom:0;background:rgba(80,170,100,.25);transition:width .3s}
.goal.done{border-color:#4faa64}.goal.done b::after{content:" ✓";color:#4faa64}
#modal{position:fixed;inset:0;background:rgba(5,12,14,.6);display:flex;align-items:center;justify-content:center;padding:16px;z-index:10}
#modal[hidden]{display:none}
#modal .box{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px 22px;max-width:420px;width:100%;box-shadow:0 16px 40px rgba(0,0,0,.5);max-height:90vh;overflow:auto}
#modal h2{margin:0 0 10px;font-size:19px}
#modal p{margin:0 0 8px}
#modal .warn{color:#e0715c;padding-left:18px;margin:8px 0}
#modal .ok{color:#4faa64}
#modal .btns{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}
#modal .btns button{font:inherit;font-weight:700;background:var(--acc);color:#1b1405;border:0;border-radius:6px;padding:7px 14px;cursor:pointer}
#modal .btns button:not(:first-child){background:transparent;color:var(--ink);border:1px solid var(--line)}
@media (max-width:760px){#dayBox{flex-wrap:wrap}}

/* Tutorial: petunjuk alat */
.tool.hint{border-color:var(--acc);box-shadow:0 0 0 2px rgba(240,180,60,.5)}
.goal span{white-space:normal}

/* Menu mode */
#modal .box:has(.mgrid){max-width:640px}
.mgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}
.mcard{font:inherit;color:var(--ink);text-align:left;background:transparent;border:1px solid var(--line);border-radius:8px;padding:10px;cursor:pointer;display:flex;flex-direction:column;gap:4px}
.mcard:hover{border-color:var(--acc);background:rgba(240,180,60,.1)}
.mcard span{font-size:12.5px;color:var(--mute)}.mcard em{font-style:normal;font-size:12px;color:var(--acc)}

/* Tahap 5: kabut, rusak, subur, lokasi khusus */
.cell.fog{background:#1d2e35;background-image:radial-gradient(circle,rgba(255,255,255,.06) 0 5px,transparent 6px)}
.cell.fog::after{content:"?";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:16px;color:rgba(255,255,255,.25)}
.cell.fertile{background-color:#5c9c4a}
.cell.site{box-shadow:inset 0 0 0 2px #f2c33a}
.cell.damaged svg{filter:grayscale(1) brightness(.6)}
.cell.damaged::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(45deg,transparent 0 6px,rgba(229,83,61,.4) 6px 8px)}

/* Tahap 6: tata letak 3 kolom, kartu, chip, menu, hasil */
#topbar{gap:8px 14px}
#dayBox{gap:8px;flex-wrap:wrap}
#dayBox .sec,#menuBtn{background:transparent;color:var(--ink);border:1px solid var(--line);font-weight:600;border-radius:6px;padding:6px 12px;cursor:pointer;font:inherit}
#nextDay{position:relative}
#resources{margin-left:auto}
#resources li{background:none;padding:0}
.chip{font:inherit;color:inherit;display:inline-flex;align-items:center;gap:6px;background:rgba(127,160,150,.14);border:1px solid transparent;border-radius:14px;padding:3px 10px 3px 7px;cursor:pointer}
button.chip:hover{border-color:var(--acc)}
.sl{font-size:12px;color:var(--mute);font-weight:400}
#game{display:grid;grid-template-columns:264px minmax(0,1fr) 292px;flex:1;min-height:0}
#side{border-right:1px solid var(--line);background:var(--panel);overflow:auto;padding:10px;display:flex;flex-direction:column;gap:10px}
#panel{width:auto;padding-top:6px}
.card{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:rgba(127,160,150,.07)}
.card h2{margin:0 0 8px;font-size:12.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--acc);display:flex;justify-content:space-between;align-items:center}
.mini{font:inherit;font-size:12px;background:transparent;color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:2px 8px;cursor:pointer}
#info{border-top:0;padding-top:0}
#report{border-top:0}
#report:empty{display:block}
#report:empty::before{content:"Belum ada laporan. Tekan Hari berikutnya.";color:var(--mute);font-size:13px}
#report ul{margin:6px 0 0}
#tools{padding-top:16px}
.tool{position:relative}
.tool.hint::before{content:"▼";position:absolute;top:-18px;left:50%;transform:translateX(-50%);color:var(--acc);font-size:17px;animation:bob .7s ease-in-out infinite alternate;z-index:2;text-shadow:0 1px 2px rgba(0,0,0,.5)}
#nextDay.hint{box-shadow:0 0 0 3px rgba(240,180,60,.65)}
#nextDay.hint::after{content:"▲";position:absolute;top:100%;left:50%;transform:translateX(-50%);color:var(--acc);font-size:17px;animation:bob2 .7s ease-in-out infinite alternate;text-shadow:0 1px 2px rgba(0,0,0,.5)}
.cell.hinttile::before{content:"▼";position:absolute;top:-2px;left:50%;transform:translateX(-50%);font-size:22px;color:var(--acc);z-index:3;text-shadow:0 1px 3px #000;animation:bob .7s ease-in-out infinite alternate}
@keyframes bob{to{transform:translate(-50%,7px)}}
@keyframes bob2{to{transform:translate(-50%,-6px)}}
.lite *{animation:none!important;transition:none!important}
#modal .box.wide{max-width:680px}
#modal .box.menu{max-width:380px}
#modal .box.result{max-width:480px}
.tag{color:var(--mute);margin:-4px 0 12px}
.mmenu{display:grid;gap:8px}
.big{font:inherit;font-weight:700;text-align:left;color:var(--ink);background:transparent;border:1px solid var(--line);border-radius:8px;padding:10px 14px;cursor:pointer;display:flex;flex-direction:column;gap:2px}
.big small{font-weight:400;color:var(--mute);font-size:12.5px}
.big:hover{border-color:var(--acc);background:rgba(240,180,60,.1)}
.mcard small{color:var(--mute);font-size:11.5px}
.mcard.locked{opacity:.45;cursor:not-allowed}
.tbl{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums;margin:6px 0}
.tbl th,.tbl td{text-align:left;padding:4px 8px;border-bottom:1px solid var(--line)}
.tbl th{color:var(--mute);font-weight:600}
.chart{width:100%;height:auto;background:rgba(127,160,150,.08);border-radius:6px}
.legend{font-size:12px;margin:4px 0 8px}.legend .g{color:#4faa64}.legend .r{color:#d9694f}
.note{font-size:12px;color:var(--mute)}
.agrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px}
.ach{border:1px solid var(--line);border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:2px;opacity:.55}
.ach.got{opacity:1;border-color:#4faa64}
.ach span{font-size:12.5px;color:var(--mute)}.ach em{font-style:normal;font-size:12px;color:var(--acc)}
.rgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}
.rgrid div{border:1px solid var(--line);border-radius:8px;padding:8px;text-align:center}
.rgrid b{display:block;font-size:20px}.rgrid span{font-size:11.5px;color:var(--mute)}
#modal h2.win{color:#4faa64}#modal h2.lose{color:#e0715c}
.set{display:flex;align-items:center;gap:8px;margin:8px 0}
.set select{font:inherit;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:3px 6px}
.danger{font:inherit;margin-top:12px;background:transparent;color:#e0715c;border:1px solid #e0715c;border-radius:6px;padding:6px 12px;cursor:pointer}
@media (max-width:900px){
  #game{display:flex;flex-direction:column;overflow:auto}
  #mapWrap{order:1;flex:none}
  #side{order:2;border-right:0;border-top:1px solid var(--line);overflow:visible;flex:none}
  #panel{order:3;border-left:0;border-top:1px solid var(--line);overflow:visible;flex:none}
  #resources{margin-left:0}
  .rgrid{grid-template-columns:repeat(2,1fr)}
}

.ver{font-size:12px;opacity:.7;margin-left:6px}
