/* src/player-ui/design-tokens.css */
:root {
  -webkit-tap-highlight-color: transparent;
  /* 홈 화면 앱·노치 기기의 아래쪽 안전 여백(홈 막대). 고정된 아래쪽 요소는 이 값을 더해 올린다. */
  --apofarm-safe-bottom: env(safe-area-inset-bottom, 0px);
  /* 테마: 이 블록이 밝은 테마(기본)다. 다른 테마는 아래 :root[data-theme="…"] 블록이 같은 토큰을 다시 정의한다(content/themes.js).
     color-scheme은 테마마다 알려서 브라우저의 자동 어두운 모드가 색을 따로 뒤집지 않게 한다. */
  color-scheme: light only;
  --apofarm-ink: #26332b;
  --apofarm-ink-soft: #59665d;
  --apofarm-ink-faint: #616962;
  --apofarm-paper: #f0ede3;
  --apofarm-paper-deep: #e5dfd1;
  --apofarm-surface: #f8f6ee;
  --apofarm-surface-high: #fcfbf6;
  --apofarm-line: #d1cabb;
  --apofarm-line-dark: #aaa99e;
  --apofarm-moss: #4f6b50;
  --apofarm-moss-deep: #354f3d;
  --apofarm-moss-pale: #dce3d7;
  --apofarm-soil: #86664e;
  --apofarm-soil-deep: #5f4737;
  --apofarm-soil-pale: #dfd2c1;
  --apofarm-water: #5d8995;
  --apofarm-water-pale: #dce9ea;
  --apofarm-danger: #a35c42;
  --apofarm-danger-pale: #f1ddd4;
  --apofarm-world: #ae8648;
  --apofarm-favorite: #8c6a33;
  --apofarm-radius-control: 4px;
  --apofarm-radius-panel: 2px;
  --apofarm-radius-soft: 8px;
  --apofarm-radius-pill: 18px;
  --apofarm-shadow-soft: 1px 2px 0 rgb(85 62 44 / 12%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(48 53 43 / 18%);
  /* 글자 크기 단계. 가장 작은 단계는 11px(보조 글), 본문 정보는 12px 이상. */
  --apofarm-text-2xs: .6875rem;
  --apofarm-text-xs: .75rem;
  --apofarm-text-sm: .8125rem;
  --apofarm-text-md: .875rem;
  --apofarm-text-base: 1rem;
  --apofarm-text-lg: 1.125rem;
  --apofarm-text-xl: 1.25rem;
  --apofarm-text-2xl: 1.4rem;
  --apofarm-text-3xl: 1.75rem;
  --apofarm-text-4xl: 2rem;
  --apofarm-font-body: "Pretendard Variable", Pretendard, "Noto Sans KR", "Malgun Gothic", sans-serif;
  --apofarm-font-display: "Gowun Batang", serif;

  /* 어두운 바탕(이끼색 버튼·세계 목표 카드·채팅 단추) 위의 글자와 선 */
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft: #e5e9df;
  --apofarm-on-dark-line: #9cab9d;
  --apofarm-on-dark-track: #617969;
  --apofarm-on-dark-divider: #67806c;
  /* 화면 틀 */
  --apofarm-nav-bg: #e6e2d6;
  --apofarm-scrim: rgb(26 35 28 / 58%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(38 51 43 / 8%);
  /* 상태 색 */
  --apofarm-health: #9f5749;
  /* 밭 카드 */
  --apofarm-plot-bg: #f1e8d9;
  --apofarm-plot-line: #bbad98;
  --apofarm-plot-shadow: 2px 3px 0 rgb(94 72 51 / 10%);
  --apofarm-plot-tilled: #e9dcc9;
  --apofarm-plot-divider: rgb(111 87 67 / 25%);
  --apofarm-plot-detail-bg: rgb(255 255 255 / 35%);
  --apofarm-plot-withered-bg: #cbb0b2;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #68262b;
  --apofarm-plot-diseased-line: #a0672b;
  --apofarm-plot-diseased-glow: rgba(160,103,43,.35);
  --apofarm-plot-diseased-text: #8a4a12;
  /* 채운 바탕(단추·막대·머리글)은 글자를 흰색(--apofarm-on-dark)으로 쓰므로 테마마다 따로 정한다. */
  --apofarm-plot-bare: #e5dfd1;
  --apofarm-plot-ready: #e8b730;
  --apofarm-plot-ready-line: #c58a12;
  --apofarm-fill-moss: #4f6b50;
  --apofarm-fill-moss-deep: #354f3d;
  --apofarm-fill-soil: #86664e;
  --apofarm-fill-soil-deep: #5f4737;
  /* 그 밖의 색 */
  --apofarm-madness: #7a4f9a;
  --apofarm-stage-a: #e8e7d7;
  --apofarm-stage-b: #dad8c9;
  --apofarm-warn-bg: #f4e5c9;
  --apofarm-warn-text: #835b20;
}

:root[data-theme="dark"] {
  color-scheme: dark only;
  --apofarm-ink: #ded5c1;
  --apofarm-ink-soft: #b5c0bd;
  --apofarm-ink-faint: #94a3a3;
  --apofarm-paper: #09131a;
  --apofarm-paper-deep: #050d12;
  --apofarm-surface: #0e1a21;
  --apofarm-surface-high: #14232a;
  --apofarm-line: #263941;
  --apofarm-line-dark: #4b616a;
  --apofarm-moss: #7fbdb4;
  --apofarm-moss-deep: #a8d8d0;
  --apofarm-moss-pale: #132a30;
  --apofarm-soil: #c9a07f;
  --apofarm-soil-deep: #e0c3a8;
  --apofarm-soil-pale: #2b231d;
  --apofarm-water: #7fb3c8;
  --apofarm-water-pale: #0f242b;
  --apofarm-danger: #e08a6e;
  --apofarm-danger-pale: #3a231d;
  --apofarm-world: #d0a867;
  --apofarm-favorite: #d5ae66;
  --apofarm-shadow-soft: 1px 2px 0 rgb(0 0 0 / 35%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(0 0 0 / 55%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft: #dfe6e3;
  --apofarm-on-dark-line: #9fb3b3;
  --apofarm-on-dark-track: #3e5a62;
  --apofarm-on-dark-divider: #3e5a62;
  --apofarm-nav-bg: #071117;
  --apofarm-scrim: rgb(0 0 0 / 62%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(0 0 0 / 40%);
  --apofarm-health: #d4796a;
  --apofarm-plot-bg: #2c2722;
  --apofarm-plot-line: #54493d;
  --apofarm-plot-shadow: 2px 3px 0 rgb(0 0 0 / 30%);
  --apofarm-plot-tilled: #302a23;
  --apofarm-plot-divider: rgb(255 255 255 / 12%);
  --apofarm-plot-detail-bg: rgb(0 0 0 / 25%);
  --apofarm-plot-withered-bg: #4a3436;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #e3a9ad;
  --apofarm-plot-diseased-line: #c68a4a;
  --apofarm-plot-diseased-glow: rgba(198,138,74,.35);
  --apofarm-plot-diseased-text: #e0a465;
  --apofarm-plot-bare: #101f25;
  --apofarm-plot-ready: #d9a441;
  --apofarm-plot-ready-line: #f0c060;
  --apofarm-fill-moss: #3a7673;
  --apofarm-fill-moss-deep: #285a5a;
  --apofarm-fill-soil: #8f6a4f;
  --apofarm-fill-soil-deep: #6f503b;
  --apofarm-madness: #c79bea;
  --apofarm-stage-a: #13252c;
  --apofarm-stage-b: #0e1c22;
  --apofarm-warn-bg: #3a3220;
  --apofarm-warn-text: #e0c17f;
}
:root[data-theme="eclipse"] {
  color-scheme: dark only;
  --apofarm-ink:#e1d5cd;
  --apofarm-ink-soft:#c4bece;
  --apofarm-ink-faint:#92838e;
  --apofarm-paper:#16111e;
  --apofarm-paper-deep:#0f0b16;
  --apofarm-surface:#1f1929;
  --apofarm-surface-high:#30293e;
  --apofarm-line:#494052;
  --apofarm-line-dark:#625773;
  --apofarm-moss:#8d9d83;
  --apofarm-moss-deep:#aab99f;
  --apofarm-moss-pale:#262b27;
  --apofarm-soil:#c3a38a;
  --apofarm-soil-deep:#dcc3ae;
  --apofarm-soil-pale:#3b3235;
  --apofarm-water:#9aa6cf;
  --apofarm-water-pale:#262a40;
  --apofarm-danger:#d98a85;
  --apofarm-danger-pale:#3a2530;
  --apofarm-world:#b7a3d6;
  --apofarm-favorite:#caa98c;
  --apofarm-shadow-soft: 1px 2px 0 rgb(0 0 0 / 35%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(0 0 0 / 55%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft:#e1d5cd;
  --apofarm-on-dark-line:#92838e;
  --apofarm-on-dark-track:#494052;
  --apofarm-on-dark-divider:#494052;
  --apofarm-nav-bg:#120e19;
  --apofarm-scrim: rgb(0 0 0 / 62%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(0 0 0 / 40%);
  --apofarm-health:#cc7a80;
  --apofarm-plot-bg:#3b3235;
  --apofarm-plot-line:#5c4f55;
  --apofarm-plot-shadow: 2px 3px 0 rgb(0 0 0 / 30%);
  --apofarm-plot-tilled:#403539;
  --apofarm-plot-divider: rgb(255 255 255 / 12%);
  --apofarm-plot-detail-bg: rgb(0 0 0 / 25%);
  --apofarm-plot-withered-bg: #4a3436;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #e3a9ad;
  --apofarm-plot-diseased-line: #c68a4a;
  --apofarm-plot-diseased-glow: rgba(198,138,74,.35);
  --apofarm-plot-diseased-text: #e0a465;
  --apofarm-plot-bare:#28302b;
  --apofarm-plot-ready: #c9a24a;
  --apofarm-plot-ready-line: #e3bf6a;
  --apofarm-fill-moss:#5d6c56;
  --apofarm-fill-moss-deep:#46543f;
  --apofarm-fill-soil:#85665a;
  --apofarm-fill-soil-deep:#684e45;
  --apofarm-madness:#c79bea;
  --apofarm-stage-a:#2a2237;
  --apofarm-stage-b:#1f1929;
  --apofarm-warn-bg: #3a3220;
  --apofarm-warn-text: #e0c17f;
}

:root[data-theme="lantern"] {
  color-scheme: dark only;
  --apofarm-ink:#cdc3af;
  --apofarm-ink-soft:#aba28f;
  --apofarm-ink-faint:#8a8270;
  --apofarm-paper:#100e0b;
  --apofarm-paper-deep:#0a0907;
  --apofarm-surface:#191510;
  --apofarm-surface-high:#2b251d;
  --apofarm-line:#433c30;
  --apofarm-line-dark:#6a604d;
  --apofarm-moss:#d6b477;
  --apofarm-moss-deep:#ece3d0;
  --apofarm-moss-pale:#33291a;
  --apofarm-soil:#c49a72;
  --apofarm-soil-deep:#dcb994;
  --apofarm-soil-pale:#3a2d22;
  --apofarm-water:#8fb0b0;
  --apofarm-water-pale:#202f2f;
  --apofarm-danger:#d68a6c;
  --apofarm-danger-pale:#3c2619;
  --apofarm-world:#d6b477;
  --apofarm-favorite:#d6b477;
  --apofarm-shadow-soft: 1px 2px 0 rgb(0 0 0 / 35%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(0 0 0 / 55%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft:#ece3d0;
  --apofarm-on-dark-line:#aba28f;
  --apofarm-on-dark-track:#51493b;
  --apofarm-on-dark-divider:#51493b;
  --apofarm-nav-bg:#0d0b09;
  --apofarm-scrim: rgb(0 0 0 / 62%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(0 0 0 / 40%);
  --apofarm-health:#cf7966;
  --apofarm-plot-bg:#3b2f24;
  --apofarm-plot-line:#6b5a3e;
  --apofarm-plot-shadow: 2px 3px 0 rgb(0 0 0 / 30%);
  --apofarm-plot-tilled:#40322a;
  --apofarm-plot-divider: rgb(255 255 255 / 12%);
  --apofarm-plot-detail-bg: rgb(0 0 0 / 25%);
  --apofarm-plot-withered-bg: #4a3436;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #e3a9ad;
  --apofarm-plot-diseased-line: #c68a4a;
  --apofarm-plot-diseased-glow: rgba(198,138,74,.35);
  --apofarm-plot-diseased-text: #e0a465;
  --apofarm-plot-bare:#252b1f;
  --apofarm-plot-ready: #e07b39;
  --apofarm-plot-ready-line: #f09a58;
  --apofarm-fill-moss:#7a6330;
  --apofarm-fill-moss-deep:#5c4a24;
  --apofarm-fill-soil:#8f6a4f;
  --apofarm-fill-soil-deep:#6f503b;
  --apofarm-madness:#c79bea;
  --apofarm-stage-a:#221c15;
  --apofarm-stage-b:#19150f;
  --apofarm-warn-bg: #3a3220;
  --apofarm-warn-text: #e0c17f;
}

:root[data-theme="ash"] {
  color-scheme: dark only;
  --apofarm-ink:#e6e9ee;
  --apofarm-ink-soft:#c2c9d2;
  --apofarm-ink-faint:#8c9185;
  --apofarm-paper:#14181e;
  --apofarm-paper-deep:#0d1015;
  --apofarm-surface:#1e242c;
  --apofarm-surface-high:#2c3440;
  --apofarm-line:#444d5c;
  --apofarm-line-dark:#5b6677;
  --apofarm-moss:#b0c69d;
  --apofarm-moss-deep:#cadbbb;
  --apofarm-moss-pale:#25302a;
  --apofarm-soil:#c3a58a;
  --apofarm-soil-deep:#dcc4ae;
  --apofarm-soil-pale:#35302b;
  --apofarm-water:#86aac4;
  --apofarm-water-pale:#1f2f3a;
  --apofarm-danger:#dd8e78;
  --apofarm-danger-pale:#3a2824;
  --apofarm-world:#87a9d0;
  --apofarm-favorite:#c9ad78;
  --apofarm-shadow-soft: 1px 2px 0 rgb(0 0 0 / 35%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(0 0 0 / 55%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft:#e6e9ee;
  --apofarm-on-dark-line:#8c9185;
  --apofarm-on-dark-track:#444d5c;
  --apofarm-on-dark-divider:#444d5c;
  --apofarm-nav-bg:#10141a;
  --apofarm-scrim: rgb(0 0 0 / 62%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(0 0 0 / 40%);
  --apofarm-health:#cf7c72;
  --apofarm-plot-bg:#3a342d;
  --apofarm-plot-line:#58504a;
  --apofarm-plot-shadow: 2px 3px 0 rgb(0 0 0 / 30%);
  --apofarm-plot-tilled:#3f3830;
  --apofarm-plot-divider: rgb(255 255 255 / 12%);
  --apofarm-plot-detail-bg: rgb(0 0 0 / 25%);
  --apofarm-plot-withered-bg: #4a3436;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #e3a9ad;
  --apofarm-plot-diseased-line: #c68a4a;
  --apofarm-plot-diseased-glow: rgba(198,138,74,.35);
  --apofarm-plot-diseased-text: #e0a465;
  --apofarm-plot-bare:#2b3730;
  --apofarm-plot-ready: #d8a24a;
  --apofarm-plot-ready-line: #efc070;
  --apofarm-fill-moss:#485f3e;
  --apofarm-fill-moss-deep:#364a2f;
  --apofarm-fill-soil:#85684f;
  --apofarm-fill-soil-deep:#6a503c;
  --apofarm-madness:#bea6e0;
  --apofarm-stage-a:#262e38;
  --apofarm-stage-b:#1d232b;
  --apofarm-warn-bg: #3a3220;
  --apofarm-warn-text: #e0c17f;
}

:root[data-theme="greenhouse"] {
  color-scheme: light only;
  --apofarm-ink:#263f3e;
  --apofarm-ink-soft:#5b716d;
  --apofarm-ink-faint:#5f7571;
  --apofarm-paper:#dfe8e3;
  --apofarm-paper-deep:#cdd9d3;
  --apofarm-surface:#f2f6f2;
  --apofarm-surface-high:#f9fbf9;
  --apofarm-line:#bccdc6;
  --apofarm-line-dark:#93a8a1;
  --apofarm-moss:#377c69;
  --apofarm-moss-deep:#265a4b;
  --apofarm-moss-pale:#c2d1cb;
  --apofarm-soil:#746b58;
  --apofarm-soil-deep:#554e3f;
  --apofarm-soil-pale:#ddd3bf;
  --apofarm-water:#4f8590;
  --apofarm-water-pale:#d3e4e3;
  --apofarm-danger: #a35c42;
  --apofarm-danger-pale: #f1ddd4;
  --apofarm-world: #ae8648;
  --apofarm-favorite: #8c6a33;
  --apofarm-shadow-soft: 1px 2px 0 rgb(85 62 44 / 12%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(48 53 43 / 18%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft:#e6f1ec;
  --apofarm-on-dark-line:#b6d3c9;
  --apofarm-on-dark-track:#5b9a87;
  --apofarm-on-dark-divider:#5b9a87;
  --apofarm-nav-bg:#d4e0da;
  --apofarm-scrim: rgb(26 35 28 / 58%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(38 51 43 / 8%);
  --apofarm-health: #9f5749;
  --apofarm-plot-bg:#e3d9c4;
  --apofarm-plot-line:#a99f86;
  --apofarm-plot-shadow: 2px 3px 0 rgb(94 72 51 / 10%);
  --apofarm-plot-tilled:#d9cdb4;
  --apofarm-plot-divider: rgb(111 87 67 / 25%);
  --apofarm-plot-detail-bg: rgb(255 255 255 / 35%);
  --apofarm-plot-withered-bg: #cbb0b2;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #68262b;
  --apofarm-plot-diseased-line: #a0672b;
  --apofarm-plot-diseased-glow: rgba(160,103,43,.35);
  --apofarm-plot-diseased-text: #8a4a12;
  --apofarm-plot-bare:#cfdad4;
  --apofarm-plot-ready: #e6b93c;
  --apofarm-plot-ready-line: #c58a12;
  --apofarm-fill-moss:#377c69;
  --apofarm-fill-moss-deep:#2d6a58;
  --apofarm-fill-soil:#746b58;
  --apofarm-fill-soil-deep:#554e3f;
  --apofarm-madness: #7a4f9a;
  --apofarm-stage-a:#cddad4;
  --apofarm-stage-b:#c2d1cb;
  --apofarm-warn-bg: #f4e5c9;
  --apofarm-warn-text: #835b20;
}

:root[data-theme="dusk"] {
  color-scheme: light only;
  --apofarm-ink:#4d3a42;
  --apofarm-ink-soft:#7a616a;
  --apofarm-ink-faint:#7a616a;
  --apofarm-paper:#ebe5db;
  --apofarm-paper-deep:#ded2c9;
  --apofarm-surface:#f4f2e6;
  --apofarm-surface-high:#faf9f1;
  --apofarm-line:#d6c6bd;
  --apofarm-line-dark:#ab949a;
  --apofarm-moss:#5a6e54;
  --apofarm-moss-deep:#44563f;
  --apofarm-moss-pale:#d9c5ba;
  --apofarm-soil:#8a6458;
  --apofarm-soil-deep:#64463e;
  --apofarm-soil-pale:#e5cebb;
  --apofarm-water:#5f8591;
  --apofarm-water-pale:#dde5e3;
  --apofarm-danger: #a35c42;
  --apofarm-danger-pale: #f1ddd4;
  --apofarm-world: #ae8648;
  --apofarm-favorite: #8c6a33;
  --apofarm-shadow-soft: 1px 2px 0 rgb(85 62 44 / 12%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(48 53 43 / 18%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft:#eef0e6;
  --apofarm-on-dark-line:#c3d0bd;
  --apofarm-on-dark-track:#7d9376;
  --apofarm-on-dark-divider:#7d9376;
  --apofarm-nav-bg:#e3d9cf;
  --apofarm-scrim: rgb(26 35 28 / 58%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(38 51 43 / 8%);
  --apofarm-health: #9f5749;
  --apofarm-plot-bg:#e5ceba;
  --apofarm-plot-line:#b79f90;
  --apofarm-plot-shadow: 2px 3px 0 rgb(94 72 51 / 10%);
  --apofarm-plot-tilled:#dbc2ae;
  --apofarm-plot-divider: rgb(111 87 67 / 25%);
  --apofarm-plot-detail-bg: rgb(255 255 255 / 35%);
  --apofarm-plot-withered-bg: #cbb0b2;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #68262b;
  --apofarm-plot-diseased-line: #a0672b;
  --apofarm-plot-diseased-glow: rgba(160,103,43,.35);
  --apofarm-plot-diseased-text: #8a4a12;
  --apofarm-plot-bare:#ddd4c6;
  --apofarm-plot-ready: #dd9a3a;
  --apofarm-plot-ready-line: #b8741a;
  --apofarm-fill-moss:#5d7257;
  --apofarm-fill-moss-deep:#485a43;
  --apofarm-fill-soil:#8a6458;
  --apofarm-fill-soil-deep:#64463e;
  --apofarm-madness: #7a4f9a;
  --apofarm-stage-a:#e0cdc3;
  --apofarm-stage-b:#d9c5ba;
  --apofarm-warn-bg: #f4e5c9;
  --apofarm-warn-text: #835b20;
}

:root[data-theme="lilac"] {
  color-scheme: light only;
  --apofarm-ink:#403448;
  --apofarm-ink-soft:#726577;
  --apofarm-ink-faint:#706476;
  --apofarm-paper:#e7e1ea;
  --apofarm-paper-deep:#dad1de;
  --apofarm-surface:#f4f1f6;
  --apofarm-surface-high:#faf8fb;
  --apofarm-line:#d3c9d7;
  --apofarm-line-dark:#a69aa9;
  --apofarm-moss:#79618d;
  --apofarm-moss-deep:#5c4770;
  --apofarm-moss-pale:#d1c7d5;
  --apofarm-soil:#59654c;
  --apofarm-soil-deep:#444e3a;
  --apofarm-soil-pale:#e3d6c6;
  --apofarm-water:#5f84a0;
  --apofarm-water-pale:#dde4ec;
  --apofarm-danger: #a35c42;
  --apofarm-danger-pale: #f1ddd4;
  --apofarm-world: #ae8648;
  --apofarm-favorite:#7f8f6f;
  --apofarm-shadow-soft: 1px 2px 0 rgb(85 62 44 / 12%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(48 53 43 / 18%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft:#eee7f2;
  --apofarm-on-dark-line:#c9bcd6;
  --apofarm-on-dark-track:#8b74a0;
  --apofarm-on-dark-divider:#8b74a0;
  --apofarm-nav-bg:#e0d8e4;
  --apofarm-scrim: rgb(26 35 28 / 58%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(38 51 43 / 8%);
  --apofarm-health: #9f5749;
  --apofarm-plot-bg:#e8d9c6;
  --apofarm-plot-line:#bba78f;
  --apofarm-plot-shadow: 2px 3px 0 rgb(94 72 51 / 10%);
  --apofarm-plot-tilled:#dfcdb6;
  --apofarm-plot-divider: rgb(111 87 67 / 25%);
  --apofarm-plot-detail-bg: rgb(255 255 255 / 35%);
  --apofarm-plot-withered-bg: #cbb0b2;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #68262b;
  --apofarm-plot-diseased-line: #a0672b;
  --apofarm-plot-diseased-glow: rgba(160,103,43,.35);
  --apofarm-plot-diseased-text: #8a4a12;
  --apofarm-plot-bare:#dcd5de;
  --apofarm-plot-ready: #e0b43c;
  --apofarm-plot-ready-line: #b88a10;
  --apofarm-fill-moss:#79618d;
  --apofarm-fill-moss-deep:#5c4770;
  --apofarm-fill-soil:#59654c;
  --apofarm-fill-soil-deep:#444e3a;
  --apofarm-madness: #7a4f9a;
  --apofarm-stage-a:#dccfe0;
  --apofarm-stage-b:#d1c7d5;
  --apofarm-warn-bg: #f4e5c9;
  --apofarm-warn-text: #835b20;
}

:root[data-theme="glass"] {
  color-scheme: light only;
  --apofarm-ink:#28364d;
  --apofarm-ink-soft:#5f6676;
  --apofarm-ink-faint:#646b7b;
  --apofarm-paper:#e3e7eb;
  --apofarm-paper-deep:#d5dbe2;
  --apofarm-surface:#f3f5f6;
  --apofarm-surface-high:#f9fafb;
  --apofarm-line:#cecbbf;
  --apofarm-line-dark:#9da3ad;
  --apofarm-moss:#365ba2;
  --apofarm-moss-deep:#284a86;
  --apofarm-moss-pale:#d3dcec;
  --apofarm-soil:#66704d;
  --apofarm-soil-deep:#4e573a;
  --apofarm-soil-pale:#e3dfd0;
  --apofarm-water:#4f7fa6;
  --apofarm-water-pale:#d8e4ee;
  --apofarm-danger: #a35c42;
  --apofarm-danger-pale: #f1ddd4;
  --apofarm-world: #ae8648;
  --apofarm-favorite:#7d8760;
  --apofarm-shadow-soft: 1px 2px 0 rgb(85 62 44 / 12%);
  --apofarm-shadow-overlay: 0 18px 50px rgb(48 53 43 / 18%);
  --apofarm-on-dark: #fff;
  --apofarm-on-dark-soft:#e8eef8;
  --apofarm-on-dark-line:#b5c6e4;
  --apofarm-on-dark-track:#6f8cc0;
  --apofarm-on-dark-divider:#6f8cc0;
  --apofarm-nav-bg:#dde2e8;
  --apofarm-scrim: rgb(26 35 28 / 58%);
  --apofarm-shadow-raise: 0 -5px 20px rgb(38 51 43 / 8%);
  --apofarm-health: #9f5749;
  --apofarm-plot-bg:#e6e1d2;
  --apofarm-plot-line:#b9b49f;
  --apofarm-plot-shadow: 2px 3px 0 rgb(94 72 51 / 10%);
  --apofarm-plot-tilled:#dcd7c5;
  --apofarm-plot-divider: rgb(111 87 67 / 25%);
  --apofarm-plot-detail-bg: rgb(255 255 255 / 35%);
  --apofarm-plot-withered-bg: #cbb0b2;
  --apofarm-plot-withered-line: #8b555b;
  --apofarm-plot-withered-text: #68262b;
  --apofarm-plot-diseased-line: #a0672b;
  --apofarm-plot-diseased-glow: rgba(160,103,43,.35);
  --apofarm-plot-diseased-text: #8a4a12;
  --apofarm-plot-bare:#dfe3d2;
  --apofarm-plot-ready: #e8a23a;
  --apofarm-plot-ready-line: #bd7410;
  --apofarm-fill-moss:#365ba2;
  --apofarm-fill-moss-deep:#284a86;
  --apofarm-fill-soil:#66704d;
  --apofarm-fill-soil-deep:#4e573a;
  --apofarm-madness: #7a4f9a;
  --apofarm-stage-a:#d6deea;
  --apofarm-stage-b:#cbd5e6;
  --apofarm-warn-bg: #f4e5c9;
  --apofarm-warn-text: #835b20;
}

/* 휴대폰: 보조 글자 단계를 한 단계씩 키운다(11→12, 12→13, 13→14, 14→15px). 설정의 글자 크기(작게·크게)는 그 위에 곱해진다. */
@media (max-width: 640px) {
  :root {
    --apofarm-text-2xs: .75rem;
    --apofarm-text-xs: .8125rem;
    --apofarm-text-sm: .875rem;
    --apofarm-text-md: .9375rem;
  }
}

/* src/player-ui/player.css */
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}button,[role=button],a,label,summary{touch-action:manipulation}
html,body{margin:0;min-height:100%;background:var(--apofarm-paper);color:var(--apofarm-ink);font-family:var(--apofarm-font-body);word-break:keep-all;overflow-wrap:anywhere}
button,input,select{font:inherit}
button{cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.42}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--apofarm-moss);outline-offset:2px}
a{color:var(--apofarm-moss-deep)}
h1,h2,h3,p{margin-top:0}
h1,h2{font-family:var(--apofarm-font-display);font-weight:700}
h1{font-size:clamp(2rem,3vw,3.1rem);line-height:1.2}
h2{font-size:var(--apofarm-text-2xl)}
small,.small-note{color:var(--apofarm-ink-soft)}
.small-note{font-size:var(--apofarm-text-sm);line-height:1.65}
.eyebrow,.section-number{font-size:var(--apofarm-text-xs);font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--apofarm-moss)}
.example-tag {
  display:inline-block;
  margin-left:.35rem;
  padding:2px 5px;
  border:1px solid var(--apofarm-line-dark);
  font-family:var(--apofarm-font-body);
  font-size:var(--apofarm-text-2xs);
  letter-spacing:0;
  white-space:nowrap;
  color:var(--apofarm-ink-soft);
  vertical-align:middle;
}
.brand{display:flex;align-items:center;gap:.65rem;font-family:var(--apofarm-font-body);font-weight:700;letter-spacing:.12em;font-size:var(--apofarm-text-lg)}
.brand-logo{display:block;height:30px;width:auto}
.brand-logo-white{display:none}
:root[data-theme="dark"] .brand-logo-black,:root[data-theme="eclipse"] .brand-logo-black,:root[data-theme="lantern"] .brand-logo-black,:root[data-theme="ash"] .brand-logo-black{display:none}
:root[data-theme="dark"] .brand-logo-white,:root[data-theme="eclipse"] .brand-logo-white,:root[data-theme="lantern"] .brand-logo-white,:root[data-theme="ash"] .brand-logo-white{display:block}
.brand-mark{display:grid;place-items:center;width:31px;height:31px;border:1px solid currentColor;border-radius:50%;font-size:var(--apofarm-text-2xl);line-height:1}
.button {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:.4rem;
  min-height:42px;
  padding:10px 14px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-surface);
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-md);
  font-weight:700;
  text-decoration:none;
}
.button:hover:not(:disabled){border-color:var(--apofarm-moss);background:var(--apofarm-moss-pale)}
.button.primary{background:var(--apofarm-fill-moss-deep);border-color:var(--apofarm-moss-deep);color:var(--apofarm-on-dark)}
.button.primary:hover:not(:disabled){background:var(--apofarm-fill-moss)}
/* 못 누르는 강조 단추는 진한 초록이면 눌러야 할 것처럼 보여서 일반 꺼진 단추와 같은 모양으로 둔다. */
.button.primary:disabled{background:transparent;border-color:var(--apofarm-line-dark);color:var(--apofarm-ink)}
.button.subtle{background:transparent}
.text-button{padding:2px 0;border:0;background:none;color:var(--apofarm-moss-deep);font-weight:700;font-size:var(--apofarm-text-sm)}
.meter{width:100%;height:7px;background:var(--apofarm-paper-deep);overflow:hidden}
.meter span{display:block;height:100%;background:var(--apofarm-fill-moss)}
.meter.water span{background:var(--apofarm-water)}
.meter.world span{background:var(--apofarm-world)}
.player-shell{display:grid;grid-template-columns:224px minmax(0,1fr);min-height:100vh}
.nav-links{display:grid;gap:4px;padding-top:30px}
.nav-links button {
  display:flex;
  align-items:center;
  gap:14px;
  width:100%;
  padding:13px 15px;
  background:transparent;
  border:0;
  border-left:3px solid transparent;
  text-align:left;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-md);
}
.nav-links button span{font-size:var(--apofarm-text-xl);width:20px;text-align:center}
.nav-links button.active{border-left-color:var(--apofarm-moss);background:var(--apofarm-moss-pale);color:var(--apofarm-moss-deep);font-weight:700}
.side-bottom{margin-top:auto;display:grid;gap:15px}
.season-note{padding:16px 12px;border-top:1px solid var(--apofarm-line);border-bottom:1px solid var(--apofarm-line)}
.season-note strong,.season-note p{display:block;margin:8px 0 0;font-size:var(--apofarm-text-md)}
.season-note p{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.profile-note{display:flex;align-items:center;gap:9px}
.profile-note small{display:block;font-size:var(--apofarm-text-xs)}
.small-avatar {
  display:grid;
  place-items:center;
  width:38px;
  height:38px;
  background:var(--apofarm-soil-pale);
  border:1px solid var(--apofarm-soil);
  border-radius:var(--apofarm-radius-panel);
  font-size:var(--apofarm-text-xl);
}
.side-bottom a{font-size:var(--apofarm-text-xs)}
.player-main{min-width:0}
.world-clock{display:flex;align-items:center;gap:12px}
.icon-ring{display:grid;place-items:center;width:38px;height:38px;border:1px solid var(--apofarm-world);border-radius:50%;color:var(--apofarm-world);font-size:var(--apofarm-text-3xl)}
.world-clock small,.world-clock strong{display:block}
.world-clock small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.world-clock strong{margin-top:4px;font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-lg);font-variant-numeric:tabular-nums}
.world-target>div:first-child{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:var(--apofarm-text-xs)}
.world-target strong{font-size:var(--apofarm-text-lg)}
.world-target .meter{margin:7px 0}
.world-target small{font-size:var(--apofarm-text-xs)}
.mobile-nav{display:none}
.screen{padding:36px clamp(24px,4vw,60px) 70px}
.page-heading{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;margin-bottom:31px}
.page-heading h1{margin:8px 0}
.page-heading p{margin:0;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-md);line-height:1.7}
.heading-fact{padding:15px 17px;background:var(--apofarm-surface);border-left:2px solid var(--apofarm-moss);font-size:var(--apofarm-text-sm);white-space:nowrap}
.heading-fact b{display:block;margin-top:4px;font-size:var(--apofarm-text-lg)}
.farm-layout{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:27px;align-items:start}
.field-area{min-width:0;background:var(--apofarm-surface);border:1px solid var(--apofarm-line);box-shadow:var(--apofarm-shadow-soft)}
.section-heading{display:flex;justify-content:space-between;align-items:end;gap:12px;padding:24px 25px 14px}
.section-heading h2{margin:4px 0 0}
.section-heading h2 small{font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.section-heading>span{font-size:var(--apofarm-text-sm);color:var(--apofarm-ink-soft)}
.field-legend{display:flex;gap:17px;padding:0 25px 18px;border-bottom:1px solid var(--apofarm-line);font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.plot-grid {
  display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:12px;
  padding:20px 25px 26px;
  background:linear-gradient(135deg,color-mix(in srgb,var(--apofarm-soil) 5%,transparent),transparent 40%);
}
.plot-card{min-width:0;background:var(--apofarm-plot-bg);border:1px solid var(--apofarm-plot-line);box-shadow:var(--apofarm-plot-shadow)}
.plot-card:nth-child(3n){transform:rotate(.28deg)}
.plot-card:nth-child(4n){transform:rotate(-.35deg)}
.plot-card.selected{outline:2px solid var(--apofarm-moss);outline-offset:1px}
.plot-select{display:flex;flex-direction:column;width:100%;min-height:158px;padding:9px 9px 6px;border:0;background:transparent;color:var(--apofarm-ink);text-align:left}
.plot-top{display:flex;justify-content:space-between;width:100%;font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.plot-top b{font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-md);color:var(--apofarm-ink)}
.plot-select>strong{display:block;overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;font-size:var(--apofarm-text-sm)}
.state-withered .plot-card,.state-withered{color:var(--apofarm-danger)}
.action-desk{border-top:1px solid var(--apofarm-line);padding:17px 25px 23px;background:var(--apofarm-surface-high)}
.action-summary{display:flex;align-items:center;gap:15px;margin-bottom:13px;font-size:var(--apofarm-text-xs)}
.action-summary span{margin-left:auto;color:var(--apofarm-ink-soft)}
.crop-pick{display:flex;align-items:center;gap:12px;margin-bottom:13px;font-size:var(--apofarm-text-sm)}
/* 드롭박스 공용 컴포넌트(select-field.js): 씨앗 고르기와 같은 모양. 화면별 select 규칙을 따로 만들지 않는다. */
.ui-select{display:flex;align-items:center;gap:12px;min-width:0;font-size:var(--apofarm-text-sm)}
.ui-select-label{flex:none}
.ui-select-stack{display:grid;align-content:start;gap:8px}
.ui-select-control {
  min-width:180px;
  max-width:100%;
  min-height:38px;
  padding:8px 10px;
  background:var(--apofarm-surface);
  border:1px solid var(--apofarm-line);
  border-radius:0;
  color:var(--apofarm-ink);
  font:inherit;
  font-size:var(--apofarm-text-sm);
}
.ui-select-stack .ui-select-control{width:100%;min-width:0}
.ui-select-control:disabled{opacity:.6;cursor:not-allowed}
/* 텍스트 인풋 공용 모양: 드롭박스(.ui-select-control)와 같은 높이·테두리. :where라 화면별 크기 규칙이 그대로 이긴다. 새 화면은 따로 꾸미지 않는다. */
:where(input:not([type]),
input[type=text],
input[type=search],
input[type=number],
input[type=email],
input[type=password],
input[type=url],
input[type=tel],
textarea,
.ui-input) {
  box-sizing:border-box;
  max-width:100%;
  min-height:38px;
  padding:8px 10px;
  background:var(--apofarm-surface);
  border:1px solid var(--apofarm-line);
  border-radius:0;
  color:var(--apofarm-ink);
  font:inherit;
  font-size:var(--apofarm-text-sm);
}
:where(input[type=search]){-webkit-appearance:none;appearance:none}
:where(input,textarea)::placeholder{color:var(--apofarm-ink-soft);opacity:.75}
:where(input,textarea):disabled{opacity:.6;cursor:not-allowed}
.ui-select-compact{display:inline-flex;gap:4px;vertical-align:middle}
.ui-check {
  display:inline-flex;
  align-items:center;
  gap:7px;
  min-height:38px;
  padding:8px 10px;
  background:var(--apofarm-surface);
  border:1px solid var(--apofarm-line);
  border-radius:0;
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-sm);
  cursor:pointer;
  user-select:none;
}
.ui-check input{width:15px;height:15px;margin:0;accent-color:var(--apofarm-moss-deep);cursor:pointer}
.ui-check.is-checked{border-color:var(--apofarm-moss-deep)}
.ui-check.is-disabled{opacity:.6;cursor:not-allowed}
.ui-check.is-disabled input{cursor:not-allowed}
.ui-select-compact .ui-select-control{min-width:0;max-width:150px;min-height:26px;padding:1px 4px}
.farm-actions,.support-actions{display:flex;flex-wrap:wrap;gap:7px}
/* 갈아엎기: 되돌릴 수 없는 일이라 붉은색으로 오른쪽 끝에 둔다(개인·공동 밭) */
.farm-actions .button.clear-action{margin-left:auto;border-color:var(--apofarm-danger);color:var(--apofarm-danger)}
.farm-actions .button.clear-action:hover:not(:disabled){background:var(--apofarm-danger-pale)}
.support-actions{margin-top:12px;padding-top:12px;border-top:1px solid var(--apofarm-line)}
:is(.farm-screen,.guild-field) .support-actions:empty{display:none}
.farm-rail{display:grid;gap:17px}
.rail-section{padding:17px 0 20px;border-bottom:1px solid var(--apofarm-line)}
.rail-section:first-child{padding-top:0}
.water-value{display:block;margin:8px 0;font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-4xl)}
.water-value small{font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-md)}
.rail-section p{margin:10px 0 0;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs);line-height:1.6}
.rail-title{display:flex;justify-content:space-between}
.favorite-row{display:grid;grid-template-columns:1fr auto;gap:4px;margin-top:14px;font-size:var(--apofarm-text-xs)}
.favorite-row b{font-variant-numeric:tabular-nums}
.favorite-row .meter{grid-column:1/-1}
.world-note{border-left:2px solid var(--apofarm-world);padding-left:14px}
.content-screen{max-width:1300px;margin:auto}
.resource-controls{display:flex;justify-content:space-between;align-items:end;gap:18px;margin-top:30px}
.tab-strip,.filter-strip{display:flex;gap:0}
.tab-strip button,.filter-strip button {
  padding:10px 15px;
  background:transparent;
  border:0;
  border-bottom:2px solid var(--apofarm-line-dark);
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-sm);
}
.tab-strip button.active,.filter-strip button.active{border-bottom-color:var(--apofarm-moss);color:var(--apofarm-moss-deep);font-weight:700}
.resource-controls label,.shipment-form label{display:grid;gap:6px;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.resource-controls input,.shipment-form input,.field-label input {
  min-height:40px;
  padding:8px 11px;
  background:var(--apofarm-surface-high);
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  color:var(--apofarm-ink);
}
.resource-controls input{width:min(300px,35vw)}
.filter-strip{margin:16px 0}
.resource-table{border-top:2px solid var(--apofarm-ink);background:var(--apofarm-surface)}
.resource-head,.resource-row{display:grid;grid-template-columns:65px minmax(160px,1fr) 120px 120px;align-items:center;gap:10px;padding:12px 19px;border-bottom:1px solid var(--apofarm-line)}
.resource-head{background:var(--apofarm-paper-deep);font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.resource-row{font-size:var(--apofarm-text-sm)}
.resource-row>span{color:var(--apofarm-ink-soft)}
.resource-row b{text-align:right;font-variant-numeric:tabular-nums}
.star-button{width:30px;height:30px;border:0;background:transparent;color:var(--apofarm-ink-faint);font-size:var(--apofarm-text-xl)}
.star-button.on{color:var(--apofarm-favorite)}
.empty-note{padding:30px;color:var(--apofarm-ink-soft)}
/* 그림 전용 색(배너·탐험 장면·캐릭터 얼굴·머리·옷): 화면 색 토큰과 따로 둔다. */
.shipment-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:24px}
.shipment-form,.world-ledger{padding:25px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface)}
.shipment-form h2{margin:7px 0}
.shipment-form p,.world-ledger p{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-sm);line-height:1.6}
.shipment-form label{margin:18px 0}
.shipment-form input{max-width:390px}
.shipment-estimate {
  display:flex;
  align-items:center;
  gap:8px;
  margin:22px 0;
  padding:17px;
  border-top:1px solid var(--apofarm-line);
  border-bottom:1px solid var(--apofarm-line);
  font-size:var(--apofarm-text-md);
}
.shipment-estimate strong{margin-left:auto;font-size:var(--apofarm-text-2xl)}
.world-ledger{border-top:3px solid var(--apofarm-world)}
.world-ledger>strong{display:block;margin:20px 0 12px;font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-4xl)}
.world-ledger>strong small{font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-md)}
.ledger-event{display:grid;gap:5px;padding:12px 0;border-top:1px solid var(--apofarm-line);font-size:var(--apofarm-text-sm)}
.ledger-event span{color:var(--apofarm-ink-soft)}
.explore-layout{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(280px,.8fr);gap:28px}
.story-sheet{padding:26px;background:var(--apofarm-surface);border:1px solid var(--apofarm-line)}
.story-sheet p{font-size:var(--apofarm-text-base);line-height:2}
.explore-side{display:grid;align-content:start;gap:19px}
.party-note,.choice-list{padding:20px;background:var(--apofarm-surface);border:1px solid var(--apofarm-line)}
.party-note p{display:flex;justify-content:space-between;margin:12px 0;font-size:var(--apofarm-text-sm)}
.party-note small{font-size:var(--apofarm-text-xs);line-height:1.6}
.online-dot{width:7px;height:7px;border-radius:50%;background:var(--apofarm-fill-moss)}
.choice-list{display:grid;gap:10px}
.explore-choice{display:grid;gap:6px;padding:14px;text-align:left;background:transparent;border:1px solid var(--apofarm-line);color:var(--apofarm-ink)}
.explore-choice.active{border-color:var(--apofarm-moss);background:var(--apofarm-moss-pale)}
.explore-choice small{font-size:var(--apofarm-text-xs)}
.explore-choice em{font-size:var(--apofarm-text-xs);color:var(--apofarm-moss-deep)}
.choice-actions{display:flex;gap:8px}
.setup-page{max-width:1410px;margin:auto;padding:28px clamp(20px,4vw,60px) 70px}
.setup-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:24px;border-bottom:1px solid var(--apofarm-line);font-size:var(--apofarm-text-sm)}
.setup-intro{margin:45px 0 35px}
.setup-intro h1{margin:10px 0}
.setup-intro p{color:var(--apofarm-ink-soft)}
.setup-grid{display:grid;grid-template-columns:minmax(280px,.75fr) minmax(0,1.25fr);gap:42px}
.appearance-sheet{align-self:start;padding:25px;background:var(--apofarm-surface);border:1px solid var(--apofarm-line)}
.avatar-stage {
  position:relative;
  display:grid;
  place-items:center;
  height:330px;
  margin:17px 0 23px;
  background:radial-gradient(circle at 50% 35%,var(--apofarm-stage-a) 0 25%,var(--apofarm-stage-b) 70%);
  overflow:hidden;
}
.avatar-stage:before{content:"◷";position:absolute;color:rgb(79 107 80 / 11%);font-size:var(--apofarm-text-4xl)}
.avatar-stage small{position:absolute;bottom:12px;right:12px;font-size:var(--apofarm-text-xs)}
.avatar{position:relative;width:145px;height:225px;z-index:1}
.avatar .face{position:absolute;top:42px;left:36px;width:73px;height:89px;background:#ba8769;border-radius:44% 44% 48% 48%;z-index:2}
.avatar.skin-1 .face{background:#e0b996}
.avatar.skin-2 .face{background:#8f624e}
.avatar.skin-3 .face{background:#d19c79}
.avatar.face-1 .face{border-radius:39% 39% 55% 55%}
.avatar.face-2 .face{border-radius:48% 48% 40% 40%}
.avatar.face-3 .face{width:80px;left:33px}
.avatar .hair{position:absolute;top:26px;left:28px;width:90px;height:69px;background:#382f2c;border-radius:55% 50% 15% 15%;z-index:3}
.avatar.hair-1 .hair{height:90px;background:#5b4a3c}
.avatar.hair-2 .hair{border-radius:20% 65% 20% 20%;background:#6b5744}
.avatar.hair-3 .hair{height:51px;background:#2d3430}
.avatar .eyes{position:absolute;z-index:4;top:91px;left:62px;width:24px;height:4px;border-left:3px solid #483d36;border-right:3px solid #483d36}
.avatar .body{position:absolute;bottom:0;left:15px;width:115px;height:118px;background:#4f6b50;border-radius:36% 36% 8% 8%;z-index:1}
.avatar.clothes-1 .body{background:#86664e}
.avatar.clothes-2 .body{background:#5d8995}
.avatar.clothes-3 .body{background:#787963}
.field-label{display:grid;gap:6px;font-size:var(--apofarm-text-sm);color:var(--apofarm-ink-soft)}
.appearance-controls{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:15px 0}
.appearance-controls .button{justify-content:space-between}
.section-title{margin-bottom:16px}
/* 생성 화면 2장: 한 단으로 넓게. 무작위 고르기 단추는 구역 제목 아래에. */
.setup-page-two{max-width:980px}
.setup-page-two .setup-bottom .button.subtle{margin-right:auto}
.setup-random{min-height:34px;margin-top:8px;padding:6px 12px;font-size:var(--apofarm-text-sm)}
.setup-location-title{margin-top:28px}
.section-title h2{margin:7px 0}
.section-title p{font-size:var(--apofarm-text-sm);color:var(--apofarm-ink-soft)}
.personality-list{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:34px}
.setup-trait-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:420px;overflow:auto;margin-bottom:34px;padding-right:3px}
.setup-trait{min-height:0;gap:5px}
.setup-trait:disabled{opacity:.55;cursor:not-allowed}
.setup-trait span{font-size:var(--apofarm-text-xs);line-height:1.4}
.setup-trait .trait-benefit{color:var(--apofarm-moss-deep)}
.setup-trait .trait-drawback{color:var(--apofarm-danger)}
.choice-option{display:grid;gap:8px;min-height:94px;padding:15px;background:var(--apofarm-surface);border:1px solid var(--apofarm-line);text-align:left;color:var(--apofarm-ink)}
.choice-option.active,.location-option.active{border-color:var(--apofarm-moss);box-shadow:inset 3px 0 var(--apofarm-moss);background:var(--apofarm-moss-pale)}
.choice-option small{font-size:var(--apofarm-text-xs)}
.location-list{display:grid;gap:7px;max-height:460px;overflow:auto;padding-right:3px}
.location-option {
  display:grid;
  grid-template-columns:50px 1fr;
  gap:13px;
  width:100%;
  padding:14px;
  background:var(--apofarm-surface);
  border:1px solid var(--apofarm-line);
  text-align:left;
  color:var(--apofarm-ink);
}
.place-mark{display:grid;place-items:center;width:46px;height:46px;background:var(--apofarm-soil-pale);color:var(--apofarm-soil-deep);font-size:var(--apofarm-text-3xl)}
.location-option strong,.location-option small,.location-option em{display:block}
.location-option small{margin:4px 0 9px;font-size:var(--apofarm-text-xs)}
.location-option em{margin-top:3px;font-size:var(--apofarm-text-xs);font-style:normal;color:var(--apofarm-moss-deep)}
.location-option .disadvantage{color:var(--apofarm-danger)}
.setup-bottom{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:20px;padding:17px 0;border-top:1px solid var(--apofarm-line);font-size:var(--apofarm-text-sm)}
#player-dialog {
  max-width:min(520px,calc(100vw - 24px));
  width:100%;
  padding:0;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  box-shadow:var(--apofarm-shadow-overlay);
}
#player-dialog::backdrop{background:var(--apofarm-scrim)}
.dialog-inner{padding:27px}
.dialog-inner h2{margin:8px 0 15px}
.dialog-inner p{font-size:var(--apofarm-text-md);line-height:1.7}
.dialog-inner #dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:22px;padding-top:17px;border-top:1px solid var(--apofarm-line)}
.detail-meter{margin:16px 0}
.detail-meter b{display:block;margin-bottom:7px;font-size:var(--apofarm-text-sm)}
.offline-totals{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.offline-totals span{padding:10px;background:var(--apofarm-paper-deep);font-size:var(--apofarm-text-xs)}
.offline-totals b{display:block;margin-top:4px;font-size:var(--apofarm-text-base)}
.explore-reaction{font-style:italic;color:var(--apofarm-ink-soft)}
.explore-reaction-tag{display:inline-block;margin-right:6px;padding:0 6px;border:1px solid var(--apofarm-line);border-radius:999px;font-style:normal;font-size:var(--apofarm-text-xs)}
.legacy-epitaph{margin:12px 0 0;padding:10px 12px;border-left:3px solid var(--apofarm-line);background:var(--apofarm-paper-deep)}
.legacy-epitaph p,.legacy-list p{margin:4px 0;font-style:italic}
.legacy-epitaph small,.legacy-list small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.legacy-list{margin:0;padding:0;list-style:none}
.legacy-list li{padding:9px 0;border-bottom:1px solid var(--apofarm-line)}
.absence-story{margin-bottom:12px;line-height:1.75}
.absence-story p{margin:0 0 8px}
.absence-detail{margin-top:8px}
.absence-detail summary{cursor:pointer;font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.activity-list{max-height:200px;overflow:auto;padding:0;list-style:none}
.activity-list li{display:flex;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px solid var(--apofarm-line);font-size:var(--apofarm-text-xs)}
.activity-list time{color:var(--apofarm-ink-soft)}
@media(max-width:1250px){
  .farm-layout{grid-template-columns:minmax(0,1fr) 210px}
  .plot-grid{gap:7px;padding:15px}
  .plot-select{min-height:146px}
}
@media(max-width:950px){.player-shell{grid-template-columns:1fr}
  .world-clock .icon-ring{display:none}
  .world-clock strong{font-size:var(--apofarm-text-base)}
  .world-target small{display:none}
  .mobile-nav {
    position:fixed;
    z-index:5;
    bottom:0;
    left:0;
    right:0;
    display:grid;
    grid-template-columns:repeat(4,1fr);
    background:var(--apofarm-surface-high);
    border-top:1px solid var(--apofarm-line);
    box-shadow:var(--apofarm-shadow-raise);
  }
  .mobile-nav button{display:grid;justify-items:center;gap:1px;padding:8px 3px 12px;background:transparent;border:0;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
  .mobile-nav button span{font-size:var(--apofarm-text-xl)}
  .mobile-nav button.active{color:var(--apofarm-moss-deep);font-weight:700}
  .screen{padding:25px 20px 20px}
  .farm-layout{grid-template-columns:1fr}
  .farm-rail{grid-template-columns:repeat(3,1fr)}
  .plot-grid{grid-template-columns:repeat(5,1fr)}
  .action-desk{position:sticky;bottom:calc(57px + var(--apofarm-safe-bottom));z-index:3;box-shadow:var(--apofarm-shadow-raise)}
  .setup-grid{grid-template-columns:1fr 1.3fr;gap:22px}
}
@media(max-width:640px){h1{font-size:var(--apofarm-text-4xl)}
  .world-target{grid-column:1/-1;grid-row:3}
  .world-clock{grid-row:2;grid-column:1}
  .world-clock small{font-size:var(--apofarm-text-2xs)}
  .world-clock strong{font-size:var(--apofarm-text-sm)}
  .page-heading{display:block}
  .page-heading>.button{margin-top:16px}
  .page-heading p{font-size:var(--apofarm-text-sm)}
  .field-legend{gap:8px;flex-wrap:wrap;padding:0 13px 13px;font-size:var(--apofarm-text-2xs)}
  .section-heading{padding:16px 13px 11px}
  .plot-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;padding:13px}
  .plot-select{min-height:157px}
  .action-desk{padding:12px 13px}
  .action-summary{flex-wrap:wrap;margin-bottom:8px}
  .action-summary span{flex-basis:100%;margin-left:0}
  .farm-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
  .farm-actions .button.clear-action{grid-column:-2;margin-left:0}
  .farm-actions .button{padding:6px;min-height:36px;font-size:var(--apofarm-text-xs)}
  .support-actions .button{font-size:var(--apofarm-text-xs)}
  .crop-pick{margin:7px 0}
  .ui-select-control{min-width:0;max-width:240px}
  .ui-select-stack .ui-select-control{max-width:100%}
  .farm-rail{grid-template-columns:1fr;gap:0}
  .rail-section:first-child{padding-top:18px}
  .resource-controls{display:grid}
  .resource-controls input{width:100%}
  .resource-head,.resource-row{grid-template-columns:34px minmax(100px,1fr) 75px 80px;gap:5px;padding:9px 8px;font-size:var(--apofarm-text-xs)}
  .resource-row strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .resource-row b{font-size:var(--apofarm-text-xs)}
  .shipment-layout,.explore-layout,.setup-grid{grid-template-columns:1fr}
  .setup-page{padding:18px 18px 50px}
  .setup-intro{margin:30px 0}
  .appearance-sheet{order:1}
  .setup-options{order:2}
  .personality-list{grid-template-columns:1fr 1fr}
  .setup-trait-grid{grid-template-columns:1fr;max-height:440px}
  .location-list{max-height:none}
  .setup-bottom{position:sticky;bottom:0;z-index:3;background:var(--apofarm-paper);padding:12px 0}
  .setup-bottom span{font-size:var(--apofarm-text-xs)}
  .dialog-inner{padding:20px}
}
@media(max-width:640px){.action-desk{padding:8px 12px}
  .action-summary{margin-bottom:4px}
  .crop-pick{margin:4px 0 8px}
  .ui-select-control{padding:5px 8px;min-height:34px}
  .ui-check{padding:5px 8px;min-height:34px}
  /* 할 수 있는 행동만 앞에 두므로 줄을 바꿔 모두 보이게 한다(가로로 밀어야 보이면 수확 단추가 숨는다). */
  .farm-actions{display:flex;flex-wrap:wrap;gap:6px}
  .farm-actions .button{flex:1 1 auto;min-height:34px;white-space:nowrap;padding:5px 10px}
  .support-actions{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;scrollbar-width:thin}
  .support-actions .button{flex:0 0 auto;min-height:34px;white-space:nowrap;padding:5px 10px}
  .support-actions{margin-top:6px;padding-top:6px}
  .choice-actions{flex-wrap:wrap}
}
.filter-strip{flex-wrap:wrap}
.filter-strip .all-resources{margin-left:auto;font-size:var(--apofarm-text-xs)}
.reset-link{justify-self:start;text-align:left;font-size:var(--apofarm-text-xs)}
.farm-rail>.reset-link{margin:10px 0 0}
.farm-rail{gap:0}
.rail-water{padding:4px 4px 23px;border-bottom:1px solid var(--apofarm-line)}
.rail-water-head{display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:8px;margin-bottom:11px}
.rail-water-icon{display:grid;place-items:center;width:32px;height:32px;background:var(--apofarm-water-pale);color:var(--apofarm-water)}
.rail-water-copy small,.rail-water-copy strong{display:block}
.rail-water-copy small{font-size:var(--apofarm-text-2xs);color:var(--apofarm-ink-faint)}
.rail-water-copy strong{font-size:var(--apofarm-text-sm);line-height:1.4}
.rail-water-quantity{align-self:end;white-space:nowrap;font-variant-numeric:tabular-nums}
.rail-water-quantity strong{font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-xl)}
.rail-water-quantity small{font-size:var(--apofarm-text-xs)}
.rail-water .meter{height:6px;background:var(--apofarm-paper-deep)}
.rail-water-hint{display:flex;align-items:center;gap:5px;margin:10px 0 0;color:var(--apofarm-ink-faint);font-size:var(--apofarm-text-xs);line-height:1.45}
.rail-water-hint svg{flex:none}
.rail-favorites{margin-top:16px;padding:15px 0 14px 13px;border-left:2px solid var(--apofarm-line-dark)}
.rail-favorites-head{display:flex;justify-content:space-between;align-items:start;gap:8px;margin-bottom:15px}
.rail-favorites-head h2{margin:0 0 4px;font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-md);font-weight:700}
.rail-favorites-head small{display:block;font-size:var(--apofarm-text-2xs)}
.rail-favorites-head .text-button{flex:none;font-size:var(--apofarm-text-xs)}
.rail-resource-list{display:grid;gap:6px;max-height:220px;overflow-y:auto;padding-right:1px}
.rail-resource-row {
  display:grid;
  grid-template-columns:29px minmax(0,1fr) auto;
  align-items:center;
  gap:8px;
  min-height:37px;
  background:var(--apofarm-moss-pale);
  padding:3px 8px 3px 3px;
  font-size:var(--apofarm-text-xs);
}
.rail-resource-icon{display:grid;place-items:center;width:28px;height:28px;background:var(--apofarm-moss-pale);color:var(--apofarm-moss)}
.rail-resource-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.rail-resource-row b{font-variant-numeric:tabular-nums}
.rail-empty{margin:4px 0;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs);line-height:1.6}
.rail-telegram{margin-top:13px;padding:16px 15px 15px;background:var(--apofarm-fill-moss-deep);color:var(--apofarm-on-dark);box-shadow:4px 4px 0 var(--apofarm-line-dark)}
.rail-telegram-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.rail-telegram h2{margin:0;font-family:var(--apofarm-font-body);font-size:var(--apofarm-text-sm);font-weight:700}
.rail-telegram>small{display:block;margin-top:2px;font-size:var(--apofarm-text-2xs);color:var(--apofarm-on-dark-soft)}
.rail-telegram .example-tag{border-color:var(--apofarm-on-dark-line);color:var(--apofarm-on-dark-soft);font-size:var(--apofarm-text-2xs)}
.rail-telegram p{margin:12px 0 11px;font-size:var(--apofarm-text-xs);line-height:1.65;color:var(--apofarm-on-dark)}
.rail-telegram button{display:inline-flex;align-items:center;gap:5px;padding:0;border:0;background:none;color:var(--apofarm-on-dark);font-size:var(--apofarm-text-xs);font-weight:700}
.rail-telegram button span{font-size:var(--apofarm-text-lg);line-height:.5}
.farm-rail>.reset-link{margin:19px 3px 0}
@media(min-width:641px) and (max-width:950px){.farm-rail{gap:17px}
  .rail-favorites,.rail-telegram{margin-top:0}
}
@media(max-width:640px){.farm-rail{gap:0}
  .rail-water{padding-top:18px}
  .rail-favorites{margin-top:15px}
  .rail-telegram{margin-top:13px}
}
.player-shell{grid-template-columns:210px minmax(0,1fr)}
.sidebar-utilities{display:grid;gap:2px;padding:12px 0 14px;border-bottom:1px solid var(--apofarm-line)}
.sidebar-utilities button {
  display:flex;
  align-items:center;
  gap:13px;
  width:100%;
  min-height:42px;
  padding:9px 13px;
  border:0;
  border-radius:var(--apofarm-radius-control);
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-sm);
  text-align:left;
}
.sidebar-utilities button:hover,.nav-links button:hover:not(.active){background:var(--apofarm-paper);color:var(--apofarm-ink)}
.sidebar-utilities svg{flex:none}
.nav-links{gap:2px;padding-top:14px}
.nav-links button{position:relative;gap:13px;min-height:46px;padding:10px 13px;border:0;border-radius:var(--apofarm-radius-soft);color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-sm)}
.nav-links button svg{flex:none}
.nav-links button span{width:auto;font-size:inherit;text-align:left}
.nav-links button.active{border:0;background:var(--apofarm-moss-pale);color:var(--apofarm-moss-deep);font-weight:700}
.nav-notice{width:6px;height:6px;margin-left:auto;border-radius:50%;background:var(--apofarm-fill-soil)}
.side-bottom{gap:17px}
.season-note{display:grid;gap:5px;padding:14px;border:1px solid var(--apofarm-line);border-radius:var(--apofarm-radius-soft);background:var(--apofarm-paper-deep)}
.season-note small,.season-note span{color:var(--apofarm-ink-faint);font-size:var(--apofarm-text-xs)}
.season-note strong{margin:2px 0 5px;font-family:var(--apofarm-font-display);font-size:var(--apofarm-text-xl);font-weight:500}
.season-note b{font-size:var(--apofarm-text-sm)}
.season-note .example-tag{justify-self:start;margin:3px 0 0;background:var(--apofarm-surface-high)}
.profile-note{display:flex;align-items:center;gap:9px;width:100%;padding:0 4px;border:0;background:transparent;color:var(--apofarm-ink);text-align:left}
.profile-note:hover{color:var(--apofarm-moss-deep)}
.profile-note .small-avatar{flex:none;width:35px;height:35px;border:0;border-radius:50%;background:var(--apofarm-soil-pale);color:var(--apofarm-soil)}
.profile-copy{min-width:0;flex:1}
.profile-copy b,.profile-copy small{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.profile-copy b{font-size:var(--apofarm-text-sm)}
.profile-copy small{font-size:var(--apofarm-text-xs)}
.profile-note>svg{flex:none}
.rail-telegram {
  display:flex;
  flex-direction:column;
  min-height:136px;
  margin-top:13px;
  padding:9px 13px 9px;
  border:1px solid var(--apofarm-line-dark);
  border-top:3px double var(--apofarm-ink);
  border-bottom:3px double var(--apofarm-ink);
  background:linear-gradient(135deg,var(--apofarm-surface-high),var(--apofarm-paper-deep));
  color:var(--apofarm-ink);
  box-shadow:3px 3px 0 var(--apofarm-line);
}
.rail-telegram-masthead {
  display:flex;
  justify-content:space-between;
  gap:8px;
  padding-bottom:3px;
  border-bottom:1px solid var(--apofarm-ink);
  font-family:var(--apofarm-font-body);
  font-size:var(--apofarm-text-2xs);
  font-weight:700;
  letter-spacing:.08em;
}
.rail-telegram-masthead span:last-child{font-family:var(--apofarm-font-body);letter-spacing:0}
.rail-telegram-head{margin:5px 0 1px}
.rail-telegram h2 {
  display:-webkit-box;
  overflow:hidden;
  flex:none;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:2;
  font-family:var(--apofarm-font-display);
  font-size:var(--apofarm-text-lg);
  font-weight:700;
  line-height:1.2;
  letter-spacing:.01em;
}
.rail-telegram>small{margin:0;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-2xs)}
.rail-telegram .example-tag{border-color:var(--apofarm-line-dark);color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-2xs)}
.rail-telegram p {
  display:-webkit-box;
  overflow:hidden;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:3;
  line-clamp:3;
  flex:none;
  margin:5px 0 6px;
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-xs);
  line-height:1.4;
  overflow-wrap:anywhere;
}
.rail-telegram button {
  width:100%;
  justify-content:space-between;
  gap:8px;
  margin-top:auto;
  padding:5px 0 0;
  border-top:1px solid var(--apofarm-line-dark);
  color:var(--apofarm-moss-deep);
  font-size:var(--apofarm-text-xs);
}
.rail-telegram button span{font-size:var(--apofarm-text-sm);line-height:1}
@media(min-width:641px) and (max-width:950px){.farm-rail{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.world-clock{gap:10px}
.world-clock .icon-ring{width:36px;height:36px;border:1px solid var(--apofarm-line);color:var(--apofarm-world)}
.world-clock small{font-size:var(--apofarm-text-xs)}
.world-clock strong{font-size:var(--apofarm-text-lg);font-weight:500}
.world-target>div:first-child{font-size:var(--apofarm-text-xs)}
.world-target strong{color:var(--apofarm-world);font-size:var(--apofarm-text-sm)}
.world-target .meter{height:6px;margin:6px 0}
.world-target small{display:block;color:var(--apofarm-ink-faint);font-size:var(--apofarm-text-2xs);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.header-store{display:flex;align-items:center;gap:7px;white-space:nowrap}
.header-store svg{flex:none}
.header-store.water-store svg{color:var(--apofarm-water)}
.header-store.bag-store svg{color:var(--apofarm-soil)}
.header-store span{display:block}
.header-store small,.header-store b{display:block}
.header-store small{color:var(--apofarm-ink-faint);font-size:var(--apofarm-text-2xs)}
.header-store b{font-size:var(--apofarm-text-xs);font-variant-numeric:tabular-nums}
.utility-facts{display:grid;gap:8px}
.utility-facts>div{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--apofarm-line);font-size:var(--apofarm-text-xs)}
.utility-facts span{color:var(--apofarm-ink-soft)}
.utility-facts strong{text-align:right;font-variant-numeric:tabular-nums}
.plant-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.plant-sample{display:grid;justify-items:center;gap:6px;padding:15px 6px;background:var(--apofarm-moss-pale);font-size:var(--apofarm-text-sm)}
.plant-sample>span{color:var(--apofarm-moss)}
.plant-sample small{font-size:var(--apofarm-text-xs)}
.profile-dialog{display:flex;align-items:center;gap:12px}
.profile-dialog-avatar{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:var(--apofarm-soil-pale);color:var(--apofarm-soil)}
.profile-dialog p{margin:3px 0 0}
.profile-shortcuts{display:flex;flex-wrap:wrap;gap:7px;margin-top:22px}
.profile-shortcuts .button{font-size:var(--apofarm-text-xs)}
.report-form{display:grid;gap:14px}.report-form .field-label{display:grid;gap:6px}.report-form input,.report-form select,.report-form textarea{width:100%;border:1px solid var(--apofarm-line-dark);border-radius:var(--apofarm-radius-control);background:var(--apofarm-surface-high);color:var(--apofarm-ink);padding:10px;font:inherit}.report-form textarea{resize:vertical;min-height:120px}.report-form #report-error:empty{display:none}
@media(max-width:950px){.player-shell{grid-template-columns:1fr}
  .world-clock .icon-ring{display:none}
  .mobile-nav button{align-content:center;gap:3px}
  .mobile-nav button svg{color:currentColor}
  .mobile-nav button span{font-size:var(--apofarm-text-xs)}
}
@media(max-width:640px){
  .world-target{grid-column:1/-1;grid-row:3}
  .world-clock{grid-row:2;grid-column:1}
  .header-store{gap:5px}
  .header-store svg{width:15px;height:15px}
  .header-store small{font-size:var(--apofarm-text-2xs)}
  .header-store b{font-size:var(--apofarm-text-xs)}
  .world-clock small{font-size:var(--apofarm-text-2xs)}
  .world-clock strong{font-size:var(--apofarm-text-sm)}
}
/* 로그인·가입(배포본 서버 저장) */
.account-page{display:flex;flex-direction:column;min-height:100vh}
.account-page .setup-header{justify-content:center}
.account-main{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;padding:32px 0}
.account-page .setup-intro{max-width:460px;margin:0 0 28px;text-align:center}
.account-page .setup-intro h1{margin:0 0 12px;font-size:clamp(1.3rem,1.8vw,1.6rem);font-weight:700;line-height:1.4}
.account-page .setup-intro p{margin:0;font-size:var(--apofarm-text-md);line-height:1.7}
.account-form{display:grid;gap:8px;width:100%;max-width:420px;padding:25px;background:var(--apofarm-surface);border:1px solid var(--apofarm-line)}
.account-form .field-label{margin-top:8px}
.account-form .small-note{margin:0}
.account-form .button.primary{margin-top:10px}
.account-form .text-button{justify-self:center;margin-top:6px}
.account-email-code{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}
.account-email-code .button{white-space:nowrap}
.account-message{min-height:1.2em;margin:4px 0 0;color:var(--apofarm-danger);font-size:var(--apofarm-text-sm)}
.account-message:empty{display:none}
/* 프로필 사진·캐릭터 설명(배포본) */
.photo-stage{height:auto;padding:26px 0}
.photo-frame {
  display:grid;
  place-items:center;
  width:150px;
  height:150px;
  border-radius:50%;
  overflow:hidden;
  background:var(--apofarm-soil-pale);
  border:1px solid var(--apofarm-line-dark);
  color:var(--apofarm-soil-deep);
  position:relative;
  z-index:1;
}
.profile-photo{display:block;width:100%;height:100%;object-fit:cover}
.photo-pick{width:100%;margin-bottom:14px;cursor:pointer}
.appearance-sheet textarea,.profile-edit textarea {
  min-height:76px;
  padding:9px 11px;
  background:var(--apofarm-surface-high);
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  color:var(--apofarm-ink);
  font:inherit;
  resize:vertical;
}
.appearance-sheet .field-label{margin-bottom:12px}
.profile-edit{display:grid;gap:12px;justify-items:center}
.profile-edit .photo-frame{width:120px;height:120px}
.profile-edit .field-label{width:100%}
.profile-edit .photo-pick{margin:0}
.profile-dialog-avatar{overflow:hidden}
.profile-bio{margin:8px 0 0;color:var(--apofarm-ink);white-space:pre-wrap}
.top-profile{overflow:hidden;padding:0}
/* 프로필 사진 자르기 */
.photo-cropper {
  max-width:min(360px,calc(100vw - 24px));
  width:100%;
  padding:0;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  box-shadow:var(--apofarm-shadow-overlay);
}
.photo-cropper::backdrop{background:var(--apofarm-scrim)}
.photo-cropper-inner{display:grid;gap:12px;justify-items:center;padding:22px}
.photo-cropper-inner h2{margin:0}
.photo-cropper-inner .eyebrow,.photo-cropper-inner .small-note{justify-self:stretch;margin:0}
.photo-cropper-view{position:relative;width:280px;height:280px;overflow:hidden;background:var(--apofarm-paper-deep);cursor:grab;touch-action:none;user-select:none}
.photo-cropper-view:active{cursor:grabbing}
.photo-cropper-view img{position:absolute;top:0;left:0;max-width:none;transform-origin:0 0;pointer-events:none}
.photo-cropper-mask{position:absolute;inset:0;border-radius:50%;box-shadow:0 0 0 400px var(--apofarm-scrim);outline:2px solid var(--apofarm-on-dark);outline-offset:-2px;pointer-events:none}
.photo-cropper-zoom{display:flex;align-items:center;gap:10px;width:280px;font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.photo-cropper-zoom input{flex:1;accent-color:var(--apofarm-moss)}
.photo-cropper-actions{display:flex;justify-content:flex-end;gap:8px;justify-self:stretch;padding-top:12px;border-top:1px solid var(--apofarm-line)}
/* 다른 생존자 프로필·교류 화면의 생존자들 */
.player-relation{white-space:pre-line;margin:8px 0 0;color:var(--apofarm-moss-deep);font-size:var(--apofarm-text-sm);font-weight:700}
.player-dialog-note{margin:14px 0 0;padding:9px 11px;background:var(--apofarm-paper-deep);font-size:var(--apofarm-text-sm)}
.player-actions{flex-wrap:wrap}
.danger-text{color:var(--apofarm-danger)}
.social-section{margin-bottom:26px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface)}
.social-body{display:grid;gap:18px;padding:0 25px 22px}
.social-group h3{display:flex;align-items:center;gap:6px;margin:0 0 8px;font-size:var(--apofarm-text-md)}
.social-group h3 span{color:var(--apofarm-ink-soft);font-weight:400}
.social-group ul{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.social-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.social-player{display:flex;flex:1;align-items:center;gap:10px;min-width:0;padding:0;border:0;background:none;color:var(--apofarm-ink);text-align:left}
.social-player strong,.social-player small{display:block}
.social-player small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.social-photo{display:grid;flex:none;place-items:center;width:34px;height:34px;border-radius:50%;overflow:hidden;background:var(--apofarm-soil-pale);color:var(--apofarm-soil-deep)}
.social-row .button{min-height:34px;padding:6px 10px;font-size:var(--apofarm-text-xs)}
.board-section .section-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}
.board-form{display:grid;gap:6px}
.board-form textarea {
  width:100%;
  min-height:76px;
  padding:9px 11px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  font:inherit;
  resize:vertical;
}
.board-form-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--apofarm-ink-soft)}
.board-list{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.board-post{display:grid;gap:6px;padding:10px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.board-post p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.board-post.is-blinded p,.board-blinded{color:var(--apofarm-ink-faint);font-style:italic;cursor:default}
.board-report-quote {
  margin:0;
  padding:10px;
  border-left:3px solid var(--apofarm-line-dark);
  background:var(--apofarm-surface);
  white-space:pre-wrap;
  overflow-wrap:anywhere;
  font-size:var(--apofarm-text-sm);
}
.board-tools{display:flex;flex-wrap:wrap;gap:6px}
.board-tools{align-items:center}
.board-toggle{display:inline-flex;border:1px solid var(--apofarm-line-dark);border-radius:var(--apofarm-radius-control);overflow:hidden}
.board-toggle button{min-height:34px;padding:6px 14px;border:0;background:var(--apofarm-surface);color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.board-toggle button + button{border-left:1px solid var(--apofarm-line-dark)}
.board-toggle [aria-pressed="true"]{background:var(--apofarm-fill-moss);color:var(--apofarm-on-dark,#fff);font-weight:700}
.board-refresh{display:inline-grid;place-items:center;padding:6px 9px}
.board-section .social-body{padding-top:16px}
.board-note-open {
  flex:1;
  min-height:0;
  margin:0;
  padding:0;
  border:0;
  background:none;
  color:inherit;
  font:inherit;
  font-size:var(--apofarm-text-sm);
  text-align:left;
  overflow:hidden;
  white-space:pre-wrap;
  overflow-wrap:anywhere;
  cursor:pointer;
}
.board-cork {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  grid-auto-rows:92px;
  grid-auto-flow:dense;
  gap:10px;
  margin:0;
  padding:12px;
  list-style:none;
  border:1px solid var(--apofarm-line);
  background:color-mix(in srgb,var(--apofarm-paper-deep) 70%,var(--apofarm-surface));
  background-image:linear-gradient(color-mix(in srgb,var(--apofarm-ink) 3%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--apofarm-ink) 3%,transparent) 1px,transparent 1px);
  background-size:14px 14px;
}
.board-note {
  position:relative;
  display:flex;
  flex-direction:column;
  gap:4px;
  min-width:0;
  padding:14px 10px 8px;
  overflow:hidden;
  border:1px solid var(--apofarm-line);
  border-radius:var(--apofarm-radius-panel);
  color:var(--apofarm-ink);
  box-shadow:var(--apofarm-shadow-soft);
}
.board-note::before{content:"";position:absolute;top:5px;left:50%;width:6px;height:6px;margin-left:-3px;border-radius:50%;background:var(--apofarm-line-dark);opacity:.7}
.board-w2{grid-column:span 2}.board-h2{grid-row:span 2}
.board-tone-0{background:color-mix(in srgb,var(--apofarm-moss) 12%,var(--apofarm-surface-high))}.board-tone-1{background:color-mix(in srgb,var(--apofarm-soil) 14%,var(--apofarm-surface-high))}.board-tone-2{background:color-mix(in srgb,var(--apofarm-water) 14%,var(--apofarm-surface-high))}.board-tone-3{background:color-mix(in srgb,var(--apofarm-world) 14%,var(--apofarm-surface-high))}.board-tone-4{background:var(--apofarm-surface-high)}
.board-note-author{display:flex;align-items:baseline;justify-content:space-between;gap:6px;min-width:0;padding:0;border:0;background:none;color:inherit;text-align:left}
.board-note-author strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.board-note-author small{flex:none;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.board-note-delete {
  position:absolute;
  right:6px;
  bottom:6px;
  padding:1px 6px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-surface);
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
}
@media(max-width:640px){.board-cork{grid-template-columns:repeat(2,minmax(0,1fr));padding:12px;gap:10px}}
.board-post .button{justify-self:end;min-height:34px;padding:6px 10px;font-size:var(--apofarm-text-xs)}
.board-note-tools{position:absolute;right:6px;bottom:6px;display:flex;gap:4px}
.board-note-tools .board-note-delete{position:static}
.board-post-tools{display:flex;justify-content:flex-end;gap:6px}
.board-edit-box{width:100%;box-sizing:border-box;resize:vertical}
@media(max-width:640px){.social-body{padding:0 13px 16px}
  .social-row{flex-wrap:wrap}
}
/* 친구 목록: 한 줄에 3명씩, 사진 위·이름 아래 */
.social-group .social-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.social-grid .social-row{padding:10px 6px}
.social-grid .social-player{flex-direction:column;gap:6px;text-align:center}
.social-grid .social-player>span:last-child{width:100%;min-width:0}
.social-grid .social-player strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.social-grid .social-photo{width:44px;height:44px}
/* 치료·거래 제안 */
.offer-choices{display:grid;gap:6px;margin-top:10px}
.offer-choice{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface);cursor:pointer}
.offer-choice:has(input:checked){border-color:var(--apofarm-moss);background:var(--apofarm-moss-pale)}
.offer-choice strong,.offer-choice small{display:block}
.offer-choice small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.trade-composer{display:grid;gap:14px}
.trade-composer section{padding:12px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface)}
.trade-composer h3{margin:0 0 8px;font-size:var(--apofarm-text-md)}
.trade-list{display:grid;gap:4px;margin:0 0 10px;padding:0;list-style:none;font-size:var(--apofarm-text-sm)}
.trade-list li{display:flex;justify-content:space-between;gap:8px}
.trade-add{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px;margin-bottom:8px}
.trade-add input,.trade-composer .field-label input {
  min-height:36px;
  padding:6px 8px;
  background:var(--apofarm-surface-high);
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  color:var(--apofarm-ink);
  font:inherit;
  font-size:var(--apofarm-text-sm);
  min-width:0;
}
.trade-add .ui-select-control{width:100%;min-width:0}
.trade-add .button{min-height:36px;padding:6px 10px}
.trade-error{min-height:0;margin:0;color:var(--apofarm-danger);font-size:var(--apofarm-text-sm)}
.trade-error:empty{display:none}
.offer-row small{white-space:normal}
.offer-status{flex:none;padding:3px 8px;background:var(--apofarm-paper-deep);font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
#player-dialog:has(.trade-composer){max-width:min(560px,calc(100vw - 24px))}
/* 파티·함께 탐험 */
.party-panel{margin:0;border:1px solid var(--apofarm-line);background:var(--apofarm-surface)}
.party-panel>.small-note{padding:14px 25px 18px;margin:0}
.party-panel-body{display:grid;gap:12px;padding:14px 25px 20px}
.party-members{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:6px;margin:0;padding:0;list-style:none}
.party-members li{padding:8px 10px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.party-buttons{display:flex;flex-wrap:wrap;gap:8px}
.party-distribution{display:flex;align-items:center;gap:8px;font-size:var(--apofarm-text-sm);color:var(--apofarm-ink-soft)}
.party-leave{justify-self:start;color:var(--apofarm-ink-soft)}
.party-panel .small-note{margin:0}
@media(max-width:640px){.party-panel-body{padding:12px 13px 16px}
  .party-panel>.small-note{padding:12px 13px 14px}
}
/* 말풍선(tooltip.js) */
.floating-tip {
  position:fixed;
  z-index:1000;
  max-width:min(280px,calc(100vw - 16px));
  padding:7px 10px;
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-ink);
  color:var(--apofarm-surface);
  font-size:var(--apofarm-text-xs);
  line-height:1.5;
  box-shadow:var(--apofarm-shadow-overlay);
  pointer-events:none;
  word-break:keep-all;
}
.floating-tip[hidden]{display:none}
[data-tip]{cursor:help}
button[data-tip]{cursor:pointer}
.player-debuffs button:focus-visible{outline:2px solid var(--apofarm-moss);outline-offset:1px}
.floating-tip{white-space:pre-line}
.debuff-cure-title{margin:14px 0 6px;font-size:var(--apofarm-text-md)}
.debuff-cures{display:grid;gap:6px;margin:0 0 10px;padding:0;list-style:none}
.debuff-cure{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--apofarm-line)}
.debuff-cure span{display:grid;gap:2px;min-width:0}
.debuff-cure small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.debuff-cure .button{flex:none}

/* 쓰러짐 알림 */
.downed-banner {
  margin:0 0 16px;
  padding:14px 18px;
  border:1px solid var(--apofarm-danger, #a4402f);
  border-left-width:6px;
  border-radius:var(--apofarm-radius-panel);
  background:color-mix(in srgb, var(--apofarm-danger, #a4402f) 10%, var(--apofarm-surface));
  color:var(--apofarm-ink);
}
.downed-banner strong{display:block;font-size:var(--apofarm-text-lg);color:var(--apofarm-danger, #a4402f)}
.downed-banner p{margin:6px 0 0;font-size:var(--apofarm-text-sm);line-height:1.55}

/* 적 태그·설명 */
.enemy-tag {
  margin-left:4px;
  padding:1px 6px;
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-moss-pale);
  color:var(--apofarm-moss-deep);
  font-size:var(--apofarm-text-2xs);
  font-style:normal;
  font-weight:700;
}
.enemy-description{display:block;margin-top:4px;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs);line-height:1.5}

/* 다른 생존자 프로필의 쓰러짐·사망 표시 */
.player-life { margin:6px 0 0; padding:6px 9px; font-size:var(--apofarm-text-xs); font-weight:700; }
.player-life.downed { border-left:3px solid var(--apofarm-danger); background:var(--apofarm-danger-pale); color:var(--apofarm-danger); }
.player-life.dead { border-left:3px solid var(--apofarm-line); color:var(--apofarm-ink-soft); }
/* 부활 직후 보호 안내(쓰러짐 띠보다 차분한 색) */
.downed-banner.revive-guard{border-color:var(--apofarm-moss);background:color-mix(in srgb, var(--apofarm-moss) 10%, var(--apofarm-surface))}
.downed-banner.revive-guard strong{color:var(--apofarm-moss)}
/* 부활소(묘지): 장터의 상점 아래 쓰러진 생존자 목록 */
.graveyard{margin-top:18px}
.graveyard-list{margin:10px 0 0;padding:0;list-style:none;display:grid;gap:8px}
.graveyard-row {
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:6px 12px;
  padding:10px 12px;
  border:1px solid var(--apofarm-line);
  border-left:3px solid var(--apofarm-danger);
  background:var(--apofarm-surface);
}
.graveyard-row small{flex:1;min-width:10em;color:var(--apofarm-ink-soft)}
.merchant .resource-ledger-body>p:first-child{margin-top:0}
.merchant-sponsor{margin:12px 0;padding:10px 14px;border-left:3px solid var(--accent,#b9852c);background:rgba(185,133,44,.08);border-radius:0 6px 6px 0}.merchant-sponsor p{margin:0 0 6px;line-height:1.6}.merchant-sponsor footer{font-size:.9em;opacity:.85}.merchant-sponsor footer small{margin-left:6px;opacity:.75}

/* 프로필 창의 차단·신고: 창 아래 왼쪽 구석, 다른 버튼과 떨어진 붉은 버튼 */
.dialog-inner #dialog-actions .profile-danger-actions{display:flex;gap:6px;margin-right:auto}
.dialog-inner #dialog-actions .profile-danger-actions .button{font-size:var(--apofarm-text-xs)}
.dialog-inner #dialog-actions .profile-danger{border-color:var(--apofarm-danger);background:var(--apofarm-danger-pale);color:var(--apofarm-danger)}
.dialog-inner #dialog-actions .profile-danger:hover{background:var(--apofarm-danger);color:var(--apofarm-on-dark)}

/* 일일 돌발 사건 팝업: 사건 글과 바뀐 것 한 줄. 큰 손해는 붉게 */
.incident-popup p{margin:0;line-height:1.75}
.incident-popup .incident-changes{margin-top:12px;padding-top:10px;border-top:1px dashed var(--apofarm-line);color:var(--apofarm-moss-deep);font-size:var(--apofarm-text-sm);font-weight:700}
.incident-popup.severe .incident-changes{color:var(--apofarm-danger)}
.incident-popup.madness>p:first-child{font-style:italic;letter-spacing:.01em}
.dialog-title-prefix{margin-right:.5em;font-size:.5em;font-weight:600;color:var(--apofarm-moss-deep);letter-spacing:0;vertical-align:baseline}

.num-stepper{display:inline-flex;align-items:stretch;gap:0}
.num-stepper input{width:58px;text-align:center;border-radius:0;-moz-appearance:textfield;appearance:textfield}
.num-stepper input::-webkit-outer-spin-button,.num-stepper input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.stepper-button {
  min-width:32px;
  min-height:32px;
  padding:0 8px;
  border:1px solid var(--apofarm-line-dark);
  background:var(--apofarm-surface-high);
  color:inherit;
  font-size:var(--apofarm-text-md);
  line-height:1;
  cursor:pointer;
}
.stepper-button:first-child{border-radius:var(--apofarm-radius-panel) 0 0 var(--apofarm-radius-panel);border-right:0}
.stepper-button:last-child{border-radius:0 var(--apofarm-radius-panel) var(--apofarm-radius-panel) 0;border-left:0}
.stepper-button:disabled{opacity:.5;cursor:default}
.trade-composer .field-label .num-stepper input{flex:1;min-width:0}
.trade-add .num-stepper input{width:52px}
.season-badge {
  display:inline-block;
  margin-left:6px;
  padding:1px 6px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  font-size:var(--apofarm-text-xs);
  vertical-align:middle;
}
.season-badge.in{color:var(--apofarm-ink)}
.season-badge.out{color:var(--apofarm-ink-soft);opacity:.8}

/* 친구 프로필의 건강·정신 게이지와 디버프(가는 줄 두 개 + 알약) */
.friend-vitals{margin:12px 0 0;padding:12px 14px;border:1px solid color-mix(in srgb, var(--apofarm-ink-soft) 40%, transparent);border-radius:12px;background:transparent;display:grid;gap:10px}
.friend-gauges{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px 16px}
.friend-gauge{display:grid;grid-template-columns:auto 1fr;gap:3px 8px;align-items:baseline;font-size:var(--apofarm-text-xs)}
.friend-gauge span{color:var(--apofarm-ink-soft)}
.friend-gauge b{text-align:right;font-weight:700}
.friend-gauge .meter{grid-column:1/-1;height:5px}
.friend-gauge .meter.health span{background:var(--apofarm-health)}
.friend-gauge .meter.mental span{background:var(--apofarm-fill-soil)}
.friend-debuffs{display:flex;flex-wrap:wrap;gap:4px;margin:0;font-size:var(--apofarm-text-xs)}
.friend-debuffs span{padding:1px 8px;border-radius:999px;border:1px solid var(--apofarm-danger);color:var(--apofarm-danger);font-weight:650}
.friend-debuffs em{color:var(--apofarm-ink-soft);font-style:normal}
/* 친구 관계 종류: 프로필 한 줄, 관계 수정 창의 선택 칸 */
.friend-relation-line{margin:4px 0 0;font-size:var(--apofarm-text-sm);color:var(--apofarm-ink)}
.button[aria-disabled="true"]{opacity:.42;cursor:not-allowed}
.friend-relation-mismatch{display:block;color:var(--apofarm-ink-soft);font-style:italic}
.relation-choices{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;margin:10px 0 0}
.relation-choice {
  display:grid;
  align-content:center;
  justify-items:center;
  gap:1px;
  min-height:0;
  padding:10px 8px;
  text-align:center;
  background:var(--apofarm-surface);
  border:1px solid var(--apofarm-line);
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-sm);
  cursor:pointer;
}
.relation-roles{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin:6px 0 0;font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.relation-roles[hidden]{display:none}
.relation-roles .relation-choice{padding:6px 12px}
.relation-choice[aria-pressed="true"]{border-color:var(--apofarm-moss);background:color-mix(in srgb, var(--apofarm-moss) 14%, var(--apofarm-surface));color:var(--apofarm-moss-deep)}
/* 친구 프로필 정리: 구역 제목, 관계 카드, 상태 카드, 같은 폭 단추 묶음. */
.profile-group{margin:14px 0 6px;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.profile-sub{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-sm)}
.player-bio{margin:12px 0 0;padding:10px 12px;border-radius:10px;background:color-mix(in srgb,var(--apofarm-ink) 6%,transparent);color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-sm)}
.player-bio::before{content:"“"}
.player-bio::after{content:"”"}
.profile-card{padding:12px 14px;border:0;border-radius:10px;background:color-mix(in srgb,var(--apofarm-ink) 6%,transparent)}
.friend-vitals.profile-card{margin:0}
.friend-bond{display:flex;align-items:center;gap:10px}
.friend-bond .meter{flex:1;min-width:40px;height:6px}
.friend-level-chip{padding:2px 10px;border-radius:999px;background:var(--apofarm-moss-pale);color:var(--apofarm-moss-deep);font-size:var(--apofarm-text-xs);font-weight:700;white-space:nowrap}
.friend-bond-text{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs);white-space:nowrap}
.friend-relation-sides{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px;font-size:var(--apofarm-text-sm)}
.friend-relation-sides span{display:block;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.friend-relation-card .friend-relation-mismatch{display:block;margin-top:6px;font-size:var(--apofarm-text-xs)}
.friend-effects{margin-top:8px;font-size:var(--apofarm-text-xs)}
.friend-effects summary{color:var(--apofarm-moss-deep);cursor:pointer}
.friend-effects p{margin:6px 0 0;color:var(--apofarm-ink-soft);line-height:1.6}
.friend-relation-edit{margin-top:6px;text-align:right}
.profile-action-groups{margin-top:0}
.profile-action-grid{display:grid;grid-template-columns:repeat(var(--cols,3),minmax(0,1fr));gap:6px}
.profile-action-grid .button{min-width:0;padding-inline:4px;font-size:var(--apofarm-text-xs);white-space:normal;word-break:keep-all}

/* 잔치 화면(docs/FEAST.md) */
.feast-screen{display:grid;gap:18px}
.feast-block{display:grid;gap:10px}
/* 내 잔치(신청과 준비): 공용 카드 안의 배치. */
.feast-actions{display:flex;flex-wrap:wrap;gap:8px}
/* 잔치 카드의 단추(수락·거절·취소)는 카드 오른쪽 맨 아래. 취소는 붉게. */
.feast-mine-card .feast-actions{justify-content:flex-end;margin-top:auto}
.button.feast-cancel{border-color:var(--apofarm-danger);background:var(--apofarm-danger);color:#fff}
.button.feast-cancel:hover{filter:brightness(.92)}
.feast-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin:0}
.feast-facts div{display:grid;gap:4px;min-width:0}
.feast-facts dt{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.feast-facts dd{margin:0;font-size:var(--apofarm-text-sm)}
.feast-form{display:grid;gap:14px}
.feast-form-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.feast-form label,.feast-menu label{display:grid;gap:8px;min-width:0;font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.feast-form select,.feast-menu input{min-width:0;min-height:40px}
.feast-form button,.feast-menu button{justify-self:start}
.feast-page{--feast-rose:#d2607a;--feast-rose-soft:rgba(210,96,122,.14);--feast-gold:#e7b85a}
/* 잔치 카드: 머리(이름 왼쪽, 사진·하트 오른쪽) → 위 줄(축하 | 잔칫상·한 솥) → 아래 줄(기념품 | 방명록).
   휴대폰은 한 줄로 쌓여 축하 → 잔칫상 → 한 솥 → 기념품 → 방명록 순서(마크업 순서 그대로). */
.feast-card{display:grid;gap:16px}
.feast-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:18px;padding:30px 2px 14px}
.feast-hero-copy{display:grid;justify-items:start;gap:8px;min-width:0}
.feast-hero-copy h2{margin:0;font-family:var(--apofarm-font-display);font-size:clamp(1.9rem,4vw,2.9rem);font-weight:700;line-height:1.2;overflow-wrap:anywhere}
.feast-hero-copy small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-sm)}
.feast-card.is-running .feast-hero-copy small::before{content:"";display:inline-block;width:7px;height:7px;margin-right:6px;border-radius:50%;background:var(--feast-rose);
  vertical-align:1px;animation:feast-blink 1.4s ease-in-out infinite}
.feast-hero-pair{display:flex;align-items:center;gap:10px}
.feast-hero-photo{display:grid;place-items:center;width:84px;height:84px;overflow:hidden;border-radius:50%;border:2px solid var(--feast-rose);
  background:var(--apofarm-surface);box-shadow:0 0 0 4px var(--feast-rose-soft);color:var(--apofarm-ink-soft)}
.feast-hero-photo .profile-photo{width:100%;height:100%;object-fit:cover;border-radius:0}
.feast-hero-photo svg{width:40px;height:40px}
/* 사진 사이의 하트 둘: 조금 겹쳐서 위아래로 어긋나게. */
.feast-hero-hearts{position:relative;width:38px;height:34px}
.feast-hero-hearts svg{position:absolute;width:22px;height:22px;fill:var(--feast-rose)}
.feast-hero-hearts svg:first-child{left:0;top:2px;opacity:.85}
.feast-hero-hearts svg:last-child{right:0;bottom:0;width:18px;height:18px;fill:var(--feast-gold)}
.feast-grid-top{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:16px;align-items:stretch}
.feast-side{display:grid;gap:16px;align-content:start}
.feast-grid-bottom{display:grid;grid-template-columns:minmax(200px,.42fr) minmax(0,1fr);gap:16px;align-items:stretch}
.feast-grid-bottom.is-single{grid-template-columns:minmax(0,1fr)}
/* 카드 상자·머리줄·본문 여백은 다른 화면과 같은 공용 규칙(farm-layout.css의 .feast-panel·.feast-panel-body). 여기서는 안쪽 배치만. */
.feast-panel{display:flex;flex-direction:column}
.feast-panel-body{display:flex;flex:1;flex-direction:column;gap:12px}
.feast-panel p{margin:0}
.feast-panel-sub{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-sm)}
.feast-panel-note{display:flex;align-items:center;gap:6px;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.feast-icon{flex:none;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.feast-panel-note .feast-icon{width:16px;height:16px}
.feast-panel .button{display:inline-flex;align-items:center;justify-content:center;gap:6px}
.feast-panel .button .feast-icon{width:17px;height:17px}
.feast-wide{width:100%;min-height:42px}
.feast-done{color:var(--feast-rose);font-size:var(--apofarm-text-sm)}
.feast-done::before{content:"✓ "}
/* 축하: 두 줄 문구 단추, 직접 쓰기. */
.feast-cheers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.feast-cheer{min-height:38px;padding:8px 10px;border:1px solid var(--apofarm-line);border-radius:8px;background:var(--apofarm-surface-high);color:inherit;font:inherit;font-size:var(--apofarm-text-sm);
  cursor:pointer;transition:background .15s ease,transform .1s ease}
.feast-cheer:hover{background:var(--feast-rose-soft)}
.feast-cheer:active{transform:scale(.98)}
.feast-cheer:focus-visible{outline:2px solid var(--feast-rose);outline-offset:1px}
.feast-say{display:grid;gap:8px}
.feast-say>label{font-weight:700;font-size:var(--apofarm-text-sm)}
.feast-cheer-say{margin-top:6px}
.feast-say-row{display:flex;gap:8px}
.feast-say-row input,.feast-say-row select,.feast-pot-select{flex:1;min-width:0;min-height:42px}
.feast-say-row .button{flex:none;min-height:42px;padding-inline:16px}
/* 잔칫상: 음식 알약이 가짓수만큼 한 줄을 가득 채운다(넘치면 다음 줄도 가득). 아래에 먹기. */
.feast-dishes{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}
.feast-dishes li{flex:1 1 84px;padding:7px 8px;border:1px solid var(--apofarm-line);border-radius:999px;background:var(--apofarm-surface-high);text-align:center;font-size:var(--apofarm-text-sm)}
/* 한 솥: 솥 그림 상자와 지금 상태, 재료 넣기. */
.feast-pill{margin-left:6px;padding:3px 10px;font-weight:400;border-radius:999px;background:var(--feast-rose-soft);color:var(--feast-rose);font-size:var(--apofarm-text-xs);white-space:nowrap}
.feast-pot-state{display:flex;align-items:center;gap:14px}
.feast-pot-state>div{display:grid;gap:3px}
.feast-pot-state small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.feast-pot-art{display:grid;place-items:center;flex:none;width:52px;height:52px;border:1px solid var(--apofarm-line);border-radius:10px;background:var(--apofarm-surface-high)}
.feast-pot-art .feast-icon{width:30px;height:30px}
.feast-pot.is-boiling .feast-pot-art .feast-icon{animation:feast-pot-bob 1.6s ease-in-out infinite}
@keyframes feast-pot-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
.feast-pot-select{display:flex;align-items:center;gap:8px;padding-left:12px;border:1px solid var(--apofarm-line);border-radius:6px;background:var(--apofarm-surface)}
.feast-pot-select span{flex:none;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.feast-pot-select select{flex:1;min-width:0;border:0;background:transparent}
/* 기념품: 그림 자리는 빈 틀. */
.feast-souvenir-item{display:flex;align-items:center;gap:14px;padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}
.feast-souvenir-item>span:last-child{display:grid;gap:3px}
.feast-souvenir-item:hover strong{text-decoration:underline}
.feast-souvenir-item:focus-visible{outline:2px solid var(--feast-rose);outline-offset:3px}
.feast-souvenir-item strong{font-size:var(--apofarm-text-md)}
.feast-souvenir-item small{color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
/* 그림 자리: 그림은 없이 한 솥의 솥 그림 상자와 같은 빈 틀만 둔다. */
.feast-souvenir-art{flex:none;width:52px;height:52px;border:1px solid var(--apofarm-line);border-radius:10px;background:radial-gradient(circle at 50% 45%,var(--feast-rose-soft),transparent 70%),var(--apofarm-surface-high)}
.feast-souvenir .button{margin-top:auto}
/* 놀이(잔치 중): 부케·퀴즈·떡메치기 카드. */
.feast-games{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch}
.feast-games.is-single .feast-game,.feast-games .feast-quiz{grid-column:1/-1}
.feast-quiz .feast-quiz-form{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));align-items:start}
.feast-quiz .feast-quiz-form button{grid-column:1/-1}
@media (max-width:640px){.feast-games{grid-template-columns:minmax(0,1fr)}}
.feast-game-result{padding:10px 12px;border-left:3px solid var(--feast-rose);background:var(--feast-rose-soft);font-size:var(--apofarm-text-sm)}
.feast-quiz-form{display:grid;gap:12px}
.feast-quiz-form fieldset{display:grid;gap:6px;margin:0;padding:0;border:0}
.feast-quiz-form legend{margin-bottom:4px;font-weight:700;font-size:var(--apofarm-text-sm)}
.feast-quiz-form label{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high);font-size:var(--apofarm-text-sm);cursor:pointer}
.feast-quiz-form label:has(input:checked){border-color:var(--feast-rose);background:var(--feast-rose-soft)}
.feast-quiz-form button{justify-self:stretch}
.feast-quiz-list{display:grid;gap:10px;margin:0;padding-left:20px}
.feast-quiz-list li{display:grid;gap:4px;font-size:var(--apofarm-text-sm)}
.feast-quiz-list span{display:flex;flex-wrap:wrap;gap:6px}
.feast-quiz-list em{padding:2px 8px;border:1px solid var(--apofarm-line);font-style:normal;font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.feast-quiz-list em.is-correct{border-color:var(--apofarm-moss);background:var(--apofarm-moss-pale);color:var(--apofarm-moss-deep);font-weight:700}
.feast-pound-gauge{height:14px;overflow:hidden;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.feast-pound-gauge i{display:block;height:100%;background:linear-gradient(90deg,var(--feast-gold),var(--feast-rose));transition:width .25s ease}
.feast-pound-button.is-pop{animation:feast-pound-hit .18s ease}
@keyframes feast-pound-hit{40%{transform:scale(.96) translateY(1px)}100%{transform:none}}
/* 퀴즈 문제 칸(내 잔치 차림표). */
.feast-quiz-edits{display:grid;gap:10px}
.feast-quiz-edit{display:grid;gap:8px;margin:0;padding:12px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.feast-quiz-edit legend{padding:0 4px;font-size:var(--apofarm-text-xs);color:var(--apofarm-ink-soft)}
.feast-quiz-edit input[name="quiz-question"]{min-height:40px}
.feast-quiz-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.feast-quiz-choice{display:flex;align-items:center;gap:8px;min-width:0}
.feast-quiz-choice input[name="quiz-choice"]{flex:1;min-width:0}
/* 동그라미(정답 고르기·퀴즈 답)는 입력칸 공용 모양을 받지 않게 작게 둔다. */
.feast-quiz-choice input[type="radio"],.feast-quiz-form input[type="radio"]{flex:none;width:16px;height:16px;min-width:0;min-height:0;margin:0;padding:0;accent-color:var(--feast-rose)}
@media (max-width:640px){.feast-quiz-choices{grid-template-columns:minmax(0,1fr)}}
@media (prefers-reduced-motion:reduce){.feast-pound-button.is-pop{animation:none}.feast-pound-gauge i{transition:none}}
/* 구름 가리기(주최자·운영진만). */
.feast-mod-list{display:grid;gap:6px;margin:0;padding:0;list-style:none;max-height:260px;overflow:auto}
.feast-mod-list li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.feast-mod-list li>span{display:grid;gap:2px;min-width:0}
.feast-mod-list small{overflow:hidden;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs);text-overflow:ellipsis;white-space:nowrap}
.feast-mod-list li.is-hidden b{text-decoration:line-through;opacity:.6}
/* 방명록: 따옴표가 붙은 한 줄씩. */
.feast-guestbook{display:grid;gap:4px;margin:0;padding:0;list-style:none}
/* 접힌 방명록: 밭 접기처럼 3줄 남짓만 보이고 아래로 흐려진다. */
.feast-guestbook.is-folded{max-height:132px;overflow:hidden;-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 52px),transparent);
  mask-image:linear-gradient(to bottom,#000 calc(100% - 52px),transparent)}
.feast-book .plot-fold{padding:0}
.feast-guestbook li{position:relative;padding:8px 8px 8px 26px;overflow-wrap:anywhere;font-size:var(--apofarm-text-sm)}
.feast-guestbook li::before{content:"\201C";position:absolute;left:6px;top:2px;color:var(--feast-gold);font-family:var(--apofarm-font-display);font-size:1.4em}
.feast-guestbook li b{margin-right:6px}
.feast-guestbook li.is-hidden{opacity:.5}
.feast-book form{margin-top:auto}
@media (max-width:860px){
  .feast-grid-top,.feast-grid-bottom{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:720px){
  .feast-hero{gap:12px}
  .feast-hero-photo{width:56px;height:56px}
  .feast-hero-photo svg{width:28px;height:28px}
  .feast-hero-hearts{width:28px;height:26px}
  .feast-hero-hearts svg{width:16px;height:16px}
  .feast-hero-hearts svg:last-child{width:13px;height:13px}
}
@media (max-width:460px){
  .feast-hero{grid-template-columns:minmax(0,1fr)}
  .feast-hero-pair{order:-1}
}
.fishing-cloud.feast-cloud.host{color:var(--apofarm-moss-deep);font-weight:800}
/* 잔치 배너(오른쪽 칸)와 하트·꽃 */
/* 이벤트 배너(104px)보다 얇게: 두 줄(상태·시각 / 이름 한 줄). 그림은 꽃이 가득한 꽃밭을 가까이서 본 모습(screens/feast.js meadowSvg),
   그 위로 오른쪽 위에서 번지는 햇빛(흐림 효과)과 천천히 움직이는 빛줄기. 글자가 읽히게 왼쪽을 밝게 덮는다. */
.rail-event-banner.feast-event-banner{position:relative;overflow:hidden;isolation:isolate;min-height:0;gap:.2rem;padding:.55rem 12px .6rem;border:1px solid #d9c9a8;
  border-left:4px solid #c2566a;background:#8cc06a;color:#2c2a22}
.rail-event-banner.feast-event-banner:hover{border-color:#e8c87a;border-left-color:#c2566a}
.feast-event-banner .rail-event-kicker{position:relative;color:#8a2a3e}
.feast-event-banner strong{position:relative;text-shadow:0 0 6px rgba(255,253,240,.95),0 1px 2px rgba(255,253,240,.9)}
.feast-banner-scene{position:absolute;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
/* 햇빛: 오른쪽 위 멀리 있는 해에서 빛줄기가 꽃밭에 비스듬히 내리꽂힌다(숲 사이로 비치는 햇살).
   노란 번짐(::before·glow)은 스크린 합성 약 50%로 눌러 뭉개지지 않게 한다. 글자 쪽(왼쪽)은 밝게 덮어 읽히게 한다. */
.feast-banner-scene::before{content:"";position:absolute;inset:0;z-index:1;mix-blend-mode:screen;opacity:.5;
  background:radial-gradient(ellipse 60% 120% at 85% -10%,rgba(255,246,214,.75) 0%,rgba(255,240,200,.25) 45%,rgba(255,240,200,0) 75%)}
.feast-banner-scene::after{content:"";position:absolute;inset:0;z-index:3;background:linear-gradient(90deg,rgba(255,252,238,.72) 0%,rgba(255,252,238,.38) 42%,rgba(255,252,238,0) 70%)}
.feast-banner-meadow{position:absolute;inset:0;width:100%;height:100%;display:block}
.feast-banner-scene i{position:absolute;z-index:2;display:block;mix-blend-mode:screen}
/* 그늘: 꽃밭 전체를 옅은 장밋빛으로 눌러(해 쪽은 옅게) 빛줄기가 도드라지게 한다. */
.feast-banner-scene .feast-banner-shade{inset:0;mix-blend-mode:multiply;
  background:linear-gradient(185deg,rgba(255,236,232,.4) 0%,rgba(214,168,182,.7) 60%,rgba(184,136,162,.85) 100%)}
.feast-banner-glow{top:-120%;right:-10%;width:60%;aspect-ratio:1;border-radius:50%;filter:blur(12px);opacity:.5;
  background:radial-gradient(circle,rgba(255,253,236,.9) 0%,rgba(255,246,210,.5) 30%,rgba(255,240,200,0) 70%);animation:feast-glow-breathe 11s ease-in-out infinite alternate}
/* 빛줄기 판: 배너 폭의 4배·높이의 12배. 해(원뿔 중심)는 배너 오른쪽 위로 멀리(배너 기준 가로 150%·세로 -600%, 판 기준 75%·16.67%)
   있어 빛줄기가 거의 나란히 비스듬히 내려온다. 밝은 꽃 위에서도 보이게 스크린이 아닌 보통 합성으로 얹고, 그 점을 축으로 조금씩 흔들린다. */
.feast-banner-scene i.feast-banner-rays{left:-150%;top:-800%;width:400%;height:1200%;transform-origin:75% 16.67%;filter:blur(1.5px);mix-blend-mode:normal;
  background:conic-gradient(from 196deg at 75% 16.67%,
    transparent 0deg,rgba(255,252,236,0.85) 0.45deg 1.05deg,transparent 1.5deg 2.9deg,rgba(255,252,236,0.65) 3.17deg 3.53deg,transparent 3.8deg 5.8deg,
    rgba(255,252,236,0.95) 6.4deg 7.2deg,transparent 7.8deg 9.3deg,rgba(255,252,236,0.7) 9.6deg 10deg,transparent 10.3deg 12.7deg,
    rgba(255,252,236,0.9) 13.18deg 13.82deg,transparent 14.3deg 15.6deg,rgba(255,252,236,0.6) 15.84deg 16.16deg,transparent 16.4deg 18.3deg,
    rgba(255,252,236,0.95) 18.87deg 19.63deg,transparent 20.2deg 22.4deg,rgba(255,252,236,0.75) 22.73deg 23.17deg,transparent 23.5deg 25deg,
    rgba(255,252,236,0.85) 25.45deg 26.05deg,transparent 26.5deg 28.5deg,rgba(255,252,236,0.65) 28.77deg 29.13deg,transparent 29.4deg 360deg);
  -webkit-mask:linear-gradient(180deg,#000 70%,rgba(0,0,0,.55) 78%,transparent 84%);
  mask:linear-gradient(180deg,#000 70%,rgba(0,0,0,.55) 78%,transparent 84%);
  animation:feast-rays-sway 14s ease-in-out infinite alternate}
/* 넓고 흐린 둘째 빛줄기: 다른 박자로 흔들리며 밝기가 오르내려 햇살이 일렁인다. */
.feast-banner-scene i.feast-banner-rays.is-soft{filter:blur(6px);
  background:conic-gradient(from 196deg at 75% 16.67%,transparent 0deg 2deg,rgba(255,248,214,.8) 4deg,transparent 6deg 9deg,
    rgba(255,248,214,.7) 11.5deg,transparent 14deg 16deg,rgba(255,248,214,.8) 19deg,transparent 22deg 360deg);
  animation:feast-rays-sway-soft 19s ease-in-out infinite alternate}
/* 반짝이는 흰 점: 빛줄기 위, 글자 덮개 아래. */
.feast-banner-scene .feast-banner-sparkles{position:absolute;inset:0;z-index:2;width:100%;height:100%;display:block;mix-blend-mode:screen}
.feast-sparkle{animation:feast-sparkle-twinkle 3.2s ease-in-out infinite}
@keyframes feast-sparkle-twinkle{0%,100%{opacity:1}50%{opacity:.15}}
@keyframes feast-glow-breathe{from{transform:scale(1);opacity:.42}to{transform:scale(1.15);opacity:.55}}
@keyframes feast-rays-sway{from{rotate:-1.5deg;opacity:.85}to{rotate:2deg;opacity:1}}
@keyframes feast-rays-sway-soft{from{rotate:2deg;opacity:.6}to{rotate:-2deg;opacity:.35}}
.feast-event-banner strong{width:100%;overflow:hidden;font-size:var(--apofarm-text-sm);text-overflow:ellipsis;white-space:nowrap}
.feast-event-banner.is-live .rail-event-kicker::before{content:"";display:inline-block;width:7px;height:7px;margin-right:6px;border-radius:50%;background:#d23b55;vertical-align:1px;animation:feast-blink 1.4s ease-in-out infinite}
.feast-dock-button.flower svg .petals,.feast-float.flower .petals{fill:#f2a7bd}
.feast-dock-button.flower svg .core,.feast-float.flower .core{fill:#f5c84c}
.feast-dock-button.heart svg path,.feast-float.heart path{fill:#e2445f}
@keyframes feast-blink{50%{opacity:.25}}
/* 하트·꽃 단추: 채팅·생존자 단추처럼 화면 아래에 떠 있다(자리는 feast-ui.js가 채팅 단추 왼쪽으로 맞춘다). */
/* 하트는 왼쪽 아래, 꽃은 오른쪽 위(자리는 feast-ui.js가 본문 칸에 맞춰 다시 잡는다). */
.feast-dock{display:contents}
.feast-dock-button{position:fixed;z-index:32}
.feast-dock-button.heart{left:18px;bottom:18px}
.feast-dock-button.flower{right:18px;top:calc(var(--apofarm-header-h) + 12px)}
.feast-dock-button{display:grid;place-items:center;width:52px;height:52px;padding:0;border:0;background:none;cursor:pointer;touch-action:manipulation;user-select:none;
  -webkit-tap-highlight-color:transparent}
.feast-dock-button svg{width:44px;height:44px;filter:drop-shadow(0 2px 4px rgba(60,20,30,.28));transition:transform .15s ease}
.feast-dock-button:hover svg{transform:scale(1.08)}
.feast-dock-button:focus-visible{outline:2px solid var(--apofarm-moss);outline-offset:2px;border-radius:50%}
.feast-dock-button.is-pop svg{animation:feast-pop .28s ease}
@keyframes feast-pop{40%{transform:scale(1.35)}100%{transform:scale(1)}}
.top-feast{position:relative}
.top-feast .top-settings-label{display:none}
.top-feast .nav-notice{position:absolute;top:4px;right:4px;margin:0;background:#d23b55}
.feast-floats{position:fixed;inset:0;z-index:31;pointer-events:none;overflow:hidden}
.feast-float{position:absolute;width:28px;height:28px;opacity:0;will-change:translate,scale,opacity}
.feast-float.flower{width:22px;height:22px;opacity:1;animation:feast-petal-path linear forwards,feast-petal-fade linear forwards}
.feast-float.flower svg{animation:feast-petal-sway var(--feast-sway-time) ease-in-out infinite alternate,feast-petal-spin 3.2s linear forwards}
@keyframes feast-petal-path{from{translate:0 0;scale:.35}12%{scale:var(--feast-scale)}to{translate:var(--feast-dx) var(--feast-fall);scale:var(--feast-scale)}}
@keyframes feast-petal-fade{0%{opacity:0}8%{opacity:1}78%{opacity:1}100%{opacity:0}}
@keyframes feast-petal-sway{from{translate:calc(var(--feast-sway) * -1) 0}to{translate:var(--feast-sway) 0}}
@keyframes feast-petal-spin{from{rotate:0deg}to{rotate:var(--feast-spin)}}

.feast-float svg{width:100%;height:100%;filter:drop-shadow(0 1px 2px rgba(0,0,0,.18))}
/* 하트: 바깥은 한 구간으로 부드럽게 떠오르고(처음엔 빠르게, 끝으로 갈수록 느리게), 안쪽 그림이 좌우로 살랑인다. */
.feast-float.heart{opacity:1;animation:feast-heart-path cubic-bezier(.2,.6,.35,1) forwards,feast-heart-fade linear forwards}
.feast-float.heart svg{animation:feast-petal-sway var(--feast-sway-time) ease-in-out infinite alternate,feast-petal-spin 5s ease-in-out forwards}
@keyframes feast-heart-path{from{translate:0 0;scale:.4}10%{scale:var(--feast-scale)}to{translate:var(--feast-dx) var(--feast-rise);scale:calc(var(--feast-scale) * .9)}}
@keyframes feast-heart-fade{0%{opacity:0}6%{opacity:1}70%{opacity:.95}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.feast-float{animation-duration:1.2s !important}.feast-event-banner.is-live .rail-event-kicker::before,.feast-banner-glow,.feast-banner-rays,.feast-sparkle,.feast-pot.is-boiling .feast-pot-art .feast-icon,.feast-card.is-running .feast-hero-copy small::before{animation:none}}
/* 잔치 2단계: 준비 퀘스트·잔칫상·한 솥·기념품 */
.feast-prep h4{margin:0 0 8px;font-size:var(--apofarm-text-sm)}
.feast-extra h3{margin:0;font-size:var(--apofarm-text-md)}
.feast-prep-sides{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}
.feast-prep-side ul,.feast-prep-log{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.feast-prep-side li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.feast-prep-side li span{display:grid;grid-template-columns:auto auto;align-items:baseline;gap:2px 10px}
.feast-prep-side li b{font-variant-numeric:tabular-nums}
.feast-prep-side li small{grid-column:1/-1;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.feast-prep-side li.is-done{opacity:.7}
.feast-prep-side li em{font-style:normal;font-size:var(--apofarm-text-sm);color:var(--apofarm-moss-deep)}
/* 차림표·축하 보기: 직접 적어 운영진 검토에 낸다. 머리줄 오른쪽에 검토 상태. */
.feast-menu{display:grid;gap:12px}
.feast-menu h4{margin:6px 0 0;font-size:var(--apofarm-text-md)}
/* 음식·축하 보기·퀴즈 칸은 같은 모양(두 줄 칸, 같은 글자 크기·높이). */
.feast-menu-dishes,.feast-menu-cheers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.feast-menu input:not([type="radio"]){min-height:40px;font-size:var(--apofarm-text-sm)}
.feast-review{padding:3px 10px;border-radius:999px;background:var(--apofarm-surface-high);border:1px solid var(--apofarm-line);font-weight:600}
.feast-review.is-pending{color:#9a6a12;border-color:#e2c27a;background:#fbf2dc}
.feast-review.is-rejected{color:#a33a4f;border-color:#e6a9b6;background:#fbe9ed}
.feast-review.is-approved{color:var(--apofarm-moss-deep);border-color:var(--apofarm-moss);background:var(--apofarm-moss-pale)}
.feast-review-note{padding:10px 12px;border-left:3px solid var(--apofarm-line-dark);background:var(--apofarm-surface-high);font-size:var(--apofarm-text-sm)}
.feast-review-note.is-pending{border-left-color:#e2c27a}
.feast-review-note.is-rejected{border-left-color:#d2607a}
.feast-review-note.is-approved{border-left-color:var(--apofarm-moss)}
@media (max-width:640px){.feast-form-fields,.feast-menu-cheers,.feast-menu-dishes{grid-template-columns:minmax(0,1fr)}}
.feast-prep-log li{font-size:var(--apofarm-text-sm);color:var(--apofarm-ink-soft)}

/* src/player-ui/farm-layout.css */
/* The new layout keeps the established APOFARM palette and control styles. */
.player-shell { display:block; min-height:100vh; }
.player-main { min-width:0; }
.top-nav {
  position:sticky; top:0; z-index:10;
  display:grid; grid-template-columns:auto minmax(0,1fr) auto; align-items:center; gap:20px;
  min-height:70px; padding:10px clamp(18px,2.4vw,38px);
  border-bottom:1px solid var(--apofarm-line); background:var(--apofarm-surface);
}
.top-nav .brand { justify-self:start; font-size:var(--apofarm-text-base); letter-spacing:.06em; white-space:nowrap; }
.top-nav .brand-link { border:0; background:none; padding:0; color:inherit; cursor:pointer; line-height:0; }
.top-nav .brand-link:focus-visible { outline:2px solid var(--apofarm-water); outline-offset:4px; }
.top-nav .nav-links { display:flex; align-items:center; justify-self:center; gap:4px; min-width:0; max-width:100%; overflow-x:auto; scrollbar-width:thin; padding:0; }
.top-nav .nav-links button {
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  flex:none; width:auto; min-height:42px; padding:8px 12px; border:0; border-bottom:2px solid transparent;
  border-radius:0; background:transparent; color:var(--apofarm-ink-soft); white-space:nowrap; font-size:var(--apofarm-text-sm);
}
.top-nav .nav-links button span { width:auto; font-size:inherit; text-align:left; }
.nav-links button>svg,.nav-links button>span,.mobile-nav button>svg,.mobile-nav button>span { color:inherit; }
.nav-links button>svg,.mobile-nav button>svg { stroke:currentColor; }
.top-nav .nav-links button.active { border-bottom-color:var(--apofarm-moss); background:transparent; color:var(--apofarm-moss-deep); }
.top-nav .nav-links button:hover { color:var(--apofarm-moss-deep); }
.top-nav .nav-links .nav-notice { margin-left:1px; }
.top-actions { display:flex; align-items:center; justify-self:end; gap:0; }
.top-actions button { display:inline-flex; align-items:center; justify-content:center; border:0; color:var(--apofarm-ink); }
.top-bag { gap:7px; min-height:36px; padding:5px 11px; border-radius:var(--apofarm-radius-pill); background:var(--apofarm-paper-deep); font-size:var(--apofarm-text-xs); }
.top-bag b { font-variant-numeric:tabular-nums; }
.top-profile { width:36px; height:36px; border-radius:50%; background:var(--apofarm-fill-moss); color:var(--apofarm-on-dark)!important; }

.farm-screen { display:grid; align-content:start; gap:16px; max-width:1640px; margin:0 auto; padding:18px clamp(16px,1.8vw,30px) 60px; }
.farm-sidebar,.farm-rail { display:grid; grid-template-columns:minmax(0,1fr); align-content:start; gap:16px; min-width:0; }
.farm-clock-card,.farm-status-card,.player-status-card,.farm-activity,.now-doing {
  padding:17px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
  box-shadow:var(--apofarm-shadow-soft);
}
.farm-clock-card { display:grid; gap:6px; }
.farm-clock-card .section-number { line-height:1.5; }
.farm-clock-card strong { font-family:var(--apofarm-font-body); font-size:var(--apofarm-text-4xl); font-weight:500; line-height:1.2; font-variant-numeric:tabular-nums; }
.farm-clock-main { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:baseline; gap:6px 8px; padding-bottom:12px; border-bottom:1px solid var(--apofarm-line); }
.farm-clock-main>strong { flex:none; white-space:nowrap; overflow-wrap:normal; }
.farm-clock-season-name {
  display:inline-flex;
  align-items:center;
  gap:4px;
  flex:none;
  margin-left:auto;
  padding:2px 0;
  border:0;
  background:none;
  color:inherit;
  font:inherit;
  font-size:var(--apofarm-text-sm);
  font-weight:700;
  white-space:nowrap;
  cursor:pointer;
}
.farm-clock-season-name span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); }
.farm-clock-season-name:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.farm-clock-next[hidden] { display:none; }
.farm-clock-season,.farm-clock-next { display:flex; justify-content:space-between; align-items:baseline; gap:8px; font-size:var(--apofarm-text-xs); line-height:1.5; }
.farm-clock-season { margin-top:5px; padding-top:10px; border-top:1px solid var(--apofarm-line); }
.farm-clock-next { flex-wrap:wrap; row-gap:4px; padding:10px 0 4px; }
.farm-clock-next>span { flex:1 1 7em; min-width:0; }
.farm-clock-next>b { margin-left:auto; }
.farm-clock-season span,.farm-clock-next span { color:var(--apofarm-ink-soft); }
.farm-clock-season b,.farm-clock-next b { flex:none; white-space:nowrap; font-variant-numeric:tabular-nums; }
.farm-clock-season b { color:var(--apofarm-moss-deep); }
.farm-clock-card .example-tag { margin-left:2px; }
.farm-clock-card>small { font-size:var(--apofarm-text-xs); line-height:1.5; }
.farm-clock-card .farm-time-test { justify-self:start; margin-top:4px; border-bottom:1px solid currentColor; text-align:left; }
.farm-clock-card .farm-time-offset { color:var(--apofarm-soil); }
.farm-clock-card .farm-reset-test { justify-self:start; margin-top:2px; border-bottom:1px solid currentColor; color:var(--apofarm-danger); text-align:left; }
.farm-reset-confirm { border-color:var(--apofarm-danger); background:var(--apofarm-danger-pale); color:var(--apofarm-danger); }
.preview-time-options { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; margin-top:14px; }
.preview-time-options .button { width:100%; }
.player-status-card h2 { margin:0; font-size:var(--apofarm-text-xl); line-height:1.2; }
.player-status-card p { margin:0 0 15px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.player-id { display:flex; align-items:center; gap:14px; margin-bottom:14px; }
.player-avatar {
  display:grid;
  place-items:center;
  flex:none;
  width:64px;
  height:64px;
  border-radius:50%;
  overflow:hidden;
  background:var(--apofarm-soil-pale);
  border:1px solid var(--apofarm-line-dark);
  color:var(--apofarm-soil-deep);
}
.player-id-text { display:grid; gap:2px; min-width:0; }
.player-id-text h2 { overflow-wrap:anywhere; }
.player-id-text .player-title { margin-top:0; }
.player-personality { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.player-level-row {
  display:flex;
  flex-wrap:wrap;
  justify-content:space-between;
  align-items:baseline;
  gap:4px 8px;
  margin-bottom:6px;
  font-size:var(--apofarm-text-xs);
  font-variant-numeric:tabular-nums;
}
.player-level-row b { flex:none; white-space:nowrap; color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-sm); }
.player-level-row span { color:var(--apofarm-ink-soft); }
.player-status-card>.meter { height:8px; border-radius:4px; }
.player-status-card>.meter span { border-radius:4px; }
.player-status-card .player-money { margin:12px 0 0; padding-bottom:14px; border-bottom:1px solid var(--apofarm-line); }
.player-status-heading { margin:14px 0 10px; font-family:var(--apofarm-font-body); font-size:var(--apofarm-text-sm); font-weight:700; }
.player-status-list { display:grid; gap:11px; }
.player-status-line>div:first-child { display:flex; justify-content:space-between; gap:8px; margin-bottom:5px; font-size:var(--apofarm-text-xs); }
.player-status-line b { font-variant-numeric:tabular-nums; }
.player-status-line .meter { height:5px; }
.player-status-line .meter.health span { background:var(--apofarm-health); }
.player-status-line .meter.satiety span { background:var(--apofarm-world); }
.player-status-line .meter.fatigue span { background:var(--apofarm-fill-moss); }
.player-status-line .meter.mental span { background:var(--apofarm-fill-soil); }
.farm-status-card h2 { margin:6px 0 17px; font-size:var(--apofarm-text-xl); white-space:nowrap; }
.farm-rail .farm-status-card h2 { white-space:normal; }
.farm-status-card .rail-water { padding:0 0 13px; }
.farm-status-card .rail-water-hint { font-size:var(--apofarm-text-2xs); }
.farm-status-line { display:flex; justify-content:space-between; gap:8px; padding:10px 0; border-bottom:1px solid var(--apofarm-line); font-size:var(--apofarm-text-xs); }
.farm-status-line:last-child { padding-bottom:0; border-bottom:0; }
.farm-status-line span { color:var(--apofarm-ink-soft); }
.farm-status-line b { white-space:nowrap; font-variant-numeric:tabular-nums; }
.farm-water-collect .rail-favorites { margin:24px 0 0; padding:18px 0 0; border:0; border-top:1px solid var(--apofarm-line); }
.farm-water-collect .rail-favorites-head { flex-wrap:wrap; margin-bottom:0; }
.collapsible-header { cursor:pointer; }
.rail-favorites-head h2,.farm-activity-head h2 { flex:1; min-width:0; }
.rail-favorites-head h2 .section-collapse-button,.farm-activity-head h2 .section-collapse-button,.field-section-title .section-collapse-button { width:100%; }
.collapsible-body[hidden] { display:none !important; }
.section-collapse-button {
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:28px;
  padding:0;
  border:0;
  background:none;
  color:inherit;
  font:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  text-align:left;
}
.section-collapse-button:hover { color:var(--apofarm-moss-deep); }
.section-chevron { flex:none; color:var(--apofarm-ink-faint); transition:transform .18s ease; }
.section-collapse-button[aria-expanded="false"] .section-chevron { transform:rotate(-90deg); }
.favorites-hint { display:block; margin:3px 0 12px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); }
.farm-status-card>.section-collapse-button { justify-content:space-between; width:100%; color:var(--apofarm-moss); font-size:var(--apofarm-text-xs); font-weight:700; letter-spacing:.12em; }
.farm-status-card>.section-collapse-button:hover { color:var(--apofarm-moss-deep); }

.farm-screen .field-area { min-width:0; }
/* 탭 맨 위 제목 칸(app.js pageIntro). 모든 탭이 내 농장과 같은 모양을 쓴다. */
.page-intro {
  min-width:0;
  padding:20px 24px;
  border:1px solid var(--apofarm-line);
  background:linear-gradient(120deg,var(--apofarm-moss-pale),var(--apofarm-paper-deep));
  box-shadow:var(--apofarm-shadow-soft);
}
.page-intro-head {
  display:flex; align-items:end; justify-content:space-between; gap:16px;
  min-height:72px;
}
.page-intro-head>div { display:grid; gap:4px; min-width:0; }
.page-intro-head small { color:var(--apofarm-ink); font-size:var(--apofarm-text-xs); }
.page-intro-head h1 { margin:0; font-family:var(--apofarm-font-display); font-size:var(--apofarm-text-2xl); font-weight:700; line-height:1.4; letter-spacing:0; word-break:keep-all; }
.page-intro-head .button { flex:none; min-height:36px; background:var(--apofarm-surface-high); font-size:var(--apofarm-text-xs); }
.page-intro-side { display:flex; flex:none; flex-direction:column; align-items:flex-end; gap:6px; }
.intro-badge {
  display:inline-flex;
  flex:none;
  align-items:center;
  gap:5px;
  min-height:36px;
  padding:0 12px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
  white-space:nowrap;
}
.intro-badge b { color:var(--apofarm-ink); font-variant-numeric:tabular-nums; }
/* 제목 칸의 버튼(내 농장의 부재중 기록)도 다른 화면의 제목 표시와 같은 모양으로 */
.intro-badge-button { font:inherit; font-size:var(--apofarm-text-xs); cursor:pointer; }
.intro-badge-button:hover { border-color:var(--apofarm-moss); color:var(--apofarm-ink); }
.intro-badge-button:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.page-intro-note { padding:11px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.6; }
.page-intro-note p { margin:0; }
.page-intro-note p+p { margin-top:4px; }
.page-intro-note b { color:var(--apofarm-moss-deep); font-variant-numeric:tabular-nums; }
/* 지금 상태 글(농장 상황 등)은 제목 다음으로 눈에 띄게. */
.page-intro-status { color:var(--apofarm-ink); font-weight:600; }
.farm-work-status { display:grid; gap:8px; padding:11px 18px; border:1px solid var(--apofarm-line); border-top:0; background:var(--apofarm-paper-deep); }
.farm-work-status>div:first-child { display:flex; justify-content:space-between; gap:12px; font-size:var(--apofarm-text-xs); }
.farm-work-status strong { color:var(--apofarm-ink); }
.farm-work-status span { color:var(--apofarm-ink-soft); }
.farm-work-queue { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.farm-work-status>div:first-child { align-items:baseline; flex-wrap:wrap; }
.farm-work-status>div:first-child span { margin-left:auto; }
.farm-work-status .text-button { font-size:var(--apofarm-text-xs); }
.farm-work-queue ol { display:grid; gap:2px; margin:4px 0 0; padding:0; list-style:none; }
.farm-work-queue li { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:3px 0; border-top:1px dashed var(--apofarm-line); }
/* 왼쪽 사이드바의 "지금 하는 일": 탐험·휴식·작업을 한 카드에. 좁은 폭에 맞춰 남은 시간은 아래 줄로 */
.now-doing { display:grid; gap:0; }
.now-doing h2 { margin:0 0 8px; font-family:var(--apofarm-font-body); line-height:1.5; }
.now-task { display:grid; padding:12px 0 0; border-top:1px solid var(--apofarm-line); }
.now-task:first-of-type { padding-top:0; border-top:0; }
.now-task+.now-task { margin-top:12px; }
.now-task-head { display:flex; flex-wrap:wrap; align-items:baseline; gap:3px 8px; margin-bottom:4px; }
.now-task-head strong { font-size:var(--apofarm-text-base); line-height:1.4; }
.now-line { display:flex; justify-content:space-between; align-items:baseline; gap:8px; padding:7px 0; border-top:1px solid var(--apofarm-line); font-size:var(--apofarm-text-xs); line-height:1.5; }
.now-line span { color:var(--apofarm-ink-soft); }
.now-line b { flex:none; white-space:nowrap; font-variant-numeric:tabular-nums; }
.now-task .meter { height:5px; margin:3px 0 0; }
.now-link {
  justify-self:start;
  margin-top:10px;
  padding:0;
  border:0;
  border-bottom:1px solid currentColor;
  background:none;
  color:var(--apofarm-ink);
  font:inherit;
  font-size:var(--apofarm-text-xs);
  font-weight:700;
  text-align:left;
  cursor:pointer;
}
.now-link:hover { color:var(--apofarm-moss-deep); }
.now-link:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.now-queue { margin-top:10px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.now-queue .now-line { padding-top:6px; }
.now-queue ol { display:grid; margin:0; padding:0; list-style:none; }
.now-queue li { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:5px 0; border-top:1px dashed var(--apofarm-line); }
.now-queue li .now-link { margin-top:0; flex:none; }
.now-queue>small { display:block; padding-top:6px; border-top:1px dashed var(--apofarm-line); }
.now-doing .now-place {
  display:inline-block;
  margin-right:6px;
  padding:0 5px;
  border:1px solid var(--apofarm-line-dark);
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-2xs, 11px);
  font-style:normal;
  font-weight:500;
}
.now-idle { margin:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
/* 할 일이 없을 때는 휴대폰에서 제목과 안내를 한 줄로. 넓은 화면의 왼쪽 칸은 좁아서 두 줄 그대로 둔다. */
@media (max-width:950px) {
  .now-doing.is-idle { display:flex; align-items:baseline; gap:10px; }
  .now-doing.is-idle h2 { flex:none; margin:0; }
  .player-shell .now-doing.is-idle { padding-top:10px; padding-bottom:10px; }
}
.field-section-title::before { content:""; flex:none; width:3px; height:20px; background:var(--apofarm-fill-moss); }
.field-section-title .section-collapse-button { gap:9px; }
/* 밭 한 줄(10칸) 선택·선택 취소 체크박스 줄 */
.plot-row-picks { display:flex; flex-wrap:wrap; gap:6px; padding:12px 16px 0; }
.field-heading-actions { display:flex; align-items:center; gap:12px; font-size:var(--apofarm-text-xs); color:var(--apofarm-ink-soft); }
.plot-grid-scroll { overflow-x:auto; scrollbar-width:thin; }
/* 밭 접기: 첫 줄은 그대로, 둘째 줄은 36px만 보이다가 아래로 흐려진다. 셋째 줄부터는 그리지 않는다. 더보기를 누르면 모두 열린다. */
:is(.farm-screen,.guild-field) .plot-grid.is-folded {
  grid-template-rows:auto 36px;
  grid-auto-rows:0;
  padding-bottom:0;
  overflow:hidden;
  -webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 52px),transparent);
  mask-image:linear-gradient(to bottom,#000 calc(100% - 52px),transparent);
}
:is(.farm-screen,.guild-field) .plot-grid.is-folded .plot-card:nth-child(n+21) { display:none; }
.plot-fold { display:flex; justify-content:center; padding:4px 16px 14px; }
.plot-fold-button {
  min-height:36px;
  padding:0 22px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-moss-deep);
  font-size:var(--apofarm-text-sm);
  font-weight:700;
  cursor:pointer;
}
.plot-fold-button:hover { background:var(--apofarm-moss-pale); }
.plot-fold-button:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
@media (pointer:coarse) { .plot-fold-button { min-height:44px; } }
:is(.farm-screen,.guild-field) .plot-grid {
  --plot-tilled-color:var(--apofarm-plot-tilled);
  grid-template-columns:repeat(10,minmax(0,1fr));
  min-width:570px;
  gap:5px;
  padding:15px 16px 20px;
  background:none;
}
:is(.farm-screen,.guild-field) .plot-card { display:flex; flex-direction:column; min-height:92px; background:var(--apofarm-soil-pale); border:1px solid var(--apofarm-line-dark); box-shadow:none; }
:is(.farm-screen,.guild-field) .plot-card:nth-child(n) { transform:none; }
:is(.farm-screen,.guild-field) .plot-card.state-bare { background:var(--apofarm-plot-bare); }
:is(.farm-screen,.guild-field) .plot-card.state-tilled { background:var(--plot-tilled-color); }
:is(.farm-screen,.guild-field) .plot-card.state-growing,
:is(.farm-screen,.guild-field) .plot-card.state-ready {
  background:var(--apofarm-moss-pale);
  background:linear-gradient(180deg,
    color-mix(in srgb,var(--apofarm-moss-pale) var(--plot-wet-top),var(--plot-tilled-color)),
    color-mix(in srgb,var(--apofarm-moss-pale) var(--plot-wet-bottom),var(--plot-tilled-color)));
}
:is(.farm-screen,.guild-field) .plot-card.state-ready {
  /* 수확할 수 있는 칸은 자라는 중인 칸(초록)과 한눈에 구분되도록 황금빛으로 칠한다. */
  background:color-mix(in srgb,var(--apofarm-plot-ready) 42%,var(--plot-tilled-color));
  border-color:var(--apofarm-plot-ready-line); box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--apofarm-plot-ready) 55%,transparent);
}
:is(.farm-screen,.guild-field) .plot-card.state-withered { background:var(--apofarm-plot-withered-bg); border-color:var(--apofarm-plot-withered-line); }
:is(.farm-screen,.guild-field) .plot-card.state-withered .plot-state-label { color:var(--apofarm-plot-withered-text); }
:is(.farm-screen,.guild-field) .plot-card.is-diseased { border-color:var(--apofarm-plot-diseased-line); box-shadow:inset 0 0 0 2px var(--apofarm-plot-diseased-glow); }
:is(.farm-screen,.guild-field) .plot-card.is-diseased .plot-state-label { color:var(--apofarm-plot-diseased-text); }
:is(.farm-screen,.guild-field) .plot-card.state-locked { background:var(--apofarm-surface); border-style:dashed; color:var(--apofarm-ink-soft); }
:is(.farm-screen,.guild-field) .plot-select { flex:1; align-items:center; gap:2px; min-height:70px; padding:5px 3px 3px; text-align:center; }
:is(.farm-screen,.guild-field) .plot-top { align-items:center; min-height:14px; font-size:var(--apofarm-text-2xs); }
:is(.farm-screen,.guild-field) .plot-top b { font-size:var(--apofarm-text-xs); }
:is(.farm-screen,.guild-field) .plot-top { position:relative; justify-content:center; }
:is(.farm-screen,.guild-field) .plot-top b { display:flex; flex-direction:column; align-items:center; gap:2px; text-align:center; }
:is(.farm-screen,.guild-field) .plot-top > span { position:absolute; top:0; right:2px; }
:is(.farm-screen,.guild-field) .plot-top .plot-tag { margin-left:0; max-width:100%; box-sizing:border-box; white-space:normal; word-break:keep-all; line-height:1.25; text-align:center; }
:is(.farm-screen,.guild-field) .plot-state-label { display:block; width:100%; margin-top:5px; font-size:var(--apofarm-text-2xs); font-weight:700; line-height:1.25; white-space:nowrap; }
:is(.farm-screen,.guild-field) .plot-select>strong { width:100%; font-size:var(--apofarm-text-2xs); font-weight:500; }
/* 밭 칸: 칸을 누르면 고르고(✓·테두리), 작물 칸 아래 게이지(남은 시간·진행 막대)를 누르면 상세가 열린다. */
:is(.farm-screen,.guild-field) .plot-top { width:100%; justify-content:space-between; gap:2px; padding:0 2px; }
:is(.farm-screen,.guild-field) .plot-top .plot-selected-mark { position:static; flex:none; color:var(--apofarm-moss-deep); font-weight:800; }
:is(.farm-screen,.guild-field) .plot-body { display:flex; flex:1; flex-direction:column; align-items:center; gap:3px; width:100%; }
:is(.farm-screen,.guild-field) .plot-tags { display:flex; flex-wrap:wrap; justify-content:center; gap:2px; }
:is(.farm-screen,.guild-field) .plot-tags .plot-tag { margin-left:0; }
:is(.farm-screen,.guild-field) .plot-body>strong {
  display:block;
  overflow:hidden;
  width:100%;
  max-width:100%;
  font-size:var(--apofarm-text-2xs);
  font-weight:600;
  white-space:nowrap;
  text-overflow:ellipsis;
}
/* 게이지: 누르면 작물 상세. 칸 선택 단추와 구분되게 아래에 붙이고 마우스를 올리면 살짝 밝아진다. */
:is(.farm-screen,.guild-field) .plot-gauge {
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:2px;
  width:100%;
  padding:3px 5px 6px;
  border:0;
  border-top:1px solid color-mix(in srgb,var(--apofarm-ink) 10%,transparent);
  background:transparent;
  color:var(--apofarm-ink);
  font:inherit;
  cursor:pointer;
}
:is(.farm-screen,.guild-field) .plot-gauge:hover { background:color-mix(in srgb,var(--apofarm-surface) 55%,transparent); }
:is(.farm-screen,.guild-field) .plot-gauge:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:-2px; }
:is(.farm-screen,.guild-field) .plot-time {
  display:block;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-2xs);
  font-variant-numeric:tabular-nums;
  line-height:1.25;
  word-break:keep-all;
}
:is(.farm-screen,.guild-field) .plot-time + .plot-progress { margin-top:2px; }
:is(.farm-screen,.guild-field) .plot-progress { display:block; width:100%; height:5px; border-radius:3px; background:color-mix(in srgb,var(--apofarm-ink) 12%,transparent); overflow:hidden; }
:is(.farm-screen,.guild-field) .plot-progress i { display:block; height:100%; background:var(--apofarm-fill-moss); }
:is(.farm-screen,.guild-field) .plot-card.state-ready .plot-progress i { background:var(--apofarm-plot-ready-line); }
.plot-zone-title { display:flex; align-items:center; gap:6px; margin:0; padding:12px 16px 0; font-family:var(--apofarm-font-body); font-size:var(--apofarm-text-sm); font-weight:700; }
.plot-zone-title span { color:var(--apofarm-ink-soft); font-weight:500; }
.info-tip {
  display:inline-grid;
  place-items:center;
  min-width:24px;
  min-height:24px;
  padding:0;
  border:0;
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-sm);
  cursor:help;
}
.action-hint { margin:0 0 8px; }
.water-short-note { display:flex; flex-wrap:wrap; align-items:center; gap:4px 10px; margin:0 0 8px; color:var(--apofarm-danger); }
.water-short-note .text-button { font-weight:700; }
.more-farm-actions { margin-top:7px; padding-top:7px; border-top:1px dashed var(--apofarm-line); }
.more-farm-actions[hidden] { display:none; }
.more-actions-toggle { align-self:center; white-space:nowrap; font-size:var(--apofarm-text-xs); }
:is(.farm-screen,.guild-field) .plot-card.selected { outline-color:var(--apofarm-moss-deep); }
.farm-facilities { min-width:0; border:1px solid var(--apofarm-line); background:var(--apofarm-surface); box-shadow:var(--apofarm-shadow-soft); }
.farm-facilities-count { flex:none; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-variant-numeric:tabular-nums; }
.farm-facilities-layout { display:grid; grid-template-columns:minmax(0,1fr) minmax(210px,.8fr); }
.farm-facilities-column { min-width:0; padding:20px 24px 24px; }
.farm-facilities-column + .farm-facilities-column { border-left:1px solid var(--apofarm-line); }
.farm-facilities-column h3 { margin:0 0 12px; font-size:var(--apofarm-text-sm); font-weight:700; }
.farm-facilities-group + .farm-facilities-group { margin-top:18px; padding-top:15px; border-top:1px solid var(--apofarm-line); }
.farm-subsection-header { display:flex; align-items:center; justify-content:space-between; gap:12px; min-height:32px; margin-bottom:7px; }
.farm-facilities-column .farm-subsection-header h3 { flex:1; min-width:0; margin:0; }
.farm-subsection-header .section-collapse-button { width:100%; color:var(--apofarm-ink); }
.farm-subsection-header>span { flex:none; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-variant-numeric:tabular-nums; }
.farm-installed-list { margin:0; padding:0; list-style:none; }
.farm-installed-list li { display:flex; justify-content:space-between; gap:12px; padding:10px 0; border-top:1px solid var(--apofarm-line); font-size:var(--apofarm-text-sm); }
.farm-installed-list li b { flex:none; font-variant-numeric:tabular-nums; }
  .farm-recipe-list { margin:0; padding:0; list-style:none; }
  .farm-recipe-list li { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:11px 0; border-top:1px solid var(--apofarm-line); }
  .farm-recipe-list li div { display:grid; gap:3px; min-width:0; }
  .farm-recipe-list li strong { font-size:var(--apofarm-text-sm); }
  .farm-recipe-list li small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.4; }
  .farm-recipe-list li .farm-recipe-status { color:var(--apofarm-moss); }
  .farm-recipe-list li .button { flex:none; min-height:34px; font-size:var(--apofarm-text-xs); }
.farm-facilities-empty { margin:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.farm-water-amount { margin:0 0 10px; font-variant-numeric:tabular-nums; }
.farm-water-amount strong { font-size:var(--apofarm-text-2xl); font-weight:650; }
.farm-water-amount span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }
.farm-water-collect .meter { height:6px; }
.farm-water-collect .button { margin-top:16px; min-height:38px; font-size:var(--apofarm-text-xs); }
.cooking-body, .crafting-body { padding:18px 24px 22px; }
.crafting .small-note { margin:0 0 10px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.crafting-group + .crafting-group { margin-top:16px; }
.crafting-group h3 { margin:0 0 4px; font-size:var(--apofarm-text-sm); font-weight:700; }
.crafting-group h3 span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-weight:500; }
.cooking-kit { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 10px; }
.cooking-kit span { padding:3px 8px; border:1px solid var(--apofarm-line); color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.cooking-kit span.ready { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); font-weight:650; }
.cooking .small-note { margin:0 0 10px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
:is(.cooking,.crafting) .filter-strip { display:flex; flex-wrap:wrap; gap:1px; margin:4px 0 8px; }
:is(.cooking,.crafting) .filter-strip button { min-height:34px; padding:6px 12px; font-size:var(--apofarm-text-xs); }
:is(.cooking,.crafting) .filter-strip .all-resources { margin-left:auto; }
.cook-ingredients { line-height:1.9; }
.cook-choice { white-space:nowrap; }
.cook-choice .ui-select { margin-left:3px; }
.cook-ingredients .cook-lacking { color:var(--apofarm-danger); font-weight:650; }
@media (max-width:640px){ .cooking-body, .crafting-body { padding:14px 12px 16px; } :is(.cooking,.crafting) .filter-strip .all-resources { margin-left:0; } }
.player-money { margin:4px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.player-money b { color:var(--apofarm-ink); font-variant-numeric:tabular-nums; }
.shop-table { border:1px solid var(--apofarm-line); }
.shop-row {
  display:grid;
  grid-template-columns:minmax(0,1fr) 92px 150px 190px;
  align-items:center;
  gap:10px;
  padding:9px 14px;
  border-bottom:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
}
.shop-row:last-child { border-bottom:0; }
.shop-row .resource-label { min-width:0; }
.shop-price { justify-self:end; font-variant-numeric:tabular-nums; font-size:var(--apofarm-text-sm); white-space:nowrap; }
.shop-owned { justify-self:end; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); white-space:nowrap; }
.shop-actions { display:flex; gap:6px; justify-content:flex-end; }
.shop-actions input {
  width:58px;
  min-height:32px;
  padding:4px 6px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  font-variant-numeric:tabular-nums;
}
.shop-actions .button { min-height:32px; padding:4px 12px; font-size:var(--apofarm-text-xs); }
.shop-screen .filter-strip { flex-wrap:wrap; }
@media (max-width:640px){
  .shop-row { grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"label actions" "meta actions"; gap:2px 10px; padding:9px 10px; }
  .shop-row .resource-label { grid-area:label; }
  .resources-screen .shop-row .resource-label:has(.season-badge) { grid-template-columns:minmax(0,1fr); }
  .resources-screen .shop-row .resource-label .season-badge { margin:-8px 0 4px; }
  .shop-meta { display:flex; grid-area:meta; align-items:baseline; gap:10px; }
  .shop-meta :is(.shop-price,.shop-owned) { justify-self:auto; }
  .shop-actions { grid-area:actions; align-self:center; }
}
.self-care .small-note { margin:0 0 10px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.self-care .small-note.self-care-intro { margin:0; padding:14px 24px; border-bottom:1px solid var(--apofarm-line); }
.self-care .farm-facilities-layout { grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); }
.self-care-sleep { display:flex; align-items:end; gap:10px; }
.self-care-sleep .ui-select { flex:1; min-width:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); gap:6px; }
.self-care-sleep .button { flex:none; min-height:38px; font-size:var(--apofarm-text-xs); }
.self-care-sleep + .small-note { margin-top:10px; }
.self-care-active { display:grid; gap:12px; padding:20px 24px 24px; }
.self-care-active p { margin:0; font-size:var(--apofarm-text-sm); line-height:1.6; }
.self-care-active .meter { height:6px; }
.self-care-active .button { justify-self:start; min-height:38px; font-size:var(--apofarm-text-xs); }
.self-care-busy { padding:0 24px 18px; }
/* 농장 관리: 물·나무 저장고를 나란히, 모으기 단추 하나 + 작은 "1개만". 설치된 시설은 한 줄 요약. */
.farm-stores { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
.farm-store { min-width:0; padding:16px 24px; }
.farm-stores .farm-wood-collect { margin-top:0; padding-top:16px; border-top:0; border-left:1px solid var(--apofarm-line); }
.farm-store h3 { margin:0 0 6px; font-size:var(--apofarm-text-sm); font-weight:700; }
.farm-store .meter { height:6px; }
.farm-store .farm-water-amount { margin-bottom:8px; }
.farm-store .farm-water-amount strong { font-size:var(--apofarm-text-xl); }
.farm-store-actions { display:flex; flex-wrap:wrap; align-items:center; gap:6px 12px; margin-top:12px; }
.farm-store-actions .button { margin-top:0; min-height:36px; padding:6px 12px; font-size:var(--apofarm-text-xs); }
.farm-store-one { font-size:var(--apofarm-text-xs); white-space:nowrap; }
.farm-facilities-summary { display:flex; justify-content:space-between; gap:12px; margin:0; padding:12px 24px; border-top:1px solid var(--apofarm-line); font-size:var(--apofarm-text-sm); }
.farm-facilities-summary span { color:var(--apofarm-ink-soft); }
.farm-facilities-summary b { text-align:right; }
.farm-facilities-body > .farm-facilities-group { padding:12px 24px 16px; border-top:1px solid var(--apofarm-line); }
.farm-facilities-body .farm-subsection-header h3 { flex:1; min-width:0; margin:0; font-size:var(--apofarm-text-sm); }
@media (max-width:640px) {
  .farm-store { padding:12px 14px; }
  .farm-stores .farm-wood-collect { padding-top:12px; }
  .farm-store-actions .button { flex:1 1 100%; }
  .farm-facilities-summary,.farm-facilities-body > .farm-facilities-group { padding-left:14px; padding-right:14px; }
}
/* 자기 관리: 휴식·수면·입원을 한 줄씩. 왼쪽 이름, 오른쪽 조작. 좁으면 아래로 내린다. */
.self-care-rows { display:grid; }
.self-care-row { display:grid; grid-template-columns:minmax(90px,140px) minmax(0,1fr); align-items:center; gap:8px 16px; padding:12px 24px; border-bottom:1px solid var(--apofarm-line); }
.self-care-row:last-child { border-bottom:0; }
.self-care-label h3 { margin:0; font-size:var(--apofarm-text-sm); }
.self-care-label small { display:block; margin-top:2px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); line-height:1.5; }
.self-care-label .self-care-alert { color:var(--apofarm-danger); font-weight:700; }
.self-care-choices { display:flex; flex-wrap:wrap; gap:6px; }
.self-care-choices .button { flex:1 1 auto; min-height:36px; padding:6px 10px; font-size:var(--apofarm-text-xs); }
.self-care .small-note.self-care-later { margin:0; }
.self-care-fold { display:inline-flex; align-items:center; gap:6px; padding:0; border:0; background:none; color:inherit; font:inherit; font-weight:700; cursor:pointer; }
.self-care-fold span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.self-care-hospital-body { display:grid; gap:8px; grid-column:1 / -1; }
.self-care-hospital-body[hidden],.self-care-sleep[hidden] { display:none; }
.self-care-hospital-body .small-note { margin:0; }
@media (max-width:640px) { .self-care-row { grid-template-columns:minmax(0,1fr); padding:10px 14px; } }

.farm-world-card { padding:18px; border:1px solid var(--apofarm-moss-deep); background:var(--apofarm-fill-moss-deep); color:var(--apofarm-on-dark); box-shadow:var(--apofarm-shadow-soft); }
.farm-world-card .section-number,.farm-world-card .example-tag { color:var(--apofarm-on-dark-soft); }
.farm-world-card .example-tag { border-color:var(--apofarm-on-dark-line); }
.farm-world-card .meter { margin-top:16px; background:var(--apofarm-on-dark-track); }
.farm-world-card .meter.world span { background:var(--apofarm-moss-pale); }
.farm-world-numbers { display:flex; justify-content:space-between; gap:8px; margin-top:8px; font-size:var(--apofarm-text-xs); font-variant-numeric:tabular-nums; }
.farm-world-remaining {
  display:flex;
  justify-content:space-between;
  gap:8px;
  margin-top:15px;
  padding-top:11px;
  border-top:1px solid var(--apofarm-on-dark-divider);
  color:var(--apofarm-on-dark-soft);
  font-size:var(--apofarm-text-xs);
}
.farm-world-remaining b { color:var(--apofarm-on-dark); font-variant-numeric:tabular-nums; white-space:nowrap; }
.farm-activity-head { display:flex; justify-content:space-between; align-items:center; gap:8px; }
.farm-activity h2 { margin:0; font-family:var(--apofarm-font-body); line-height:1.5; }
.farm-activity .text-button { white-space:nowrap; font-size:var(--apofarm-text-xs); }
.farm-activity ul { display:grid; margin:12px 0 0; padding:0; list-style:none; }
.farm-activity li { display:grid; grid-template-columns:44px minmax(0,1fr); gap:6px; padding:8px 0; border-top:1px solid var(--apofarm-line); font-size:var(--apofarm-text-xs); line-height:1.5; }
.farm-activity time { color:var(--apofarm-soil); font-variant-numeric:tabular-nums; }
.farm-activity p { margin:13px 0 0; font-size:var(--apofarm-text-xs); color:var(--apofarm-ink-soft); }
.journal-list { max-height:min(60vh,500px); overflow-y:auto; }
.farm-rail .rail-telegram { margin:0; min-width:0; box-shadow:var(--apofarm-shadow-soft); }
/* 공지 제목이 줄어들지 않고 카드 밖으로 밀려나던 것을 막는다(제목은 두 줄까지, 길면 줄바꿈). */
.rail-telegram .rail-telegram-head { min-width:0; }
.rail-telegram h2 { flex:1 1 0; min-width:0; overflow-wrap:anywhere; word-break:keep-all; }

.shipment-screen { display:grid; align-content:start; gap:16px; max-width:none; margin:0; padding:18px clamp(16px,1.8vw,30px) 60px; }
.shipment-explainer { margin:0 0 21px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.6; }
.shipment-fields { display:grid; grid-template-columns:minmax(0,1fr) minmax(130px,.45fr); gap:16px; }
.shipment-field { display:grid; align-content:start; gap:8px; min-width:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.shipment-field input {
  width:100%;
  min-width:0;
  min-height:42px;
  padding:8px 11px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
}
.shipment-preview {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:14px;
  margin-top:22px;
  padding:15px 0;
  border-top:1px solid var(--apofarm-line);
  border-bottom:1px solid var(--apofarm-line);
}
.shipment-preview>div { display:flex; align-items:baseline; gap:14px; }
.shipment-preview span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }
.shipment-preview strong { font-size:var(--apofarm-text-2xl); font-weight:650; font-variant-numeric:tabular-nums; white-space:nowrap; }
.shipment-preview small { font-size:var(--apofarm-text-xs); text-align:right; }
.shipment-submit { display:flex; justify-content:space-between; align-items:center; gap:14px; margin-top:20px; }
.shipment-submit span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.shipment-submit .button { flex:none; }
/* 출하 기록 아래 덧붙는 칸: 길드 이름으로 출하, 의식 고정 */
.shipment-extra { display:grid; gap:8px; margin-top:20px; padding-top:16px; border-top:1px solid var(--apofarm-line); }
.shipment-extra .small-note { margin:0; }
.shipment-progress-head { display:flex; justify-content:space-between; align-items:baseline; gap:12px; margin-bottom:12px; }
.shipment-progress-head strong { font-size:var(--apofarm-text-3xl); font-weight:650; font-variant-numeric:tabular-nums; }
.shipment-progress-head strong small { font-size:var(--apofarm-text-md); font-weight:400; }
.shipment-progress-head>b { color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-sm); font-variant-numeric:tabular-nums; }
.shipment-world-body .meter { height:7px; }
.shipment-world-body p { margin:13px 0 20px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.shipment-world-remaining { display:flex; justify-content:space-between; align-items:baseline; gap:16px; padding-top:18px; border-top:1px solid var(--apofarm-line); }
.shipment-world-remaining span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.shipment-world-remaining strong { color:var(--apofarm-ink); font-size:clamp(1.35rem,2.5vw,1.75rem); font-weight:650; line-height:1.2; font-variant-numeric:tabular-nums; white-space:nowrap; }

.resources-screen,.explore-screen,.npc-screen { display:grid; align-content:start; gap:16px; max-width:none; margin:0; padding:18px clamp(16px,1.8vw,30px) 60px; }
/* 탭 안의 섹션(상자 + 머리줄 + 본문). 모든 탭(.screen)이 같은 규칙을 쓴다. */
.resource-ledger,.explore-scene,.explore-decisions,.npc-quests,.npc-columns .social-section,.character-block,.shipment-work,.shipment-world,.feast-panel {
  min-width:0;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
  box-shadow:var(--apofarm-shadow-soft);
}
/* 요약 문구가 길면 제목을 짓누르지 않고 다음 줄로 내려간다. */
.screen .section-heading { flex-wrap:wrap; row-gap:4px; align-items:center; padding:18px 24px 14px; border-bottom:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.screen .section-heading .field-section-title {
  display:flex;
  flex:1 0 auto;
  min-width:0;
  max-width:100%;
  align-items:center;
  gap:11px;
  margin:0;
  color:var(--apofarm-ink);
  font-family:var(--apofarm-font-body);
  font-size:var(--apofarm-text-xl);
  font-weight:650;
  letter-spacing:-.025em;
  line-height:1.3;
}
.screen .section-heading>span { flex:0 1 auto; min-width:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-variant-numeric:tabular-nums; }
.resource-ledger-body,.explore-scene-body,.explore-decisions-body,.npc-quests-body,.npc-columns .social-body,.shipment-work-body,.shipment-world-body,.auto-explore-plan-body,.auto-explore-report-body,.feast-panel-body { padding:22px 24px 24px; }
.resources-screen .resource-controls { align-items:end; margin:0; padding-bottom:17px; border-bottom:1px solid var(--apofarm-line); }
.resources-screen .tab-strip { align-self:stretch; align-items:end; }
.resources-screen .tab-strip button,.resources-screen .filter-strip button { min-height:40px; padding:8px 13px; font-size:var(--apofarm-text-xs); }
.resources-screen .resource-controls input { width:min(270px,28vw); }
.resources-screen .filter-strip { gap:1px; align-items:center; margin:12px 0 16px; }
.resources-screen .filter-strip .all-resources { margin-left:auto; white-space:nowrap; }
.resources-screen .bag-actions { display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-end; gap:8px; margin:0 0 10px; }
.resources-screen .bag-actions span { margin-right:auto; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.resources-screen .bag-actions .button { min-height:32px; padding:5px 10px; font-size:var(--apofarm-text-xs); }
.resources-screen .resource-table { display:grid; grid-template-columns:minmax(0,1fr); overflow-x:auto; border:1px solid var(--apofarm-line); }
.resources-screen .resource-head,.resources-screen .resource-row { grid-template-columns:50px minmax(0,1fr) 86px 90px; gap:8px; padding:10px 14px; }
.resources-screen .resource-head:not(.bag-resource-head),.resources-screen .resource-row:not(.bag-resource-row) { padding-left:6px; }
.resources-screen .bag-resource-head,.resources-screen .bag-resource-row { grid-template-columns:30px minmax(0,1fr) 58px 76px 148px; padding-left:8px; }
.resources-screen .resource-head span { justify-self:center; text-align:center; }
.resources-screen .resource-head span:first-child { font-size:var(--apofarm-text-2xs); white-space:nowrap; }
.resources-screen .resource-row>span,.resources-screen .resource-row>b { justify-self:center; text-align:center; }
.resources-screen .resource-head { background:var(--apofarm-paper-deep); }
.resources-screen .resource-row { padding-top:7px; padding-bottom:7px; }
.resources-screen .star-button { display:inline-flex; align-items:center; justify-content:center; justify-self:center; padding:0; }
.resources-screen .star-button span { font-family:"Malgun Gothic",Arial,sans-serif; font-size:var(--apofarm-text-lg); font-weight:400; line-height:1; }
.resources-screen .bag-row-actions { display:flex; justify-content:center; gap:5px; }
.resources-screen .bag-row-actions button {
  min-height:28px;
  padding:4px 7px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-control);
  background:transparent;
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-xs);
  font-weight:650;
  white-space:nowrap;
}
.resources-screen .bag-row-actions button:hover:not(:disabled) { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); }
.resources-screen .resource-row:last-child { border-bottom:0; }
.resources-screen .resource-label { display:grid; gap:2px; min-width:0; text-align:left; }
.resources-screen .resource-name-button {
  width:max-content;
  max-width:100%;
  min-width:0;
  padding:0;
  overflow:hidden;
  border:0;
  background:none;
  color:inherit;
  font-size:var(--apofarm-text-sm);
  font-weight:700;
  text-align:left;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.resources-screen .resource-name-button:hover { color:var(--apofarm-moss-deep); text-decoration:underline; text-underline-offset:3px; }
.resources-screen .resource-description {
  display:block;
  width:100%;
  min-width:0;
  padding:0;
  border:0;
  background:none;
  font-family:inherit;
  text-align:left;
  cursor:pointer;
  overflow:hidden;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
  font-weight:400;
  line-height:1.25;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.resources-screen .bag-select { justify-self:center; width:16px; height:16px; margin:0; accent-color:var(--apofarm-moss-deep); cursor:pointer; }
.bag-use-target { display:grid; gap:6px; margin-top:14px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.resources-screen .resource-ledger-body>.small-note { margin:13px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.resources-screen .empty-note { margin:0; padding:25px 14px; font-size:var(--apofarm-text-sm); }
.story-prose { display:grid; gap:13px; }
.story-prose p { margin:0; font-size:var(--apofarm-text-md); line-height:1.85; }
.explore-decisions-body { display:grid; gap:18px; }
.explore-decisions .party-note { padding:0 0 16px; border:0; border-bottom:1px solid var(--apofarm-line); background:transparent; }
.explore-decisions .party-note h3 { margin:0 0 12px; font-size:var(--apofarm-text-sm); font-weight:700; }
.party-people { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
.explore-decisions .party-note p {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:8px;
  min-width:0;
  margin:0;
  padding:9px 11px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface-high);
  font-size:var(--apofarm-text-xs);
}
.explore-decisions .party-note p span { display:inline-flex; align-items:center; gap:5px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); text-align:right; }
.explore-decisions .party-note small { display:block; margin-top:11px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.explore-decisions .choice-list { gap:0; padding:0; border:1px solid var(--apofarm-line); }
.explore-decisions .explore-choice-row { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; border-bottom:1px solid var(--apofarm-line); background:var(--apofarm-surface); }
.explore-decisions .explore-choice-row:last-child { border-bottom:0; }
.explore-decisions .explore-choice-row.active { box-shadow:inset 3px 0 var(--apofarm-moss); background:var(--apofarm-moss-pale); }
.explore-decisions .explore-choice {
  grid-template-columns:minmax(0,1fr) auto;
  align-items:center;
  gap:4px 12px;
  min-height:64px;
  padding:13px 15px;
  border:0;
  border-bottom:1px solid var(--apofarm-line);
  border-radius:0;
  background:var(--apofarm-surface);
}
.explore-decisions .explore-choice-row .explore-choice { width:100%; border:0; background:transparent; box-shadow:none; }
.explore-decisions .explore-choice:last-child { border-bottom:0; }
.explore-decisions .explore-choice:hover { background:var(--apofarm-moss-pale); }
.explore-decisions .explore-choice.active { box-shadow:inset 3px 0 var(--apofarm-moss); background:var(--apofarm-moss-pale); }
.explore-decisions .explore-choice-row .explore-choice.active { box-shadow:none; background:transparent; }
.explore-decisions .explore-choice strong { font-size:var(--apofarm-text-sm); font-weight:650; line-height:1.4; }
.explore-decisions .explore-choice small { color:var(--apofarm-ink-soft); white-space:nowrap; }
.explore-decisions .explore-choice em { grid-column:1/-1; font-style:normal; }
.explore-choice-votes { display:flex; gap:5px; padding:8px 12px 8px 0; }
.explore-choice-votes button {
  min-height:31px;
  padding:5px 9px;
  border:1px solid var(--apofarm-line);
  border-radius:var(--apofarm-radius-panel);
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
  white-space:nowrap;
}
.explore-choice-votes button[aria-pressed="true"] { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); font-weight:700; }
.explore-choice-votes button:hover { border-color:var(--apofarm-moss); color:var(--apofarm-moss-deep); }
.explore-decisions .choice-actions { justify-content:flex-end; padding-top:2px; }
.explore-decisions .small-note { margin:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.explore-mode-tabs { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
.explore-mode-tabs button {
  display:grid;
  gap:4px;
  min-width:0;
  padding:14px 17px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-md);
  font-weight:650;
  text-align:left;
  box-shadow:var(--apofarm-shadow-soft);
}
.explore-mode-tabs button:hover { border-color:var(--apofarm-moss); }
.explore-mode-tabs button.active { border-color:var(--apofarm-moss); box-shadow:inset 3px 0 var(--apofarm-moss),var(--apofarm-shadow-soft); background:var(--apofarm-moss-pale); }
.explore-mode-tabs button:disabled { cursor:not-allowed; opacity:.6; }
/* 탐험 방식 아이콘: 구역 탭처럼 평소엔 흐린 글자색, 고르면 이끼색 */
.explore-mode-tabs button { grid-template-columns:auto minmax(0,1fr); column-gap:10px; align-items:center; }
.explore-mode-tabs .tab-icon { grid-row:span 2; width:22px; height:22px; color:var(--apofarm-ink-soft); }
.explore-mode-tabs button.active .tab-icon, .explore-mode-tabs button:not(:disabled):hover .tab-icon { color:var(--apofarm-moss-deep); }
.explore-mode-tabs small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-weight:400; line-height:1.4; }
.auto-explore-plan,.auto-explore-report { min-width:0; border:1px solid var(--apofarm-line); background:var(--apofarm-surface); box-shadow:var(--apofarm-shadow-soft); }
.auto-explore-plan-body>p:first-child,.auto-explore-report-body>p { margin:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.7; }
.auto-explore-party {
  display:flex;
  justify-content:space-between;
  gap:12px;
  margin-top:16px;
  padding:11px 0;
  border-top:1px solid var(--apofarm-line);
  border-bottom:1px solid var(--apofarm-line);
  font-size:var(--apofarm-text-xs);
}
.auto-explore-party span { color:var(--apofarm-ink-soft); }
.auto-explore-party b { font-weight:650; text-align:right; }
.auto-explore-controls { display:flex; align-items:end; gap:16px; margin:20px 0; }
.auto-explore-controls label { display:grid; gap:7px; flex:1; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.auto-explore-controls .button { flex:none; min-height:42px; }
.auto-explore-plan-body>.small-note { margin:0; padding-top:14px; border-top:1px solid var(--apofarm-line); color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
/* 수동·자동탐험 준비: 구분선 없이 설명 → 파티·비용 상자 → 안내 → 오른쪽 아래 출발 버튼 */
.tidy-plan .auto-explore-plan-body>.small-note { margin-top:10px; padding-top:0; border-top:0; }
.tidy-plan .plan-facts { display:grid; gap:2px; margin-top:16px; padding:8px 14px; background:var(--apofarm-surface-high); }
.tidy-plan .plan-facts .auto-explore-party { margin:0; padding:6px 0; border:0; }
.tidy-plan .plan-facts .auto-explore-party { align-items:center; }
.tidy-plan .plan-facts label { color:var(--apofarm-ink-soft); }
.auto-explore-live { margin-top:16px; }
.auto-explore-entries.long { max-height:480px; overflow-y:auto; padding-right:6px; }
.auto-recall-vote { display:flex; flex-wrap:wrap; align-items:center; gap:8px 14px; margin-top:12px; }
.auto-recall-vote small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.auto-explore-live h3 { display:flex; align-items:baseline; gap:8px; margin:0 0 8px; font-size:var(--apofarm-text-sm); }
.auto-explore-live h3 small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-weight:400; }
.party-risk.risk-high { color:var(--apofarm-danger, #9b3b2f); }
.tidy-plan .plan-facts .risk-high b { color:var(--apofarm-danger, #9b3b2f); }
.tidy-plan .plan-start { display:flex; justify-content:flex-end; margin-top:18px; }
.tidy-plan .plan-start .button { min-height:42px; }
.auto-explore-state { display:block; margin:0 0 8px; font-size:var(--apofarm-text-lg); font-weight:650; }
.auto-explore-report-body .meter { margin:18px 0 12px; height:7px; }
.auto-explore-report-body .auto-explore-remaining { display:flex; justify-content:space-between; gap:12px; padding-top:12px; border-top:1px solid var(--apofarm-line); }
.auto-explore-remaining b { color:var(--apofarm-ink); font-variant-numeric:tabular-nums; }
.auto-explore-entries { display:grid; gap:0; margin:18px 0; padding:0; list-style:none; border-top:1px solid var(--apofarm-line); }
.auto-explore-entries li { display:grid; grid-template-columns:70px minmax(0,1fr); gap:12px; padding:12px 0; border-bottom:1px solid var(--apofarm-line); }
.auto-explore-entries li span { color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-xs); font-weight:700; white-space:nowrap; }
.auto-explore-entries li div { display:grid; gap:7px; min-width:0; }
.auto-explore-entries li p { margin:0; font-size:var(--apofarm-text-xs); line-height:1.6; }
.auto-explore-entries li .auto-explore-opening { font-weight:650; }
.auto-explore-entries li .auto-explore-event-type {
  display:inline-block;
  margin-right:8px;
  padding:1px 6px;
  border:1px solid var(--apofarm-line);
  color:var(--apofarm-moss-deep);
  font-size:var(--apofarm-text-xs);
  font-weight:700;
  vertical-align:baseline;
}
.auto-explore-entries li.auto-explore-quiet { opacity:.72; }
.auto-explore-entries li.auto-explore-quiet p { color:var(--apofarm-ink-soft); }
.auto-explore-entries li p b { margin-right:5px; color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-xs); }
.auto-explore-entries li small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.55; }
.auto-explore-entries li .auto-explore-loot { padding:7px 9px; border-left:2px solid var(--apofarm-moss); background:var(--apofarm-moss-pale); }
/* 수동탐험: 방금 고른 선택의 결과를 현장 맨 위에 강조 */
.explore-last-result { margin-bottom:18px; padding:12px 14px; border:1px solid var(--apofarm-moss); border-left-width:4px; background:var(--apofarm-moss-pale); }
.explore-last-result h3 { margin:0; color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-sm, 14px); font-weight:800; }
.explore-last-result .auto-explore-entries { margin:8px 0 0; border-top:0; }
.explore-last-result .auto-explore-entries li:last-child { border-bottom:0; padding-bottom:0; }
.explore-last-result .auto-explore-entries li.auto-explore-quiet { opacity:1; }
.explore-last-result .auto-explore-entries li p { font-size:var(--apofarm-text-sm, 14px); }
.auto-explore-inbox { margin:20px 0; padding:16px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.auto-explore-inbox h3 { margin:0 0 10px; font-size:var(--apofarm-text-md); }
.auto-explore-inbox ul { margin:0; padding:0; list-style:none; }
.auto-explore-inbox li { display:flex; justify-content:space-between; gap:12px; padding:7px 0; border-top:1px solid var(--apofarm-line); font-size:var(--apofarm-text-xs); }
.auto-explore-inbox li b { font-variant-numeric:tabular-nums; }
.auto-explore-inbox p { margin:12px 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.auto-explore-inbox .button { min-height:38px; font-size:var(--apofarm-text-xs); }
.auto-explore-history { margin-top:22px; padding-top:17px; border-top:1px solid var(--apofarm-line); }
.auto-explore-history h3 { margin:0 0 8px; font-size:var(--apofarm-text-sm); }
.auto-explore-history details { border-bottom:1px solid var(--apofarm-line); }
.auto-explore-history summary { padding:11px 0; cursor:pointer; font-size:var(--apofarm-text-xs); }
.auto-explore-history .auto-explore-entries { margin:0 0 12px; }
/* 교류 화면: 제목 아래 의뢰(왼쪽)와 친구(오른쪽)를 1:1로. 950px 이하에서는 한 줄로 쌓고 친구를 먼저 둔다. */
.npc-columns { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); align-items:start; gap:16px; }
.npc-columns.single { grid-template-columns:minmax(0,1fr); }
.npc-columns .social-section { margin-bottom:0; }
@media (max-width:950px){
  .npc-columns { grid-template-columns:minmax(0,1fr); }
  .npc-columns .social-section { order:-1; }
}
.npc-list { display:grid; grid-template-columns:repeat(auto-fit,minmax(250px,1fr)); align-items:stretch; gap:14px; }
.npc-card { display:flex; flex-direction:column; min-width:0; padding:19px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface); box-shadow:var(--apofarm-shadow-soft); }
.npc-card-heading { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }
.npc-card-heading h2 { margin:0; font-family:var(--apofarm-font-body); font-size:var(--apofarm-text-lg); font-weight:700; }
.npc-card-heading span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.npc-dialogue { min-height:46px; margin:13px 0 16px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.npc-quest { display:flex; flex:1; flex-direction:column; margin-top:auto; padding-top:14px; border-top:1px solid var(--apofarm-line); }
.npc-quest-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }
.npc-quest-head h3 { margin:0; font-size:var(--apofarm-text-md); }
.npc-quest-head small { flex:none; color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-xs); }
.npc-quest>p { margin:9px 0 15px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.npc-quest-exchange { margin-top:auto; display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-bottom:16px; }
.npc-quest-exchange>div { display:grid; align-content:start; gap:4px; padding:10px; border:1px solid var(--apofarm-line); background:var(--apofarm-paper); }
.npc-quest-exchange span,.npc-quest-exchange small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.npc-quest-exchange strong { font-size:var(--apofarm-text-xs); line-height:1.4; }
.npc-quest .button { width:100%; font-size:var(--apofarm-text-xs); }
.npc-quest .npc-completed { margin-bottom:0; color:var(--apofarm-moss-deep); }
.npc-empty { margin:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }

@media (min-width:951px){
  .player-shell { --farm-left-width:clamp(210px,19vw,260px); --farm-right-width:clamp(240px,21vw,300px); }
  .player-main { margin:0 var(--farm-right-width) 0 var(--farm-left-width); }
  .farm-screen { max-width:none; margin:0; padding:18px clamp(16px,1.8vw,30px) 60px; }
  .farm-sidebar,.farm-rail {
    position:fixed; z-index:4; top:var(--apofarm-header-h); bottom:0;
    overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin;
    padding:18px 16px 30px; background:var(--apofarm-surface);
  }
  .farm-sidebar { left:0; width:var(--farm-left-width); border-right:1px solid var(--apofarm-line); }
  .farm-sidebar,.farm-rail { gap:12px; padding:14px 14px 18px; }
  .farm-clock-card,.farm-status-card,.player-status-card,.farm-activity,.now-doing { padding:14px 15px; }
  .farm-clock-card { gap:4px; }
  .farm-clock-card strong { font-size:var(--apofarm-text-3xl); }
  .farm-clock-main { padding-bottom:9px; }
  .farm-clock-next { padding:8px 0 3px; }
  .player-status-card h2 { margin:6px 0 2px; }
  .player-status-card p { margin-bottom:11px; }
  .player-status-list { gap:8px; }
  .farm-activity ul { margin-top:8px; }
  .farm-activity li { padding:6px 0; }
  .farm-rail { right:0; width:var(--farm-right-width); border-left:1px solid var(--apofarm-line); padding-bottom:92px; }
  /* 오른쪽 칸은 세로로 쌓는다. 격자로 두면 공지 카드의 높이가 줄 높이에 제대로 반영되지 않아 아래 카드가 공지를 덮었다. */
  .farm-rail { display:flex; flex-direction:column; }
  .farm-rail > * { flex:none; min-width:0; }
  .farm-screen .field-area {
    display:flow-root;
    margin:0;
  }
  /* 오른쪽 칸 접기: 접으면 좁은 띠에 펼치기 단추만 남고 본문이 넓어진다. */
  .rail-collapse-toggle {
    display:flex;
    align-items:center;
    justify-content:flex-end;
    gap:4px;
    align-self:flex-end;
    min-height:28px;
    padding:2px 6px;
    border:0;
    background:transparent;
    color:var(--apofarm-ink-soft);
    font:inherit;
    font-size:var(--apofarm-text-xs);
    cursor:pointer;
  }
  .rail-collapse-toggle:hover { color:var(--apofarm-ink); }
  .rail-collapse-toggle:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
  .player-shell.rail-collapsed { --farm-right-width:44px; }
  .rail-collapsed .farm-rail { padding:10px 4px; overflow:hidden; }
  .rail-collapsed .farm-rail > :not(.rail-collapse-toggle) { display:none; }
  .rail-collapsed .rail-collapse-toggle {
    align-self:center;
    justify-content:center;
    width:34px;
    min-height:34px;
    padding:0;
    border:1px solid var(--apofarm-line);
    background:var(--apofarm-surface-high);
  }
}
@media (max-width:950px){ .rail-collapse-toggle { display:none; } }
/* 화면 설명(ⓘ): 제목 옆 단추로 펼치고, 화면 안의 구역 설명(.screen-note)도 함께 펼친다. */
.intro-info-toggle {
  display:inline-grid;
  place-items:center;
  width:28px;
  height:28px;
  margin-left:6px;
  padding:0;
  border:0;
  border-radius:50%;
  background:transparent;
  color:var(--apofarm-ink-soft);
  vertical-align:middle;
  cursor:pointer;
}
.intro-info-toggle:hover,.intro-info-toggle[aria-expanded="true"] { color:var(--apofarm-moss-deep); background:var(--apofarm-moss-pale); }
.intro-info-toggle:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:1px; }
.player-shell:not(.intro-notes-open) .screen-note { display:none; }
@media (min-width:951px) and (max-width:1250px){
  .shipment-layout,.explore-layout { grid-template-columns:minmax(0,1fr); }
  .shipment-fields { grid-template-columns:minmax(0,1fr); }
  .farm-facilities-layout { grid-template-columns:minmax(0,1fr); }
  .farm-facilities-column + .farm-facilities-column { border-left:0; border-top:1px solid var(--apofarm-line); }
}
/* 접는 단추는 휴대폰 배치에서만 쓴다 */
.mobile-info-toggle { display:none; }
@media (max-width:950px){
  .mobile-nav button { position:relative; }
  .mobile-nav { padding:0 env(safe-area-inset-right,0px) var(--apofarm-safe-bottom) env(safe-area-inset-left,0px); }
  .mobile-nav { grid-template-columns:repeat(5,minmax(0,1fr)); }
  /* 더보기: 메뉴 바로 위로 열리는 작은 목록(낚시터·출하소·내 상태). */
  .mobile-more-sheet {
    position:absolute;
    right:8px;
    bottom:calc(100% + 8px);
    display:grid;
    gap:2px;
    min-width:176px;
    padding:6px;
    border:1px solid var(--apofarm-line-dark);
    border-radius:var(--apofarm-radius-panel);
    background:var(--apofarm-surface-high);
    box-shadow:var(--apofarm-shadow-overlay);
  }
  .mobile-more-sheet[hidden] { display:none; }
  /* 목록이 열려 있는 동안은 채팅·생존자 단추(z-index 20) 위로 올린다. */
  .mobile-nav:has(.mobile-more-sheet:not([hidden])) { z-index:25; }
  .mobile-more-sheet button { display:flex; align-items:center; gap:12px; justify-items:start; padding:12px 14px; border-radius:var(--apofarm-radius-soft); text-align:left; }
  .mobile-more-sheet button span { font-size:var(--apofarm-text-sm); }
  .mobile-more-sheet button.active { background:var(--apofarm-moss-pale); }
  .mobile-more-sheet .nav-notice { position:static; margin-left:auto; }
  .mobile-nav .nav-notice { position:absolute; top:8px; left:calc(50% + 12px); margin:0; }
  /* 휴대폰: 화면 뒤에 카드가 이어지므로 탭 바에 가리지 않게 비워 둘 공간은 맨 아래 한 곳에만 둔다. */
  .player-shell { display:flex; flex-direction:column; padding-bottom:calc(105px + var(--apofarm-safe-bottom)); }
  .player-main,.farm-sidebar,.farm-rail { display:contents; }
  /* 화면은 .screen-frame(display:contents) 안에 있다. 쓰러져 잠긴 동안은 틀 자체가 상자가 된다. */
  .player-main .screen-frame>.screen,.screen-frame.downed-lock { order:3; width:100%; min-width:0; }
  .farm-screen { padding-bottom:20px; }
  .shipment-screen,.resources-screen,.explore-screen,.npc-screen { padding-bottom:20px; }
  .farm-clock-card,.player-status-card,.farm-world-card,.farm-status-card,.farm-activity,
  .farm-rail .rail-telegram {
    width:calc(100% - 28px); margin:12px 14px 0;
  }
  .farm-clock-card { order:1; }
  .player-status-card { order:2; }
  /* 요약 띠: 탭 내용이 화면 위쪽에서 바로 시작하도록 현재 시간·내 상태 카드는 펼쳤을 때만 보인다. */
  .mobile-status {
    display:grid;
    order:0;
    gap:8px;
    width:calc(100% - 28px);
    margin:12px 14px 0;
    padding:10px 14px;
    border:1px solid var(--apofarm-line);
    background:var(--apofarm-surface);
    box-shadow:var(--apofarm-shadow-soft);
  }
  .player-shell:not(.mobile-status-open) :is(.farm-clock-card,.player-status-card) { display:none; }
  .mobile-status-open .mobile-status :is(.mobile-status-bars,.player-debuffs) { display:none; }
  .farm-world-card { order:6; }
  .farm-rail .rail-event-banner { order:4; width:calc(100% - 28px); margin:12px 14px 0; }
  .farm-status-card { order:7; }
  /* 작업 예약 스택은 휴대폰에서 탭 내용 바로 위에 */
  .now-doing { order:2; width:calc(100% - 28px); margin:12px 14px 0; padding:14px 15px; }
  .farm-activity { order:8; }
  .farm-rail .rail-telegram { order:9; margin:12px 14px 0; }
  /* 본 내용 아래 카드는 한 줄 단추로 접어 두고, 펼쳤을 때만 보인다(이벤트 배너는 항상 보인다). */
  .mobile-info-toggle {
    order:5;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
    width:calc(100% - 28px);
    min-height:48px;
    margin:12px 14px 0;
    padding:8px 14px;
    border:1px solid var(--apofarm-line);
    background:var(--apofarm-surface);
    box-shadow:var(--apofarm-shadow-soft);
    color:var(--apofarm-ink);
    font:inherit;
    font-size:var(--apofarm-text-md);
    font-weight:700;
    text-align:left;
    cursor:pointer;
  }
  .mobile-info-toggle small { display:block; margin-top:2px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-weight:400; }
  .mobile-info-toggle:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
  .player-shell:not(.mobile-info-open) :is(.farm-world-card,.farm-status-card,.farm-activity,.farm-rail .rail-telegram) { display:none; }
  .top-nav { display:flex; flex-wrap:wrap; justify-content:space-between; gap:8px; min-height:62px; padding-inline:14px; }
  .top-nav .top-actions { margin-left:auto; gap:0; }
  .top-nav .nav-links { display:none; }
  .top-bag span { display:none; }
  .top-bag { width:36px; height:36px; padding:0; border-radius:50%; }
}
@media (max-width:640px){
  .farm-screen { gap:12px; padding:12px 14px 12px; }
  .shipment-screen,.resources-screen,.explore-screen,.npc-screen { gap:12px; padding:12px 14px 12px; }
  .npc-card { padding:15px; }
  .screen .section-heading { padding:14px 12px; }
  .screen .section-heading .field-section-title { font-size:var(--apofarm-text-lg); }
  .resource-ledger-body,.explore-scene-body,.explore-decisions-body,.npc-quests-body,.npc-columns .social-body,.shipment-work-body,.shipment-world-body,.auto-explore-plan-body,.auto-explore-report-body,.feast-panel-body { padding:16px 14px; }
  .resources-screen .resource-controls { display:grid; align-items:stretch; gap:11px; }
  .resources-screen .resource-controls input { width:100%; }
  .resources-screen .resource-head,.resources-screen .resource-row { grid-template-columns:50px minmax(0,1fr) 52px 62px; gap:5px; padding:9px 7px; }
  .resources-screen .bag-resource-head,.resources-screen .bag-resource-row { grid-template-columns:24px minmax(0,1fr) 48px 58px; padding-left:5px; }
  .resources-screen .bag-resource-head span:last-child { display:none; }
  .resources-screen .bag-row-actions { grid-column:2/-1; }
  .resources-screen .resource-row { padding-top:7px; padding-bottom:7px; }
  .resources-screen .resource-name-button { font-size:var(--apofarm-text-xs); }
  .resources-screen .resource-row b { white-space:nowrap; font-size:var(--apofarm-text-xs); }
  .resources-screen .filter-strip { flex-wrap:wrap; }
  .resources-screen .filter-strip .all-resources { margin-left:0; }
  .party-people { grid-template-columns:minmax(0,1fr); }
  .explore-decisions .explore-choice { grid-template-columns:minmax(0,1fr); }
  .explore-decisions .explore-choice-row { grid-template-columns:minmax(0,1fr); }
  .explore-choice-votes { padding:0 12px 12px; }
  .explore-decisions .explore-choice small { white-space:normal; }
  .explore-decisions .choice-actions { flex-wrap:wrap; }
  .explore-decisions .choice-actions .button { flex:1 1 auto; }
  .explore-mode-tabs button { padding:11px 10px; font-size:var(--apofarm-text-sm); }
  .explore-mode-tabs small { font-size:var(--apofarm-text-2xs); }
  .auto-explore-controls { align-items:stretch; flex-direction:column; gap:10px; }
  .auto-explore-controls .button { width:100%; }
  .tidy-plan .plan-start .button { width:100%; }
  .shipment-fields { grid-template-columns:minmax(0,1fr); }
  .shipment-preview { align-items:start; flex-direction:column; gap:6px; }
  .shipment-preview small { text-align:left; }
  .shipment-submit { align-items:stretch; flex-direction:column; }
  .shipment-submit .button { width:100%; }
  .shipment-world-remaining { flex-direction:column; align-items:flex-start; gap:6px; }
  .farm-facilities-layout { grid-template-columns:minmax(0,1fr); }
  .farm-facilities-column { padding:16px 14px; }
  .self-care .small-note.self-care-intro { padding:12px 14px; }
  .farm-facilities-column + .farm-facilities-column { border-left:0; border-top:1px solid var(--apofarm-line); }
  .farm-clock-card { gap:3px; }
  .farm-clock-card strong { font-size:var(--apofarm-text-3xl); }
  .farm-status-card { display:block; }
  .farm-status-body { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:0 10px; }
  .farm-status-body>h2,.farm-status-body>.rail-water { grid-column:1/-1; }
  .farm-status-card h2 { margin-bottom:12px; }
  .farm-status-card .rail-water-hint { display:none; }
  .farm-status-line { display:grid; gap:2px; align-content:start; border-bottom:0; font-size:var(--apofarm-text-xs); }
  .farm-status-line b { white-space:normal; }
  .page-intro { padding:12px 14px; }
  .page-intro-head { align-items:center; flex-wrap:wrap; min-height:0; gap:8px; }
  /* 휴대폰: 분위기 제목은 작게, 지금 상태 글을 더 크게 */
  .page-intro-head h1 { font-size:var(--apofarm-text-md); }
  .page-intro-note { font-size:var(--apofarm-text-xs); }
  .page-intro-note.page-intro-status { padding-top:6px; font-size:var(--apofarm-text-sm); }
  .field-heading-actions { display:grid; justify-items:end; gap:3px; }
  :is(.farm-screen,.guild-field) .plot-grid { padding:12px 10px 16px; }
  :is(.farm-screen,.guild-field) .action-desk { position:static; box-shadow:none; }
}
#player-notice {
  position:fixed;
  z-index:20;
  left:50%;
  bottom:20px;
  transform:translateX(-50%);
  width:max-content;
  max-width:calc(100vw - 28px);
  padding:11px 16px;
  border:1px solid var(--apofarm-moss-deep);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-fill-moss-deep);
  color:var(--apofarm-on-dark);
  box-shadow:var(--apofarm-shadow-overlay);
  font-size:var(--apofarm-text-sm);
  line-height:1.5;
  text-align:center;
  pointer-events:none;
}
#player-notice[hidden] { display:none; }
@media (max-width:950px){
  #player-notice { bottom:calc(82px + var(--apofarm-safe-bottom)); }
}
/* 휴대폰은 아래 메뉴·채팅 단추에 가리지 않게 화면 위쪽에 띄운다. */
@media (max-width:640px){
  #player-notice { top:calc(env(safe-area-inset-top, 0px) + 10px); bottom:auto; }
}

.farm-screen .sand-toggle { display:flex; align-items:center; gap:6px; font-size:var(--apofarm-text-sm); color:var(--apofarm-ink-soft); }
.player-debuffs { display:flex; flex-wrap:wrap; align-items:center; gap:4px; margin:8px 0 0; font-size:var(--apofarm-text-xs); }
.player-debuffs span { color:var(--apofarm-ink-soft); margin-right:2px; }
.player-debuffs button { padding:1px 6px; border:1px solid var(--apofarm-danger); background:none; color:var(--apofarm-danger); font:inherit; font-weight:650; cursor:pointer; }
.player-debuffs button:hover { background:color-mix(in srgb, var(--apofarm-danger) 10%, transparent); }
/* 버프: 디버프와 같은 모양, 초록 테두리 */
.player-buffs button { border-color:var(--apofarm-moss); color:var(--apofarm-moss); }
.player-buffs button:hover { background:color-mix(in srgb, var(--apofarm-moss) 10%, transparent); }
/* 광기: 버프·디버프와 따로, 보랏빛 */
.player-madness button { border-color:var(--apofarm-madness); color:var(--apofarm-madness); }
.player-madness button:hover { background:color-mix(in srgb, var(--apofarm-madness) 12%, transparent); }

/* ── 누르는 영역 ──
   모든 화면: 버튼은 높이 24px 이상.
   손가락으로 누르는 화면(pointer: coarse): 주요 버튼·탭·입력칸 44px, 글자·작은 버튼 32px, 즐겨찾기 별 40px.
   화면마다 따로 정한 버튼 높이보다 앞서도록 게임 화면·대화창·채팅을 기준으로 건다. */
:is(#player-app,#player-dialog,.player-chat) :is(.text-button,.player-debuffs button,.character-stat-add,.character-equipment-row button,.plot-detail,.section-collapse-button,.rail-telegram button,.now-link) { min-height:24px; }
:is(#player-app,#player-dialog,.player-chat) .text-button { display:inline-flex; align-items:center; }
:is(#player-app,#player-dialog) .resource-name-button { min-width:24px; min-height:24px; line-height:24px; }
:is(#player-app,#player-dialog) .player-debuffs button { padding:2px 8px; }
@media (pointer:coarse) {
  :is(#player-app,#player-dialog,.player-chat) :is(.button,.tab-strip button,.filter-strip button,select,input:not([type=checkbox]):not([type=radio]):not([type=range]),.mobile-nav button) { min-height:44px; }
  :is(#player-app,#player-dialog,.player-chat) :is(.text-button,.player-debuffs button,.character-stat-add,.character-equipment-row button,.plot-detail,.section-collapse-button,.rail-telegram button,.now-link) { min-height:38px; }
  :is(#player-app,#player-dialog) .resource-name-button { min-width:38px; min-height:38px; line-height:38px; }
  /* 상태 칩은 서로 잘못 눌리지 않게 간격을 넓힌다. */
  :is(#player-app,#player-dialog) .player-debuffs { gap:8px; }
  :is(#player-app,#player-dialog) .player-debuffs button { padding:4px 12px; }
  :is(#player-app,#player-dialog) .star-button { width:40px; height:40px; }
}

/* 휴대폰 요약 띠(넓은 화면에서는 숨김) */
@media (min-width:951px) { .mobile-status { display:none; } }
.mobile-status-top { display:flex; flex-wrap:wrap; align-items:center; gap:4px 10px; font-size:var(--apofarm-text-xs); color:var(--apofarm-ink-soft); }
.mobile-status-top strong { flex:none; white-space:nowrap; color:var(--apofarm-ink); font-size:var(--apofarm-text-xl); font-weight:600; font-variant-numeric:tabular-nums; }
.mobile-status-money { color:var(--apofarm-ink); font-weight:700; font-variant-numeric:tabular-nums; }
.mobile-status-top .text-button { margin-left:auto; min-width:44px; font-size:var(--apofarm-text-xl); line-height:1; text-align:center; } /* 글자 없이 화살표만(접힘 › / 열림 ⌄, 구역 접기 단추와 같은 모양) */
.mobile-status-top .text-button .section-chevron { vertical-align:middle; }
.mobile-status-top .text-button[aria-expanded="false"] .section-chevron { transform:rotate(-90deg); }
.mobile-status-bars { display:grid; grid-template-columns:repeat(auto-fit,minmax(64px,1fr)); gap:6px 10px; }
.mobile-status-bars span { display:block; margin-bottom:3px; font-size:var(--apofarm-text-xs); color:var(--apofarm-ink-soft); white-space:nowrap; }
.mobile-status-bars b { color:var(--apofarm-ink); font-variant-numeric:tabular-nums; }
.mobile-status-bars .meter { height:4px; }
.mobile-status-bars .meter.health span { background:var(--apofarm-health); }
.mobile-status-bars .meter.satiety span { background:var(--apofarm-world); }
.mobile-status-bars .meter.fatigue span { background:var(--apofarm-fill-moss); }
.mobile-status-bars .meter.mental span { background:var(--apofarm-fill-soil); }
.mobile-status .player-debuffs { margin:0; }

/* ── 긴 목록 ──
   목록 조작줄(보관 장소·검색·분류)은 목록을 내려도 머리글 바로 아래에 붙어 있다. */
:root { --apofarm-header-h:70px; }
@media (max-width:950px) { :root { --apofarm-header-h:62px; } }
@media (min-width:641px) { .shop-meta { display:contents; } }
.list-toolbar {
  position:sticky;
  top:var(--apofarm-header-h);
  z-index:3;
  display:grid;
  gap:4px;
  margin:0 0 12px;
  padding:8px 0;
  border-bottom:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
}
.list-toolbar .filter-strip { margin:0; }
.list-toolbar .resource-controls { margin:0; padding-bottom:4px; border-bottom:0; }
.list-toolbar .bag-actions { margin:12px 0 2px; }
.filter-strip button small { margin-left:3px; color:var(--apofarm-ink-faint); font-size:var(--apofarm-text-2xs); font-weight:400; }
/* 휴대폰: 분류 단추가 여러 줄로 쌓여 고정 줄이 두꺼워지지 않게 옆으로 밀어 본다. */
@media (max-width:640px) {
  .list-toolbar .filter-strip { flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; }
  .list-toolbar .filter-strip::-webkit-scrollbar { display:none; }
  .list-toolbar .filter-strip button { flex:none; white-space:nowrap; }
  .list-toolbar .filter-strip .all-resources { margin-left:0; }
}
/* 창고 안 구역 탭(보관 목록·요리·제작) */
.section-tabs { display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); border:1px solid var(--apofarm-line); background:var(--apofarm-surface); box-shadow:var(--apofarm-shadow-soft); }
.section-tabs button {
  min-width:0;
  min-height:44px;
  padding:10px 12px;
  word-break:keep-all;
  overflow-wrap:anywhere;
  border:0;
  border-bottom:3px solid transparent;
  background:none;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-md);
  font-weight:650;
}
.section-tabs button + button { border-left:1px solid var(--apofarm-line); }
.section-tabs button:hover { color:var(--apofarm-moss-deep); }
.section-tabs button.active { border-bottom-color:var(--apofarm-moss); background:var(--apofarm-surface-high); color:var(--apofarm-moss-deep); }
/* 구역 탭 아이콘: 넓은 화면은 글자 왼쪽, 휴대폰은 글자 위. 색은 글자와 같이 바뀐다. */
.section-tabs button { display:flex; align-items:center; justify-content:center; gap:7px; }
.section-tabs .tab-icon { flex:none; }
@media (max-width:640px) {
  .section-tabs button { flex-direction:column; gap:3px; padding:8px 4px; font-size:var(--apofarm-text-sm); }
  .section-tabs .tab-icon { width:20px; height:20px; }
  .section-tabs button small { display:block; }
}
/* 요리·제작 줄의 상태 표시(이름 옆) */
.farm-recipe-list li strong .farm-recipe-status { margin-left:4px; font-size:var(--apofarm-text-xs); font-weight:600; }
/* 휴대폰 고정 줄: 보관 장소·사고팔기 탭과 검색칸을 한 줄에. 검색칸 이름표는 화면 읽기 프로그램만 읽는다. */
@media (max-width:640px) {
  .list-toolbar .resource-controls { display:grid; grid-template-columns:auto minmax(0,1fr); align-items:center; gap:8px; }
  .list-toolbar .resource-controls label { gap:0; }
  .list-toolbar .toolbar-label { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }
  .list-toolbar .tab-strip button { padding-inline:12px; }
}
/* 요리 조리 방법 줄: 분류 줄과 같은 밑줄 탭이되 굵게 하지 않고 밑줄을 얇게 해 한 단계 가볍게. 오른쪽 끝에 "만들 수 있는 것만 보기". */
.list-toolbar .method-strip { align-items:center; margin-top:4px; }
.list-toolbar .method-strip button:not(.all-resources) { padding:6px 12px; border-bottom-width:1px; font-size:var(--apofarm-text-xs); }
.list-toolbar .method-strip button.active { font-weight:400; }
.list-toolbar .batch-strip { display:flex; justify-content:flex-end; margin-top:8px; }
/* 날씨(오늘·내일)와 밭 표시(온실·토양 개량) */
.farm-clock-weather { display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:8px; padding-bottom:2px; font-size:var(--apofarm-text-xs); line-height:1.5; }
.farm-clock-weather > span { color:var(--apofarm-ink-soft); }
.farm-weather-day { padding:3px 0; border:0; background:transparent; color:var(--apofarm-ink); font:inherit; font-weight:700; white-space:nowrap; cursor:pointer; }
.farm-weather-mark { display:inline-flex; color:var(--apofarm-ink); }
.farm-weather-day.tomorrow { justify-self:end; }
.farm-weather-day.tomorrow { color:var(--apofarm-ink-soft); font-weight:500; }
.farm-weather-day:hover { color:var(--apofarm-moss-deep); text-decoration:underline; }
.farm-weather-day:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.plot-tag {
  margin-left:4px;
  padding:0 4px;
  border:1px solid var(--apofarm-moss);
  border-radius:3px;
  color:var(--apofarm-moss-deep);
  font-size:var(--apofarm-text-2xs);
  font-style:normal;
  font-weight:700;
}
/* 자원 창고의 가방 칸 사용량(가득 차면 강조) */
.bag-capacity { font-weight:700; }
.bag-capacity.full { color:var(--apofarm-danger, #9b3b2f); }
/* 탐험 짐(5칸, 칸마다 3개) */
.expedition-pack { border:1px solid var(--apofarm-line); background:var(--apofarm-surface); }
.expedition-pack-body { display:grid; gap:14px; padding:18px 24px 24px; }
.expedition-pack-body > .small-note { margin:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.expedition-pack-body > .empty-note { margin:0; padding:14px; border:1px dashed var(--apofarm-line); font-size:var(--apofarm-text-sm); text-align:center; }
.pack-list { display:grid; gap:6px; margin:0; padding:0; list-style:none; }
.pack-row { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:8px 10px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.pack-row div:first-child { display:grid; gap:2px; min-width:0; }
.pack-row small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.pack-row.short small { color:var(--apofarm-danger, #9b3b2f); }
.pack-controls { display:flex; align-items:center; gap:8px; flex:none; }
.pack-controls .button { min-width:34px; padding:4px 8px; }
.pack-add { display:flex; gap:8px; flex-wrap:wrap; }
.pack-add .ui-select { flex:1; }
@media (max-width:640px) { .expedition-pack-body { padding:14px 14px 16px; } }

/* 길드와 공동 밭 */
.guild-screen { gap:22px; }
.npc-quests-note { margin:0 0 14px; }
.guild-section { min-width:0; border:1px solid var(--apofarm-line); background:var(--apofarm-surface); box-shadow:var(--apofarm-shadow-soft); }
.guild-body { display:grid; gap:14px; padding:18px 24px 22px; }
.guild-body .small-note { margin:0; }
/* 길드 시설: 개인 농장의 설치된 시설 줄(.farm-facilities-summary)과 같은 모양. 이름은 왼쪽 흐린 글씨, 값은 오른쪽 굵게. */
.guild-facility-list { margin:0; padding:0; list-style:none; }
.guild-facility-list li { display:flex; justify-content:space-between; gap:12px; padding:12px 24px; border-top:1px solid var(--apofarm-line); font-size:var(--apofarm-text-sm); }
.guild-facility-list span { color:var(--apofarm-ink-soft); }
.guild-facility-list b { text-align:right; }
.guild-facility-body > .small-note { margin:0; padding:12px 24px 16px; border-top:1px solid var(--apofarm-line); }
.guild-form { display:flex; flex-wrap:wrap; align-items:end; gap:10px; }
.guild-form label { display:grid; gap:4px; min-width:160px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.guild-form label:first-child { flex:1; }
.guild-needs,.guild-storage-list,.guild-members,.guild-log { display:grid; gap:6px; margin:0; padding:0; list-style:none; }
.guild-need {
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(48px,1.2fr) auto;
  align-items:center;
  gap:12px;
  padding:10px 12px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface-high);
}
.guild-need > * { min-width:0; }
.guild-need.done { opacity:.7; }
.guild-need b,.guild-need small,.guild-storage-list b,.guild-storage-list small { display:block; }
.guild-need small,.guild-storage-list small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.guild-give { display:flex; align-items:center; gap:6px; }
.guild-give input { width:72px; min-width:0; }
.guild-give .button { white-space:nowrap; flex:none; }
.guild-storage-list { grid-template-columns:repeat(auto-fill,minmax(250px,1fr)); }
.guild-storage-list li { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 12px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.guild-member-actions { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:4px 10px; }
/* 휴대폰: 길드원 한 명을 두 줄로 — 윗줄은 사진·이름·정보(전체 너비), 아랫줄은 직급 선택과 단추. 한 줄에 두면 이름 칸이 글자 한 자 너비로 줄어든다. */
@media (max-width:640px) {
  .guild-members .social-row { gap:6px 8px; }
  .guild-members .social-player { flex:1 1 100%; }
  .guild-members .guild-member-actions { flex:1 1 100%; justify-content:flex-start; align-items:center; gap:4px 14px; padding-top:6px; border-top:1px dashed var(--apofarm-line); }
}
.guild-log { max-height:320px; overflow-y:auto; }
.guild-log li { display:grid; grid-template-columns:auto 1fr; gap:10px; padding:6px 0; border-bottom:1px dashed var(--apofarm-line); font-size:var(--apofarm-text-sm); }
.guild-log time { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-variant-numeric:tabular-nums; white-space:nowrap; }
@media (max-width:640px) {
  .guild-body { padding:14px 14px 16px; }
  .guild-facility-list li,.guild-facility-body > .small-note { padding-left:14px; padding-right:14px; }
  .guild-need { grid-template-columns:minmax(0,1fr) auto; }
  .guild-need .meter { grid-column:1 / -1; grid-row:2; }
  .guild-form label { min-width:0; flex:1 1 100%; }
}

/* 선물 */
.resources-screen .resource-description .resource-effect { color:var(--apofarm-moss-deep); font-weight:650; }
/* 물 1L·10L 모으기 버튼 사이 간격 */
.water-collect-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:16px; }
.farm-water-collect .water-collect-actions .button { margin-top:0; }

/* 농장 창고: 즐겨찾기 칸을 없앴다. 나무 저장고 */
.resources-screen .resource-head.no-marker,.resources-screen .resource-row.no-marker { grid-template-columns:minmax(0,1fr) 86px 90px; }
.farm-wood-collect { margin-top:24px; padding-top:18px; border-top:1px solid var(--apofarm-line); }
.farm-wood-collect .wood-note { margin:12px 0 0; }
@media (max-width:640px) { .resources-screen .resource-head.no-marker,.resources-screen .resource-row.no-marker { grid-template-columns:minmax(0,1fr) 52px 62px; } }

/* 붕괴 캠페인: 진행 중인 사건(출하소) */
.world-events-body { display:grid; gap:14px; }
.world-events-body .small-note { margin:0; }
.world-collapse { display:grid; gap:8px; }
.world-collapse>div { display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 10px; }
.world-collapse strong { color:var(--apofarm-danger); font-size:var(--apofarm-text-2xl); }
.world-collapse .meter.danger span { background:var(--apofarm-danger); }
.world-collapse small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.world-event { display:grid; gap:12px; padding:16px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.personal-event { display:grid; gap:12px; padding:16px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.personal-event h3,.personal-event h4 { margin:0; }
.personal-event h4 { font-size:var(--apofarm-text-sm); }
.event-reward-list { display:grid; gap:8px; padding:0; margin:0; list-style:none; }
.event-reward-list li { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:8px; padding:8px 0; border-bottom:1px solid var(--apofarm-line); }
.event-reward-list li>span { display:grid; gap:4px; min-width:0; }
.event-reward-list small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.event-reward-list .button { min-height:44px; }
.world-event-head { display:flex; flex-wrap:wrap; justify-content:space-between; gap:4px 12px; }
.world-event-head h3 { margin:0; font-size:var(--apofarm-text-lg); }
.world-event-head span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.world-story { margin:0; line-height:1.55; }
.world-effects,.world-history,.world-recent { display:grid; gap:4px; margin:0; padding:0; list-style:none; font-size:var(--apofarm-text-sm); }
.world-effects .good,.world-history .good { color:var(--apofarm-moss-deep); }
.world-effects .bad,.world-history .bad { color:var(--apofarm-danger); }
.world-subtitle { margin:4px 0 0; font-size:var(--apofarm-text-sm); }
.world-recent li { display:grid; grid-template-columns:auto 1fr; gap:10px; }
.world-recent time { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); white-space:nowrap; }

/* 공동 목표(작물 포인트) */
.world-goal { display:grid; gap:8px; }
.world-goal-head { display:flex; justify-content:space-between; align-items:baseline; gap:8px; }
.world-goal-head small { color:var(--apofarm-ink-soft); }
.world-give { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.world-give .ui-select { flex:1 1 220px; min-width:0; }
.world-give .ui-select-control { width:100%; min-width:0; }
.world-give input { width:80px; }

/* 길드 공동 창고: 내 물건 / 공동 창고 두 목록 */
.guild-storage-search { display:grid; gap:4px; max-width:320px; font-size:var(--apofarm-text-sm); }
.guild-storage-columns { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap:16px; }
.guild-storage-column { display:grid; gap:8px; align-content:start; min-width:0; }
.guild-storage-column h3 { margin:0; font-size:var(--apofarm-text-base); }
.guild-storage-column h3 small { color:var(--apofarm-ink-soft); font-weight:400; }
.guild-storage-column .guild-storage-list { grid-template-columns:1fr; max-height:420px; overflow-y:auto; }
.guild-storage-list .guild-give { flex-wrap:nowrap; }
/* 공동 밭 안내 문구: 밭 칸과 같은 좌우 여백 */
.guild-field .collapsible-body > .small-note { margin:0; padding:10px 16px 0; line-height:1.6; }
.guild-field .collapsible-body > .small-note + .small-note { padding-top:6px; }
/* 개인 밭 상태 안내문: 공동 밭 안내문과 같은 여백(테두리 안쪽에 붙지 않게) */
.farm-screen .field-area .collapsible-body > .small-note { margin:0; padding:12px 16px 0; line-height:1.6; }
@media (max-width:640px) { .farm-screen .field-area .collapsible-body > .small-note { padding:10px 14px 0; } }
.guild-field { min-width:0; }
.plot-card.is-working { opacity:.72; }
.world-guild-give { display:grid; gap:8px; margin-top:6px; padding:12px; border:1px dashed var(--apofarm-line-dark); background:var(--apofarm-surface); }
/* 길드 직급 */
.guild-role-names { margin:10px 0; }
.guild-role-names summary { cursor:pointer; font-size:var(--apofarm-text-sm); color:var(--apofarm-ink-soft); }
.guild-role-name-fields { display:grid; grid-template-columns:repeat(auto-fill, minmax(140px, 1fr)); gap:8px; margin:8px 0; }
.guild-role-name-fields label { display:grid; gap:4px; font-size:var(--apofarm-text-xs); color:var(--apofarm-ink-soft); }
/* 길드 화면 아래쪽 좌우 두 칸(좁으면 한 줄) */
.guild-columns { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap:22px; align-items:start; }
.guild-column { display:grid; gap:22px; min-width:0; }
.guild-storage-filter { flex-wrap:wrap; margin:4px 0 2px; }
.guild-storage-filter button { min-height:28px; padding:3px 10px; font-size:var(--apofarm-text-xs); }
/* 쓰러진 동안: 화면은 보이지만 누를 수 없다 */
.screen-frame { display:contents; }
.screen-frame.downed-lock { display:block; opacity:.55; filter:grayscale(.4); pointer-events:none; user-select:none; }

/* 부서진 온실 줄: 밭 칸과 같은 좌우 여백 */
/* 온실 칸은 카드 테두리로 구분한다: 온실은 유리빛 이중 테두리, 부서진 온실은 점선 테두리 */
.plot-card.is-greenhouse { border:1px solid color-mix(in srgb, var(--apofarm-moss) 55%, #9fc6c9); box-shadow:var(--apofarm-plot-shadow); }
.plot-card.is-broken-greenhouse { border:1px dashed color-mix(in srgb, var(--apofarm-moss) 45%, #8aa3a5); }

/* 공지사항 게시판: 메모를 붙인 게시판. 고정한 메모는 맨 위, 굵은 테두리와 "고정" 표시. */
.notice-board-section { margin-top:16px; }
.notice-board { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; align-items:start; }
.notice-memo {
  background:var(--apofarm-plot-bg, var(--apofarm-surface-high));
  border:1px solid var(--apofarm-plot-line, var(--apofarm-line));
  box-shadow:var(--apofarm-plot-shadow, none);
  padding:14px 16px 16px;
  display:grid;
  gap:8px;
  min-width:0;
}
.notice-memo:nth-child(3n) { transform:rotate(.25deg); }
.notice-memo:nth-child(4n) { transform:rotate(-.3deg); }
.notice-memo.is-pinned { border:2px solid var(--apofarm-moss); }
.notice-memo header { display:flex; justify-content:space-between; align-items:center; gap:8px; }
.notice-memo-date { font-size:var(--apofarm-text-2xs); color:var(--apofarm-ink-soft); }
.notice-memo-pin { padding:0 6px; border:1px solid var(--apofarm-moss); color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-2xs); font-weight:700; }
.notice-memo h2 { margin:0; font-size:var(--apofarm-text-md, 1.05rem); line-height:1.4; overflow-wrap:anywhere; }
.notice-memo p { margin:0; white-space:pre-wrap; line-height:1.65; overflow-wrap:anywhere; }
@media (prefers-reduced-motion: reduce) { .notice-memo { transform:none !important; } }

/* 이벤트 배너 자리(임시): 전 세계 공동 목표와 농장 상태 사이. 실제 배너 이미지가 들어갈 크기만 잡아 둔다. */
.rail-event-banner {
  display:grid;
  grid-template-columns:minmax(0,1fr);
  align-content:center;
  justify-items:start;
  gap:.375rem;
  width:100%;
  height:auto;
  min-height:61px;
  padding:.75rem 14px;
  border:2px dashed var(--apofarm-line-dark);
  background:repeating-linear-gradient(135deg, var(--apofarm-surface) 0 10px, var(--apofarm-surface-high) 10px 20px);
  color:var(--apofarm-ink);
  font:inherit;
  text-align:left;
  cursor:pointer;
}
.rail-event-banner>* { min-width:0; max-width:100%; }
.rail-event-banner:hover { border-color:var(--apofarm-moss); }
.rail-event-banner:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.rail-event-kicker { font-size:var(--apofarm-text-2xs); font-weight:700; letter-spacing:.1em; line-height:1.2; color:var(--apofarm-ink-soft); }
.rail-event-banner strong { font-family:var(--apofarm-font-display); font-size:var(--apofarm-text-lg); line-height:1.4; }
.rail-event-banner small { font-size:var(--apofarm-text-xs); line-height:1.5; color:var(--apofarm-moss-deep); font-weight:600; }
.events-placeholder { margin-top:16px; }


/* 이벤트 페이지: 대화 다시보기 */
.events-placeholder { border:1px solid var(--apofarm-line); background:var(--apofarm-surface); }
.events-placeholder > .empty-note { padding:16px; margin:0; }
.events-replay { display:grid; gap:14px; padding:16px; }
.events-replay-group h2 { margin:0 0 8px; font-size:var(--apofarm-text-md, 1rem); }
.events-replay-group ul { list-style:none; margin:0; padding:0; display:grid; gap:6px; }
.events-replay-group li { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:10px 12px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.events-replay-group li span { display:grid; gap:2px; min-width:0; }
.events-replay-group li small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); }
.events-replay-group li .button { flex:none; min-height:34px; }
/* 복귀 구호 안내: 자격이 있을 때만 밭 상태 위에 뜬다. */
.farm-screen .return-relief-banner {
  display:flex;
  align-items:center;
  gap:16px;
  margin:0 0 16px;
  padding:16px 20px;
  border:1px solid var(--apofarm-moss);
  border-left-width:4px;
  background:var(--apofarm-moss-pale);
  box-shadow:var(--apofarm-shadow-soft);
}
.return-relief-banner .return-relief-text { flex:1; min-width:0; }
.return-relief-banner h2 { margin:0 0 6px; color:var(--apofarm-ink); font-size:var(--apofarm-text-lg); font-weight:650; }
.return-relief-banner p { margin:0 0 4px; color:var(--apofarm-ink-soft); }
.return-relief-banner .button { flex:none; }
@media (max-width: 640px) { .farm-screen .return-relief-banner { flex-direction:column; align-items:stretch; } }

/* 화면 가장자리 경고: 정신 30% 이하 검은색, 건강 10% 이하 빨간색(클릭을 막지 않는다).
   네 변에서 화면 크기의 5%까지만 물든다(2026-10-09 사용자 요청, 귀퉁이는 두 변이 겹쳐 조금 더 짙다). */
#vitals-overlay { position:fixed; inset:0; z-index:900; pointer-events:none; opacity:0; transition:opacity .6s ease;
  --vitals-health:linear-gradient(to right, rgba(170,10,10,.275), rgba(170,10,10,0) 5%), linear-gradient(to left, rgba(170,10,10,.275), rgba(170,10,10,0) 5%), linear-gradient(to bottom, rgba(170,10,10,.275), rgba(170,10,10,0) 5%), linear-gradient(to top, rgba(170,10,10,.275), rgba(170,10,10,0) 5%);
  --vitals-mental:linear-gradient(to right, rgba(0,0,0,.25), rgba(0,0,0,0) 5%), linear-gradient(to left, rgba(0,0,0,.25), rgba(0,0,0,0) 5%), linear-gradient(to bottom, rgba(0,0,0,.25), rgba(0,0,0,0) 5%), linear-gradient(to top, rgba(0,0,0,.25), rgba(0,0,0,0) 5%); }
#vitals-overlay.low-mental,#vitals-overlay.low-health { opacity:1; }
#vitals-overlay.low-mental { background:var(--vitals-mental); }
#vitals-overlay.low-health { background:var(--vitals-health); }
#vitals-overlay.low-mental.low-health { background:var(--vitals-health), var(--vitals-mental); }

/* 길드 찾아 가입하기 */
.guild-directory-list { display:grid; gap:0; margin:10px 0 0; padding:0; list-style:none; border-top:1px solid var(--apofarm-line); }
.guild-directory-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:9px 2px; border-bottom:1px solid var(--apofarm-line); }
.guild-directory-row div { display:grid; gap:2px; min-width:0; }
.guild-directory-row small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.guild-directory-row button { flex:none; }
.guild-recruiting-badge,.guild-applied-badge { margin-left:4px; padding:1px 7px; border-radius:var(--apofarm-radius-pill); font-size:var(--apofarm-text-xs); font-weight:700; }
.guild-recruiting-badge { background:var(--apofarm-moss-pale,#e3ecd9); color:var(--apofarm-moss-deep); }
.guild-applied-badge { background:var(--apofarm-surface-high); color:var(--apofarm-ink-soft); }
.guild-application-actions { display:flex; align-items:center; gap:8px; flex:none; }

/* ── 긴 화면 줄이기 ── */
/* 농장 정보 탭(휴대폰 배치): 펼친 농장 정보를 농장 상태·일지 중 하나만 보여 준다. */
.mobile-rail-tabs { display:none; }
.list-more { display:block; width:100%; margin:10px 0 0; }
@media (max-width:950px){
  .mobile-info-open .mobile-rail-tabs { order:5; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; width:calc(100% - 28px); margin:8px 14px 0; }
  .mobile-rail-tabs button {
    min-height:38px;
    border:1px solid var(--apofarm-line);
    background:var(--apofarm-surface);
    color:var(--apofarm-ink-soft);
    font:inherit;
    font-size:var(--apofarm-text-sm);
    cursor:pointer;
  }
  .mobile-rail-tabs button.active { border-color:var(--apofarm-moss-deep); background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); font-weight:700; }
  .mobile-rail-tabs button:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
  /* 소식(rail-telegram)은 탭과 상관없이 탭 내용 아래에 늘 보인다. */
  .rail-tab-status .farm-activity { display:none; }
  .rail-tab-journal :is(.farm-world-card,.farm-status-card) { display:none; }
  /* 내리는 동안 상단 바를 접어 화면을 넓힌다(올리면 다시 나온다). 목록 조작줄은 맨 위에 붙는다. */
  .top-nav { transition:transform .2s ease; }
  html.chrome-hidden .top-nav { transform:translateY(-100%); }
  html.chrome-hidden .list-toolbar { top:0; }
}
@media (max-width:950px) and (prefers-reduced-motion:reduce){ .top-nav { transition:none; } }

/* 휴대폰: 상점·창고·의뢰 목록은 길어지면 목록 안에서 따로 스크롤한다(창고 머리 줄은 위에 붙는다). */
@media (max-width:640px){
  :is(.resource-table,.shop-table,.npc-quests .npc-list) { max-height:min(60vh,480px); overflow-y:auto; overscroll-behavior:auto; -webkit-overflow-scrolling:touch; }
  .resource-table > .resource-head { position:sticky; top:0; z-index:1; }
}

/* 휴대폰 여백: 카드 안쪽 여백을 줄여 같은 내용이 덜 길게 보이게 한다(누르는 영역 높이는 그대로). */
@media (max-width:640px){
  .screen .section-heading { padding:10px 12px; }
  .resource-ledger-body,.explore-scene-body,.explore-decisions-body,.npc-quests-body,.npc-columns .social-body,.shipment-work-body,.shipment-world-body,.auto-explore-plan-body,.auto-explore-report-body,.feast-panel-body { padding:12px 14px; }
  .farm-facilities-column { padding:12px 14px; }
  .page-intro { padding:12px 14px; }
  .npc-card { padding:12px; }
  .farm-world-card { padding:14px; }
  .farm-screen,.shipment-screen,.resources-screen,.explore-screen,.npc-screen { gap:10px; }
  .self-care .small-note.self-care-intro { padding:10px 14px; }
}

/* 맨 위로 단추(모든 폭): 채팅·생존자 단추 줄의 오른쪽 끝. 나타나면 html.back-to-top-shown이 붙어 두 단추가 한 칸 왼쪽으로 비켜난다(chat-people.css의 --float-shift). */
.back-to-top {
  position:fixed;
  z-index:21;
  right:18px;
  bottom:18px;
  display:grid;
  place-items:center;
  width:44px;
  height:44px;
  padding:0;
  border:1px solid var(--apofarm-line-dark);
  border-radius:50%;
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  box-shadow:var(--apofarm-shadow-soft);
  cursor:pointer;
}
.back-to-top[hidden] { display:none; }
/* 떠 있는 단추가 농장 행동 단추 위에 오면 잠시 투명하게 비켜 준다(scroll-aids.js의 floats-yield). */
:is(.player-chat-launcher,.player-people-launcher,.back-to-top) { transition:opacity .15s, visibility .15s; }
html.floats-yield :is(.player-chat-launcher,.player-people-launcher,.back-to-top) { opacity:0; visibility:hidden; pointer-events:none; }
.back-to-top:hover { background:var(--apofarm-moss-pale); }
.back-to-top:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
@media (max-width:950px){
  .back-to-top { right:12px; bottom:calc(78px + var(--apofarm-safe-bottom)); }
}
.farm-recipe-list .recipe-short { color:#c0392b; font-weight:700; }
.farm-recipe-list .recipe-enough { color:var(--apofarm-ink); }
.now-queue li[draggable="true"] { cursor:grab; }
.now-queue .now-queue-move { display:flex; gap:2px; margin-left:auto; flex:none; }
.now-queue .now-queue-move .now-link:disabled { opacity:.35; cursor:default; }
/* 자원 창고 탭: 눈에 잘 띄도록 굵은 글씨·진한 글자색·두꺼운 밑줄(시안 B). 아니면 박스형(시안 C)으로 바꾼다. */
.resources-screen .tab-strip button { padding:10px 18px; border-bottom-width:4px; color:var(--apofarm-ink); font-size:1rem; font-weight:700; }
.resources-screen .filter-strip button { border-bottom-width:3px; color:var(--apofarm-ink); font-size:var(--apofarm-text-md); font-weight:700; }
.resources-screen .tab-strip button.active,.resources-screen .filter-strip button.active { color:var(--apofarm-moss-deep); }
/* 제철 표시는 이름 옆의 작은 네모로 둔다(이름·설명을 세로로 쌓는 자원 목록에서 한 줄을 다 차지하던 것을 고침). */
.resources-screen .resource-label:has(.season-badge) { grid-template-columns:max-content minmax(0,1fr); align-items:center; column-gap:6px; }
.resources-screen .resource-label:has(.season-badge) > :not(.resource-name-button):not(.season-badge) { grid-column:1 / -1; }
.resources-screen .resource-label .season-badge { justify-self:start; margin-left:0; padding:0 5px; font-size:var(--apofarm-text-2xs); line-height:1.5; white-space:nowrap; }
/* 미보유 자원 보기: 눌린 상태가 보이는 스위치. */
:is(.resources-screen,.cooking,.crafting) .filter-strip button.resource-switch {
  display:inline-flex;
  align-items:center;
  gap:8px;
  border-bottom:0;
  color:var(--apofarm-ink);
  font-weight:700;
  cursor:pointer;
}
.resource-switch .switch-track {
  position:relative;
  flex:none;
  width:36px;
  height:20px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:999px;
  background:var(--apofarm-surface-high);
  transition:background .15s;
}
.resource-switch .switch-track::after {
  content:"";
  position:absolute;
  top:2px;
  left:2px;
  width:14px;
  height:14px;
  border-radius:50%;
  background:var(--apofarm-ink-soft);
  transition:transform .15s,background .15s;
}
.resource-switch[aria-checked="true"] .switch-track { border-color:var(--apofarm-fill-moss); background:var(--apofarm-fill-moss); }
.resource-switch[aria-checked="true"] .switch-track::after { transform:translateX(16px); background:#fff; }
.resource-switch:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.button.resource-switch { display:inline-flex; align-items:center; gap:8px; }

/* 반려동물: 현재 시간 카드 오른쪽 위 아이콘과 입양·반려동물 창 */
.farm-clock-card { position:relative; }
/* 아이콘 그림(30×30)은 좌우에 투명 여백이 8~9px씩 있어, 겹쳐 놓아야 눈에 보이는 틈이 약 7px이 된다. */
.farm-clock-pets { position:absolute; top:12px; right:6px; display:flex; }
.pet-badge + .pet-badge { margin-left:-10px; }
.pet-badge { display:inline-grid; place-items:center; padding:0; border:0; background:none; cursor:pointer; line-height:0; }
.pet-badge:focus-visible { outline:2px solid var(--apofarm-moss-deep); outline-offset:2px; }
.pet-icon { image-rendering:pixelated; display:block; }
.pet-look-row { display:flex; gap:10px; flex-wrap:wrap; margin:10px 0; }
.pet-look { display:grid; justify-items:center; gap:4px; padding:8px 10px; border:1px solid var(--apofarm-line); cursor:pointer; }
.pet-look:has(input:checked) { border-color:var(--apofarm-moss-deep); background:var(--apofarm-moss-pale, transparent); }
.pet-look input { position:absolute; opacity:0; pointer-events:none; }
.pet-detail-head { display:flex; align-items:center; gap:10px; margin-bottom:8px; }
.pet-detail-head small { display:block; color:var(--apofarm-muted, inherit); }
.pet-name-row { display:flex; align-items:flex-end; gap:8px; }
.pet-name-row .ui-select { flex:1; }
/* 휴대폰: 아이콘은 접힌 요약 띠에 둔다(카드 안 아이콘은 넓은 화면에서만 보인다). */
.mobile-status .farm-clock-pets { position:static; }
@media (max-width:950px) { .farm-clock-card .farm-clock-pets { display:none; } }
/* 길드 창고·내 물건 열 머리의 작은 검색칸 */
.guild-column-head { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.guild-mini-search { width:112px; min-height:28px; padding:3px 8px; font-size:var(--apofarm-text-xs); }
/* 같은 찾기 칸을 자원 창고·요리·제작·출하·방어 납품·거래·선물에도 쓴다(mini-search.js) */
.resources-screen .resource-controls .guild-mini-search { width:112px; align-self:center; justify-self:start; }
.list-toolbar .filter-strip .guild-mini-search { margin-left:auto; }
.shipment-heading-tools { display:inline-flex; align-items:center; gap:8px; }
.world-goal-head .guild-mini-search { margin-left:auto; align-self:center; }

/* 길드 레벨별 이점 안내 창 */
.guild-levels { display:grid; gap:8px; text-align:left; }
.guild-level-info { padding:10px 12px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.guild-level-info.current { border-color:var(--apofarm-ink-soft); }
.guild-level-info h3 { margin:0 0 6px; font-size:var(--apofarm-text-md, 1rem); }
.guild-level-info h3 small { margin-left:6px; color:var(--apofarm-ink-soft); font-weight:400; }
.guild-level-info dl { display:grid; gap:3px; margin:0; font-size:var(--apofarm-text-sm); line-height:1.6; }
.guild-level-info dl div { display:grid; grid-template-columns:7em minmax(0,1fr); gap:8px; }
.guild-level-info dt { color:var(--apofarm-ink-soft); }
.guild-level-info dd { margin:0; }
@media (max-width:640px) { .guild-level-info dl div { grid-template-columns:1fr; gap:0; } }

/* 칠일장(장터 → 칠일장 구역). 가판대는 접히는 카드, 줄은 "이름 · 값 · 행동" 한 줄(좁으면 두 줄). */
.sevenday-when { margin:0 0 8px; font-size:var(--apofarm-text-sm); }
.sevenday-foot { margin:6px 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.sevenday-meta { margin:6px 0 4px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.sevenday-subtitle { margin:14px 0 6px; font-size:var(--apofarm-text-sm); }
.sevenday-subtitle small { margin-left:4px; color:var(--apofarm-ink-soft); font-weight:400; }
.sevenday-tabs { margin:0 0 12px; overflow-x:auto; }
.sevenday-tabs button { flex:1 1 0; white-space:nowrap; }
/* 일정 줄: 글은 왼쪽, 설명 i 단추(.intro-info-toggle 모양)는 맨 오른쪽. 세 탭 설명을 한 창에 보인다. */
.sevenday-when { display:flex; align-items:center; gap:8px; }
.sevenday-when > span { flex:1; min-width:0; }
.sevenday-when .sevenday-help { flex:none; margin-left:0; }
.sevenday-help-body h4 { margin:12px 0 4px; font-size:var(--apofarm-text-sm); }
.sevenday-help-body h4:first-child { margin-top:0; }
.sevenday-help-body p { margin:0; line-height:1.7; }
.sevenday-chips { display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin:4px 0 8px; }
.sevenday-chip {
  min-height:28px; padding:2px 12px; border:1px solid var(--apofarm-line-dark); border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-surface); color:var(--apofarm-ink-soft); font:inherit; font-size:var(--apofarm-text-xs); cursor:pointer;
}
.sevenday-chip.on { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); }
.sevenday-clearance { margin:-2px 0 8px; padding:0 0 8px; border-bottom:1px solid var(--apofarm-line); font-size:var(--apofarm-text-xs); }
.sevenday-clearance .button { min-height:26px; padding:2px 10px; }
.sevenday-tag {
  display:inline-block; padding:0 6px; border-radius:var(--apofarm-radius-soft); background:var(--apofarm-paper-deep);
  color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); font-weight:500; white-space:nowrap;
}
.sevenday-tag.clear, .sevenday-tag.new { background:var(--apofarm-danger-pale); color:var(--apofarm-danger); }
.sevenday-tag.swap { background:var(--apofarm-water-pale); color:var(--apofarm-water); }
.sevenday-mine-note { color:var(--apofarm-ink-soft); white-space:nowrap; }
.sevenday-tag.want { background:var(--apofarm-soil-pale); color:var(--apofarm-soil-deep); }
.sevenday-tag.sell { background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); }
.sevenday-search { display:block; margin:8px 0 10px; }
.sevenday-say { margin:0 0 4px; }
.sevenday-say-row {
  display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:4px 12px; margin:0 0 12px; font-size:var(--apofarm-text-xs);
}
.sevenday-say-row small { color:var(--apofarm-ink-soft); }
.sevenday-search .toolbar-label { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); }
.sevenday-search input {
  width:100%; min-height:36px; padding:4px 10px; border:1px solid var(--apofarm-line-dark); background:var(--apofarm-surface); color:var(--apofarm-ink);
}
.sevenday-cards { display:grid; gap:8px; }
.sevenday-card { border:1px solid var(--apofarm-line); border-radius:var(--apofarm-radius-panel); background:var(--apofarm-surface); overflow:hidden; }
.sevenday-card.open:not(.npc) { border-color:var(--apofarm-moss); }
.sevenday-card-head {
  display:flex; align-items:center; gap:8px; width:100%; min-height:44px; padding:8px 12px; border:0; background:none;
  color:var(--apofarm-ink); font:inherit; text-align:left; cursor:pointer;
}
.sevenday-card-head small, .sevenday-card-title small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.sevenday-card-head b { flex:none; }
.sevenday-card-head .sevenday-pitch { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sevenday-card-title { display:flex; align-items:center; gap:8px; padding:10px 12px 0; }
.sevenday-chevron { margin-left:auto; color:var(--apofarm-ink-soft); transition:transform .15s; }
.sevenday-card.open .sevenday-chevron { transform:rotate(180deg); }
.sevenday-card-body { padding:0 12px 10px; border-top:1px solid var(--apofarm-line); }
.sevenday-card.npc .sevenday-card-body { border-top:0; }
.sevenday-dot { flex:none; width:8px; height:8px; border-radius:50%; background:var(--apofarm-fill-moss); }
.sevenday-dot.off { background:var(--apofarm-ink-faint); }
.sevenday-row {
  display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center; gap:4px 12px; padding:8px 0;
  border-top:1px solid var(--apofarm-line); font-size:var(--apofarm-text-sm);
}
.sevenday-card-body .sevenday-meta + .sevenday-row, .sevenday-list-box .sevenday-row:first-child, .sevenday-box h3 + .sevenday-row { border-top:0; }
.sevenday-row-label { min-width:0; line-height:1.5; }
.sevenday-row-label small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.sevenday-row-mid { font-weight:650; font-variant-numeric:tabular-nums; white-space:nowrap; }
.sevenday-row-mid s { color:var(--apofarm-ink-soft); font-weight:400; font-size:var(--apofarm-text-xs); }
.sevenday-row-act { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:6px; }
.sevenday-row-act .sevenday-form { margin:0; flex-wrap:nowrap; align-items:center; gap:6px; }
.sevenday-row-act .button { min-height:30px; padding:2px 12px; white-space:nowrap; }
/* 컴퓨터에서는 값·행동 칸 너비를 고정해 줄마다 값과 단추가 세로로 맞게 한다. */
@media (min-width:641px) {
  .sevenday-row { grid-template-columns:minmax(0,1fr) minmax(96px,auto) minmax(176px,auto); }
  .sevenday-row-mid { text-align:right; }
}
.sevenday-name {
  padding:0; border:0; background:none; color:var(--apofarm-ink); font:inherit; font-weight:650;
  text-decoration:underline dotted var(--apofarm-line-dark); text-underline-offset:3px; cursor:pointer;
}
.sevenday-qty {
  width:56px; min-height:30px; padding:2px 6px; border:1px solid var(--apofarm-line-dark); background:var(--apofarm-surface);
  color:var(--apofarm-ink); text-align:center;
}
.sevenday-link { padding:0; border:0; background:none; color:var(--apofarm-water); font:inherit; font-size:var(--apofarm-text-xs); cursor:pointer; }
.sevenday-card-body > .sevenday-foot { text-align:right; }
.sevenday-haggle-form { padding-top:8px; border-top:1px solid var(--apofarm-line); }
.sevenday-form { display:flex; flex-wrap:wrap; align-items:flex-end; gap:8px 12px; margin:8px 0; }
.sevenday-form label { display:grid; grid-template-columns:minmax(0,1fr); gap:4px; min-width:0; }
/* 글자 칸의 기본 너비(글꼴에 따라 넓다)가 좁은 화면에서 카드 밖으로 밀어내지 않게 칸 너비에 맞춘다. */
.sevenday-form label > input:not([type="number"]) { min-width:0; max-width:100%; }
.sevenday-form input:not([type="number"]), .sevenday-form select {
  min-height:32px; padding:4px 8px; border:1px solid var(--apofarm-line-dark); background:var(--apofarm-surface); color:var(--apofarm-ink);
}
.sevenday-form .num-stepper input[type="number"] { width:64px; min-height:32px; padding:4px 6px; border:1px solid var(--apofarm-line-dark); }
.sevenday-form select { max-width:100%; }
.sevenday-box {
  margin:0 0 10px; padding:6px 12px 8px; border:1px solid var(--apofarm-line); border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface);
}
.sevenday-box .sevenday-subtitle { margin-top:6px; }
.sevenday-list-box { padding:0 12px; border:1px solid var(--apofarm-line); border-radius:var(--apofarm-radius-panel); background:var(--apofarm-surface); }
.sevenday-list-box > .empty-note { margin:10px 0; }
.sevenday-sum { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; margin:0 0 8px; }
.sevenday-sum > div {
  display:grid; gap:2px; align-content:start; padding:8px 10px; border-radius:var(--apofarm-radius-control); background:var(--apofarm-paper-deep);
}
.sevenday-sum small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.sevenday-sum b { font-size:var(--apofarm-text-base); font-variant-numeric:tabular-nums; }
.sevenday-sum .button { justify-self:start; min-height:26px; margin-top:4px; padding:2px 10px; }
.sevenday-actions { display:flex; flex-wrap:wrap; gap:6px; margin:8px 0; }
.sevenday-actions .button { flex:1 1 0; padding-inline:8px; white-space:nowrap; }
.sevenday-link.danger { color:var(--apofarm-danger); }
.sevenday-panel { margin:0 0 10px; padding:4px 12px; border:1px dashed var(--apofarm-line-dark); border-radius:var(--apofarm-radius-panel); }
.sevenday-meter { height:10px; margin:6px 0 2px; border-radius:var(--apofarm-radius-pill); background:var(--apofarm-paper-deep); overflow:hidden; }
.sevenday-meter span { display:block; height:100%; background:var(--apofarm-fill-moss); }
.sevenday-stamps {
  display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:6px; margin:4px 0 8px; padding:0; list-style:none;
  font-size:var(--apofarm-text-xs);
}
.sevenday-stamps li {
  display:flex; gap:6px; align-items:flex-start; padding:6px 8px; border:1px dashed var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-control); color:var(--apofarm-ink-soft);
}
.sevenday-stamps li.done { border-style:solid; border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); }
.sevenday-log-box { margin:12px 0 0; font-size:var(--apofarm-text-sm); }
.sevenday-log-box summary { cursor:pointer; font-weight:650; }
.sevenday-log { margin:6px 0 0; padding-left:18px; line-height:1.7; }
.sevenday-log time { margin-right:4px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
@media (max-width:640px) {
  .sevenday-row { grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"label label" "mid act"; }
  .sevenday-row-label { grid-area:label; }
  .sevenday-row-mid { grid-area:mid; }
  .sevenday-row-act { grid-area:act; }
  .sevenday-form > label { flex:1 1 140px; }
  .sevenday-form > label:first-child { flex-basis:100%; }
  .sevenday-form > label > input:not([type="number"]) { width:100%; }
  .sevenday-form select { width:100%; }
  .sevenday-sum b { font-size:var(--apofarm-text-sm); }
  .sevenday-stamps { grid-template-columns:repeat(2,minmax(0,1fr)); }
}

/* src/player-ui/personal-event-pages.css */
.personal-event-page{--event-accent:#815627;--event-tint:#f5ead7;--event-border:#d8c3a4}
.event-theme-letters{--event-accent:#52633c;--event-tint:#eaf0df;--event-border:#c3cfad}
.event-theme-archive{--event-accent:#38616b;--event-tint:#e4eef1;--event-border:#b8cdd2}
.event-theme-workshop{--event-accent:#6b5546;--event-tint:#eee5db;--event-border:#cdbbab}
.event-theme-radio{--event-accent:#5e4f76;--event-tint:#ece7f2;--event-border:#c9bed8}
.event-theme-table{--event-accent:#8a4d3b;--event-tint:#f4e5dd;--event-border:#dbbdad}
.event-page-hero {
  position:relative;
  display:grid;
  grid-template-columns:minmax(0,1fr) 128px;
  gap:24px;
  padding:30px 28px;
  border:1px solid var(--event-border);
  border-top:4px solid var(--event-accent);
  background:linear-gradient(120deg,var(--event-tint),#fcfbf6);
  color:#29322c;
}
.event-page-kicker{font-size:var(--apofarm-text-2xs);font-weight:700;letter-spacing:.08em;color:var(--event-accent)}
.event-page-eyebrow{margin:14px 0 5px;font-size:var(--apofarm-text-xs);color:#59665d}
.event-page-hero h1{margin:0;font-family:var(--apofarm-font-display);font-size:clamp(1.6rem,3vw,2.2rem);line-height:1.35;color:var(--event-accent)}
.event-page-lead{margin:14px 0 8px;font-weight:700;line-height:1.6}
.event-page-story{margin:0;max-width:54ch;line-height:1.8;font-size:var(--apofarm-text-sm);color:#59665d}
.event-page-motif{width:128px;max-width:100%;align-self:center;color:var(--event-accent)}
.event-page-status {
  display:flex;
  flex-wrap:wrap;
  justify-content:space-between;
  align-items:center;
  gap:16px;
  padding:18px 22px;
  border:1px solid var(--event-border);
  border-top:0;
  background:var(--apofarm-surface-high);
}
.event-page-status>div{display:grid;gap:5px}.event-page-status b{color:var(--apofarm-ink);font-size:var(--apofarm-text-sm)}
.event-page-status small{font-size:var(--apofarm-text-2xs);color:var(--apofarm-ink-soft);line-height:1.6}
.event-page-status dl{display:flex;gap:24px;margin:0}.event-page-status dt{font-size:var(--apofarm-text-2xs);color:var(--apofarm-ink-soft)}
.event-page-status dd{margin:3px 0 0;font-size:var(--apofarm-text-lg);font-weight:700;color:var(--apofarm-ink)}.event-page-status dd small{margin-left:3px;font-weight:400}
.event-page-nav{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:16px 0}
.event-section-link {
  padding:8px 12px;
  border:1px solid var(--apofarm-line);
  color:var(--apofarm-ink);
  background:var(--apofarm-surface-high);
  font:inherit;
  font-size:var(--apofarm-text-xs);
  font-weight:700;
  cursor:pointer;
}
.event-page-nav .button{margin-left:auto}.event-section-link:hover{background:var(--event-tint);color:#29322c}
.event-section-link:focus-visible{outline:2px solid var(--event-accent);outline-offset:2px}
.event-page-intro{padding:18px 22px;margin-bottom:18px;border-left:3px solid var(--event-accent);background:var(--apofarm-surface-high)}
.event-page-intro h2{margin:0 0 10px;font-size:var(--apofarm-text-sm)}.event-page-intro ol{margin:0;padding-left:20px;line-height:1.9;font-size:var(--apofarm-text-xs)}
.event-page-intro p{margin:10px 0 0;font-size:var(--apofarm-text-2xs);color:var(--apofarm-ink-soft);line-height:1.7}
.event-page-section{min-width:0;scroll-margin-top:20px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high);margin-bottom:18px}
.event-page-section .section-heading{background:var(--event-tint);border-bottom:1px solid var(--event-border)}
.event-page-section .field-section-title{color:#29322c}
.event-page-section .event-reward-list{padding:8px 16px 16px;margin:0}
.event-delivery-body{display:grid;gap:16px;padding:18px 22px}.event-delivery-body p{margin:0;font-size:var(--apofarm-text-xs);line-height:1.7;color:var(--apofarm-ink-soft)}
.event-delivery-fields{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:14px}.event-delivery-fields label{display:grid;gap:8px;min-width:0;font-size:var(--apofarm-text-xs)}
.event-delivery-fields select,.event-delivery-fields input {
  box-sizing:border-box;
  width:100%;
  min-width:0;
  padding:10px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
  color:var(--apofarm-ink);
  font:inherit;
}
.event-delivery-preview{font-size:var(--apofarm-text-xs);line-height:1.7}.event-delivery-body>.button{justify-self:start}
@media(max-width:480px){.event-delivery-fields{grid-template-columns:minmax(0,1fr)}.event-delivery-body{padding:16px 18px}}
.event-page-columns{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px}
.event-page-chapters{list-style:none;display:grid;gap:0;padding:8px 18px 16px;margin:0}
.event-page-chapters li{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid var(--apofarm-line)}
.event-page-chapters li:last-child{border-bottom:0}.event-page-chapters li>span:nth-child(2){display:grid;gap:5px;min-width:0}
.event-page-chapters b{font-size:var(--apofarm-text-sm)}.event-page-chapters small{font-size:var(--apofarm-text-2xs);color:var(--apofarm-ink-soft);line-height:1.7}
.event-chapter-number{font-family:var(--apofarm-font-display);font-size:var(--apofarm-text-xl);color:var(--apofarm-ink-soft)}
.event-page-footer{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:4px;font-size:var(--apofarm-text-2xs);color:var(--apofarm-ink-soft)}
.rail-event-banner.personal-event-banner{height:auto;min-height:92px;border:1px solid #d8c3a4;border-left:4px solid #815627;background:linear-gradient(110deg,#f5ead7,#fcfbf6);color:#29322c}
.personal-event-banner .rail-event-kicker,.personal-event-banner small{color:#815627}.personal-event-banner strong{font-size:var(--apofarm-text-md)}
@media(max-width:720px){.event-page-hero{padding:22px 18px;grid-template-columns:minmax(0,1fr) 66px;gap:12px}.event-page-motif{width:66px}.event-page-hero h1{font-size:1.55rem}.event-page-status{padding:16px 18px}.event-page-status dl{width:100%;justify-content:space-between;gap:12px}.event-page-columns{grid-template-columns:minmax(0,1fr);gap:0}.event-page-nav .button{margin-left:0}.event-page-chapters{padding:5px 12px 12px}.event-page-chapters li{gap:8px;grid-template-columns:24px minmax(0,1fr) auto}.event-page-chapters .button{padding:7px 10px;min-width:0}.event-page-footer{align-items:flex-start}}

/* 준비중 배너: 눌러지지 않는 안내 칸 */
.personal-event-banner.is-pending{cursor:default;opacity:.88}
.rail-event-banner.personal-event-banner.is-pending:hover{border-color:#d8c3a4;border-left-color:#815627}
/* 그림 배경 상단(피난소의 작은 불빛): 장면이 상단 전체를 채우고 글자는 밝게 올린다. */
.event-page-hero.has-scene{grid-template-columns:minmax(0,1fr);min-height:300px;overflow:hidden;isolation:isolate;background:#0b1020;color:#f2ead8;border-color:#2a2f3e}
.event-page-hero.has-scene>div{position:relative;z-index:1;max-width:min(30rem,56%)}
.event-page-scene{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block}
.event-page-hero.has-scene .event-page-kicker{color:#f0c374}
.event-page-hero.has-scene .event-page-eyebrow{color:#c9c6bd}
.event-page-hero.has-scene h1{color:#ffe2a3;text-shadow:0 0 18px rgba(255,190,90,.35)}
.event-page-hero.has-scene .event-page-lead{color:#f6efdf}
.event-page-hero.has-scene .event-page-story{color:#d6d1c6}
.shelter-star{animation:shelter-twinkle 3.6s ease-in-out infinite}
.shelter-fire{animation:shelter-flicker 2.4s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
@keyframes shelter-twinkle{0%,100%{opacity:1}50%{opacity:.25}}
@keyframes shelter-flicker{0%,100%{opacity:1;transform:scale(1)}40%{opacity:.7;transform:scale(.9)}70%{opacity:.95;transform:scale(1.08)}}
@media(prefers-reduced-motion:reduce){.shelter-star,.shelter-fire{animation:none}}
@media(max-width:720px){.event-page-hero.has-scene{min-height:0;padding-bottom:130px}.event-page-hero.has-scene>div{max-width:none}.event-page-hero.has-scene .event-page-scene{top:auto;height:100%}}
/* 붕괴 방어를 닫은 동안의 오른쪽 배너: 피난소 밤 그림 일부(오른쪽 아래 텐트·불빛)를 깐다. */
.rail-event-banner.shelter-event-banner {
  position:relative;
  overflow:hidden;
  isolation:isolate;
  min-height:104px;
  gap:.35rem;
  border:1px solid #2a2f3e;
  border-left:4px solid #e9a94a;
  background:#0b1020;
  color:#f2ead8;
}
.rail-event-banner.shelter-event-banner:hover{border-color:#e9a94a}
.rail-event-banner.shelter-event-banner:focus-visible{outline:2px solid #f0c374;outline-offset:2px}
.shelter-event-banner .rail-event-scene{position:absolute;inset:0;width:100%;height:100%;z-index:-1;display:block}
.shelter-event-banner .rail-event-kicker{color:#f0c374;font-size:var(--apofarm-text-2xs);font-weight:700;letter-spacing:.08em}
.shelter-event-banner strong{color:#ffe2a3;text-shadow:0 1px 8px rgba(5,9,19,.9)}
.shelter-event-banner small{color:#e6dfcf;font-weight:600;text-shadow:0 1px 6px rgba(5,9,19,.9)}
.rail-event-banner.shelter-event-banner.is-pending{cursor:default}
.rail-event-banner.shelter-event-banner.is-pending:hover{border-color:#2a2f3e;border-left-color:#e9a94a}
/* 피난소의 작은 불빛 페이지 색: 상단 그림처럼 밤하늘 남색 바탕에 등불 호박색을 포인트로 쓴다.
   이 페이지 안에서만 공용 색 토큰을 바꿔 칸·글자·단추·입력칸이 함께 따라오게 한다. */
.personal-event-page.event-theme-shelter{
  --event-accent:#f0b85a;--event-tint:#1d2640;--event-border:#34405f;
  --apofarm-surface:#121a2c;--apofarm-surface-high:#172038;--apofarm-ink:#efe6d2;--apofarm-ink-soft:#b6b0a2;
  --apofarm-line:#2c3550;--apofarm-line-dark:#46527a;--apofarm-moss:#f0b85a;--apofarm-moss-deep:#c98a35;--apofarm-moss-pale:#27304d;
  --apofarm-fill-moss-deep:#94561a;--apofarm-fill-moss:#a9651f;--apofarm-on-dark:#fff6e3;
  padding:14px;background:radial-gradient(120% 60% at 80% 0%,#1b2440 0%,#0c1120 60%) #0c1120;color:var(--apofarm-ink);color-scheme:dark}
.event-theme-shelter .event-page-section .field-section-title{color:#ffe2a3}
.event-theme-shelter .event-page-section .section-heading{background:linear-gradient(90deg,#222c4a,#1a2238)}
.event-theme-shelter .event-section-link:hover{background:#27304d;color:#ffe2a3}
.event-theme-shelter .event-page-status{background:#141c31}
.event-theme-shelter .event-page-status dd,.event-theme-shelter .event-page-chapters b{color:#ffe7b8}
.event-theme-shelter .event-chapter-number{color:#f0b85a}
.event-theme-shelter .event-page-intro{background:#141c31;border-left-color:#f0b85a}
.event-theme-shelter .button:disabled{color:#8d8a84;border-color:#323b57}
.event-theme-shelter .event-delivery-fields select option{background:#121a2c;color:#efe6d2}

/* src/player-ui/world-defense-page.css */
/* 붕괴 방어 배너와 전용 페이지: 선택한 테마와 상관없이 검붉은 고정 색을 쓴다(대화 장면처럼 테마 밖 색).
   페이지 안에서는 기존 색 토큰을 다시 정의해, 이미 있는 막대·단추·목록이 같은 붉은 톤으로 바뀐다. */
.rail-event-banner.collapse-event-banner { position:relative; overflow:hidden; min-height:96px; gap:.4rem; border:1px solid #7a2b30; border-left:4px solid #c8323b;
  background:radial-gradient(120% 140% at 100% 0%,rgb(200 50 59 / 36%),transparent 58%),linear-gradient(110deg,#3a0d11,#1a090c); color:#fff2ee; text-align:left;
  box-shadow:0 0 0 1px rgb(0 0 0 / 40%) inset,0 6px 18px rgb(155 28 36 / 30%); }
.collapse-event-banner::after {
  content:"";
  position:absolute;
  right:-18px;
  top:-18px;
  width:78px;
  height:78px;
  border:1px solid rgb(224 96 90 / 32%);
  border-radius:50%;
  box-shadow:0 0 0 10px rgb(224 96 90 / 6%),0 0 0 22px rgb(224 96 90 / 3.5%);
  pointer-events:none;
}
.rail-event-banner.collapse-event-banner:hover { border-color:#e0605a; border-left-color:#e0605a; }
.rail-event-banner.collapse-event-banner:focus-visible { outline:2px solid #e0605a; outline-offset:2px; }
.collapse-event-banner .rail-event-kicker { display:flex; align-items:center; gap:6px; color:#e0605a; font-size:var(--apofarm-text-2xs); font-weight:700; letter-spacing:.08em; }
.collapse-event-dot { width:7px; height:7px; border-radius:50%; background:#c8323b; animation:collapse-pulse 1.8s infinite; flex:none; }
@keyframes collapse-pulse { 50% { opacity:.25; box-shadow:0 0 8px #c8323b; } }
.collapse-event-banner strong { color:#fff2ee; }
.collapse-event-banner small { color:#d9b9b4; font-size:var(--apofarm-text-2xs); font-weight:400; line-height:1.5; }
.collapse-banner-row { display:flex; justify-content:space-between; gap:8px; width:100%; color:#d9b9b4; font-size:var(--apofarm-text-2xs); }
.collapse-banner-meter { display:block; width:100%; height:6px; background:rgb(0 0 0 / 45%); border:1px solid rgb(224 96 90 / 30%); }
.collapse-banner-meter i { display:block; height:100%; background:linear-gradient(90deg,#9b1c24,#e0605a); }

.world-defense-screen { --apofarm-ink:#f1e3de; --apofarm-ink-soft:#b99a95; --apofarm-ink-faint:#a08682; --apofarm-paper:#140607; --apofarm-paper-deep:#0c0405;
  --apofarm-surface:#1f0a0c; --apofarm-surface-high:#2a0e11; --apofarm-line:#4a1b1f; --apofarm-line-dark:#7a2b30;
  --apofarm-moss:#e0605a; --apofarm-moss-deep:#f0a8a2; --apofarm-moss-pale:#3a1015; --apofarm-fill-moss:#9b1c24; --apofarm-fill-moss-deep:#7a1219;
  --apofarm-danger:#e0605a; --apofarm-danger-pale:#3a1015; --apofarm-world:#e0a05a; --apofarm-on-dark:#fff;
  position:relative; padding:18px; color:var(--apofarm-ink); border:1px solid #4a1b1f;
  background:radial-gradient(90% 40% at 100% 0%,rgb(200 50 59 / 22%),transparent 70%),#140607; }
.world-defense-screen .page-intro { position:relative; overflow:hidden; border:1px solid #7a2b30; border-top:4px solid #c8323b;
  background:radial-gradient(70% 140% at 100% 0%,rgb(200 50 59 / 40%),transparent 62%),linear-gradient(120deg,#33090d,#170708); }
.world-defense-screen .page-intro::after {
  content:"";
  position:absolute;
  right:-24px;
  top:-24px;
  width:120px;
  height:120px;
  border:1px solid rgb(224 96 90 / 35%);
  border-radius:50%;
  box-shadow:0 0 0 14px rgb(224 96 90 / 7%),0 0 0 30px rgb(224 96 90 / 4%);
  pointer-events:none;
}
.world-defense-screen .page-intro h1 { color:#fff2ee; text-shadow:0 0 22px rgb(200 50 59 / 55%); }
.world-defense-screen .shipment-world { border-color:#4a1b1f; box-shadow:0 0 0 1px rgb(0 0 0 / 35%) inset; }
.world-defense-screen .section-heading { background:linear-gradient(90deg,#3a1015,#1f0a0c); border-bottom:1px solid #7a2b30; }
.world-defense-screen .field-section-title { color:#fff2ee; }
.world-defense-screen .meter { background:#0c0405; border:1px solid #4a1b1f; }
.world-defense-screen .meter span,.world-defense-screen .meter.danger span,.world-defense-screen .meter.moss span {
  background:repeating-linear-gradient(135deg,#9b1c24 0 8px,#c8323b 8px 16px);
  box-shadow:0 0 12px rgb(200 50 59 / 55%);
}
.world-defense-screen .world-collapse strong { color:#e0605a; text-shadow:0 0 14px rgb(200 50 59 / 50%); }
.world-defense-screen .world-story { border-left:3px solid #c8323b; padding-left:12px; line-height:1.8; }
.world-defense-screen .button.primary { background:#9b1c24; border-color:#c8323b; color:#fff; box-shadow:0 0 14px rgb(200 50 59 / 35%); }
.world-defense-screen .button.primary:hover { background:#c8323b; }
.world-defense-screen .button.subtle { background:transparent; color:#f1e3de; border-color:#7a2b30; }
.world-defense-screen .button:disabled { opacity:.4; }
.world-defense-rewards { display:grid; gap:10px; }
.world-defense-rewards-head { display:flex; justify-content:space-between; align-items:baseline; flex-wrap:wrap; gap:4px 12px; }
.world-defense-rewards-head b { font-size:var(--apofarm-text-md); }
.world-defense-rewards-head span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.world-defense-reward-list { display:grid; gap:0; margin:0; padding:0; list-style:none; }
.world-defense-reward-list li { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:11px 0; border-bottom:1px solid var(--apofarm-line); }
.world-defense-reward-list li:last-child { border-bottom:0; }
.world-defense-reward-list li>span { display:grid; gap:3px; min-width:0; }
.world-defense-reward-list .resource-name-button {
  padding:0;
  border:0;
  background:none;
  color:inherit;
  font:inherit;
  font-weight:700;
  text-decoration:underline;
  text-decoration-style:dotted;
  text-underline-offset:3px;
  cursor:pointer;
}
.world-defense-reward-list .resource-name-button:hover { color:#f0a8a2; text-decoration-style:solid; }
.world-defense-reward-list .resource-name-button:focus-visible { outline:2px solid #e0605a; outline-offset:2px; }
.world-defense-reward-list small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
@media (max-width:720px) { .world-defense-screen { padding:12px; } }
@media (prefers-reduced-motion:reduce) { .collapse-event-dot { animation:none; } }

/* 개수 조절 칸: − / + 단추(number-stepper.js)와 입력칸을 방어 페이지의 검붉은 색에 맞춘다. 브라우저 기본 위·아래 단추는 stepper가 숨긴다. */
.world-defense-screen input[type="number"] { color-scheme:dark; accent-color:#c8323b; background:#0c0405; color:#f1e3de; border:1px solid #7a2b30; caret-color:#e0605a; }
.world-defense-screen input[type="number"]:focus { outline:2px solid #e0605a; outline-offset:-1px; border-color:#e0605a; position:relative; z-index:1; }
.world-defense-screen input[type="number"]:disabled { opacity:.5; }
.world-defense-screen .num-stepper { width:100%; }
.world-defense-screen .num-stepper input { flex:1; min-width:0; width:auto; }
.world-defense-screen .stepper-button { background:#2a0e11; border:1px solid #7a2b30; color:#e8b3ad; transition:background .15s,color .15s,border-color .15s; }
.world-defense-screen .stepper-button:hover:not(:disabled) { background:#4a1318; color:#fff2ee; border-color:#c8323b; }
.world-defense-screen .stepper-button:active:not(:disabled) { background:#9b1c24; }
.world-defense-screen .stepper-button:focus-visible { outline:2px solid #e0605a; outline-offset:-2px; position:relative; z-index:1; }
.world-defense-screen .stepper-button:disabled { opacity:.4; }
.world-defense-screen .world-give .num-stepper { width:auto; flex:none; }
.world-defense-screen .world-give .num-stepper input { width:64px; }

/* src/player-ui/chat-preview.css */
.player-chat {
  position:fixed;
  right:18px;
  bottom:18px;
  z-index:20;
  display:grid;
  justify-items:end;
  gap:9px;
  width:min(360px,calc(100vw - 28px));
  font-family:var(--apofarm-font-body);
  pointer-events:none;
}
/* 채팅 상자(바깥 틀)가 생존자 창 위를 덮어 같은 주파수·친구 탭이 눌리지 않던 것을 막는다. 실제로 보이는 단추·창만 눌린다. */
.player-chat > * { pointer-events:auto; }
.player-chat-panel {
  display:flex;
  flex-direction:column;
  width:100%;
  height:min(470px,calc(100dvh - 110px));
  min-height:280px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  box-shadow:var(--apofarm-shadow-overlay);
  overflow:hidden;
}
.player-chat-panel[hidden] { display:none; }
.player-chat-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:16px 17px 13px;
  border-bottom:1px solid var(--apofarm-line);
  background:var(--apofarm-paper);
}
.player-chat-head small { color:var(--apofarm-moss); font-size:var(--apofarm-text-2xs); font-weight:700; letter-spacing:.09em; }
.player-chat-head h2 { margin:0; font-size:var(--apofarm-text-base); font-weight:700; }
.player-chat-close {
  flex:none;
  width:30px;
  height:30px;
  padding:0;
  border:1px solid transparent;
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-2xl);
  line-height:1;
}
.player-chat-close:hover { border-color:var(--apofarm-line); color:var(--apofarm-ink); }
/* 지역·파티 채팅 탭(파티에 들어가 있을 때만 보인다) */
.player-chat-rooms { display:flex; gap:6px; padding:8px 17px 0; background:var(--apofarm-paper); }
.player-chat-rooms[hidden] { display:none; }
.player-chat-rooms button {
  flex:1;
  min-height:32px;
  padding:4px 10px;
  border:1px solid var(--apofarm-line);
  border-bottom:none;
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
  font-weight:700;
}
.player-chat-rooms button[aria-selected="true"] { background:var(--apofarm-surface-high); color:var(--apofarm-ink); }
.player-chat-rooms .room-unread { margin-left:5px; color:var(--apofarm-moss); }
.player-chat-note {
  margin:0;
  padding:8px 17px;
  border-bottom:1px solid var(--apofarm-line);
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
}
.player-chat-messages {
  flex:1;
  min-height:0;
  margin:0;
  padding:7px 17px 13px;
  overflow-y:auto;
  list-style:none;
}
.player-chat-message { padding:11px 0; border-bottom:1px solid var(--apofarm-line); }
.player-chat-message>div { display:flex; align-items:baseline; gap:9px; }
.player-chat-message strong { color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-xs); }
.player-chat-message time { color:var(--apofarm-ink-faint); font-size:var(--apofarm-text-2xs); font-variant-numeric:tabular-nums; }
.player-chat-message p { margin:4px 0 0; font-size:var(--apofarm-text-xs); line-height:1.55; overflow-wrap:anywhere; }
.player-chat-message.mine strong { color:var(--apofarm-soil-deep); }
.player-chat-title { margin-left:5px; color:var(--apofarm-ink-faint); font-size:inherit; font-weight:400; }
.player-chat-form { padding:12px 14px 13px; border-top:1px solid var(--apofarm-line); background:var(--apofarm-surface); }
.player-chat-form label { display:block; margin-bottom:6px; font-size:var(--apofarm-text-xs); font-weight:700; }
.player-chat-form>div { display:flex; gap:6px; }
.player-chat-form input:not([type="checkbox"]) {
  flex:1;
  min-width:0;
  min-height:36px;
  padding:8px 9px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-xs);
}
.player-chat-form .chat-broadcast-control { display:block; margin-top:8px; }
.player-chat-form .chat-broadcast-control .ui-check { display:flex; margin:0; min-height:44px; }
.player-chat-message.broadcast { border-left:3px solid var(--apofarm-moss); padding-left:8px; }
.player-chat-message.broadcast strong { color:var(--apofarm-moss-deep); }
.player-chat-message.offer p { color:var(--apofarm-moss-deep); font-style:italic; }
/* 받은 제안 줄의 수락·거절 단추(대기 중인 제안에만 보인다). */
.player-chat-content>.player-chat-offer-actions { gap:6px; margin-top:6px; }
.player-chat-content>.player-chat-offer-actions[hidden] { display:none; }
.player-chat-offer-actions .button { min-height:0; padding:4px 12px; font-size:var(--apofarm-text-xs); }
.player-chat-form button {
  flex:none;
  min-height:36px;
  padding:7px 10px;
  border:1px solid var(--apofarm-moss-deep);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-fill-moss-deep);
  color:var(--apofarm-on-dark);
  font-size:var(--apofarm-text-xs);
  font-weight:700;
}
.player-chat-form button:hover { background:var(--apofarm-fill-moss); }
.player-chat-form small { display:block; margin-top:7px; font-size:var(--apofarm-text-2xs); }
.player-chat-launcher {
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:43px;
  padding:9px 12px;
  border:1px solid var(--apofarm-moss-deep);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-fill-moss-deep);
  color:var(--apofarm-on-dark);
  box-shadow:var(--apofarm-shadow-soft);
  font-size:var(--apofarm-text-sm);
  font-weight:700;
}
.player-chat-launcher:hover { background:var(--apofarm-fill-moss); }
/* 새 글 알림 점: 단추 왼쪽 위에 크게. 어두운 단추 위에서도 보이게 밝은 테두리를 두르고, 처음에 몇 번 맥박처럼 커진다. */
.player-chat-launcher { position:relative; }
.player-chat-launcher.has-unread::before {
  content:"";
  position:absolute;
  top:-7px;
  left:-7px;
  width:16px;
  height:16px;
  border-radius:50%;
  background:#e5484d;
  box-shadow:0 0 0 2.5px #fff,0 2px 6px rgb(0 0 0 / 40%);
  animation:chat-unread-pulse 1.2s ease-out 3;
}
@keyframes chat-unread-pulse { 0% { transform:scale(.6); } 50% { transform:scale(1.25); } 100% { transform:scale(1); } }
@media (prefers-reduced-motion: reduce) { .player-chat-launcher.has-unread::before { animation:none; } }
.player-chat-launcher-state { padding-left:8px; border-left:1px solid var(--apofarm-on-dark-line); color:var(--apofarm-on-dark-soft); font-size:var(--apofarm-text-xs); }
.player-chat-launcher-state:empty { display:none; }
@media (max-width:950px) {
  .player-chat { right:12px; bottom:calc(78px + var(--apofarm-safe-bottom)); width:min(360px,calc(100vw - 24px)); }
  .player-chat-panel { height:min(470px,calc(100dvh - 180px)); }
}
@media (max-width:640px) {
  /* 휴대폰: 머리글 바로 아래까지 올라오는 높이(머리글 + 위 여백 8px + 아래 78px·안전영역 + 채팅 단추 53px을 뺀다) */
  .player-chat-panel { height:calc(100dvh - var(--apofarm-header-h) - 139px - var(--apofarm-safe-bottom)); min-height:220px; }
}
/* 배포본 채팅: 보낸 사람의 프로필 사진을 옆에 */
.player-chat[hidden] { display:none; }
.player-chat-message.with-avatar { display:grid; grid-template-columns:32px minmax(0,1fr); gap:10px; align-items:start; }
.player-chat-avatar {
  display:grid;
  place-items:center;
  width:32px;
  height:32px;
  border-radius:50%;
  overflow:hidden;
  background:var(--apofarm-soil-pale);
  color:var(--apofarm-soil-deep);
  font-size:var(--apofarm-text-sm);
  font-weight:700;
}
.player-chat-avatar img { width:100%; height:100%; object-fit:cover; }
.player-chat-content>div { display:flex; align-items:baseline; gap:9px; }
.player-chat-form small:empty { display:none; }
.player-chat-message.with-avatar>.player-chat-content { display:block; }
.player-chat-avatar { padding:0; border:0; cursor:pointer; }
.player-chat-avatar:hover { outline:2px solid var(--apofarm-moss); outline-offset:1px; }
.player-chat-name { padding:0; border:0; background:none; cursor:pointer; }
.player-chat-name:hover strong { text-decoration:underline; }

/* 구조 요청: 누가 쓰러졌을 때 서버가 띄우는 글 */
.player-chat-message.alert { margin:6px -8px; padding:8px; border-left:3px solid var(--apofarm-danger); background:var(--apofarm-danger-pale); }
.player-chat-message.alert p { color:var(--apofarm-danger); font-weight:700; }

/* 컴퓨터에서 채팅창 크기 조절(왼쪽 위 모서리를 끈다). 휴대폰·손가락 화면에서는 숨긴다. */
.player-chat-panel { position:relative; }
.player-chat-resize { display:none; }
@media (min-width:951px) and (pointer:fine) {
  .player-chat.custom-size { width:var(--chat-width); }
  .player-chat.custom-size .player-chat-panel { height:var(--chat-height); }
  .player-chat-resize { display:block; position:absolute; top:0; left:0; z-index:2; width:16px; height:16px; cursor:nwse-resize; touch-action:none;
    background:linear-gradient(135deg, var(--apofarm-line-dark) 0 2px, transparent 2px 5px, var(--apofarm-line-dark) 5px 6px, transparent 6px); opacity:.55; }
  .player-chat-resize:hover,.player-chat.resizing .player-chat-resize { opacity:1; }
  .player-chat.resizing { user-select:none; }
}

/* 1:1 채팅: 대화 목록과 목록으로 돌아가는 버튼 */
.player-chat-thread { border-bottom:1px solid var(--apofarm-line); }
.player-chat-thread>button {
  display:grid;
  grid-template-columns:32px minmax(0,1fr) auto;
  gap:10px;
  align-items:center;
  width:100%;
  padding:10px 0;
  border:0;
  background:none;
  color:inherit;
  text-align:left;
  cursor:pointer;
}
.player-chat-thread>button:hover strong { text-decoration:underline; }
.player-chat-thread>button>span:nth-child(2) { display:grid; gap:2px; min-width:0; }
.player-chat-thread strong { color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-xs); }
.player-chat-thread small { overflow:hidden; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); white-space:nowrap; text-overflow:ellipsis; }
.player-chat-thread time { align-self:start; color:var(--apofarm-ink-faint); font-size:var(--apofarm-text-2xs); font-variant-numeric:tabular-nums; }
.player-chat-thread .room-unread { margin-left:6px; }
/* 새 글이 온 대화: 채팅 단추와 같은 빨간 점을 사진 왼쪽 위에 붙인다. */
.player-chat-thread>button { position:relative; }
.player-chat-thread.has-unread>button::before {
  content:"";
  position:absolute;
  top:7px;
  left:-4px;
  z-index:1;
  width:11px;
  height:11px;
  border-radius:50%;
  background:#e5484d;
  box-shadow:0 0 0 2px #fff;
  animation:chat-unread-pulse 1.2s ease-out 3;
}
@media (prefers-reduced-motion: reduce) { .player-chat-thread.has-unread>button::before { animation:none; } }
.player-chat-thread-empty { padding:18px 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.player-chat-back {
  margin-right:4px;
  padding:2px 8px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-2xs);
  font-weight:700;
  cursor:pointer;
}
.player-chat-form input:disabled { opacity:.6; }

/* src/player-ui/chat-people.css */
.player-people {
  position:fixed;
  right:18px;
  bottom:18px;
  z-index:20;
  display:grid;
  justify-items:end;
  gap:9px;
  width:min(320px,calc(100vw - 412px));
  font-family:var(--apofarm-font-body);
  pointer-events:none;
}
.player-people > * { pointer-events:auto; }
.player-people[hidden],.player-people-panel[hidden],.player-people-body[hidden] { display:none; }
.player-people-panel {
  display:flex;
  flex-direction:column;
  width:100%;
  height:min(470px,calc(100dvh - 110px));
  min-height:280px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  box-shadow:var(--apofarm-shadow-overlay);
  overflow:hidden;
}
.player-people-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:16px 17px 13px;
  border-bottom:1px solid var(--apofarm-line);
  background:var(--apofarm-paper);
}
.player-people-head h2 { margin:0; font-size:var(--apofarm-text-base); font-weight:700; }
.player-people-close {
  flex:none;
  width:30px;
  height:30px;
  padding:0;
  border:1px solid transparent;
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-2xl);
  line-height:1;
}
.player-people-close:hover { border-color:var(--apofarm-line); color:var(--apofarm-ink); }
.player-people-tabs { display:flex; gap:6px; padding:8px 17px 0; background:var(--apofarm-paper); }
.player-people-tabs button {
  flex:1;
  min-height:32px;
  padding:4px 10px;
  border:1px solid var(--apofarm-line);
  border-bottom:0;
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
  font-weight:700;
}
.player-people-tabs button[aria-selected="true"] { background:var(--apofarm-surface-high); color:var(--apofarm-ink); }
.player-people-body { flex:1; min-height:0; display:flex; flex-direction:column; }
.player-people-intro { margin:0; padding:9px 17px; border-bottom:1px solid var(--apofarm-line); color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.player-people-content { flex:1; min-height:0; overflow:auto; }
.player-people-empty { margin:0; padding:22px 17px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.player-people-list { margin:0; padding:3px 17px; list-style:none; }
.player-people-list li + li { border-top:1px solid var(--apofarm-line); }
.player-people-person {
  display:flex;
  align-items:center;
  gap:10px;
  width:100%;
  min-height:55px;
  padding:8px 0;
  border:0;
  background:transparent;
  color:var(--apofarm-ink);
  text-align:left;
  cursor:pointer;
}
.player-people-person:hover .player-people-copy strong { text-decoration:underline; }
.player-people-avatar {
  flex:none;
  display:grid;
  place-items:center;
  width:32px;
  height:32px;
  border-radius:50%;
  overflow:hidden;
  background:var(--apofarm-soil-pale);
  color:var(--apofarm-soil-deep);
  font-size:var(--apofarm-text-sm);
  font-weight:700;
}
.player-people-avatar img { width:100%; height:100%; object-fit:cover; }
.player-people-copy { display:grid; gap:3px; min-width:0; }
.player-people-copy strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:var(--apofarm-text-xs); }
.player-people-copy small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); }
.player-people-online-dot { flex:none; width:7px; height:7px; margin-left:auto; border-radius:50%; background:var(--apofarm-fill-moss); }
.player-people-foot { padding:10px 17px; border-top:1px solid var(--apofarm-line); background:var(--apofarm-surface); color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); }
.player-people-launcher {
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:43px;
  padding:9px 12px;
  border:1px solid var(--apofarm-moss-deep);
  border-radius:var(--apofarm-radius-control);
  background:var(--apofarm-fill-moss-deep);
  color:var(--apofarm-on-dark);
  box-shadow:var(--apofarm-shadow-soft);
  font-size:var(--apofarm-text-sm);
  font-weight:700;
}
.player-people-launcher:hover { background:var(--apofarm-fill-moss); }
/* 맨 위로 단추가 보이면 떠 있는 단추 줄이 그만큼(44px + 간격 8px) 왼쪽으로 비켜난다. */
/* 채팅·생존자 창을 열어 둔 동안은 비켜나지 않고(창이 화면 밖으로 밀리지 않게) 맨 위로 단추를 숨긴다. */
:root { --float-shift:0px; }
html.back-to-top-shown:not(:has(#player-chat-panel:not([hidden]), #player-people-panel:not([hidden]))) { --float-shift:52px; }
html:has(#player-chat-panel:not([hidden]), #player-people-panel:not([hidden])) .back-to-top { display:none; }
.player-people { right:calc(18px + var(--float-shift)); transition:right .15s; }
.player-chat { right:calc(18px + var(--float-shift) + var(--people-launcher-width, 130px) + 8px); transition:right .15s; }
.player-chat.people-open:not(.people-compact) .player-chat-panel { transform:translateX(calc(var(--people-launcher-width, 130px) - var(--people-panel-width, 320px) - 4px)); }
.player-chat.people-compact .player-chat-panel { left:calc(var(--people-launcher-width, 130px) + 8px); }
.player-people.compact { width:min(360px,calc(100vw - 36px)); }
@media (max-width:950px) {
  .player-people { right:calc(12px + var(--float-shift)); }
  .player-chat { right:calc(12px + var(--float-shift) + var(--people-launcher-width, 130px) + 8px); }
  .player-people.compact { right:calc(12px + var(--float-shift)); bottom:calc(78px + var(--apofarm-safe-bottom)); width:min(360px,calc(100vw - 24px)); }
  .player-people.compact .player-people-panel { height:min(470px,calc(100dvh - 180px)); }
  .player-chat-launcher,.player-people-launcher { display:grid; place-items:center; width:44px; height:44px; min-height:44px; padding:0; gap:0; position:relative; }
  .player-chat-launcher > span,.player-people-launcher > span { display:none; }
  .player-chat-launcher svg,.player-people-launcher svg { width:20px; height:20px; }
}
@media (max-width:640px) {
  .player-people-panel { height:min(430px,calc(100dvh - 165px)); min-height:220px; }
}

/* src/player-ui/character-screen.css */
.character-screen { display:grid; align-content:start; gap:16px; max-width:none; padding:18px clamp(16px,1.8vw,30px) 70px; }
.character-attributes,.character-skills { padding:22px 24px 24px; }
.character-attributes>p,.character-skills>p { margin:0 0 18px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }
.character-stat-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:0; margin:0; border-top:1px solid var(--apofarm-line); border-left:1px solid var(--apofarm-line); }
.character-stat {
  display:grid;
  grid-template-columns:1fr auto;
  align-content:start;
  gap:5px 10px;
  min-width:0;
  padding:12px 14px;
  border-right:1px solid var(--apofarm-line);
  border-bottom:1px solid var(--apofarm-line);
}
.character-stat dt { align-self:center; font-size:var(--apofarm-text-sm); font-weight:700; }
.character-stat dd { margin:0; color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-xl); font-weight:700; font-variant-numeric:tabular-nums; }
.character-stat-add {
  grid-column:2;
  justify-self:end;
  padding:3px 6px;
  border:1px solid var(--apofarm-moss);
  background:var(--apofarm-moss-pale);
  color:var(--apofarm-moss-deep);
  font-size:var(--apofarm-text-2xs);
  font-weight:700;
  cursor:pointer;
}
.character-stat p { grid-column:1/-1; margin:0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.character-unspent { color:var(--apofarm-moss-deep); white-space:nowrap; }
.character-attributes>p.character-preview-note { margin:13px 0 0; font-size:var(--apofarm-text-xs); }
.character-derived-head { display:flex; justify-content:space-between; align-items:baseline; gap:10px; margin:22px 0 9px; }
.character-derived-head h3 { margin:0; font-size:var(--apofarm-text-md); }
.character-derived-head small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-2xs); }
/* 세부 능력치는 기본으로 접는다. */
.character-fold { display:inline-flex; align-items:center; gap:6px; padding:0; border:0; background:none; color:inherit; font:inherit; cursor:pointer; }
.character-fold span { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.character-derived-grid[hidden] { display:none; }
.character-derived-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin:0; border-top:1px solid var(--apofarm-line); border-left:1px solid var(--apofarm-line); }
.character-trait-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.character-trait-list>div{padding:11px 13px;border:1px solid var(--apofarm-line);background:var(--apofarm-surface-high)}
.character-trait-list strong{font-size:var(--apofarm-text-sm)}
.character-trait-list p{margin:5px 0;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.character-trait-list small{color:var(--apofarm-moss-deep);font-size:var(--apofarm-text-xs)}
.character-detail {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:6px;
  min-width:0;
  padding:9px 11px;
  border-right:1px solid var(--apofarm-line);
  border-bottom:1px solid var(--apofarm-line);
  font-size:var(--apofarm-text-xs);
}
.character-detail dt { color:var(--apofarm-ink-soft); }
.character-detail dd { margin:0; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; }
.character-equipment-group + .character-equipment-group { margin-top:18px; }
.character-equipment-group h3 { margin:0 0 8px; font-size:var(--apofarm-text-sm); }
.character-equipment-list {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:0;
  margin:0;
  padding:0;
  border-top:1px solid var(--apofarm-line);
  border-left:1px solid var(--apofarm-line);
  list-style:none;
}
/* 효과 문구는 길어질 수 있으므로 이름 아래 줄로 내려 감싼다. 한 줄에 두면 좁은 화면에서 이름이 사라지고 해제 단추가 밖으로 밀린다. */
.character-equipment-row {
  display:grid;
  grid-template-columns:minmax(55px,auto) minmax(0,1fr) auto;
  grid-template-areas:"label name action" "label effect action";
  align-items:center;
  gap:2px 8px;
  min-width:0;
  min-height:48px;
  padding:9px 11px;
  border-right:1px solid var(--apofarm-line);
  border-bottom:1px solid var(--apofarm-line);
  font-size:var(--apofarm-text-xs);
}
.character-equipment-row span,.character-equipment-row small { color:var(--apofarm-ink-soft); }
.character-equipment-row > span { grid-area:label; }
.character-equipment-row strong { grid-area:name; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.character-equipment-row small { grid-area:effect; min-width:0; line-height:1.45; overflow-wrap:anywhere; }
.character-equipment-row small:empty { display:none; }
.character-equipment-row:has(> small:empty) strong { grid-row:1 / span 2; }
.character-equipment-row > button { grid-area:action; }
.character-equipment-row button {
  padding:4px 7px;
  border:1px solid var(--apofarm-line-dark);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  cursor:pointer;
  font-size:var(--apofarm-text-xs);
}
.equipped-mark { color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-2xs); font-weight:700; }
.setup-stat-title { margin-top:2px; }
.setup-stat-total {
  display:flex;
  align-items:center;
  gap:12px;
  margin-bottom:10px;
  padding:9px 12px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-moss-pale);
  font-size:var(--apofarm-text-xs);
}
.setup-stat-total strong { margin-left:auto; font-variant-numeric:tabular-nums; }
.setup-stat-total span { color:var(--apofarm-ink-soft); }
.setup-stat-grid { display:grid; grid-template-columns:1fr; gap:6px; }
.setup-stat-row {
  display:grid;
  grid-template-columns:1fr auto;
  align-items:center;
  gap:3px 10px;
  padding:9px 10px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
  font-size:var(--apofarm-text-sm);
}
.setup-stat-name { font-weight:700; }
.setup-stat-description { grid-column:1/-1; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.4; white-space:nowrap; overflow-x:auto; }
.setup-stat-controls { display:flex; flex:none; align-items:center; gap:4px; }
.setup-stat-controls strong { min-width:24px; text-align:center; font-variant-numeric:tabular-nums; }
.setup-stat-controls button { width:26px; height:26px; padding:0; border:1px solid var(--apofarm-line-dark); background:var(--apofarm-surface-high); color:var(--apofarm-ink); cursor:pointer; }
.setup-stat-controls button:disabled { opacity:.35; cursor:default; }
.setup-stat-note { margin:8px 0 24px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.character-skill-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; }
.character-skill-group { min-width:0; padding:16px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.character-skill-heading { margin:0; font-size:var(--apofarm-text-base); }
.character-skill-toggle {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  width:100%;
  min-height:32px;
  padding:0;
  border:0;
  background:none;
  color:inherit;
  font:inherit;
  text-align:left;
  cursor:pointer;
}
.character-skill-toggle:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.character-skill-name { flex:1; min-width:0; font-weight:700; }
.character-skill-toggle>strong { color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-sm); font-variant-numeric:tabular-nums; white-space:nowrap; }
.character-skill-toggle .section-chevron { flex:none; transition:transform .15s ease; }
.character-skill-toggle[aria-expanded=false] .section-chevron { transform:rotate(-90deg); }
.character-skill-toggle[aria-expanded=true] { margin-bottom:12px; }
.character-skill-body[hidden] { display:none; }
@media (max-width:640px) { .character-skill-toggle { min-height:44px; } .character-skill-toggle[aria-expanded=true] { margin-bottom:8px; } }
.character-skill-group .meter { height:5px; }
.character-skill-progress { min-height:44px; margin:7px 0 11px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.character-skill-group ul { margin:0; padding:0; list-style:none; border-top:1px solid var(--apofarm-line); }
.character-skill { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px; padding:11px 0; border-bottom:1px solid var(--apofarm-line); }
.character-skill:last-child { border-bottom:0; }
.character-skill strong,.character-skill small { display:block; }
.character-skill strong { font-size:var(--apofarm-text-xs); }
.character-skill small { margin-top:4px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.character-skill>span { align-self:start; color:var(--apofarm-ink-faint); font-size:var(--apofarm-text-2xs); white-space:nowrap; }
.character-skill.unlocked>span { color:var(--apofarm-moss-deep); font-weight:700; }
.character-skill.locked strong { color:var(--apofarm-ink-soft); }
@media (max-width:1250px) { .character-skill-grid { grid-template-columns:1fr; } .character-skill-progress { min-height:0; } .character-derived-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media (max-width:950px) { .character-screen { padding-bottom:20px; } }
/* 다른 탭(farm-layout.css)과 같은 바깥 여백 */
@media (max-width:640px) { .character-screen { gap:12px; padding:12px 14px 12px; } .character-attributes,.character-skills { padding:16px 14px; } }
@media (max-width:640px) {
  .character-stat { padding:12px; }
  .character-stat-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .character-derived-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .character-equipment-list { grid-template-columns:1fr; }
}

/* 스킬 효과 */
.character-skill .character-skill-effect{color:var(--apofarm-moss-deep);font-weight:600}
.character-skill.locked .character-skill-effect{color:var(--apofarm-ink-soft);font-weight:400}
.character-skill-total{margin:0 0 12px;padding:10px 12px;border-radius:var(--apofarm-radius-soft);background:var(--apofarm-moss-pale);font-size:var(--apofarm-text-sm);line-height:1.55}
.character-skill-total strong{margin-right:6px}
/* 칭호 */
.character-titles { padding:18px 24px 22px; }
.character-titles>p { margin:0 0 14px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.6; }
.title-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(250px,1fr)); gap:10px; margin:0; padding:0; list-style:none; }
.title-card { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:start; gap:10px; padding:12px 14px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.title-card>div { display:grid; gap:3px; min-width:0; }
.title-card strong { font-family:var(--apofarm-font-display); font-size:var(--apofarm-text-base); }
.title-card small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.title-card .title-effect { color:var(--apofarm-moss-deep); font-weight:650; }
.title-card .title-how { color:var(--apofarm-ink-faint); }
.title-card>span { color:var(--apofarm-ink-faint); font-size:var(--apofarm-text-xs); white-space:nowrap; }
.title-card.is-worn { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); }
.character-titles .filter-strip button { min-height:34px; padding:6px 12px; font-size:var(--apofarm-text-xs); }
.title-card .title-actions { display:grid; gap:4px; min-width:0; }
/* 카드 안 단추는 작게(터치 화면은 공용 규칙대로 44px을 지킨다) */
.title-card .title-actions .button { min-height:30px; padding:4px 10px; font-size:var(--apofarm-text-xs); }
.title-card .title-slot { margin-left:4px; color:var(--apofarm-moss-deep); font-family:inherit; font-weight:650; }
.title-card.is-locked strong { color:var(--apofarm-ink-soft); }
.player-title { display:block; margin-top:2px; color:var(--apofarm-moss-deep); font-family:var(--apofarm-font-display); font-size:var(--apofarm-text-sm); font-weight:700; }
@media (max-width:640px) { .character-titles { padding:16px 14px; } }
.character-titles>p.title-records { margin:-6px 0 14px; color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-xs); font-weight:650; }
/* 도감 */
.codex-screen { display:grid; align-content:start; gap:16px; padding:18px clamp(16px,1.8vw,30px) 70px; }
.codex-body { padding:18px 24px 24px; }
.codex-tabs { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:16px; }
.codex-tab {
  min-height:36px;
  padding:0 14px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  font:inherit;
  font-size:var(--apofarm-text-sm);
  cursor:pointer;
}
.codex-tab small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.codex-tab[aria-pressed=true] { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); font-weight:700; }
.codex-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:10px; margin:0; padding:0; list-style:none; }
.codex-card { display:grid; gap:4px; padding:12px 14px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.codex-card strong { font-family:var(--apofarm-font-display); font-size:var(--apofarm-text-base); }
.codex-card small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.codex-card .codex-found-at { color:var(--apofarm-ink-faint); }
.codex-card.is-hidden { border-style:dashed; background:transparent; }
.codex-card.is-hidden strong { color:var(--apofarm-ink-faint); }
.codex-empty { margin:0; padding:30px 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); text-align:center; }
@media (max-width:640px) { .codex-body { padding:16px 14px; } }
.character-equipment-row .resource-name-button {
  max-width:100%;
  padding:0;
  overflow:hidden;
  border:0;
  background:none;
  color:inherit;
  font:inherit;
  font-weight:700;
  text-align:left;
  text-overflow:ellipsis;
  white-space:nowrap;
  cursor:pointer;
}
.character-equipment-row .resource-name-button:hover { color:var(--apofarm-moss-deep); text-decoration:underline; text-underline-offset:3px; }
.farm-trait-list{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.farm-trait {
  display:grid;
  grid-template-columns:42px minmax(0,1fr);
  gap:8px;
  align-items:baseline;
  padding:9px 13px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface-high);
  font-size:var(--apofarm-text-xs);
  line-height:1.55;
}
.farm-trait b{font-size:var(--apofarm-text-xs)}
.farm-trait.pro b{color:var(--apofarm-moss-deep)}
.farm-trait.con b{color:var(--apofarm-danger)}

/* src/player-ui/combat-preview.css */
.combat-preview { border:1px solid var(--apofarm-line); background:var(--apofarm-surface); box-shadow:var(--apofarm-shadow-soft); }
.combat-preview-body { padding:18px 22px 22px; }
.combat-preview-body>.small-note { margin:0 0 16px; line-height:1.6; }
.combat-start { display:flex; flex-wrap:wrap; align-items:end; gap:10px; }
.combat-start .ui-select { color:var(--apofarm-ink-soft); }
.combat-fighters { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.combat-fighters>div {
  display:grid;
  grid-template-columns:1fr auto;
  gap:8px;
  padding:13px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface-high);
  font-size:var(--apofarm-text-xs);
}
.combat-fighters strong { font-variant-numeric:tabular-nums; }
.combat-fighters .meter { grid-column:1/-1; }
.combat-fighters>div>small { grid-column:1/-1; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.combat-round-state { margin:16px 0 10px; font-weight:700; font-size:var(--apofarm-text-md); }
.combat-action-buttons { display:flex; flex-wrap:wrap; gap:7px; }
.combat-action-buttons button { display:flex; align-items:center; gap:8px; }
.combat-action-buttons small { opacity:.7; font-size:var(--apofarm-text-xs); }
.combat-history { display:grid; gap:7px; margin:16px 0 0; padding:0; list-style:none; }
.combat-history li { padding:12px 13px; border:1px solid var(--apofarm-line); background:var(--apofarm-surface-high); }
.combat-history strong,.combat-history small { display:block; }
.combat-history strong { font-size:var(--apofarm-text-xs); }
.combat-history small { margin:3px 0 8px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.combat-history p { margin:3px 0; font-size:var(--apofarm-text-xs); line-height:1.45; }
.combat-clear {
  display:block;
  margin:14px 0 0 auto;
  padding:4px 0;
  border:0;
  background:none;
  color:var(--apofarm-ink-soft);
  cursor:pointer;
  font-size:var(--apofarm-text-xs);
  text-decoration:underline;
}
@media (max-width:640px) { .combat-preview-body { padding:15px; } .combat-fighters { grid-template-columns:1fr; } .combat-action-buttons { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); } .combat-action-buttons button { justify-content:space-between; } }

/* src/player-ui/settings-screen.css */
.top-actions .top-settings {
  gap:6px;
  min-height:36px;
  padding:5px 11px;
  border:1px solid transparent;
  border-radius:var(--apofarm-radius-pill);
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
  white-space:nowrap;
  cursor:pointer;
}
.top-actions .top-settings:hover,.top-actions .top-settings.active { border-color:var(--apofarm-line); background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); }
.top-actions .top-settings:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.report-notice-count { display:inline-block; padding:2px 6px; border-radius:10px; background:var(--apofarm-fill-soil); color:#fff; font-size:10px; font-weight:700; vertical-align:middle; }

.settings-screen { display:grid; align-content:start; gap:16px; padding:18px clamp(16px,1.8vw,30px) 70px; }
.settings-content { display:grid; align-content:start; gap:16px; }
.settings-panel { min-width:0; border:1px solid var(--apofarm-line); background:var(--apofarm-surface); box-shadow:var(--apofarm-shadow-soft); }
.settings-panel .section-heading>div { display:grid; gap:4px; }
.settings-panel .section-number { color:var(--apofarm-moss-deep); font-size:var(--apofarm-text-2xs); font-weight:700; letter-spacing:.08em; }
.settings-profile { display:grid; grid-template-columns:72px minmax(0,1fr) auto; align-items:center; gap:16px; padding:22px 24px; }
.settings-avatar { display:grid; place-items:center; overflow:hidden; width:72px; height:72px; border-radius:50%; background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); }
.settings-profile-copy { min-width:0; }
.settings-profile-copy strong,.settings-profile-copy small { display:block; }
.settings-profile-copy strong { font-size:var(--apofarm-text-lg); }
.settings-profile-copy small { margin-top:3px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.settings-profile-copy p { margin:8px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.5; white-space:pre-wrap; }
.settings-profile>.button { justify-self:end; white-space:nowrap; }
.settings-panel .collapsible-body[hidden] { display:none; }
.settings-rows { padding:0 24px; }
.settings-row { display:flex; align-items:center; justify-content:space-between; gap:22px; min-height:92px; padding:18px 0; }
.settings-row+.settings-row { border-top:1px solid var(--apofarm-line); }
.settings-row strong { font-size:var(--apofarm-text-sm); }
.settings-row p { margin:4px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.5; }
.settings-switch {
  display:inline-flex;
  flex:none;
  align-items:center;
  gap:8px;
  min-width:70px;
  padding:6px 9px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink-soft);
  cursor:pointer;
}
.settings-switch span { position:relative; width:29px; height:17px; border-radius:var(--apofarm-radius-pill); background:var(--apofarm-line-dark); }
.settings-switch span:after { position:absolute; top:3px; left:3px; width:11px; height:11px; border-radius:50%; background:var(--apofarm-surface-high); content:""; transition:transform .15s ease; }
.settings-switch.is-on { border-color:var(--apofarm-moss); color:var(--apofarm-moss-deep); }
.settings-switch.is-on span { background:var(--apofarm-fill-moss); }
.settings-switch.is-on span:after { transform:translateX(12px); }
.settings-switch small { font-size:var(--apofarm-text-xs); font-weight:700; }
.settings-switch:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.settings-support { padding:20px 24px; }
.settings-support p { margin:0 0 14px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.5; }
.settings-support-actions { display:flex; flex-wrap:wrap; gap:8px; }
.settings-support>small { display:block; margin-top:10px; color:var(--apofarm-ink-faint); }
.report-inbox li { padding:10px 0; }
.report-inbox li+li { border-top:1px solid var(--apofarm-line); }
.report-inbox li p { margin:8px 0 0; padding:10px; background:var(--apofarm-moss-pale); white-space:pre-wrap; overflow-wrap:anywhere; font-size:12px; line-height:1.55; }
.report-new-tag { color:var(--apofarm-soil); font-size:11px; }
.report-form { display:grid; gap:13px; max-height:min(68vh,640px); overflow:auto; padding-right:5px; }
.report-form .field-label { display:grid; gap:5px; }
.report-kind-tabs { display:flex; flex-wrap:wrap; gap:1px; }
.report-form .field-label>span { color:var(--apofarm-soil-deep); font-size:11px; }
.report-form input[type="file"] { max-width:100%; font-size:12px; }
.report-inbox-detail { margin-top:7px; font-size:12px; }
.report-inbox-detail summary { cursor:pointer; color:var(--apofarm-moss-deep); font-weight:700; }
.report-inbox-detail a { display:inline-block; margin-top:8px; color:var(--apofarm-moss-deep); font-weight:700; }
@media (max-width:950px) { .settings-screen { padding-bottom:20px; } }
@media (max-width:640px) {
  .top-actions { gap:0; }
  .top-actions .top-settings { padding:5px 8px; }
  /* 휴대폰: 설정은 톱니만 보인다(이름은 aria-label이 읽어 준다). 새 소식 숫자는 톱니 모서리에 단다. */
  .top-actions .top-settings:not(.top-help) { position:relative; }
  .top-actions .top-settings:not(.top-help) .top-settings-label { display:none; }
  .top-actions .top-settings:not(.top-help) .report-notice-count { position:absolute; top:0; right:0; padding:1px 5px; font-size:10px; line-height:1.3; }
  .settings-screen { gap:12px; padding:12px 14px 12px; }
  .settings-profile { grid-template-columns:56px minmax(0,1fr); gap:12px; padding:16px 14px; }
  .settings-avatar { width:56px; height:56px; }
  .settings-profile>.button { grid-column:2; justify-self:start; }
  .settings-rows { padding:0 14px; }
  .settings-support { padding:16px 14px; }
}
.settings-row .ui-select { flex:0 1 200px; min-width:150px; }
.sfx-volume { display:grid; gap:6px; flex:0 1 160px; min-width:100px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); }
.sfx-volume input { width:100%; min-width:0; accent-color:var(--apofarm-moss-deep); }

/* 맨 아래 탈퇴 버튼: 상자 없이 오른쪽에 둔다. */
.settings-withdraw { display:flex; justify-content:flex-end; padding-top:6px; }
.settings-withdraw .text-button { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); text-decoration:underline; }
.settings-note { margin:0; padding:18px 24px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.6; }

/* 화면 설정: 글자 크기, 움직임 줄이기 */
html[data-font-size="small"] { font-size:90%; }
html[data-font-size="large"] { font-size:115%; }
html[data-reduce-motion="on"] *, html[data-reduce-motion="on"] *::before, html[data-reduce-motion="on"] *::after {
  animation-duration:.001ms !important;
  animation-iteration-count:1 !important;
  transition-duration:.001ms !important;
  scroll-behavior:auto !important;
}

/* BGM 플레이어 위젯: 상단 바 오른쪽, 누르면 아래로 펼쳐진다 */
.music-widget { position:relative; display:flex; align-items:center; gap:2px; }
.top-actions .music-chip,.top-actions .music-mini {
  min-height:36px;
  border:1px solid transparent;
  background:transparent;
  color:var(--apofarm-ink-soft);
  font-size:var(--apofarm-text-xs);
  cursor:pointer;
}
.top-actions .music-chip { gap:6px; max-width:150px; padding:5px 10px; border-radius:var(--apofarm-radius-pill) 0 0 var(--apofarm-radius-pill); }
.top-actions .music-widget:not(:has(.music-mini)) .music-chip { border-radius:var(--apofarm-radius-pill); }
.top-actions .music-mini { width:36px; padding:0; border-radius:0 var(--apofarm-radius-pill) var(--apofarm-radius-pill) 0; font-size:11px; }
.top-actions .music-chip:hover,.top-actions .music-mini:hover,.top-actions .music-chip[aria-expanded="true"] {
  border-color:var(--apofarm-line);
  background:var(--apofarm-moss-pale);
  color:var(--apofarm-moss-deep);
}
.top-actions .music-chip:focus-visible,.top-actions .music-mini:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.music-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.music-widget.is-playing .music-note { color:var(--apofarm-moss); }
.music-panel {
  position:absolute;
  z-index:30;
  top:calc(100% + 10px);
  right:0;
  display:grid;
  gap:14px;
  width:min(320px,calc(100vw - 24px));
  padding:16px;
  border:1px solid var(--apofarm-line);
  background:var(--apofarm-surface);
  box-shadow:var(--apofarm-shadow-soft);
}
.music-panel .settings-note { padding:4px; }
.music-now { display:flex; align-items:center; gap:12px; }
.music-state { display:grid; place-items:center; width:36px; height:36px; border-radius:50%; background:var(--apofarm-moss-pale); color:var(--apofarm-moss-deep); font-weight:700; }
.music-now strong,.music-now small { display:block; }
.music-now small { color:var(--apofarm-ink-faint); font-size:var(--apofarm-text-xs); }
.music-controls { display:flex; flex-wrap:wrap; gap:8px; }
.music-volume { display:grid; gap:6px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }
.music-volume input { width:100%; accent-color:var(--apofarm-moss); }
.music-hint { color:var(--apofarm-ink-faint); font-size:var(--apofarm-text-2xs, 11px); }
.music-choices { display:grid; gap:10px; }
/* 모바일: 위젯이 상단 바 가운데에 있어 패널이 왼쪽 화면 밖으로 잘렸다. 화면 너비에 맞춰 상단 바 아래에 붙인다. */
@media (max-width:640px) { .music-title { display:none; } .top-actions .music-chip { padding:5px 8px; } .music-panel { position:fixed; top:calc(var(--apofarm-header-h, 62px) + 8px); left:12px; right:12px; width:auto; } }

/* src/player-ui/fishing-screen.css */
/* 낚시터 화면(src/player-ui/screens/fishing.js, fishing-ui.js). 색은 design-tokens.css 토큰만 쓴다. */
.fishing-screen { display:grid; align-content:start; gap:16px; max-width:none; margin:0; padding:18px clamp(16px,1.8vw,30px) 60px; }
.fishing-layout { display:grid; grid-template-columns:minmax(0,1fr) 320px; gap:16px; align-items:start; }
.fishing-panel {
  min-width:0;
  padding:22px 24px 24px;
  border:1px solid var(--apofarm-line);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface);
  box-shadow:var(--apofarm-shadow-soft);
}
.fishing-panel .section-heading { margin-bottom:16px; }

/* 찌 영역 */
.fishing-stage { min-height:170px; margin:0 0 30px; padding:20px 22px; border:1px solid var(--apofarm-line); border-radius:var(--apofarm-radius-soft); background:var(--apofarm-water-pale); color:var(--apofarm-ink);
  font:var(--apofarm-text-base)/1.75 var(--apofarm-font-body); overflow-wrap:anywhere; }
.fishing-stage b { font-weight:700; }
/* 기다리는 동안: 분위기 문장은 위에, 아래의 기다린 시간·자동 낚시 현황은 한참 밑으로 내린다. */
.fishing-ambient { margin:0; }
.fishing-status { margin:44px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }
.fishing-stage span { font-family:Consolas,"D2Coding",monospace; }
.fishing-last { color:var(--apofarm-ink-soft); font-family:var(--apofarm-font-body) !important; }
.fishing-last.ok { color:var(--apofarm-moss-deep); font-weight:700; }

/* 줄다리기(직접·자동 공통) */
.fishing-fight { display:grid; gap:16px; }
.fishing-fight-head { display:flex; flex-wrap:wrap; gap:8px; }
.fishing-chip {
  display:inline-flex;
  align-items:center;
  min-height:28px;
  padding:2px 12px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-surface);
  color:var(--apofarm-ink);
  font-size:var(--apofarm-text-sm);
  font-weight:700;
}
.fishing-fight[data-auto="1"] .fishing-chip:first-child { background:var(--apofarm-paper-deep); color:var(--apofarm-ink-soft); }
.fishing-fight[data-pulling="1"] .fishing-pull { border-color:var(--apofarm-danger); background:var(--apofarm-danger-pale); color:var(--apofarm-danger); }
.fishing-meter { display:grid; grid-template-columns:44px minmax(0,1fr) 48px; gap:12px; align-items:center; }
.fishing-meter-label { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); font-weight:700; }
.fishing-meter b { font-variant-numeric:tabular-nums; text-align:right; }
.fishing-track { position:relative; height:16px; border:1px solid var(--apofarm-line-dark); border-radius:var(--apofarm-radius-pill); background:var(--apofarm-surface); overflow:hidden; }
.fishing-fill { position:absolute; inset:0 auto 0 0; width:100%; border-radius:inherit; background:var(--apofarm-fill-moss); transition:width .12s linear; }
.fishing-fill.stamina { background:var(--apofarm-water); }
.fishing-safe { position:absolute; top:0; bottom:0; background:var(--apofarm-moss-pale); border-inline:2px solid var(--apofarm-moss); }
.fishing-marker {
  position:absolute;
  top:50%;
  left:0;
  width:14px;
  height:14px;
  margin:-7px 0 0 -7px;
  border-radius:50%;
  border:2px solid var(--apofarm-surface);
  background:var(--apofarm-fill-moss-deep);
  box-shadow:var(--apofarm-shadow-soft);
  transition:left .12s linear,background-color .12s;
}
.fishing-fight[data-tension-state="warn"] .fishing-marker { background:var(--apofarm-fill-soil); }
.fishing-fight[data-tension-state="danger"] .fishing-marker { background:var(--apofarm-danger); }
.fishing-fight[data-tension-state="low"] .fishing-marker { background:var(--apofarm-water); }
.fishing-hint { display:grid; gap:2px; margin:0; font-weight:700; }
.fishing-hint small { color:var(--apofarm-ink-soft); font-weight:400; font-size:var(--apofarm-text-xs); }
.fishing-autoline { margin:14px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }

/* 버튼 줄: 벽에 붙지 않게 간격과 안쪽 여백을 준다 */
.fishing-controls { display:flex; flex-wrap:wrap; gap:12px; margin:0 0 28px; }
.fishing-note-break { margin-top:10px; }
.fishing-controls .button { min-height:44px; padding:10px 22px; }
.fishing-reel { min-height:60px !important; min-width:min(100%,260px); padding:14px 30px !important; font-size:var(--apofarm-text-md); touch-action:none; user-select:none; -webkit-user-select:none; }
.fishing-report { margin:0 0 14px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }

/* 낚시 가방 */
.fishing-bag { border-top:1px solid var(--apofarm-line); padding-top:18px; }
.fishing-bag .section-heading { margin-bottom:12px; }
.fishing-bag-meter { display:block; margin-bottom:14px; }
.fishing-bag-list { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 16px; padding:0; list-style:none; }
.fishing-bag-list li {
  display:inline-flex;
  gap:8px;
  padding:6px 12px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-paper);
  font-size:var(--apofarm-text-sm);
}
.fishing-bag-actions { display:flex; flex-wrap:wrap; align-items:center; gap:12px 16px; }
.fishing-bag-actions .button { min-height:44px; padding:10px 24px; }
.fishing-bag-actions small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }
.fishing-full { flex-basis:100%; margin:0; color:var(--apofarm-danger); font-weight:700; }

/* 낚시터 사람들 */
.fishing-anglers { display:grid; gap:6px; margin:0; padding:0; list-style:none; }
.fishing-angler {
  display:flex;
  flex-wrap:wrap;
  gap:4px 12px;
  align-items:center;
  padding:9px 12px;
  border-radius:var(--apofarm-radius-soft);
  background:var(--apofarm-paper);
  font-size:var(--apofarm-text-sm);
}
.fishing-angler.me { background:var(--apofarm-moss-pale); }
.fishing-angler.muted { color:var(--apofarm-ink-faint); }
.fishing-angler.bite .fishing-state, .fishing-angler.bite .fishing-float { color:var(--apofarm-moss-deep); font-weight:700; }
.fishing-name { min-width:72px; font-weight:700; overflow-wrap:anywhere; }
.fishing-float { min-width:46px; font-family:Consolas,monospace; color:var(--apofarm-ink-soft); }
.fishing-state { margin-left:auto; color:var(--apofarm-ink-soft); }
/* 사람이 5명 이상이면 접는다: 밭 접기(farm-layout.css .is-folded)처럼 아래로 갈수록 흐려지고 버튼으로 연다. */
.fishing-anglers.is-folded {
  max-height:178px;
  overflow:hidden;
  -webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 56px),transparent);
  mask-image:linear-gradient(to bottom,#000 calc(100% - 56px),transparent);
}
.fishing-fold { display:flex; justify-content:center; padding-top:10px; }
.fishing-fold-button {
  min-height:36px;
  padding:0 22px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-moss-deep);
  font-size:var(--apofarm-text-sm);
  font-weight:700;
  cursor:pointer;
}
.fishing-fold-button:hover { background:var(--apofarm-moss-pale); }
.fishing-fold-button:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
@media (pointer:coarse) { .fishing-fold-button { min-height:44px; } }
.fishing-cloud-switch { margin-top:14px; }
.fishing-say { display:flex; gap:10px; margin-top:16px; }
.fishing-say input { flex:1; min-width:0; min-height:44px; padding:0 12px; }
.fishing-say .button { flex:none; min-height:44px; padding:10px 18px; }
.fishing-note { margin:12px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.5; }

/* 화면 전체에 깔리는 구름 말: 낚시터 화면에 있는 동안에만 만들어진다. */
.fishing-clouds { position:fixed; inset:0; z-index:30; pointer-events:none; overflow:hidden; }
.fishing-cloud { position:absolute; white-space:nowrap; font-weight:700; color:var(--apofarm-ink); opacity:0;
  text-shadow:0 0 3px var(--apofarm-paper),0 0 6px var(--apofarm-paper),0 0 10px var(--apofarm-paper); animation:fishing-cloud-drift ease-in-out forwards; }
.fishing-cloud.mine { color:var(--apofarm-moss-deep); }
@keyframes fishing-cloud-drift { 0% { opacity:0; transform:translateX(0); } 12% { opacity:.95; } 75% { opacity:.9; } 100% { opacity:0; transform:translateX(var(--fishing-dx)); } }
@media (prefers-reduced-motion:reduce) { .fishing-cloud { animation-duration:6s !important; } }

@media (max-width:950px) { .fishing-layout { grid-template-columns:minmax(0,1fr); } }
@media (max-width:640px) {
  .fishing-screen { gap:12px; padding:12px 14px calc(105px + var(--apofarm-safe-bottom)); }
  .fishing-panel { padding:16px 14px 18px; }
  .fishing-stage { min-height:150px; padding:16px; }
  .fishing-controls { flex-direction:column; }
  .fishing-controls .button { width:100%; }
}

/* src/player-ui/gathering-screen.css */
/* 채집 화면(src/player-ui/screens/gathering.js, gathering-ui.js). 색은 design-tokens.css 토큰만 쓴다. */
.gathering-screen { display:grid; align-content:start; gap:16px; max-width:none; margin:0; padding:18px clamp(16px,1.8vw,30px) 60px; }
.gathering-layout { display:grid; gap:16px; }
.gather-main { min-width:0; }
.gather-panel {
  min-width:0;
  padding:22px 24px 24px;
  border:1px solid var(--apofarm-line);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface);
  box-shadow:var(--apofarm-shadow-card);
}
.gather-panel .section-heading { margin-bottom:16px; }
.gather-env { margin:0 0 12px; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); }
.gather-env b { color:var(--apofarm-ink); }
.gather-diary { margin:0 0 18px; padding:14px 18px; border:1px solid var(--apofarm-line); border-radius:var(--apofarm-radius-soft); background:var(--apofarm-paper); line-height:1.7; }
.gather-diary p { margin:2px 0; }
.gather-tip { color:var(--apofarm-moss-deep); font-weight:700; }
/* 준비물 6개: 넓은 화면에서는 한 줄로 늘어서고, 좁아지면 줄바꿈한다(칸 최소 폭 140px). */
.gather-gear-row { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px; margin:10px 0 18px; }
.gather-gear {
  display:grid;
  gap:2px;
  align-content:start;
  min-width:0;
  padding:10px 12px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-soft);
  background:var(--apofarm-paper);
  color:var(--apofarm-ink);
  text-align:left;
  cursor:pointer;
}
.gather-gear small { color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-xs); line-height:1.4; }
.gather-gear.on { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); }
.gather-gear:focus-visible, .gather-cell:focus-visible { outline:2px solid var(--apofarm-moss); outline-offset:2px; }
.gather-controls { display:flex; flex-wrap:wrap; gap:12px; margin:14px 0; }
.gather-controls .button { min-height:44px; padding:10px 22px; }
.gather-vitals { margin:0 0 12px; font-variant-numeric:tabular-nums; }
.gather-note { margin:10px 0 0; color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.5; }
.gather-warn { color:var(--apofarm-danger); font-weight:700; }
.gather-last { margin:12px 0 0; color:var(--apofarm-ink-soft); }

/* 출발 조건: 상자 없이 차분한 회색 글줄(낚시의 지난 자동 낚시 줄처럼). 안 맞는 항목만 붉은 글씨 */
.gather-conditions { margin:16px 0 14px; padding-top:12px; border-top:1px solid var(--apofarm-line); color:var(--apofarm-ink-soft); font-size:var(--apofarm-text-sm); line-height:1.7; }
.gather-cond-title { margin:0 0 2px; font-weight:700; }
.gather-conditions ul { display:flex; flex-wrap:wrap; gap:0 22px; margin:0; padding:0; list-style:none; }
.gather-conditions li { display:inline; }
.gather-conditions i { margin-right:5px; font-style:normal; }
.gather-conditions b { margin-right:6px; font-weight:700; }
.gather-conditions li.no { color:var(--apofarm-danger); font-weight:700; }
.gather-conditions li.no span { font-weight:400; }
.gather-controls .button:disabled { cursor:not-allowed; }

/* 덤불 격자: 정사각 칸 */
.gather-grid { display:grid; grid-template-columns:repeat(var(--gather-size,7),minmax(0,1fr)); gap:6px; width:min(100%,560px); margin:6px auto 12px; }
.gather-cell {
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:2px;
  aspect-ratio:1/1;
  min-width:0;
  padding:2px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-soft);
  background:var(--apofarm-paper);
  color:var(--apofarm-ink-faint);
  font:inherit;
  font-size:var(--apofarm-text-xs);
  line-height:1.25;
  text-align:center;
  word-break:keep-all;
  overflow:hidden;
  cursor:default;
}
.gather-cell.inner { background:var(--apofarm-paper-deep); }
.gather-cell.near { border-color:var(--apofarm-moss); background:var(--apofarm-moss-pale); color:var(--apofarm-ink); font-weight:700; cursor:pointer; }
.gather-cell.near:hover:not(:disabled) { background:var(--apofarm-surface-high); }
.gather-cell.near.peek-mode { cursor:help; border-style:dashed; }
.gather-cell.here { border:2px solid var(--apofarm-moss-deep); background:var(--apofarm-surface-high); color:var(--apofarm-ink); }
.gather-cell.seen { cursor:pointer; background:var(--apofarm-soil-pale, var(--apofarm-moss-pale)); font-weight:700; }
.gather-cell.done { opacity:.85; background:var(--apofarm-surface); border-style:dotted; }
.gather-cell.done.good { color:var(--apofarm-moss-deep); }
.gather-cell.done.rare { color:var(--apofarm-moss-deep); font-weight:700; border-color:var(--apofarm-moss); }
.gather-cell.done.bad { color:var(--apofarm-danger); }
.gather-cell.done.here { opacity:1; }
.gather-tag { font-style:normal; font-size:10px; color:var(--apofarm-moss-deep); font-weight:700; }
.gather-tag.me { color:var(--apofarm-ink); }
.gather-tag.bark { color:var(--apofarm-danger, #b3402f); }
.gather-cell.barking { box-shadow:inset 0 0 0 1px var(--apofarm-danger, #b3402f); }
.gather-dog { color:var(--apofarm-danger, #b3402f); }
.gather-log {
  display:grid;
  gap:2px;
  margin:14px 0 0;
  padding:12px 14px;
  max-height:240px;
  overflow-y:auto;
  border-radius:var(--apofarm-radius-soft);
  background:var(--apofarm-paper);
  list-style:none;
  font-size:var(--apofarm-text-sm);
}
.gather-log li.good { color:var(--apofarm-moss-deep); }
.gather-log li.rare { color:var(--apofarm-moss-deep); font-weight:700; }
.gather-log li.bad { color:var(--apofarm-danger); }
.gather-log li.dim { color:var(--apofarm-ink-soft); }

/* 채집 바구니(본문 아래, 낚시 가방과 같은 모양) */
.gather-bag { margin-top:22px; padding-top:18px; border-top:1px solid var(--apofarm-line); }
.gather-bag .section-heading { margin-bottom:12px; }
.gather-meter { margin-bottom:14px; }
.gather-track { position:relative; height:16px; border:1px solid var(--apofarm-line-dark); border-radius:var(--apofarm-radius-pill); background:var(--apofarm-surface); overflow:hidden; }
.gather-fill { position:absolute; inset:0 auto 0 0; border-radius:inherit; background:var(--apofarm-fill-moss); transition:width .12s linear; }
.gather-basket { display:flex; flex-wrap:wrap; gap:8px; margin:0; padding:0; list-style:none; }
.gather-basket li {
  display:inline-flex;
  gap:8px;
  padding:6px 12px;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-pill);
  background:var(--apofarm-paper);
  font-size:var(--apofarm-text-sm);
}
@media (pointer:coarse) { .gather-cell { font-size:11px; } }
.gather-legend { margin:6px 0; font-size:var(--apofarm-text-xs); color:var(--apofarm-ink-faint); }
.gather-legend summary { cursor:pointer; color:var(--apofarm-ink); }
.gather-legend ul { margin:4px 0 0; padding-left:1.1em; line-height:1.5; }

/* src/player-ui/vn-player.css */
/* 대화 장면(비주얼 노벨식, vn-player.js). 게임 화면과 편집기 미리보기가 함께 쓴다.: 화면을 어둡게 덮고, 초상화는 대화 상자 위 왼쪽에 선다. */
.vn-overlay {
  position:fixed;
  inset:0;
  z-index:1000;
  display:grid;
  grid-template-rows:1fr auto;
  justify-items:center;
  padding:24px 16px calc(32px + env(safe-area-inset-bottom, 0px));
  background:color-mix(in srgb, #0d110e 62%, transparent);
  cursor:pointer;
}
.vn-overlay:focus { outline:none; }
.vn-stage { position:relative; z-index:0; width:min(100%, 640px); align-self:end; display:flex; align-items:flex-end; min-height:0; }
.vn-portrait { width:min(46vw, 240px); max-height:min(52vh, 360px); margin:0 0 -6px 24px; display:flex; align-items:flex-end; }
.vn-portrait img { width:100%; max-height:min(52vh, 360px); object-fit:contain; object-position:bottom; }
.vn-portrait-placeholder {
  display:grid;
  place-items:center;
  width:min(36vw, 160px);
  aspect-ratio:3 / 4;
  border:2px dashed color-mix(in srgb, #f4f1e8 55%, transparent);
  background:color-mix(in srgb, #f4f1e8 12%, transparent);
  color:#f4f1e8;
  font-family:var(--apofarm-font-display);
  font-size:3rem;
}
.vn-portrait.is-empty { display:none; }
.vn-box {
  position:relative;
  z-index:1;
  width:min(100%, 640px);
  min-height:150px;
  padding:20px 24px 14px;
  background:#1b201c;
  color:#f4f1e8;
  border:1px solid #3a433b;
  box-shadow:0 12px 40px rgba(0,0,0,.35);
  display:grid;
  grid-template-rows:auto 1fr auto;
  gap:10px;
}
.vn-name { font-family:var(--apofarm-font-display); font-size:var(--apofarm-text-lg, 1.15rem); min-height:1.4em; }
.vn-overlay.is-narration .vn-name { display:none; }
.vn-overlay.is-narration .vn-text { font-style:italic; color:#d9d6cc; }
.vn-text { margin:0; font-size:var(--apofarm-text-sm, .95rem); line-height:1.75; white-space:pre-wrap; overflow-wrap:anywhere; }
.vn-controls { display:flex; align-items:center; gap:12px; font-size:var(--apofarm-text-2xs, .75rem); color:#a9aea4; }
.vn-hint { flex:1; color:#a9aea4; }
.vn-progress { color:#a9aea4; font-variant-numeric:tabular-nums; }
.vn-skip { padding:4px 10px; border:1px solid #5a645b; background:transparent; color:#f4f1e8; font:inherit; cursor:pointer; }
.vn-skip:focus-visible { outline:2px solid var(--apofarm-moss-pale, #b9d2b2); outline-offset:2px; }
@media (max-width:520px) { .vn-box { padding:16px 16px 12px; } .vn-portrait { margin-left:12px; } }

/* src/player-ui/tutorial.css */
/* 튜토리얼(tutorial.js): 화면을 어둡게 덮고 설명할 요소만 밝힌다. 밝힌 자리는 파란 테두리, 설명 상자는 그 옆의 어두운 상자. */
.tutorial-layer { position:fixed; inset:0; z-index:990; }
.tutorial-layer, .tutorial-layer * { -webkit-tap-highlight-color:transparent; -webkit-user-select:none; user-select:none; }
.tutorial-spot {
  position:fixed;
  border:3px solid #2f8cff;
  border-radius:2px;
  box-shadow:0 0 0 9999px rgba(12,16,13,.58);
  pointer-events:none;
  transition:left .2s ease, top .2s ease, width .2s ease, height .2s ease;
}
.tutorial-tip {
  visibility:hidden;
  position:fixed;
  width:min(340px, calc(100vw - 16px));
  padding:16px 18px 14px;
  background:#1d2420;
  color:#f2efe6;
  box-shadow:0 10px 32px rgba(0,0,0,.35);
  display:grid;
  gap:6px;
}
.tutorial-tip:focus { outline:none; }
.tutorial-count { color:#a8b0a6; font-size:var(--apofarm-text-2xs, .72rem); font-variant-numeric:tabular-nums; letter-spacing:.04em; }
.tutorial-tip h2 { margin:0; font-family:var(--apofarm-font-display, serif); font-size:var(--apofarm-text-lg, 1.1rem); }
.tutorial-text { margin:0; font-size:var(--apofarm-text-sm, .9rem); line-height:1.65; }
.tutorial-actions { display:flex; align-items:center; gap:6px; margin-top:6px; }
.tutorial-actions span { flex:1; }
.tutorial-actions button { min-height:32px; padding:4px 12px; border:1px solid #56615a; background:transparent; color:#f2efe6; font:inherit; font-size:var(--apofarm-text-xs, .8rem); cursor:pointer; }
.tutorial-actions .tutorial-next { border-color:#2f8cff; background:#2f8cff; color:#fff; font-weight:700; }
.tutorial-actions button:disabled { opacity:.4; cursor:default; }
.tutorial-actions .tutorial-skip { border-color:transparent; color:#a8b0a6; padding-left:0; }
.tutorial-actions button:focus-visible { outline:2px solid #9cc7ff; outline-offset:2px; }
@media (prefers-reduced-motion: reduce) { .tutorial-spot { transition:none; } }

/* src/player-ui/player-manual.css */
.top-help-mark{display:inline-flex;align-items:center;justify-content:center;width:16px;font-size:var(--apofarm-text-md);font-weight:700;line-height:1}
#player-dialog.player-manual-open{max-width:min(1000px,calc(100vw - 24px));max-height:calc(100dvh - 24px)}
.player-manual-open .dialog-inner{padding:22px}
.player-manual-open .dialog-inner h2{margin-bottom:8px}
.player-manual-open .manual-lead{margin:0 0 12px;font-size:var(--apofarm-text-sm)}
.manual-search-label{display:block;margin-bottom:5px;font-size:var(--apofarm-text-sm);font-weight:700}
#manual-search{width:100%;padding:9px 12px;border:1px solid var(--apofarm-line-dark);border-radius:var(--apofarm-radius-control);background:var(--apofarm-paper);color:var(--apofarm-ink);font:inherit}
.manual-search-status{margin:7px 0!important;font-size:var(--apofarm-text-xs)!important;color:var(--apofarm-ink-soft)}
.manual-layout{display:grid;grid-template-columns:180px minmax(0,1fr);gap:18px}
.manual-toc,.manual-results{max-height:clamp(180px,calc(100dvh - 310px),560px);overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}
.manual-toc{display:flex;flex-direction:column;gap:3px;padding-right:6px}
.manual-toc button {
  padding:9px 10px;
  border:0;
  border-radius:var(--apofarm-radius-control);
  background:transparent;
  color:var(--apofarm-ink-soft);
  font:inherit;
  font-size:var(--apofarm-text-sm);
  text-align:left;
}
.manual-toc button[aria-pressed="true"],.manual-toc button:hover{background:var(--apofarm-moss-pale);color:var(--apofarm-moss-deep)}
.manual-results{padding:1px 10px 4px 1px;overflow-wrap:anywhere}
.manual-results h3{margin:0 0 8px;font-family:var(--apofarm-font-display);font-size:var(--apofarm-text-xl)}
.manual-results .manual-intro,.manual-empty{margin:0 0 14px;font-size:var(--apofarm-text-sm)}
.manual-entry{margin:0 0 7px;border:1px solid var(--apofarm-line);border-radius:var(--apofarm-radius-control)}
.manual-entry summary{padding:11px 13px;cursor:pointer;font-size:var(--apofarm-text-sm);font-weight:700}
.manual-entry[open] summary{border-bottom:1px solid var(--apofarm-line);background:var(--apofarm-paper-deep)}
.manual-entry>div{padding:8px 13px}
.manual-entry p{margin:7px 0;font-size:var(--apofarm-text-sm)!important;line-height:1.75}
.manual-entry p strong{margin-right:5px;color:var(--apofarm-moss-deep)}
.manual-entry .manual-note{padding:7px 9px;background:var(--apofarm-paper-deep)}
.manual-source{padding:3px 0;border:0;background:transparent;color:var(--apofarm-moss-deep);font:inherit;font-size:var(--apofarm-text-xs);text-align:left}
.player-manual-open #dialog-actions{margin-top:12px;padding-top:10px}
@media(max-width:640px){.player-manual-open .dialog-inner{padding:15px}.manual-layout{grid-template-columns:minmax(0,1fr);gap:10px}.manual-toc{flex-direction:row;max-height:none;overflow-x:auto;gap:5px;padding:0 0 5px}.manual-toc button{flex:none;border:1px solid var(--apofarm-line);white-space:nowrap;padding:7px 9px}.manual-results{max-height:clamp(150px,calc(100dvh - 360px),450px)}.top-help-label{display:none}}

.info-group h4{margin:0;padding:11px 13px;border-bottom:1px solid var(--apofarm-line);background:var(--apofarm-paper-deep);font-size:var(--apofarm-text-sm)}
.info-group a{color:var(--apofarm-moss-deep);overflow-wrap:anywhere}
.info-role{margin-right:6px;color:var(--apofarm-ink-soft);font-size:var(--apofarm-text-xs)}
.account-info-links{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:4px 12px}

/* src/player-ui/broadcast.css */
/* 운영실 알림: 상단 띠와 팝업(broadcast.js). 색은 안내(기본)·주의·긴급 세 가지.
   띠는 화면 끝에 붙이지 않고 위쪽 가운데에 떠 있는 카드로 둔다. 색은 테마 토큰만 써서 테마를 따라 바뀐다. */
.broadcast-bar-stack {
  position:fixed;
  z-index:30;
  top:0;
  left:0;
  right:0;
  display:grid;
  justify-items:center;
  gap:8px;
  padding:calc(var(--apofarm-safe-top, env(safe-area-inset-top, 0px)) + 12px) 16px 0;
  pointer-events:none;
}
.broadcast-bar-stack[hidden] { display:none; }
.broadcast-bar {
  --broadcast-accent:var(--apofarm-on-dark-line);
  --broadcast-soft:var(--apofarm-on-dark-soft);
  pointer-events:auto;
  display:flex;
  align-items:flex-start;
  gap:14px;
  width:min(720px, 100%);
  padding:14px 12px 14px 18px;
  border-left:4px solid var(--broadcast-accent);
  background:var(--apofarm-fill-moss-deep);
  color:var(--apofarm-on-dark);
  box-shadow:var(--apofarm-shadow-overlay);
  font-size:var(--apofarm-text-sm);
  line-height:1.6;
}
.broadcast-bar.tone-warn { --broadcast-accent:var(--apofarm-warn-text); --broadcast-soft:var(--apofarm-warn-text); background:var(--apofarm-warn-bg); color:var(--apofarm-warn-text); }
.broadcast-bar.tone-urgent { --broadcast-accent:var(--apofarm-danger-pale); --broadcast-soft:var(--apofarm-danger-pale); background:var(--apofarm-danger); color:var(--apofarm-danger-pale); }
.broadcast-bar-tag {
  flex:none;
  margin-top:1px;
  padding:1px 9px;
  border:1px solid var(--broadcast-accent);
  border-radius:999px;
  font-size:var(--apofarm-text-xs);
  font-weight:700;
  white-space:nowrap;
}
.broadcast-bar-text { flex:1; min-width:0; display:grid; gap:3px; }
.broadcast-bar-title { font-weight:700; }
.broadcast-bar-body { margin:0; color:var(--broadcast-soft); white-space:pre-line; overflow-wrap:anywhere; }
.broadcast-bar-close {
  flex:none;
  width:28px;
  height:28px;
  margin:-3px 0 -3px;
  border:0;
  border-radius:var(--apofarm-radius-control);
  background:transparent;
  color:inherit;
  font-size:var(--apofarm-text-xl, 20px);
  line-height:1;
  cursor:pointer;
}
.broadcast-bar-close:hover { background:color-mix(in srgb, currentColor 18%, transparent); }
@media (max-width:560px) {
  .broadcast-bar-stack { padding-left:10px; padding-right:10px; padding-top:calc(var(--apofarm-safe-top, env(safe-area-inset-top, 0px)) + 8px); }
  .broadcast-bar { gap:10px; padding:12px 8px 12px 14px; }
}
.broadcast-popup {
  width:min(460px, calc(100vw - 24px));
  padding:0;
  border:1px solid var(--apofarm-line-dark);
  border-radius:var(--apofarm-radius-panel);
  background:var(--apofarm-surface-high);
  color:var(--apofarm-ink);
  box-shadow:var(--apofarm-shadow-overlay);
}
.broadcast-popup::backdrop { background:var(--apofarm-scrim); }
.broadcast-popup-inner { display:grid; gap:12px; padding:24px; border-top:6px solid var(--apofarm-moss-deep); }
.broadcast-popup-inner.tone-warn { border-top-color:var(--apofarm-warn-text); }
.broadcast-popup-inner.tone-urgent { border-top-color:var(--apofarm-danger); }
.broadcast-popup-tag { font-size:var(--apofarm-text-xs); font-weight:700; color:var(--apofarm-ink-soft); }
.broadcast-popup-inner h2 { margin:0; }
.broadcast-popup-body { margin:0; font-size:var(--apofarm-text-md); line-height:1.7; white-space:pre-line; overflow-wrap:anywhere; }
.broadcast-popup-ok { justify-self:end; min-width:96px; }
