@font-face { font-family: Jua; src: url('../assets/fonts/Jua-Regular.ttf') format('truetype'); font-weight: 400; font-display: swap; }
:root {
  color-scheme: light;
  --ink: #30433e;
  --muted: #778479;
  --paper: #fffef5;
  --green: #355e50;
  --line: #d8dfcc;
  --orange: #d58055;
}
* {
  box-sizing: border-box;
}
html,
body {
  margin: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
body {
  font-family: Jua, "Noto Sans KR", system-ui, sans-serif;
  color: var(--ink);
  background: #e4e9d8;
}
button,
a {
  -webkit-tap-highlight-color: transparent;
}
button {
  font: inherit;
  color: inherit;
  cursor: pointer;
}
button:disabled {
  opacity: 0.35;
  cursor: default;
}
button:focus-visible,
a:focus-visible,
canvas:focus-visible {
  outline: 3px solid var(--orange);
  outline-offset: 2px;
}
[hidden] {
  display: none !important;
}
.landing {
  position: relative;
  width: 100%;
  height: 100dvh;
  overflow: hidden auto;
  padding: 0 max(28px, env(safe-area-inset-right)) 22px max(28px, env(safe-area-inset-left));
  background:
    radial-gradient(circle at 82% 15%, #fff8d5 0 5%, transparent 22%),
    linear-gradient(145deg, #f8f7e9 0%, #e6edda 58%, #d9e5d3 100%);
}
.landing::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: .3;
  background-image: radial-gradient(#587064 0.7px, transparent 0.7px);
  background-size: 18px 18px;
  mask-image: linear-gradient(90deg, #000, transparent 42%);
}
.landing-header,
.landing-main,
.landing-footer { position: relative; z-index: 1; width: min(1160px, 100%); margin-inline: auto; }
.landing-header { height: 92px; display: flex; align-items: center; justify-content: space-between; }
.landing-brand { display: flex; align-items: center; gap: 11px; color: var(--ink); text-decoration: none; }
.landing-brand img { border-radius: 13px; box-shadow: 0 5px 14px #3d594022; }
.landing-brand span { display: grid; gap: 1px; }
.landing-brand strong { font-size: 12px; letter-spacing: .12em; }
.landing-brand small { color: var(--muted); font-size: 8px; letter-spacing: .17em; }
.landing-status { display: flex; align-items: center; gap: 8px; padding: 9px 13px; border: 1px solid #cbd7c2; border-radius: 999px; background: #fffef6a8; color: #627469; font-size: 9px; letter-spacing: .13em; }
.landing-status i { width: 7px; height: 7px; border-radius: 50%; background: #62a27a; box-shadow: 0 0 0 4px #62a27a1c; }
.landing-main { min-height: calc(100dvh - 150px); display: grid; grid-template-columns: minmax(360px, .9fr) minmax(480px, 1.1fr); gap: clamp(40px, 7vw, 100px); align-items: center; padding: 32px 0 56px; }
.landing-copy { max-width: 510px; }
.landing-eyebrow { color: #7d8b78; font-size: 10px; letter-spacing: .22em; }
.landing-copy h1 { margin: 17px 0 19px; color: #2f463e; font-size: clamp(55px, 5.8vw, 82px); font-weight: 400; letter-spacing: -.07em; line-height: .99; }
.landing-copy h1 em { color: #d07950; font-style: normal; }
.landing-copy > p { margin: 0 0 29px; color: #718078; font-family: "Noto Sans KR", system-ui, sans-serif; font-size: 14px; line-height: 1.85; }
.landing-play { width: min(390px, 100%); min-height: 74px; display: grid; grid-template-columns: 42px 1fr auto; align-items: center; gap: 14px; padding: 12px 20px 12px 13px; border: 0; border-radius: 16px; background: #355e50; color: white; box-shadow: 0 13px 30px #355e5033; text-align: left; transition: transform .2s ease, box-shadow .2s ease, background .2s ease; }
.landing-play:hover { transform: translateY(-2px); background: #2d5548; box-shadow: 0 17px 36px #355e5045; }
.landing-play:active { transform: translateY(0); }
.landing-play-icon { width: 42px; aspect-ratio: 1; display: grid; place-items: center; border-radius: 11px; background: #ffffff17; color: #f4d29a; font-size: 14px; }
.landing-play > span:nth-child(2) { display: grid; gap: 4px; }
.landing-play strong { font-size: 17px; }
.landing-play small { color: #d6e2dc; font-size: 10px; font-weight: 400; }
.landing-play b { color: #f3d49c; font-size: 23px; font-weight: 400; }
.landing-back { display: inline-block; margin: 16px 0 29px; color: #738178; font-size: 10px; text-decoration: none; }
.landing-back:hover { color: var(--green); }
.landing-facts { width: min(440px, 100%); display: grid; grid-template-columns: repeat(3, 1fr); margin: 0; padding: 19px 0 0; border-top: 1px solid #cbd6c3; list-style: none; }
.landing-facts li { display: grid; gap: 4px; padding: 0 20px; border-left: 1px solid #cbd6c3; }
.landing-facts li:first-child { padding-left: 0; border: 0; }
.landing-facts strong { font-size: 13px; font-weight: 400; }
.landing-facts span { color: #819087; font-family: "Noto Sans KR", system-ui, sans-serif; font-size: 9px; }
.landing-visual { position: relative; min-height: 570px; border: 1px solid #ffffffbf; border-radius: 40px; background: linear-gradient(160deg, #fdfcf0b8, #cdddc6d9); box-shadow: 0 35px 80px #50664d1f, inset 0 0 0 8px #ffffff24; overflow: hidden; }
.landing-visual::after { content: ""; position: absolute; inset: auto -8% -25% -8%; height: 63%; border-radius: 50% 50% 0 0; background: #adcb9f; transform: rotate(-4deg); }
.visual-sun { position: absolute; right: 14%; top: 11%; width: 72px; height: 72px; border-radius: 50%; background: #f4d586; box-shadow: 0 0 0 17px #f4d5861c, 0 0 60px #f4cf6966; }
.visual-cloud { position: absolute; width: 100px; height: 22px; border-radius: 30px; background: #fffef5c7; }
.visual-cloud::before,.visual-cloud::after { content: ""; position: absolute; bottom: 0; border-radius: 50%; background: inherit; }
.visual-cloud::before { left: 20px; width: 42px; height: 42px; }.visual-cloud::after { right: 14px; width: 31px; height: 31px; }
.cloud-one { left: 9%; top: 18%; }.cloud-two { right: 7%; top: 31%; transform: scale(.65); opacity: .68; }
.visual-city { position: absolute; z-index: 2; left: 50%; top: 52%; width: 380px; height: 250px; transform: translate(-50%,-50%) rotateX(58deg) rotateZ(-43deg); border-radius: 34px; background: #dce7cf; box-shadow: 0 45px 55px #3e59424a; }
.visual-road { position: absolute; z-index: 1; display: block; background: #71877b; box-shadow: inset 0 0 0 2px #52695e; }
.road-one { left: 0; right: 0; top: 104px; height: 48px; }.road-two { left: 168px; top: 0; bottom: 0; width: 48px; }
.visual-road::after { content: ""; position: absolute; inset: 50% 0 auto; border-top: 2px dashed #dfe8d4; transform: translateY(-50%); }
.road-two::after { inset: 0 auto 0 50%; border-top: 0; border-left: 2px dashed #dfe8d4; transform: translateX(-50%); }
.visual-city > span { position: absolute; z-index: 3; display: grid; place-items: center; transform: rotateZ(43deg) rotateX(-58deg); filter: drop-shadow(0 12px 8px #3d51383d); }
.visual-house { left: 61px; top: 31px; width: 76px; height: 78px; border-radius: 15px; background: #f8e2c5; color: #d97850; font-size: 52px; }
.visual-shop { right: 37px; top: 29px; width: 88px; height: 85px; border-radius: 12px; background: #d77b55; color: #fff1d8; font-size: 50px; }
.visual-office { right: 43px; bottom: 21px; width: 76px; height: 105px; border-radius: 12px; background: #5e8794; color: #e4f0ea; font-size: 52px; }
.visual-tree { width: 48px; height: 64px; color: #417153; font-size: 50px; }.tree-one { left: 66px; bottom: 31px; }.tree-two { left: 121px; bottom: 19px; color: #628759; transform: rotateZ(43deg) rotateX(-58deg) scale(.8) !important; }
.visual-car { left: 144px; top: 111px; width: 28px; height: 19px; border-radius: 8px; background: #f2c36e; color: #d5784e; font-size: 0; box-shadow: 0 0 0 3px #f8e9bb; }
.visual-card { position: absolute; z-index: 4; right: 25px; bottom: 25px; left: 25px; min-height: 82px; display: grid; grid-template-columns: 52px 1fr auto; align-items: center; gap: 14px; padding: 14px; border: 1px solid #fff; border-radius: 18px; background: #fffef3e8; box-shadow: 0 14px 35px #465d4626; backdrop-filter: blur(12px); }
.visual-card img { border-radius: 13px; }.visual-card span { display: grid; gap: 4px; }.visual-card small { color: var(--muted); font-size: 9px; }.visual-card strong { font-size: 15px; }.visual-card b { color: #d07950; font-size: 16px; font-weight: 400; }
.landing-footer { min-height: 58px; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid #cbd6c3; color: #839087; font-size: 8px; letter-spacing: .12em; }
body:not(.game-entered) .save-dock { display: none; }
#game {
  position: relative;
  width: 100%;
  height: 100dvh;
  overflow: hidden;
}
#map {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  touch-action: none;
  cursor: crosshair;
}
body[data-mode="pan"] #map {
  cursor: grab;
}
body[data-mode="pan"] #map:active { cursor:grabbing; }
.drag-cursor-icon { display:block; width:24px; height:24px; margin:auto; }
body[data-mode="inspect"] #map {
  cursor: help;
}
body[data-mode="road"] #map {
  cursor: cell;
}
body[data-mode="road"] .tool-hint {
  color: #075f69;
  font-weight: 750;
  text-shadow: 0 1px 3px #fffdf5;
}
.hud {
  position: absolute;
  top: max(20px, env(safe-area-inset-top));
  left: 24px;
  right: 24px;
  display: flex;
  align-items: center;
  max-width: 1080px;
  margin: auto;
  padding: 12px 16px;
  background: #fffef7ed;
  border: 1px solid #ffffff;
  border-radius: 17px;
  box-shadow: 0 5px 25px #293e3b0d;
  backdrop-filter: blur(12px);
  gap: 0;
}
.stat {
  padding: 0 22px;
  border-left: 1px solid var(--line);
  flex: 1;
  white-space: nowrap;
  background: transparent;
  text-align: left;
}
.hud .stat:first-of-type{border-left:0}
.stat > span {
  display: block;
  font-size: 10px;
  color: var(--muted);
  margin-bottom: 4px;
}
.stat > strong {
  font-size: 23px;
  font-weight: 750;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.8px;
  line-height: 1.15;
}
.stat > strong > span {
  font-size: 11px;
  font-weight: 500;
  margin-left: 4px;
}
.stat small {
  display: block;
  font-size: 8px;
  color: var(--muted);
  margin-top: 3px;
}
.stat.efficiency {
  border-top: 0;
  border-bottom: 0;
  border-right: 0;
}
.stat.money > strong {
  color: #365b48;
}
.circle {
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 50%;
  font-weight: 700;
}
.eyebrow {
  font-size: 8px;
  letter-spacing: 1.7px;
  color: #84917d;
  font-weight: 700;
}
.mission {
  position: absolute;
  left: 30px;
  top: 124px;
  width: 264px;
  border-radius: 14px;
  background: #fffef4e8;
  border: 1px solid #fffef9;
  padding: 15px 16px;
  box-shadow: 0 4px 20px #36513808;
}
.mission-top {
  display: flex;
  gap: 10px;
  align-items: center;
}
.mission-icon {
  font-size: 26px;
  color: var(--orange);
}
.mission h1 {
  font-size: 13px;
  margin: 4px 0 0;
  font-weight: 750;
  letter-spacing: -0.3px;
}
.mission-top button {
  margin-left: auto;
  align-self: start;
  border: 0;
  background: transparent;
  font-size: 20px;
  width: 28px;
  height: 28px;
  color: var(--muted);
}
.mission p {
  font-size: 10px;
  line-height: 1.8;
  color: var(--muted);
  margin: 12px 0;
}
.mission-bottom {
  display: flex;
  justify-content: space-between;
  font-size: 10px;
  border-top: 1px solid var(--line);
  padding-top: 9px;
}
.mission-bottom strong {
  color: #648567;
}
.controls {
  position: absolute;
  right: 28px;
  top: 128px;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 14px;
}
.time-controls,
.map-controls {
  display: flex;
  gap: 3px;
  background: #fffef3eb;
  border: 1px solid #ffffff;
  border-radius: 12px;
  padding: 4px;
  box-shadow: 0 4px 18px #36513809;
}
.map-controls {
  flex-direction: column;
}
.controls button {
  border: 0;
  background: transparent;
  min-width: 43px;
  min-height: 43px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 700;
}
.controls .map-controls button {
  position:relative;
  display:flex;
  align-items:center;
  gap:7px;
  width:92px;
  padding:6px 9px;
  font-size:19px;
  color:#57665b;
}
.map-controls .drag-cursor-icon { width:20px; height:20px; }
.map-controls .control-name { font-size:10px; line-height:1; font-weight:800; }
.map-controls button::after { content:attr(data-tooltip); position:absolute; top:50%; left:calc(100% + 9px); width:max-content; max-width:230px; padding:7px 9px; border:1px solid #736b57; border-radius:9px; background:#fff9df; color:#5e5748; box-shadow:2px 3px 0 #756c5928; font-size:10px; line-height:1.3; text-align:left; opacity:0; visibility:hidden; transform:translate(-5px,-50%); transition:.14s; pointer-events:none; z-index:30; }
.map-controls button:hover::after,.map-controls button:focus-visible::after { opacity:1; visibility:visible; transform:translate(0,-50%); }
.map-controls #undo:not(:disabled) { background:#fff0c6; color:#8b5d2d; }
.map-controls #undo:disabled { opacity:.45; }
.map-controls #undo:not(:disabled) .undo-glyph { animation:undo-ready .32s ease-out; }
@keyframes undo-ready { from{transform:rotate(35deg) scale(.7)} to{transform:none} }
.controls button.active,
.controls button[aria-pressed="true"] {
  background: var(--green);
  color: white;
}
.controls button:hover:not(.active) {
  background: #d9e2ce;
}
.map-legend {
  position: absolute;
  bottom: 155px;
  left: 30px;
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 9px;
  color: #65765c;
  background: #f7f9edab;
  border-radius: 20px;
  padding: 4px 8px 4px 12px;
  backdrop-filter: blur(8px);
}
.map-legend span {
  display: flex;
  align-items: center;
  gap: 4px;
}
.map-legend i {
  display: inline-block;
  width: 5px;
  height: 5px;
  border-radius: 50%;
}
.green {
  background: #64886e;
}
.amber {
  background: #d9a051;
}
.red {
  background: #c87155;
}
.map-legend button {
  border: 0;
  border-left: 1px solid #d2dcc8;
  background: transparent;
  font-size: 9px;
  padding: 10px 8px;
  color: var(--green);
}
.city-label {
  position: absolute;
  bottom: 159px;
  right: 30px;
  text-align: right;
  pointer-events: none;
}
.city-label > span {
  display: block;
  font-size: 7px;
  color: #8a987c;
  letter-spacing: 1.3px;
}
.city-label > strong {
  display: block;
  font-size: 10px;
  margin-top: 5px;
  color: #687e5e;
  font-weight: 600;
}
.build-menu {
  position: absolute;
  bottom: max(32px, env(safe-area-inset-bottom));
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  align-items: stretch;
  background: #fffef5f5;
  border: 1px solid white;
  border-radius: 18px;
  padding: 7px;
  box-shadow: 0 10px 40px #30433e22;
  gap: 5px;
  backdrop-filter: blur(12px);
}
.build-menu button {
  position: relative;
  min-width: 85px;
  height: 80px;
  padding: 7px 12px;
  border: 0;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 2px;
  background: transparent;
}
.build-menu button.active {
  background: var(--green);
  color: #fff;
}
.build-menu button:hover:not(.active):not(:disabled) {
  background: #e5ecda;
}
.tool-icon {
  font-size: 26px;
  font-weight: 400;
  line-height: 1.1;
}
.home-icon {
  color: #ca7954;
}
.shop-icon {
  color: #54866e;
}
.office-icon {
  color: #788da6;
}
.tree-icon { color: #5f8c58; }
.water-icon { color: #559bad; }
.active .tool-icon {
  color: white;
}
.build-menu strong {
  font-size: 11px;
}
.build-menu small {
  font-size: 8px;
  opacity: 0.6;
}
.menu-divider {
  width: 1px;
  background: var(--line);
  margin: 15px 3px;
}
.tool-hint {
  position: absolute;
  bottom: 12px;
  width: 100%;
  text-align: center;
  font-size: 9px;
  color: #69805f;
  pointer-events: none;
}
.toast {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  top: 122px;
  background: #345a4bea;
  color: #f7f7e9;
  font-size: 11px;
  padding: 13px 20px;
  border: 1px solid #799385;
  border-radius: 12px;
  box-shadow: 0 4px 20px #30433e11;
  pointer-events: none;
  max-width: 440px;
  line-height: 1.6;
  text-align: center;
  z-index: 6;
}
.inspector,
.traffic-panel {
  position: absolute;
  left: 30px;
  bottom: 210px;
  width: 274px;
  padding: 20px;
  background: #fffef5f5;
  border: 1px solid #fff;
  border-radius: 16px;
  box-shadow: 0 10px 35px #30433e1a;
  backdrop-filter: blur(12px);
  z-index: 5;
}
.inspector h2,
.traffic-panel h2 {
  font-size: 20px;
  margin: 8px 0 14px;
  letter-spacing: -0.5px;
}
.quick-actions {
  position: absolute;
  display: grid;
  gap: 7px;
  width: 210px;
  padding: 12px;
  background: #fffdf5f5;
  border: 1.5px solid #777467;
  border-radius: 12px 17px 11px 15px;
  box-shadow: 3px 5px 20px #30433e2b;
  backdrop-filter: blur(10px);
  z-index: 12;
}
.quick-actions[hidden] { display: none; }
.quick-actions strong { font-size: 13px; }
.quick-actions > span { color: var(--muted); font-size: 10px; line-height: 1.5; }
.quick-actions button { min-height: 38px; margin: 0; padding: 7px 10px; border-radius: 9px; font-size: 11px; }
.quick-actions .danger { background: #b96c58; color: #fff; border-color: #9f5546; }
.quick-actions .danger:disabled { background: #ddd4cc; color: #8d8178; border-color: #c9beb5; }
.close {
  position: absolute;
  right: 9px;
  top: 9px;
  width: 33px;
  height: 33px;
  border: 0;
  border-radius: 50%;
  background: transparent;
  font-size: 24px;
  color: #82907c;
}
.info-type {
  font-size: 9px;
  letter-spacing: 1px;
  color: var(--muted);
}
.info-row {
  display: flex;
  justify-content: space-between;
  font-size: 11px;
  padding: 7px 0;
}
.info-row > span {
  color: var(--muted);
}
.info-row strong {
  font-weight: 650;
}
.growth-track {
  height: 5px;
  background: #e0e6d6;
  border-radius: 4px;
  margin: 13px 0 7px;
  overflow: hidden;
}
.growth-track > i {
  display: block;
  height: 100%;
  background: #94ac79;
  transition: width 0.5s;
}
.info-note {
  font-size: 10px;
  line-height: 1.7;
  color: var(--muted);
  margin: 9px 0 0;
}
.upgrade-home {
  width: 100%;
  min-height: 42px;
  margin-top: 12px;
  border: 0;
  border-radius: 10px;
  background: var(--green);
  color: white;
  font-size: 11px;
  font-weight: 750;
}
.upgrade-home:disabled {
  background: #dce6df;
  color: #7d9189;
}
.traffic-panel {
  left: auto;
  right: 90px;
  bottom: 185px;
  width: 320px;
}
.traffic-summary {
  display: flex;
  justify-content: space-between;
}
.traffic-summary span {
  display: block;
  color: var(--muted);
  font-size: 9px;
}
.traffic-summary strong {
  display: block;
  margin: 6px 0;
  font-size: 18px;
}
.economy-summary {
  margin-top: 10px;
  padding-top: 7px;
  border-top: 1px solid var(--line);
}
#chart {
  display: block;
  width: 100%;
  margin: 15px 0 4px;
}
.traffic-panel p {
  font-size: 11px;
  line-height: 1.8;
  margin: 10px 0;
}
.traffic-panel small {
  font-size: 9px;
  color: var(--muted);
}
.aid {
  position: absolute;
  bottom: 160px;
  left: 50%;
  transform: translateX(-50%);
  min-height: 44px;
  padding: 10px 18px;
  border: 1px solid #daaa65;
  border-radius: 12px;
  background: #fff0c9;
  font-size: 11px;
  z-index: 4;
}
dialog {
  width: min(460px, calc(100% - 32px));
  max-height: 90dvh;
  overflow: auto;
  padding: 30px;
  border: 1px solid #fff;
  border-radius: 23px;
  background: var(--paper);
  color: var(--ink);
  box-shadow: 0 25px 100px #284b3033;
}
dialog::backdrop {
  background: #40574666;
  backdrop-filter: blur(5px);
}
dialog h2 {
  font-size: 29px;
  letter-spacing: -1px;
  line-height: 1.35;
  margin: 18px 0 12px;
}
dialog > p {
  font-size: 13px;
  line-height: 1.8;
  color: var(--muted);
}
.auth-art {
  margin-top: 18px;
}
.auth-art span {
  font-family: Georgia, serif;
  font-weight: 700;
  font-style: italic;
}
.guest-warning {
  display: grid;
  gap: 7px;
  margin: 22px 0 4px;
  padding: 15px 16px;
  border: 1px solid #e4c486;
  border-radius: 12px;
  background: #fff4d8;
  color: #79552c;
  font-size: 12px;
  line-height: 1.6;
}
.guest-warning strong {
  color: var(--ink);
  font-size: 13px;
}
.intro-art {
  height: 50px;
  margin-top: 25px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
}
.intro-art span {
  font-size: 40px;
  color: var(--orange);
}
.intro-art span:nth-of-type(2) {
  color: #598a74;
}
.intro-art span:nth-of-type(3) {
  color: #7a90ae;
}
.intro-art i {
  width: 40px;
  border-top: 2px dashed #9da995;
}
dialog ol {
  padding-left: 20px;
  margin: 23px 0;
}
dialog li {
  font-size: 12px;
  padding-left: 4px;
  margin: 15px 0;
}
dialog li::marker {
  color: var(--orange);
  font-weight: 700;
}
dialog li span {
  display: block;
  font-size: 10px;
  color: var(--muted);
  margin-top: 4px;
  line-height: 1.7;
}
dialog .intro-note {
  font-size: 10px;
  border-top: 1px solid var(--line);
  padding-top: 14px;
  line-height: 1.8;
}
.primary {
  width: 100%;
  min-height: 49px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: var(--green);
  color: white;
  border: 0;
  border-radius: 10px;
  padding: 13px 17px;
  font-size: 13px;
  font-weight: 700;
  margin-top: 18px;
}
.text-button {
  display: block;
  width: 100%;
  min-height: 44px;
  background: transparent;
  border: 0;
  margin-top: 6px;
  font-size: 11px;
  color: var(--muted);
}
.negative {
  color: #c17154 !important;
}
@media (max-width: 1000px) {
  .landing-main { grid-template-columns: minmax(310px, .85fr) minmax(390px, 1.15fr); gap: 34px; }
  .landing-visual { min-height: 500px; }
  .visual-city { transform: translate(-50%,-50%) rotateX(58deg) rotateZ(-43deg) scale(.86); }
  .hud {
    left: 16px;
    right: 16px;
  }
  .stat {
    padding: 0 16px;
  }
  .stat:first-of-type {
    border: 0;
  }
  .mission {
    left: 20px;
  }
  .controls {
    right: 20px;
  }
  .toast {
    top: 220px;
  }
  .city-label {
    right: 20px;
  }
}
@media (max-width: 620px) {
  .landing { padding-inline: max(18px, env(safe-area-inset-left)); }
  .landing-header { height: 72px; }
  .landing-brand img { width: 38px; height: 38px; }
  .landing-status { padding: 8px 10px; font-size: 7px; }
  .landing-main { min-height: auto; display: flex; flex-direction: column; gap: 25px; padding: 25px 0 32px; }
  .landing-copy { width: 100%; text-align: center; }
  .landing-copy h1 { margin: 13px 0 15px; font-size: clamp(48px, 14.5vw, 64px); }
  .landing-copy > p { margin-bottom: 21px; font-size: 12px; line-height: 1.7; }
  .landing-copy > p br { display: none; }
  .landing-play { margin-inline: auto; }
  .landing-back { margin-bottom: 22px; }
  .landing-facts { margin-inline: auto; }
  .landing-facts li { padding-inline: 10px; }
  .landing-visual { order: -1; width: 100%; min-height: 280px; border-radius: 27px; }
  .visual-city { top: 48%; transform: translate(-50%,-50%) rotateX(58deg) rotateZ(-43deg) scale(.59); }
  .visual-sun { top: 8%; width: 50px; height: 50px; }
  .cloud-one { top: 15%; transform: scale(.68); }.cloud-two { display: none; }
  .visual-card { right: 13px; bottom: 13px; left: 13px; min-height: 61px; grid-template-columns: 40px 1fr auto; padding: 9px; border-radius: 14px; }
  .visual-card img { width: 40px; height: 40px; }.visual-card strong { font-size: 12px; }.visual-card b { font-size: 13px; }
  .landing-footer { min-height: 48px; justify-content: center; }.landing-footer span:first-child { display: none; }
  .hud {
    top: max(10px, env(safe-area-inset-top));
    left: 10px;
    right: 10px;
    padding: 11px 5px 10px;
    border-radius: 13px;
    align-items: start;
  }
  .stat {
    padding: 0 7px;
    min-width: 0;
  }
  .stat > span {
    font-size: 8px;
    letter-spacing: -0.3px;
  }
  .stat > strong {
    font-size: 17px;
    letter-spacing: -0.8px;
  }
  .stat > strong > span {
    font-size: 8px;
    margin-left: 2px;
  }
  .stat small {
    font-size: 6px;
    max-width: 70px;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .stat.city {
    flex: 0.9;
  }
  .hud > .circle {
    position: absolute;
    right: 0;
    top: 89px;
    background: #fffef3ed;
    width: 44px;
    height: 44px;
    border-radius: 11px;
    border-color: #fff;
  }
  .mission {
    top: 99px;
    left: 12px;
    width: 235px;
    padding: 11px 12px;
    border-radius: 11px;
  }
  .mission .eyebrow {
    font-size: 6px;
    letter-spacing: 1px;
  }
  .mission h1 {
    font-size: 11px;
  }
  .mission-icon {
    font-size: 22px;
  }
  .mission-top {
    gap: 7px;
  }
  .mission p {
    font-size: 9px;
    margin: 8px 0;
    line-height: 1.7;
  }
  .mission-bottom {
    font-size: 9px;
    padding-top: 7px;
  }
  .mission-top button {
    width: 26px;
    height: 26px;
  }
  .controls {
    top: 151px;
    right: 10px;
    gap: 9px;
  }
  .time-controls {
    flex-direction: column;
  }
  .controls button {
    min-width: 44px;
    min-height: 44px;
    font-size: 11px;
  }
  .controls .map-controls button {
    font-size: 18px;
  }
  .map-controls {
    padding: 3px;
    gap: 1px;
  }
  .time-controls {
    padding: 3px;
    gap: 1px;
  }
  .build-menu {
    bottom: max(22px, env(safe-area-inset-bottom));
    padding: 5px;
    gap: 2px;
    border-radius: 14px;
    width: calc(100% - 18px);
    justify-content: flex-start;
    overflow-x: auto;
    scrollbar-width: none;
  }
  .build-menu::-webkit-scrollbar { display: none; }
  .build-menu button {
    min-width: 0;
    flex: 0 0 44px;
    height: 69px;
    padding: 5px 2px;
    gap: 2px;
    border-radius: 9px;
  }
  .tool-icon {
    font-size: 23px;
  }
  .build-menu strong {
    font-size: 10px;
  }
  .build-menu small {
    font-size: 7px;
  }
  .menu-divider {
    margin: 12px 1px;
  }
  .tool-hint {
    bottom: 6px;
    font-size: 7px;
  }
  .map-legend {
    left: 12px;
    bottom: 113px;
    gap: 8px;
    font-size: 8px;
    padding: 2px 4px 2px 9px;
  }
  .map-legend button {
    font-size: 8px;
    padding: 10px 6px;
  }
  .city-label {
    display: none;
  }
  .inspector,
  .traffic-panel {
    left: 12px;
    right: 12px;
    bottom: 156px;
    width: auto;
    padding: 17px;
    max-height: calc(100dvh - 260px);
    overflow: auto;
  }
  .inspector h2,
  .traffic-panel h2 {
    font-size: 18px;
    margin: 7px 0 8px;
  }
  .info-row {
    padding: 5px 0;
    font-size: 10px;
  }
  .traffic-panel {
    z-index: 7;
  }
  .toast {
    top: auto;
    bottom: 153px;
    max-width: calc(100% - 30px);
    width: max-content;
    font-size: 10px;
    padding: 10px 14px;
  }
  .aid {
    bottom: 151px;
    font-size: 10px;
    white-space: nowrap;
  }
  .intro-art {
    height: 35px;
    margin-top: 20px;
  }
  dialog {
    padding: 23px;
  }
  dialog h2 {
    font-size: 25px;
  }
  .close {
    width: 38px;
    height: 38px;
  }
  .controls .map-controls #center {
    display: none;
  }
}
@media (max-height: 700px) and (max-width: 620px) {
  .map-controls {
    flex-direction: row;
    position: fixed;
    right: 12px;
    bottom: 157px;
  }
  .controls .map-controls button {
    min-width: 32px;
    min-height: 35px;
  }
  .mission {
    max-width: 220px;
  }
  .mission p {
    margin: 5px 0;
  }
  .inspector,
  .traffic-panel {
    bottom: 201px;
  }
  .toast {
    bottom: 204px;
  }
}
@media (prefers-reduced-motion: reduce) {
  * {
    transition: none !important;
  }
}

/* Bright, tactile city-builder surfaces. The map remains the primary canvas. */
:root {
  --ink: #193d46;
  --muted: #58727c;
  --paper: #f8fcff;
  --green: #087e8b;
  --line: #d9e9ee;
  --orange: #fb8654;
}
button { transition: transform .15s ease, background .15s ease, box-shadow .15s ease; }
button:active:not(:disabled) { transform: translateY(2px); }
.hud, .mission, .controls > div, .build-menu, .inspector, .traffic-panel {
  background: #f8fcfff2;
  border: 1px solid #fff;
  box-shadow: 0 8px 28px #17445315, 0 2px 0 #d8e8ed;
}
.hud { border-radius: 22px; }
.mission { border-left: 4px solid #ffa365; }
.next-step { margin-top: 8px; padding: 8px; background: #eef3e5; border-radius: 8px; }
.mission .next-step p { margin: 0 0 6px; line-height: 1.5; color: #3b574b; }
.next-step button { min-height: 40px; padding: 6px 10px; border: 1px solid #c2cfb6; border-radius: 7px; background: #fffdf5; color: #315b4c; font: inherit; cursor: pointer; }
.mission-icon { color: #ff944f; }
.build-menu { border-radius: 24px; padding: 9px; }
.build-menu button { border-radius: 16px; }
.build-menu button.active, .controls button.active, .controls button[aria-pressed="true"] {
  background: #087e8b; color: #fff; box-shadow: 0 4px 10px #087e8b30;
}
.build-menu button.active small, .build-menu button.active .tool-icon { color: #d9ffff; }
.tool-icon { color: #087e8b; }
.home-icon { color: #f47b52; }
.office-icon { color: #7179df; }
dialog { border-radius: 28px; background: linear-gradient(155deg, #fff, #edf9fc); }
dialog::backdrop { background: #163e506b; }
.primary { border-radius: 14px; background: linear-gradient(110deg, #078791, #1266a7); box-shadow: 0 5px 12px #087e8b26; }
.text-button { font-size: 13px; }
.save-dock { position: fixed; top: 108px; right: 24px; display: flex; align-items: center; gap: 6px; z-index: 5; }
.save-dock button { background: #f8fcff; border: 1px solid #fff; padding: 10px 14px; border-radius: 14px; min-height: 44px; font-weight: 700; box-shadow: 0 4px 16px #17445315; }
#save-status { position: absolute; top: 100%; right: 0; margin-top: 5px; width: 250px; text-align: right; font-size: 11px; color: #244952; text-shadow: 0 1px 3px #fff; }
.controls { top: 192px; }
#library { width: min(620px, calc(100% - 24px)); }
.save-count { display: inline-block; padding: 6px 12px; border-radius: 20px; background: #dff3f6; color: #087782; font-size: 12px; font-weight: 700; }
.save-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 18px 0 24px; }
.save-card { background: #fff; border: 1px solid #d9e9ee; border-radius: 18px; padding: 16px; min-width: 0; }
.save-card h3 { margin: 0 0 8px; overflow-wrap: anywhere; }
.save-card p, .save-card small { font-size: 12px; color: var(--muted); }
.save-card .primary { margin-top: 12px; }
.save-card .text-button { min-height: 36px; margin: 4px 0 -8px; }
.city-name-label { display: block; font-size: 13px; font-weight: 700; margin-bottom: 8px; }
#city-name-input { width: 100%; border: 1px solid #b7d5de; padding: 13px; border-radius: 12px; font: inherit; font-size: 16px; }
#library-error { color: #ae4334; }
@media (max-width: 620px) {
  .hud { top: max(10px, env(safe-area-inset-top)); padding: 10px 8px; }
  .stat { padding: 0 6px; }
  .stat > span { font-size: 9px; }
  .stat > strong { font-size: 19px; }
  .stat small { display: none; }
  .hud > .circle { top: 76px; right: 0; }
  .mission { top: 88px; left: 10px; width: calc(100% - 120px); max-width: 270px; padding: 8px 10px; }
  .mission .eyebrow { display: none; }
  .mission h1 { font-size: 13px; }
  .mission p, .mission-bottom { font-size: 11px; }
  .mission-top button { width: 44px; height: 36px; }
  .save-dock { top: auto; bottom: max(154px, calc(env(safe-area-inset-bottom) + 142px)); right: 10px; }
  .save-dock button { padding: 8px 12px; }
  #save-status { top: auto; bottom: 100%; padding: 6px 0; width: 220px; font-size: 10px; }
  .controls { top: 144px; right: 10px; gap: 8px; }
  .time-controls { display: grid; grid-template-columns: repeat(2, 40px); }
  .controls button { min-width: 36px; min-height: 40px; }
  .map-controls { position: static; display: grid; grid-template-columns: repeat(2, 58px); align-self: flex-end; }
  .controls .map-controls button { width:58px; min-width:58px; min-height:46px; padding:4px; justify-content:center; flex-direction:column; gap:1px; }
  .map-controls .control-name{font-size:8px}
  .map-controls button::after{display:none}
  body:has(#mission-detail:not([hidden])) .controls { top: 210px; }
  .build-menu { bottom: max(24px, env(safe-area-inset-bottom)); padding: 6px; border-radius: 20px; }
  .build-menu button { height: 72px; border-radius: 13px; }
  .build-menu strong { font-size: 11px; }
  .build-menu small { font-size: 9px; }
  .tool-hint { bottom: max(5px, calc(env(safe-area-inset-bottom) - 18px)); width: calc(100% - 16px); white-space: normal; text-align: center; font-size: 10px; }
  .map-legend { bottom: 109px; }
  .save-list { grid-template-columns: 1fr; }
  .inspector, .traffic-panel { z-index: 8; bottom: 150px; }
}
@media (max-height: 560px) {
  .mission { display: none; }
  .controls { top: 105px; flex-direction: row; }
  .controls .map-controls, .time-controls { flex-direction: row; }
  .save-dock { top: auto; bottom: 125px; }
  .map-legend { display: none; }
}

/* Notebook sheets, graphite outlines and colored-pencil city sprites. */
body { background: #faf7ed; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
input, textarea, [contenteditable="true"] { -webkit-user-select: text; user-select: text; }
#map { touch-action: none; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
.quick-build-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
.quick-build-grid[hidden] { display: none; }
.quick-build-grid button { background: #f1f5e9; color: #315b4c; border: 1px solid #bac8b0; }
.quick-actions { max-height: calc(100dvh - 24px); overflow-y: auto; }
.hud, .mission, .controls > div, .build-menu, .inspector, .traffic-panel, dialog {
  background: #fffdf5; border: 1.5px solid #777467;
  border-radius: 12px 17px 11px 15px;
  box-shadow: 3px 4px 0 #77746720;
}
.clearing-option { display:flex; gap:8px; align-items:center; font-size:12px; margin:12px 0; }
#build-confirm {
  width:min(240px,calc(100% - 16px)); padding:10px 12px;
  position:fixed; inset:auto; margin:0; z-index:20;
  background:#fffdf5; border:1px solid #57756b; border-radius:12px;
  box-shadow:0 10px 34px #243b3470, 3px 4px 0 #77746720;
}
#build-confirm h2 { font-size:14px; margin:0 0 6px; }
#build-confirm p { font-size:12px; margin:0 0 8px; }
body.placing-building #map { cursor:crosshair; }
.confirm-actions { display:flex; gap:8px; }
.confirm-actions button { flex:1; min-height:44px; margin:0; padding:8px; }
@media(max-width:620px) {
  .inspector { left:auto; right:10px; width:250px; max-width:calc(100% - 20px); height:auto; max-height:min(260px, calc(100vh - 330px)); padding:10px; overflow:auto; bottom:145px; }
  .inspector .close { position:sticky; float:right; top:0; width:44px; height:44px; margin:-6px -6px -20px 0; background:#fffdf5; z-index:2; }
  .inspector h2 { font-size:15px; margin:3px 0 7px; }
  .inspector .info-row { font-size:11px; padding:3px 0; }
  .inspector .info-note { font-size:11px; margin:7px 0; }
  .inspector .upgrade-home { font-size:11px; min-height:44px; padding:7px; }
  #build-confirm { max-height:180px; }
  .quick-actions { width: min(230px, calc(100% - 20px)); padding: 11px; }
  .quick-actions button { min-height: 44px; }
}

/* A compact illustrated tool tray anchored to the touched plot. */
.quick-actions { width: 232px; padding: 13px 10px 10px; gap: 8px; border: 2px solid #84705a; border-radius: 22px 18px 23px 17px; background: #fff7df; box-shadow: 0 5px 0 #bba580, 0 10px 22px #493e3933; backdrop-filter: none; }
.quick-actions > strong { padding: 2px 36px 4px 5px; color: #665039; font-size: 14px; }
.quick-actions[data-kind="build"] > #quick-detail { display: none; }
.quick-actions #quick-cancel { position: absolute; top: 3px; right: 3px; width: 40px; min-height: 40px; padding: 0; background: transparent; border: 0; color: #87735a; font-size: 25px; }
.quick-actions .quick-build-grid { grid-template-columns: repeat(3,1fr); gap: 8px 6px; }
.quick-build-grid button { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; height: 76px; padding: 3px; border: 1px solid #c8b78e; border-bottom-width: 3px; border-radius: 15px 12px 14px 11px; background: #f7edd1; color: #64523c; transition: transform .12s, background .12s; }
.quick-build-grid button i { font-style: normal; font-size: 29px; line-height: 30px; color: #e48a50; }
.quick-build-grid button[data-quick-build="shop"] i { color: #508b75; }
.quick-build-grid button[data-quick-build="office"] i { color: #728aad; }
.quick-build-grid button[data-quick-build="road"] i { color: #8a7a64; }
.quick-build-grid button[data-quick-build="tree"] i { color: #709854; }
.quick-build-grid button[data-quick-build="water"] i { color: #56a3ae; }
.quick-build-grid button span { font-size: 11px; font-weight: 800; }
.quick-build-grid button small { font-size: 9px; color: #8b704a; }
.quick-build-grid button:hover { background: #ffe8ac; transform: translateY(-2px); }
.quick-build-grid button:active { transform: translateY(2px); }
.quick-actions > button:not(#quick-cancel) { border-radius: 13px; border-width: 1px 1px 3px; font-weight: 700; background: #e5edd1; color: #436348; }
.quick-actions > button.danger:not(#quick-cancel) { background: #f5d2b4; color: #965034; }
.menu-art { display: block; width: 38px; height: 38px; object-fit: contain; }
.quick-build-grid button i.has-art { height: 36px; line-height: 36px; }
.quick-build-grid .menu-art { width: 36px; height: 36px; }
.tool-icon.has-art { height: 38px; font-size: 0; }
#quick-demolish { background-size: 30px!important; background-repeat: no-repeat!important; background-position: 9px center!important; padding-left: 42px; }
#line-confirm { position: absolute; z-index: 15; left: 50%; bottom: 135px; transform: translateX(-50%); width: min(350px,calc(100% - 24px)); padding: 14px; border: 2px solid #b68a3f; border-radius: 18px; background: #fff2cb; box-shadow: 0 4px 0 #c4a364; }
#line-confirm[hidden] { display: none; }
#line-confirm p { margin: 6px 0 10px; font-size: 13px; }
#line-confirm button { border: 1px solid #c8b78e; border-bottom-width: 3px; border-radius: 12px; background: #fffae9; color: #725834; }
#line-confirm .primary { background: #e6aa38; border-color: #bd812b; color: #49371f; }
.bus-line-panel { position:absolute; z-index:14; right:18px; bottom:132px; box-sizing:border-box; width:min(370px,calc(100% - 36px)); max-height:calc(100dvh - 220px); overflow:auto; padding:16px; border:2px solid #6e8171; border-bottom-width:4px; border-radius:22px; background:#fff8e6f2; color:#4e5846; box-shadow:0 10px 26px #3f493d35; backdrop-filter:blur(10px); }
.bus-line-panel[hidden] { display:none; }
.bus-line-panel h2 { margin:2px 34px 5px 0; font-size:20px; }
.bus-line-panel>p { margin:5px 0 9px; font-size:11px; line-height:1.45; color:#746c59; }
.bus-line-panel .close { position:absolute; top:7px; right:7px; width:38px; height:38px; padding:0; border:0; background:transparent; font-size:24px; color:#776a55; }
.bus-line-stops { display:flex; gap:5px; margin:9px 0; padding:0; overflow-x:auto; list-style:none; }
.bus-line-stops li { display:grid; grid-template-columns:22px auto 22px; align-items:center; flex:0 0 auto; min-width:108px; padding:6px; border:1px solid #d1c39d; border-radius:12px; background:#f4edcf; font-size:10px; }
.bus-line-stops li>span { display:grid; place-items:center; width:20px; height:20px; border-radius:7px; background:#317f7b; color:#fff; font-weight:800; }
.bus-line-stops li>b { padding:0 4px; }
.bus-line-stops li>button { min-height:24px; padding:0; border:0; background:transparent; color:#a55e4b; font-size:18px; }
.bus-line-stops li.empty { display:block; min-width:210px; color:#887c64; }
.bus-line-status[data-valid="true"] { color:#287168; }
.bus-line-panel .confirm-actions button { border:1px solid #bba982; border-bottom-width:3px; border-radius:12px; background:#f9f2db; color:#655944; }
.bus-line-panel .confirm-actions .primary { background:#3a8d84; border-color:#26736c; color:#fff; }
.bus-lines-list { display:grid; gap:7px; margin-top:12px; }
.bus-lines-list article { display:grid; grid-template-columns:1fr auto; gap:5px 7px; padding:9px; border:1px solid #d5c9a9; border-radius:14px; background:#fffdf2; }
.bus-lines-list article div small,.bus-lines-list article p { display:block; grid-column:1/-1; margin:2px 0; color:#7b725f; font-size:10px; }
.bus-lines-list article>span { align-self:start; padding:3px 6px; border-radius:8px; background:#e4eed8; color:#477152; font-size:9px; }
.bus-lines-list article>span.stopped { background:#f1ddc6; color:#976348; }
.bus-lines-list article>button { min-height:30px; margin:0; padding:4px 7px; border:1px solid #cbbd9c; border-radius:9px; background:#f3ead0; color:#655944; font-size:10px; }
@media(max-width:620px){.bus-line-panel{left:10px;right:10px;bottom:82px;width:auto;max-height:58dvh;padding:12px}.bus-line-panel h2{font-size:17px}.bus-line-stops li{min-width:100px}}
@media(max-width:620px){ .build-menu .menu-art { width:32px; height:32px; } .build-menu .tool-icon.has-art { height:32px; } .build-menu small { max-height:20px; overflow:hidden; } }
body { font-synthesis: none; }
.tool-group { position:relative; display:flex; flex-shrink:0; align-items:stretch; padding:14px 4px 0; border-right:1px solid #ded6bd; }
.tool-group:last-child { border-right:0; }
.tool-group-label { position:absolute; top:0; left:10px; color:#8a7957; font-size:10px; }
.quick-group-label { grid-column:1/-1; text-align:left; color:#8a7957; font-size:10px; padding-top:3px; }
.quick-actions[data-kind="build"] { max-height:calc(100dvh - 40px); overflow-y:auto; }
#pan { font-size:23px; }
.traffic-summary { border:0; background:none; color:inherit; padding:0; text-align:left; font:inherit; cursor:pointer; }
.traffic-summary > span,.traffic-summary > strong,.traffic-summary > small { display:block; }
.traffic-summary > span,.traffic-summary > small { font-size:10px; }
.traffic-summary > strong { font-size:24px; }
#happiness { border:0; background:#e7eed9; border-radius:10px; min-height:32px; padding:4px 8px; cursor:pointer; font:inherit; font-size:12px; }
#happiness:focus-visible { outline:2px solid #238898; outline-offset:2px; }
#residents-dialog { box-sizing:border-box; width:min(760px,calc(100% - 20px)); max-height:80dvh; padding:18px; border:2px solid #ad936a; border-radius:20px; background:#fff8e5; color:#4e5846; }
#residents-dialog h2 { font-size:20px; margin:0 36px 12px 0; }
#residents-dialog p { font-size:12px; line-height:1.5; }
#residents-dialog .ledger-note { color:#80795f; font-size:11px; }
.resident-scroll { max-height:48dvh; overflow:auto; }
.resident-scroll table { border-collapse:collapse; width:100%; font-size:12px; }
.resident-scroll th { position:sticky; top:0; background:#efe3c5; }
.resident-scroll th,.resident-scroll td { text-align:right; padding:9px 6px; border-bottom:1px solid #e5dbc2; }
.resident-scroll th:first-child,.resident-scroll td:first-child { text-align:left; }
.resident-scroll small { display:block; font-size:10px; color:#89816b; }
.resident-scroll .household-row td { position:sticky; top:34px; background:#f7edcf; color:#6d6048; text-align:left; font-size:11px; }
.resident-scroll .household-row td:last-child { text-align:right; color:#42684d; }
@media(max-width:620px){
  .hud .stat.efficiency .traffic-summary { display:flex; align-items:center; gap:6px; }
  .hud .stat.efficiency .traffic-summary > strong { font-size:12px; }
  .hud .stat.efficiency .traffic-summary > small { display:none; }
  .hud #happiness { margin-left:auto; font-size:10px; min-height:24px; padding:2px 8px; }
  #residents-dialog { padding:12px; }
  .resident-scroll { overflow:auto; }
  .resident-scroll table { min-width:0; }
  .resident-scroll thead { display:none; }
  .resident-scroll tr:not(.household-row) { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); padding:5px 0; border-bottom:1px solid #e5dbc2; }
  .resident-scroll tr:not(.household-row) td { min-width:0; padding:5px 6px; border:0; text-align:right; font-size:11px; }
  .resident-scroll tr:not(.household-row) td::before { content:attr(data-label); display:block; color:#8b826d; font-size:9px; }
  .resident-scroll tr:not(.household-row) td:first-child,.resident-scroll tr:not(.household-row) td:nth-child(2) { text-align:left; }
  .resident-scroll .household-row { display:table-row; }
  .resident-scroll .household-row td { top:0; }
}

/* Neighborhood view: reserve the map for streets and life, not overlapping totals. */
.build-menu { max-width:calc(100% - 24px); overflow-x:auto; }
.build-menu button { flex-shrink:0; }
#happiness { white-space:nowrap; color:#4b7954; }
.inspector { top:auto; left:auto; right:18px; bottom:132px; width:238px; padding:10px 12px; max-height:min(340px,calc(100dvh - 240px)); overflow:auto; border:2px solid #ad936a; border-radius:18px 14px 18px 14px; background:#fff8e5; box-shadow:0 4px 0 #c9b793,0 8px 22px #554a3926; }
.inspector h2 { min-height:36px; padding-right:22px; margin:3px 0 6px; font-size:16px; line-height:1.2; }
.inspector-portrait { width:36px; height:36px; object-fit:contain; float:left; margin-right:7px; }
.inspector .info-row { padding:4px 0; font-size:12px; }
.inspector .info-type { font-size:10px; }
.inspector > .close { position:absolute; top:4px; right:4px; float:none; width:36px; height:36px; margin:0; background:transparent; }
.inspector .info-note { font-size:11px; line-height:1.45; margin:7px 0; }
.inspector .upgrade-home { min-height:40px; font-size:11px; padding:7px; margin:6px 0 0; border-radius:10px; }
.inspector-more { border-top:1px dashed #d4c19a; margin-top:8px; padding-top:3px; }
.inspector-more summary { min-height:36px; display:list-item; align-content:center; cursor:pointer; font-size:12px; color:#88704e; }
.quick-actions[data-kind="object"] { width:224px; grid-template-columns:repeat(2,minmax(0,1fr)); padding:10px; gap:7px; }
.quick-actions[data-kind="object"] > strong { grid-column:1/-1; padding-right:30px; }
.quick-actions[data-kind="object"] > #quick-detail { grid-column:1/-1; font-size:10px; }
.quick-actions[data-kind="object"] > button:not(#quick-cancel) { min-height:65px; padding:6px!important; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; background-image:none!important; }
.quick-actions[data-kind="object"] > button[hidden] { display:none!important; }
.quick-actions[data-kind="object"] > button span { font-size:22px; line-height:24px; }
.quick-actions[data-kind="object"] > button b { font-weight:400; font-size:12px; }
.quick-actions[data-kind="object"] > button small { font-size:10px; }
.quick-actions[data-kind="object"] #quick-upgrade-line { grid-column:1/-1; flex-direction:row; min-height:44px; gap:8px; background:#f8df9d; }
@media(max-width:620px){ .inspector { right:8px; bottom:138px; width:218px; max-height:min(275px,calc(100dvh - 280px)); padding:9px 10px; } .inspector .info-row { font-size:11px; } .inspector > .close { position:absolute; width:36px; height:36px; margin:0; background:transparent; } }
.info-row strong { max-width:65%; text-align:right; overflow-wrap:anywhere; }
.next-step[hidden] { display: none; }
.stat { min-width: 0; }
.stat > strong { display: block; overflow: hidden; text-overflow: ellipsis; }
@media (max-width:620px) {
  .hud { display: grid; grid-template-columns: 1.2fr 1fr 1.2fr; gap: 3px 0; padding: 4px; }
  .hud .stat.city { display: none; }
  .hud .stat { padding: 0 7px; }
  .hud .stat > span { font-size:9px; margin-bottom:1px; }
  .hud .stat > small { display:none; }
  .hud .stat > strong { font-size: 14px; letter-spacing: -.4px; }
  .hud .stat.efficiency { grid-column: 1 / -1; display:flex; align-items:center; gap:8px; min-height:18px; border-left:0; border-top:1px solid #dedfd0; padding-top:2px; }
  .hud .stat.efficiency > span { margin:0; }
  .hud .stat.efficiency > strong { font-size:12px; }
  .hud .stat.efficiency small { display:block; margin:0 0 0 auto; font-size:10px; }
  .hud > .circle { position:absolute; top:104px; right:0; }
  .mission { top:114px; width:calc(100% - 80px); max-width:290px; }
  .mission-top { min-height:30px; }
  .controls { top:166px; }
  body:has(#mission-detail:not([hidden])) .controls { top:166px; }
  .mission:has(#mission-detail:not([hidden])) { width:calc(100% - 120px); max-height:calc(100dvh - 300px); overflow:auto; }
}

/* Right-side quest ribbon and event notices keep the map center clear. */
.mission { left:auto; right:18px; top:162px; width:270px; }
.mission{transition:opacity .18s ease,transform .18s ease}
body:has(.inspector:not([hidden])) .mission{opacity:0;transform:translateX(calc(100% + 32px));pointer-events:none}
body:has(.inspector:not([hidden])) .event-alert{top:162px}
.controls { right:auto; left:18px; }
.event-alert {
  position:fixed; z-index:7; right:0; top:420px; width:min(285px,calc(100% - 24px));
  box-sizing:border-box; display:grid; grid-template-columns:32px 1fr auto 30px; align-items:center; gap:8px;
  padding:10px 10px 10px 12px; color:#574824; background:#fff0b8; border:2px solid #c89238;
  border-right:0; border-radius:16px 0 0 16px; box-shadow:-4px 5px 0 #9d79364d,0 10px 24px #493e3926;
  animation:event-nudge 1.25s ease-in-out infinite;
}
.event-alert[hidden]{display:none}
.event-alert>span{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#ee9a43;color:#fff;font-weight:900;font-size:18px}
.event-alert strong,.event-alert small{display:block}.event-alert strong{font-size:13px}.event-alert small{font-size:10px;color:#796b47;margin-top:2px}
.event-alert button{min-height:38px;padding:5px 9px;border:1px solid #b77d2c;border-bottom-width:3px;border-radius:11px;background:#fff8dc;color:#6c4d20;font:inherit;font-size:10px;font-weight:800}
.event-alert-copy .event-alert-home{display:block;min-height:28px;margin-top:6px;padding:3px 8px;border-color:#7e9e70;background:#f9ffe9;color:#466348}
.event-alert-copy .event-alert-home[hidden]{display:none}
.event-alert .event-alert-close{align-self:start;min-width:30px;min-height:30px;padding:0;border:0;border-radius:50%;background:#fff9e2b8;color:#72562c;font-size:20px;line-height:1}
.event-alert[data-kind="request"]{background:#edf4d9;border-color:#78a06b;animation:none}.event-alert[data-kind="request"]>span{background:#6f9a6b}.event-alert[data-kind="request"] button{border-color:#7e9e70;color:#466348}
.event-alert[data-kind="request-complete"]{background:#e1f3dc;border-color:#5f9566;animation:none}.event-alert[data-kind="request-complete"]>span{background:#4d8d5c}
.toast.quest-complete{background:#fff0b8;border-color:#c78c2f;color:#5f4820;box-shadow:0 5px 0 #c39544,0 12px 30px #4b403333}
.toast.quest-complete::before{content:'✓';display:inline-grid;place-items:center;width:23px;height:23px;margin-right:7px;border-radius:50%;background:#5c9567;color:white}
@keyframes event-nudge{0%,100%{transform:translateX(0)}50%{transform:translateX(-5px)}}
.tool-icon.has-art{display:block;width:40px;background-size:contain;background-position:center;background-repeat:no-repeat}
.quick-addon-actions{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
.quick-addon-actions[hidden]{display:none}
.quick-addon-actions button{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:70px;border-radius:13px;border-width:1px 1px 3px;background:#e5edd1;color:#436348}
.quick-addon-actions button span{font-size:22px;line-height:24px}
.quick-addon-actions button b{font-size:11px;font-weight:400}
.quick-addon-actions button small{font-size:10px}
.quick-addon-actions button[data-addon-id]{background:#f5d2b4;color:#965034}
.quick-addon-actions button:focus-visible{outline:3px solid #2a9788;outline-offset:2px}
.quick-addon-actions button:disabled{opacity:.5}
@media(max-width:620px){
  .mission{left:auto;right:8px;top:106px;width:min(220px,calc(100% - 166px));min-width:142px;padding:7px 9px}
  .mission-top{gap:6px}.mission h1{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mission-top button{width:32px;height:32px;min-width:32px}
  .controls{left:8px;right:auto;top:106px;gap:5px;align-items:flex-start}
  body:has(#mission-detail:not([hidden])) .controls{top:106px}
  .time-controls,.map-controls{display:flex;position:static;flex-direction:row;padding:3px;gap:2px;border-radius:10px}
  .controls button,.controls .map-controls button{width:32px;min-width:32px;min-height:32px;height:32px;padding:0;font-size:10px}
  .controls .map-controls button{font-size:16px}.controls .map-controls #center{display:block}
  .event-alert{right:8px;top:178px;width:min(224px,calc(100% - 166px));grid-template-columns:26px minmax(0,1fr) 34px;padding:8px;border-right:2px solid #c89238;border-radius:14px;animation:event-nudge-mobile 1.25s ease-in-out infinite}
  .event-alert>span{width:26px;height:26px;font-size:15px}.event-alert strong{font-size:12px}.event-alert small{font-size:9px}
  .event-alert #event-alert-action{grid-column:2;justify-self:start;min-height:31px;padding:3px 8px}
  .event-alert .event-alert-close{grid-column:3;grid-row:1;align-self:center;justify-self:end;width:34px;height:34px;min-height:34px}
  body:has(#mission-detail:not([hidden])) .event-alert{top:252px}
  body:has(.inspector:not([hidden])) .event-alert{top:106px}
}
@keyframes event-nudge-mobile{
  0%,100%{filter:none;box-shadow:0 4px 0 #b3833740}
  50%{filter:brightness(1.07);box-shadow:0 4px 0 #b3833740,0 0 0 5px #f0bd4930}
}
@media(prefers-reduced-motion:reduce){.event-alert{animation:none}}

/* Mobile game shell: category dock, folded quest/event chips and one city menu. */
.tool-group-toggle{display:none!important}
.tool-drawer{display:flex;align-items:stretch}
.save-dock{position:fixed;top:108px;right:24px;bottom:auto;display:block;z-index:13}
.save-dock .game-menu-toggle{display:grid;width:46px;height:46px;min-width:46px;min-height:46px;padding:0;place-items:center;border:2px solid #8e7a5e;border-bottom-width:4px;border-radius:14px;background:#fff8df;color:#66513a;box-shadow:0 4px 12px #594b3730;transition:background .2s ease,border-color .2s ease,transform .2s ease}
.save-dock .game-menu-toggle:hover{transform:translateY(-1px)}
.save-dock.open .game-menu-toggle{background:#28868c;color:#fff;border-color:#1f6c72}
.menu-icon{position:relative;display:block;width:21px;height:16px}
.menu-icon i{position:absolute;left:0;width:21px;height:2px;border-radius:2px;background:currentColor;transform-origin:center;transition:top .22s ease,transform .22s ease,opacity .14s ease}
.menu-icon i:nth-child(1){top:0}.menu-icon i:nth-child(2){top:7px}.menu-icon i:nth-child(3){top:14px}
.save-dock.open .menu-icon i:nth-child(1){top:7px;transform:rotate(45deg)}
.save-dock.open .menu-icon i:nth-child(2){opacity:0;transform:scaleX(.25)}
.save-dock.open .menu-icon i:nth-child(3){top:7px;transform:rotate(-45deg)}
.game-menu-panel{position:absolute;top:54px;right:0;width:206px;box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;gap:7px;padding:11px;border:2px solid #8e7a5e;border-radius:17px 12px 17px 17px;background:#fff8df;box-shadow:0 6px 0 #a9957040,0 14px 30px #443c3030;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-10px) scale(.95);transform-origin:top right;transition:opacity .2s ease,transform .22s cubic-bezier(.2,.8,.2,1),visibility .2s}
.save-dock.open .game-menu-panel{opacity:1;visibility:visible;pointer-events:auto;transform:none}
.game-menu-panel>strong{display:block;padding:1px 3px 5px;color:#6b573b;font-size:13px}
.game-menu-panel button[hidden]{display:none}
.save-dock .game-menu-panel button,.save-dock .game-menu-panel .hub-link{display:flex;align-items:center;justify-content:flex-start;gap:9px;min-height:45px;box-sizing:border-box;padding:8px 11px;border:1px solid #b9a886;border-bottom-width:3px;border-radius:12px;background:#eef2da;color:#47604b;box-shadow:none;font-size:12px;font-weight:700;text-decoration:none}
.save-dock .game-menu-panel button span,.save-dock .game-menu-panel .hub-link>span:first-child{font-size:18px;color:#287f85}
.save-dock .game-menu-panel .hub-link>span:last-child{display:flex;min-width:0;flex-direction:column;gap:1px}
.save-dock .game-menu-panel .hub-link b{font-size:12px}.save-dock .game-menu-panel .hub-link small{font-size:9px;font-weight:600;color:#7b725c}
.save-dock #save-status{position:static;width:auto;margin:0;padding:5px 3px 1px;text-align:left;font-size:9px;line-height:1.35;color:#716c58;text-shadow:none}
.building-directory-list{display:grid;gap:12px;max-height:min(62dvh,560px);overflow:auto;padding-right:4px}
.building-directory-group{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
.building-directory-group h3{grid-column:1/-1;margin:0;color:#5c624e;font-size:14px}
.building-directory-item{display:grid;grid-template-columns:32px 1fr;gap:2px 8px;align-items:center;min-height:56px;padding:7px 9px;text-align:left;border:1px solid #c6b792;border-bottom-width:3px;border-radius:12px;background:#f5f2d9;color:#4b5d4e}
.building-directory-item>span{grid-row:1/3;display:grid;place-items:center;font-size:22px;color:#287f85}
.building-directory-item strong{font-size:12px}.building-directory-item small{font-size:10px;color:#7b725c}
.building-directory-empty{grid-column:1/-1;margin:0;padding:10px;border:1px dashed #c9b992;border-radius:10px;color:#8b8168;font-size:11px}
#building-directory{box-sizing:border-box;width:min(560px,calc(100% - 20px));max-height:82dvh;padding:18px;border:2px solid #ad936a;border-radius:20px;background:#fff8e5;color:#4e5846}
#building-directory h2{margin:0 36px 8px 0}
@media(max-width:620px){.building-directory-group{grid-template-columns:1fr}}
.event-alert-toggle{display:none}

@media(max-width:620px){
  .hud{z-index:10}

  .mission{top:88px;right:60px;left:auto;width:168px;min-width:0;padding:5px 7px;z-index:7;overflow:hidden;transition:width .2s ease,box-shadow .2s ease}
  .mission:has(#mission-detail:not([hidden])){top:88px;right:8px;width:min(276px,calc(100% - 16px));max-height:calc(100dvh - 230px);padding:10px;overflow:auto;z-index:12}
  .mission:has(#mission-detail[hidden]) .mission-icon{font-size:14px}
  .mission:has(#mission-detail[hidden]) .mission-top{min-height:32px}
  .mission:has(#mission-detail[hidden]) .mission-top>div{min-width:0}
  .mission:has(#mission-detail[hidden]) h1{font-size:11px}
  .mission:has(#mission-detail[hidden]) #mission-toggle{width:32px;min-width:32px;height:32px}
  body:has(#mission-detail:not([hidden])) .controls,
  body:has(#mission-detail:not([hidden])) .save-dock,
  body:has(#mission-detail:not([hidden])) .event-alert{opacity:0;visibility:hidden;pointer-events:none}

  .save-dock{top:88px;right:8px;bottom:auto}
  .save-dock .game-menu-toggle{width:44px;height:44px;min-width:44px;min-height:44px}
  .game-menu-panel{top:52px;width:196px}

  .event-alert{top:142px;right:8px}
  .event-alert[data-expanded="false"]{display:block;width:44px;height:44px;padding:0;border:2px solid #c89238;border-right:2px solid #c89238;border-radius:14px;background:#fff0b8;box-shadow:0 4px 0 #b3833740;animation:event-nudge-mobile 1.25s ease-in-out infinite}
  .event-alert[data-expanded="false"]>:not(.event-alert-toggle){display:none}
  .event-alert[data-expanded="false"] .event-alert-toggle{display:grid;width:40px;height:40px;min-width:40px;min-height:40px;padding:0;place-items:center;border:0;border-radius:11px;background:transparent;color:#dc8233;font-size:22px;font-weight:900}
  .event-alert[data-expanded="true"]{top:142px;right:8px;width:min(276px,calc(100% - 16px));z-index:13}
  .event-alert[data-expanded="true"] .event-alert-toggle{display:none}
  .event-alert[data-kind="request"][data-expanded="false"],.event-alert[data-kind="request-complete"][data-expanded="false"]{background:#e5f1d9;border-color:#6f9968;animation:none}
  .event-alert[data-kind="request"][data-expanded="false"] .event-alert-toggle,.event-alert[data-kind="request-complete"][data-expanded="false"] .event-alert-toggle{color:#56865d}
  body:has(.event-alert[data-expanded="true"]) .controls{opacity:0;visibility:hidden;pointer-events:none}
  body:has(#mission-detail:not([hidden])) .event-alert{top:148px}
  body:has(#mission-detail:not([hidden])) .event-alert[data-expanded="true"]{top:244px}
  body:has(.inspector:not([hidden])) .event-alert{top:88px}

  .controls{top:88px;left:8px;z-index:6}
  body:has(#mission-detail:not([hidden])) .controls{top:88px}

  .build-menu{position:absolute;left:10px;right:10px;bottom:max(10px,env(safe-area-inset-bottom));width:auto;max-width:none;height:62px;box-sizing:border-box;display:flex;justify-content:stretch;align-items:stretch;gap:3px;padding:5px;overflow:visible;border:2px solid #8a7a62;border-bottom-width:4px;border-radius:18px;background:#fff8e6f7;transform:none;box-shadow:0 7px 20px #443d322b;backdrop-filter:blur(10px);z-index:11}
  .tool-group{position:static;display:block;flex:1;min-width:0;padding:0;border:0}
  .tool-group-label{display:none}
  .build-menu .tool-group-toggle{display:flex!important;width:100%;height:48px;min-width:0;min-height:48px;padding:3px 1px;flex-direction:column;gap:0;border:0;border-radius:11px;background:transparent;color:#76664d;box-shadow:none}
  .build-menu .tool-group-toggle span{font-size:21px;line-height:23px;color:#4d8277}
  .build-menu .tool-group-toggle strong{max-width:100%;font-size:10px;line-height:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .tool-group.has-active .tool-group-toggle{background:#dbead3;color:#42644a}
  .tool-group.has-active .tool-group-toggle::after{content:'';position:absolute;bottom:3px;width:5px;height:5px;border-radius:50%;background:#21878b}
  .tool-group.open .tool-group-toggle{background:#28868c;color:#fff}
  .tool-group.open .tool-group-toggle span{color:#fff7da}
  .tool-drawer{position:absolute;left:0;right:0;bottom:calc(100% + 8px);box-sizing:border-box;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;padding:10px;border:2px solid #8a7a62;border-bottom-width:4px;border-radius:18px;background:#fff8e6f7;box-shadow:0 7px 24px #443d3238;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(14px) scale(.98);transform-origin:bottom;transition:opacity .17s ease,transform .17s ease,visibility .17s}
  .tool-group.open .tool-drawer{opacity:1;visibility:visible;pointer-events:auto;transform:none}
  .build-menu .tool-drawer>button{display:flex;width:100%;height:72px;min-width:0;min-height:72px;padding:5px 3px;flex-direction:column;gap:2px;border:1px solid #d1c4a7;border-bottom-width:3px;border-radius:13px;background:#f2f3dd;color:#52664c}
  .build-menu .tool-drawer>button.active{background:#28868c;color:#fff;border-color:#1f6d72}
  .build-menu .tool-drawer .tool-icon{width:auto;height:34px;font-size:24px}
  .build-menu .tool-drawer .tool-icon.has-art{height:34px;background-size:contain}
  .build-menu .tool-drawer .menu-art{width:36px;height:34px}
  .build-menu .tool-drawer strong{font-size:11px}
  .build-menu .tool-drawer small{display:block;max-height:18px;font-size:8px;line-height:9px}
  .tool-hint{display:none}
  .map-legend{bottom:max(82px,calc(env(safe-area-inset-bottom) + 72px))}
  .save-dock+dialog{z-index:20}
}

@media(max-width:340px){
  .mission{width:142px}
  .build-menu .tool-group-toggle strong{font-size:9px}
}

/* Keep the four map actions large enough to read and tap on phones. */
@media(max-width:620px){
  .controls .map-controls{
    display:grid;
    grid-template-columns:repeat(2,58px);
    width:auto;
    padding:4px;
    gap:3px;
  }
  .controls .map-controls button{
    width:58px;
    min-width:58px;
    height:44px;
    min-height:44px;
    padding:3px 2px;
    flex-direction:column;
    justify-content:center;
    gap:1px;
    font-size:15px;
  }
  .controls .map-controls .drag-cursor-icon{width:17px;height:17px}
  .controls .map-controls .control-name{display:block;font-size:8px;line-height:9px}
}

@media(prefers-reduced-motion:reduce){
  .tool-drawer,.game-menu-panel,.mission,.game-menu-toggle,.menu-icon i{transition:none}
}
