    :root {
      color-scheme: dark;
      --ink: #ffe2cf;
      --paper: rgba(14, 17, 37, 0.56);
      --paper-strong: rgba(23, 24, 47, 0.68);
      --edge: rgba(255, 184, 145, 0.72);
      --edge-dark: #ef9f74;
      --red: #ff5c86;
      --gold: #f0b85c;
      --green: #66a36a;
      --blue: #2d6fb8;
      --violet: #8352bf;
      --shadow: rgba(0, 0, 0, 0.46);
      --app-viewport-width: 100vw;
      --app-viewport-height: 100dvh;
      --app-scroll-height: var(--app-viewport-height);
      --game-stage-aspect: 2.1666667;
      --game-stage-aspect-inverse: 0.4615385;
      --game-stage-width: min(var(--app-viewport-width), calc(var(--app-viewport-height) * var(--game-stage-aspect)));
      --game-stage-height: min(var(--app-viewport-height), calc(var(--app-viewport-width) * var(--game-stage-aspect-inverse)));
      --game-stage-left: calc((var(--app-viewport-width) - var(--game-stage-width)) / 2);
      --game-stage-top: calc((var(--app-viewport-height) - var(--game-stage-height)) / 2);
    }

    * {
      box-sizing: border-box;
    }

    html,
    body {
      width: 100%;
      height: var(--app-viewport-height);
      min-height: var(--app-viewport-height);
      margin: 0;
      overflow: hidden;
      overscroll-behavior: none;
      background: linear-gradient(180deg, #0c1022 0%, #17253a 52%, #0a1320 100%);
      color: var(--ink);
      font-family: Inter, "Arial Narrow", "Roboto Condensed", ui-sans-serif, system-ui, sans-serif;
    }

    html[data-mobile-fullscreen="active"],
    html[data-mobile-fullscreen="active"] body {
      background: #02030a;
    }

    html[data-mobile-fullscreen="armed"],
    html[data-mobile-fullscreen="armed"] body {
      touch-action: manipulation;
      -webkit-user-select: none;
      user-select: none;
    }

    html[data-mobile-fullscreen-target="true"] {
      height: var(--app-scroll-height);
      min-height: var(--app-scroll-height);
      overflow-x: hidden;
      overflow-y: auto;
      scrollbar-width: none;
    }

    html[data-mobile-fullscreen-target="true"]::-webkit-scrollbar {
      display: none;
    }

    html[data-mobile-fullscreen-target="true"] body {
      height: var(--app-scroll-height);
      min-height: var(--app-scroll-height);
      overflow: hidden;
    }

    html[data-mobile-fullscreen="active"],
    html[data-mobile-fullscreen="active"] body {
      height: var(--app-viewport-height);
      min-height: var(--app-viewport-height);
      overflow: hidden;
    }

    :fullscreen {
      background: #02030a;
    }

    :fullscreen .game-stage {
      box-shadow: none;
    }

    body::before {
      content: "";
      position: fixed;
      inset: 0;
      z-index: -1;
      pointer-events: none;
      background:
        radial-gradient(circle at 50% 8%, rgba(255, 118, 186, 0.12), transparent 30%),
        linear-gradient(180deg, #090713 0%, #03050d 100%);
    }

    .game-stage {
      position: fixed;
      left: var(--game-stage-left);
      top: var(--game-stage-top);
      width: var(--game-stage-width);
      height: var(--game-stage-height);
      overflow: hidden;
      transform: translateZ(0);
      transform-origin: 0 0;
      background: #02030a;
      box-shadow:
        0 0 0 1px rgba(255, 218, 156, 0.16),
        0 0 42px rgba(0, 0, 0, 0.46);
      isolation: isolate;
    }

    #scene {
      position: fixed;
      inset: 0;
      overflow: hidden;
    }

    #scene canvas {
      display: block;
      width: 100% !important;
      height: 100% !important;
    }

    .top-hud {
      position: fixed;
      top: 12px;
      left: 50%;
      width: min(1180px, calc(100vw - 28px));
      transform: translateX(-50%);
      z-index: 3;
      display: grid;
      grid-template-columns: minmax(220px, 260px) repeat(4, 78px) minmax(320px, 360px);
      gap: 10px;
      justify-content: center;
      align-items: start;
      pointer-events: none;
      text-transform: uppercase;
      letter-spacing: 0.2em;
      font-weight: 950;
      transition:
        top 260ms ease,
        width 260ms ease,
        grid-template-columns 260ms ease,
        gap 260ms ease,
        transform 260ms ease;
    }

    .stat,
    .build-panel,
    .wave-panel,
    .overlay-card {
      border: 3px solid var(--edge);
      background:
        linear-gradient(135deg, rgba(32, 33, 64, 0.58), rgba(15, 16, 36, 0.5)),
        var(--paper);
      box-shadow:
        inset 0 0 0 2px rgba(255, 160, 184, 0.12),
        inset 0 0 28px rgba(255, 92, 168, 0.1),
        0 18px 38px rgba(0, 0, 0, 0.28);
      backdrop-filter: blur(3px);
      transition:
        min-height 260ms ease,
        width 260ms ease,
        min-width 260ms ease,
        padding 260ms ease,
        gap 260ms ease,
        border-width 260ms ease,
        background 260ms ease,
        box-shadow 260ms ease,
        opacity 180ms ease,
        transform 260ms ease;
    }

    .stat {
      min-height: 56px;
      display: grid;
      align-content: start;
      gap: 4px;
      padding: 9px 10px 8px;
      font-size: 0.56rem;
    }

    .stat span {
      transition: font-size 260ms ease, opacity 180ms ease, letter-spacing 260ms ease;
    }

    .stat strong {
      color: var(--red);
      font-size: 1rem;
      line-height: 1;
      letter-spacing: 0.02em;
      transition: font-size 260ms ease, color 180ms ease;
    }

    .hp-track {
      align-self: end;
      height: 6px;
      border: 2px solid rgba(78, 47, 35, 0.5);
      background: rgba(8, 10, 24, 0.62);
      overflow: hidden;
      transition: height 260ms ease, border-width 260ms ease;
    }

    .hp-track i {
      display: block;
      width: 100%;
      height: 100%;
      transform-origin: left center;
      transform: scaleX(var(--castle-hp, 1));
      background: linear-gradient(90deg, var(--red) 0 48%, var(--gold) 60%, #2f8269 100%);
      transition: transform 140ms ease;
    }

    .build-panel {
      position: fixed;
      left: 18px;
      bottom: 16px;
      z-index: 3;
      width: min(720px, calc(100vw - 430px));
      min-width: 560px;
      padding: 0;
      display: grid;
      gap: 6px;
      pointer-events: auto;
      border: 0;
      background: transparent;
      box-shadow: none;
      backdrop-filter: none;
    }

    .build-panel header,
    .wave-panel header {
      position: relative;
      z-index: 8;
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 10px;
      text-transform: uppercase;
      letter-spacing: 0.18em;
      font-weight: 950;
      font-size: 0.86rem;
    }

    .build-panel header {
      display: none;
    }

    .build-panel header strong {
      color: #fff2d5;
      white-space: nowrap;
    }

    .type-grid,
    .slot-grid {
      display: grid;
      gap: 12px;
    }

    .type-grid {
      display: grid;
      grid-auto-flow: column;
      grid-auto-columns: clamp(88px, 8vw, 112px);
      justify-content: start;
      gap: 0;
      overflow-x: auto;
      overflow-y: visible;
      padding: 16px 10px 12px;
      overscroll-behavior-x: contain;
      scrollbar-color: #6d4820 rgba(78, 47, 35, 0.18);
      scrollbar-width: thin;
      perspective: 800px;
      transition: grid-auto-columns 260ms ease, gap 260ms ease, padding 260ms ease;
    }

    .type-grid::-webkit-scrollbar {
      height: 10px;
    }

    .type-grid::-webkit-scrollbar-track {
      background: rgba(78, 47, 35, 0.18);
      border: 1px solid rgba(78, 47, 35, 0.28);
    }

    .type-grid::-webkit-scrollbar-thumb {
      background: linear-gradient(90deg, #5a3829, #a67a3c);
      border: 2px solid rgba(255, 232, 190, 0.82);
    }

    .slot-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      display: none;
    }

    button {
      min-height: 48px;
      border: 3px solid rgba(78, 47, 35, 0.62);
      background: #17182f;
      color: var(--ink);
      font: inherit;
      font-size: 0.82rem;
      font-weight: 950;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      cursor: pointer;
    }

    button:hover:not(:disabled) {
      background: #272b54;
    }

    button:disabled {
      cursor: not-allowed;
      opacity: 0.54;
    }

    button.primary {
      background: linear-gradient(180deg, #40213e, #1a0c20);
      color: #fff5da;
      box-shadow:
        inset 0 2px 0 rgba(255, 225, 167, 0.12),
        0 0 20px rgba(255, 92, 168, 0.18);
    }

    button.built {
      background: linear-gradient(135deg, #39775a, #d6952b);
      color: #fff8dc;
    }

    button.selected {
      background: #315e88;
      color: #fff8dc;
    }

    .tower-card {
      --card-raise: 0px;
      --fan-angle: 0deg;
      position: relative;
      display: grid;
      grid-template-rows: 1fr 28px;
      aspect-ratio: 9 / 16;
      min-width: 0;
      min-height: auto;
      margin-right: -10px;
      padding: 0;
      overflow: visible;
      border-radius: 7px;
      border-width: 2px;
      border-color: color-mix(in srgb, var(--rarity-color, rgba(255, 236, 199, 0.42)) 50%, rgba(78, 47, 35, 0.62));
      background:
        linear-gradient(180deg, color-mix(in srgb, var(--rarity-color, #818181) 44%, #fff0d2 10%), rgba(35, 24, 19, 0.96)),
        linear-gradient(180deg, #735d4c, #231813);
      color: #fff4de;
      text-align: center;
      text-transform: none;
      box-shadow:
        inset 0 0 0 1px rgba(255, 236, 199, 0.28),
        0 8px 16px rgba(0, 0, 0, 0.22),
        0 0 18px var(--rarity-glow, rgba(160, 160, 160, 0.12));
      transform: translateY(var(--card-raise)) rotate(var(--fan-angle));
      transform-origin: 50% 118%;
      transition:
        min-height 180ms ease,
        transform 180ms ease,
        filter 160ms ease,
        box-shadow 180ms ease,
        border-color 180ms ease;
    }

    .tower-card::after {
      content: "";
      position: absolute;
      inset: 0;
      pointer-events: none;
      background: linear-gradient(180deg, rgba(255, 255, 255, 0.12), transparent 24%, rgba(0, 0, 0, 0.28));
      mix-blend-mode: screen;
      opacity: 0.46;
    }

    .card-cooldown-fill,
    .card-xp-fill,
    .card-xp-float,
    .card-rarity-badge,
    .card-skill-ready {
      pointer-events: none;
    }

    .card-cooldown-fill {
      position: absolute;
      left: 0;
      right: 0;
      bottom: 28px;
      z-index: 1;
      height: var(--card-skill-fill, 0%);
      border-radius: 4px 4px 0 0;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 22%),
        linear-gradient(180deg, color-mix(in srgb, var(--rarity-color, #6d6d78) 70%, #ffffff 12%), rgba(85, 210, 255, 0.34));
      opacity: 0.62;
      transform-origin: bottom center;
      transition: height 180ms ease, opacity 180ms ease;
    }

    .tower-card.is-skill-ready .card-cooldown-fill {
      opacity: 0.9;
      animation: cardSkillReadyPulse 0.9s ease-in-out infinite;
    }

    .card-skill-ready {
      position: absolute;
      left: 8px;
      right: 8px;
      top: 50%;
      z-index: 3;
      display: grid;
      place-items: center;
      min-height: 24px;
      border: 1px solid rgba(255, 246, 218, 0.68);
      background: rgba(14, 16, 35, 0.72);
      color: #fff7dd;
      font-size: 0.52rem;
      font-weight: 950;
      letter-spacing: 0.12em;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.55);
      opacity: 0;
      transform: translateY(-50%) scale(0.92);
      transition: opacity 160ms ease, transform 160ms ease;
    }

    .tower-card.is-skill-ready .card-skill-ready {
      opacity: 1;
      transform: translateY(-50%) scale(1);
    }

    .card-xp-fill {
      position: absolute;
      left: 5px;
      right: 5px;
      bottom: 31px;
      z-index: 3;
      height: 4px;
      overflow: hidden;
      border: 1px solid rgba(230, 255, 220, 0.22);
      background: rgba(4, 6, 16, 0.48);
    }

    .card-xp-fill::before {
      content: "";
      display: block;
      width: var(--card-xp-percent, 0%);
      height: 100%;
      background: linear-gradient(90deg, #8effa1, #78dfff, #fff0a4);
      transition: width 180ms ease;
    }

    .card-xp-float {
      position: absolute;
      left: 50%;
      top: 34%;
      z-index: 5;
      padding: 4px 6px;
      border: 1px solid rgba(230, 255, 220, 0.68);
      background: rgba(8, 12, 24, 0.78);
      color: #cfffad;
      font-size: 0.58rem;
      font-weight: 950;
      letter-spacing: 0.05em;
      opacity: 0;
      transform: translate(-50%, 10px) scale(0.86);
    }

    .card-xp-float.is-active {
      animation: cardXpFloat 900ms ease-out both;
    }

    .card-rarity-badge {
      position: absolute;
      right: 5px;
      top: 5px;
      z-index: 4;
      min-width: 28px;
      padding: 3px 5px;
      border: 1px solid color-mix(in srgb, var(--rarity-color, #aaa) 74%, #ffffff 16%);
      border-radius: 999px;
      background: rgba(8, 10, 24, 0.74);
      color: var(--rarity-color, #d5d5d5);
      font-size: 0.44rem;
      font-weight: 950;
      letter-spacing: 0.04em;
      box-shadow: 0 0 12px var(--rarity-glow, rgba(255, 255, 255, 0.12));
    }

    .card-ability-strip {
      position: absolute;
      left: 4px;
      top: auto;
      bottom: 36px;
      z-index: 4;
      display: grid;
      align-content: end;
      gap: 3px;
      width: 27px;
      pointer-events: none;
    }

    .card-ability {
      display: grid;
      place-items: center;
      min-height: 24px;
      padding: 2px 1px 3px;
      border: 1px solid rgba(255, 245, 218, 0.36);
      border-radius: 5px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.02)),
        rgba(8, 10, 24, 0.72);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 5px 10px rgba(0, 0, 0, 0.32),
        0 0 10px color-mix(in srgb, var(--ability-color, #ffd06a) 26%, transparent);
      color: #fff5da;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.56);
    }

    .card-ability strong {
      display: block;
      max-width: 100%;
      font-size: clamp(0.56rem, 0.96vw, 0.74rem);
      line-height: 0.92;
      letter-spacing: 0;
      color: var(--ability-color, #ffd06a);
      overflow: hidden;
      text-overflow: clip;
    }

    .card-ability span {
      display: block;
      margin-top: 2px;
      color: rgba(255, 237, 210, 0.72);
      font-size: 0.3rem;
      line-height: 1;
      letter-spacing: 0.05em;
    }

    .card-ability[data-kind="atk"] { --ability-color: #ffcf69; }
    .card-ability[data-kind="def"] { --ability-color: #a9e3ff; }
    .card-ability[data-kind="rng"] { --ability-color: #ff86b3; }

    .tower-card:hover .card-ability,
    .tower-card:focus-visible .card-ability,
    .tower-card.selected .card-ability {
      border-color: color-mix(in srgb, var(--ability-color) 64%, #ffffff 12%);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.025)),
        rgba(8, 10, 24, 0.82);
    }

    .tower-card::before {
      content: attr(data-card-tip);
      position: absolute;
      left: 50%;
      bottom: calc(100% + 8px);
      z-index: 4;
      min-width: max-content;
      padding: 8px 9px;
      border: 2px solid rgba(255, 236, 199, 0.72);
      border-radius: 6px;
      background: rgba(17, 16, 32, 0.92);
      color: #fff4df;
      font-size: 0.56rem;
      line-height: 1.34;
      letter-spacing: 0.04em;
      opacity: 0;
      pointer-events: none;
      transform: translate(-50%, 6px);
      transition: opacity 140ms ease, transform 140ms ease;
      white-space: pre;
      text-align: left;
      display: none;
    }

    .tower-card:hover,
    .tower-card:focus-visible {
      --card-raise: -12px;
      z-index: 6;
      filter: saturate(1.1) brightness(1.05);
      box-shadow:
        inset 0 0 0 1px rgba(255, 246, 220, 0.42),
        0 14px 24px rgba(0, 0, 0, 0.32),
        0 0 18px color-mix(in srgb, var(--class-color, #d8a153) 48%, transparent);
    }

    .tower-card:hover::before,
    .tower-card:focus-visible::before {
      opacity: 1;
      transform: translate(-50%, 0);
    }

    .card-tooltip {
      position: fixed;
      left: var(--card-tooltip-x, 0px);
      top: var(--card-tooltip-y, 0px);
      z-index: 9;
      width: min(420px, calc(100vw - 24px));
      max-height: var(--card-tooltip-max-height, min(560px, calc(100vh - 24px)));
      padding: 11px 12px;
      border: 2px solid rgba(255, 236, 199, 0.78);
      border-radius: 8px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.015)),
        rgba(17, 16, 32, 0.96);
      box-shadow:
        inset 0 0 0 1px rgba(255, 160, 184, 0.1),
        0 12px 26px rgba(0, 0, 0, 0.32);
      color: #fff4df;
      font-size: 0.62rem;
      font-weight: 850;
      line-height: 1.42;
      letter-spacing: 0.03em;
      text-transform: none;
      white-space: pre-wrap;
      overflow-wrap: anywhere;
      overflow-y: auto;
      pointer-events: none;
      transform: none;
    }

    .card-tooltip[hidden] {
      display: none;
    }

    html[data-game-mode="countdown"] .card-tooltip,
    html[data-game-mode="playing"] .card-tooltip,
    html[data-game-mode="paused"] .card-tooltip {
      display: none;
    }

    .tower-card.selected {
      --card-raise: -20px;
      z-index: 5;
      border-color: color-mix(in srgb, var(--rarity-color, #2b78cf) 70%, #ffffff 14%);
      background:
        linear-gradient(180deg, color-mix(in srgb, var(--rarity-color, #818181) 44%, #fff0d2 10%), rgba(35, 24, 19, 0.96)),
        linear-gradient(180deg, #735d4c, #231813);
      box-shadow:
        inset 0 0 0 2px rgba(234, 245, 255, 0.46),
        0 0 0 2px var(--rarity-glow, rgba(42, 129, 215, 0.46)),
        0 16px 26px rgba(0, 0, 0, 0.34),
        0 0 22px var(--rarity-glow, rgba(42, 129, 215, 0.42));
    }

    .tower-card:disabled {
      opacity: 1;
      filter: grayscale(0.26);
    }

    .tower-card.is-deployed {
      filter: none;
    }

    .tower-card.is-recovering {
      cursor: progress;
      filter: saturate(0.9) brightness(0.92);
      box-shadow:
        inset 0 0 0 1px rgba(190, 255, 190, 0.24),
        0 0 18px rgba(112, 228, 132, 0.24);
    }

    .tower-card.is-recovering .portrait {
      animation: cardHealPulse 1.25s ease-in-out infinite;
    }

    .tower-card.is-deployed .portrait {
      filter: grayscale(0.42) brightness(0.62);
    }

    .tower-card.is-deployed .card-ability {
      border-color: color-mix(in srgb, var(--ability-color) 54%, #ffffff 10%);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0.025)),
        rgba(8, 10, 24, 0.84);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.18),
        0 5px 10px rgba(0, 0, 0, 0.34),
        0 0 12px color-mix(in srgb, var(--ability-color, #ffd06a) 34%, transparent);
      opacity: 1;
    }

    .tower-card.is-recovering .cost-row {
      overflow: hidden;
      background:
        linear-gradient(90deg, rgba(102, 204, 126, 0.95) 0 var(--card-hp-percent, 0%), rgba(39, 45, 41, 0.9) var(--card-hp-percent, 0%) 100%),
        var(--class-color, #8f5940);
    }

    .tower-card.is-recovering .cost-row::after {
      content: "";
      position: absolute;
      inset: 0;
      background: linear-gradient(90deg, transparent, rgba(230, 255, 215, 0.42), transparent);
      transform: translateX(-120%);
      animation: cardHealSweep 1.35s ease-in-out infinite;
      pointer-events: none;
    }

    .tower-card.is-deployed .cost-row {
      background:
        linear-gradient(180deg, rgba(36, 36, 48, 0.92), rgba(18, 18, 28, 0.92)),
        var(--class-color, #8f5940);
    }

    .tower-card.is-deployed .cost-row strong,
    .tower-card.is-recovering .cost-row strong {
      opacity: 1;
      transform: translateY(0);
    }

    @keyframes cardHealPulse {
      0%, 100% {
        filter: saturate(0.82) brightness(0.76);
      }

      50% {
        filter: saturate(1.2) brightness(1.06);
      }
    }

    @keyframes cardHealSweep {
      0% {
        transform: translateX(-120%);
      }

      100% {
        transform: translateX(120%);
      }
    }

    @keyframes cardSkillReadyPulse {
      0%, 100% {
        filter: brightness(1);
      }

      50% {
        filter: brightness(1.35);
      }
    }

    @keyframes cardXpFloat {
      0% {
        opacity: 0;
        transform: translate(-50%, 12px) scale(0.86);
      }

      18% {
        opacity: 1;
      }

      100% {
        opacity: 0;
        transform: translate(-50%, -34px) scale(1.08);
      }
    }

    .card-name {
      position: relative;
      z-index: 1;
      display: grid;
      place-items: center;
      grid-row: 1;
      align-self: start;
      min-height: 20px;
      padding: 4px 30px 0 6px;
      background: linear-gradient(180deg, rgba(18, 17, 32, 0.72), rgba(18, 17, 32, 0));
      color: #fff1dc;
      font-size: 0.5rem;
      line-height: 1;
      letter-spacing: 0.06em;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      opacity: 0;
      transition: opacity 180ms ease, font-size 260ms ease, padding 260ms ease;
    }

    .portrait {
      position: absolute;
      inset: 2px 2px 28px;
      z-index: 0;
      background-image: var(--portrait);
      background-size: auto 106%;
      background-position: center top;
      border-radius: 4px 4px 0 0;
      border-bottom: 1px solid rgba(0, 0, 0, 0.24);
      min-height: 0;
      transition: opacity 180ms ease, filter 180ms ease;
    }

    .card-hover-video,
    .card-hover-motion {
      position: absolute;
      inset: 2px 2px 28px;
      z-index: 0;
      width: calc(100% - 4px);
      height: calc(100% - 30px);
      object-fit: cover;
      object-position: center top;
      border-radius: 4px 4px 0 0;
      opacity: 0;
      pointer-events: none;
      transform: scale(1.012);
      transition: opacity 180ms ease, filter 180ms ease, transform 220ms ease;
    }

    .card-hover-motion {
      display: block;
    }

    .seamless-video-peer {
      opacity: 0;
      pointer-events: none;
    }

    .tower-card.has-card-video:hover .portrait,
    .tower-card.has-card-video:focus-visible .portrait,
    .tower-card.has-card-video.is-previewing-video .portrait,
    .tower-card.has-card-motion:hover .portrait,
    .tower-card.has-card-motion:focus-visible .portrait,
    .tower-card.has-card-motion.is-previewing-motion .portrait {
      opacity: 0;
    }

    .tower-card.has-card-video:hover .card-hover-video,
    .tower-card.has-card-video:focus-visible .card-hover-video,
    .tower-card.has-card-video.is-previewing-video .card-hover-video,
    .tower-card.has-card-motion:hover .card-hover-motion,
    .tower-card.has-card-motion:focus-visible .card-hover-motion,
    .tower-card.has-card-motion.is-previewing-motion .card-hover-motion {
      opacity: 1;
      filter: saturate(1.12) brightness(1.08) contrast(1.04);
      transform: scale(1.035);
    }

    .card-statline {
      display: none;
    }

    .card-statline b {
      display: grid;
      gap: 2px;
      color: rgba(255, 244, 223, 0.92);
      font-size: 0.5rem;
      line-height: 1;
      letter-spacing: 0.06em;
    }

    .card-statline i {
      height: 4px;
      background: rgba(255, 246, 218, 0.18);
      border: 1px solid rgba(255, 246, 218, 0.14);
      overflow: hidden;
    }

    .card-statline i::before {
      content: "";
      display: block;
      width: var(--stat-fill, 100%);
      height: 100%;
      background: var(--stat-color, var(--class-color));
    }

    .cost-row {
      position: relative;
      z-index: 1;
      display: grid;
      grid-row: 2;
      grid-template-columns: 1fr;
      align-items: center;
      background: var(--class-color, #8f5940);
      color: #fff4df;
      font-size: 0.78rem;
      line-height: 1;
      letter-spacing: 0.02em;
      transition: grid-template-columns 260ms ease, font-size 260ms ease, min-height 260ms ease;
    }

    .cost-row i {
      display: grid;
      place-items: center;
      height: 100%;
      border-right: 0;
      font-style: normal;
      padding: 0 3px;
      font-size: clamp(0.48rem, 0.82vw, 0.7rem);
      letter-spacing: 0.04em;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      transition: border-width 180ms ease, font-size 260ms ease;
    }

    .cost-row strong {
      position: absolute;
      right: 4px;
      bottom: 4px;
      padding: 3px 5px;
      border-radius: 999px;
      background: rgba(11, 12, 25, 0.72);
      color: #fff7db;
      font-size: 0.58rem;
      letter-spacing: 0.02em;
      opacity: 0;
      transform: translateY(4px);
      transition: opacity 140ms ease, transform 140ms ease;
    }

    .cost-row strong:empty {
      display: none;
    }

    .tower-card:hover .card-name,
    .tower-card:focus-visible .card-name,
    .tower-card.selected .card-name,
    .tower-card:hover .cost-row strong,
    .tower-card:focus-visible .cost-row strong,
    .tower-card.selected .cost-row strong {
      opacity: 1;
      transform: translateY(0);
    }

    .tower-status-dock {
      display: none;
      grid-template-columns: repeat(4, minmax(0, 1fr));
      gap: 6px;
    }

    .tower-status-card {
      min-width: 0;
      padding: 6px;
      border: 2px solid rgba(255, 222, 185, 0.22);
      background: rgba(9, 12, 27, 0.56);
      box-shadow: inset 0 0 0 1px rgba(255, 150, 190, 0.08);
      color: rgba(255, 240, 220, 0.72);
    }

    .tower-status-card.is-built {
      border-color: rgba(255, 184, 220, 0.58);
      background:
        linear-gradient(135deg, rgba(42, 23, 48, 0.72), rgba(14, 18, 38, 0.78)),
        rgba(9, 12, 27, 0.7);
      color: #fff0df;
    }

    .tower-status-card.is-low-hp {
      border-color: rgba(255, 92, 104, 0.72);
    }

    .tower-status-card.is-dry {
      box-shadow:
        inset 0 0 0 1px rgba(104, 190, 255, 0.18),
        0 0 16px rgba(104, 190, 255, 0.12);
    }

    .tower-status-head {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 6px;
      margin-bottom: 5px;
      font-size: 0.52rem;
      line-height: 1;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      white-space: nowrap;
    }

    .tower-status-head strong,
    .tower-status-head span {
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .resource-stack {
      display: grid;
      gap: 3px;
    }

    .resource-track {
      display: grid;
      grid-template-columns: 22px 1fr 24px;
      align-items: center;
      gap: 4px;
      font-size: 0.44rem;
      line-height: 1;
      letter-spacing: 0.05em;
      color: rgba(255, 240, 222, 0.74);
    }

    .resource-track em {
      font-style: normal;
      text-align: right;
    }

    .resource-track i {
      position: relative;
      height: 5px;
      overflow: hidden;
      background: rgba(255, 246, 218, 0.12);
      border: 1px solid rgba(255, 246, 218, 0.12);
    }

    .resource-track i::before {
      content: "";
      position: absolute;
      inset: 0;
      transform-origin: left center;
      transform: scaleX(var(--value, 0));
      background: var(--bar-color, #fff);
    }

    .resource-track[data-kind="hp"] {
      --bar-color: linear-gradient(90deg, #ff536a, #ffd36e);
    }

    .resource-track[data-kind="mp"] {
      --bar-color: linear-gradient(90deg, #54c8ff, #7a7dff);
    }

    .resource-track[data-kind="cd"] {
      --bar-color: linear-gradient(90deg, #ff7fb4, #f0b85c);
    }

    .resource-track[data-kind="xp"] {
      --bar-color: linear-gradient(90deg, #9cffb1, #6edcff);
    }

    .tower-card[data-build-type="warrior"] {
      --portrait: url("../assets/portraits/swordswoman.png");
      --class-color: #a7493b;
    }

    .tower-card[data-build-type="archer"] {
      --portrait: url("../assets/portraits/archer.png");
      --class-color: #3e74bd;
    }

    .tower-card[data-build-type="mage"] {
      --portrait: url("../assets/portraits/mage.png");
      --class-color: #8654c3;
    }

    .tower-card[data-build-type="healer"] {
      --portrait: url("../assets/portraits/priest.png");
      --class-color: #6d9a54;
    }

    .tower-card[data-build-type="queen"] {
      --portrait: url("../assets/portraits/queen.png");
      --class-color: #c99a42;
      border-color: #6d4820;
    }

    .wave-panel {
      position: static;
      z-index: 3;
      width: auto;
      min-width: 0;
      padding: 10px 12px;
      display: grid;
      gap: 8px;
      pointer-events: auto;
    }

    .wave-panel p,
    .build-panel p {
      margin: 0;
      color: rgba(255, 225, 205, 0.88);
      font-size: 0.82rem;
      font-weight: 800;
      line-height: 1.42;
      letter-spacing: 0.02em;
      text-transform: none;
    }

    .wave-panel .primary {
      min-height: 42px;
      font-size: 0.72rem;
    }

    button.secondary {
      min-height: 42px;
      background: linear-gradient(180deg, #2e5d69, #14262f);
      color: #eaffff;
      box-shadow:
        inset 0 2px 0 rgba(222, 255, 255, 0.12),
        0 0 18px rgba(84, 200, 255, 0.16);
    }

    .command-row {
      display: grid;
      grid-template-columns: repeat(4, minmax(0, 1fr));
      gap: 6px;
    }

    .combat-readout {
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 6px;
    }

    .combat-chip {
      min-height: 38px;
      display: grid;
      align-content: center;
      gap: 3px;
      padding: 6px 7px;
      border: 2px solid rgba(255, 184, 145, 0.42);
      background: rgba(9, 12, 28, 0.34);
    }

    .combat-chip span {
      color: rgba(255, 225, 205, 0.76);
      font-size: 0.58rem;
      font-weight: 900;
      letter-spacing: 0.12em;
      text-transform: uppercase;
    }

    .combat-chip strong {
      color: #fff5da;
      font-size: 0.82rem;
      line-height: 1;
      letter-spacing: 0.02em;
    }

    .combat-alert {
      min-height: 28px;
      padding: 6px 8px;
      border-left: 3px solid var(--red);
      background: rgba(255, 92, 134, 0.1);
      color: rgba(255, 231, 218, 0.94);
      font-size: 0.68rem;
      font-weight: 900;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    html[data-game-mode="setup"] .combat-alert {
      display: none;
    }

    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud {
      top: 8px;
      width: min(1180px, calc(100vw - 24px));
      grid-template-columns: minmax(210px, 250px) repeat(4, 68px) minmax(300px, 340px);
      gap: 6px;
      letter-spacing: 0.12em;
    }

    html[data-game-mode="countdown"] .stat,
    html[data-game-mode="playing"] .stat {
      min-height: 42px;
      gap: 2px;
      padding: 6px 9px 5px;
      border-width: 2px;
      background:
        linear-gradient(135deg, rgba(31, 34, 64, 0.42), rgba(9, 11, 27, 0.34)),
        rgba(12, 14, 32, 0.38);
      box-shadow:
        inset 0 0 0 1px rgba(255, 160, 184, 0.1),
        0 10px 22px rgba(0, 0, 0, 0.22);
    }

    html[data-game-mode="countdown"] .stat span,
    html[data-game-mode="playing"] .stat span {
      font-size: 0.47rem;
      letter-spacing: 0.11em;
      opacity: 0.82;
    }

    html[data-game-mode="countdown"] .stat strong,
    html[data-game-mode="playing"] .stat strong {
      font-size: 0.88rem;
    }

    html[data-game-mode="countdown"] .hp-track,
    html[data-game-mode="playing"] .hp-track {
      height: 6px;
      border-width: 1px;
    }

    html[data-game-mode="countdown"] .build-panel,
    html[data-game-mode="playing"] .build-panel {
      width: min(430px, calc(100vw - 378px));
      min-width: 286px;
      padding: 0;
      gap: 6px;
      border-width: 0;
      background: transparent;
      box-shadow: none;
      animation: dockFold 260ms ease-out both;
    }

    html[data-game-mode="countdown"] .build-panel header,
    html[data-game-mode="playing"] .build-panel header {
      font-size: 0.58rem;
      letter-spacing: 0.12em;
    }

    html[data-game-mode="countdown"] .build-panel p,
    html[data-game-mode="playing"] .build-panel p,
    html[data-game-mode="countdown"] .wave-panel p,
    html[data-game-mode="playing"] .wave-panel p {
      display: none;
    }

    html[data-game-mode="countdown"] .type-grid,
    html[data-game-mode="playing"] .type-grid {
      grid-auto-columns: 72px;
      justify-content: start;
      gap: 0;
      overflow: visible;
      padding: 8px 8px 10px;
    }

    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card {
      grid-template-rows: 1fr 24px;
      width: auto;
      min-height: auto;
      min-width: 0;
      margin-right: -8px;
      border-width: 2px;
    }

    html[data-game-mode="countdown"] .tower-card:not(.selected),
    html[data-game-mode="playing"] .tower-card:not(.selected) {
      filter: saturate(0.82) brightness(0.9);
    }

    html[data-game-mode="countdown"] .card-name,
    html[data-game-mode="playing"] .card-name,
    html[data-game-mode="countdown"] .card-statline,
    html[data-game-mode="playing"] .card-statline,
    html[data-game-mode="countdown"] .tower-card::before,
    html[data-game-mode="playing"] .tower-card::before {
      display: none;
    }

    html[data-game-mode="countdown"] .cost-row,
    html[data-game-mode="playing"] .cost-row {
      grid-template-columns: 1fr;
      min-height: 24px;
      font-size: 0.68rem;
    }

    html[data-game-mode="countdown"] .cost-row i,
    html[data-game-mode="playing"] .cost-row i {
      border-right-width: 0;
      font-size: clamp(0.42rem, 0.72vw, 0.58rem);
    }

    html[data-game-mode="countdown"] .cost-row strong,
    html[data-game-mode="playing"] .cost-row strong {
      font-size: 0.5rem;
    }

    html[data-game-mode="countdown"] .tower-status-dock,
    html[data-game-mode="playing"] .tower-status-dock {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 4px;
    }

    html[data-game-mode="countdown"] .tower-status-card,
    html[data-game-mode="playing"] .tower-status-card {
      padding: 4px;
      border-width: 1px;
    }

    html[data-game-mode="countdown"] .tower-status-head,
    html[data-game-mode="playing"] .tower-status-head {
      margin-bottom: 3px;
      font-size: 0.46rem;
    }

    html[data-game-mode="countdown"] .resource-track,
    html[data-game-mode="playing"] .resource-track {
      grid-template-columns: 18px 1fr 20px;
      gap: 3px;
      font-size: 0.4rem;
    }

    html[data-game-mode="countdown"] .wave-panel,
    html[data-game-mode="playing"] .wave-panel {
      padding: 8px 10px;
      gap: 7px;
      border-width: 2px;
      background:
        linear-gradient(135deg, rgba(42, 22, 45, 0.56), rgba(12, 17, 34, 0.46)),
        rgba(18, 20, 43, 0.42);
      box-shadow:
        inset 0 0 0 1px rgba(255, 160, 184, 0.1),
        0 12px 24px rgba(0, 0, 0, 0.24);
      animation: dockFold 260ms ease-out both;
    }

    html[data-game-mode="countdown"] .wave-panel header,
    html[data-game-mode="playing"] .wave-panel header {
      font-size: 0.58rem;
      letter-spacing: 0.12em;
    }

    html[data-game-mode="countdown"] .combat-readout,
    html[data-game-mode="playing"] .combat-readout {
      gap: 5px;
    }

    html[data-game-mode="countdown"] .combat-chip,
    html[data-game-mode="playing"] .combat-chip {
      min-height: 34px;
      padding: 4px 6px;
      border-width: 1px;
    }

    html[data-game-mode="countdown"] .combat-chip span,
    html[data-game-mode="playing"] .combat-chip span {
      font-size: 0.46rem;
    }

    html[data-game-mode="countdown"] .combat-chip strong,
    html[data-game-mode="playing"] .combat-chip strong {
      font-size: 0.8rem;
    }

    html[data-game-mode="countdown"] .combat-alert,
    html[data-game-mode="playing"] .combat-alert {
      min-height: 22px;
      padding: 4px 7px;
      font-size: 0.54rem;
      letter-spacing: 0.05em;
    }

    html[data-game-mode="countdown"] .wave-panel .primary,
    html[data-game-mode="playing"] .wave-panel .primary {
      min-height: 0;
      height: 0;
      padding: 0;
      border-width: 0;
      opacity: 0;
      overflow: hidden;
      pointer-events: none;
    }

    @keyframes dockFold {
      from {
        opacity: 0.7;
        transform: translateY(16px) scale(1.03);
      }

      to {
        opacity: 1;
        transform: translateY(0) scale(1);
      }
    }

    html[data-game-mode="playing"] .combat-alert {
      animation: combatAlertPulse 1.2s ease-in-out infinite;
    }

    @keyframes combatAlertPulse {
      0%, 100% {
        border-color: rgba(255, 92, 134, 0.62);
        background: rgba(255, 92, 134, 0.08);
      }

      50% {
        border-color: rgba(240, 184, 92, 0.9);
        background: rgba(240, 184, 92, 0.12);
      }
    }

    .toast {
      position: fixed;
      left: 50%;
      bottom: 26px;
      z-index: 4;
      max-width: min(460px, calc(100vw - 32px));
      padding: 10px 13px;
      border: 3px solid var(--edge);
      background: var(--paper);
      color: var(--ink);
      font-size: 0.78rem;
      font-weight: 950;
      letter-spacing: 0.06em;
      text-transform: uppercase;
      transform: translate(-50%, calc((1 - var(--toast-alpha, 0)) * 10px));
      opacity: var(--toast-alpha, 0);
      pointer-events: none;
      transition: opacity 140ms ease, transform 140ms ease;
    }

    .skill-cinematic {
      position: fixed;
      inset: 0;
      z-index: 6;
      display: grid;
      place-items: center;
      pointer-events: none;
      background:
        radial-gradient(circle at center, rgba(255, 120, 186, 0.24), transparent 42%),
        radial-gradient(circle at center, rgba(12, 16, 36, 0.18), rgba(4, 5, 14, 0.62));
      opacity: 0;
    }

    .skill-cinematic[hidden] {
      display: none;
    }

    .skill-cinematic.is-active {
      animation: skillCinematicFlash 1.38s ease-out both;
    }

    .skill-cinematic-core {
      display: grid;
      gap: 8px;
      justify-items: center;
      min-width: min(560px, calc(100vw - 48px));
      padding: 28px 36px;
      border: 3px solid color-mix(in srgb, var(--skill-color, #ff7fb4) 70%, #ffffff 12%);
      background:
        linear-gradient(135deg, rgba(32, 22, 48, 0.88), rgba(9, 12, 28, 0.82)),
        rgba(14, 16, 34, 0.76);
      box-shadow:
        inset 0 0 0 2px rgba(255, 255, 255, 0.12),
        0 0 44px color-mix(in srgb, var(--skill-color, #ff7fb4) 46%, transparent);
      text-align: center;
      text-transform: uppercase;
      transform: scale(0.9);
    }

    .skill-cinematic.is-active .skill-cinematic-core {
      animation: skillCinematicCore 1.38s ease-out both;
    }

    .skill-cinematic-core span {
      color: var(--skill-color, #ff7fb4);
      font-size: 0.78rem;
      font-weight: 950;
      letter-spacing: 0.22em;
    }

    .skill-cinematic-core strong {
      color: #fff6df;
      font-size: clamp(2rem, 6vw, 5.4rem);
      line-height: 0.9;
      letter-spacing: 0.02em;
      text-shadow: 0 8px 0 rgba(0, 0, 0, 0.3);
    }

    .skill-cinematic-core em {
      color: rgba(255, 244, 220, 0.86);
      font-style: normal;
      font-size: 0.82rem;
      font-weight: 950;
      letter-spacing: 0.1em;
    }

    @keyframes skillCinematicFlash {
      0% {
        opacity: 0;
      }

      12%, 78% {
        opacity: 1;
      }

      100% {
        opacity: 0;
      }
    }

    @keyframes skillCinematicCore {
      0% {
        transform: scale(0.82) translateY(20px);
      }

      18%, 72% {
        transform: scale(1) translateY(0);
      }

      100% {
        transform: scale(1.08) translateY(-8px);
      }
    }

    .overlay {
      position: fixed;
      inset: 0;
      z-index: 8;
      display: grid;
      place-items: center;
      padding: 24px;
      background:
        radial-gradient(circle at 50% 42%, rgba(255, 125, 178, 0.14), transparent 34%),
        radial-gradient(circle at 50% 50%, rgba(8, 12, 28, 0.2), rgba(3, 5, 14, 0.72));
      opacity: 1;
    }

    .overlay.is-active {
      animation: overlayFadeIn 360ms ease-out both;
    }

    .overlay[hidden] {
      display: none;
    }

    .overlay-card {
      position: relative;
      overflow: hidden;
      width: min(720px, 100%);
      padding: clamp(20px, 3vw, 30px);
      text-align: center;
    }

    .overlay.is-settlement .overlay-card {
      width: 100%;
      min-height: 100dvh;
      display: grid;
      grid-template-columns: minmax(280px, 430px) minmax(0, 1fr);
      grid-template-rows: minmax(0, 1fr) auto auto auto;
      align-items: end;
      gap: 12px;
      padding: clamp(18px, 4vw, 48px);
      text-align: left;
      isolation: isolate;
    }

    .overlay.is-active .overlay-card {
      animation: settlementCardIn 520ms cubic-bezier(0.2, 0.82, 0.2, 1) both;
    }

    .overlay-card::before {
      content: "";
      position: absolute;
      inset: -30%;
      pointer-events: none;
      background:
        linear-gradient(120deg, transparent 30%, rgba(255, 255, 255, 0.18), transparent 58%),
        radial-gradient(circle, rgba(255, 198, 128, 0.16), transparent 42%);
      transform: translateX(-58%) rotate(8deg);
      opacity: 0;
    }

    .overlay.is-settlement.is-active .overlay-card::before {
      inset: 0;
      z-index: 1;
      background:
        linear-gradient(90deg, rgba(3, 5, 14, 0.86) 0%, rgba(3, 5, 14, 0.56) 34%, rgba(3, 5, 14, 0.12) 62%, rgba(3, 5, 14, 0.22) 100%),
        linear-gradient(0deg, rgba(3, 5, 14, 0.82), transparent 42%, rgba(3, 5, 14, 0.34));
      opacity: 1;
      transform: none;
      animation: none;
    }

    .overlay-card h1 {
      position: relative;
      margin: 0;
      font-family: Georgia, "Times New Roman", serif;
      font-size: clamp(2.5rem, 7vw, 5.3rem);
      line-height: 0.86;
      letter-spacing: 0;
      color: var(--ink);
    }

    .overlay.is-victory .overlay-card h1 {
      color: #fff1b7;
      text-shadow: 0 0 24px rgba(255, 216, 120, 0.42);
    }

    .overlay.is-defeat .overlay-card h1 {
      color: #ff8aa1;
      text-shadow: 0 0 24px rgba(255, 92, 134, 0.34);
    }

    .overlay-card p {
      position: relative;
      max-width: 42ch;
      margin: 14px auto 18px;
      font-size: 0.96rem;
      font-weight: 850;
      line-height: 1.45;
    }

    .settlement-visual {
      position: relative;
      width: min(760px, 100%);
      aspect-ratio: 16 / 9;
      margin: 12px auto 14px;
      overflow: hidden;
      border: 2px solid rgba(255, 222, 185, 0.28);
      background:
        linear-gradient(135deg, rgba(255, 126, 180, 0.12), rgba(62, 116, 189, 0.12)),
        var(--settlement-image, none) center / cover no-repeat,
        rgba(9, 12, 27, 0.88);
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 18px 42px rgba(0, 0, 0, 0.32);
    }

    .overlay.is-settlement {
      place-items: stretch;
      padding: 0;
      background: #050713;
    }

    .overlay.is-settlement .overlay-card h1 {
      z-index: 2;
      grid-column: 1;
      grid-row: 1;
      align-self: end;
      max-width: 8ch;
      font-size: clamp(3rem, 8vw, 7rem);
      text-transform: uppercase;
    }

    .overlay.is-settlement .overlay-card p {
      z-index: 2;
      grid-column: 1;
      grid-row: 2;
      max-width: 36ch;
      margin: 0;
      color: rgba(255, 238, 218, 0.78);
      font-size: clamp(0.78rem, 1.6vw, 1rem);
    }

    .overlay.is-settlement .settlement-visual {
      position: absolute;
      inset: 0;
      z-index: 0;
      width: 100%;
      height: 100%;
      aspect-ratio: auto;
      margin: 0;
      border: 0;
      background:
        var(--settlement-image, none) center / cover no-repeat,
        rgba(9, 12, 27, 0.92);
      box-shadow: none;
    }

    .overlay.is-settlement .settlement-visual::before {
      background:
        radial-gradient(circle at 76% 42%, transparent 0%, rgba(3, 5, 14, 0.16) 45%, rgba(3, 5, 14, 0.72) 100%),
        linear-gradient(90deg, rgba(3, 5, 14, 0.9) 0%, rgba(3, 5, 14, 0.58) 34%, transparent 66%);
    }

    .overlay.is-settlement .settlement-visual::after {
      z-index: 3;
      left: clamp(18px, 4vw, 48px);
      right: auto;
      bottom: clamp(18px, 4vw, 48px);
      width: min(430px, calc(100vw - 36px));
      height: 3px;
      border-radius: 999px;
    }

    .overlay.is-settlement .settlement-visual-meta {
      left: auto;
      right: clamp(18px, 4vw, 48px);
      top: clamp(18px, 4vw, 48px);
      bottom: auto;
      z-index: 2;
      display: block;
      text-align: right;
      color: rgba(255, 238, 214, 0.72);
    }

    .overlay.is-settlement .settlement-visual-meta span {
      display: none;
    }

    .overlay.is-settlement .settlement-duration {
      display: none;
    }

    .settlement-visual[hidden] {
      display: none;
    }

    .settlement-video {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      opacity: 0;
      transition: opacity 260ms ease;
    }

    .settlement-visual.has-video .settlement-video.is-ready {
      opacity: 1;
    }

    .settlement-visual::before {
      content: "";
      position: absolute;
      inset: 0;
      background:
        linear-gradient(90deg, rgba(5, 8, 20, 0.74), transparent 42%, rgba(5, 8, 20, 0.2)),
        linear-gradient(0deg, rgba(5, 8, 20, 0.72), transparent 46%);
      pointer-events: none;
    }

    .settlement-visual::after {
      content: "";
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      height: 4px;
      background: linear-gradient(90deg, #ff7fb4, #f0b85c, #7adfff);
      transform-origin: left center;
      animation: settlementVisualHold var(--settlement-duration, 6s) linear both;
    }

    .settlement-visual-meta {
      position: absolute;
      left: 16px;
      right: 16px;
      bottom: 14px;
      z-index: 1;
      display: flex;
      align-items: end;
      justify-content: space-between;
      gap: 14px;
      text-align: left;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      color: #fff4df;
      text-shadow: 0 2px 12px rgba(0, 0, 0, 0.86);
    }

    .settlement-visual-meta strong {
      display: block;
      font-size: clamp(1rem, 3vw, 1.7rem);
      line-height: 1;
    }

    .settlement-visual-meta span {
      display: block;
      margin-top: 6px;
      color: rgba(255, 226, 205, 0.76);
      font-size: 0.58rem;
    }

    .settlement-duration {
      flex: 0 0 auto;
      padding: 5px 8px;
      border: 1px solid rgba(255, 232, 190, 0.32);
      background: rgba(8, 11, 24, 0.54);
      color: rgba(255, 238, 214, 0.86);
      font-size: 0.58rem;
      font-weight: 950;
    }

    .overlay-stats {
      position: relative;
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 8px;
      margin: 16px 0;
    }

    .overlay.is-settlement .overlay-stats {
      z-index: 2;
      grid-column: 1;
      grid-row: 3;
      margin: 4px 0 0;
    }

    .overlay.is-settlement .overlay-stats span {
      min-height: 52px;
      border-color: rgba(255, 222, 185, 0.18);
      background: rgba(7, 10, 23, 0.52);
      backdrop-filter: blur(10px);
    }

    .overlay-stats span {
      display: grid;
      gap: 4px;
      min-height: 58px;
      padding: 9px;
      border: 2px solid rgba(78, 47, 35, 0.28);
      background: rgba(16, 18, 39, 0.66);
      text-transform: uppercase;
      letter-spacing: 0.08em;
      font-size: 0.68rem;
      font-weight: 950;
    }

    .overlay-stats strong {
      color: var(--red);
      font-size: 1.1rem;
    }

    .settlement-panel {
      position: relative;
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 8px;
      margin: 12px 0 18px;
    }

    .overlay.is-settlement .settlement-panel {
      z-index: 2;
      grid-column: 1;
      grid-row: 4;
      margin: 0 0 18px;
    }

    .overlay.is-settlement .settlement-card {
      min-height: 64px;
      background: rgba(7, 10, 23, 0.58);
      backdrop-filter: blur(10px);
    }

    .overlay.is-settlement .primary {
      z-index: 2;
      grid-column: 1;
      grid-row: 5;
      width: min(430px, 100%);
      min-height: 48px;
      border-color: rgba(255, 226, 190, 0.38);
      background: linear-gradient(180deg, rgba(72, 25, 48, 0.94), rgba(22, 12, 29, 0.96));
    }

    @media (max-width: 760px) {
      .overlay.is-settlement .overlay-card {
        grid-template-columns: 1fr;
        grid-template-rows: minmax(0, 1fr) auto auto auto auto;
        padding: 16px;
      }

      .overlay.is-settlement .overlay-card h1 {
        max-width: 7ch;
        font-size: clamp(2.7rem, 15vw, 4.8rem);
      }

      .overlay.is-settlement .overlay-card p {
        max-width: 30ch;
        font-size: 0.78rem;
      }

      .overlay.is-settlement .overlay-stats,
      .overlay.is-settlement .settlement-panel {
        gap: 6px;
      }

      .overlay.is-settlement .overlay-stats span,
      .overlay.is-settlement .settlement-card {
        min-height: 50px;
        padding: 8px 6px;
        font-size: 0.52rem;
      }

      .overlay.is-settlement .settlement-visual-meta {
        display: none;
      }
    }

    .player-start-screen,
    .story-player,
    .character-video-director {
      position: fixed;
      inset: 0;
      z-index: 120;
    }

    .player-start-screen {
      display: grid;
      place-items: center;
      padding: max(18px, env(safe-area-inset-top)) max(18px, env(safe-area-inset-right)) max(18px, env(safe-area-inset-bottom)) max(18px, env(safe-area-inset-left));
      background:
        radial-gradient(circle at 22% 22%, rgba(255, 206, 122, 0.22), transparent 30%),
        linear-gradient(135deg, rgba(12, 16, 22, 0.96), rgba(33, 18, 38, 0.94));
      color: #f8efe0;
    }

    html[data-player-start-visible="true"] .overlay,
    html[data-player-start-visible="true"] .top-hud,
    html[data-player-start-visible="true"] .build-panel,
    html[data-player-start-visible="true"] .toast {
      opacity: 0;
      pointer-events: none;
    }

    .player-start-card {
      position: relative;
      z-index: 1;
      width: min(520px, 82vw);
      display: grid;
      gap: 12px;
      padding: 22px;
      border: 1px solid rgba(255, 226, 138, 0.28);
      border-radius: 8px;
      background: rgba(9, 12, 18, 0.78);
      box-shadow: 0 28px 80px rgba(0, 0, 0, 0.48);
    }

    .player-start-card span,
    .story-dialogue span {
      color: #ffd98a;
      font-size: 0.72rem;
      letter-spacing: 0;
      text-transform: uppercase;
    }

    .player-start-card h1 {
      margin: 0;
      font-size: 1.6rem;
      letter-spacing: 0;
    }

    .player-start-card p {
      margin: 0;
      color: rgba(248, 239, 224, 0.78);
      line-height: 1.45;
    }

    .player-start-card em {
      min-height: 1.1em;
      color: rgba(255, 217, 138, 0.84);
      font-size: 0.78rem;
      font-style: normal;
    }

    .player-start-card label {
      display: grid;
      gap: 6px;
    }

    .player-start-card input {
      min-height: 44px;
      border: 1px solid rgba(255, 255, 255, 0.18);
      border-radius: 6px;
      padding: 0 12px;
      color: #fff;
      background: rgba(255, 255, 255, 0.08);
      font: inherit;
    }

    .story-player[hidden],
    .character-video-director[hidden] {
      display: none;
    }

    .story-player {
      z-index: 70;
      display: grid;
      align-items: end;
      padding: max(14px, env(safe-area-inset-top)) max(18px, env(safe-area-inset-right)) max(18px, env(safe-area-inset-bottom)) max(18px, env(safe-area-inset-left));
      background:
        radial-gradient(circle at 24% 38%, rgba(255, 218, 142, 0.13), transparent 31%),
        linear-gradient(180deg, rgba(5, 8, 12, 0.18), rgba(5, 8, 12, 0.82));
      overflow: hidden;
    }

    .story-backdrop {
      position: absolute;
      inset: 0;
      opacity: 0.18;
      background: var(--story-portrait) 14% 42% / min(48vw, 520px) auto no-repeat;
      filter: blur(18px) saturate(1.14);
      transform: scale(1.06);
      pointer-events: none;
    }

    .story-shell {
      position: relative;
      min-height: min(52vh, 330px);
      display: grid;
      grid-template-columns: minmax(210px, 34vw) 1fr;
      align-items: end;
      gap: 16px;
      max-width: 980px;
      width: 100%;
      margin: 0 auto;
    }

    .story-character {
      position: relative;
      height: min(64vh, 440px);
      min-width: 210px;
      background: var(--story-portrait) center bottom / contain no-repeat;
      filter: drop-shadow(0 20px 28px rgba(0, 0, 0, 0.58));
      transform-origin: center bottom;
      animation: story-character-enter 360ms ease both;
    }

    .story-character::after {
      content: "";
      position: absolute;
      left: 50%;
      bottom: 4px;
      width: 72%;
      height: 18px;
      border-radius: 999px;
      background: radial-gradient(ellipse, rgba(0, 0, 0, 0.58), transparent 72%);
      transform: translateX(-50%);
      filter: blur(4px);
      z-index: -1;
    }

    @keyframes story-character-enter {
      from {
        opacity: 0;
        transform: translateY(10px) scale(0.98);
      }
      to {
        opacity: 1;
        transform: translateY(0) scale(1);
      }
    }

    .story-dialogue {
      display: grid;
      gap: 8px;
      padding: 16px;
      border: 1px solid rgba(255, 226, 138, 0.26);
      border-radius: 8px;
      background: rgba(7, 12, 18, 0.86);
      color: #fff8ec;
      box-shadow: 0 18px 52px rgba(0, 0, 0, 0.42);
    }

    .story-dialogue strong {
      font-size: 1.08rem;
    }

    .story-dialogue p {
      margin: 0;
      min-height: 3.2em;
      line-height: 1.55;
    }

    .story-actions {
      display: flex;
      justify-content: flex-end;
      gap: 10px;
    }

    .character-video-director {
      z-index: 56;
      pointer-events: none;
      background: rgba(0, 0, 0, 0.34);
    }

    .character-video-director video,
    .character-video-poster {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
    }

    .character-video-poster {
      background: var(--character-video-poster) center / cover no-repeat;
    }

    .character-video-director video[src] ~ .character-video-poster {
      opacity: 0.24;
    }

    .tower-card.is-story-hidden {
      display: none;
    }

    @media (orientation: portrait) and (max-width: 900px) {
      body::before {
        content: "请旋转手机进入横屏游戏";
        position: fixed;
        inset: 0;
        z-index: 100;
        display: grid;
        place-items: center;
        padding: 24px;
        background: #090d12;
        color: #ffe2a0;
        font-weight: 800;
        text-align: center;
      }
    }

    @media (max-height: 460px) and (orientation: landscape) {
      .story-shell {
        grid-template-columns: minmax(150px, 27vw) 1fr;
        min-height: 48vh;
      }

      .story-character {
        height: 52vh;
        min-width: 150px;
      }

      .story-dialogue {
        padding: 12px;
      }
    }

    .settlement-panel[hidden] {
      display: none;
    }

    .settlement-card {
      min-height: 70px;
      padding: 10px;
      border: 2px solid rgba(255, 222, 185, 0.24);
      background:
        linear-gradient(135deg, rgba(38, 26, 52, 0.68), rgba(12, 16, 34, 0.76)),
        rgba(9, 12, 27, 0.62);
      box-shadow: inset 0 0 0 1px rgba(255, 160, 184, 0.08);
      text-transform: uppercase;
      font-weight: 950;
      letter-spacing: 0.08em;
    }

    .overlay.is-active .settlement-card {
      animation: settlementStatPop 560ms ease-out both;
    }

    .settlement-card:nth-child(2) {
      animation-delay: 80ms;
    }

    .settlement-card:nth-child(3) {
      animation-delay: 160ms;
    }

    .settlement-card span {
      display: block;
      color: rgba(255, 234, 210, 0.7);
      font-size: 0.58rem;
      margin-bottom: 6px;
    }

    .settlement-card strong {
      display: block;
      color: #fff3d4;
      font-size: clamp(1.1rem, 3.4vw, 2rem);
      line-height: 1;
    }

    .settlement-card em {
      display: block;
      margin-top: 6px;
      color: rgba(255, 226, 190, 0.72);
      font-style: normal;
      font-size: 0.54rem;
      line-height: 1.25;
      letter-spacing: 0.04em;
    }

    .overlay.is-victory .settlement-card strong {
      color: #ffe28a;
    }

    .overlay.is-defeat .settlement-card strong {
      color: #ff7894;
    }

    @keyframes overlayFadeIn {
      from {
        opacity: 0;
      }

      to {
        opacity: 1;
      }
    }

    @keyframes settlementCardIn {
      from {
        opacity: 0;
        transform: translateY(28px) scale(0.94);
      }

      to {
        opacity: 1;
        transform: translateY(0) scale(1);
      }
    }

    @keyframes settlementSweep {
      0% {
        opacity: 0;
        transform: translateX(-58%) rotate(8deg);
      }

      18%, 58% {
        opacity: 1;
      }

      100% {
        opacity: 0;
        transform: translateX(58%) rotate(8deg);
      }
    }

    @keyframes settlementStatPop {
      from {
        opacity: 0;
        transform: translateY(16px) scale(0.92);
      }

      to {
        opacity: 1;
        transform: translateY(0) scale(1);
      }
    }

    @keyframes settlementVisualHold {
      from {
        transform: scaleX(0);
      }

      to {
        transform: scaleX(1);
      }
    }

    .vignette {
      position: fixed;
      inset: 0;
      pointer-events: none;
      background:
        linear-gradient(180deg, rgba(255, 92, 168, 0.04) 0%, transparent 34%, rgba(5, 8, 18, 0.22) 100%),
        radial-gradient(circle at center, transparent 58%, rgba(3, 5, 14, 0.22));
      mix-blend-mode: normal;
    }

    @media (max-width: 1320px) {
      .top-hud {
        grid-template-columns: minmax(190px, 230px) repeat(4, 64px) minmax(280px, 320px);
        gap: 8px;
        top: 10px;
        left: 10px;
        right: 10px;
        width: auto;
        transform: none;
      }

      .stat {
        min-height: 62px;
        padding: 9px 10px;
        font-size: 0.58rem;
      }

      .stat strong {
        font-size: 1.04rem;
      }

      .hp-track {
        height: 9px;
        border-width: 2px;
      }

      .build-panel,
      .wave-panel {
        min-width: 0;
      }

      .build-panel {
        left: 10px;
        bottom: 10px;
        width: min(62vw, 780px);
        padding: 10px;
      }

      .wave-panel {
        padding: 9px 10px;
        gap: 7px;
      }

      .build-panel header,
      .wave-panel header {
        font-size: 0.72rem;
      }

      .tower-card {
        min-height: 116px;
        grid-template-rows: 1fr 26px;
      }

      .type-grid {
        grid-auto-columns: clamp(82px, 8vw, 104px);
        gap: 0;
      }

      .card-name {
        font-size: 0.52rem;
        letter-spacing: 0.08em;
      }

      .cost-row {
        grid-template-columns: 1fr;
        font-size: 0.76rem;
      }

      .wave-panel p,
      .build-panel p {
        display: none;
      }

      .combat-readout {
        gap: 5px;
      }

      .combat-chip {
        min-height: 38px;
        padding: 5px 6px;
      }

      .combat-chip span {
        font-size: 0.48rem;
      }

      .combat-chip strong {
        font-size: 0.78rem;
      }

      .combat-alert {
        min-height: 24px;
        font-size: 0.54rem;
        letter-spacing: 0.05em;
      }

      button {
        min-height: 36px;
        font-size: 0.64rem;
      }

      .wave-panel .primary {
        min-height: 36px;
        font-size: 0.78rem;
      }

      button.secondary {
        min-height: 36px;
      }
    }

    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud {
      top: 8px;
      left: 50%;
      right: auto;
      width: min(1180px, calc(100vw - 24px));
      transform: translateX(-50%);
      grid-template-columns: minmax(210px, 250px) repeat(4, 68px) minmax(300px, 340px);
      gap: 6px;
    }

    html[data-game-mode="countdown"] .stat,
    html[data-game-mode="playing"] .stat {
      min-height: 42px;
      padding: 6px 9px 5px;
      gap: 2px;
    }

    html[data-game-mode="countdown"] .stat span,
    html[data-game-mode="playing"] .stat span {
      font-size: 0.47rem;
      letter-spacing: 0.11em;
    }

    html[data-game-mode="countdown"] .stat strong,
    html[data-game-mode="playing"] .stat strong {
      font-size: 0.88rem;
    }

    html[data-game-mode="countdown"] .hp-track,
    html[data-game-mode="playing"] .hp-track {
      height: 6px;
      border-width: 1px;
    }

    html[data-game-mode="countdown"] .build-panel,
    html[data-game-mode="playing"] .build-panel {
      left: 14px;
      bottom: 12px;
      width: min(430px, calc(100vw - 378px));
      min-width: 286px;
      padding: 0;
      gap: 6px;
    }

    html[data-game-mode="countdown"] .wave-panel,
    html[data-game-mode="playing"] .wave-panel {
      padding: 8px 10px;
      gap: 7px;
    }

    html[data-game-mode="countdown"] .type-grid,
    html[data-game-mode="playing"] .type-grid {
      grid-auto-columns: 72px;
      gap: 0;
      padding: 8px 8px 10px;
    }

    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card {
      width: auto;
      min-width: 0;
      min-height: auto;
      grid-template-rows: 1fr 24px;
      margin-right: -8px;
    }

    html[data-game-mode="countdown"] .card-name,
    html[data-game-mode="playing"] .card-name,
    html[data-game-mode="countdown"] .card-statline,
    html[data-game-mode="playing"] .card-statline,
    html[data-game-mode="countdown"] .tower-card::before,
    html[data-game-mode="playing"] .tower-card::before {
      display: none;
    }

    html[data-game-mode="countdown"] .cost-row,
    html[data-game-mode="playing"] .cost-row {
      grid-template-columns: 1fr;
      min-height: 24px;
      font-size: 0.68rem;
    }

    html[data-game-mode="countdown"] .cost-row i,
    html[data-game-mode="playing"] .cost-row i {
      border-right-width: 0;
      font-size: clamp(0.42rem, 0.72vw, 0.58rem);
    }

    html[data-game-mode="countdown"] .cost-row strong,
    html[data-game-mode="playing"] .cost-row strong {
      font-size: 0.5rem;
    }

    html[data-game-mode="countdown"] .tower-status-dock,
    html[data-game-mode="playing"] .tower-status-dock {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 4px;
    }

    html[data-game-mode="countdown"] .tower-status-card,
    html[data-game-mode="playing"] .tower-status-card {
      padding: 4px;
      border-width: 1px;
    }

    html[data-game-mode="countdown"] .tower-status-head,
    html[data-game-mode="playing"] .tower-status-head {
      margin-bottom: 3px;
      font-size: 0.46rem;
    }

    html[data-game-mode="countdown"] .resource-track,
    html[data-game-mode="playing"] .resource-track {
      grid-template-columns: 18px 1fr 20px;
      gap: 3px;
      font-size: 0.4rem;
    }

    html[data-game-mode="countdown"] .wave-panel .primary,
    html[data-game-mode="playing"] .wave-panel .primary {
      min-height: 0;
      height: 0;
      padding: 0;
      border-width: 0;
      opacity: 0;
      overflow: hidden;
      pointer-events: none;
    }
    .top-hud {
      grid-template-columns: minmax(240px, 292px) repeat(4, minmax(84px, 102px)) minmax(330px, 390px);
      gap: 8px;
      letter-spacing: 0.08em;
    }

    .top-hud .stat,
    .top-hud .wave-panel {
      border: 1px solid rgba(255, 220, 180, 0.34);
      border-radius: 8px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.018)),
        linear-gradient(135deg, rgba(23, 28, 48, 0.76), rgba(8, 10, 24, 0.58));
      box-shadow:
        inset 0 1px 0 rgba(255, 246, 220, 0.14),
        inset 0 0 18px rgba(255, 92, 168, 0.055),
        0 10px 28px rgba(0, 0, 0, 0.28);
      backdrop-filter: blur(8px);
    }

    .top-hud .stat {
      position: relative;
      min-height: 56px;
      display: grid;
      grid-template-columns: 30px minmax(0, 1fr);
      grid-template-rows: 16px 20px auto;
      grid-template-areas:
        "icon label"
        "icon value"
        "track track";
      align-content: center;
      align-items: center;
      gap: 2px 8px;
      padding: 8px 10px 7px;
      overflow: hidden;
    }

    .top-hud .stat::after,
    .top-hud .wave-panel::after {
      content: "";
      position: absolute;
      inset: 0;
      border-radius: inherit;
      pointer-events: none;
      background: linear-gradient(105deg, transparent 0 22%, rgba(255, 255, 255, 0.08) 42%, transparent 62%);
      opacity: 0.42;
      mix-blend-mode: screen;
    }

    .top-hud .stat span {
      grid-area: label;
      color: rgba(255, 230, 206, 0.68);
      font-size: 0.47rem;
      line-height: 1;
      letter-spacing: 0.12em;
    }

    .top-hud .stat strong {
      grid-area: value;
      color: #fff2d0;
      font-size: 0.96rem;
      line-height: 1;
      letter-spacing: 0;
      text-shadow: 0 0 12px rgba(255, 210, 140, 0.28);
    }

    .top-hud .stat[data-stat="gold"] strong { color: #ffd06a; }
    .top-hud .stat[data-stat="monsters"] strong { color: #ff6f91; }
    .top-hud .stat[data-stat="kills"] strong { color: #e9f3ff; }
    .top-hud .stat[data-stat="wave"] strong { color: #9ee9ff; }

    .top-hud .hp-track {
      grid-area: track;
      height: 7px;
      margin-top: 4px;
      border: 1px solid rgba(255, 235, 196, 0.18);
      border-radius: 999px;
      background: rgba(3, 6, 18, 0.56);
      box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.38);
    }

    .top-hud .hp-track i {
      border-radius: inherit;
      background: linear-gradient(90deg, #ff5c86 0 34%, #f0b85c 56%, #66d0a4 100%);
      box-shadow: 0 0 12px rgba(255, 92, 134, 0.38);
    }

    .hud-icon {
      grid-area: icon;
      position: relative;
      display: inline-block;
      width: 26px;
      height: 26px;
      border-radius: 8px;
      filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.36));
      flex: 0 0 auto;
    }

    .hud-icon::before,
    .hud-icon::after {
      content: "";
      position: absolute;
      pointer-events: none;
    }

    .hud-icon.castle {
      background: linear-gradient(180deg, #ff9fbd, #b93e73);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.45), 0 0 15px rgba(255, 92, 168, 0.35);
    }

    .hud-icon.castle::before {
      left: 5px;
      right: 5px;
      bottom: 5px;
      height: 13px;
      background:
        linear-gradient(90deg, #ffd4de 0 18%, transparent 18% 41%, #ffd4de 41% 59%, transparent 59% 82%, #ffd4de 82%),
        linear-gradient(180deg, #fff0d0, #ff77a6);
      clip-path: polygon(0 38%, 18% 38%, 18% 0, 34% 0, 34% 38%, 66% 38%, 66% 0, 82% 0, 82% 38%, 100% 38%, 100% 100%, 0 100%);
    }

    .hud-icon.wave {
      background: radial-gradient(circle at 50% 36%, #f4ffff 0 10%, #8defff 11% 34%, #287caa 35% 100%);
      box-shadow: inset 0 0 0 1px rgba(210, 255, 255, 0.38), 0 0 14px rgba(80, 220, 255, 0.32);
      transform: rotate(45deg) scale(0.82);
    }

    .hud-icon.wave::before {
      inset: 8px 6px 6px 8px;
      border: 2px solid rgba(255, 255, 255, 0.78);
      border-top: 0;
      border-left: 0;
    }

    .hud-icon.coin {
      border-radius: 50%;
      background:
        radial-gradient(circle at 36% 28%, #fff6b8 0 13%, transparent 14%),
        radial-gradient(circle, #ffd86e 0 44%, #c47a25 45% 70%, #6f3c19 71% 100%);
      box-shadow: inset 0 0 0 2px rgba(255, 250, 190, 0.55), 0 0 14px rgba(255, 202, 84, 0.38);
    }

    .hud-icon.coin::before {
      inset: 7px;
      border: 2px solid rgba(95, 55, 18, 0.62);
      border-radius: 50%;
    }

    .hud-icon.monster {
      background: linear-gradient(180deg, #ff6d94, #641436);
      border-radius: 46% 46% 42% 42%;
      box-shadow: inset 0 1px 0 rgba(255, 226, 232, 0.32), 0 0 16px rgba(255, 66, 112, 0.36);
    }

    .hud-icon.monster::before {
      top: 8px;
      left: 5px;
      width: 5px;
      height: 5px;
      border-radius: 50%;
      background: #fff3c0;
      box-shadow: 11px 0 0 #fff3c0;
    }

    .hud-icon.monster::after {
      left: 7px;
      right: 7px;
      bottom: 6px;
      height: 4px;
      background: linear-gradient(90deg, transparent 0 22%, #170716 23% 36%, transparent 37% 62%, #170716 63% 76%, transparent 77%);
    }

    .hud-icon.kill {
      background: linear-gradient(180deg, #f6fbff, #7e96a8);
      clip-path: polygon(50% 0, 78% 20%, 92% 52%, 74% 86%, 50% 100%, 26% 86%, 8% 52%, 22% 20%);
      box-shadow: 0 0 12px rgba(235, 248, 255, 0.28);
    }

    .hud-icon.kill::before {
      top: 8px;
      left: 7px;
      width: 4px;
      height: 4px;
      border-radius: 50%;
      background: #1c2230;
      box-shadow: 8px 0 0 #1c2230;
    }

    .hud-icon.command {
      width: 18px;
      height: 18px;
      margin-right: 6px;
      border-radius: 50%;
      background: radial-gradient(circle, #fff8d2 0 16%, #ffd36d 17% 40%, #a04674 41% 100%);
      box-shadow: 0 0 12px rgba(255, 202, 96, 0.32);
      vertical-align: -4px;
    }

    .top-hud .wave-panel {
      position: relative;
      padding: 9px 11px;
      gap: 7px;
      overflow: hidden;
    }

    .top-hud .wave-panel header {
      font-size: 0.62rem;
      letter-spacing: 0.13em;
    }

    .top-hud .wave-panel header span {
      display: inline-flex;
      align-items: center;
      color: #fff1d2;
    }

    .top-hud .wave-panel header strong {
      color: #8eefff;
      text-shadow: 0 0 12px rgba(107, 225, 255, 0.34);
    }

    .top-hud .combat-readout {
      gap: 6px;
    }

    .top-hud .combat-chip {
      position: relative;
      min-height: 36px;
      display: grid;
      grid-template-columns: 16px minmax(0, 1fr);
      grid-template-rows: 12px 16px;
      grid-template-areas:
        "chipicon chiplabel"
        "chipicon chipvalue";
      align-items: center;
      gap: 0 6px;
      padding: 5px 7px;
      border: 1px solid rgba(255, 220, 180, 0.24);
      border-radius: 7px;
      background: rgba(2, 5, 17, 0.32);
    }

    .top-hud .combat-chip::before {
      content: "";
      grid-area: chipicon;
      width: 14px;
      height: 14px;
      border-radius: 50%;
      background: #9ee9ff;
      box-shadow: 0 0 10px rgba(117, 230, 255, 0.35);
    }

    .top-hud .combat-chip[data-chip="status"]::before { background: #7ee49c; }
    .top-hud .combat-chip[data-chip="timer"]::before {
      background: conic-gradient(from 0deg, #fff0b0 0 72%, rgba(255, 240, 176, 0.22) 73% 100%);
    }
    .top-hud .combat-chip[data-chip="left"]::before { background: #ff6f91; }

    .top-hud .combat-chip span {
      grid-area: chiplabel;
      color: rgba(255, 230, 206, 0.58);
      font-size: 0.43rem;
      line-height: 1;
      letter-spacing: 0.08em;
    }

    .top-hud .combat-chip strong {
      grid-area: chipvalue;
      color: #fff7df;
      font-size: 0.74rem;
      line-height: 1;
    }

    .top-hud .combat-alert {
      min-height: 24px;
      border: 1px solid rgba(255, 111, 145, 0.34);
      border-left-width: 3px;
      border-radius: 7px;
      background: linear-gradient(90deg, rgba(255, 90, 134, 0.18), rgba(255, 90, 134, 0.045));
      font-size: 0.54rem;
      letter-spacing: 0.06em;
    }

    .top-hud .command-row {
      gap: 7px;
    }

    .top-hud .wave-panel button {
      position: relative;
      min-height: 38px;
      padding: 0 10px 0 29px;
      border: 1px solid rgba(255, 235, 190, 0.38);
      border-radius: 8px;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.16),
        0 10px 20px rgba(0, 0, 0, 0.2);
    }

    .top-hud .wave-panel button::before {
      content: "";
      position: absolute;
      left: 10px;
      top: 50%;
      width: 12px;
      height: 12px;
      transform: translateY(-50%);
      pointer-events: none;
    }

    .top-hud .wave-panel .primary::before {
      clip-path: polygon(18% 0, 100% 50%, 18% 100%);
      background: #fff2c5;
      box-shadow: 0 0 10px rgba(255, 226, 120, 0.5);
    }

    .top-hud .wave-panel .secondary::before {
      border-radius: 50%;
      background: #cfffff;
      box-shadow: 8px 0 0 rgba(207, 255, 255, 0.72), 4px 7px 0 rgba(207, 255, 255, 0.5), 0 0 10px rgba(120, 240, 255, 0.42);
    }

    .top-hud .wave-panel .camp-command::before {
      border-radius: 3px;
      background: linear-gradient(135deg, #ffd6eb, #92f2ff);
      box-shadow: 0 0 12px rgba(255, 138, 206, 0.5);
      transform: translateY(-50%) rotate(45deg);
    }

    .camp-screen {
      --camp-ink: #071121;
      --camp-ink-2: #0b1b32;
      --camp-ink-3: rgba(11, 25, 48, 0.82);
      --camp-cyan: #76e8ff;
      --camp-cyan-soft: rgba(118, 232, 255, 0.34);
      --camp-gold: #f3c25f;
      --camp-gold-soft: rgba(243, 194, 95, 0.34);
      --camp-ivory: #eef8ff;
      --camp-muted: rgba(222, 240, 255, 0.72);
      --camp-line: rgba(202, 237, 255, 0.32);
      position: fixed;
      inset: 0;
      z-index: 7;
      display: grid;
      place-items: stretch;
      padding: 0;
      overflow: hidden;
      background:
        radial-gradient(circle at 54% 28%, rgba(118, 232, 255, 0.23), transparent 28%),
        radial-gradient(circle at 72% 78%, rgba(243, 194, 95, 0.2), transparent 30%),
        radial-gradient(circle at 26% 88%, rgba(191, 74, 128, 0.12), transparent 30%),
        linear-gradient(115deg, rgba(4, 8, 18, 0.84) 0%, rgba(9, 21, 45, 0.58) 48%, rgba(5, 7, 15, 0.9) 100%);
      backdrop-filter: blur(2px) saturate(1.16);
    }

    .camp-screen::before,
    .camp-screen::after {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 1;
      pointer-events: none;
    }

    .camp-screen::before {
      background:
        linear-gradient(90deg, rgba(4, 8, 18, 0.74), transparent 30%, transparent 68%, rgba(4, 8, 18, 0.66)),
        repeating-linear-gradient(135deg, rgba(118, 232, 255, 0.055) 0 1px, transparent 1px 32px),
        repeating-linear-gradient(45deg, rgba(243, 194, 95, 0.032) 0 1px, transparent 1px 42px);
      mix-blend-mode: screen;
      opacity: 0.72;
    }

    .camp-screen::after {
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.06), transparent 18%, transparent 78%, rgba(3, 5, 14, 0.72)),
        radial-gradient(circle at 50% 94%, rgba(6, 12, 28, 0.88), transparent 42%);
    }

    .camp-screen[hidden] {
      display: none;
    }

    .camp-idle-visual {
      position: absolute;
      inset: 0;
      z-index: 0;
      overflow: hidden;
      background:
        var(--camp-idle-poster, none) center / cover no-repeat,
        radial-gradient(circle at 50% 34%, rgba(105, 226, 255, 0.18), transparent 28%),
        linear-gradient(125deg, rgba(3, 6, 16, 0.98), rgba(8, 18, 42, 0.84) 50%, rgba(2, 4, 12, 0.98));
      transform: scale(1.01);
    }

    .camp-idle-visual::before {
      content: "";
      position: absolute;
      inset: 0;
      pointer-events: none;
      background:
        linear-gradient(90deg, rgba(2, 5, 14, 0.82), rgba(2, 5, 14, 0.16) 28%, rgba(2, 5, 14, 0.2) 70%, rgba(2, 5, 14, 0.78)),
        linear-gradient(180deg, rgba(2, 4, 12, 0.32), transparent 30%, rgba(2, 4, 12, 0.78)),
        radial-gradient(circle at 52% 78%, rgba(255, 198, 118, 0.1), transparent 38%);
    }

    .camp-idle-video {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      opacity: 0;
      filter: saturate(1.08) contrast(1.04) brightness(0.84);
      transition: opacity 380ms ease;
    }

    .camp-idle-video.is-ready {
      opacity: 0.92;
    }

    .camp-shell {
      position: relative;
      z-index: 2;
      width: 100%;
      height: 100dvh;
      max-height: 100dvh;
      min-height: 0;
      display: grid;
      grid-template-rows: 118px minmax(0, 1fr) 104px;
      gap: 0;
      border: 0;
      border-radius: 0;
      background: transparent;
      box-shadow: none;
      padding: 20px 26px 18px;
      overflow: hidden;
    }

    .camp-head {
      display: grid;
      grid-template-columns: minmax(260px, 320px) minmax(0, 1fr) auto;
      gap: 18px;
      align-items: center;
    }

    .camp-head h2 {
      margin: 0;
      color: var(--camp-ivory);
      font-size: clamp(1.25rem, 2.6vw, 2.25rem);
      line-height: 0.95;
      letter-spacing: 0.02em;
      text-transform: uppercase;
      text-shadow:
        0 0 18px rgba(93, 210, 255, 0.42),
        0 0 28px rgba(243, 194, 95, 0.22);
    }

    .camp-head p {
      margin: 5px 0 0;
      max-width: 38ch;
      color: var(--camp-muted);
      font-size: 0.68rem;
      font-weight: 900;
      line-height: 1.35;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    .camp-clock {
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 12px;
      max-width: 620px;
      margin-top: 0;
    }

    .camp-clock span {
      display: grid;
      grid-template-columns: auto 1fr;
      gap: 10px;
      align-items: center;
      min-height: 56px;
      padding: 10px 18px 10px 16px;
      clip-path: polygon(10px 0, 100% 0, calc(100% - 13px) 100%, 0 100%);
      border: 1px solid rgba(218, 242, 255, 0.54);
      border-radius: 6px;
      background:
        linear-gradient(135deg, rgba(245, 249, 255, 0.92), rgba(229, 243, 255, 0.78)),
        rgba(231, 242, 255, 0.78);
      color: rgba(16, 34, 56, 0.72);
      font-size: 0.55rem;
      font-weight: 950;
      letter-spacing: 0.09em;
      text-transform: uppercase;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.82),
        0 12px 26px rgba(0, 0, 0, 0.2);
    }

    .camp-clock strong {
      color: #10243d;
      font-size: 1.12rem;
      line-height: 1;
    }

    .camp-day-track {
      grid-column: 1 / -1;
      height: 5px;
      overflow: hidden;
      border: 1px solid rgba(205, 241, 255, 0.34);
      border-radius: 999px;
      background: rgba(5, 10, 22, 0.48);
    }

    .camp-day-track i {
      display: block;
      width: var(--value, 0%);
      height: 100%;
      background: linear-gradient(90deg, var(--camp-cyan), #fff0aa, var(--camp-gold));
      box-shadow: 0 0 14px rgba(111, 229, 255, 0.44);
    }

    .camp-close {
      display: inline-grid;
      grid-template-columns: 34px auto;
      place-items: center;
      gap: 10px;
      min-height: 56px;
      min-width: 154px;
      padding-inline: 24px;
      clip-path: polygon(13px 0, 100% 0, calc(100% - 13px) 100%, 0 100%);
      border: 1px solid rgba(255, 232, 177, 0.82);
      border-radius: 6px;
      background:
        radial-gradient(circle at 22% 18%, rgba(255, 255, 255, 0.4), transparent 30%),
        linear-gradient(135deg, rgba(255, 220, 122, 0.98), rgba(244, 154, 58, 0.92));
      color: #221405;
      box-shadow:
        0 0 22px rgba(255, 193, 74, 0.34),
        inset 0 1px 0 rgba(255, 255, 255, 0.45);
    }

    .camp-close::before,
    .camp-action::before,
    .camp-minigame button::before,
    .camp-dock-button::before {
      content: attr(data-icon);
      display: grid;
      place-items: center;
      width: 34px;
      aspect-ratio: 1;
      border: 1px solid rgba(236, 252, 255, 0.54);
      border-radius: 11px;
      background:
        radial-gradient(circle at 32% 24%, rgba(255, 255, 255, 0.78), transparent 20%),
        linear-gradient(135deg, rgba(118, 232, 255, 0.92), rgba(61, 115, 230, 0.9));
      color: #ffffff;
      font-size: 1rem;
      line-height: 1;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.34),
        0 0 16px rgba(118, 232, 255, 0.24),
        0 8px 18px rgba(5, 11, 24, 0.26);
    }

    .camp-close::before,
    .camp-dock-button.is-primary::before {
      border-color: rgba(255, 238, 183, 0.76);
      background:
        radial-gradient(circle at 32% 24%, rgba(255, 255, 255, 0.78), transparent 20%),
        linear-gradient(135deg, #ffe18a, var(--camp-gold) 54%, #d48a24);
      color: #221405;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.38),
        0 0 18px rgba(243, 194, 95, 0.34),
        0 8px 18px rgba(78, 45, 9, 0.28);
    }

    .camp-grid {
      min-height: 0;
      height: 100%;
      display: grid;
      grid-template-columns: 214px minmax(0, 1fr) 320px;
      gap: 18px;
      align-items: stretch;
      overflow: hidden;
    }

    .camp-roster,
    .camp-profile,
    .camp-side {
      min-height: 0;
      border: 0;
      border-radius: 0;
      background: transparent;
      box-shadow: none;
    }

    .camp-roster {
      display: grid;
      align-content: start;
      gap: 10px;
      padding: 38px 0 0;
      overflow: auto;
      scrollbar-width: none;
    }

    .camp-roster::-webkit-scrollbar {
      width: 0;
      height: 0;
    }

    .camp-roster::before {
      content: "女孩";
      position: sticky;
      top: 0;
      z-index: 2;
      display: block;
      margin-bottom: 2px;
      padding: 9px 14px;
      width: 120px;
      clip-path: polygon(10px 0, 100% 0, calc(100% - 12px) 100%, 0 100%);
      background:
        linear-gradient(135deg, rgba(11, 31, 58, 0.96), rgba(7, 18, 36, 0.92));
      color: var(--camp-ivory);
      font-size: 0.66rem;
      font-weight: 950;
      letter-spacing: 0.22em;
      box-shadow: 0 12px 24px rgba(0, 0, 0, 0.18);
    }

    .camp-roster-button {
      display: grid;
      grid-template-columns: 44px minmax(0, 1fr);
      gap: 10px;
      align-items: center;
      min-height: 66px;
      padding: 8px 12px 8px 9px;
      clip-path: polygon(10px 0, 100% 0, calc(100% - 16px) 100%, 0 100%);
      border: 1px solid rgba(190, 226, 245, 0.24);
      border-radius: 6px;
      background:
        linear-gradient(120deg, rgba(18, 43, 76, 0.86), rgba(8, 20, 42, 0.78)),
        rgba(9, 23, 47, 0.8);
      color: var(--camp-ivory);
      text-align: left;
      box-shadow: 0 12px 22px rgba(0, 0, 0, 0.18);
    }

    .camp-roster-button.is-selected {
      border-color: var(--rarity-color, #ffe28a);
      background:
        linear-gradient(120deg, rgba(45, 32, 15, 0.92), rgba(12, 32, 58, 0.86)),
        rgba(17, 33, 56, 0.9);
      box-shadow:
        0 0 22px var(--rarity-glow, rgba(255, 226, 138, 0.28)),
        0 18px 30px rgba(0, 0, 0, 0.2);
      transform: translateX(8px);
    }

    .camp-roster-portrait {
      width: 44px;
      aspect-ratio: 1;
      border-radius: 12px;
      background: var(--portrait) center / cover;
      box-shadow:
        inset 0 0 0 1px rgba(255, 245, 220, 0.52),
        0 0 12px var(--rarity-glow, rgba(255, 226, 138, 0.22));
    }

    .camp-roster-name {
      display: grid;
      gap: 3px;
      min-width: 0;
    }

    .camp-roster-name strong,
    .camp-roster-name span {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }

    .camp-roster-name strong {
      font-size: 0.78rem;
      letter-spacing: 0.04em;
      text-transform: uppercase;
    }

    .camp-roster-name span,
    .camp-rank-pill,
    .camp-mini {
      color: rgba(222, 240, 255, 0.62);
      font-size: 0.54rem;
      font-weight: 950;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    .camp-rank-pill {
      display: none;
      padding: 4px 6px;
      border: 1px solid var(--rarity-color, #aaa);
      border-radius: 999px;
      color: var(--rarity-color, #ddd);
      background: rgba(3, 5, 16, 0.48);
    }

    .camp-profile {
      position: relative;
      display: grid;
      grid-template-columns: 1fr;
      align-items: end;
      gap: 0;
      padding: 0 0 10px;
      overflow: hidden;
    }

    .camp-profile::before {
      content: "";
      position: absolute;
      left: 50%;
      bottom: 62px;
      width: min(560px, 76%);
      aspect-ratio: 1;
      transform: translateX(-50%);
      border-radius: 50%;
      background:
        radial-gradient(circle, rgba(118, 232, 255, 0.16) 0 38%, transparent 39%),
        conic-gradient(from 0deg, transparent, rgba(118, 232, 255, 0.3), transparent, rgba(243, 194, 95, 0.28), transparent);
      filter: blur(0.2px);
      opacity: 0.9;
      animation: campAegisSpin 18s linear infinite;
    }

    .camp-portrait {
      position: absolute;
      left: 50%;
      bottom: 128px;
      z-index: 1;
      width: min(410px, 72%);
      height: min(520px, calc(100% - 116px));
      min-height: 340px;
      transform: translateX(-50%);
      border-radius: 0;
      background-image:
        linear-gradient(180deg, transparent 62%, rgba(5, 10, 22, 0.4)),
        var(--portrait);
      background-position:
        center,
        center bottom;
      background-size:
        auto,
        contain;
      background-repeat:
        no-repeat,
        no-repeat;
      box-shadow:
        0 0 34px var(--rarity-glow, rgba(255, 226, 138, 0.28));
      filter: drop-shadow(0 28px 42px rgba(0, 0, 0, 0.42));
      animation: campHeroIdle 4.8s ease-in-out infinite;
    }

    .camp-showcase-video {
      position: absolute;
      left: 50%;
      bottom: 128px;
      z-index: 2;
      width: min(410px, 72%);
      height: min(520px, calc(100% - 116px));
      min-height: 340px;
      transform: translateX(-50%);
      object-fit: cover;
      object-position: center top;
      border-radius: 18px;
      opacity: 0;
      pointer-events: none;
      filter:
        drop-shadow(0 30px 48px rgba(0, 0, 0, 0.52))
        saturate(1.12)
        contrast(1.04);
      transition: opacity 260ms ease;
      animation: campHeroIdle 4.8s ease-in-out infinite;
    }

    .camp-showcase-video.is-ready {
      opacity: 0.92;
    }

    .camp-profile-main {
      position: relative;
      z-index: 2;
      min-width: 0;
      display: grid;
      grid-template-rows: auto auto auto;
      gap: 8px;
      align-self: end;
      padding: 14px 22px 14px 26px;
      margin-inline: auto;
      width: min(700px, 100%);
      clip-path: polygon(18px 0, 100% 0, calc(100% - 22px) 100%, 0 100%);
      border: 1px solid rgba(202, 237, 255, 0.34);
      border-radius: 8px;
      background:
        linear-gradient(120deg, rgba(12, 30, 56, 0.92), rgba(8, 19, 39, 0.84)),
        rgba(9, 23, 47, 0.88);
      color: var(--camp-ivory);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.72),
        0 18px 40px rgba(0, 0, 0, 0.28);
    }

    .camp-profile-title {
      display: flex;
      align-items: start;
      justify-content: space-between;
      gap: 10px;
    }

    .camp-profile-title h3 {
      margin: 0;
      color: var(--camp-ivory);
      text-shadow: 0 0 18px rgba(118, 232, 255, 0.24);
      font-size: clamp(1.8rem, 4vw, 3.8rem);
      line-height: 0.92;
      letter-spacing: 0;
    }

    .camp-profile-title span {
      display: block;
      margin-top: 5px;
      color: rgba(222, 240, 255, 0.64);
      font-size: 0.72rem;
      font-weight: 950;
      letter-spacing: 0.14em;
      text-transform: uppercase;
    }

    .camp-promo {
      display: grid;
      grid-template-columns: minmax(0, 1fr) auto;
      gap: 4px 12px;
      align-items: end;
      padding: 10px 14px;
      border: 1px solid rgba(255, 226, 138, 0.34);
      border-radius: 7px;
      background:
        radial-gradient(circle at 0% 0%, var(--rarity-glow, rgba(255, 226, 138, 0.24)), transparent 42%),
        linear-gradient(120deg, rgba(51, 33, 18, 0.76), rgba(10, 26, 52, 0.68));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.11),
        0 12px 24px rgba(0, 0, 0, 0.2);
    }

    .camp-promo span,
    .camp-promo em,
    .camp-campaign span,
    .camp-campaign em {
      color: rgba(222, 240, 255, 0.66);
      font-size: 0.54rem;
      font-style: normal;
      font-weight: 950;
      letter-spacing: 0.1em;
      text-transform: uppercase;
    }

    .camp-promo strong,
    .camp-campaign strong {
      color: #fff2c8;
      font-size: 0.92rem;
      line-height: 1.08;
      text-transform: uppercase;
      text-shadow: 0 0 12px var(--rarity-glow, rgba(255, 226, 138, 0.24));
    }

    .camp-promo em {
      grid-column: 1 / -1;
      line-height: 1.32;
      text-transform: none;
      letter-spacing: 0.03em;
    }

    .camp-bond-meter {
      display: grid;
      gap: 6px;
    }

    .camp-bond-meter header,
    .camp-relation-row,
    .camp-action-meta {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 8px;
      color: rgba(222, 240, 255, 0.72);
      font-size: 0.58rem;
      font-weight: 950;
      letter-spacing: 0.09em;
      text-transform: uppercase;
    }

    .camp-meter-track,
    .camp-relation-track {
      height: 8px;
      overflow: hidden;
      border: 1px solid rgba(202, 237, 255, 0.18);
      border-radius: 999px;
      background: rgba(2, 8, 18, 0.48);
    }

    .camp-meter-track i,
    .camp-relation-track i {
      display: block;
      width: var(--value, 0%);
      height: 100%;
      background: linear-gradient(90deg, var(--rarity-color, #8f9aaa), #fff1b4);
      box-shadow: 0 0 14px var(--rarity-glow, rgba(255, 255, 255, 0.18));
    }

    .camp-story {
      display: none;
    }

    .camp-stats {
      display: grid;
      grid-template-columns: repeat(4, minmax(0, 1fr));
      gap: 7px;
    }

    .camp-stats span {
      display: grid;
      gap: 3px;
      padding: 7px 8px;
      border: 1px solid rgba(202, 237, 255, 0.16);
      border-radius: 7px;
      background: rgba(255, 255, 255, 0.075);
      color: rgba(222, 240, 255, 0.6);
      font-size: 0.55rem;
      font-weight: 950;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    .camp-stats strong {
      color: #fff4ce;
      font-size: 0.92rem;
    }

    .camp-side {
      min-width: 0;
      min-height: 0;
      display: grid;
      grid-template-rows: auto auto minmax(0, 1fr) auto auto;
      gap: 10px;
      padding: 38px 0 0;
      overflow: hidden;
    }

    .camp-side h3 {
      margin: 0;
      color: var(--camp-ivory);
      font-size: 0.82rem;
      letter-spacing: 0.14em;
      text-transform: uppercase;
    }

    .camp-actions {
      min-height: 0;
      display: grid;
      gap: 7px;
      overflow: auto;
      scrollbar-width: none;
    }

    .camp-actions::-webkit-scrollbar {
      width: 0;
      height: 0;
    }

    .camp-campaign {
      display: grid;
      gap: 7px;
      padding: 12px 14px;
      clip-path: polygon(12px 0, 100% 0, calc(100% - 16px) 100%, 0 100%);
      border: 1px solid rgba(255, 226, 138, 0.42);
      border-radius: 8px;
      background:
        radial-gradient(circle at 0% 0%, rgba(255, 226, 138, 0.2), transparent 44%),
        linear-gradient(120deg, rgba(60, 34, 18, 0.9), rgba(13, 29, 58, 0.82));
      color: var(--camp-ivory);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        0 14px 28px rgba(0, 0, 0, 0.24);
    }

    .camp-action {
      display: grid;
      grid-template-columns: 38px minmax(0, 1fr);
      gap: 4px;
      column-gap: 10px;
      align-items: center;
      min-height: 56px;
      padding: 10px 12px 10px 10px;
      clip-path: polygon(10px 0, 100% 0, calc(100% - 14px) 100%, 0 100%);
      border: 1px solid rgba(202, 237, 255, 0.28);
      border-radius: 6px;
      background:
        radial-gradient(circle at 0% 0%, rgba(118, 232, 255, 0.2), transparent 40%),
        linear-gradient(120deg, rgba(16, 38, 70, 0.9), rgba(8, 20, 42, 0.82)),
        rgba(9, 23, 47, 0.8);
      color: var(--camp-ivory);
      text-align: left;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.08),
        0 10px 22px rgba(0, 0, 0, 0.18);
      transition: transform 160ms ease, border-color 160ms ease, box-shadow 160ms ease, background 160ms ease;
    }

    .camp-action:hover:not(:disabled),
    .camp-action:focus-visible {
      border-color: rgba(118, 232, 255, 0.62);
      background:
        radial-gradient(circle at 0% 0%, rgba(118, 232, 255, 0.28), transparent 42%),
        linear-gradient(120deg, rgba(20, 52, 88, 0.94), rgba(10, 26, 52, 0.9));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 14px 28px rgba(0, 0, 0, 0.24),
        0 0 18px rgba(118, 232, 255, 0.18);
      transform: translateX(-2px);
    }

    .camp-action.is-recommended {
      border-color: rgba(255, 226, 138, 0.62);
      background:
        radial-gradient(circle at 0% 0%, rgba(255, 226, 138, 0.22), transparent 42%),
        linear-gradient(120deg, rgba(58, 36, 18, 0.92), rgba(10, 28, 56, 0.88));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 0 22px rgba(255, 206, 102, 0.18),
        0 14px 28px rgba(0, 0, 0, 0.24);
    }

    .camp-action:disabled {
      cursor: not-allowed;
      opacity: 0.48;
      filter: grayscale(0.35);
    }

    .camp-action::before {
      grid-row: 1 / span 2;
      align-self: center;
    }

    .camp-action strong {
      grid-column: 2;
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 8px;
      font-size: 0.74rem;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    .camp-action-badge {
      flex: 0 0 auto;
      padding: 3px 6px;
      border: 1px solid rgba(255, 226, 138, 0.44);
      border-radius: 999px;
      color: #fff0bd;
      background: rgba(255, 226, 138, 0.12);
      font-size: 0.48rem;
      line-height: 1;
      letter-spacing: 0.08em;
    }

    .camp-action span {
      grid-column: 2;
      color: rgba(222, 240, 255, 0.68);
      font-size: 0.58rem;
      font-weight: 900;
      letter-spacing: 0.04em;
    }

    .camp-action > span:not(.camp-action-meta) {
      display: none;
    }

    .camp-action-meta {
      align-self: start;
    }

    .camp-mini-launch {
      display: grid;
      grid-template-columns: 38px minmax(0, 1fr);
      gap: 4px 10px;
      align-items: center;
      min-height: 62px;
      padding: 10px 12px 10px 10px;
      border: 1px solid rgba(202, 237, 255, 0.28);
      border-radius: 7px;
      background:
        radial-gradient(circle at 0% 0%, rgba(118, 232, 255, 0.24), transparent 44%),
        linear-gradient(120deg, rgba(16, 38, 70, 0.92), rgba(8, 20, 42, 0.84));
      color: var(--camp-ivory);
      text-align: left;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        0 12px 24px rgba(0, 0, 0, 0.2);
      transition: transform 160ms ease, border-color 160ms ease, box-shadow 160ms ease;
    }

    .camp-mini-launch::before {
      content: attr(data-icon);
      grid-row: 1 / span 2;
      display: grid;
      place-items: center;
      width: 34px;
      aspect-ratio: 1;
      border: 1px solid rgba(236, 252, 255, 0.54);
      border-radius: 11px;
      background:
        radial-gradient(circle at 32% 24%, rgba(255, 255, 255, 0.78), transparent 20%),
        linear-gradient(135deg, rgba(118, 232, 255, 0.92), rgba(61, 115, 230, 0.9));
      color: #fff;
      font-size: 1rem;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.34),
        0 0 16px rgba(118, 232, 255, 0.24),
        0 8px 18px rgba(5, 11, 24, 0.26);
    }

    .camp-mini-launch:hover:not(:disabled),
    .camp-mini-launch:focus-visible {
      border-color: rgba(118, 232, 255, 0.62);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 16px 30px rgba(0, 0, 0, 0.26),
        0 0 18px rgba(118, 232, 255, 0.18);
      transform: translateX(-2px);
    }

    .camp-mini-launch strong {
      font-size: 0.74rem;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    .camp-mini-launch span {
      color: rgba(222, 240, 255, 0.68);
      font-size: 0.58rem;
      font-weight: 900;
      letter-spacing: 0.04em;
    }

    .camp-mini-launch[hidden] {
      display: none;
    }

    .camp-minigame {
      position: absolute;
      inset: 0;
      z-index: 9;
      display: grid;
      place-items: center;
      padding: 24px;
      border: 0;
      border-radius: 0;
      background:
        radial-gradient(circle at 50% 42%, rgba(118, 232, 255, 0.18), transparent 28%),
        rgba(3, 6, 16, 0.72);
      backdrop-filter: blur(7px) saturate(1.16);
    }

    .camp-minigame[hidden] {
      display: none;
    }

    .camp-minigame-card {
      width: min(520px, calc(100vw - 42px));
      display: grid;
      gap: 12px;
      padding: 18px;
      border: 1px solid rgba(204, 237, 255, 0.34);
      border-radius: 10px;
      background:
        radial-gradient(circle at 50% 0%, rgba(118, 232, 255, 0.22), transparent 46%),
        linear-gradient(135deg, rgba(13, 36, 66, 0.96), rgba(7, 16, 34, 0.94));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 28px 72px rgba(0, 0, 0, 0.42);
    }

    .camp-minigame-head {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 12px;
    }

    .camp-minigame h3 {
      margin: 0;
      color: var(--camp-ivory);
      font-size: 0.9rem;
      letter-spacing: 0.14em;
      text-transform: uppercase;
    }

    .camp-mini-close {
      min-height: 34px;
      padding: 6px 10px;
      border-radius: 7px;
      font-size: 0.58rem;
    }

    .camp-minigame p {
      margin: 0;
      color: rgba(219, 239, 255, 0.78);
      font-size: 0.62rem;
      font-weight: 850;
      line-height: 1.38;
    }

    .camp-mini-readout {
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 8px;
    }

    .camp-mini-readout span,
    .camp-mini-reward {
      display: grid;
      gap: 4px;
      padding: 8px 10px;
      border: 1px solid rgba(204, 237, 255, 0.2);
      border-radius: 7px;
      background: rgba(255, 255, 255, 0.055);
      color: rgba(219, 239, 255, 0.62);
      font-size: 0.54rem;
      font-weight: 900;
      letter-spacing: 0.06em;
      text-transform: uppercase;
    }

    .camp-mini-readout strong {
      color: #fff0c2;
      font-size: 0.7rem;
      letter-spacing: 0.02em;
      text-transform: none;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .camp-mini-track {
      position: relative;
      height: 28px;
      overflow: hidden;
      border: 1px solid rgba(255, 235, 205, 0.25);
      border-radius: 999px;
      background:
        linear-gradient(90deg, rgba(255, 96, 120, 0.16), transparent 28%, transparent 72%, rgba(255, 96, 120, 0.16)),
        rgba(4, 6, 16, 0.7);
    }

    .camp-mini-zone {
      position: absolute;
      top: 3px;
      bottom: 3px;
      border-radius: 999px;
      pointer-events: none;
    }

    .camp-mini-zone-good {
      left: 34%;
      right: 34%;
      background: linear-gradient(90deg, rgba(146, 242, 255, 0.14), rgba(146, 242, 255, 0.34), rgba(146, 242, 255, 0.14));
      box-shadow: 0 0 16px rgba(146, 242, 255, 0.2);
    }

    .camp-mini-zone-perfect {
      left: 45%;
      right: 45%;
      background: linear-gradient(90deg, rgba(255, 214, 235, 0.18), rgba(255, 226, 138, 0.72), rgba(146, 242, 255, 0.18));
      box-shadow: 0 0 14px rgba(255, 226, 138, 0.32);
    }

    .camp-mini-track i {
      position: absolute;
      top: 2px;
      left: var(--mini-pos, 50%);
      width: 6px;
      height: calc(100% - 4px);
      border-radius: 999px;
      background: #fff4d8;
      box-shadow: 0 0 12px rgba(255, 244, 216, 0.75);
      transform: translateX(-50%);
    }

    .camp-minigame.is-running .camp-mini-track i {
      animation: campMiniMarkerPulse 520ms ease-in-out infinite;
    }

    .camp-mini-scale {
      display: grid;
      grid-template-columns: repeat(5, minmax(0, 1fr));
      color: rgba(219, 239, 255, 0.5);
      font-size: 0.48rem;
      font-weight: 900;
      letter-spacing: 0.05em;
      text-transform: uppercase;
      text-align: center;
    }

    .camp-mini-scale span:nth-child(3) {
      color: #fff0c2;
    }

    .camp-mini-reward {
      display: block;
      color: rgba(255, 240, 194, 0.86);
      text-transform: none;
      line-height: 1.35;
    }

    .camp-mini-buttons {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 8px;
    }

    .camp-minigame button {
      display: inline-grid;
      grid-template-columns: 30px auto;
      place-items: center;
      gap: 8px;
      min-height: 42px;
      padding: 8px 10px;
      border: 1px solid rgba(202, 237, 255, 0.3);
      border-radius: 7px;
      background:
        radial-gradient(circle at 0% 0%, rgba(118, 232, 255, 0.22), transparent 40%),
        linear-gradient(135deg, rgba(14, 48, 76, 0.9), rgba(11, 28, 54, 0.86));
      color: var(--camp-ivory);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.08),
        0 10px 20px rgba(0, 0, 0, 0.18);
    }

    .camp-minigame button.primary {
      border-color: rgba(255, 232, 177, 0.62);
      background:
        radial-gradient(circle at 0% 0%, rgba(255, 232, 177, 0.2), transparent 40%),
        linear-gradient(135deg, rgba(77, 39, 89, 0.92), rgba(34, 22, 58, 0.9));
    }

    .camp-minigame button:disabled {
      opacity: 0.52;
      filter: grayscale(0.3);
    }

    @keyframes campMiniMarkerPulse {
      0%, 100% { box-shadow: 0 0 12px rgba(255, 244, 216, 0.75); }
      50% { box-shadow: 0 0 22px rgba(255, 226, 138, 0.92); }
    }

    .camp-relations {
      display: grid;
      gap: 7px;
    }

    .camp-log {
      min-height: 54px;
      padding: 10px 12px;
      border: 1px solid rgba(204, 237, 255, 0.32);
      border-radius: 7px;
      background: rgba(8, 20, 42, 0.72);
      color: rgba(224, 244, 255, 0.84);
      font-size: 0.68rem;
      font-weight: 850;
      line-height: 1.42;
    }

    .camp-bottom-dock {
      display: grid;
      grid-template-columns: repeat(6, minmax(86px, 1fr));
      gap: 6px;
      align-items: end;
      width: min(980px, calc(100vw - 72px));
      justify-self: center;
      padding: 10px 28px 10px 44px;
      clip-path: polygon(26px 0, 100% 0, calc(100% - 32px) 100%, 0 100%);
      border: 1px solid rgba(202, 237, 255, 0.36);
      border-radius: 10px;
      background:
        radial-gradient(circle at 50% 0%, rgba(118, 232, 255, 0.18), transparent 52%),
        linear-gradient(120deg, rgba(12, 30, 56, 0.92), rgba(8, 19, 39, 0.86)),
        rgba(9, 23, 47, 0.88);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        0 20px 44px rgba(0, 0, 0, 0.28);
    }

    .camp-dock-button {
      position: relative;
      display: grid;
      place-items: center;
      gap: 6px;
      min-height: 76px;
      border: 1px solid transparent;
      border-radius: 9px;
      background: rgba(255, 255, 255, 0.035);
      color: rgba(226, 244, 255, 0.78);
      font-size: 0.64rem;
      letter-spacing: 0.04em;
      transition: transform 160ms ease, color 160ms ease, border-color 160ms ease, background 160ms ease;
    }

    .camp-dock-button::before {
      width: 46px;
      border-radius: 15px;
      font-size: 1.18rem;
      transition: transform 160ms ease, box-shadow 160ms ease, background 160ms ease;
    }

    .camp-dock-button.is-primary::before {
    }

    .camp-dock-button:hover:not(:disabled),
    .camp-dock-button:focus-visible {
      border-color: rgba(118, 232, 255, 0.34);
      background: rgba(118, 232, 255, 0.08);
      color: var(--camp-ivory);
      transform: translateY(-3px);
    }

    .camp-dock-button:hover:not(:disabled)::before,
    .camp-dock-button:focus-visible::before {
      transform: translateY(-4px);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.36),
        0 12px 22px rgba(32, 91, 160, 0.34),
        0 0 18px rgba(118, 232, 255, 0.28);
    }

    .camp-dock-button.is-primary:hover:not(:disabled)::before,
    .camp-dock-button.is-primary:focus-visible::before {
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.38),
        0 12px 24px rgba(150, 92, 18, 0.32),
        0 0 18px rgba(243, 194, 95, 0.36);
    }

    @keyframes campHeroIdle {
      0%, 100% { transform: translateX(-50%) translateY(0); }
      50% { transform: translateX(-50%) translateY(-8px); }
    }

    @keyframes campAegisSpin {
      to { transform: translateX(-50%) rotate(360deg); }
    }

    html[data-ui-mode="camp"] .top-hud,
    html[data-ui-mode="camp"] .build-panel {
      opacity: 0;
      pointer-events: none;
      transform: translateY(-12px);
    }

    html[data-ui-mode="camp"] .top-hud .stat,
    html[data-ui-mode="camp"] .top-hud .wave-panel {
      visibility: hidden;
      opacity: 0;
      pointer-events: none !important;
    }

    @media (max-width: 980px) {
      .camp-screen {
        padding: 0;
      }

      .camp-shell {
        width: 100vw;
        height: 100vh;
        grid-template-rows: 92px minmax(0, 1fr) 82px;
        padding: 10px 12px;
        overflow: hidden;
      }

      .camp-head {
        grid-template-columns: minmax(112px, 170px) minmax(0, 1fr) minmax(98px, 132px);
        gap: 8px;
      }

      .camp-head h2 {
        font-size: 1.02rem;
      }

      .camp-head p {
        display: none;
      }

      .camp-clock {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 5px;
      }

      .camp-clock span {
        min-height: 42px;
        padding: 6px 9px;
        gap: 4px;
        font-size: 0.42rem;
        letter-spacing: 0.04em;
      }

      .camp-clock strong {
        font-size: 0.74rem;
      }

      .camp-close {
        min-width: 96px;
        min-height: 42px;
        padding-inline: 10px;
        font-size: 0.58rem;
      }

      .camp-grid {
        grid-template-columns: 82px minmax(0, 1fr) 186px;
        gap: 7px;
      }

      .camp-roster {
        padding-top: 30px;
        gap: 7px;
      }

      .camp-roster::before {
        width: 74px;
        padding: 7px 9px;
        font-size: 0.48rem;
        letter-spacing: 0.12em;
      }

      .camp-roster-button {
        grid-template-columns: 1fr;
        justify-items: center;
        min-height: 58px;
        padding: 7px;
      }

      .camp-roster-name span,
      .camp-roster-name strong {
        display: none;
      }

      .camp-profile {
        overflow: hidden;
      }

      .camp-portrait {
        width: min(230px, 86%);
        height: min(330px, calc(100% - 126px));
        min-height: 220px;
        bottom: 116px;
      }

      .camp-showcase-video {
        width: min(230px, 86%);
        height: min(330px, calc(100% - 126px));
        min-height: 220px;
        bottom: 116px;
      }

      .camp-profile::before {
        bottom: 54px;
        width: min(340px, 92%);
      }

      .camp-profile-main {
        padding: 9px 12px 9px 14px;
      }

      .camp-profile-title h3 {
        font-size: 1.45rem;
      }

      .camp-profile-title span {
        font-size: 0.46rem;
      }

      .camp-bond-meter header {
        font-size: 0.46rem;
      }

      .camp-stats {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 5px;
      }

      .camp-stats span {
        padding: 5px 6px;
        font-size: 0.42rem;
      }

      .camp-stats strong {
        font-size: 0.68rem;
      }

      .camp-side {
        min-height: 0;
        padding-top: 30px;
        gap: 6px;
      }

      .camp-side h3 {
        font-size: 0.56rem;
      }

      .camp-action {
        min-height: 46px;
        padding: 7px 8px;
      }

      .camp-action strong {
        font-size: 0.56rem;
      }

      .camp-action span,
      .camp-mini-launch span,
      .camp-minigame p,
      .camp-log {
        font-size: 0.48rem;
      }

      .camp-minigame {
        padding: 10px;
      }

      .camp-minigame-card {
        padding: 12px;
        gap: 9px;
      }

      .camp-mini-launch {
        min-height: 48px;
        padding: 7px 8px;
      }

      .camp-bottom-dock {
        width: calc(100vw - 28px);
        min-height: 72px;
        padding: 0 16px;
      }

      .camp-dock-button {
        min-height: 70px;
        font-size: 0.44rem;
      }

      .camp-dock-button::before {
        width: 36px;
        border-radius: 12px;
        font-size: 0.92rem;
      }
    }

    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud {
      grid-template-columns: minmax(220px, 270px) repeat(4, minmax(72px, 88px)) minmax(310px, 360px);
      gap: 6px;
    }

    html[data-game-mode="countdown"] .top-hud .stat,
    html[data-game-mode="playing"] .top-hud .stat {
      min-height: 44px;
      grid-template-columns: 24px minmax(0, 1fr);
      grid-template-rows: 13px 17px auto;
      gap: 1px 6px;
      padding: 6px 8px 5px;
    }

    html[data-game-mode="countdown"] .top-hud .hud-icon,
    html[data-game-mode="playing"] .top-hud .hud-icon {
      width: 21px;
      height: 21px;
      border-radius: 7px;
    }

    html[data-game-mode="countdown"] .top-hud .stat span,
    html[data-game-mode="playing"] .top-hud .stat span {
      font-size: 0.4rem;
      letter-spacing: 0.08em;
    }

    html[data-game-mode="countdown"] .top-hud .stat strong,
    html[data-game-mode="playing"] .top-hud .stat strong {
      font-size: 0.78rem;
    }

    @media (max-width: 980px) {
      .top-hud {
        left: 8px;
        right: 8px;
        width: auto;
        transform: none;
        grid-template-columns: minmax(132px, 1.28fr) repeat(4, minmax(44px, 0.48fr)) minmax(206px, 1.85fr);
        gap: 4px;
      }

      .top-hud .stat {
        min-height: 42px;
        padding: 5px;
        grid-template-columns: 19px minmax(0, 1fr);
        grid-template-rows: 11px 16px auto;
        gap: 1px 4px;
      }

      .top-hud .hud-icon {
        width: 18px;
        height: 18px;
        border-radius: 6px;
      }

      .top-hud .stat span {
        font-size: 0.34rem;
        letter-spacing: 0.04em;
      }

      .top-hud .stat strong {
        font-size: 0.66rem;
      }

      .top-hud .wave-panel {
        padding: 5px;
        gap: 5px;
      }

      .top-hud .wave-panel header {
        font-size: 0.5rem;
      }

      .top-hud .combat-readout {
        gap: 4px;
      }

      .top-hud .combat-chip {
        min-height: 31px;
        grid-template-columns: 12px minmax(0, 1fr);
        grid-template-rows: 10px 14px;
        gap: 0 4px;
        padding: 4px;
      }

      .top-hud .combat-chip::before {
        width: 11px;
        height: 11px;
      }

      .top-hud .combat-chip span {
        font-size: 0.34rem;
      }

      .top-hud .combat-chip strong {
        font-size: 0.62rem;
      }

      .top-hud .wave-panel button {
        min-height: 34px;
        padding-left: 24px;
        font-size: 0.58rem;
      }

      .top-hud .wave-panel button::before {
        left: 8px;
        width: 10px;
        height: 10px;
      }

      .top-hud .combat-alert {
        display: none;
      }
    }
    .hand-shell {
      position: relative;
      width: 100%;
      min-width: 0;
      padding: 0 30px 10px;
      overflow: visible;
      --hand-left-fade: 0;
      --hand-right-fade: 0;
    }

    .hand-shell::before,
    .hand-shell::after {
      content: "";
      position: absolute;
      top: 10px;
      bottom: 18px;
      z-index: 4;
      width: 34px;
      pointer-events: none;
      opacity: var(--hand-left-fade, 0);
      transition: opacity 160ms ease;
    }

    .hand-shell::before {
      left: 26px;
      background: linear-gradient(90deg, rgba(8, 10, 24, 0.78), transparent);
    }

    .hand-shell::after {
      right: 26px;
      background: linear-gradient(270deg, rgba(8, 10, 24, 0.78), transparent);
      opacity: var(--hand-right-fade, 0);
    }

    .hand-shell .type-grid {
      width: 100%;
      scroll-snap-type: x proximity;
      scroll-padding-inline: 18px;
      scroll-behavior: smooth;
      cursor: grab;
      touch-action: pan-x;
      -webkit-overflow-scrolling: touch;
      scrollbar-width: none;
    }

    .hand-shell .type-grid::-webkit-scrollbar {
      width: 0;
      height: 0;
    }

    .hand-shell .type-grid.is-dragging {
      cursor: grabbing;
      scroll-behavior: auto;
      user-select: none;
    }

    .hand-shell .tower-card {
      scroll-snap-align: start;
    }

    .hand-scroll {
      position: absolute;
      top: 27px;
      bottom: 30px;
      z-index: 5;
      display: grid;
      place-items: center;
      width: 24px;
      min-height: 0;
      padding: 0;
      border: 1px solid rgba(255, 236, 199, 0.42);
      border-radius: 7px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.02)),
        rgba(11, 13, 28, 0.72);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 8px 16px rgba(0, 0, 0, 0.26);
      opacity: 0;
      pointer-events: none;
      transition: opacity 140ms ease, transform 140ms ease, background 140ms ease;
    }

    .hand-shell.is-scrollable .hand-scroll {
      opacity: 0.88;
      pointer-events: auto;
    }

    .hand-scroll-left { left: 0; }
    .hand-scroll-right { right: 0; }

    .hand-scroll::before {
      content: "";
      width: 9px;
      height: 9px;
      border: solid #fff0cf;
      border-width: 0 2px 2px 0;
      filter: drop-shadow(0 0 6px rgba(255, 216, 120, 0.5));
    }

    .hand-scroll-left::before {
      transform: rotate(135deg);
    }

    .hand-scroll-right::before {
      transform: rotate(-45deg);
    }

    .hand-scroll:hover:not(:disabled) {
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.035)),
        rgba(25, 28, 54, 0.84);
    }

    .hand-scroll:disabled {
      opacity: 0.18;
      pointer-events: none;
    }

    .hand-scroll-meter {
      position: absolute;
      left: 38px;
      right: 38px;
      bottom: 3px;
      height: 3px;
      overflow: hidden;
      border-radius: 999px;
      background: rgba(255, 236, 199, 0.12);
      opacity: 0;
      transition: opacity 160ms ease;
    }

    .hand-shell.is-scrollable .hand-scroll-meter {
      opacity: 1;
    }

    .hand-scroll-meter i {
      position: absolute;
      top: 0;
      bottom: 0;
      left: var(--hand-meter-left, 0%);
      width: var(--hand-meter-size, 100%);
      border-radius: inherit;
      background: linear-gradient(90deg, #ff7fb4, #ffd06a, #84e7ff);
      box-shadow: 0 0 10px rgba(255, 168, 210, 0.38);
      transition: left 100ms linear, width 160ms ease;
    }

    html[data-game-mode="countdown"] .hand-shell,
    html[data-game-mode="playing"] .hand-shell {
      padding-inline: 26px;
      padding-bottom: 8px;
    }

    html[data-game-mode="countdown"] .hand-scroll,
    html[data-game-mode="playing"] .hand-scroll {
      top: 18px;
      bottom: 24px;
      width: 22px;
    }

    @media (max-width: 980px) {
      .hand-shell {
        padding-inline: 24px;
      }

      .hand-scroll {
        width: 20px;
      }
    }

    /* IMGEN Batch 02 runtime UI replacement */
    :root {
      --ink: #fff0dc;
      --paper: rgba(6, 9, 22, 0.7);
      --paper-strong: rgba(10, 13, 30, 0.88);
      --edge: rgba(255, 214, 150, 0.48);
      --edge-dark: #b88743;
      --red: #ff5c86;
      --gold: #f1bd61;
      --green: #8dffb1;
      --blue: #76ddff;
      --violet: #c178ff;
      --ui-void: #040611;
      --ui-panel: rgba(7, 10, 24, 0.76);
      --ui-panel-strong: rgba(11, 14, 31, 0.92);
      --ui-line: rgba(255, 219, 158, 0.36);
      --ui-line-strong: rgba(255, 225, 160, 0.72);
      --ui-rose: #ff6f9e;
      --ui-cyan: #78e8ff;
      --ui-violet: #bd76ff;
      --ui-shadow: rgba(0, 0, 0, 0.54);
      --shadow: rgba(0, 0, 0, 0.54);
    }

    body {
      background:
        linear-gradient(180deg, #050714 0%, #0b1225 52%, #050710 100%);
      color: var(--ink);
    }

    button,
    .button,
    .card-tooltip,
    .toast,
    .skill-cinematic-core {
      border-radius: 8px;
    }

    button {
      border: 1px solid var(--ui-line);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
        linear-gradient(135deg, rgba(20, 25, 52, 0.94), rgba(5, 8, 20, 0.92));
      color: #fff2d6;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.13),
        0 10px 22px rgba(0, 0, 0, 0.28);
    }

    button:hover:not(:disabled),
    button:focus-visible {
      border-color: var(--ui-line-strong);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0.03)),
        linear-gradient(135deg, rgba(30, 36, 70, 0.98), rgba(9, 12, 28, 0.96));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.18),
        0 14px 28px rgba(0, 0, 0, 0.34),
        0 0 18px rgba(255, 207, 116, 0.16);
    }

    button.primary,
    .overlay.is-settlement .primary,
    .camp-minigame button.primary {
      border-color: rgba(255, 223, 150, 0.68);
      background:
        linear-gradient(180deg, rgba(255, 236, 172, 0.22), rgba(255, 180, 91, 0.06)),
        linear-gradient(135deg, rgba(88, 45, 78, 0.96), rgba(25, 13, 38, 0.96));
      color: #fff7d9;
      text-shadow: 0 0 12px rgba(255, 207, 108, 0.28);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.18),
        0 0 22px rgba(255, 187, 82, 0.2),
        0 12px 28px rgba(0, 0, 0, 0.34);
    }

    .top-hud {
      top: 10px;
      width: min(1210px, calc(100vw - 24px));
      grid-template-columns: minmax(254px, 314px) repeat(4, minmax(86px, 106px)) minmax(350px, 410px);
      gap: 7px;
      letter-spacing: 0.07em;
    }

    .top-hud .stat,
    .top-hud .wave-panel,
    .tower-status-card,
    .overlay-card,
    .settlement-card,
    .overlay-stats span,
    .card-tooltip,
    .toast,
    .skill-cinematic-core {
      border: 1px solid var(--ui-line);
      border-radius: 8px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.085), rgba(255, 255, 255, 0.018)),
        linear-gradient(135deg, rgba(15, 19, 43, 0.86), rgba(4, 7, 18, 0.72));
      box-shadow:
        inset 0 1px 0 rgba(255, 248, 224, 0.13),
        inset 0 0 22px rgba(120, 232, 255, 0.045),
        0 16px 34px rgba(0, 0, 0, 0.34);
      backdrop-filter: blur(10px) saturate(1.18);
    }

    .top-hud .stat {
      min-height: 58px;
      padding: 8px 10px 7px;
    }

    .top-hud .stat span,
    .top-hud .combat-chip span,
    .settlement-card span,
    .overlay-stats span {
      color: rgba(255, 230, 204, 0.66);
    }

    .top-hud .stat strong,
    .top-hud .combat-chip strong,
    .overlay-stats strong,
    .settlement-card strong {
      color: #fff3c8;
      text-shadow:
        0 0 12px rgba(255, 211, 118, 0.22),
        0 2px 10px rgba(0, 0, 0, 0.42);
    }

    .top-hud .stat[data-stat="gold"] strong,
    .overlay.is-victory .settlement-card strong {
      color: #ffd76e;
    }

    .top-hud .stat[data-stat="monsters"] strong,
    .overlay.is-defeat .settlement-card strong {
      color: #ff6f9e;
    }

    .top-hud .stat[data-stat="wave"] strong,
    .top-hud .wave-panel header strong {
      color: var(--ui-cyan);
    }

    .top-hud .hp-track,
    .camp-meter-track,
    .camp-relation-track,
    .camp-day-track,
    .camp-mini-track {
      border-color: rgba(255, 226, 170, 0.22);
      background: rgba(2, 5, 15, 0.68);
      box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.42);
    }

    .top-hud .hp-track i {
      background: linear-gradient(90deg, #ff5c86 0 36%, #ffd36e 57%, #8dffb1 100%);
    }

    .top-hud .combat-chip {
      border-color: rgba(255, 226, 170, 0.22);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.055), transparent),
        rgba(1, 4, 14, 0.42);
    }

    .top-hud .combat-chip::before {
      background: var(--ui-cyan);
      box-shadow: 0 0 12px rgba(120, 232, 255, 0.42);
    }

    .top-hud .combat-chip[data-chip="status"]::before {
      background: #8dffb1;
    }

    .top-hud .combat-chip[data-chip="left"]::before {
      background: var(--ui-rose);
    }

    .top-hud .combat-alert {
      border-color: rgba(255, 111, 158, 0.42);
      background:
        linear-gradient(90deg, rgba(255, 111, 158, 0.18), rgba(120, 232, 255, 0.045));
      color: rgba(255, 232, 216, 0.86);
    }

    .build-panel {
      left: clamp(12px, 1.8vw, 26px);
      bottom: clamp(10px, 1.8vh, 20px);
      width: min(760px, calc(100vw - 410px));
      min-width: 570px;
    }

    .hand-shell {
      padding: 0 34px 12px;
    }

    .hand-shell::before {
      background: linear-gradient(90deg, rgba(4, 6, 17, 0.92), transparent);
    }

    .hand-shell::after {
      background: linear-gradient(270deg, rgba(4, 6, 17, 0.92), transparent);
    }

    .type-grid {
      grid-auto-columns: clamp(98px, 8.4vw, 124px);
      gap: 4px;
      padding: 17px 12px 15px;
      scrollbar-color: rgba(255, 213, 128, 0.58) rgba(6, 9, 22, 0.32);
    }

    .hand-scroll {
      border-color: rgba(255, 226, 170, 0.44);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.02)),
        rgba(5, 8, 20, 0.82);
    }

    .hand-scroll::before {
      border-color: #ffe2a0;
    }

    .hand-scroll-meter {
      background: rgba(255, 226, 170, 0.14);
    }

    .hand-scroll-meter i {
      background: linear-gradient(90deg, var(--ui-rose), var(--gold), var(--ui-cyan));
    }

    .tower-card {
      --class-accent: var(--class-color, #f0b85c);
      --rarity-color: var(--class-accent);
      --rarity-glow: color-mix(in srgb, var(--class-accent) 34%, transparent);
      grid-template-rows: 1fr 30px;
      border: 1px solid color-mix(in srgb, var(--class-accent) 58%, rgba(255, 226, 170, 0.32));
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 22%),
        linear-gradient(165deg, color-mix(in srgb, var(--class-accent) 20%, transparent), rgba(3, 5, 16, 0.96) 52%, rgba(2, 3, 10, 0.98));
      box-shadow:
        inset 0 0 0 1px rgba(255, 248, 224, 0.1),
        0 10px 20px rgba(0, 0, 0, 0.36),
        0 0 18px color-mix(in srgb, var(--class-accent) 24%, transparent);
    }

    .tower-card::after {
      border-radius: inherit;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.12), transparent 22%, rgba(0, 0, 0, 0.38)),
        linear-gradient(0deg, rgba(3, 5, 15, 0.78) 0 13%, transparent 36%),
        linear-gradient(90deg, rgba(255, 255, 255, 0.06), transparent 34%, rgba(255, 255, 255, 0.05));
      mix-blend-mode: screen;
      opacity: 0.62;
    }

    .tower-card:hover,
    .tower-card:focus-visible,
    .tower-card.selected {
      border-color: color-mix(in srgb, var(--class-accent) 74%, #ffffff 14%);
      box-shadow:
        inset 0 0 0 1px rgba(255, 246, 220, 0.28),
        0 18px 30px rgba(0, 0, 0, 0.42),
        0 0 24px color-mix(in srgb, var(--class-accent) 42%, transparent);
    }

    .tower-card.selected {
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.13), transparent 22%),
        linear-gradient(165deg, color-mix(in srgb, var(--class-accent) 30%, rgba(255, 255, 255, 0.04)), rgba(5, 7, 19, 0.96) 54%, rgba(2, 3, 10, 0.98));
    }

    .tower-card.is-skill-ready {
      border-color: #fff2be;
      box-shadow:
        inset 0 0 0 1px rgba(255, 246, 220, 0.36),
        0 18px 30px rgba(0, 0, 0, 0.42),
        0 0 26px color-mix(in srgb, var(--class-accent) 52%, transparent),
        0 0 18px rgba(255, 228, 144, 0.26);
    }

    .portrait {
      inset: 3px 3px 30px;
      border-radius: 6px 6px 0 0;
      border-bottom: 1px solid color-mix(in srgb, var(--class-accent) 42%, rgba(255, 255, 255, 0.08));
      background-color: #070a18;
      background-position: center 30%;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        inset 0 -28px 34px rgba(2, 3, 11, 0.54);
    }

    .card-name {
      min-height: 24px;
      padding: 5px 26px 0 7px;
      color: #fff2d4;
      background:
        linear-gradient(180deg, rgba(5, 7, 18, 0.76), rgba(5, 7, 18, 0));
      font-size: 0.5rem;
      letter-spacing: 0.04em;
      opacity: 1;
      text-shadow: 0 0 8px rgba(0, 0, 0, 0.8);
    }

    .cost-row {
      min-height: 30px;
      border-top: 1px solid color-mix(in srgb, var(--class-accent) 46%, rgba(255, 226, 170, 0.18));
      background:
        linear-gradient(90deg, color-mix(in srgb, var(--class-accent) 48%, rgba(5, 8, 20, 0.88)), rgba(4, 6, 17, 0.94)),
        rgba(4, 6, 17, 0.92);
      color: #fff4d8;
      font-weight: 950;
    }

    .cost-row i {
      font-size: clamp(0.5rem, 0.78vw, 0.68rem);
      text-shadow: 0 1px 10px rgba(0, 0, 0, 0.72);
    }

    .cost-row strong {
      border: 1px solid rgba(255, 226, 170, 0.2);
      background: rgba(2, 4, 12, 0.78);
      color: #ffe4a0;
    }

    .card-cooldown-fill {
      bottom: 30px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.2), transparent 24%),
        linear-gradient(180deg, color-mix(in srgb, var(--class-accent) 68%, #ffffff 10%), rgba(120, 232, 255, 0.3));
    }

    .card-skill-ready {
      border-color: rgba(255, 240, 184, 0.82);
      background: rgba(4, 6, 17, 0.82);
      color: #fff2be;
    }

    .tower-card[data-build-type="warrior"] {
      --class-color: #ff536a;
      --class-accent: #ff6c76;
    }

    .tower-card[data-build-type="archer"] {
      --class-color: #5fd5ff;
      --class-accent: #76ddff;
    }

    .tower-card[data-build-type="mage"] {
      --class-color: #bd76ff;
      --class-accent: #c178ff;
    }

    .tower-card[data-build-type="healer"] {
      --class-color: #8dffb1;
      --class-accent: #90e89d;
    }

    .tower-card[data-build-type="queen"] {
      --class-color: #f1bd61;
      --class-accent: #ffd36e;
      border-color: rgba(255, 218, 130, 0.78);
    }

    .tower-status-dock {
      gap: 7px;
    }

    .tower-status-card {
      padding: 7px;
      border-color: rgba(255, 226, 170, 0.2);
      color: rgba(255, 238, 216, 0.74);
    }

    .tower-status-card.is-built {
      border-color: rgba(120, 232, 255, 0.42);
      background:
        linear-gradient(135deg, rgba(20, 33, 62, 0.9), rgba(5, 8, 19, 0.84));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 0 18px rgba(120, 232, 255, 0.1);
    }

    .tower-status-head strong {
      color: #ffe0a0;
    }

    .resource-track {
      color: rgba(255, 238, 216, 0.74);
    }

    .resource-track i {
      border-color: rgba(255, 226, 170, 0.14);
      border-radius: 999px;
      background: rgba(1, 4, 12, 0.62);
    }

    .overlay {
      background:
        linear-gradient(90deg, rgba(2, 4, 12, 0.9), rgba(6, 8, 20, 0.58)),
        rgba(2, 4, 12, 0.74);
    }

    .overlay-card {
      border-color: rgba(255, 226, 170, 0.42);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.085), rgba(255, 255, 255, 0.018)),
        linear-gradient(135deg, rgba(18, 20, 43, 0.88), rgba(3, 5, 15, 0.82));
      box-shadow:
        inset 0 1px 0 rgba(255, 248, 224, 0.14),
        0 24px 60px rgba(0, 0, 0, 0.48),
        0 0 34px rgba(120, 232, 255, 0.08);
    }

    .overlay-card::before {
      background:
        linear-gradient(120deg, transparent 22%, rgba(255, 244, 210, 0.14), transparent 55%);
    }

    .overlay-card h1 {
      color: #fff2c8;
      text-shadow:
        0 0 22px rgba(255, 211, 118, 0.24),
        0 0 34px rgba(120, 232, 255, 0.12);
    }

    .overlay-card p {
      color: rgba(255, 232, 214, 0.82);
    }

    .overlay-stats span,
    .settlement-card {
      border-color: rgba(255, 226, 170, 0.24);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.018)),
        rgba(4, 7, 18, 0.68);
    }

    .overlay.is-settlement {
      background: #03050d;
    }

    .overlay.is-settlement .overlay-card {
      border: 0;
      border-radius: 0;
      background: transparent;
      box-shadow: none;
      backdrop-filter: none;
    }

    .overlay.is-settlement .overlay-card::before {
      background:
        linear-gradient(90deg, rgba(3, 5, 14, 0.94) 0%, rgba(3, 5, 14, 0.68) 36%, rgba(3, 5, 14, 0.18) 66%, rgba(3, 5, 14, 0.32) 100%),
        linear-gradient(0deg, rgba(3, 5, 14, 0.86), transparent 42%, rgba(3, 5, 14, 0.34));
    }

    .overlay.is-settlement .overlay-card h1 {
      color: #fff0b6;
      text-shadow:
        0 0 24px rgba(255, 216, 120, 0.42),
        0 0 38px rgba(120, 232, 255, 0.16);
    }

    .overlay.is-settlement .overlay-card p {
      color: rgba(255, 232, 214, 0.8);
    }

    .overlay.is-settlement .overlay-stats span,
    .overlay.is-settlement .settlement-card {
      border-color: rgba(255, 226, 170, 0.28);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.018)),
        rgba(4, 7, 18, 0.62);
      backdrop-filter: blur(12px) saturate(1.2);
    }

    .overlay.is-settlement .primary {
      border-color: rgba(255, 226, 170, 0.7);
      background:
        linear-gradient(180deg, rgba(255, 230, 166, 0.24), rgba(255, 160, 90, 0.08)),
        linear-gradient(135deg, rgba(82, 41, 72, 0.96), rgba(14, 10, 28, 0.96));
    }

    .settlement-visual,
    .overlay.is-settlement .settlement-visual {
      background:
        var(--settlement-image, none) center / cover no-repeat,
        linear-gradient(135deg, rgba(8, 12, 28, 0.96), rgba(3, 5, 14, 0.98));
    }

    .settlement-visual::after {
      background: linear-gradient(90deg, var(--ui-rose), var(--gold), var(--ui-cyan));
    }

    .camp-screen {
      --camp-ink: #050812;
      --camp-ink-2: #0a1024;
      --camp-ink-3: rgba(7, 11, 27, 0.86);
      --camp-cyan: var(--ui-cyan);
      --camp-gold: var(--gold);
      --camp-ivory: #fff1dc;
      --camp-muted: rgba(255, 232, 214, 0.7);
      --camp-line: rgba(255, 226, 170, 0.28);
      background:
        linear-gradient(115deg, rgba(2, 5, 14, 0.92) 0%, rgba(9, 14, 31, 0.72) 50%, rgba(3, 5, 13, 0.94) 100%);
    }

    .camp-screen::before {
      background:
        linear-gradient(90deg, rgba(3, 5, 14, 0.78), transparent 31%, transparent 67%, rgba(3, 5, 14, 0.72)),
        repeating-linear-gradient(135deg, rgba(120, 232, 255, 0.055) 0 1px, transparent 1px 34px),
        repeating-linear-gradient(45deg, rgba(255, 211, 110, 0.034) 0 1px, transparent 1px 46px);
    }

    .camp-clock span,
    .camp-profile-main,
    .camp-roster-button,
    .camp-action,
    .camp-mini-launch,
    .camp-minigame-card,
    .camp-log,
    .camp-bottom-dock,
    .camp-stats span {
      border: 1px solid rgba(255, 226, 170, 0.24);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.018)),
        rgba(5, 8, 20, 0.74);
      color: var(--camp-ivory);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        0 14px 28px rgba(0, 0, 0, 0.25);
    }

    .camp-clock strong,
    .camp-stats strong,
    .camp-profile-title h3 {
      color: #fff0c2;
    }

    .camp-roster-button.is-selected {
      border-color: var(--rarity-color, var(--gold));
      background:
        linear-gradient(120deg, color-mix(in srgb, var(--rarity-color, var(--gold)) 18%, rgba(5, 8, 20, 0.9)), rgba(4, 7, 18, 0.88));
    }

    .camp-close,
    .camp-dock-button.is-primary::before {
      border-color: rgba(255, 226, 170, 0.72);
      background:
        linear-gradient(135deg, #ffe18a, var(--gold) 54%, #c77c25);
      color: #231304;
    }

    .camp-dock-button {
      border-radius: 8px;
      background: rgba(255, 255, 255, 0.035);
    }

    .camp-dock-button::before,
    .camp-action::before,
    .camp-mini-launch::before,
    .camp-minigame button::before {
      border-radius: 8px;
      background:
        linear-gradient(135deg, rgba(120, 232, 255, 0.92), rgba(77, 111, 229, 0.9));
    }

    /* IMGEN AEGIS UI Kit pass: unified camp/facility language */
    .camp-screen {
      --aegis-blue: #67dfff;
      --aegis-blue-soft: rgba(103, 223, 255, 0.24);
      --aegis-gold: #ffd36e;
      --aegis-gold-soft: rgba(255, 211, 110, 0.28);
      --aegis-panel: rgba(4, 9, 24, 0.82);
      --aegis-panel-2: rgba(8, 16, 38, 0.88);
      --aegis-line: rgba(255, 224, 160, 0.34);
      --aegis-line-cyan: rgba(103, 223, 255, 0.44);
      background:
        radial-gradient(circle at 50% 20%, rgba(103, 223, 255, 0.16), transparent 28%),
        radial-gradient(circle at 75% 76%, rgba(255, 211, 110, 0.13), transparent 28%),
        linear-gradient(115deg, rgba(2, 5, 15, 0.96), rgba(7, 13, 32, 0.78) 48%, rgba(3, 5, 14, 0.96));
    }

    .camp-head h2 {
      color: #fff0c2;
      text-shadow:
        0 0 20px rgba(255, 211, 110, 0.24),
        0 0 34px rgba(103, 223, 255, 0.18);
    }

    .camp-clock span,
    .camp-profile-main,
    .camp-roster-button,
    .camp-action,
    .camp-mini-launch,
    .camp-minigame-card,
    .camp-log,
    .camp-bottom-dock,
    .camp-stats span,
    .camp-campaign {
      border-color: var(--aegis-line);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.085), rgba(255, 255, 255, 0.018)),
        linear-gradient(135deg, var(--aegis-panel-2), rgba(3, 6, 18, 0.82));
      box-shadow:
        inset 0 1px 0 rgba(255, 248, 224, 0.12),
        inset 0 0 24px rgba(103, 223, 255, 0.045),
        0 16px 34px rgba(0, 0, 0, 0.34);
    }

    .camp-clock span {
      clip-path: polygon(10px 0, 100% 0, calc(100% - 12px) 100%, 0 100%);
    }

    .camp-clock strong,
    .camp-stats strong,
    .camp-profile-title h3,
    .camp-campaign strong {
      color: #fff1c8;
      text-shadow: 0 0 16px rgba(255, 211, 110, 0.2);
    }

    .camp-action,
    .camp-mini-launch {
      min-height: 58px;
      border-color: rgba(103, 223, 255, 0.26);
      background:
        radial-gradient(circle at 0 0, rgba(103, 223, 255, 0.2), transparent 40%),
        linear-gradient(120deg, rgba(9, 26, 56, 0.94), rgba(3, 8, 24, 0.88));
    }

    .camp-action.is-recommended {
      border-color: rgba(255, 211, 110, 0.58);
      background:
        radial-gradient(circle at 0 0, rgba(255, 211, 110, 0.22), transparent 42%),
        linear-gradient(120deg, rgba(32, 25, 54, 0.94), rgba(4, 8, 24, 0.9));
      box-shadow:
        inset 0 1px 0 rgba(255, 248, 224, 0.16),
        0 16px 32px rgba(0, 0, 0, 0.34),
        0 0 22px rgba(255, 211, 110, 0.14);
    }

    .camp-action::before,
    .camp-mini-launch::before,
    .camp-minigame button::before,
    .camp-dock-button::before {
      border-color: rgba(195, 246, 255, 0.58);
      background:
        radial-gradient(circle at 32% 24%, rgba(255, 255, 255, 0.78), transparent 20%),
        linear-gradient(135deg, rgba(103, 223, 255, 0.96), rgba(67, 107, 230, 0.92));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.34),
        0 0 16px rgba(103, 223, 255, 0.28),
        0 8px 18px rgba(0, 0, 0, 0.28);
    }

    .camp-close,
    .camp-dock-button.is-primary::before {
      border-color: rgba(255, 232, 170, 0.82);
      background:
        radial-gradient(circle at 32% 24%, rgba(255, 255, 255, 0.72), transparent 20%),
        linear-gradient(135deg, #ffe08a, var(--aegis-gold) 54%, #c77c25);
      color: #241405;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.36),
        0 0 22px rgba(255, 211, 110, 0.32),
        0 10px 24px rgba(0, 0, 0, 0.3);
    }

    .camp-bottom-dock {
      grid-template-columns: repeat(6, minmax(104px, 1fr));
      gap: 8px;
      width: min(1080px, calc(100vw - 72px));
      min-height: 116px;
      padding: 10px 18px;
      align-items: stretch;
      clip-path: polygon(20px 0, 100% 0, calc(100% - 24px) 100%, 0 100%);
      background:
        radial-gradient(circle at 50% 0%, rgba(103, 223, 255, 0.15), transparent 54%),
        linear-gradient(120deg, rgba(8, 17, 40, 0.94), rgba(3, 7, 20, 0.9));
    }

    .camp-dock-button {
      isolation: isolate;
      overflow: hidden;
      display: grid;
      grid-template-rows: 44px auto auto;
      place-items: center;
      align-content: center;
      gap: 4px;
      min-height: 96px;
      padding: 8px 8px 7px;
      border: 1px solid rgba(103, 223, 255, 0.18);
      border-radius: 8px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.015)),
        rgba(5, 11, 27, 0.82);
      color: rgba(230, 246, 255, 0.86);
      text-shadow: 0 2px 12px rgba(0, 0, 0, 0.62);
    }

    .camp-dock-button::after {
      content: "";
      position: absolute;
      inset: 4px 4px 31px;
      z-index: -1;
      border-radius: 6px;
      opacity: 0.72;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent 32%, rgba(2, 5, 16, 0.7)),
        radial-gradient(circle at 50% 30%, var(--dock-scene-glow, rgba(103, 223, 255, 0.34)), transparent 38%),
        linear-gradient(135deg, var(--dock-scene-a, #112b5a), var(--dock-scene-b, #050817));
      box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
    }

    .camp-dock-button::before {
      z-index: 1;
      width: 40px;
      border-radius: 10px;
      font-size: 1.02rem;
    }

    .camp-dock-button span,
    .camp-dock-button em {
      z-index: 1;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }

    .camp-dock-button span {
      color: #fff0c2;
      font-size: 0.62rem;
      font-weight: 950;
      letter-spacing: 0.06em;
      text-transform: uppercase;
    }

    .camp-dock-button em {
      color: rgba(195, 246, 255, 0.68);
      font-size: 0.44rem;
      font-style: normal;
      font-weight: 900;
      letter-spacing: 0.05em;
      text-transform: uppercase;
    }

    .camp-dock-button[data-camp-dock="chat"] {
      --dock-scene-a: #163458;
      --dock-scene-b: #071225;
      --dock-scene-glow: rgba(103, 223, 255, 0.36);
    }

    .camp-dock-button[data-camp-dock="arcana"] {
      --dock-scene-a: #143b62;
      --dock-scene-b: #07122b;
      --dock-scene-glow: rgba(105, 226, 255, 0.48);
    }

    .camp-dock-button[data-camp-dock="gear"] {
      --dock-scene-a: #55341b;
      --dock-scene-b: #0d101f;
      --dock-scene-glow: rgba(255, 174, 76, 0.5);
    }

    .camp-dock-button[data-camp-dock="grace"] {
      --dock-scene-a: #42305a;
      --dock-scene-b: #101223;
      --dock-scene-glow: rgba(216, 154, 255, 0.42);
    }

    .camp-dock-button[data-camp-dock="date"] {
      --dock-scene-a: #5b2742;
      --dock-scene-b: #101222;
      --dock-scene-glow: rgba(255, 113, 158, 0.46);
    }

    .camp-dock-button[data-camp-dock="deploy"] {
      --dock-scene-a: #624111;
      --dock-scene-b: #121018;
      --dock-scene-glow: rgba(255, 211, 110, 0.58);
      border-color: rgba(255, 211, 110, 0.52);
    }

    .camp-dock-button:hover:not(:disabled),
    .camp-dock-button:focus-visible {
      border-color: rgba(255, 232, 170, 0.52);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.085), rgba(255, 255, 255, 0.02)),
        rgba(7, 15, 34, 0.9);
      transform: translateY(-5px);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 18px 34px rgba(0, 0, 0, 0.34),
        0 0 22px var(--dock-scene-glow);
    }

    .camp-dock-button:hover:not(:disabled)::after,
    .camp-dock-button:focus-visible::after {
      opacity: 0.96;
    }

    .camp-dock-button.is-primary {
      color: #fff3cb;
      background:
        linear-gradient(180deg, rgba(255, 232, 170, 0.13), rgba(255, 169, 76, 0.025)),
        rgba(15, 12, 20, 0.9);
      box-shadow:
        inset 0 1px 0 rgba(255, 248, 224, 0.14),
        0 0 24px rgba(255, 211, 110, 0.2),
        0 16px 34px rgba(0, 0, 0, 0.34);
    }

    .camp-shop-modal {
      position: absolute;
      inset: 0;
      z-index: 8;
      display: grid;
      place-items: center;
      padding: 24px;
      background:
        radial-gradient(circle at 50% 42%, rgba(255, 211, 110, 0.16), transparent 30%),
        rgba(3, 6, 16, 0.68);
      backdrop-filter: blur(7px) saturate(1.14);
    }

    .camp-shop-modal[hidden] {
      display: none;
    }

    .camp-shop-card {
      width: min(760px, calc(100vw - 42px));
      max-height: min(680px, calc(100vh - 42px));
      display: grid;
      grid-template-rows: auto auto minmax(0, 1fr) auto;
      gap: 12px;
      padding: 18px;
      border: 1px solid rgba(255, 226, 170, 0.36);
      border-radius: 10px;
      background:
        radial-gradient(circle at 70% 0%, rgba(255, 211, 110, 0.2), transparent 42%),
        linear-gradient(135deg, rgba(34, 27, 50, 0.97), rgba(7, 13, 31, 0.95));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 28px 72px rgba(0, 0, 0, 0.46);
    }

    .camp-shop-head {
      display: flex;
      align-items: start;
      justify-content: space-between;
      gap: 12px;
    }

    .camp-shop-head span,
    .camp-shop-hero span {
      display: block;
      color: rgba(195, 246, 255, 0.68);
      font-size: 0.52rem;
      font-weight: 950;
      letter-spacing: 0.12em;
      text-transform: uppercase;
    }

    .camp-shop-head h3 {
      margin: 4px 0 0;
      color: var(--camp-ivory);
      font-size: clamp(1.15rem, 2.8vw, 2rem);
      line-height: 0.96;
      letter-spacing: 0.04em;
      text-transform: uppercase;
    }

    .camp-shop-close {
      min-height: 34px;
      padding: 6px 10px;
      border-radius: 7px;
      font-size: 0.58rem;
    }

    .camp-shop-hero {
      display: grid;
      grid-template-columns: 54px minmax(0, 1fr) auto;
      gap: 10px;
      align-items: center;
      padding: 9px;
      border: 1px solid rgba(204, 237, 255, 0.18);
      border-radius: 9px;
      background:
        linear-gradient(90deg, rgba(118, 232, 255, 0.08), transparent),
        rgba(255, 255, 255, 0.045);
    }

    .camp-shop-portrait {
      width: 54px;
      aspect-ratio: 1;
      border-radius: 8px;
      background: var(--portrait) center 26% / cover;
      box-shadow:
        inset 0 0 0 1px rgba(255, 245, 220, 0.2),
        0 0 18px var(--rarity-glow, rgba(255, 226, 138, 0.22));
    }

    .camp-shop-hero strong {
      display: block;
      margin-top: 3px;
      color: #fff0c2;
      font-size: 0.86rem;
      letter-spacing: 0.05em;
      text-transform: uppercase;
    }

    .camp-shop-hero em {
      color: rgba(255, 240, 194, 0.76);
      font-size: 0.64rem;
      font-style: normal;
      font-weight: 850;
      white-space: nowrap;
    }

    .camp-shop-grid {
      min-height: 0;
      overflow: auto;
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 10px;
      padding-right: 3px;
    }

    .camp-shop-item {
      display: grid;
      grid-template-columns: 42px minmax(0, 1fr);
      grid-template-rows: auto auto auto;
      gap: 5px 9px;
      min-height: 118px;
      padding: 10px;
      border: 1px solid rgba(255, 226, 170, 0.22);
      border-radius: 9px;
      background:
        radial-gradient(circle at 0% 0%, rgba(255, 211, 110, 0.16), transparent 40%),
        linear-gradient(135deg, rgba(14, 28, 54, 0.88), rgba(7, 12, 29, 0.88));
      color: var(--camp-ivory);
      text-align: left;
    }

    .camp-shop-item::before {
      grid-row: 1 / span 3;
      width: 42px;
      min-height: 42px;
      border-radius: 10px;
      font-size: 1rem;
    }

    .camp-shop-item strong {
      color: #fff0c2;
      font-size: 0.76rem;
      letter-spacing: 0.06em;
      text-transform: uppercase;
    }

    .camp-shop-item span {
      color: rgba(222, 240, 255, 0.72);
      font-size: 0.58rem;
      line-height: 1.34;
      font-weight: 850;
    }

    .camp-shop-item em {
      color: rgba(255, 240, 194, 0.86);
      font-size: 0.54rem;
      font-style: normal;
      font-weight: 950;
      letter-spacing: 0.05em;
      text-transform: uppercase;
    }

    .camp-shop-item:hover:not(:disabled),
    .camp-shop-item:focus-visible {
      border-color: rgba(255, 232, 170, 0.58);
      transform: translateY(-2px);
      box-shadow: 0 14px 28px rgba(0, 0, 0, 0.3);
    }

    .camp-shop-item:disabled {
      cursor: not-allowed;
      opacity: 0.48;
      filter: grayscale(0.35);
    }

    .camp-shop-foot {
      color: rgba(222, 240, 255, 0.68);
      font-size: 0.58rem;
      font-weight: 850;
      line-height: 1.35;
    }

    .camp-minigame-card {
      border-color: var(--aegis-line);
      background:
        radial-gradient(circle at 50% 0%, rgba(103, 223, 255, 0.22), transparent 46%),
        linear-gradient(135deg, rgba(10, 26, 56, 0.97), rgba(3, 7, 22, 0.95));
    }

    /* Final UI polish pass: clearer hierarchy, unified glass, less visual clutter */
    .top-hud {
      top: 12px;
    }

    .top-hud .stat,
    .top-hud .wave-panel {
      position: relative;
      overflow: hidden;
    }

    .top-hud .stat::after,
    .top-hud .wave-panel::after,
    .camp-profile-main::after,
    .camp-campaign::after,
    .camp-shop-card::after,
    .camp-minigame-card::after {
      content: "";
      position: absolute;
      inset: 0;
      pointer-events: none;
      border-radius: inherit;
      background:
        linear-gradient(135deg, rgba(255, 255, 255, 0.12), transparent 24%, transparent 72%, rgba(103, 223, 255, 0.06)),
        linear-gradient(180deg, rgba(255, 255, 255, 0.045), transparent 34%);
      opacity: 0.72;
    }

    .top-hud .wave-panel {
      margin-top: 0;
      transform: translateY(0);
    }

    .top-hud .stat-icon,
    .status-icon {
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.24),
        0 0 16px rgba(103, 223, 255, 0.18),
        0 8px 18px rgba(0, 0, 0, 0.28);
    }

    .build-panel {
      filter: drop-shadow(0 18px 34px rgba(0, 0, 0, 0.34));
    }

    .hand-shell {
      position: relative;
      border-radius: 10px;
    }

    .hand-shell::marker {
      content: "";
    }

    .hand-shell .type-grid {
      border: 1px solid rgba(255, 226, 170, 0.12);
      border-radius: 10px;
      background:
        radial-gradient(circle at 18% 0%, rgba(103, 223, 255, 0.13), transparent 36%),
        linear-gradient(180deg, rgba(5, 9, 24, 0.44), rgba(2, 4, 13, 0.18));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.08),
        inset 0 -20px 28px rgba(0, 0, 0, 0.2);
    }

    .tower-card {
      backdrop-filter: blur(2px);
    }

    .card-ability {
      border-color: rgba(255, 226, 170, 0.26);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.11), rgba(255, 255, 255, 0.025)),
        rgba(4, 8, 21, 0.78);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.13),
        0 5px 10px rgba(0, 0, 0, 0.3),
        0 0 10px color-mix(in srgb, var(--ability-color, #ffd06a) 22%, transparent);
    }

    .camp-profile {
      isolation: isolate;
    }

    .camp-portrait {
      filter:
        drop-shadow(0 26px 42px rgba(0, 0, 0, 0.48))
        saturate(1.08)
        contrast(1.04);
    }

    .camp-profile-main {
      border-color: rgba(255, 226, 170, 0.34);
      background:
        radial-gradient(circle at 0 0, rgba(255, 211, 110, 0.12), transparent 36%),
        linear-gradient(120deg, rgba(10, 22, 48, 0.88), rgba(3, 7, 19, 0.82));
      backdrop-filter: blur(12px) saturate(1.16);
    }

    .camp-actions {
      padding-right: 2px;
      mask-image: linear-gradient(180deg, transparent 0, #000 14px, #000 calc(100% - 18px), transparent 100%);
    }

    .camp-action {
      min-height: 60px;
    }

    .camp-action strong span {
      min-width: 0;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }

    .camp-relations-panel {
      min-height: 0;
      display: grid;
      gap: 7px;
      padding: 8px 0 0;
      border-top: 1px solid rgba(255, 226, 170, 0.14);
    }

    .camp-relations {
      gap: 5px;
    }

    .camp-relation-row {
      font-size: 0.5rem;
    }

    .camp-relation-track {
      height: 6px;
    }

    .camp-log {
      min-height: 52px;
      max-height: 58px;
      overflow: hidden;
      border-color: rgba(103, 223, 255, 0.22);
      color: rgba(255, 236, 214, 0.82);
    }

    .camp-bottom-dock {
      bottom: 0;
      filter: drop-shadow(0 -8px 28px rgba(0, 0, 0, 0.3));
    }

    .camp-dock-button::after {
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.12), transparent 30%, rgba(2, 5, 16, 0.74)),
        repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.045) 0 1px, transparent 1px 16px),
        radial-gradient(circle at 50% 30%, var(--dock-scene-glow, rgba(103, 223, 255, 0.34)), transparent 38%),
        linear-gradient(135deg, var(--dock-scene-a, #112b5a), var(--dock-scene-b, #050817));
    }

    .camp-dock-button.is-primary span {
      color: #ffe6a8;
    }

    .camp-shop-item {
      border-radius: 8px;
    }

    .camp-shop-foot,
    .camp-mini-reward {
      border-color: rgba(255, 226, 170, 0.2);
      background: rgba(3, 7, 19, 0.52);
    }

    button:active:not(:disabled):not(.tower-card):not(.camp-dock-button) {
      transform: translateY(1px) scale(0.99);
    }

    .camp-dock-button:active:not(:disabled) {
      transform: translateY(-2px) scale(0.99);
    }

    /* Camp UX V3: home-screen hierarchy instead of dashboard density */
    .camp-screen {
      background:
        radial-gradient(circle at 50% 34%, rgba(105, 226, 255, 0.18), transparent 28%),
        radial-gradient(circle at 78% 82%, rgba(255, 211, 110, 0.11), transparent 26%),
        linear-gradient(125deg, rgba(3, 6, 16, 0.98), rgba(8, 18, 42, 0.84) 50%, rgba(2, 4, 12, 0.98));
    }

    .camp-screen::before {
      background:
        linear-gradient(90deg, rgba(2, 5, 14, 0.86), rgba(2, 5, 14, 0.18) 26%, rgba(2, 5, 14, 0.22) 72%, rgba(2, 5, 14, 0.78)),
        radial-gradient(circle at 50% 74%, rgba(255, 226, 170, 0.06), transparent 42%);
      mix-blend-mode: normal;
      opacity: 1;
    }

    .camp-screen::after {
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.045), transparent 18%, transparent 72%, rgba(2, 4, 12, 0.78)),
        radial-gradient(circle at 50% 92%, rgba(2, 6, 18, 0.9), transparent 46%);
    }

    .camp-shell {
      grid-template-rows: 90px minmax(0, 1fr) 118px;
      padding: 18px 28px 14px;
    }

    .camp-head {
      grid-template-columns: minmax(230px, 320px) minmax(300px, 430px) auto;
      gap: 16px;
      position: relative;
      z-index: 7;
    }

    .camp-head h2 {
      font-size: clamp(1.5rem, 3vw, 2.6rem);
    }

    .camp-head p {
      max-width: 28ch;
      color: rgba(230, 246, 255, 0.62);
      letter-spacing: 0.06em;
    }

    .camp-clock {
      justify-self: center;
      grid-template-columns: repeat(3, minmax(86px, 1fr));
      gap: 8px;
      width: min(430px, 100%);
    }

    .camp-clock span,
    .camp-close,
    .camp-roster::before,
    .camp-roster-button,
    .camp-profile-main,
    .camp-campaign,
    .camp-action,
    .camp-bottom-dock {
      clip-path: none;
    }

    .camp-clock span {
      min-height: 48px;
      padding: 8px 12px;
      border-color: rgba(103, 223, 255, 0.24);
      border-radius: 10px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
        rgba(7, 14, 32, 0.78);
      color: rgba(195, 246, 255, 0.62);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        0 10px 24px rgba(0, 0, 0, 0.22);
    }

    .camp-clock strong {
      color: #fff2c8;
      font-size: 1rem;
    }

    .camp-close {
      min-height: 50px;
      width: min(384px, 32vw);
      min-width: 260px;
      border-radius: 12px;
      position: relative;
      z-index: 6;
      pointer-events: auto;
    }

    .camp-grid {
      grid-template-columns: 178px minmax(0, 1fr) 292px;
      gap: 16px;
      position: relative;
      z-index: 3;
    }

    .camp-roster {
      gap: 8px;
      padding-top: 26px;
    }

    .camp-roster::before {
      width: auto;
      margin-bottom: 4px;
      padding: 8px 12px;
      border: 1px solid rgba(103, 223, 255, 0.18);
      border-radius: 10px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
        rgba(6, 14, 32, 0.76);
      color: rgba(230, 246, 255, 0.7);
      letter-spacing: 0.14em;
      box-shadow: none;
    }

    .camp-roster-button {
      grid-template-columns: 52px minmax(0, 1fr);
      min-height: 72px;
      padding: 8px 10px;
      border-radius: 12px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.015)),
        rgba(5, 12, 30, 0.74);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.08),
        0 10px 20px rgba(0, 0, 0, 0.18);
    }

    .camp-roster-button.is-selected {
      transform: translateX(6px);
      background:
        radial-gradient(circle at 0 0, var(--rarity-glow, rgba(255, 226, 138, 0.24)), transparent 42%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.02)),
        rgba(8, 18, 40, 0.86);
    }

    .camp-roster-portrait {
      width: 52px;
      border-radius: 12px;
      background-position: center 18%;
    }

    .camp-profile::before {
      bottom: 34px;
      width: min(620px, 88%);
      opacity: 0.74;
    }

    .camp-portrait {
      bottom: 86px;
      width: min(500px, 86%);
      height: min(620px, calc(100% - 70px));
      min-height: 370px;
      filter:
        drop-shadow(0 30px 48px rgba(0, 0, 0, 0.5))
        saturate(1.1)
        contrast(1.04);
    }

    .camp-profile-main {
      width: min(620px, 92%);
      padding: 13px 18px 14px;
      border-radius: 14px;
      background:
        radial-gradient(circle at 0 0, rgba(255, 211, 110, 0.1), transparent 36%),
        linear-gradient(120deg, rgba(6, 14, 34, 0.84), rgba(3, 7, 18, 0.76));
      backdrop-filter: blur(13px) saturate(1.14);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 18px 42px rgba(0, 0, 0, 0.3);
    }

    .camp-profile-title h3 {
      font-size: clamp(1.9rem, 4vw, 3.5rem);
    }

    .camp-promo {
      padding: 9px 12px;
      border-radius: 10px;
      background:
        radial-gradient(circle at 0% 0%, var(--rarity-glow, rgba(255, 226, 138, 0.18)), transparent 44%),
        rgba(255, 255, 255, 0.045);
    }

    .camp-stats {
      grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    .camp-stats span:nth-child(n+5) {
      display: none;
    }

    .camp-stats span {
      border-radius: 9px;
      background: rgba(255, 255, 255, 0.055);
    }

    .camp-side {
      grid-template-rows: auto auto auto minmax(0, 1fr) auto;
      gap: 10px;
      padding-top: 26px;
    }

    .camp-side-head {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 10px;
    }

    .camp-side-head span {
      padding: 5px 8px;
      border: 1px solid rgba(103, 223, 255, 0.2);
      border-radius: 999px;
      color: rgba(195, 246, 255, 0.72);
      background: rgba(103, 223, 255, 0.07);
      font-size: 0.52rem;
      font-weight: 950;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }

    .camp-campaign {
      padding: 14px;
      border-radius: 14px;
      background:
        radial-gradient(circle at 0% 0%, rgba(255, 211, 110, 0.18), transparent 44%),
        linear-gradient(135deg, rgba(35, 27, 50, 0.88), rgba(6, 14, 32, 0.82));
    }

    .camp-campaign strong {
      font-size: 1.02rem;
    }

    .camp-actions {
      min-height: auto;
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 8px;
      padding-right: 0;
      overflow: visible;
      mask-image: none;
    }

    .camp-action.is-recommended {
      grid-column: 1 / -1;
      grid-template-columns: 50px minmax(0, 1fr);
      gap: 7px 12px;
      min-height: 98px;
      padding: 14px;
      border-radius: 14px;
      border-color: rgba(255, 211, 110, 0.5);
      background:
        radial-gradient(circle at 0 0, rgba(255, 211, 110, 0.22), transparent 44%),
        radial-gradient(circle at 100% 100%, rgba(103, 223, 255, 0.12), transparent 46%),
        linear-gradient(135deg, rgba(32, 26, 50, 0.9), rgba(5, 12, 30, 0.86));
    }

    .camp-action.is-recommended::before {
      width: 44px;
      border-radius: 13px;
    }

    .camp-action.is-recommended > span:not(.camp-action-meta) {
      display: block;
      line-height: 1.34;
      text-transform: none;
    }

    .camp-action.is-recommended .camp-action-meta {
      align-self: end;
      padding-top: 3px;
      border-top: 1px solid rgba(255, 226, 170, 0.13);
    }

    .camp-action:not(.is-recommended) {
      grid-template-columns: 32px minmax(0, 1fr);
      min-height: 64px;
      padding: 9px;
      border-radius: 12px;
    }

    .camp-action:not(.is-recommended)::before {
      width: 30px;
      border-radius: 10px;
      font-size: 0.86rem;
    }

    .camp-action:not(.is-recommended) strong {
      font-size: 0.58rem;
      gap: 4px;
    }

    .camp-action:not(.is-recommended) .camp-action-badge {
      display: none;
    }

    .camp-action:not(.is-recommended) .camp-action-meta {
      display: grid;
      gap: 2px;
      justify-content: start;
      font-size: 0.44rem;
      line-height: 1.18;
    }

    .camp-relations-panel {
      min-height: 0;
      padding: 12px;
      border: 1px solid rgba(103, 223, 255, 0.16);
      border-radius: 14px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.018)),
        rgba(5, 12, 30, 0.62);
    }

    .camp-relations-panel h3 {
      font-size: 0.66rem;
      color: rgba(230, 246, 255, 0.68);
    }

    .camp-relations {
      max-height: 126px;
      overflow: hidden;
    }

    .camp-log {
      min-height: 64px;
      max-height: 70px;
      border-radius: 14px;
      background:
        linear-gradient(90deg, rgba(255, 211, 110, 0.08), transparent),
        rgba(5, 12, 30, 0.64);
    }

    .camp-bottom-dock {
      grid-template-columns: repeat(6, minmax(94px, 1fr));
      width: min(1040px, calc(100vw - 56px));
      min-height: 106px;
      padding: 8px;
      border-radius: 18px;
      background:
        radial-gradient(circle at 50% 0%, rgba(103, 223, 255, 0.14), transparent 54%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.018)),
        rgba(3, 8, 22, 0.82);
      backdrop-filter: blur(14px) saturate(1.18);
    }

    .camp-dock-button {
      grid-template-rows: 42px auto auto;
      min-height: 90px;
      padding: 8px 7px 7px;
      border-radius: 14px;
      border-color: rgba(103, 223, 255, 0.12);
    }

    .camp-dock-button::before {
      width: 40px;
      border-radius: 12px;
    }

    .camp-dock-button::after {
      inset: 4px 4px 29px;
      border-radius: 11px;
    }

    .camp-dock-button:hover:not(:disabled),
    .camp-dock-button:focus-visible {
      transform: translateY(-7px);
    }

    .camp-shop-card {
      border-radius: 18px;
    }

    .camp-shop-modal {
      background:
        radial-gradient(circle at 50% 42%, rgba(255, 211, 110, 0.14), transparent 30%),
        linear-gradient(180deg, rgba(2, 5, 14, 0.58), rgba(2, 5, 14, 0.82));
    }

    .camp-shop-card {
      width: min(880px, calc(100vw - 42px));
      gap: 14px;
      padding: 18px;
      border-color: rgba(255, 226, 170, 0.3);
      background:
        radial-gradient(circle at 72% 0%, var(--shop-glow, rgba(255, 211, 110, 0.18)), transparent 42%),
        linear-gradient(135deg, rgba(25, 25, 42, 0.98), rgba(5, 11, 28, 0.96));
    }

    .camp-shop-modal[data-shop="arcana"] .camp-shop-card {
      --shop-glow: rgba(103, 223, 255, 0.22);
      --shop-a: #173e66;
      --shop-b: #071228;
    }

    .camp-shop-modal[data-shop="gear"] .camp-shop-card {
      --shop-glow: rgba(255, 174, 76, 0.23);
      --shop-a: #583319;
      --shop-b: #0b1020;
    }

    .camp-shop-modal[data-shop="grace"] .camp-shop-card {
      --shop-glow: rgba(218, 154, 255, 0.2);
      --shop-a: #452d58;
      --shop-b: #101225;
    }

    .camp-shop-modal[data-shop="date"] .camp-shop-card {
      --shop-glow: rgba(255, 113, 158, 0.22);
      --shop-a: #592641;
      --shop-b: #101225;
    }

    .camp-shop-modal[data-shop="chat"] .camp-shop-card {
      --shop-glow: rgba(103, 223, 255, 0.2);
      --shop-a: #17365a;
      --shop-b: #071225;
    }

    .camp-shop-head h3 {
      font-size: clamp(1.7rem, 4vw, 3rem);
      letter-spacing: 0.02em;
    }

    .camp-shop-hero {
      position: relative;
      overflow: hidden;
      grid-template-columns: 72px minmax(0, 1fr) auto;
      min-height: 92px;
      padding: 12px 14px;
      border-radius: 14px;
      background:
        linear-gradient(90deg, rgba(5, 9, 22, 0.12), rgba(5, 9, 22, 0.62)),
        radial-gradient(circle at 18% 36%, rgba(255, 255, 255, 0.12), transparent 24%),
        linear-gradient(135deg, var(--shop-a, #17365a), var(--shop-b, #071225));
    }

    .camp-shop-hero::after {
      content: "";
      position: absolute;
      inset: 0;
      pointer-events: none;
      background:
        repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.045) 0 1px, transparent 1px 18px),
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 34%, rgba(0, 0, 0, 0.22));
    }

    .camp-shop-portrait,
    .camp-shop-hero > div,
    .camp-shop-hero em {
      position: relative;
      z-index: 1;
    }

    .camp-shop-portrait {
      width: 72px;
      border-radius: 14px;
    }

    .camp-shop-grid {
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 10px;
      padding-right: 0;
    }

    .camp-shop-item {
      border-radius: 13px;
    }

    .camp-shop-item {
      grid-template-columns: 52px minmax(0, 1fr);
      min-height: 154px;
      align-content: start;
      padding: 13px;
      border-color: rgba(255, 226, 170, 0.2);
      background:
        radial-gradient(circle at 0 0, rgba(255, 211, 110, 0.14), transparent 42%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.018)),
        rgba(5, 11, 28, 0.76);
    }

    .camp-shop-item::before {
      content: attr(data-icon);
      display: grid;
      place-items: center;
      grid-row: 1 / span 3;
      width: 46px;
      aspect-ratio: 1;
      border-radius: 14px;
      font-size: 1.08rem;
      color: #ffffff;
      background:
        radial-gradient(circle at 32% 24%, rgba(255, 255, 255, 0.78), transparent 22%),
        linear-gradient(135deg, rgba(103, 223, 255, 0.94), rgba(67, 107, 230, 0.92));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.3),
        0 0 18px rgba(103, 223, 255, 0.24);
    }

    .camp-shop-item strong {
      font-size: 0.92rem;
      line-height: 0.98;
      color: #fff2c8;
    }

    .camp-shop-item span {
      line-height: 1.38;
    }

    .camp-shop-item em {
      align-self: end;
      margin-top: 4px;
      padding-top: 7px;
      border-top: 1px solid rgba(255, 226, 170, 0.12);
    }

    .camp-shop-foot {
      min-height: 28px;
      padding: 8px 10px;
      border-radius: 10px;
    }

    .top-hud .command-row {
      grid-template-columns: 1fr 1.1fr 1fr;
    }

    .top-hud .wave-panel button {
      display: grid;
      grid-template-columns: 14px minmax(0, auto);
      place-content: center;
      align-items: center;
      gap: 7px;
      padding: 0 8px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .top-hud .wave-panel button::before {
      position: static;
      justify-self: center;
      left: auto;
      top: auto;
      transform: none;
    }

    .top-hud .wave-panel .camp-command::before {
      transform: rotate(45deg);
    }

    .top-hud .wave-panel .secondary::before {
      box-shadow:
        5px 0 0 rgba(207, 255, 255, 0.7),
        2px 5px 0 rgba(207, 255, 255, 0.48),
        0 0 9px rgba(120, 240, 255, 0.38);
    }

    @media (max-width: 980px) {
      .camp-shell {
        grid-template-rows: 72px minmax(0, 1fr) 96px;
        padding: 10px 12px;
      }

      .camp-head {
        grid-template-columns: minmax(150px, 1fr) minmax(210px, 1.25fr) auto;
        gap: 8px;
      }

      .camp-head p {
        display: none;
      }

      .camp-clock {
        gap: 5px;
      }

      .camp-clock span {
        min-height: 40px;
        grid-template-columns: 1fr;
        gap: 2px;
        padding: 6px 8px;
      }

      .camp-day-track {
        display: none;
      }

      .camp-close {
        min-width: 110px;
        min-height: 42px;
        padding-inline: 12px;
      }

      .camp-grid {
        grid-template-columns: 112px minmax(0, 1fr) 220px;
        gap: 10px;
      }

      .camp-roster {
        padding-top: 14px;
      }

      .camp-roster-button {
        grid-template-columns: 42px minmax(0, 1fr);
        min-height: 58px;
        padding: 7px;
      }

      .camp-roster-portrait {
        width: 42px;
      }

      .camp-roster-name span {
        display: none;
      }

      .camp-portrait {
        bottom: 72px;
        width: min(380px, 84%);
        min-height: 270px;
      }

      .camp-profile-main {
        width: min(480px, 94%);
        padding: 10px 12px;
      }

      .camp-promo {
        display: none;
      }

      .camp-side {
        padding-top: 14px;
      }

      .camp-action.is-recommended {
        min-height: 96px;
        padding: 11px;
      }

      .camp-relations {
        max-height: 82px;
      }

      .camp-log {
        min-height: 48px;
        max-height: 52px;
      }

      .camp-bottom-dock {
        width: calc(100vw - 24px);
        min-height: 86px;
        grid-template-columns: repeat(6, minmax(66px, 1fr));
        gap: 5px;
      }

      .camp-dock-button {
        min-height: 72px;
        grid-template-rows: 32px auto;
        gap: 2px;
      }

      .camp-dock-button::before {
        width: 32px;
      }

      .camp-dock-button em {
        display: none;
      }
    }

    @media (max-height: 520px) {
      .camp-side {
        grid-template-rows: auto auto;
      }

      .camp-actions,
      .camp-relations-panel,
      .camp-log {
        display: none;
      }

      .camp-campaign {
        padding: 12px;
      }

      .camp-campaign strong {
        font-size: 0.86rem;
      }

      .camp-campaign em {
        font-size: 0.46rem;
      }
    }

    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud {
      top: 8px;
      grid-template-columns: minmax(222px, 276px) repeat(4, minmax(74px, 90px)) minmax(318px, 372px);
      gap: 5px;
    }

    html[data-game-mode="countdown"] .build-panel,
    html[data-game-mode="playing"] .build-panel {
      left: 12px;
      bottom: 10px;
      width: min(500px, calc(100vw - 384px));
      min-width: 306px;
    }

    html[data-game-mode="countdown"] .type-grid,
    html[data-game-mode="playing"] .type-grid {
      grid-auto-columns: 76px;
      gap: 2px;
      padding: 9px 8px 11px;
    }

    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card {
      grid-template-rows: 1fr 25px;
    }

    html[data-game-mode="countdown"] .portrait,
    html[data-game-mode="playing"] .portrait {
      inset: 3px 3px 25px;
    }

    html[data-game-mode="countdown"] .cost-row,
    html[data-game-mode="playing"] .cost-row {
      min-height: 25px;
      font-size: 0.62rem;
    }

    html[data-game-mode="countdown"] .card-cooldown-fill,
    html[data-game-mode="playing"] .card-cooldown-fill {
      bottom: 25px;
    }

    html[data-game-mode="countdown"] .tower-card .portrait,
    html[data-game-mode="playing"] .tower-card .portrait {
      z-index: 3;
      opacity: 1;
      background-size: cover;
      background-position: center 18%;
      filter: saturate(1.18) brightness(1.08) contrast(1.04);
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.1),
        inset 0 -16px 18px rgba(2, 3, 11, 0.34);
    }

    html[data-game-mode="countdown"] .tower-card .card-hover-video,
    html[data-game-mode="countdown"] .tower-card .card-hover-motion,
    html[data-game-mode="playing"] .tower-card .card-hover-motion,
    html[data-game-mode="playing"] .tower-card .card-hover-video {
      z-index: 3;
      object-position: center 18%;
    }

    html[data-game-mode="countdown"] .tower-card.is-deployed .portrait,
    html[data-game-mode="playing"] .tower-card.is-deployed .portrait {
      opacity: 1;
      filter: saturate(1.04) brightness(1.02) contrast(1.02);
    }

    html[data-game-mode="countdown"] .tower-card:not(.selected),
    html[data-game-mode="playing"] .tower-card:not(.selected) {
      filter: none;
    }

    html[data-game-mode="countdown"] .tower-card::after,
    html[data-game-mode="playing"] .tower-card::after {
      z-index: 2;
      opacity: 0.18;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 20%, rgba(0, 0, 0, 0.12)),
        linear-gradient(0deg, rgba(3, 5, 15, 0.3) 0 12%, transparent 30%);
    }

    html[data-game-mode="countdown"] .tower-card.is-deployed::after,
    html[data-game-mode="playing"] .tower-card.is-deployed::after {
      opacity: 0.14;
    }

    html[data-game-mode="countdown"] .card-cooldown-fill,
    html[data-game-mode="playing"] .card-cooldown-fill {
      z-index: 2;
      opacity: 0.32;
      mix-blend-mode: screen;
    }

    html[data-game-mode="countdown"] .card-rarity-badge,
    html[data-game-mode="playing"] .card-rarity-badge,
    html[data-game-mode="countdown"] .card-ability-strip,
    html[data-game-mode="playing"] .card-ability-strip,
    html[data-game-mode="countdown"] .cost-row,
    html[data-game-mode="playing"] .cost-row {
      z-index: 4;
    }

    /* UI/UX V4 cohesion pass: quieter frame, stronger focus */
    #scene::after {
      content: "";
      position: fixed;
      inset: 0;
      z-index: 1;
      pointer-events: none;
      background:
        radial-gradient(circle at 52% 50%, transparent 0 44%, rgba(3, 6, 18, 0.14) 72%, rgba(2, 4, 12, 0.32) 100%),
        linear-gradient(180deg, rgba(3, 6, 18, 0.2), transparent 22%, transparent 66%, rgba(2, 4, 12, 0.26));
      mix-blend-mode: multiply;
    }

    .top-hud {
      width: min(1120px, calc(100vw - 24px));
      grid-template-columns: minmax(218px, 272px) repeat(4, minmax(70px, 86px)) minmax(326px, 368px);
      gap: 7px;
    }

    .top-hud .stat,
    .top-hud .wave-panel,
    .build-panel,
    .card-tooltip,
    .camp-profile-main,
    .camp-campaign,
    .camp-action,
    .camp-relations-panel,
    .camp-log,
    .camp-bottom-dock,
    .camp-shop-card {
      border-width: 1px;
      border-color: rgba(255, 226, 170, 0.22);
      border-radius: 12px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.018)),
        rgba(5, 9, 24, 0.76);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        0 12px 30px rgba(0, 0, 0, 0.28);
      backdrop-filter: blur(10px) saturate(1.12);
    }

    .top-hud .stat {
      min-height: 56px;
      padding: 8px 9px;
    }

    .top-hud .stat span,
    .top-hud .combat-chip span {
      color: rgba(224, 242, 255, 0.62);
      letter-spacing: 0.08em;
    }

    .top-hud .stat strong,
    .top-hud .combat-chip strong {
      color: #fff0bf;
      text-shadow: 0 0 14px rgba(255, 211, 110, 0.16);
    }

    .top-hud .stat-icon,
    .top-hud .hud-icon,
    .status-icon {
      filter: saturate(1.08) brightness(1.04);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.22),
        0 0 12px rgba(103, 223, 255, 0.18);
    }

    .top-hud .wave-panel {
      padding: 8px 10px;
      gap: 7px;
    }

    .top-hud .combat-chip {
      min-height: 34px;
      border-color: rgba(255, 226, 170, 0.18);
      background: rgba(2, 5, 14, 0.36);
    }

    .top-hud .combat-alert {
      min-height: 0;
      padding: 0;
      border: 0;
      opacity: 0;
      pointer-events: none;
    }

    .top-hud .wave-panel button {
      min-height: 36px;
      border-color: rgba(195, 246, 255, 0.2);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.018)),
        rgba(8, 19, 40, 0.78);
      color: rgba(238, 249, 255, 0.92);
    }

    .top-hud .wave-panel .primary {
      border-color: rgba(255, 211, 110, 0.38);
      background:
        radial-gradient(circle at 0 0, rgba(255, 211, 110, 0.16), transparent 42%),
        linear-gradient(180deg, rgba(95, 50, 74, 0.86), rgba(38, 19, 38, 0.84));
      color: #fff0bf;
    }

    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud {
      align-items: start;
    }

    html[data-game-mode="countdown"] .top-hud .wave-panel,
    html[data-game-mode="playing"] .top-hud .wave-panel,
    html[data-game-mode="paused"] .top-hud .wave-panel {
      align-self: start;
      padding: 7px 8px 8px;
      gap: 6px;
    }

    html[data-game-mode="countdown"] .top-hud .wave-panel .primary,
    html[data-game-mode="playing"] .top-hud .wave-panel .primary,
    html[data-game-mode="paused"] .top-hud .wave-panel .primary {
      display: none;
    }

    html[data-game-mode="countdown"] .top-hud .command-row,
    html[data-game-mode="playing"] .top-hud .command-row,
    html[data-game-mode="paused"] .top-hud .command-row {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 6px;
    }

    html[data-game-mode="countdown"] .top-hud .combat-alert,
    html[data-game-mode="playing"] .top-hud .combat-alert,
    html[data-game-mode="paused"] .top-hud .combat-alert {
      display: none;
      min-height: 0;
      padding: 0;
      border: 0;
    }

    html[data-game-mode="countdown"] .top-hud .wave-panel button,
    html[data-game-mode="playing"] .top-hud .wave-panel button,
    html[data-game-mode="paused"] .top-hud .wave-panel button {
      min-height: 34px;
    }

    .hand-shell .type-grid {
      border-color: rgba(255, 226, 170, 0.16);
      background:
        radial-gradient(circle at 12% 0%, rgba(103, 223, 255, 0.12), transparent 34%),
        linear-gradient(180deg, rgba(5, 9, 24, 0.32), rgba(2, 4, 13, 0.14));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.06),
        inset 0 -18px 24px rgba(0, 0, 0, 0.18);
    }

    html[data-game-mode="setup"] .build-panel {
      width: min(620px, calc(100vw - 40px));
      min-width: min(620px, calc(100vw - 40px));
    }

    html[data-game-mode="setup"] .toast {
      bottom: 292px;
      z-index: 6;
      border-width: 1px;
      border-color: rgba(255, 226, 170, 0.34);
      border-radius: 10px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.026)),
        rgba(5, 9, 24, 0.86);
      color: #fff0bf;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 14px 34px rgba(0, 0, 0, 0.34);
      backdrop-filter: blur(9px) saturate(1.12);
    }

    .tower-card {
      border-radius: 9px;
      box-shadow:
        inset 0 0 0 1px rgba(255, 248, 224, 0.08),
        0 10px 20px rgba(0, 0, 0, 0.32);
    }

    .tower-card::after {
      mix-blend-mode: normal;
    }

    .card-ability {
      border-radius: 6px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.025)),
        rgba(3, 6, 16, 0.72);
    }

    .camp-idle-visual {
      filter: saturate(0.92) brightness(0.84);
    }

    .camp-profile-main {
      background:
        radial-gradient(circle at 0 0, rgba(255, 211, 110, 0.08), transparent 34%),
        rgba(5, 9, 24, 0.68);
    }

    .camp-side-head h3,
    .camp-profile-title h3,
    .camp-shop-head h3 {
      text-shadow: 0 0 18px rgba(255, 211, 110, 0.12);
    }

    .camp-dock-button,
    .camp-shop-item {
      border-radius: 14px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.016)),
        rgba(3, 7, 20, 0.72);
    }

    .camp-dock-button:hover:not(:disabled),
    .camp-dock-button:focus-visible {
      transform: translateY(-5px);
    }

    .camp-shop-hero {
      border-color: rgba(255, 226, 170, 0.2);
    }

    @media (max-width: 980px) {
      .top-hud,
      html[data-game-mode="countdown"] .top-hud,
      html[data-game-mode="playing"] .top-hud {
        left: 8px;
        right: 8px;
        width: auto;
        transform: none;
        grid-template-columns: minmax(128px, 1.24fr) repeat(4, minmax(42px, 0.48fr)) minmax(204px, 1.88fr);
        gap: 4px;
      }

      .build-panel,
      html[data-game-mode="countdown"] .build-panel,
      html[data-game-mode="playing"] .build-panel {
        left: 8px;
        right: 8px;
        width: auto;
        min-width: 0;
        bottom: 8px;
      }

      .type-grid,
      html[data-game-mode="countdown"] .type-grid,
      html[data-game-mode="playing"] .type-grid {
        grid-auto-columns: clamp(68px, 18vw, 86px);
      }

      .hand-shell {
        padding-inline: 24px;
      }

      html[data-game-mode="setup"] .toast {
        bottom: 276px;
      }
    }

    @media (max-height: 520px) and (orientation: landscape) {
      .top-hud,
      html[data-game-mode="countdown"] .top-hud,
      html[data-game-mode="playing"] .top-hud {
        top: 6px;
        grid-template-columns: minmax(190px, 1.24fr) repeat(4, minmax(64px, 0.5fr)) minmax(282px, 1.75fr);
        gap: 4px;
      }

      .top-hud .stat {
        min-height: 44px;
        grid-template-columns: 22px minmax(0, 1fr);
        grid-template-rows: 11px 16px auto;
        gap: 1px 5px;
        padding: 5px 7px;
      }

      .top-hud .stat-icon,
      .top-hud .hud-icon {
        width: 20px;
        height: 20px;
        border-radius: 6px;
      }

      .top-hud .stat span {
        font-size: 0.38rem;
        letter-spacing: 0.08em;
      }

      .top-hud .stat strong {
        font-size: 0.78rem;
      }

      .top-hud .hp-track {
        height: 5px;
        margin-top: 2px;
      }

      .top-hud .wave-panel,
      html[data-game-mode="countdown"] .top-hud .wave-panel,
      html[data-game-mode="playing"] .top-hud .wave-panel {
        padding: 7px;
        gap: 5px;
      }

      .top-hud .wave-panel header {
        display: none;
      }

      .top-hud .combat-chip {
        min-height: 30px;
        padding: 4px 6px;
      }

      .top-hud .wave-panel button,
      html[data-game-mode="countdown"] .top-hud .wave-panel button,
      html[data-game-mode="playing"] .top-hud .wave-panel button {
        min-height: 32px;
        font-size: 0.6rem;
      }

      html[data-game-mode="setup"] .build-panel {
        width: min(620px, calc(100vw - 16px));
        bottom: 8px;
      }
    }

    @media (max-width: 760px) {
      .top-hud,
      html[data-game-mode="countdown"] .top-hud,
      html[data-game-mode="playing"] .top-hud {
        grid-template-columns: minmax(118px, 1.25fr) repeat(2, minmax(46px, 0.54fr));
        align-items: stretch;
      }

      .top-hud .stat[data-stat="monsters"],
      .top-hud .stat[data-stat="kills"],
      .top-hud .wave-panel {
        grid-column: span 2;
      }

      .top-hud .wave-panel {
        grid-column: 1 / -1;
      }

      .overlay.is-settlement .overlay-card {
        padding: 16px;
      }
    }

    /* Mobile landscape polish pass: keep the battlefield readable before showing secondary telemetry. */
    .top-hud .command-row {
      grid-template-columns: repeat(4, minmax(0, 1fr));
    }

    @media (max-height: 520px) and (orientation: landscape) {
      #scene::after {
        opacity: 0.42;
      }

      .top-hud,
      html[data-game-mode="countdown"] .top-hud,
      html[data-game-mode="playing"] .top-hud,
      html[data-game-mode="paused"] .top-hud {
        top: 6px;
        left: max(8px, env(safe-area-inset-left));
        right: max(8px, env(safe-area-inset-right));
        width: auto;
        transform: none;
        grid-template-columns: minmax(150px, 1.45fr) minmax(54px, 0.52fr) minmax(64px, 0.62fr) minmax(250px, 1.8fr);
        gap: 5px;
      }

      .top-hud .stat[data-stat="monsters"],
      .top-hud .stat[data-stat="kills"] {
        display: none;
      }

      .top-hud .wave-panel {
        min-height: 48px;
        border-radius: 8px;
        background: rgba(8, 13, 25, 0.62);
      }

      .top-hud .combat-readout {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 4px;
      }

      .top-hud .combat-chip {
        min-height: 28px;
      }

      .top-hud .command-row {
        grid-template-columns: 1.1fr 0.76fr 0.9fr 0.9fr;
      }

      .top-hud .wave-panel button {
        min-height: 30px;
        border-radius: 7px;
        font-size: 0.55rem;
      }

      .build-panel,
      html[data-game-mode="setup"] .build-panel,
      html[data-game-mode="countdown"] .build-panel,
      html[data-game-mode="playing"] .build-panel,
      html[data-game-mode="paused"] .build-panel {
        left: max(8px, env(safe-area-inset-left));
        right: auto;
        bottom: max(8px, env(safe-area-inset-bottom));
        width: min(560px, 54vw);
        min-width: 0;
        padding: 8px 9px;
        border-radius: 8px;
        background: rgba(6, 10, 20, 0.58);
      }

      .build-panel header,
      .tower-status-dock,
      .slot-grid,
      .build-panel > p {
        display: none;
      }

      .hand-shell {
        padding-inline: 22px;
      }

      .type-grid,
      html[data-game-mode="setup"] .type-grid,
      html[data-game-mode="countdown"] .type-grid,
      html[data-game-mode="playing"] .type-grid,
      html[data-game-mode="paused"] .type-grid {
        grid-auto-columns: clamp(58px, 10vw, 72px);
        padding: 4px;
        gap: 4px;
      }

      .tower-card {
        min-height: 86px;
        border-radius: 7px;
      }

      .camp-actions {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 6px;
      }

      .camp-actions .camp-action:nth-child(n + 3),
      .camp-relations-panel,
      .camp-log {
        display: none;
      }
    }

    html[data-visible-heroes="1"] .build-panel {
      width: min(430px, calc(100vw - 24px));
    }

    html[data-visible-heroes="1"] .type-grid {
      grid-auto-columns: minmax(86px, 112px);
    }

    html[data-visible-heroes="1"] .hand-shell {
      min-height: 148px;
    }

    html[data-visible-heroes="1"] .tower-card {
      min-height: 134px;
    }

    /* Player audit pass: the hand should feel like an elegant floating card band, not a black scroll box. */
    .build-panel {
      filter: drop-shadow(0 12px 24px rgba(0, 0, 0, 0.22));
    }

    .hand-shell {
      padding: 4px 28px 7px;
      border-radius: 14px;
      background:
        linear-gradient(180deg, rgba(255, 242, 216, 0.08), rgba(255, 242, 216, 0.025)),
        linear-gradient(90deg, rgba(255, 120, 166, 0.08), rgba(112, 220, 255, 0.07));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.1),
        inset 0 -1px 0 rgba(255, 206, 150, 0.06);
      backdrop-filter: blur(8px);
    }

    .hand-shell .type-grid {
      border: 0;
      border-radius: 12px;
      background: transparent;
      box-shadow: none;
      padding-block: 11px 8px;
    }

    .hand-shell::before {
      left: 22px;
      background: linear-gradient(90deg, rgba(15, 18, 32, 0.34), transparent);
    }

    .hand-shell::after {
      right: 22px;
      background: linear-gradient(270deg, rgba(15, 18, 32, 0.34), transparent);
    }

    .hand-scroll {
      border: 1px solid rgba(255, 226, 170, 0.34);
      background: rgba(255, 240, 210, 0.09);
      box-shadow: 0 8px 18px rgba(0, 0, 0, 0.2);
    }

    .hand-scroll-meter {
      left: 44px;
      right: 44px;
      bottom: 2px;
      height: 2px;
      background: rgba(255, 232, 200, 0.1);
    }

    html[data-visible-heroes="1"] .build-panel {
      width: max-content !important;
      min-width: 0 !important;
      max-width: calc(100vw - 24px);
    }

    html[data-visible-heroes="1"] .type-grid {
      width: max-content !important;
      min-width: 0 !important;
      grid-auto-columns: 92px;
      padding-inline: 4px;
      overflow: visible;
    }

    html[data-visible-heroes="1"] .hand-shell {
      width: max-content !important;
      min-height: 118px;
      padding-inline: 10px;
      background:
        linear-gradient(180deg, rgba(255, 242, 216, 0.07), rgba(255, 242, 216, 0.018)),
        linear-gradient(90deg, rgba(255, 120, 166, 0.06), rgba(112, 220, 255, 0.045));
    }

    html[data-visible-heroes="1"] .tower-card {
      min-height: 108px;
    }

    html[data-visible-heroes="1"] .hand-scroll,
    html[data-visible-heroes="1"] .hand-scroll-meter,
    html[data-visible-heroes="1"] .hand-shell::before,
    html[data-visible-heroes="1"] .hand-shell::after {
      display: none;
    }

    /* Visual audit pass 01: make combat feel like a game layer instead of a web dashboard. */
    .top-hud {
      top: max(8px, env(safe-area-inset-top));
      grid-template-columns: minmax(218px, 270px) repeat(3, minmax(72px, 86px)) minmax(276px, 336px);
      gap: 6px;
      max-width: min(1040px, calc(100vw - 18px));
      margin-inline: auto;
      filter: drop-shadow(0 10px 22px rgba(0, 0, 0, 0.22));
    }

    .top-hud .stat[data-stat="kills"] {
      display: none;
    }

    .top-hud .stat,
    .top-hud .wave-panel {
      border-color: rgba(255, 234, 190, 0.26);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.015)),
        linear-gradient(135deg, rgba(20, 25, 46, 0.66), rgba(7, 10, 24, 0.42));
      box-shadow:
        inset 0 1px 0 rgba(255, 246, 220, 0.1),
        0 8px 20px rgba(0, 0, 0, 0.18);
      backdrop-filter: blur(7px) saturate(1.04);
    }

    .top-hud .stat {
      min-height: 48px;
      grid-template-columns: 24px minmax(0, 1fr);
      grid-template-rows: 13px 17px auto;
      padding: 7px 9px 6px;
      gap: 1px 7px;
    }

    .top-hud .hud-icon {
      width: 22px;
      height: 22px;
      border-radius: 7px;
      transform-origin: center;
    }

    .top-hud .stat span,
    .top-hud .combat-chip span {
      font-size: 0.4rem;
      letter-spacing: 0.08em;
    }

    .top-hud .stat strong {
      font-size: 0.82rem;
    }

    .top-hud .hp-track {
      height: 5px;
      margin-top: 3px;
    }

    .top-hud .wave-panel {
      padding: 7px 8px;
      gap: 6px;
    }

    .top-hud .wave-panel header {
      font-size: 0.54rem;
    }

    .top-hud .combat-readout {
      gap: 5px;
    }

    .top-hud .combat-chip {
      min-height: 31px;
      grid-template-columns: 12px minmax(0, 1fr);
      grid-template-rows: 10px 14px;
      gap: 0 5px;
      padding: 4px 6px;
      background: rgba(2, 5, 17, 0.24);
    }

    .top-hud .combat-chip::before {
      width: 11px;
      height: 11px;
    }

    .top-hud .combat-chip strong {
      font-size: 0.64rem;
    }

    .top-hud .combat-alert {
      min-height: 20px;
      padding: 3px 7px;
      font-size: 0.5rem;
      background:
        linear-gradient(90deg, rgba(255, 90, 134, 0.18), rgba(255, 90, 134, 0.035)),
        rgba(5, 8, 18, 0.26);
    }

    .top-hud .wave-panel button {
      min-height: 32px;
      padding-inline: 26px 8px;
      font-size: 0.54rem;
    }

    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud {
      opacity: 0.9;
      transform: translateX(-50%) scale(0.94);
    }

    html[data-game-mode="countdown"] .top-hud .wave-panel,
    html[data-game-mode="playing"] .top-hud .wave-panel {
      max-width: 310px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.065), rgba(255, 255, 255, 0.015)),
        linear-gradient(135deg, rgba(36, 20, 48, 0.58), rgba(7, 10, 24, 0.38));
    }

    html[data-game-mode="playing"] .top-hud .stat:not(.castle-stat) {
      opacity: 0.78;
    }

    html[data-game-mode="playing"] .combat-alert {
      color: #fff1c2;
      border-color: rgba(255, 190, 92, 0.42);
      background:
        linear-gradient(90deg, rgba(255, 166, 86, 0.16), rgba(255, 92, 134, 0.06)),
        rgba(5, 8, 18, 0.22);
      animation: combatAlertPulse 1.2s ease-in-out infinite;
    }

    /* Visual audit pass 01: stronger MP4-forward shell for camp/shop/story until final Seedance clips land. */
    .camp-profile,
    .camp-side,
    .camp-shop-card,
    .story-dialogue {
      border-color: rgba(255, 232, 184, 0.28);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.018)),
        linear-gradient(135deg, rgba(16, 22, 42, 0.72), rgba(5, 9, 24, 0.62));
    }

    .camp-action,
    .camp-shop-item {
      min-height: 72px;
      border-color: rgba(255, 232, 184, 0.24);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.012)),
        radial-gradient(circle at 8% 12%, var(--facility-glow, rgba(103, 223, 255, 0.18)), transparent 46%),
        rgba(5, 10, 25, 0.72);
    }

    .camp-shop-item {
      min-height: 132px;
    }

    .camp-shop-item::before {
      width: 52px;
    }

    .camp-action::after,
    .camp-shop-item::after {
      content: "";
      grid-column: 2;
      width: 54px;
      height: 3px;
      padding: 0;
      border: 0;
      border-radius: 999px;
      background: linear-gradient(90deg, transparent, var(--facility-border, rgba(118, 232, 255, 0.42)), transparent);
      opacity: 0.48;
    }

    .camp-dock-button::after {
      background:
        linear-gradient(90deg, transparent, var(--facility-glow, rgba(103, 223, 255, 0.24)), transparent);
      opacity: 0.38;
    }

    .story-player {
      background:
        radial-gradient(circle at 70% 28%, rgba(255, 210, 128, 0.14), transparent 32%),
        linear-gradient(90deg, rgba(3, 5, 14, 0.82), rgba(3, 5, 14, 0.24) 46%, rgba(3, 5, 14, 0.78));
      backdrop-filter: blur(5px) saturate(1.08);
    }

    .story-shell {
      width: min(1120px, calc(100vw - 42px));
      height: min(610px, calc(100dvh - 34px));
      align-items: end;
    }

    .story-character {
      transform: translateX(-50%) scale(1.08);
      filter:
        drop-shadow(0 30px 48px rgba(0, 0, 0, 0.62))
        drop-shadow(0 0 30px rgba(255, 214, 144, 0.16));
    }

    .story-dialogue {
      width: min(720px, calc(100vw - 64px));
      margin: 0 auto 18px;
      border-radius: 8px;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 24px 70px rgba(0, 0, 0, 0.44);
    }

    /* Cross-audit fix: keep the command panel horizontal and out of the battlefield. */
    .top-hud,
    html[data-game-mode="setup"] .top-hud,
    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud,
    html[data-game-mode="paused"] .top-hud {
      left: max(10px, env(safe-area-inset-left)) !important;
      right: auto !important;
      width: min(612px, calc(100vw - 398px)) !important;
      min-width: 476px;
      transform: none !important;
      grid-template-columns: minmax(210px, 260px) minmax(70px, 82px) minmax(70px, 82px) minmax(70px, 82px) !important;
    }

    .top-hud .wave-panel,
    html[data-game-mode="setup"] .top-hud .wave-panel,
    html[data-game-mode="countdown"] .top-hud .wave-panel,
    html[data-game-mode="playing"] .top-hud .wave-panel,
    html[data-game-mode="paused"] .top-hud .wave-panel {
      position: fixed !important;
      top: max(8px, env(safe-area-inset-top)) !important;
      right: max(10px, env(safe-area-inset-right)) !important;
      width: min(360px, 34vw) !important;
      min-width: 308px;
      max-width: 370px;
      align-self: auto !important;
    }

    .top-hud .wave-panel header span,
    .top-hud .wave-panel header strong,
    .top-hud .combat-chip strong,
    .top-hud .wave-panel button {
      white-space: nowrap;
    }

    @media (max-width: 920px) {
      .top-hud,
      html[data-game-mode="setup"] .top-hud,
      html[data-game-mode="countdown"] .top-hud,
      html[data-game-mode="playing"] .top-hud,
      html[data-game-mode="paused"] .top-hud {
        width: min(424px, calc(100vw - 332px)) !important;
        min-width: 332px;
        grid-template-columns: minmax(168px, 210px) minmax(58px, 68px) minmax(58px, 68px) !important;
      }

      .top-hud .stat[data-stat="monsters"] {
        display: none;
      }

      .top-hud .wave-panel,
      html[data-game-mode="setup"] .top-hud .wave-panel,
      html[data-game-mode="countdown"] .top-hud .wave-panel,
      html[data-game-mode="playing"] .top-hud .wave-panel,
      html[data-game-mode="paused"] .top-hud .wave-panel {
        width: min(310px, 36vw) !important;
        min-width: 286px;
      }
    }

    /* Premium pixel facility texture pass: cute small buildings, still readable inside the Three.js HUD. */
    .camp-dock-button[data-camp-dock="chat"],
    .camp-action[data-camp-action="chat"],
    .camp-shop-item[data-camp-shop-action="chat"],
    .camp-shop-modal[data-shop="chat"] .camp-shop-card {
      --facility-texture: url("../assets/ui/facilities/command-house.svg");
      --facility-glow: rgba(103, 223, 255, 0.32);
      --facility-border: rgba(150, 236, 255, 0.56);
    }

    .camp-action[data-camp-action="joke"],
    .camp-shop-item[data-camp-shop-action="joke"] {
      --facility-texture: url("../assets/ui/facilities/joke-cube.svg");
      --facility-glow: rgba(150, 112, 255, 0.28);
      --facility-border: rgba(190, 172, 255, 0.52);
    }

    .camp-dock-button[data-camp-dock="arcana"],
    .camp-action[data-camp-action="arcana"],
    .camp-action[data-camp-mini-action="rune-focus"],
    .camp-shop-item[data-camp-shop-action="arcana"],
    .camp-shop-item[data-camp-shop-special="rune"],
    .camp-shop-modal[data-shop="arcana"] .camp-shop-card {
      --facility-texture: url("../assets/ui/facilities/rune-shrine.svg");
      --facility-glow: rgba(103, 223, 255, 0.36);
      --facility-border: rgba(142, 240, 255, 0.6);
    }

    .camp-dock-button[data-camp-dock="gear"],
    .camp-action[data-camp-action="gear"],
    .camp-shop-item[data-camp-shop-action="gear"],
    .camp-shop-modal[data-shop="gear"] .camp-shop-card {
      --facility-texture: url("../assets/ui/facilities/weapon-shop.svg");
      --facility-glow: rgba(255, 174, 76, 0.34);
      --facility-border: rgba(255, 211, 128, 0.58);
    }

    .camp-dock-button[data-camp-dock="grace"],
    .camp-action[data-camp-action="grace"],
    .camp-shop-modal[data-shop="grace"] .camp-shop-card {
      --facility-texture: url("../assets/ui/facilities/fashion-boutique.svg");
      --facility-glow: rgba(218, 154, 255, 0.32);
      --facility-border: rgba(238, 188, 255, 0.58);
    }

    .camp-dock-button[data-camp-dock="date"],
    .camp-action[data-camp-action="date"],
    .camp-shop-item[data-camp-shop-action="date"],
    .camp-shop-modal[data-shop="date"] .camp-shop-card {
      --facility-texture: url("../assets/ui/facilities/tea-house.svg");
      --facility-glow: rgba(255, 113, 158, 0.34);
      --facility-border: rgba(255, 181, 210, 0.58);
    }

    .camp-dock-button[data-camp-dock="deploy"] {
      --facility-texture: url("../assets/ui/facilities/war-room.svg");
      --facility-glow: rgba(255, 211, 110, 0.38);
      --facility-border: rgba(255, 232, 168, 0.66);
    }

    .camp-action[data-camp-action="gift"],
    .camp-shop-item[data-camp-shop-action="gift"] {
      --facility-texture: url("../assets/ui/facilities/gift-shop.svg");
      --facility-glow: rgba(255, 143, 197, 0.32);
      --facility-border: rgba(255, 202, 232, 0.56);
    }

    .camp-action[data-camp-action="rest"],
    .camp-shop-item[data-camp-shop-action="rest"] {
      --facility-texture: url("../assets/ui/facilities/hot-spring.svg");
      --facility-glow: rgba(126, 238, 255, 0.3);
      --facility-border: rgba(198, 250, 255, 0.54);
    }

    .camp-action[data-camp-action="patrol"],
    .camp-shop-item[data-camp-shop-action="patrol"] {
      --facility-texture: url("../assets/ui/facilities/patrol-gate.svg");
      --facility-glow: rgba(111, 231, 255, 0.26);
      --facility-border: rgba(157, 238, 255, 0.52);
    }

    .camp-dock-button::before,
    .camp-action::before,
    .camp-shop-item::before {
      content: "";
      overflow: hidden;
      border-color: var(--facility-border, rgba(236, 252, 255, 0.54));
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 42%),
        var(--facility-texture, url("../assets/ui/facilities/command-house.svg")) center / cover no-repeat,
        rgba(7, 15, 31, 0.92);
      image-rendering: pixelated;
      image-rendering: crisp-edges;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.26),
        0 0 18px var(--facility-glow, rgba(103, 223, 255, 0.24)),
        0 10px 18px rgba(0, 0, 0, 0.28);
      text-shadow: none;
    }

    .facility-loop-video {
      position: absolute;
      z-index: 1;
      pointer-events: none;
      object-fit: cover;
      image-rendering: pixelated;
      image-rendering: crisp-edges;
      border: 1px solid var(--facility-border, rgba(236, 252, 255, 0.54));
      background: rgba(7, 15, 31, 0.92);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.24),
        0 0 18px var(--facility-glow, rgba(103, 223, 255, 0.22));
    }

    .camp-dock-button .facility-loop-video {
      top: 7px;
      left: 50%;
      width: 58px;
      height: 58px;
      border-radius: 10px;
      transform: translateX(-50%);
    }

    .camp-action .facility-loop-video {
      top: 10px;
      left: 10px;
      width: 42px;
      height: 42px;
      border-radius: 8px;
    }

    .camp-shop-item .facility-loop-video {
      top: 13px;
      left: 13px;
      width: 52px;
      height: 52px;
      border-radius: 9px;
    }

    .camp-dock-button .facility-loop-video + span,
    .camp-dock-button .facility-loop-video ~ em,
    .camp-action strong,
    .camp-action > span,
    .camp-shop-item strong,
    .camp-shop-item span,
    .camp-shop-item em {
      position: relative;
      z-index: 2;
    }

    .camp-dock-button::before {
      width: 58px;
      border-radius: 10px;
      transform: translateY(-2px);
      opacity: 0;
    }

    .camp-action::before {
      width: 42px;
      border-radius: 8px;
      opacity: 0;
    }

    .camp-shop-item::before {
      min-height: auto;
      border: 1px solid var(--facility-border, rgba(236, 252, 255, 0.54));
      border-radius: 9px;
      opacity: 0;
    }

    .camp-dock-button {
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.065), rgba(255, 255, 255, 0.018)),
        radial-gradient(circle at 50% 0%, var(--facility-glow, rgba(103, 223, 255, 0.18)), transparent 64%),
        rgba(6, 13, 31, 0.66);
    }

    .camp-dock-button:hover:not(:disabled)::before,
    .camp-dock-button:focus-visible::before,
    .camp-action:hover:not(:disabled)::before,
    .camp-action:focus-visible::before,
    .camp-shop-item:hover:not(:disabled)::before,
    .camp-shop-item:focus-visible::before {
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.34),
        0 0 24px var(--facility-glow, rgba(103, 223, 255, 0.3)),
        0 14px 24px rgba(0, 0, 0, 0.34);
      filter: saturate(1.16) contrast(1.04);
    }

    .camp-shop-card {
      position: relative;
      overflow: hidden;
    }

    .camp-shop-card::before {
      content: "";
      position: absolute;
      top: 12px;
      right: 18px;
      z-index: 0;
      width: 118px;
      aspect-ratio: 1;
      border: 1px solid var(--facility-border, rgba(255, 232, 170, 0.42));
      border-radius: 16px;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 42%),
        var(--facility-texture, url("../assets/ui/facilities/command-house.svg")) center / cover no-repeat,
        rgba(6, 13, 31, 0.82);
      image-rendering: pixelated;
      opacity: 0.28;
      filter: saturate(1.16);
      box-shadow: 0 0 28px var(--facility-glow, rgba(255, 211, 110, 0.16));
      pointer-events: none;
    }

    .camp-shop-head,
    .camp-shop-hero,
    .camp-shop-grid,
    .camp-shop-foot {
      position: relative;
      z-index: 1;
    }

    /* Cross-audit fix 02: keep telemetry and commands in separate lanes. */
    .top-hud,
    html[data-game-mode="setup"] .top-hud,
    html[data-game-mode="countdown"] .top-hud,
    html[data-game-mode="playing"] .top-hud,
    html[data-game-mode="paused"] .top-hud {
      left: max(10px, env(safe-area-inset-left)) !important;
      right: auto !important;
      width: min(500px, calc(100vw - 438px)) !important;
      min-width: 350px;
      max-width: 500px;
      transform: none !important;
      filter: none !important;
      grid-template-columns: minmax(208px, 1.55fr) minmax(62px, 0.5fr) minmax(62px, 0.5fr) !important;
      align-items: stretch;
      z-index: 12;
    }

    .top-hud .stat[data-stat="monsters"],
    .top-hud .stat[data-stat="kills"] {
      display: none !important;
    }

    .top-hud .wave-panel,
    html[data-game-mode="setup"] .top-hud .wave-panel,
    html[data-game-mode="countdown"] .top-hud .wave-panel,
    html[data-game-mode="playing"] .top-hud .wave-panel,
    html[data-game-mode="paused"] .top-hud .wave-panel {
      position: fixed !important;
      top: max(8px, env(safe-area-inset-top)) !important;
      left: auto !important;
      right: max(10px, env(safe-area-inset-right)) !important;
      width: 356px !important;
      min-width: 0;
      max-width: min(356px, calc(100vw - 552px));
      transform: none !important;
      z-index: 13;
    }

    @media (max-width: 980px) {
      .top-hud,
      html[data-game-mode="setup"] .top-hud,
      html[data-game-mode="countdown"] .top-hud,
      html[data-game-mode="playing"] .top-hud,
      html[data-game-mode="paused"] .top-hud {
        width: min(292px, calc(100vw - 326px)) !important;
        min-width: 246px;
        grid-template-columns: minmax(168px, 1fr) minmax(54px, 62px) !important;
      }

      .top-hud .stat[data-stat="gold"] {
        display: none !important;
      }

      .top-hud .wave-panel,
      html[data-game-mode="setup"] .top-hud .wave-panel,
      html[data-game-mode="countdown"] .top-hud .wave-panel,
      html[data-game-mode="playing"] .top-hud .wave-panel,
      html[data-game-mode="paused"] .top-hud .wave-panel {
        width: 298px !important;
        max-width: 298px;
      }
    }

    html[data-game-mode="countdown"] .top-hud .wave-panel,
    html[data-game-mode="playing"] .top-hud .wave-panel {
      width: 318px !important;
      max-width: 318px;
      padding: 8px 9px;
      gap: 6px;
    }

    html[data-game-mode="countdown"] .top-hud .wave-panel .primary,
    html[data-game-mode="countdown"] .top-hud .wave-panel .camp-command,
    html[data-game-mode="playing"] .top-hud .wave-panel .primary,
    html[data-game-mode="playing"] .top-hud .wave-panel .camp-command {
      display: none !important;
    }

    html[data-game-mode="countdown"] .top-hud .combat-alert,
    html[data-game-mode="playing"] .top-hud .combat-alert {
      display: none !important;
    }

    html[data-game-mode="countdown"] .top-hud .command-row,
    html[data-game-mode="playing"] .top-hud .command-row {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 7px;
    }

    html[data-game-mode="countdown"] .top-hud .wave-panel button,
    html[data-game-mode="playing"] .top-hud .wave-panel button {
      min-height: 34px;
    }

    .camp-roster-portrait {
      display: block;
      overflow: hidden;
      background-color: rgba(12, 18, 36, 0.88) !important;
      background-image: var(--portrait) !important;
      background-position: center 18% !important;
      background-size: cover !important;
      background-repeat: no-repeat !important;
      image-rendering: auto;
      outline: 1px solid rgba(255, 238, 190, 0.24);
      outline-offset: -3px;
    }

    .camp-roster-portrait img {
      width: 100%;
      height: 100%;
      display: block;
      object-fit: cover;
      object-position: center 18%;
    }

    .camp-shop-portrait {
      display: block;
      overflow: hidden;
      background-color: rgba(12, 18, 36, 0.88) !important;
      background-image: var(--portrait) !important;
      background-position: center 18% !important;
      background-size: cover !important;
      background-repeat: no-repeat !important;
    }

    .camp-shop-portrait img {
      width: 100%;
      height: 100%;
      display: block;
      object-fit: cover;
      object-position: center 18%;
    }

    html[data-game-mode="victory"] .top-hud,
    html[data-game-mode="defeat"] .top-hud {
      display: none !important;
    }

    /* Button interaction audit pass: every game button gets hover, focus, active and disabled feedback. */
    button {
      position: relative;
      -webkit-tap-highlight-color: transparent;
      transition:
        transform 120ms ease,
        filter 160ms ease,
        border-color 160ms ease,
        background-color 160ms ease,
        box-shadow 160ms ease,
        opacity 160ms ease;
    }

    button:hover:not(:disabled),
    button:focus-visible:not(:disabled) {
      filter: saturate(1.1) brightness(1.07);
    }

    button:focus-visible {
      outline: 2px solid rgba(255, 236, 170, 0.92);
      outline-offset: 3px;
    }

    button:active:not(:disabled) {
      filter: saturate(1.02) brightness(0.96);
    }

    button:disabled,
    button[aria-disabled="true"] {
      filter: grayscale(0.25) brightness(0.78);
      pointer-events: none;
    }

    .primary:hover:not(:disabled),
    .primary:focus-visible:not(:disabled) {
      border-color: rgba(255, 236, 176, 0.92);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.22),
        0 14px 28px rgba(0, 0, 0, 0.36),
        0 0 24px rgba(255, 188, 92, 0.26),
        0 0 32px rgba(255, 92, 168, 0.16);
    }

    .secondary:hover:not(:disabled),
    .secondary:focus-visible:not(:disabled) {
      border-color: rgba(150, 238, 255, 0.78);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.18),
        0 12px 24px rgba(0, 0, 0, 0.32),
        0 0 22px rgba(83, 210, 255, 0.2);
    }

    .slot-grid [data-build-slot] {
      border-radius: 8px;
      border-color: rgba(120, 226, 255, 0.42);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
        radial-gradient(circle at 50% 18%, rgba(107, 224, 255, 0.18), transparent 58%),
        rgba(8, 13, 28, 0.86);
      color: rgba(238, 250, 255, 0.92);
    }

    .slot-grid [data-build-slot]::after {
      content: "";
      position: absolute;
      inset: 7px;
      border: 1px dashed rgba(142, 232, 255, 0.3);
      border-radius: 5px;
      opacity: 0.72;
      pointer-events: none;
      transition: opacity 160ms ease, transform 160ms ease, border-color 160ms ease;
    }

    .slot-grid [data-build-slot]:hover:not(:disabled),
    .slot-grid [data-build-slot]:focus-visible:not(:disabled) {
      transform: translateY(-2px);
      border-color: rgba(178, 246, 255, 0.82);
      color: #ffffff;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.18),
        0 12px 24px rgba(0, 0, 0, 0.34),
        0 0 26px rgba(86, 220, 255, 0.2);
    }

    .slot-grid [data-build-slot]:hover:not(:disabled)::after,
    .slot-grid [data-build-slot]:focus-visible:not(:disabled)::after {
      opacity: 1;
      transform: scale(0.94);
      border-color: rgba(255, 230, 162, 0.62);
    }

    .story-player button:hover:not(:disabled),
    .story-player button:focus-visible:not(:disabled) {
      transform: translateY(-2px);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.2),
        0 16px 30px rgba(0, 0, 0, 0.36),
        0 0 28px rgba(255, 210, 130, 0.18);
    }

    .story-player [data-story-next]::after,
    .story-player [data-story-skip]::after,
    .camp-shop-close::after,
    .camp-mini-close::after {
      content: "";
      position: absolute;
      inset: 4px;
      border-radius: inherit;
      border: 1px solid rgba(255, 255, 255, 0.12);
      opacity: 0;
      pointer-events: none;
      transition: opacity 160ms ease, inset 160ms ease;
    }

    .story-player [data-story-next]:hover:not(:disabled)::after,
    .story-player [data-story-next]:focus-visible:not(:disabled)::after,
    .story-player [data-story-skip]:hover:not(:disabled)::after,
    .story-player [data-story-skip]:focus-visible:not(:disabled)::after,
    .camp-shop-close:hover:not(:disabled)::after,
    .camp-shop-close:focus-visible:not(:disabled)::after,
    .camp-mini-close:hover:not(:disabled)::after,
    .camp-mini-close:focus-visible:not(:disabled)::after {
      inset: 7px;
      opacity: 1;
    }

    /* Camp layout rebuild v1: reference-matched mobile landscape shell. */
    .camp-screen {
      --camp-ui-border: rgba(248, 213, 142, 0.66);
      --camp-ui-border-soft: rgba(248, 213, 142, 0.32);
      --camp-ui-bg: rgba(12, 11, 21, 0.78);
      --camp-ui-bg-deep: rgba(7, 8, 18, 0.88);
      --camp-ui-gold: #ffd77c;
      --camp-ui-text: #fff0c7;
      --camp-ui-muted: rgba(255, 234, 196, 0.72);
      background:
        radial-gradient(circle at 47% 48%, rgba(255, 105, 175, 0.14), transparent 30%),
        radial-gradient(circle at 78% 22%, rgba(97, 214, 255, 0.12), transparent 28%),
        linear-gradient(180deg, #070914 0%, #10091b 58%, #05070e 100%) !important;
    }

    .camp-screen::before {
      background:
        linear-gradient(90deg, rgba(4, 5, 12, 0.94) 0%, rgba(4, 5, 12, 0.46) 30%, rgba(4, 5, 12, 0.18) 58%, rgba(4, 5, 12, 0.78) 100%),
        radial-gradient(circle at 26% 15%, rgba(255, 88, 157, 0.18), transparent 34%),
        radial-gradient(circle at 55% 70%, rgba(255, 204, 106, 0.12), transparent 34%) !important;
      opacity: 1 !important;
      mix-blend-mode: normal !important;
    }

    .camp-screen::after {
      background:
        linear-gradient(180deg, rgba(255, 231, 169, 0.05), transparent 18%, transparent 76%, rgba(3, 4, 9, 0.72)),
        repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.026) 0 1px, transparent 1px 4px) !important;
      opacity: 0.86;
    }

    .camp-idle-visual {
      background:
        linear-gradient(90deg, rgba(3, 4, 10, 0.64), rgba(3, 4, 10, 0.1) 44%, rgba(3, 4, 10, 0.42)),
        url("../assets/runtime/camp/backgrounds/camp-bg-night-fortress-v01.png") center / cover no-repeat,
        linear-gradient(180deg, #0a0d1c, #111424) !important;
      filter: saturate(1.18) contrast(1.04) brightness(0.86);
    }

    .camp-idle-visual::before {
      background:
        linear-gradient(90deg, rgba(2, 3, 8, 0.78) 0%, transparent 38%, transparent 64%, rgba(2, 3, 8, 0.72) 100%),
        radial-gradient(circle at 50% 58%, rgba(255, 92, 160, 0.1), transparent 36%) !important;
    }

    .camp-idle-video.is-ready {
      opacity: 0 !important;
      mix-blend-mode: screen;
    }

    .camp-shell {
      height: 100dvh !important;
      width: 100dvw !important;
      padding: max(8px, env(safe-area-inset-top)) max(10px, env(safe-area-inset-right)) max(8px, env(safe-area-inset-bottom)) max(10px, env(safe-area-inset-left)) !important;
      display: grid !important;
      grid-template-rows: 48px minmax(0, 1fr) 92px !important;
      gap: 6px !important;
      overflow: hidden !important;
    }

    .camp-head {
      position: relative;
      z-index: 5;
      display: grid !important;
      grid-template-columns: 255px minmax(0, 1fr) 82px !important;
      gap: 8px !important;
      align-items: start !important;
      min-height: 48px;
    }

    .camp-head > div:first-child {
      align-self: start;
      width: 245px;
      min-height: 48px;
      padding: 7px 12px 7px 14px;
      border: 1px solid var(--camp-ui-border);
      border-radius: 3px;
      background:
        linear-gradient(180deg, rgba(41, 16, 35, 0.88), rgba(10, 9, 20, 0.88)),
        rgba(10, 9, 20, 0.82);
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 8px 18px rgba(0, 0, 0, 0.28);
    }

    .camp-head h2 {
      margin: 0 !important;
      font-size: 18px !important;
      line-height: 1 !important;
      color: #ffd9ec !important;
      text-transform: none !important;
      letter-spacing: 0 !important;
      text-shadow: 0 0 10px rgba(255, 92, 168, 0.3) !important;
    }

    .camp-head p {
      margin: 4px 0 0 !important;
      font-size: 10px !important;
      line-height: 1.2 !important;
      color: var(--camp-ui-muted) !important;
      text-transform: none !important;
      letter-spacing: 0 !important;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .camp-clock {
      justify-self: center;
      display: flex !important;
      align-items: start;
      justify-content: center;
      gap: 8px !important;
      max-width: none !important;
      margin: 0 !important;
    }

    .camp-clock span {
      display: inline-flex !important;
      align-items: center;
      justify-content: center;
      gap: 6px !important;
      min-width: 92px;
      min-height: 30px !important;
      padding: 4px 10px !important;
      clip-path: none !important;
      border: 1px solid var(--camp-ui-border) !important;
      border-radius: 4px !important;
      background:
        linear-gradient(180deg, rgba(32, 21, 32, 0.92), rgba(8, 9, 18, 0.88)) !important;
      color: var(--camp-ui-muted) !important;
      font-size: 10px !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      box-shadow: 0 8px 16px rgba(0, 0, 0, 0.28) !important;
    }

    .camp-clock span::before {
      content: "";
      width: 18px;
      height: 18px;
      flex: 0 0 auto;
      border-radius: 50%;
      background:
        radial-gradient(circle at 34% 28%, rgba(255, 255, 255, 0.8), transparent 22%),
        linear-gradient(135deg, rgba(255, 217, 114, 0.92), rgba(104, 58, 22, 0.72));
      box-shadow: 0 0 10px rgba(255, 200, 92, 0.24);
    }

    .camp-clock span:nth-child(1)::before {
      content: "日";
      display: grid;
      place-items: center;
      color: #2a1708;
      font-size: 10px;
      font-weight: 950;
      background:
        linear-gradient(135deg, rgba(255, 227, 143, 0.96), rgba(192, 126, 48, 0.84));
    }

    .camp-clock span:nth-child(2)::before {
      background:
        url("../assets/runtime/camp/icons/currency-gold-v01.png") center / contain no-repeat;
    }

    .camp-clock span:nth-child(3)::before {
      background:
        url("../assets/runtime/camp/icons/currency-diamond-v01.png") center / contain no-repeat;
    }

    .camp-clock span:nth-child(4)::before {
      background:
        url("../assets/runtime/camp/icons/currency-energy-v01.png") center / contain no-repeat;
    }

    .camp-clock strong {
      color: #fff1ba !important;
      font-size: 12px !important;
      line-height: 1 !important;
    }

    .camp-day-track {
      display: none !important;
    }

    .camp-close {
      position: relative !important;
      display: none !important;
      place-items: center !important;
      min-width: 76px !important;
      min-height: 44px !important;
      padding: 4px 8px !important;
      grid-template-columns: 1fr !important;
      clip-path: none !important;
      border: 1px solid rgba(255, 213, 128, 0.86) !important;
      border-radius: 4px !important;
      background:
        linear-gradient(180deg, rgba(97, 45, 34, 0.96), rgba(35, 18, 18, 0.94)) !important;
      color: #ffe7b2 !important;
      font-size: 14px !important;
      letter-spacing: 0.08em;
      text-align: center !important;
      text-indent: -999px;
      overflow: hidden;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 0 18px rgba(255, 145, 73, 0.22) !important;
    }

    .camp-close::before {
      display: none !important;
    }

    .camp-close::after {
      content: "出战";
      display: grid;
      place-items: center;
      position: absolute;
      inset: 0;
      color: #ffe7b2;
      font-size: 14px;
      font-weight: 950;
      letter-spacing: 0.08em;
      text-indent: 0;
    }

    .camp-grid {
      position: relative !important;
      display: block !important;
      height: 100% !important;
      min-height: 0 !important;
      overflow: visible !important;
    }

    .camp-profile {
      position: absolute !important;
      left: 0;
      top: 0;
      bottom: -90px;
      width: min(330px, 37dvw);
      display: block !important;
      overflow: visible !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
    }

    .camp-profile::before {
      display: none !important;
    }

    .camp-portrait {
      position: absolute !important;
      left: 49% !important;
      bottom: 92px !important;
      z-index: 2 !important;
      width: min(390px, 43dvw) !important;
      height: min(540px, calc(100dvh - 62px)) !important;
      min-height: 0 !important;
      transform: translateX(-50%) !important;
      border-radius: 0 !important;
      background-image:
        linear-gradient(180deg, transparent 68%, rgba(5, 4, 10, 0.48)),
        var(--portrait) !important;
      background-size: auto, contain !important;
      background-position: center, center bottom !important;
      background-repeat: no-repeat, no-repeat !important;
      box-shadow: none !important;
      filter:
        drop-shadow(0 24px 28px rgba(0, 0, 0, 0.54))
        drop-shadow(0 0 24px var(--rarity-glow, rgba(255, 210, 140, 0.24))) !important;
      opacity: 1 !important;
    }

    .camp-portrait img {
      display: block;
      width: 100%;
      height: 100%;
      object-fit: contain;
      object-position: center bottom;
      pointer-events: none;
      user-select: none;
    }

    .camp-showcase-video {
      display: none !important;
      left: 48% !important;
      bottom: 84px !important;
      width: min(340px, 41dvw) !important;
      height: min(505px, calc(100dvh - 74px)) !important;
      object-fit: contain !important;
      object-position: center bottom !important;
      border-radius: 0 !important;
      opacity: 0 !important;
      background: transparent !important;
    }

    .camp-showcase-video.is-ready {
      opacity: 0 !important;
    }

    .camp-profile-main {
      position: absolute !important;
      left: 10px !important;
      right: 20px !important;
      bottom: 102px !important;
      z-index: 4 !important;
      width: auto !important;
      margin: 0 !important;
      display: grid !important;
      gap: 6px !important;
      padding: 9px 12px !important;
      clip-path: none !important;
      border: 1px solid var(--camp-ui-border) !important;
      border-radius: 4px !important;
      background:
        linear-gradient(180deg, rgba(39, 22, 28, 0.9), rgba(10, 9, 18, 0.9)) !important;
      color: var(--camp-ui-text) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 12px 24px rgba(0, 0, 0, 0.38) !important;
    }

    .camp-profile-title h3 {
      font-size: 16px !important;
      line-height: 1 !important;
      color: #ffe7c2 !important;
      text-shadow: none !important;
    }

    .camp-profile-title span {
      margin-top: 3px !important;
      font-size: 10px !important;
      color: rgba(255, 229, 193, 0.7) !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    .camp-promo,
    .camp-story,
    .camp-bond-meter {
      display: none !important;
    }

    .camp-stats {
      display: grid !important;
      grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
      gap: 4px !important;
    }

    .camp-stats span {
      min-width: 0;
      padding: 4px 5px !important;
      border: 1px solid rgba(255, 218, 155, 0.22) !important;
      border-radius: 3px !important;
      background: rgba(0, 0, 0, 0.22) !important;
      color: rgba(255, 228, 191, 0.68) !important;
      font-size: 9px !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    .camp-stats strong {
      color: #fff2bd !important;
      font-size: 10px !important;
    }

    .camp-side {
      position: absolute !important;
      left: min(320px, 35dvw);
      right: 96px;
      top: 0;
      bottom: 0;
      display: block !important;
      overflow: hidden !important;
      padding: 0 !important;
      border: 1px solid rgba(255, 217, 142, 0.2) !important;
      border-radius: 4px !important;
      background:
        linear-gradient(180deg, rgba(4, 5, 12, 0.04), rgba(4, 5, 12, 0.22)),
        url("../assets/runtime/camp/backgrounds/camp-bg-night-fortress-v01.png") center / cover no-repeat,
        rgba(9, 12, 24, 0.86) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.05),
        inset 0 -80px 80px rgba(2, 3, 8, 0.32),
        0 14px 32px rgba(0, 0, 0, 0.26) !important;
    }

    .camp-side::before {
      content: "";
      position: absolute;
      inset: 0;
      pointer-events: none;
      background:
        radial-gradient(circle at 54% 46%, transparent 0 24%, rgba(255, 154, 206, 0.11) 25% 26%, transparent 27%),
        radial-gradient(circle at 54% 46%, rgba(255, 213, 128, 0.13), transparent 18%),
        linear-gradient(90deg, rgba(3, 4, 10, 0.26), transparent 35%, transparent 74%, rgba(3, 4, 10, 0.26));
    }

    .camp-side-head {
      position: absolute !important;
      left: 14px;
      top: 12px;
      z-index: 3;
      display: flex !important;
      gap: 8px !important;
      align-items: center !important;
      padding: 6px 9px;
      border: 1px solid rgba(255, 217, 142, 0.54);
      border-radius: 3px;
      background: rgba(12, 9, 18, 0.76);
    }

    .camp-side-head h3 {
      font-size: 12px !important;
      color: #ffe7c2 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    .camp-side-head span {
      font-size: 11px !important;
      color: rgba(255, 232, 196, 0.76) !important;
      border: 0 !important;
      background: transparent !important;
      padding: 0 !important;
    }

    .camp-campaign {
      position: absolute !important;
      left: 50% !important;
      bottom: 12px !important;
      z-index: 4 !important;
      width: min(330px, calc(100% - 32px)) !important;
      transform: translateX(-50%);
      display: grid !important;
      gap: 3px !important;
      padding: 8px 12px !important;
      clip-path: none !important;
      border: 1px solid rgba(255, 217, 142, 0.5) !important;
      border-radius: 4px !important;
      background:
        linear-gradient(180deg, rgba(38, 21, 25, 0.82), rgba(7, 8, 16, 0.82)) !important;
      box-shadow: 0 14px 28px rgba(0, 0, 0, 0.32) !important;
      display: none !important;
    }

    .camp-campaign span,
    .camp-campaign em {
      font-size: 9px !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    .camp-campaign strong {
      font-size: 13px !important;
      color: #fff1c2 !important;
      text-transform: none !important;
    }

    .camp-actions {
      position: absolute !important;
      inset: 48px 14px 54px 14px !important;
      z-index: 3;
      display: none !important;
      overflow: visible !important;
    }

    .camp-map-nav {
      position: absolute;
      inset: 42px 18px 62px 18px;
      z-index: 4;
      pointer-events: none;
    }

    .camp-map-button {
      position: absolute;
      min-width: 64px;
      min-height: 25px;
      padding: 4px 9px;
      border: 1px solid rgba(255, 223, 154, 0.78);
      border-radius: 3px;
      background:
        linear-gradient(180deg, rgba(36, 24, 24, 0.92), rgba(7, 8, 15, 0.9));
      color: #ffe9bb;
      font-size: 12px;
      font-weight: 950;
      line-height: 1;
      letter-spacing: 0;
      text-align: center;
      white-space: nowrap;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 7px 16px rgba(0, 0, 0, 0.36),
        0 0 12px rgba(255, 172, 98, 0.16);
      pointer-events: auto;
      transition: transform 150ms ease, border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
    }

    .camp-map-button::after {
      content: "";
      position: absolute;
      left: 50%;
      top: 100%;
      width: 1px;
      height: 15px;
      background: linear-gradient(180deg, rgba(255, 226, 154, 0.7), transparent);
      transform: translateX(-50%);
      pointer-events: none;
    }

    .camp-map-button:hover:not(:disabled),
    .camp-map-button:focus-visible {
      border-color: rgba(255, 242, 191, 0.96);
      background:
        linear-gradient(180deg, rgba(72, 38, 42, 0.98), rgba(12, 10, 19, 0.96));
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.12),
        0 10px 20px rgba(0, 0, 0, 0.4),
        0 0 18px rgba(255, 190, 98, 0.24);
      transform: translateY(-2px);
    }

    .camp-map-button[data-camp-dock="arcana"] { left: 42%; top: 2%; }
    .camp-map-button[data-camp-dock="chat"] { left: 50%; top: 29%; }
    .camp-map-button[data-camp-dock="gear"] { left: 19%; top: 51%; }
    .camp-map-button[data-camp-dock="date"] { left: 58%; top: 52%; }
    .camp-map-button[data-camp-dock="grace"] { left: 28%; top: 27%; }
    .camp-map-button[data-camp-dock="deploy"] { left: 76%; top: 20%; }

    .camp-action {
      position: absolute !important;
      display: grid !important;
      grid-template-columns: 46px minmax(0, 1fr) !important;
      grid-template-rows: auto auto !important;
      gap: 2px 7px !important;
      align-items: center !important;
      width: 126px !important;
      min-height: 54px !important;
      padding: 5px 8px 5px 5px !important;
      clip-path: none !important;
      border: 1px solid rgba(255, 220, 149, 0.54) !important;
      border-radius: 4px !important;
      background:
        linear-gradient(180deg, rgba(35, 22, 27, 0.88), rgba(8, 8, 16, 0.84)) !important;
      color: var(--camp-ui-text) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.05),
        0 8px 18px rgba(0, 0, 0, 0.3) !important;
      transform: none !important;
    }

    .camp-action[data-camp-action="chat"] { left: 44%; top: 2%; }
    .camp-action[data-camp-action="joke"] { left: 26%; top: 21%; }
    .camp-action[data-camp-action="arcana"] { left: 64%; top: 18%; }
    .camp-action[data-camp-action="grace"] { left: 12%; top: 45%; }
    .camp-action[data-camp-action="gear"] { left: 33%; top: 52%; }
    .camp-action[data-camp-action="date"] { left: 58%; top: 47%; }
    .camp-action[data-camp-action="gift"] { left: 72%; top: 38%; }
    .camp-action[data-camp-action="patrol"] { left: 71%; top: 67%; }
    .camp-action[data-camp-action="rest"] { left: 17%; top: 68%; }

    .camp-action:hover:not(:disabled),
    .camp-action:focus-visible {
      border-color: rgba(255, 239, 184, 0.88) !important;
      background:
        linear-gradient(180deg, rgba(70, 36, 42, 0.96), rgba(13, 11, 22, 0.92)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 255, 255, 0.08),
        0 0 18px var(--facility-glow, rgba(255, 196, 116, 0.24)),
        0 12px 22px rgba(0, 0, 0, 0.34) !important;
      transform: translateY(-2px) !important;
    }

    .camp-action::before {
      grid-row: 1 / span 2 !important;
      width: 42px !important;
      height: 42px !important;
      border-radius: 3px !important;
      opacity: 0 !important;
    }

    .camp-action .facility-loop-video {
      top: 5px !important;
      left: 5px !important;
      width: 42px !important;
      height: 42px !important;
      border-radius: 3px !important;
      opacity: 1 !important;
      object-fit: cover !important;
    }

    .camp-action strong {
      grid-column: 2 !important;
      font-size: 12px !important;
      line-height: 1.05 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      color: #fff0bd !important;
    }

    .camp-action span,
    .camp-action-meta,
    .camp-action-badge {
      display: none !important;
    }

    .camp-relations-panel,
    .camp-log {
      display: none !important;
    }

    .camp-bottom-dock {
      position: absolute !important;
      right: max(10px, env(safe-area-inset-right));
      top: calc(max(8px, env(safe-area-inset-top)) + 54px);
      bottom: calc(max(8px, env(safe-area-inset-bottom)) + 12px);
      z-index: 7;
      width: 90px !important;
      display: grid !important;
      grid-template-columns: 1fr !important;
      grid-auto-rows: minmax(92px, 1fr) !important;
      align-content: stretch !important;
      gap: 9px !important;
      padding: 0 !important;
      clip-path: none !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
    }

    .camp-dock-button {
      min-width: 0 !important;
      min-height: 0 !important;
      display: grid !important;
      grid-template-rows: minmax(42px, 1fr) auto !important;
      place-items: center !important;
      gap: 2px !important;
      padding: 8px 5px 9px !important;
      border: 1px solid var(--camp-ui-border) !important;
      border-radius: 4px !important;
      background:
        linear-gradient(180deg, rgba(39, 22, 28, 0.92), rgba(8, 8, 16, 0.9)) !important;
      color: var(--camp-ui-text) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.05),
        0 8px 18px rgba(0, 0, 0, 0.3) !important;
    }

    .camp-dock-button.is-primary {
      border-color: rgba(255, 222, 142, 0.95) !important;
      background:
        linear-gradient(180deg, rgba(102, 52, 36, 0.98), rgba(36, 18, 18, 0.96)) !important;
      box-shadow:
        0 0 18px rgba(255, 145, 73, 0.22),
        0 10px 20px rgba(0, 0, 0, 0.34) !important;
    }

    .camp-dock-button::before,
    .camp-dock-button::after {
      display: none !important;
    }

    .camp-dock-button .facility-loop-video {
      position: static !important;
      transform: none !important;
      width: 52px !important;
      height: 52px !important;
      border-radius: 3px !important;
      border-color: rgba(255, 222, 156, 0.42) !important;
      opacity: 1 !important;
      object-fit: cover !important;
      image-rendering: auto !important;
      background: transparent !important;
      box-shadow: none !important;
      border: 0 !important;
    }

    .camp-dock-button span {
      font-size: 18px !important;
      line-height: 1 !important;
      color: #ffe7b2 !important;
      letter-spacing: 0.08em !important;
    }

    .camp-dock-button em {
      display: none !important;
    }

    .camp-dock-button:hover:not(:disabled),
    .camp-dock-button:focus-visible {
      border-color: rgba(255, 239, 184, 0.96) !important;
      background:
        linear-gradient(180deg, rgba(74, 38, 45, 0.98), rgba(15, 11, 21, 0.96)) !important;
      transform: translateX(-3px) !important;
    }

    .camp-roster {
      position: absolute !important;
      left: min(330px, 36dvw);
      right: 100px;
      bottom: -90px;
      z-index: 6;
      height: 86px !important;
      display: flex !important;
      gap: 7px !important;
      align-items: stretch !important;
      padding: 0 !important;
      overflow-x: auto !important;
      overflow-y: hidden !important;
      background: transparent !important;
      scrollbar-width: none;
    }

    .camp-roster::before {
      display: none !important;
    }

    .camp-roster-button {
      flex: 0 0 118px !important;
      min-height: 0 !important;
      height: 86px !important;
      display: grid !important;
      grid-template-columns: 48px minmax(0, 1fr) !important;
      gap: 6px !important;
      padding: 5px !important;
      clip-path: none !important;
      border: 1px solid rgba(255, 220, 149, 0.46) !important;
      border-radius: 4px !important;
      background:
        url("../assets/runtime/camp/cards/roster-card-frame-default-v01.png") center / 100% 100% no-repeat,
        linear-gradient(180deg, rgba(36, 22, 28, 0.88), rgba(7, 7, 14, 0.88)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.06),
        0 10px 18px rgba(0, 0, 0, 0.3) !important;
      transform: none !important;
    }

    .camp-roster-button.is-selected {
      border-color: rgba(255, 239, 184, 0.92) !important;
      background:
        url("../assets/runtime/camp/cards/roster-card-frame-selected-v01.png") center / 100% 100% no-repeat,
        linear-gradient(180deg, rgba(48, 28, 28, 0.92), rgba(9, 8, 16, 0.9)) !important;
      box-shadow:
        0 0 16px var(--rarity-glow, rgba(255, 210, 140, 0.32)),
        0 12px 22px rgba(0, 0, 0, 0.32) !important;
      transform: translateY(-4px) !important;
    }

    .camp-roster-portrait {
      width: 48px !important;
      height: 74px !important;
      border-radius: 3px !important;
      background-size: cover !important;
      background-position: center top !important;
    }

    .camp-roster-portrait img {
      width: 100%;
      height: 100%;
      object-fit: cover;
      object-position: center top;
      border-radius: inherit;
    }

    .camp-roster-name {
      align-self: end;
      gap: 2px !important;
    }

    .camp-roster-name strong {
      font-size: 12px !important;
      line-height: 1 !important;
      color: #ffe9bd !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    .camp-roster-name span {
      font-size: 9px !important;
      color: rgba(255, 229, 193, 0.68) !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    @media (max-width: 930px), (max-height: 430px) {
      .camp-shell {
        grid-template-rows: 42px minmax(0, 1fr) 78px !important;
        gap: 4px !important;
      }

      .camp-head {
        grid-template-columns: 210px minmax(0, 1fr) 70px !important;
      }

      .camp-head > div:first-child {
        width: 204px;
        min-height: 40px;
        padding: 5px 9px;
      }

      .camp-head h2 {
        font-size: 15px !important;
      }

      .camp-head p {
        font-size: 9px !important;
      }

      .camp-clock span {
        min-width: 70px;
        min-height: 26px !important;
        padding: 3px 6px !important;
        font-size: 9px !important;
      }

      .camp-clock strong {
        font-size: 10px !important;
      }

      .camp-close {
        min-width: 66px !important;
        min-height: 38px !important;
        font-size: 12px !important;
      }

      .camp-profile {
        width: 272px;
        bottom: -76px;
      }

      .camp-portrait,
      .camp-showcase-video {
        bottom: 74px !important;
        width: 302px !important;
        height: calc(100dvh - 60px) !important;
      }

      .camp-profile-main {
        left: 6px !important;
        right: 12px !important;
        bottom: 82px !important;
        padding: 7px 9px !important;
      }

      .camp-profile-title h3 {
        font-size: 14px !important;
      }

      .camp-profile-title span,
      .camp-stats span,
      .camp-stats strong {
        font-size: 8px !important;
      }

      .camp-side {
        left: 272px;
        right: 82px;
      }

      .camp-actions {
        inset: 40px 8px 48px 8px !important;
      }

      .camp-map-nav {
        inset: 36px 10px 50px 10px;
      }

      .camp-map-button {
        min-width: 54px;
        min-height: 22px;
        padding: 3px 7px;
        font-size: 10px;
      }

      .camp-action {
        width: 104px !important;
        min-height: 45px !important;
        grid-template-columns: 36px minmax(0, 1fr) !important;
        padding: 4px !important;
      }

      .camp-action .facility-loop-video {
        width: 36px !important;
        height: 36px !important;
        top: 4px !important;
        left: 4px !important;
      }

      .camp-action strong {
        font-size: 10px !important;
      }

      .camp-campaign {
        bottom: 8px !important;
        padding: 6px 9px !important;
      }

      .camp-campaign strong {
        font-size: 11px !important;
      }

      .camp-campaign span,
      .camp-campaign em {
        font-size: 8px !important;
      }

      .camp-bottom-dock {
        width: 74px !important;
        top: calc(max(8px, env(safe-area-inset-top)) + 48px);
        bottom: calc(max(8px, env(safe-area-inset-bottom)) + 8px);
        gap: 5px !important;
      }

      .camp-dock-button {
        grid-template-rows: 34px auto !important;
        padding: 4px 3px !important;
      }

      .camp-dock-button .facility-loop-video {
        width: 40px !important;
        height: 38px !important;
      }

      .camp-dock-button span {
        font-size: 14px !important;
      }

      .camp-roster {
        left: 276px;
        right: 86px;
        bottom: -76px;
        height: 74px !important;
      }

      .camp-roster-button {
        flex-basis: 104px !important;
        height: 74px !important;
        grid-template-columns: 42px minmax(0, 1fr) !important;
      }

      .camp-roster-portrait {
        width: 42px !important;
        height: 62px !important;
      }
    }

    /* Final camp reference override: keep this at the end so old panel rules cannot win. */
    .camp-screen {
      --camp-stage-scale: 1;
      position: fixed !important;
      inset: 0 !important;
      width: 100vw !important;
      height: 100dvh !important;
      overflow: hidden !important;
      background: #03040a !important;
    }

    .camp-screen[hidden] {
      display: none !important;
    }

    .camp-idle-visual {
      display: none !important;
    }

    .camp-shell {
      position: absolute !important;
      left: 50% !important;
      top: 50% !important;
      width: 1366px !important;
      height: 768px !important;
      min-width: 1366px !important;
      min-height: 768px !important;
      max-width: none !important;
      max-height: none !important;
      padding: 8px 10px !important;
      display: grid !important;
      grid-template-rows: 48px minmax(0, 1fr) 92px !important;
      gap: 6px !important;
      overflow: hidden !important;
      transform: translate(-50%, -50%) scale(var(--camp-stage-scale)) !important;
      transform-origin: center center !important;
    }

    .camp-side {
      position: absolute !important;
      left: 0 !important;
      right: 0 !important;
      top: 0 !important;
      bottom: 0 !important;
      z-index: 1 !important;
      border: 0 !important;
      border-radius: 0 !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.03),
        inset 0 -120px 130px rgba(2, 3, 8, 0.52),
        inset 330px 0 130px rgba(2, 3, 8, 0.56),
        inset -110px 0 96px rgba(2, 3, 8, 0.42) !important;
      background:
        linear-gradient(180deg, rgba(4, 5, 12, 0.04), rgba(4, 5, 12, 0.26)),
        url("../assets/runtime/camp/backgrounds/camp-bg-night-fortress-v01.png") center / cover no-repeat,
        rgba(9, 12, 24, 0.86) !important;
    }

    .camp-side::before {
      background:
        radial-gradient(circle at 56% 54%, rgba(255, 122, 205, 0.13), transparent 25%),
        linear-gradient(90deg, rgba(2, 3, 8, 0.42), transparent 31%, transparent 78%, rgba(2, 3, 8, 0.28)) !important;
    }

    .camp-side-head {
      display: none !important;
    }

    .camp-map-nav {
      inset: 54px 112px 96px 306px !important;
    }

    .camp-profile,
    .camp-head,
    .camp-roster,
    .camp-bottom-dock {
      z-index: 7 !important;
    }

    .camp-profile {
      width: 330px !important;
      left: 0 !important;
      bottom: -90px !important;
    }

    .camp-roster {
      left: 344px !important;
      right: 102px !important;
      bottom: -84px !important;
      height: 88px !important;
      gap: 8px !important;
      overflow: visible !important;
    }

    .camp-roster-button {
      flex: 0 1 124px !important;
      min-width: 104px !important;
      height: 88px !important;
      grid-template-columns: 52px minmax(0, 1fr) !important;
    }

    .camp-roster-portrait {
      width: 52px !important;
      height: 76px !important;
    }

    .camp-portrait {
      left: 47% !important;
      bottom: 78px !important;
      width: 438px !important;
      height: 568px !important;
    }

    .camp-profile-main {
      left: 20px !important;
      right: 12px !important;
      bottom: 102px !important;
      width: 300px !important;
    }

    .camp-stats {
      grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head {
      grid-template-columns: 276px minmax(0, 1fr) 48px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head > div:first-child {
      width: 276px !important;
      min-height: 65px !important;
      padding: 10px 14px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head h2 {
      font-size: 22px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head p {
      font-size: 12px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock {
      gap: 8px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span {
      min-width: 107px !important;
      min-height: 34px !important;
      padding: 4px 10px !important;
      font-size: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(2) {
      min-width: 142px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(3) {
      min-width: 126px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(4) {
      min-width: 142px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock strong {
      font-size: 14px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:not(:first-child)::after {
      content: "+";
      display: grid;
      place-items: center;
      width: 22px;
      height: 22px;
      margin-left: 2px;
      border-left: 1px solid rgba(255, 223, 154, 0.42);
      color: #fff0bd;
      font-size: 17px;
      font-weight: 950;
      line-height: 1;
    }

    .camp-menu-button {
      position: absolute;
      right: 0;
      top: 0;
      z-index: 92;
      width: 48px;
      height: 44px;
      border: 1px solid rgba(255, 222, 142, 0.82);
      border-radius: 4px;
      background: linear-gradient(180deg, rgba(30, 21, 28, 0.94), rgba(7, 8, 14, 0.94));
      color: #ffe7b2;
      font-size: 24px;
      font-weight: 950;
      line-height: 1;
      box-shadow: 0 8px 18px rgba(0, 0, 0, 0.3);
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      width: 230px !important;
      min-height: 94px !important;
      bottom: 106px !important;
      padding: 11px 13px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title {
      display: block !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title h3 {
      font-size: 16px !important;
      line-height: 1.1 !important;
      color: #ffe7b2 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title span {
      display: block !important;
      margin-top: 4px !important;
      font-size: 11px !important;
      color: rgba(255, 229, 193, 0.8) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title .camp-rank-pill {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats {
      display: block !important;
      margin-top: 9px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span {
      display: inline-flex !important;
      align-items: center !important;
      gap: 8px !important;
      min-width: 0 !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      color: #ffe3a5 !important;
      font-size: 13px !important;
      font-weight: 900 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span::before {
      content: "◇";
      color: #ffe0a2;
      font-size: 15px;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats strong {
      color: #fff7c6 !important;
      font-size: 13px !important;
      font-weight: 950 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster {
      left: 276px !important;
      right: 394px !important;
      bottom: -78px !important;
      height: 131px !important;
      gap: 9px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button {
      flex: 0 0 166px !important;
      width: 166px !important;
      height: 131px !important;
      grid-template-columns: 1fr !important;
      grid-template-rows: 78px 1fr !important;
      padding: 6px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait {
      width: 100% !important;
      height: 78px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name {
      align-self: end !important;
      display: grid !important;
      grid-template-columns: 1fr auto !important;
      gap: 2px 4px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name strong {
      font-size: 14px !important;
      line-height: 1 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name span {
      font-size: 11px !important;
      line-height: 1 !important;
      color: #fff1c2 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name i {
      grid-column: 1 / -1;
      color: #ffd86d;
      font-style: normal;
      font-size: 11px;
      letter-spacing: 1px;
      line-height: 1;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button .camp-rank-pill {
      position: absolute;
      left: 7px;
      top: 7px;
      width: 24px;
      height: 24px;
      min-width: 0;
      padding: 0;
      border-radius: 50%;
      font-size: 10px !important;
      display: grid !important;
      place-items: center;
      background: linear-gradient(180deg, rgba(145, 69, 51, 0.96), rgba(35, 18, 18, 0.94)) !important;
    }

    @media (max-width: 930px), (max-height: 430px) {
      .camp-side {
        box-shadow:
          inset 0 -92px 100px rgba(2, 3, 8, 0.52),
          inset 272px 0 98px rgba(2, 3, 8, 0.58),
          inset -88px 0 76px rgba(2, 3, 8, 0.42) !important;
      }

      .camp-map-nav {
        inset: 52px 92px 82px 286px !important;
      }

      .camp-roster {
        left: 282px !important;
        bottom: -76px !important;
      }
    }

    /* Reference module lock v2: every module uses the same 1366x768 coordinate system. */
    .camp-screen[data-reference-ui="true"] .camp-shell {
      width: 1366px !important;
      height: 768px !important;
      padding: 0 !important;
      display: block !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head,
    .camp-screen[data-reference-ui="true"] .camp-grid,
    .camp-screen[data-reference-ui="true"] .camp-side,
    .camp-screen[data-reference-ui="true"] .camp-profile {
      position: absolute !important;
      inset: 0 !important;
      width: 1366px !important;
      height: 768px !important;
      min-width: 0 !important;
      min-height: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head {
      z-index: 90 !important;
      display: block !important;
      pointer-events: none;
    }

    .camp-screen[data-reference-ui="true"] .camp-head > div:first-child {
      position: absolute !important;
      left: 7px !important;
      top: 7px !important;
      width: 276px !important;
      height: 65px !important;
      min-height: 0 !important;
      pointer-events: auto;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock {
      position: absolute !important;
      left: 563px !important;
      top: 11px !important;
      width: 753px !important;
      height: 44px !important;
      display: flex !important;
      gap: 8px !important;
      align-items: start !important;
      justify-content: start !important;
      pointer-events: auto;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span {
      flex: 0 0 107px !important;
      width: 107px !important;
      height: 34px !important;
      min-width: 0 !important;
      min-height: 0 !important;
      padding: 0 10px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(2) {
      flex-basis: 193px !important;
      width: 193px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(3) {
      flex-basis: 175px !important;
      width: 175px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(4) {
      flex-basis: 190px !important;
      width: 190px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-menu-button {
      left: 1315px !important;
      right: auto !important;
      top: 13px !important;
      width: 48px !important;
      height: 44px !important;
      pointer-events: auto;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile {
      z-index: 40 !important;
      overflow: visible !important;
      pointer-events: none;
    }

    .camp-screen[data-reference-ui="true"] .camp-queen-info {
      position: absolute !important;
      left: 33px !important;
      top: 118px !important;
      z-index: 62 !important;
      width: 204px !important;
      height: 105px !important;
      padding: 11px 13px !important;
      display: grid !important;
      align-content: center !important;
      gap: 5px !important;
      border: 1px solid rgba(255, 217, 142, 0.54) !important;
      border-radius: 3px !important;
      background:
        linear-gradient(180deg, rgba(54, 19, 47, 0.62), rgba(11, 7, 17, 0.58)),
        rgba(9, 8, 16, 0.52) !important;
      color: #ffd6ef !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.06),
        0 10px 22px rgba(0, 0, 0, 0.28) !important;
      pointer-events: auto;
    }

    .camp-queen-info {
      display: none;
    }

    .camp-screen[data-reference-ui="true"] .camp-queen-info strong {
      color: #ffbde4 !important;
      font-size: 18px !important;
      line-height: 1 !important;
      font-weight: 950 !important;
      text-shadow: 0 0 10px rgba(255, 89, 177, 0.28) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-queen-info span {
      color: rgba(255, 217, 239, 0.78) !important;
      font-size: 12px !important;
      line-height: 1 !important;
      font-weight: 800 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-queen-info em {
      display: inline-flex !important;
      align-items: center !important;
      gap: 8px !important;
      margin-top: 4px !important;
      color: #fff0bd !important;
      font-size: 13px !important;
      line-height: 1 !important;
      font-style: normal !important;
      font-weight: 900 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-queen-info em::before {
      content: "◇";
      color: #ffe0a2;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      position: absolute !important;
      left: 0 !important;
      top: 56px !important;
      bottom: auto !important;
      width: 537px !important;
      height: 599px !important;
      transform: none !important;
      pointer-events: none;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      position: absolute !important;
      left: 42px !important;
      top: 610px !important;
      bottom: auto !important;
      right: auto !important;
      width: 230px !important;
      height: 142px !important;
      min-height: 0 !important;
      z-index: 80 !important;
      pointer-events: auto;
    }

    .camp-screen[data-reference-ui="true"] .camp-side {
      z-index: 10 !important;
      pointer-events: none;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-nav {
      position: absolute !important;
      inset: 0 !important;
      width: 1366px !important;
      height: 768px !important;
      z-index: 60 !important;
      pointer-events: none;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button {
      width: auto !important;
      min-width: 106px !important;
      height: 38px !important;
      min-height: 0 !important;
      padding: 0 14px !important;
      display: grid !important;
      place-items: center !important;
      pointer-events: auto;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="arcana"] { left: 841px !important; top: 120px !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="gear"] { left: 581px !important; top: 211px !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="chat"] { left: 841px !important; top: 240px !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="deploy"] { left: 1078px !important; top: 214px !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="grace"] { left: 512px !important; top: 350px !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="date"] { left: 907px !important; top: 352px !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="medical"] { left: 1078px !important; top: 352px !important; }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock {
      position: absolute !important;
      left: 1214px !important;
      right: auto !important;
      top: 96px !important;
      bottom: auto !important;
      width: 147px !important;
      height: 577px !important;
      z-index: 90 !important;
      display: grid !important;
      grid-template-columns: 147px !important;
      grid-template-rows: 138px 136px 136px 136px !important;
      gap: 9px !important;
      pointer-events: auto;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button {
      width: 147px !important;
      height: 100% !important;
      min-width: 0 !important;
      min-height: 0 !important;
      grid-template-rows: 64px auto !important;
      padding: 14px 8px 16px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video {
      width: 56px !important;
      height: 56px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span {
      font-size: 22px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster {
      position: absolute !important;
      left: 276px !important;
      top: 626px !important;
      right: auto !important;
      bottom: auto !important;
      width: 691px !important;
      height: 131px !important;
      z-index: 82 !important;
      display: flex !important;
      gap: 9px !important;
      overflow: visible !important;
      pointer-events: auto;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button {
      flex: 0 0 166px !important;
      width: 166px !important;
      height: 131px !important;
      min-width: 0 !important;
      min-height: 0 !important;
    }

    /* AEGIS mobile home screen v1: character-first, locked-stage, non-web buttons. */
    .camp-screen[data-reference-ui="true"] {
      --aegis-gold: #f5c86b;
      --aegis-gold-hot: #fff0a8;
      --aegis-rose: #ff7eb8;
      --aegis-ink: #fff0ca;
      --aegis-muted: rgba(255, 225, 194, 0.72);
      --aegis-panel: rgba(10, 9, 17, 0.78);
      --aegis-panel-deep: rgba(5, 6, 12, 0.92);
      --aegis-line: rgba(245, 200, 107, 0.68);
      --aegis-stage-shadow: rgba(2, 3, 8, 0.68);
      background:
        radial-gradient(circle at 31% 44%, rgba(255, 79, 168, 0.16), transparent 34%),
        #02030a !important;
    }

    .camp-screen[data-reference-ui="true"] button {
      appearance: none;
      font: inherit;
      cursor: pointer;
      -webkit-tap-highlight-color: transparent;
    }

    .camp-screen[data-reference-ui="true"] .camp-shell {
      box-shadow:
        0 0 0 1px rgba(255, 232, 176, 0.08),
        0 0 60px rgba(0, 0, 0, 0.56) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-side {
      background:
        linear-gradient(90deg, rgba(2, 3, 8, 0.62) 0 22%, transparent 38%, transparent 76%, rgba(2, 3, 8, 0.42) 100%),
        linear-gradient(180deg, rgba(2, 3, 8, 0.08), rgba(2, 3, 8, 0.34)),
        url("../assets/runtime/camp/backgrounds/camp-bg-night-fortress-v01.png") center / cover no-repeat,
        #090b18 !important;
      filter: saturate(1.08) contrast(1.04);
    }

    .camp-screen[data-reference-ui="true"] .camp-side::after {
      content: "";
      position: absolute;
      inset: 0;
      pointer-events: none;
      background:
        radial-gradient(circle at 49% 69%, rgba(255, 67, 170, 0.18), transparent 18%),
        radial-gradient(circle at 73% 32%, rgba(255, 204, 100, 0.12), transparent 19%),
        linear-gradient(0deg, rgba(2, 3, 8, 0.52), transparent 23%, transparent 78%, rgba(2, 3, 8, 0.18));
      mix-blend-mode: screen;
      opacity: 0.74;
    }

    .camp-screen[data-reference-ui="true"] .camp-close,
    .camp-screen[data-reference-ui="true"] .camp-queen-info,
    .camp-screen[data-reference-ui="true"] .camp-promo,
    .camp-screen[data-reference-ui="true"] .camp-bond-meter,
    .camp-screen[data-reference-ui="true"] .camp-story,
    .camp-screen[data-reference-ui="true"] .camp-campaign,
    .camp-screen[data-reference-ui="true"] .camp-actions,
    .camp-screen[data-reference-ui="true"] .camp-relations-panel,
    .camp-screen[data-reference-ui="true"] .camp-log,
    .camp-screen[data-reference-ui="true"] .camp-day-track {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head > div:first-child,
    .camp-screen[data-reference-ui="true"] .camp-clock span,
    .camp-screen[data-reference-ui="true"] .camp-menu-button,
    .camp-screen[data-reference-ui="true"] .camp-profile-main,
    .camp-screen[data-reference-ui="true"] .camp-map-button,
    .camp-screen[data-reference-ui="true"] .camp-dock-button,
    .camp-screen[data-reference-ui="true"] .camp-roster-button {
      border: 0 !important;
      border-radius: 5px !important;
      color: var(--aegis-ink) !important;
      background:
        linear-gradient(135deg, rgba(255, 245, 190, 0.1), transparent 22%),
        linear-gradient(180deg, rgba(44, 27, 30, 0.94), rgba(8, 8, 15, 0.94)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 244, 198, 0.1),
        inset 0 0 0 2px rgba(92, 55, 21, 0.62),
        0 0 0 1px var(--aegis-line),
        0 10px 24px rgba(0, 0, 0, 0.36) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head > div:first-child::before,
    .camp-screen[data-reference-ui="true"] .camp-clock span::before,
    .camp-screen[data-reference-ui="true"] .camp-profile-main::before,
    .camp-screen[data-reference-ui="true"] .camp-dock-button::after,
    .camp-screen[data-reference-ui="true"] .camp-roster-button::after {
      content: "";
      position: absolute;
      inset: 3px;
      border-radius: 3px;
      pointer-events: none;
      background: linear-gradient(115deg, rgba(255, 255, 255, 0.12), transparent 28%, transparent 72%, rgba(255, 170, 100, 0.08));
      opacity: 0.92;
      mix-blend-mode: screen;
    }

    .camp-screen[data-reference-ui="true"] .camp-head > div:first-child {
      display: grid !important;
      align-content: center !important;
      padding: 0 18px !important;
      background:
        linear-gradient(90deg, rgba(91, 29, 62, 0.72), rgba(14, 10, 20, 0.94)),
        var(--aegis-panel) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head h2 {
      margin: 0 !important;
      color: #ffd4ec !important;
      font-size: 27px !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-shadow: 0 0 16px rgba(255, 92, 168, 0.32), 0 2px 0 #120711 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head p {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span {
      position: relative;
      display: grid !important;
      grid-template-columns: 28px minmax(0, 1fr) 24px !important;
      align-items: center !important;
      gap: 6px !important;
      background:
        linear-gradient(180deg, rgba(27, 20, 26, 0.98), rgba(7, 8, 14, 0.96)),
        var(--aegis-panel-deep) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span::before {
      position: static;
      inset: auto;
      width: 25px;
      height: 25px;
      border-radius: 50%;
      background:
        radial-gradient(circle at 35% 28%, #fff8b8 0 13%, transparent 14%),
        radial-gradient(circle, #ffd76c 0 42%, #b87625 43% 72%, #432212 73% 100%);
      opacity: 1;
      box-shadow: inset 0 0 0 2px rgba(255, 245, 188, 0.48), 0 0 12px rgba(255, 206, 96, 0.32);
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(1) {
      grid-template-columns: 1fr !important;
      justify-items: center !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(1)::before,
    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(1)::after {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(3)::before {
      border-radius: 6px;
      background:
        linear-gradient(135deg, #e7ffff, #4dbbff 44%, #2848bd 45% 100%);
      box-shadow: inset 0 0 0 1px rgba(226, 255, 255, 0.62), 0 0 14px rgba(84, 200, 255, 0.36);
      clip-path: polygon(50% 0, 100% 34%, 82% 100%, 18% 100%, 0 34%);
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(4)::before {
      border-radius: 5px;
      background: linear-gradient(135deg, #d5ff8a, #54d969 48%, #127b44 49% 100%);
      clip-path: polygon(45% 0, 74% 0, 58% 37%, 86% 37%, 32% 100%, 43% 54%, 16% 54%);
      box-shadow: 0 0 14px rgba(112, 255, 134, 0.42);
    }

    .camp-screen[data-reference-ui="true"] .camp-clock strong {
      color: #ffeec0 !important;
      font-size: 17px !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-shadow: 0 0 10px rgba(255, 209, 108, 0.32) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:not(:first-child)::after {
      content: "+" !important;
      position: static;
      display: grid !important;
      place-items: center !important;
      width: 24px !important;
      height: 24px !important;
      margin: 0 !important;
      border: 0 !important;
      border-radius: 3px !important;
      color: #fff1ae !important;
      background: linear-gradient(180deg, rgba(111, 63, 30, 0.9), rgba(25, 16, 14, 0.96));
      box-shadow: inset 0 0 0 1px rgba(255, 233, 165, 0.32);
    }

    .camp-screen[data-reference-ui="true"] .camp-menu-button {
      display: grid !important;
      place-items: center !important;
      padding: 0 !important;
      font-size: 0 !important;
      background:
        url("../assets/runtime/camp/icons/ui-menu-button-v01.png") center / 74% 74% no-repeat,
        linear-gradient(180deg, rgba(42, 27, 28, 0.96), rgba(6, 7, 12, 0.96)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-menu-button::before {
      content: "";
      width: 24px;
      height: 17px;
      border-top: 4px solid #ffe4a2;
      border-bottom: 4px solid #ffe4a2;
      box-shadow: 0 7px 0 #ffe4a2, 0 0 13px rgba(255, 210, 116, 0.35);
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -8px !important;
      top: 54px !important;
      width: 548px !important;
      height: 600px !important;
      z-index: 42 !important;
      filter:
        drop-shadow(0 28px 32px rgba(0, 0, 0, 0.68))
        drop-shadow(0 0 34px rgba(255, 72, 164, 0.24)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait::before {
      content: "";
      position: absolute;
      left: -28px;
      right: 24px;
      bottom: -26px;
      height: 116px;
      border-radius: 50%;
      background: radial-gradient(ellipse, rgba(0, 0, 0, 0.62), transparent 72%);
      filter: blur(8px);
      z-index: -1;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img {
      width: 100% !important;
      height: 100% !important;
      object-fit: contain !important;
      object-position: left bottom !important;
      transform: scale(1.08) translate(-12px, 10px);
      transform-origin: left bottom;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video {
      position: absolute !important;
      left: -8px !important;
      top: 54px !important;
      width: 548px !important;
      height: 600px !important;
      z-index: 43 !important;
      object-fit: contain !important;
      object-position: left bottom !important;
      opacity: 0 !important;
      pointer-events: none;
      filter:
        drop-shadow(0 28px 32px rgba(0, 0, 0, 0.68))
        drop-shadow(0 0 34px rgba(255, 72, 164, 0.24)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source {
      opacity: 1 !important;
    }

    .camp-screen[data-reference-ui="true"].has-camp-showcase-video .camp-portrait img {
      opacity: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-queen-info {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      left: 42px !important;
      top: 610px !important;
      width: 230px !important;
      height: 142px !important;
      padding: 14px 15px !important;
      overflow: hidden !important;
      background:
        linear-gradient(90deg, rgba(63, 42, 24, 0.84), rgba(11, 9, 14, 0.92)),
        url("../assets/runtime/camp/cards/roster-card-frame-selected-v01.png") center / 100% 100% no-repeat !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title h3 {
      color: #ffe49e !important;
      font-size: 17px !important;
      max-width: 180px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title span {
      color: rgba(255, 226, 190, 0.78) !important;
      font-size: 12px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats {
      margin-top: 13px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span {
      color: #ffe0a2 !important;
      font-size: 15px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats strong {
      color: #fff4b8 !important;
      font-size: 15px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button {
      min-width: 72px !important;
      height: 29px !important;
      padding: 0 10px !important;
      border-radius: 3px !important;
      color: #fff0c6 !important;
      font-size: 15px !important;
      letter-spacing: 0 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.64);
      background:
        linear-gradient(180deg, rgba(44, 32, 27, 0.95), rgba(6, 7, 12, 0.95)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 0 0 1px rgba(245, 200, 107, 0.72),
        0 8px 16px rgba(0, 0, 0, 0.42),
        0 0 12px rgba(255, 178, 92, 0.16) !important;
      transition: transform 140ms ease, box-shadow 140ms ease, filter 140ms ease;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button::after {
      left: 50% !important;
      top: 100% !important;
      width: 2px !important;
      height: 18px !important;
      background: linear-gradient(180deg, rgba(255, 229, 152, 0.8), rgba(255, 229, 152, 0)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-map-button:focus-visible {
      transform: translateY(-2px) !important;
      filter: brightness(1.1);
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.14),
        0 0 0 1px rgba(255, 236, 168, 0.92),
        0 10px 18px rgba(0, 0, 0, 0.46),
        0 0 20px rgba(255, 191, 91, 0.32) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button:active:not(:disabled) {
      transform: translateY(1px) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock {
      gap: 8px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button {
      position: relative !important;
      grid-template-rows: 68px auto !important;
      gap: 7px !important;
      padding: 15px 9px 14px !important;
      overflow: hidden !important;
      background:
        linear-gradient(140deg, rgba(255, 241, 173, 0.12), transparent 28%),
        linear-gradient(180deg, rgba(34, 25, 25, 0.98), rgba(5, 6, 11, 0.98)) !important;
      transition: transform 140ms ease, filter 140ms ease, box-shadow 140ms ease;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary {
      background:
        linear-gradient(140deg, rgba(255, 246, 190, 0.2), transparent 30%),
        linear-gradient(180deg, rgba(105, 49, 35, 0.98), rgba(16, 10, 12, 0.98)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 244, 198, 0.16),
        inset 0 0 0 2px rgba(109, 65, 23, 0.72),
        0 0 0 1px rgba(255, 226, 132, 0.9),
        0 0 24px rgba(255, 128, 72, 0.25),
        0 12px 26px rgba(0, 0, 0, 0.4) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video {
      width: 62px !important;
      height: 62px !important;
      object-fit: contain !important;
      filter: drop-shadow(0 7px 10px rgba(0, 0, 0, 0.45)) drop-shadow(0 0 10px rgba(255, 210, 112, 0.2));
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span {
      color: #ffe9b4 !important;
      font-size: 24px !important;
      letter-spacing: 0.08em !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.6), 0 0 12px rgba(255, 201, 103, 0.28);
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-dock-button:focus-visible {
      transform: translateX(-4px) !important;
      filter: brightness(1.08);
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:active:not(:disabled) {
      transform: translateX(-2px) scale(0.98) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster {
      left: 276px !important;
      top: 626px !important;
      width: 691px !important;
      height: 131px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button {
      position: relative !important;
      overflow: hidden !important;
      padding: 6px !important;
      background:
        url("../assets/runtime/camp/cards/roster-card-frame-default-v01.png") center / 100% 100% no-repeat,
        linear-gradient(180deg, rgba(41, 28, 29, 0.9), rgba(7, 7, 13, 0.92)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.06),
        0 0 0 1px rgba(245, 200, 107, 0.48),
        0 12px 20px rgba(0, 0, 0, 0.35) !important;
      transition: transform 150ms ease, filter 150ms ease, box-shadow 150ms ease;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button.is-selected {
      background:
        url("../assets/runtime/camp/cards/roster-card-frame-selected-v01.png") center / 100% 100% no-repeat,
        linear-gradient(180deg, rgba(61, 35, 35, 0.94), rgba(8, 8, 15, 0.94)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 232, 156, 0.9),
        0 0 24px var(--rarity-glow, rgba(255, 208, 116, 0.34)),
        0 14px 24px rgba(0, 0, 0, 0.38) !important;
      transform: translateY(-5px) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-roster-button:focus-visible {
      transform: translateY(-5px) !important;
      filter: brightness(1.08);
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button:active:not(:disabled) {
      transform: translateY(-2px) scale(0.985) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait {
      height: 80px !important;
      border-radius: 3px !important;
      background: rgba(0, 0, 0, 0.32) !important;
      box-shadow: inset 0 0 0 1px rgba(255, 230, 178, 0.16);
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait img {
      object-fit: cover !important;
      object-position: center 16% !important;
      transform: scale(1.08);
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name {
      padding: 4px 4px 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name strong {
      color: #ffe6ae !important;
      font-size: 14px !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.58);
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name span,
    .camp-screen[data-reference-ui="true"] .camp-roster-name i {
      color: #ffd76d !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button .camp-rank-pill {
      border: 0 !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 240, 190, 0.24),
        0 0 12px var(--rarity-glow, rgba(255, 208, 116, 0.28)) !important;
    }

    .top-hud .command-row button {
      border: 0 !important;
      border-radius: 5px !important;
      background:
        linear-gradient(135deg, rgba(255, 242, 180, 0.12), transparent 28%),
        linear-gradient(180deg, rgba(37, 26, 31, 0.94), rgba(6, 8, 17, 0.94)) !important;
      color: #ffe8bc !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.06),
        inset 0 0 0 2px rgba(92, 55, 21, 0.46),
        0 0 0 1px rgba(245, 200, 107, 0.42),
        0 8px 18px rgba(0, 0, 0, 0.28) !important;
      transition: transform 120ms ease, filter 120ms ease, box-shadow 120ms ease;
    }

    .top-hud .command-row button.primary {
      background:
        linear-gradient(135deg, rgba(255, 242, 180, 0.2), transparent 28%),
        linear-gradient(180deg, rgba(98, 42, 51, 0.96), rgba(18, 10, 19, 0.96)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        inset 0 0 0 2px rgba(107, 62, 22, 0.58),
        0 0 0 1px rgba(255, 218, 126, 0.62),
        0 0 18px rgba(255, 107, 166, 0.2),
        0 9px 20px rgba(0, 0, 0, 0.3) !important;
    }

    .top-hud .command-row button:hover:not(:disabled),
    .top-hud .command-row button:focus-visible {
      transform: translateY(-2px);
      filter: brightness(1.1);
    }

    .top-hud .command-row button:active:not(:disabled) {
      transform: translateY(1px) scale(0.985);
    }

    /* Batch 04 runtime asset replacement pass. */
    .story-backdrop {
      background:
        linear-gradient(90deg, rgba(2, 4, 12, 0.44), rgba(2, 4, 12, 0.18) 42%, rgba(2, 4, 12, 0.72)),
        var(--story-scene, none) center / cover no-repeat,
        var(--story-portrait, none) 14% 42% / min(48vw, 520px) auto no-repeat !important;
    }

    .camp-screen {
      --batch04-card-default: url("../assets/runtime/camp/batch04/cards/roster/default.png");
      --batch04-card-selected: url("../assets/runtime/camp/batch04/cards/roster/selected.png");
      --batch04-card-locked: url("../assets/runtime/camp/batch04/cards/roster/locked.png");
    }

    .camp-screen[data-reference-ui="true"],
    .camp-screen:not([data-reference-ui="false"]) {
      background:
        radial-gradient(circle at 27% 22%, rgba(255, 95, 165, 0.2), transparent 24%),
        radial-gradient(circle at 74% 12%, rgba(255, 200, 88, 0.18), transparent 30%),
        linear-gradient(90deg, rgba(4, 3, 9, 0.9), rgba(4, 5, 15, 0.1) 34%, rgba(2, 4, 14, 0.1) 72%, rgba(2, 3, 10, 0.62)),
        url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png") center / cover no-repeat !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(2)::before {
      background: url("../assets/runtime/camp/batch04/items/resources/gold.png") center / contain no-repeat !important;
      clip-path: none !important;
      border-radius: 50% !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(3)::before {
      background: url("../assets/runtime/camp/batch04/items/resources/diamond.png") center / contain no-repeat !important;
      clip-path: none !important;
      border-radius: 7px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(4)::before {
      background: url("../assets/runtime/camp/batch04/items/resources/energy.png") center / contain no-repeat !important;
      clip-path: none !important;
      border-radius: 6px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      background:
        linear-gradient(90deg, rgba(63, 42, 24, 0.84), rgba(11, 9, 14, 0.92)),
        var(--batch04-card-selected) center / 100% 100% no-repeat !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button,
    .camp-roster-button {
      background:
        radial-gradient(circle at 50% 5%, var(--rarity-glow, rgba(255, 220, 130, 0.18)), transparent 46%),
        var(--batch04-card-default) center / 100% 100% no-repeat,
        linear-gradient(180deg, rgba(16, 15, 24, 0.96), rgba(3, 4, 9, 0.96)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button.is-selected,
    .camp-roster-button.is-selected {
      background:
        radial-gradient(circle at 52% 10%, var(--rarity-glow, rgba(255, 220, 130, 0.28)), transparent 48%),
        var(--batch04-card-selected) center / 100% 100% no-repeat,
        linear-gradient(180deg, rgba(34, 23, 22, 0.96), rgba(4, 4, 10, 0.96)) !important;
    }

    .camp-shop-card {
      position: relative;
      overflow: hidden;
    }

    .camp-shop-card::before {
      content: "";
      position: absolute;
      inset: 68px 18px auto auto;
      width: 270px;
      height: 150px;
      border-radius: 10px;
      pointer-events: none;
      opacity: 0.24;
      background:
        linear-gradient(90deg, rgba(5, 8, 18, 0.28), rgba(5, 8, 18, 0.04)),
        var(--shop-feature-art, none) center / cover no-repeat;
      filter: saturate(1.12) contrast(1.04);
      mask-image: linear-gradient(90deg, transparent, #000 18%, #000 80%, transparent);
    }

    .camp-shop-hero::before {
      content: "";
      position: absolute;
      right: 12px;
      top: 10px;
      width: 66px;
      height: 66px;
      border-radius: 16px;
      opacity: 0.34;
      pointer-events: none;
      background: var(--shop-feature-icon, none) center / contain no-repeat;
      filter: drop-shadow(0 0 12px rgba(255, 214, 126, 0.24));
      z-index: 1;
    }

    .camp-shop-item::before {
      display: none !important;
    }

    .camp-shop-item .facility-loop-video,
    .camp-action .facility-loop-video,
    .camp-dock-button .facility-loop-video {
      object-fit: contain !important;
      border-radius: 10px;
      background:
        radial-gradient(circle at 35% 25%, rgba(255, 255, 255, 0.16), transparent 34%),
        rgba(4, 5, 12, 0.48);
      box-shadow: inset 0 0 0 1px rgba(255, 230, 170, 0.08);
    }

    .camp-shop-item .facility-loop-video {
      width: 52px !important;
      height: 52px !important;
    }

    .camp-dock-button .facility-loop-video {
      width: 58px !important;
      height: 58px !important;
      padding: 3px;
    }

    /* IAB visual bugfix pass: restore mobile-game layering after Batch 04 asset swap. */
    .camp-screen[data-reference-ui="true"] .camp-grid,
    .camp-screen[data-reference-ui="true"] .camp-profile,
    .camp-screen[data-reference-ui="true"] .camp-side {
      border: 0 !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-side {
      left: 318px !important;
      right: 118px !important;
      top: 0 !important;
      bottom: -8px !important;
      overflow: hidden !important;
      border-radius: 0 !important;
      background:
        linear-gradient(90deg, rgba(5, 4, 12, 0.74), rgba(5, 4, 12, 0.08) 18%, rgba(5, 4, 12, 0.02) 70%, rgba(5, 4, 12, 0.5)),
        linear-gradient(180deg, rgba(4, 5, 14, 0.04), rgba(4, 5, 14, 0.3)),
        url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png") center / cover no-repeat !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-side::before {
      opacity: 0.78 !important;
      background:
        radial-gradient(circle at 55% 50%, rgba(255, 120, 190, 0.1), transparent 25%),
        linear-gradient(90deg, rgba(2, 3, 9, 0.22), transparent 34%, transparent 72%, rgba(2, 3, 9, 0.34)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-side::after {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile {
      left: 0 !important;
      top: 0 !important;
      bottom: -98px !important;
      width: 560px !important;
      z-index: 60 !important;
      overflow: visible !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video {
      display: block !important;
      left: -54px !important;
      top: 34px !important;
      bottom: auto !important;
      width: 560px !important;
      height: 670px !important;
      transform: none !important;
      object-fit: contain !important;
      object-position: left bottom !important;
      border: 0 !important;
      border-radius: 0 !important;
      background-color: transparent !important;
      pointer-events: none !important;
      filter:
        drop-shadow(0 30px 34px rgba(0, 0, 0, 0.72))
        drop-shadow(0 0 34px rgba(255, 76, 166, 0.26)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      z-index: 66 !important;
      opacity: 1 !important;
      background-image:
        linear-gradient(180deg, transparent 69%, rgba(4, 3, 9, 0.62)),
        var(--portrait) !important;
      background-size: auto, contain !important;
      background-position: center, left bottom !important;
      background-repeat: no-repeat, no-repeat !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img {
      display: block !important;
      width: 100% !important;
      height: 100% !important;
      opacity: 1 !important;
      visibility: visible !important;
      object-fit: contain !important;
      object-position: left bottom !important;
      transform: scale(1.04) translate(-6px, 10px) !important;
      transform-origin: left bottom !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video {
      z-index: 67 !important;
      opacity: 0 !important;
      background: transparent !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source {
      opacity: 0.86 !important;
    }

    .camp-screen[data-reference-ui="true"].has-camp-showcase-video .camp-portrait img {
      opacity: 1 !important;
    }

    /* True final comment override: this must stay after every Batch 04 fallback rule. */
    .camp-screen[data-reference-ui="true"] .camp-profile {
      width: 700px !important;
      z-index: 72 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -176px !important;
      top: -58px !important;
      width: 800px !important;
      height: 956px !important;
      z-index: 74 !important;
      overflow: visible !important;
      background-image: none !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait {
      left: -190px !important;
      top: 18px !important;
      width: 760px !important;
      height: 908px !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-portrait {
      left: -205px !important;
      top: 14px !important;
      width: 790px !important;
      height: 944px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      top: 544px !important;
      z-index: 128 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock {
      right: 6px !important;
      top: 74px !important;
      bottom: 38px !important;
      width: 118px !important;
      gap: 7px !important;
      z-index: 150 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button {
      height: auto !important;
      min-width: 0 !important;
      display: grid !important;
      grid-template-rows: 58px 24px !important;
      place-items: center !important;
      gap: 3px !important;
      padding: 10px 8px 9px !important;
      clip-path: polygon(9px 0, 100% 0, 100% calc(100% - 9px), calc(100% - 9px) 100%, 0 100%, 0 9px) !important;
      border: 0 !important;
      border-radius: 0 !important;
      background:
        linear-gradient(135deg, rgba(255, 245, 184, 0.18), transparent 30%),
        radial-gradient(circle at 50% 20%, rgba(255, 207, 112, 0.14), transparent 48%),
        linear-gradient(180deg, rgba(43, 29, 24, 0.98), rgba(6, 5, 9, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(236, 183, 91, 0.88),
        inset 0 0 0 2px rgba(93, 57, 28, 0.7),
        inset 0 13px 24px rgba(255, 224, 144, 0.08),
        inset 0 -22px 26px rgba(0, 0, 0, 0.42),
        0 12px 22px rgba(0, 0, 0, 0.5) !important;
      overflow: hidden !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before,
    .camp-screen[data-reference-ui="true"] .camp-dock-button::after {
      content: "" !important;
      display: block !important;
      position: absolute !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before {
      inset: 6px !important;
      width: auto !important;
      height: auto !important;
      transform: none !important;
      border: 1px solid rgba(255, 224, 146, 0.28) !important;
      border-radius: 0 !important;
      background:
        linear-gradient(180deg, rgba(255, 244, 180, 0.05), transparent 44%),
        radial-gradient(circle at 50% 30%, rgba(255, 202, 102, 0.13), transparent 48%) !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::after {
      left: 12px !important;
      right: 12px !important;
      top: 8px !important;
      bottom: auto !important;
      height: 1px !important;
      border-radius: 0 !important;
      background: linear-gradient(90deg, transparent, rgba(255, 235, 160, 0.72), transparent) !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary {
      background:
        linear-gradient(135deg, rgba(255, 246, 190, 0.28), transparent 30%),
        radial-gradient(circle at 50% 20%, rgba(255, 128, 74, 0.26), transparent 48%),
        linear-gradient(180deg, rgba(117, 55, 34, 0.98), rgba(20, 8, 10, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 226, 134, 0.98),
        inset 0 0 0 2px rgba(125, 72, 28, 0.86),
        0 0 27px rgba(255, 128, 70, 0.32),
        0 13px 24px rgba(0, 0, 0, 0.52) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video {
      grid-row: 1 !important;
      position: relative !important;
      inset: auto !important;
      width: 50px !important;
      height: 50px !important;
      padding: 0 !important;
      margin: 0 !important;
      align-self: center !important;
      justify-self: center !important;
      z-index: 3 !important;
      transform: none !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      object-fit: contain !important;
      filter:
        drop-shadow(0 7px 9px rgba(0, 0, 0, 0.56))
        drop-shadow(0 0 10px rgba(255, 218, 130, 0.28)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span {
      grid-row: 2 !important;
      position: relative !important;
      z-index: 4 !important;
      align-self: center !important;
      justify-self: center !important;
      font-size: 18px !important;
      line-height: 1 !important;
      letter-spacing: 0.02em !important;
      white-space: nowrap !important;
      color: #ffe9b4 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.72), 0 0 12px rgba(255, 205, 108, 0.22) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-dock-button:focus-visible {
      transform: translateX(-5px) !important;
      filter: brightness(1.1) saturate(1.08) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:active:not(:disabled) {
      transform: translateX(-3px) translateY(1px) scale(0.985) !important;
      filter: brightness(0.94) !important;
    }

    /* Comment pass: larger heroine, replaced action rail, polished nameplate, and map-anchored plaques. */
    .camp-screen[data-reference-ui="true"] .camp-head {
      z-index: 180 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile {
      width: 700px !important;
      z-index: 72 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -178px !important;
      top: -112px !important;
      width: 840px !important;
      height: 1005px !important;
      z-index: 74 !important;
      overflow: visible !important;
      background-image: none !important;
      filter:
        drop-shadow(0 38px 40px rgba(0, 0, 0, 0.78))
        drop-shadow(0 0 42px rgba(255, 83, 176, 0.28)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait::before {
      left: 54px !important;
      right: 250px !important;
      bottom: 132px !important;
      height: 170px !important;
      opacity: 0.82 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img {
      transform: none !important;
      width: 100% !important;
      height: 100% !important;
      object-fit: contain !important;
      object-position: left bottom !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      left: 26px !important;
      top: 548px !important;
      width: 246px !important;
      height: 116px !important;
      padding: 12px 15px 11px !important;
      border-radius: 3px !important;
      background:
        linear-gradient(90deg, rgba(15, 10, 12, 0.82), rgba(54, 31, 20, 0.72) 45%, rgba(9, 8, 14, 0.92)),
        linear-gradient(180deg, rgba(255, 235, 168, 0.13), transparent 36%),
        var(--batch04-card-selected) center / 100% 100% no-repeat !important;
      box-shadow:
        0 0 0 1px rgba(255, 232, 158, 0.78),
        inset 0 0 0 1px rgba(255, 255, 255, 0.12),
        inset 0 -18px 24px rgba(0, 0, 0, 0.28),
        0 16px 32px rgba(0, 0, 0, 0.52),
        0 0 22px rgba(255, 126, 172, 0.18) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main::after {
      content: "";
      position: absolute;
      left: 14px;
      right: 14px;
      bottom: 9px;
      height: 1px;
      background: linear-gradient(90deg, transparent, rgba(255, 222, 138, 0.58), transparent);
      pointer-events: none;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title h3 {
      color: #ffe8aa !important;
      font-size: 16px !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.62), 0 0 12px rgba(255, 193, 96, 0.24) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title span {
      color: rgba(255, 225, 192, 0.78) !important;
      font-size: 11px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats {
      margin-top: 17px !important;
      gap: 12px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span:nth-child(1),
    .camp-screen[data-reference-ui="true"] .camp-stats span:nth-child(3) {
      align-items: center !important;
      gap: 4px !important;
      color: #fff0ba !important;
      font-size: 12px !important;
      text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span:nth-child(1)::before,
    .camp-screen[data-reference-ui="true"] .camp-stats span:nth-child(3)::before {
      content: "";
      width: 8px;
      height: 8px;
      border: 1px solid rgba(255, 231, 166, 0.72);
      transform: rotate(45deg);
      box-shadow: 0 0 8px rgba(255, 210, 112, 0.24);
    }

    .camp-screen[data-reference-ui="true"] .camp-side {
      left: 240px !important;
      right: 110px !important;
      background:
        linear-gradient(90deg, rgba(5, 4, 12, 0.54), rgba(5, 4, 12, 0.04) 21%, rgba(5, 4, 12, 0.01) 74%, rgba(5, 4, 12, 0.42)),
        linear-gradient(180deg, rgba(4, 5, 14, 0.02), rgba(4, 5, 14, 0.22)),
        url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png") 47% 50% / cover no-repeat !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-nav {
      inset: 42px 0 58px 0 !important;
      z-index: 8 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button {
      min-width: 68px !important;
      height: 28px !important;
      padding: 0 10px !important;
      border: 0 !important;
      border-radius: 3px !important;
      background:
        linear-gradient(135deg, rgba(255, 238, 172, 0.14), transparent 32%),
        linear-gradient(180deg, rgba(43, 30, 22, 0.96), rgba(6, 6, 10, 0.96)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 222, 136, 0.72),
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 8px 13px rgba(0, 0, 0, 0.42),
        0 0 10px rgba(255, 182, 92, 0.18) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button::after {
      height: 12px !important;
      opacity: 0.72 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="arcana"] { left: 78.5% !important; top: 5.5% !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="chat"] { left: 68.5% !important; top: 25.5% !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="gear"] { left: 44.5% !important; top: 18% !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="grace"] { left: 37% !important; top: 42.5% !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="date"] { left: 73% !important; top: 42.5% !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="deploy"] { left: 91% !important; top: 22% !important; }
    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="medical"] { left: 86% !important; top: 38% !important; }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock {
      right: 4px !important;
      top: 68px !important;
      bottom: 34px !important;
      width: 112px !important;
      gap: 5px !important;
      z-index: 150 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button {
      position: relative !important;
      display: grid !important;
      grid-template-rows: 53px auto !important;
      gap: 3px !important;
      padding: 9px 7px 10px !important;
      border: 0 !important;
      border-radius: 0 !important;
      clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px) !important;
      background:
        linear-gradient(135deg, rgba(255, 245, 184, 0.18), transparent 28%),
        radial-gradient(circle at 50% 18%, rgba(255, 207, 112, 0.12), transparent 45%),
        linear-gradient(180deg, rgba(39, 28, 24, 0.98), rgba(5, 5, 9, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(236, 183, 91, 0.88),
        inset 0 0 0 2px rgba(93, 57, 28, 0.7),
        inset 0 13px 24px rgba(255, 224, 144, 0.08),
        inset 0 -22px 26px rgba(0, 0, 0, 0.42),
        0 12px 22px rgba(0, 0, 0, 0.5) !important;
      overflow: hidden !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before,
    .camp-screen[data-reference-ui="true"] .camp-dock-button::after {
      content: "" !important;
      display: block !important;
      position: absolute !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before {
      inset: 5px !important;
      border: 1px solid rgba(255, 224, 146, 0.28) !important;
      border-radius: 0 !important;
      background: linear-gradient(180deg, rgba(255, 244, 180, 0.04), transparent 44%) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::after {
      left: 10px !important;
      right: 10px !important;
      top: 7px !important;
      height: 1px !important;
      background: linear-gradient(90deg, transparent, rgba(255, 235, 160, 0.72), transparent) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary {
      background:
        linear-gradient(135deg, rgba(255, 244, 188, 0.28), transparent 30%),
        radial-gradient(circle at 50% 20%, rgba(255, 130, 82, 0.26), transparent 48%),
        linear-gradient(180deg, rgba(113, 55, 34, 0.98), rgba(20, 8, 10, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 226, 134, 0.96),
        inset 0 0 0 2px rgba(120, 70, 28, 0.86),
        inset 0 14px 22px rgba(255, 222, 142, 0.12),
        0 0 26px rgba(255, 126, 68, 0.32),
        0 13px 26px rgba(0, 0, 0, 0.54) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video {
      width: 55px !important;
      height: 55px !important;
      z-index: 2 !important;
      filter:
        drop-shadow(0 7px 9px rgba(0, 0, 0, 0.56))
        drop-shadow(0 0 10px rgba(255, 218, 130, 0.28)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span {
      position: relative !important;
      z-index: 2 !important;
      font-size: 21px !important;
      letter-spacing: 0.04em !important;
      color: #ffe9b4 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.72), 0 0 12px rgba(255, 205, 108, 0.22) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-dock-button:focus-visible {
      transform: translateX(-4px) !important;
      filter: brightness(1.1) saturate(1.08) !important;
      box-shadow:
        0 0 0 1px rgba(255, 239, 174, 1),
        inset 0 0 0 2px rgba(120, 70, 28, 0.86),
        0 0 22px rgba(255, 190, 90, 0.28),
        0 14px 26px rgba(0, 0, 0, 0.52) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:active:not(:disabled) {
      transform: translateX(-2px) translateY(1px) scale(0.985) !important;
      filter: brightness(0.94) !important;
    }

    /* Final comment polish: keep the 150% read, but anchor heads and replace rail cards with badge buttons. */
    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -176px !important;
      top: -58px !important;
      width: 800px !important;
      height: 956px !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait {
      left: -190px !important;
      top: 18px !important;
      width: 760px !important;
      height: 908px !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-portrait {
      left: -205px !important;
      top: 14px !important;
      width: 790px !important;
      height: 944px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      top: 544px !important;
      z-index: 128 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock {
      right: 6px !important;
      top: 74px !important;
      bottom: 38px !important;
      width: 118px !important;
      gap: 7px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button {
      height: auto !important;
      grid-template-rows: 58px 24px !important;
      gap: 3px !important;
      padding: 10px 8px 9px !important;
      clip-path: polygon(9px 0, 100% 0, 100% calc(100% - 9px), calc(100% - 9px) 100%, 0 100%, 0 9px) !important;
      border-radius: 0 !important;
      background:
        linear-gradient(135deg, rgba(255, 245, 184, 0.18), transparent 30%),
        radial-gradient(circle at 50% 20%, rgba(255, 207, 112, 0.14), transparent 48%),
        linear-gradient(180deg, rgba(43, 29, 24, 0.98), rgba(6, 5, 9, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(236, 183, 91, 0.88),
        inset 0 0 0 2px rgba(93, 57, 28, 0.7),
        inset 0 13px 24px rgba(255, 224, 144, 0.08),
        inset 0 -22px 26px rgba(0, 0, 0, 0.42),
        0 12px 22px rgba(0, 0, 0, 0.5) !important;
      overflow: hidden !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before {
      inset: 6px !important;
      width: auto !important;
      height: auto !important;
      transform: none !important;
      border: 1px solid rgba(255, 224, 146, 0.28) !important;
      border-radius: 0 !important;
      background:
        linear-gradient(180deg, rgba(255, 244, 180, 0.05), transparent 44%),
        radial-gradient(circle at 50% 30%, rgba(255, 202, 102, 0.13), transparent 48%) !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::after {
      left: 12px !important;
      right: 12px !important;
      top: 8px !important;
      bottom: auto !important;
      height: 1px !important;
      border-radius: 0 !important;
      background: linear-gradient(90deg, transparent, rgba(255, 235, 160, 0.72), transparent) !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary::before {
      background:
        linear-gradient(180deg, rgba(255, 244, 180, 0.08), transparent 44%),
        radial-gradient(circle at 50% 32%, rgba(255, 128, 74, 0.24), transparent 52%) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary {
      background:
        linear-gradient(135deg, rgba(255, 246, 190, 0.28), transparent 30%),
        radial-gradient(circle at 50% 20%, rgba(255, 128, 74, 0.26), transparent 48%),
        linear-gradient(180deg, rgba(117, 55, 34, 0.98), rgba(20, 8, 10, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 226, 134, 0.98),
        inset 0 0 0 2px rgba(125, 72, 28, 0.86),
        0 0 27px rgba(255, 128, 70, 0.32),
        0 13px 24px rgba(0, 0, 0, 0.52) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video {
      grid-row: 1 !important;
      position: relative !important;
      width: 50px !important;
      height: 50px !important;
      align-self: center !important;
      justify-self: center !important;
      z-index: 3 !important;
      transform: translateY(0) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span {
      grid-row: 2 !important;
      position: relative !important;
      z-index: 4 !important;
      align-self: center !important;
      justify-self: center !important;
      font-size: 18px !important;
      letter-spacing: 0.02em !important;
      white-space: nowrap !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-dock-button:focus-visible {
      transform: translateX(-5px) !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:active:not(:disabled) {
      transform: translateX(-3px) translateY(1px) scale(0.985) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-queen-info {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      left: 28px !important;
      top: 588px !important;
      bottom: auto !important;
      width: 244px !important;
      height: 126px !important;
      z-index: 90 !important;
      padding: 14px 16px !important;
      pointer-events: auto !important;
      overflow: hidden !important;
      border: 0 !important;
      border-radius: 4px !important;
      background:
        linear-gradient(90deg, rgba(66, 44, 23, 0.78), rgba(12, 9, 14, 0.9)),
        var(--batch04-card-selected) center / 100% 100% no-repeat !important;
      box-shadow:
        0 0 0 1px rgba(255, 225, 148, 0.64),
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 14px 26px rgba(0, 0, 0, 0.46) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats {
      display: flex !important;
      margin-top: 14px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span:nth-child(1),
    .camp-screen[data-reference-ui="true"] .camp-stats span:nth-child(3) {
      display: inline-flex !important;
      width: auto !important;
      border: 0 !important;
      background: transparent !important;
      padding: 0 !important;
      color: #ffe0a2 !important;
      font-size: 13px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock {
      right: 8px !important;
      top: 74px !important;
      bottom: 28px !important;
      width: 118px !important;
      gap: 8px !important;
      z-index: 120 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button {
      grid-template-rows: 58px auto !important;
      gap: 6px !important;
      padding: 10px 8px 12px !important;
      border: 0 !important;
      border-radius: 5px !important;
      background:
        linear-gradient(135deg, rgba(255, 238, 174, 0.16), transparent 30%),
        linear-gradient(180deg, rgba(48, 31, 27, 0.96), rgba(9, 7, 12, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(245, 200, 107, 0.78),
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        inset 0 -18px 28px rgba(0, 0, 0, 0.22),
        0 12px 24px rgba(0, 0, 0, 0.44) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary {
      background:
        linear-gradient(135deg, rgba(255, 242, 186, 0.24), transparent 32%),
        linear-gradient(180deg, rgba(117, 56, 38, 0.98), rgba(24, 11, 13, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 230, 144, 0.95),
        inset 0 0 0 1px rgba(255, 255, 255, 0.1),
        0 0 22px rgba(255, 124, 66, 0.25),
        0 13px 26px rgba(0, 0, 0, 0.46) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video {
      width: 58px !important;
      height: 58px !important;
      padding: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      object-fit: contain !important;
      filter: drop-shadow(0 7px 10px rgba(0, 0, 0, 0.5)) drop-shadow(0 0 9px rgba(255, 213, 128, 0.22)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span {
      font-size: 22px !important;
      line-height: 1 !important;
      letter-spacing: 0.06em !important;
      color: #ffe9b4 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster {
      left: 278px !important;
      right: auto !important;
      bottom: 14px !important;
      top: auto !important;
      width: min(660px, calc(100dvw - 420px)) !important;
      height: 116px !important;
      display: grid !important;
      grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
      gap: 10px !important;
      overflow: visible !important;
      z-index: 96 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button {
      position: relative !important;
      isolation: isolate !important;
      flex: none !important;
      width: auto !important;
      height: 116px !important;
      min-width: 0 !important;
      display: block !important;
      padding: 0 !important;
      overflow: hidden !important;
      border: 0 !important;
      border-radius: 4px !important;
      background:
        radial-gradient(circle at 52% 12%, var(--rarity-glow, rgba(255, 220, 130, 0.22)), transparent 48%),
        linear-gradient(180deg, rgba(14, 12, 19, 0.82), rgba(3, 4, 9, 0.96)),
        var(--batch04-card-default) center / 100% 100% no-repeat !important;
      box-shadow:
        0 0 0 1px rgba(245, 200, 107, 0.56),
        inset 0 0 0 1px rgba(255, 255, 255, 0.07),
        0 12px 21px rgba(0, 0, 0, 0.38) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button.is-selected {
      transform: translateY(-5px) !important;
      background:
        radial-gradient(circle at 50% 10%, var(--rarity-glow, rgba(255, 220, 130, 0.34)), transparent 50%),
        linear-gradient(180deg, rgba(41, 25, 23, 0.86), rgba(3, 4, 9, 0.96)),
        var(--batch04-card-selected) center / 100% 100% no-repeat !important;
      box-shadow:
        0 0 0 1px rgba(255, 232, 156, 0.92),
        0 0 24px var(--rarity-glow, rgba(255, 208, 116, 0.34)),
        0 15px 24px rgba(0, 0, 0, 0.42) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait {
      position: absolute !important;
      inset: 7px 7px 26px 7px !important;
      z-index: 2 !important;
      width: auto !important;
      height: auto !important;
      border-radius: 3px !important;
      overflow: hidden !important;
      background:
        linear-gradient(180deg, transparent 58%, rgba(3, 3, 8, 0.72)),
        var(--portrait) center 12% / cover no-repeat,
        rgba(4, 5, 12, 0.6) !important;
      box-shadow: inset 0 0 0 1px rgba(255, 230, 178, 0.16) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait img {
      display: block !important;
      width: 100% !important;
      height: 100% !important;
      opacity: 1 !important;
      visibility: visible !important;
      object-fit: cover !important;
      object-position: center 10% !important;
      transform: scale(1.02) !important;
      border-radius: inherit !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name {
      position: absolute !important;
      left: 10px !important;
      right: 10px !important;
      bottom: 6px !important;
      z-index: 5 !important;
      display: grid !important;
      grid-template-columns: 1fr auto !important;
      gap: 2px 4px !important;
      align-items: end !important;
      padding: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name strong {
      grid-column: 1 !important;
      font-size: 13px !important;
      line-height: 1 !important;
      color: #ffe9b4 !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      white-space: nowrap !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name span {
      grid-column: 2 !important;
      font-size: 10px !important;
      color: #ffd76d !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name i {
      grid-column: 1 / -1 !important;
      font-size: 11px !important;
      line-height: 1 !important;
      color: #ffd76d !important;
      font-style: normal !important;
      letter-spacing: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button .camp-rank-pill {
      position: absolute !important;
      left: 7px !important;
      top: 7px !important;
      z-index: 6 !important;
      width: 22px !important;
      height: 22px !important;
      min-width: 0 !important;
      padding: 0 !important;
      display: grid !important;
      place-items: center !important;
      border-radius: 50% !important;
      font-size: 10px !important;
    }

    /* Keep the generated Seedance files registered, but use the clean PNG matte in camp until video chroma cleanup passes QA. */
    .camp-screen[data-reference-ui="true"] .camp-side {
      left: 236px !important;
      background:
        linear-gradient(90deg, rgba(5, 4, 12, 0.52), rgba(5, 4, 12, 0.04) 22%, rgba(5, 4, 12, 0.02) 72%, rgba(5, 4, 12, 0.48)),
        linear-gradient(180deg, rgba(4, 5, 14, 0.04), rgba(4, 5, 14, 0.28)),
        url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png") 44% center / cover no-repeat !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source {
      display: none !important;
      opacity: 0 !important;
    }

    .camp-screen[data-reference-ui="true"].has-camp-showcase-video .camp-portrait img {
      opacity: 1 !important;
    }

    /* Last-order correction for user comments. Keep this as the final cascade block. */
    .camp-screen[data-reference-ui="true"] .camp-profile {
      width: 700px !important;
      z-index: 72 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -176px !important;
      top: -58px !important;
      width: 800px !important;
      height: 956px !important;
      z-index: 74 !important;
      overflow: visible !important;
      background-image: none !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait {
      left: -190px !important;
      top: 18px !important;
      width: 760px !important;
      height: 908px !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-portrait {
      left: -205px !important;
      top: 14px !important;
      width: 790px !important;
      height: 944px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      top: 544px !important;
      z-index: 128 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock {
      right: 6px !important;
      top: 74px !important;
      bottom: 38px !important;
      width: 118px !important;
      gap: 7px !important;
      z-index: 150 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button {
      height: auto !important;
      min-width: 0 !important;
      display: grid !important;
      grid-template-rows: 58px 24px !important;
      place-items: center !important;
      gap: 3px !important;
      padding: 10px 8px 9px !important;
      clip-path: polygon(9px 0, 100% 0, 100% calc(100% - 9px), calc(100% - 9px) 100%, 0 100%, 0 9px) !important;
      border: 0 !important;
      border-radius: 0 !important;
      background:
        linear-gradient(135deg, rgba(255, 245, 184, 0.18), transparent 30%),
        radial-gradient(circle at 50% 20%, rgba(255, 207, 112, 0.14), transparent 48%),
        linear-gradient(180deg, rgba(43, 29, 24, 0.98), rgba(6, 5, 9, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(236, 183, 91, 0.88),
        inset 0 0 0 2px rgba(93, 57, 28, 0.7),
        inset 0 13px 24px rgba(255, 224, 144, 0.08),
        inset 0 -22px 26px rgba(0, 0, 0, 0.42),
        0 12px 22px rgba(0, 0, 0, 0.5) !important;
      overflow: hidden !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before,
    .camp-screen[data-reference-ui="true"] .camp-dock-button::after {
      content: "" !important;
      display: block !important;
      position: absolute !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before {
      inset: 6px !important;
      width: auto !important;
      height: auto !important;
      transform: none !important;
      border: 1px solid rgba(255, 224, 146, 0.28) !important;
      border-radius: 0 !important;
      background:
        linear-gradient(180deg, rgba(255, 244, 180, 0.05), transparent 44%),
        radial-gradient(circle at 50% 30%, rgba(255, 202, 102, 0.13), transparent 48%) !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::after {
      left: 12px !important;
      right: 12px !important;
      top: 8px !important;
      bottom: auto !important;
      height: 1px !important;
      border-radius: 0 !important;
      background: linear-gradient(90deg, transparent, rgba(255, 235, 160, 0.72), transparent) !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary {
      background:
        linear-gradient(135deg, rgba(255, 246, 190, 0.28), transparent 30%),
        radial-gradient(circle at 50% 20%, rgba(255, 128, 74, 0.26), transparent 48%),
        linear-gradient(180deg, rgba(117, 55, 34, 0.98), rgba(20, 8, 10, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 226, 134, 0.98),
        inset 0 0 0 2px rgba(125, 72, 28, 0.86),
        0 0 27px rgba(255, 128, 70, 0.32),
        0 13px 24px rgba(0, 0, 0, 0.52) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video {
      grid-row: 1 !important;
      position: relative !important;
      inset: auto !important;
      width: 50px !important;
      height: 50px !important;
      padding: 0 !important;
      margin: 0 !important;
      align-self: center !important;
      justify-self: center !important;
      z-index: 3 !important;
      transform: none !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      object-fit: contain !important;
      filter:
        drop-shadow(0 7px 9px rgba(0, 0, 0, 0.56))
        drop-shadow(0 0 10px rgba(255, 218, 130, 0.28)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span {
      grid-row: 2 !important;
      position: relative !important;
      z-index: 4 !important;
      align-self: center !important;
      justify-self: center !important;
      font-size: 18px !important;
      line-height: 1 !important;
      letter-spacing: 0.02em !important;
      white-space: nowrap !important;
      color: #ffe9b4 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.72), 0 0 12px rgba(255, 205, 108, 0.22) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-dock-button:focus-visible {
      transform: translateX(-5px) !important;
      filter: brightness(1.1) saturate(1.08) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:active:not(:disabled) {
      transform: translateX(-3px) translateY(1px) scale(0.985) !important;
      filter: brightness(0.94) !important;
    }

    /* Battle hand bugfix pass: keep all reference cards visible and make portraits render above the dark card matte. */
    html[data-ui-mode="battle"] .build-panel {
      left: 14px !important;
      right: auto !important;
      bottom: 12px !important;
      width: min(704px, calc(100vw - 28px)) !important;
      min-width: 0 !important;
      max-width: calc(100vw - 28px) !important;
      z-index: 80 !important;
      filter: drop-shadow(0 18px 26px rgba(0, 0, 0, 0.42)) !important;
    }

    html[data-ui-mode="battle"] .build-panel header {
      display: flex !important;
      align-items: center !important;
      justify-content: space-between !important;
      height: 26px !important;
      padding: 0 9px !important;
      margin: 0 0 4px !important;
      border: 1px solid rgba(235, 191, 112, 0.55) !important;
      border-radius: 0 !important;
      background: linear-gradient(180deg, rgba(37, 24, 23, 0.88), rgba(9, 8, 13, 0.86)) !important;
      box-shadow: inset 0 1px 0 rgba(255, 240, 180, 0.12) !important;
    }

    html[data-ui-mode="battle"] .hand-shell,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .hand-shell {
      width: 100% !important;
      min-height: 154px !important;
      padding: 8px 29px 10px !important;
      border-radius: 0 !important;
      border: 1px solid rgba(238, 191, 111, 0.42) !important;
      background:
        linear-gradient(180deg, rgba(255, 229, 172, 0.08), rgba(255, 229, 172, 0.02)),
        linear-gradient(90deg, rgba(44, 20, 22, 0.66), rgba(9, 8, 16, 0.78)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 235, 170, 0.1),
        inset 0 -18px 25px rgba(0, 0, 0, 0.22) !important;
      overflow: hidden !important;
      backdrop-filter: blur(8px) !important;
    }

    html[data-ui-mode="battle"] .hand-shell .type-grid,
    html[data-ui-mode="battle"] .type-grid,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .type-grid {
      width: 100% !important;
      min-width: 0 !important;
      display: grid !important;
      grid-auto-flow: column !important;
      grid-auto-columns: 118px !important;
      gap: 8px !important;
      padding: 0 2px 7px !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      overflow-x: auto !important;
      overflow-y: hidden !important;
      scroll-snap-type: x proximity !important;
    }

    html[data-ui-mode="battle"] .tower-card,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .tower-card {
      position: relative !important;
      width: 118px !important;
      min-width: 118px !important;
      min-height: 132px !important;
      display: grid !important;
      grid-template-rows: 22px 1fr 25px !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px) !important;
      background:
        linear-gradient(180deg, rgba(255, 226, 151, 0.13), rgba(255, 226, 151, 0.03) 23%, rgba(9, 8, 15, 0.94)),
        radial-gradient(circle at 50% 24%, color-mix(in srgb, var(--class-color, #ffd36d) 24%, transparent), transparent 54%),
        linear-gradient(180deg, rgba(35, 26, 26, 0.96), rgba(7, 7, 12, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(237, 196, 112, 0.78),
        inset 0 0 0 1px rgba(82, 49, 28, 0.76),
        inset 0 13px 22px rgba(255, 225, 153, 0.08),
        0 9px 15px rgba(0, 0, 0, 0.38) !important;
      overflow: hidden !important;
      isolation: isolate !important;
      scroll-snap-align: start !important;
      transform: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .portrait {
      position: absolute !important;
      inset: 24px 4px 25px !important;
      z-index: 3 !important;
      display: block !important;
      visibility: visible !important;
      opacity: 1 !important;
      background-color: rgba(13, 10, 17, 0.82) !important;
      background-image:
        radial-gradient(circle at 50% 14%, color-mix(in srgb, var(--class-color, #ffd36d) 22%, transparent), transparent 56%),
        linear-gradient(180deg, rgba(255, 235, 176, 0.05), rgba(0, 0, 0, 0.2)) !important;
      background-repeat: no-repeat !important;
      background-size: cover !important;
      background-position: center 12% !important;
      filter: saturate(1.16) brightness(1.09) contrast(1.05) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 238, 178, 0.12),
        inset 0 -22px 22px rgba(2, 2, 7, 0.42) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-portrait-image {
      position: absolute !important;
      left: 4px !important;
      right: 4px !important;
      top: 24px !important;
      bottom: 25px !important;
      width: calc(100% - 8px) !important;
      height: calc(100% - 49px) !important;
      z-index: 4 !important;
      display: block !important;
      opacity: 1 !important;
      object-fit: cover !important;
      object-position: center 10% !important;
      filter:
        saturate(1.14)
        brightness(1.08)
        contrast(1.05)
        drop-shadow(0 8px 10px rgba(0, 0, 0, 0.48)) !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card::after {
      z-index: 5 !important;
      opacity: 0.18 !important;
      background:
        linear-gradient(180deg, rgba(255, 245, 186, 0.08), transparent 22%),
        linear-gradient(0deg, rgba(0, 0, 0, 0.54) 0 18%, transparent 44%) !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-name,
    html[data-ui-mode="battle"] .tower-card .cost-row {
      position: relative !important;
      z-index: 6 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-rarity-badge {
      position: absolute !important;
      left: 7px !important;
      right: auto !important;
      top: auto !important;
      bottom: 33px !important;
      z-index: 7 !important;
      min-width: 24px !important;
      padding: 3px 5px !important;
      border-radius: 999px !important;
      background: rgba(8, 7, 12, 0.76) !important;
      box-shadow: 0 0 12px var(--rarity-glow, rgba(255, 255, 255, 0.12)) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-skill-ready {
      position: absolute !important;
      right: 7px !important;
      top: auto !important;
      bottom: 33px !important;
      z-index: 7 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability-strip,
    html[data-ui-mode="battle"] .tower-card .card-statline {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-name {
      align-self: stretch !important;
      display: flex !important;
      align-items: center !important;
      padding: 0 7px !important;
      font-size: 12px !important;
      line-height: 1 !important;
      color: #ffeab7 !important;
      background: linear-gradient(90deg, rgba(0, 0, 0, 0.46), rgba(0, 0, 0, 0.12)) !important;
      text-shadow: 0 1px 0 rgba(0, 0, 0, 0.8) !important;
      white-space: nowrap !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row {
      min-height: 25px !important;
      height: 25px !important;
      display: flex !important;
      align-items: center !important;
      justify-content: space-between !important;
      padding: 0 7px !important;
      font-size: 11px !important;
      line-height: 1 !important;
      background: rgba(5, 5, 9, 0.78) !important;
      color: #fff0bc !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row i {
      max-width: 68px !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      white-space: nowrap !important;
      font-style: normal !important;
    }

    html[data-ui-mode="battle"] .tower-card.selected {
      box-shadow:
        0 0 0 1px rgba(255, 235, 150, 0.98),
        0 0 24px rgba(255, 187, 84, 0.42),
        inset 0 0 0 1px rgba(255, 229, 158, 0.32) !important;
      filter: brightness(1.08) saturate(1.08) !important;
    }

    html[data-ui-mode="battle"] .hand-scroll,
    html[data-ui-mode="battle"] .hand-scroll-meter {
      display: block !important;
      z-index: 8 !important;
    }

    /* UI design master pass: Seedance alpha loops are real character layers, not framed webpage videos. */
    .camp-screen[data-reference-ui="true"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source {
      display: block !important;
      position: absolute !important;
      left: -176px !important;
      top: -70px !important;
      bottom: auto !important;
      width: 800px !important;
      height: 1050px !important;
      z-index: 76 !important;
      transform: none !important;
      object-fit: contain !important;
      object-position: center bottom !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      mix-blend-mode: normal !important;
      pointer-events: none !important;
      filter:
        drop-shadow(0 34px 46px rgba(0, 0, 0, 0.54))
        saturate(1.07)
        contrast(1.03) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video {
      opacity: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready {
      opacity: 1 !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video.seamless-video-peer {
      left: -190px !important;
      top: -22px !important;
      width: 760px !important;
      height: 1000px !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-showcase-video.seamless-video-peer {
      left: -205px !important;
      top: -38px !important;
      width: 790px !important;
      height: 1040px !important;
    }

    .camp-screen[data-reference-ui="true"].has-camp-showcase-video .camp-portrait img {
      opacity: 0 !important;
    }

    .story-character {
      overflow: visible !important;
    }

    .story-character-video,
    .story-character-video.seamless-video-peer {
      position: absolute !important;
      left: 50% !important;
      bottom: -4px !important;
      width: min(440px, 38vw) !important;
      height: min(82vh, 650px) !important;
      transform: translateX(-50%) !important;
      object-fit: contain !important;
      object-position: center bottom !important;
      opacity: 0 !important;
      border: 0 !important;
      background: transparent !important;
      pointer-events: none !important;
      filter:
        drop-shadow(0 28px 44px rgba(0, 0, 0, 0.62))
        saturate(1.06)
        contrast(1.03) !important;
    }

    .story-character-video.is-ready {
      opacity: 1 !important;
    }

    .story-character.has-motion {
      background-image: var(--story-portrait) !important;
      background-size: contain !important;
      background-position: center bottom !important;
    }

    .story-character.has-motion:has(.story-character-video.is-ready) {
      background-image: none !important;
    }

    .story-character.has-motion .story-character-video.is-ready ~ .seamless-video-peer,
    .story-character.has-motion .story-character-video.is-ready {
      opacity: 1 !important;
    }

    /* Battle card restore pass: return the hand to readable game cards with live combat values. */
    html[data-ui-mode="battle"] .build-panel {
      width: min(748px, calc(100vw - 28px)) !important;
    }

    html[data-ui-mode="battle"] .hand-shell,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .hand-shell {
      min-height: 206px !important;
      padding: 9px 30px 12px !important;
      overflow: hidden !important;
      border-radius: 8px !important;
      border: 1px solid rgba(238, 191, 111, 0.48) !important;
      background:
        linear-gradient(180deg, rgba(255, 229, 172, 0.1), rgba(255, 229, 172, 0.025)),
        linear-gradient(90deg, rgba(44, 20, 22, 0.7), rgba(9, 8, 16, 0.82)) !important;
    }

    html[data-ui-mode="battle"] .hand-shell .type-grid,
    html[data-ui-mode="battle"] .type-grid,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .type-grid {
      grid-auto-columns: 118px !important;
      gap: 8px !important;
      padding: 0 2px 8px !important;
      overflow-x: auto !important;
      overflow-y: hidden !important;
    }

    html[data-ui-mode="battle"] .tower-card,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .tower-card {
      width: 118px !important;
      min-width: 118px !important;
      min-height: 174px !important;
      aspect-ratio: 9 / 16 !important;
      display: grid !important;
      grid-template-rows: 24px 1fr 30px !important;
      border: 2px solid color-mix(in srgb, var(--rarity-color, #f0b85c) 54%, rgba(255, 238, 188, 0.3)) !important;
      border-radius: 8px !important;
      clip-path: none !important;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent 20%),
        radial-gradient(circle at 50% 20%, color-mix(in srgb, var(--class-color, #ffd36d) 22%, transparent), transparent 58%),
        linear-gradient(165deg, color-mix(in srgb, var(--class-color, #f0b85c) 18%, transparent), rgba(3, 5, 16, 0.97) 52%, rgba(2, 3, 10, 0.98)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 248, 224, 0.12),
        0 10px 18px rgba(0, 0, 0, 0.38),
        0 0 18px color-mix(in srgb, var(--class-color, #f0b85c) 22%, transparent) !important;
      overflow: hidden !important;
      transform: none !important;
    }

    html[data-ui-mode="battle"] .tower-card.selected {
      transform: translateY(-8px) !important;
      border-color: color-mix(in srgb, var(--rarity-color, #ffd36d) 80%, #ffffff 12%) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 246, 220, 0.36),
        0 0 0 1px rgba(255, 235, 150, 0.84),
        0 18px 24px rgba(0, 0, 0, 0.44),
        0 0 24px var(--rarity-glow, rgba(255, 210, 120, 0.34)) !important;
      filter: brightness(1.08) saturate(1.08) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-name {
      z-index: 8 !important;
      display: flex !important;
      align-items: center !important;
      min-height: 24px !important;
      padding: 0 34px 0 8px !important;
      color: #fff0c8 !important;
      background:
        linear-gradient(90deg, rgba(0, 0, 0, 0.72), rgba(0, 0, 0, 0.18)) !important;
      font-size: 12px !important;
      font-weight: 950 !important;
      opacity: 1 !important;
      text-shadow: 0 1px 0 rgba(0, 0, 0, 0.82) !important;
    }

    html[data-ui-mode="battle"] .tower-card .portrait {
      inset: 25px 5px 68px !important;
      z-index: 2 !important;
      border-radius: 5px 5px 0 0 !important;
      background-size: auto 112% !important;
      background-position: center 8% !important;
      filter: saturate(1.08) brightness(1.02) contrast(1.03) !important;
      opacity: 1 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-portrait-image {
      left: 5px !important;
      right: 5px !important;
      top: 25px !important;
      bottom: 68px !important;
      width: calc(100% - 10px) !important;
      height: calc(100% - 93px) !important;
      z-index: 3 !important;
      object-fit: contain !important;
      object-position: center bottom !important;
      opacity: 1 !important;
      filter:
        saturate(1.08)
        brightness(1.03)
        contrast(1.03)
        drop-shadow(0 7px 8px rgba(0, 0, 0, 0.48)) !important;
    }

    html[data-ui-mode="battle"] .tower-card.is-deployed .portrait,
    html[data-ui-mode="battle"] .tower-card.is-deployed .card-portrait-image {
      filter:
        saturate(1.02)
        brightness(0.92)
        contrast(1.02)
        drop-shadow(0 7px 8px rgba(0, 0, 0, 0.5)) !important;
      opacity: 0.94 !important;
    }

    html[data-ui-mode="battle"] .tower-card.is-deployed {
      border-color: rgba(120, 216, 255, 0.72) !important;
      box-shadow:
        inset 0 0 0 1px rgba(201, 240, 255, 0.18),
        0 10px 18px rgba(0, 0, 0, 0.38),
        0 0 20px rgba(107, 213, 255, 0.22) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability-strip {
      left: 5px !important;
      bottom: 69px !important;
      z-index: 7 !important;
      display: grid !important;
      width: 30px !important;
      gap: 3px !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability {
      min-height: 23px !important;
      border-radius: 5px !important;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0.025)),
        rgba(5, 7, 18, 0.82) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability strong {
      font-size: 11px !important;
      line-height: 1 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability span {
      font-size: 7px !important;
      letter-spacing: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values {
      position: absolute !important;
      left: 5px !important;
      right: 5px !important;
      bottom: 31px !important;
      z-index: 8 !important;
      display: grid !important;
      grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
      gap: 2px !important;
      padding: 3px !important;
      border-top: 1px solid rgba(255, 226, 170, 0.2) !important;
      background:
        linear-gradient(180deg, rgba(255, 246, 218, 0.08), rgba(255, 246, 218, 0.02)),
        rgba(2, 3, 10, 0.82) !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values span {
      min-width: 0 !important;
      display: grid !important;
      gap: 1px !important;
      text-align: center !important;
      line-height: 1 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values i {
      color: rgba(255, 238, 205, 0.64) !important;
      font-size: 7px !important;
      font-style: normal !important;
      letter-spacing: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values strong {
      display: block !important;
      min-width: 0 !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      color: #fff1b8 !important;
      font-size: 9px !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      opacity: 1 !important;
      transform: none !important;
      overflow: hidden !important;
      text-overflow: clip !important;
      white-space: nowrap !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-statline {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-xp-fill {
      left: 5px !important;
      right: 5px !important;
      bottom: 30px !important;
      z-index: 9 !important;
      height: 3px !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-cooldown-fill {
      bottom: 30px !important;
      z-index: 1 !important;
      opacity: 0.36 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-rarity-badge {
      right: 6px !important;
      left: auto !important;
      top: 5px !important;
      bottom: auto !important;
      z-index: 9 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-skill-ready {
      left: 35px !important;
      right: 6px !important;
      top: 73px !important;
      bottom: auto !important;
      z-index: 10 !important;
      min-height: 22px !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row {
      z-index: 10 !important;
      height: 30px !important;
      min-height: 30px !important;
      display: grid !important;
      grid-template-columns: minmax(0, 1fr) auto !important;
      gap: 5px !important;
      align-items: center !important;
      padding: 0 7px !important;
      background:
        linear-gradient(90deg, color-mix(in srgb, var(--class-color, #f0b85c) 40%, rgba(5, 8, 20, 0.9)), rgba(4, 6, 17, 0.95)) !important;
    }

    html[data-ui-mode="battle"] .tower-card.is-deployed .cost-row {
      background:
        linear-gradient(90deg, rgba(35, 70, 90, 0.96), rgba(4, 6, 17, 0.95)) !important;
    }

    html[data-ui-mode="battle"] .tower-card.is-recovering .cost-row {
      background:
        linear-gradient(90deg, rgba(102, 204, 126, 0.85) 0 var(--card-hp-percent, 0%), rgba(39, 45, 41, 0.92) var(--card-hp-percent, 0%) 100%) !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row i {
      max-width: none !important;
      justify-content: start !important;
      place-items: center start !important;
      padding: 0 !important;
      font-size: 11px !important;
      color: #fff3cf !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row strong {
      position: static !important;
      display: block !important;
      padding: 3px 5px !important;
      border: 1px solid rgba(255, 226, 170, 0.26) !important;
      border-radius: 999px !important;
      background: rgba(2, 4, 12, 0.78) !important;
      color: #ffe4a0 !important;
      font-size: 10px !important;
      letter-spacing: 0 !important;
      opacity: 1 !important;
      transform: none !important;
      white-space: nowrap !important;
    }

    html[data-ui-mode="battle"] .tower-card::after {
      z-index: 6 !important;
      opacity: 0.18 !important;
      background:
        linear-gradient(180deg, rgba(255, 245, 186, 0.08), transparent 22%),
        linear-gradient(0deg, rgba(0, 0, 0, 0.56) 0 18%, transparent 45%) !important;
      pointer-events: none !important;
    }

    /* Plain mobile-card pass: remove the battle tray and keep only simple character cards. */
    html[data-ui-mode="battle"] .build-panel,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .build-panel,
    html[data-game-mode="countdown"] .build-panel,
    html[data-game-mode="playing"] .build-panel,
    html[data-game-mode="paused"] .build-panel {
      left: 50% !important;
      right: auto !important;
      bottom: max(10px, env(safe-area-inset-bottom)) !important;
      width: min(640px, calc(100vw - 36px)) !important;
      min-width: 0 !important;
      max-width: calc(100vw - 36px) !important;
      padding: 0 !important;
      transform: translateX(-50%) !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      filter: none !important;
      pointer-events: none !important;
      z-index: 86 !important;
    }

    html[data-ui-mode="battle"] .build-panel header,
    html[data-ui-mode="battle"] .build-panel > p,
    html[data-ui-mode="battle"] .tower-status-dock,
    html[data-ui-mode="battle"] .slot-grid {
      display: none !important;
    }

    html[data-ui-mode="battle"] .hand-shell,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .hand-shell,
    html[data-game-mode="countdown"] .hand-shell,
    html[data-game-mode="playing"] .hand-shell,
    html[data-game-mode="paused"] .hand-shell {
      width: 100% !important;
      min-height: 0 !important;
      height: auto !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      backdrop-filter: none !important;
      overflow: visible !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .hand-shell::before,
    html[data-ui-mode="battle"] .hand-shell::after,
    html[data-ui-mode="battle"] .hand-scroll,
    html[data-ui-mode="battle"] .hand-scroll-meter {
      display: none !important;
    }

    html[data-ui-mode="battle"] .hand-shell .type-grid,
    html[data-ui-mode="battle"] .type-grid,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .type-grid,
    html[data-game-mode="countdown"] .type-grid,
    html[data-game-mode="playing"] .type-grid,
    html[data-game-mode="paused"] .type-grid {
      width: 100% !important;
      min-width: 0 !important;
      display: grid !important;
      grid-auto-flow: column !important;
      grid-auto-columns: minmax(96px, 112px) !important;
      justify-content: center !important;
      gap: clamp(6px, 1.1vw, 10px) !important;
      padding: 8px 0 2px !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      overflow-x: auto !important;
      overflow-y: visible !important;
      scroll-snap-type: x proximity !important;
      scrollbar-width: none !important;
      pointer-events: auto !important;
      -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 20px, #000 calc(100% - 20px), transparent 100%) !important;
      mask-image: linear-gradient(90deg, transparent 0, #000 20px, #000 calc(100% - 20px), transparent 100%) !important;
    }

    html[data-ui-mode="battle"] .type-grid::-webkit-scrollbar {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .tower-card,
    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card,
    html[data-game-mode="paused"] .tower-card {
      position: relative !important;
      width: clamp(96px, 10.6vw, 112px) !important;
      min-width: clamp(96px, 10.6vw, 112px) !important;
      height: clamp(146px, 17.4vw, 166px) !important;
      min-height: 0 !important;
      aspect-ratio: auto !important;
      display: grid !important;
      grid-template-rows: 23px 1fr 24px !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 7px !important;
      clip-path: none !important;
      background:
        linear-gradient(180deg, rgba(255, 244, 198, 0.1), rgba(255, 244, 198, 0.015) 30%, rgba(3, 4, 12, 0.94)),
        radial-gradient(circle at 50% 18%, color-mix(in srgb, var(--class-color, #ffd36d) 28%, transparent), transparent 54%),
        rgba(4, 5, 14, 0.92) !important;
      box-shadow:
        0 10px 22px rgba(0, 0, 0, 0.5),
        inset 0 0 0 1px color-mix(in srgb, var(--rarity-color, #f1c06a) 60%, rgba(255, 255, 255, 0.12)),
        inset 0 -20px 24px rgba(0, 0, 0, 0.42) !important;
      overflow: hidden !important;
      isolation: isolate !important;
      transform: none !important;
      scroll-snap-align: center !important;
      pointer-events: auto !important;
    }

    html[data-ui-mode="battle"] .tower-card:hover,
    html[data-ui-mode="battle"] .tower-card:focus-visible {
      transform: translateY(-4px) !important;
      filter: brightness(1.06) saturate(1.06) !important;
      outline: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card.selected {
      transform: translateY(-7px) !important;
      border: 0 !important;
      box-shadow:
        0 16px 28px rgba(0, 0, 0, 0.56),
        0 0 0 1px rgba(255, 232, 142, 0.72),
        0 0 24px var(--rarity-glow, rgba(255, 196, 94, 0.34)),
        inset 0 0 0 1px rgba(255, 247, 210, 0.3) !important;
      filter: brightness(1.09) saturate(1.08) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-name {
      position: relative !important;
      z-index: 12 !important;
      min-height: 23px !important;
      display: flex !important;
      align-items: center !important;
      padding: 0 30px 0 8px !important;
      background:
        linear-gradient(90deg, rgba(0, 0, 0, 0.72), rgba(0, 0, 0, 0.18)) !important;
      color: #fff0c8 !important;
      font-size: 13px !important;
      font-weight: 950 !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.76) !important;
      white-space: nowrap !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      opacity: 1 !important;
    }

    html[data-ui-mode="battle"] .tower-card .portrait {
      position: absolute !important;
      inset: 24px 4px 41px !important;
      z-index: 2 !important;
      display: block !important;
      border-radius: 5px !important;
      background-color: rgba(5, 5, 13, 0.5) !important;
      background-image:
        radial-gradient(circle at 50% 22%, color-mix(in srgb, var(--class-color, #ffd36d) 18%, transparent), transparent 58%),
        var(--portrait) !important;
      background-repeat: no-repeat, no-repeat !important;
      background-size: 100% 100%, auto 122% !important;
      background-position: center, center 18% !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 235, 174, 0.1),
        inset 0 -22px 24px rgba(0, 0, 0, 0.42) !important;
      opacity: 1 !important;
      filter: saturate(1.16) brightness(1.15) contrast(1.06) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-portrait-image {
      position: absolute !important;
      left: 4px !important;
      right: 4px !important;
      top: 22px !important;
      bottom: 37px !important;
      width: calc(100% - 8px) !important;
      height: calc(100% - 59px) !important;
      z-index: 3 !important;
      object-fit: contain !important;
      object-position: center 42% !important;
      opacity: 1 !important;
      filter:
        saturate(1.18)
        brightness(1.15)
        contrast(1.06)
        drop-shadow(0 7px 8px rgba(0, 0, 0, 0.5)) !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability-strip,
    html[data-ui-mode="battle"] .tower-card .card-ability,
    html[data-ui-mode="battle"] .tower-card .card-statline,
    html[data-ui-mode="battle"] .tower-card .card-hover-video,
    html[data-ui-mode="battle"] .tower-card .card-hover-motion {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values {
      position: absolute !important;
      left: 4px !important;
      right: 4px !important;
      bottom: 24px !important;
      z-index: 10 !important;
      display: grid !important;
      grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
      gap: 1px !important;
      padding: 2px 3px !important;
      border: 0 !important;
      background: linear-gradient(180deg, rgba(3, 5, 13, 0.1), rgba(3, 5, 13, 0.82)) !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values span:nth-child(5) {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values i {
      color: rgba(255, 238, 205, 0.58) !important;
      font-size: 7px !important;
      font-style: normal !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values strong {
      display: block !important;
      min-width: 0 !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      color: #ffeab0 !important;
      font-size: 9px !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      opacity: 1 !important;
      transform: none !important;
      white-space: nowrap !important;
      overflow: hidden !important;
      text-overflow: clip !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row {
      position: relative !important;
      z-index: 12 !important;
      height: 24px !important;
      min-height: 24px !important;
      display: grid !important;
      grid-template-columns: minmax(0, 1fr) auto !important;
      align-items: center !important;
      gap: 4px !important;
      padding: 0 6px !important;
      background:
        linear-gradient(90deg, rgba(5, 6, 15, 0.9), color-mix(in srgb, var(--class-color, #f0b85c) 24%, rgba(5, 6, 15, 0.92))) !important;
      color: rgba(255, 238, 196, 0.78) !important;
      font-size: 10px !important;
      line-height: 1 !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row i {
      max-width: none !important;
      justify-content: start !important;
      place-items: center start !important;
      padding: 0 !important;
      color: rgba(255, 237, 196, 0.72) !important;
      font-size: 10px !important;
      font-style: normal !important;
      font-weight: 700 !important;
      letter-spacing: 0 !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      white-space: nowrap !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row strong {
      position: static !important;
      display: block !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      color: #ffe6a4 !important;
      font-size: 10px !important;
      font-weight: 900 !important;
      letter-spacing: 0 !important;
      opacity: 1 !important;
      transform: none !important;
      white-space: nowrap !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-rarity-badge {
      position: absolute !important;
      top: 5px !important;
      right: 5px !important;
      left: auto !important;
      bottom: auto !important;
      z-index: 14 !important;
      min-width: 20px !important;
      height: 16px !important;
      padding: 0 4px !important;
      display: grid !important;
      place-items: center !important;
      border: 0 !important;
      border-radius: 999px !important;
      background: rgba(3, 4, 12, 0.78) !important;
      color: var(--rarity-color, #ffd777) !important;
      font-size: 8px !important;
      line-height: 1 !important;
      box-shadow: 0 0 10px var(--rarity-glow, rgba(255, 210, 120, 0.22)) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-skill-ready {
      left: 6px !important;
      right: 6px !important;
      top: auto !important;
      bottom: 51px !important;
      z-index: 13 !important;
      min-height: 18px !important;
      display: grid !important;
      place-items: center !important;
      border: 0 !important;
      border-radius: 999px !important;
      font-size: 9px !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-skill-ready:empty {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-xp-fill {
      left: 4px !important;
      right: 4px !important;
      bottom: 23px !important;
      z-index: 15 !important;
      height: 2px !important;
      border-radius: 999px !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-cooldown-fill {
      bottom: 0 !important;
      height: 100% !important;
      z-index: 1 !important;
      opacity: 0.18 !important;
    }

    html[data-ui-mode="battle"] .tower-card::after {
      content: "" !important;
      position: absolute !important;
      inset: 0 !important;
      z-index: 6 !important;
      opacity: 0.2 !important;
      background:
        linear-gradient(180deg, rgba(255, 245, 186, 0.1), transparent 26%),
        linear-gradient(0deg, rgba(0, 0, 0, 0.5) 0 22%, transparent 48%) !important;
      pointer-events: none !important;
    }

    /* Soft right-side camp actions: icon-first buttons without hard rectangular borders. */
    .camp-screen[data-reference-ui="true"] .camp-bottom-dock,
    .camp-bottom-dock {
      width: clamp(82px, 8.2vw, 96px) !important;
      right: max(8px, env(safe-area-inset-right)) !important;
      top: calc(max(8px, env(safe-area-inset-top)) + 66px) !important;
      bottom: calc(max(10px, env(safe-area-inset-bottom)) + 30px) !important;
      gap: 8px !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      z-index: 170 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button,
    .camp-dock-button {
      min-width: 0 !important;
      height: auto !important;
      min-height: 76px !important;
      display: grid !important;
      grid-template-rows: minmax(42px, 1fr) 20px !important;
      place-items: center !important;
      gap: 2px !important;
      padding: 8px 4px 7px !important;
      clip-path: none !important;
      border: 0 !important;
      border-radius: 7px !important;
      background:
        radial-gradient(circle at 50% 24%, rgba(255, 218, 133, 0.2), transparent 44%),
        linear-gradient(180deg, rgba(34, 24, 24, 0.72), rgba(7, 7, 13, 0.64)) !important;
      box-shadow:
        0 12px 20px rgba(0, 0, 0, 0.42),
        inset 0 12px 18px rgba(255, 229, 170, 0.05),
        inset 0 -20px 24px rgba(0, 0, 0, 0.42) !important;
      overflow: hidden !important;
      color: #ffe7b2 !important;
      backdrop-filter: blur(3px) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before,
    .camp-screen[data-reference-ui="true"] .camp-dock-button::after,
    .camp-dock-button::before,
    .camp-dock-button::after {
      display: none !important;
      content: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary,
    .camp-dock-button.is-primary {
      background:
        radial-gradient(circle at 50% 24%, rgba(255, 154, 93, 0.3), transparent 46%),
        linear-gradient(180deg, rgba(72, 32, 25, 0.78), rgba(16, 8, 10, 0.7)) !important;
      box-shadow:
        0 13px 22px rgba(0, 0, 0, 0.46),
        0 0 24px rgba(255, 128, 70, 0.24),
        inset 0 14px 20px rgba(255, 235, 174, 0.08),
        inset 0 -22px 26px rgba(0, 0, 0, 0.46) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video,
    .camp-dock-button .facility-loop-video {
      grid-row: 1 !important;
      position: relative !important;
      inset: auto !important;
      width: clamp(38px, 4.2vw, 48px) !important;
      height: clamp(38px, 4.2vw, 48px) !important;
      margin: 0 !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      object-fit: contain !important;
      filter:
        drop-shadow(0 8px 9px rgba(0, 0, 0, 0.58))
        drop-shadow(0 0 11px rgba(255, 219, 130, 0.22)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span,
    .camp-dock-button span {
      grid-row: 2 !important;
      position: relative !important;
      z-index: 4 !important;
      color: #ffe8b6 !important;
      font-size: clamp(14px, 1.45vw, 17px) !important;
      font-weight: 950 !important;
      line-height: 1 !important;
      letter-spacing: 0.02em !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.76), 0 0 12px rgba(255, 204, 106, 0.2) !important;
      white-space: nowrap !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button em,
    .camp-dock-button em {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-dock-button:focus-visible,
    .camp-dock-button:hover:not(:disabled),
    .camp-dock-button:focus-visible {
      transform: translateX(-4px) !important;
      filter: brightness(1.12) saturate(1.08) !important;
      outline: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:active:not(:disabled),
    .camp-dock-button:active:not(:disabled) {
      transform: translateX(-2px) translateY(1px) scale(0.985) !important;
      filter: brightness(0.94) !important;
    }

    /* Battle card art-focus pass: character art first, text reduced to tiny overlays. */
    html[data-ui-mode="battle"] .hand-shell .type-grid,
    html[data-ui-mode="battle"] .type-grid,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .type-grid {
      grid-auto-columns: clamp(106px, 11.2vw, 122px) !important;
      gap: clamp(7px, 1.2vw, 12px) !important;
      padding-bottom: 4px !important;
    }

    html[data-ui-mode="battle"] .tower-card,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .tower-card,
    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card,
    html[data-game-mode="paused"] .tower-card {
      width: clamp(106px, 11.2vw, 122px) !important;
      min-width: clamp(106px, 11.2vw, 122px) !important;
      height: clamp(156px, 18.5vw, 178px) !important;
      grid-template-rows: 22px 1fr !important;
      background:
        radial-gradient(circle at 50% 21%, color-mix(in srgb, var(--class-color, #ffd36d) 34%, transparent), transparent 58%),
        linear-gradient(180deg, rgba(255, 244, 198, 0.08), rgba(2, 3, 10, 0.96) 78%) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-name {
      min-height: 22px !important;
      padding: 0 28px 0 7px !important;
      background: linear-gradient(90deg, rgba(0, 0, 0, 0.66), rgba(0, 0, 0, 0.04)) !important;
      font-size: 13px !important;
    }

    html[data-ui-mode="battle"] .tower-card .portrait {
      inset: 22px 3px 7px !important;
      background-size: 100% 100%, auto 132% !important;
      background-position: center, center 20% !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 235, 174, 0.08),
        inset 0 -36px 34px rgba(0, 0, 0, 0.58) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-portrait-image {
      left: 3px !important;
      right: 3px !important;
      top: 18px !important;
      bottom: 8px !important;
      width: calc(100% - 6px) !important;
      height: calc(100% - 26px) !important;
      object-position: center 49% !important;
      transform: scale(1.08) !important;
      transform-origin: center bottom !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values,
    html[data-ui-mode="battle"] .tower-card .card-runtime-values span,
    html[data-ui-mode="battle"] .tower-card .card-runtime-values i,
    html[data-ui-mode="battle"] .tower-card .card-runtime-values strong {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row {
      position: absolute !important;
      right: 5px !important;
      bottom: 5px !important;
      left: auto !important;
      z-index: 16 !important;
      width: auto !important;
      height: auto !important;
      min-height: 0 !important;
      display: block !important;
      padding: 0 !important;
      background: transparent !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row i {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row strong {
      display: block !important;
      min-width: 28px !important;
      padding: 3px 5px !important;
      border-radius: 999px !important;
      background: rgba(2, 4, 12, 0.78) !important;
      color: #ffe9aa !important;
      font-size: 9px !important;
      text-align: center !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 230, 160, 0.18),
        0 0 10px rgba(0, 0, 0, 0.42) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-rarity-badge {
      top: 4px !important;
      right: 5px !important;
      min-width: 18px !important;
      height: 15px !important;
      font-size: 8px !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-skill-ready {
      left: 7px !important;
      right: 7px !important;
      bottom: 29px !important;
      min-height: 17px !important;
      background: rgba(2, 4, 12, 0.74) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-xp-fill {
      left: 5px !important;
      right: 5px !important;
      bottom: 4px !important;
      opacity: 0.72 !important;
    }

    html[data-ui-mode="battle"] .tower-card::after {
      opacity: 0.15 !important;
      background:
        linear-gradient(180deg, rgba(255, 245, 186, 0.08), transparent 22%),
        linear-gradient(0deg, rgba(0, 0, 0, 0.64) 0 26%, transparent 54%) !important;
    }

    /* Camp comment pass 2026-05-04: queen roster, larger heroine, softer compact action rail. */
    .camp-screen[data-reference-ui="true"] .camp-profile {
      width: 780px !important;
      z-index: 72 !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -180px !important;
      top: -30px !important;
      width: 1040px !important;
      height: 1240px !important;
      z-index: 74 !important;
      overflow: visible !important;
      background-image: none !important;
      filter:
        drop-shadow(0 42px 48px rgba(0, 0, 0, 0.82))
        drop-shadow(0 0 44px rgba(255, 91, 172, 0.24)) !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait {
      left: -172px !important;
      top: -12px !important;
      width: 990px !important;
      height: 1180px !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-portrait {
      left: -178px !important;
      top: -8px !important;
      width: 1030px !important;
      height: 1225px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img {
      width: 100% !important;
      height: 100% !important;
      object-fit: contain !important;
      object-position: left bottom !important;
      transform: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      left: 10px !important;
      top: 532px !important;
      width: 244px !important;
      height: 112px !important;
      z-index: 130 !important;
      pointer-events: auto !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster {
      left: 208px !important;
      right: auto !important;
      bottom: 30px !important;
      width: 686px !important;
      min-width: 0 !important;
      display: grid !important;
      grid-template-columns: repeat(5, 128px) !important;
      gap: 9px !important;
      padding: 0 !important;
      overflow: visible !important;
      z-index: 132 !important;
      -webkit-mask-image: none !important;
      mask-image: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster::before {
      display: none !important;
      content: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button {
      width: 128px !important;
      min-width: 128px !important;
      height: 106px !important;
      min-height: 106px !important;
      border-radius: 4px !important;
      box-shadow:
        0 10px 20px rgba(0, 0, 0, 0.42),
        inset 0 0 0 1px rgba(255, 226, 145, 0.54),
        inset 0 -25px 28px rgba(0, 0, 0, 0.58) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button.is-selected {
      transform: translateY(-5px) !important;
      box-shadow:
        0 14px 24px rgba(0, 0, 0, 0.48),
        0 0 0 1px rgba(255, 232, 151, 0.96),
        0 0 24px var(--rarity-glow, rgba(255, 205, 96, 0.35)),
        inset 0 0 0 1px rgba(255, 247, 211, 0.25) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait {
      inset: 5px 5px 20px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait img {
      object-fit: contain !important;
      object-position: center bottom !important;
      transform: scale(1.14) !important;
      transform-origin: center bottom !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name {
      left: 8px !important;
      right: 8px !important;
      bottom: 5px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock,
    .camp-bottom-dock {
      right: max(8px, env(safe-area-inset-right)) !important;
      top: 96px !important;
      bottom: 92px !important;
      width: 78px !important;
      gap: 7px !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      z-index: 170 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button,
    .camp-dock-button {
      min-width: 0 !important;
      min-height: 60px !important;
      height: 60px !important;
      display: grid !important;
      grid-template-rows: 34px 16px !important;
      place-items: center !important;
      gap: 1px !important;
      padding: 6px 4px 5px !important;
      clip-path: none !important;
      border: 0 !important;
      border-radius: 8px !important;
      background:
        radial-gradient(circle at 50% 24%, rgba(255, 227, 151, 0.18), transparent 48%),
        linear-gradient(180deg, rgba(34, 24, 25, 0.48), rgba(7, 6, 10, 0.34)) !important;
      box-shadow:
        0 9px 15px rgba(0, 0, 0, 0.34),
        inset 0 10px 16px rgba(255, 235, 172, 0.045),
        inset 0 -14px 18px rgba(0, 0, 0, 0.3) !important;
      overflow: hidden !important;
      color: #ffe9b4 !important;
      backdrop-filter: blur(2px) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before,
    .camp-screen[data-reference-ui="true"] .camp-dock-button::after,
    .camp-dock-button::before,
    .camp-dock-button::after {
      display: none !important;
      content: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary,
    .camp-dock-button.is-primary {
      background:
        radial-gradient(circle at 50% 22%, rgba(255, 144, 86, 0.3), transparent 52%),
        linear-gradient(180deg, rgba(82, 36, 27, 0.58), rgba(13, 6, 8, 0.38)) !important;
      box-shadow:
        0 10px 16px rgba(0, 0, 0, 0.36),
        0 0 20px rgba(255, 120, 72, 0.2),
        inset 0 12px 17px rgba(255, 235, 174, 0.065),
        inset 0 -15px 19px rgba(0, 0, 0, 0.34) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video,
    .camp-dock-button .facility-loop-video {
      grid-row: 1 !important;
      position: relative !important;
      inset: auto !important;
      width: 32px !important;
      height: 32px !important;
      margin: 0 !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      object-fit: contain !important;
      filter:
        drop-shadow(0 6px 7px rgba(0, 0, 0, 0.56))
        drop-shadow(0 0 8px rgba(255, 218, 130, 0.2)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span,
    .camp-dock-button span {
      grid-row: 2 !important;
      color: #ffedc0 !important;
      font-size: 13px !important;
      font-weight: 950 !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.72), 0 0 10px rgba(255, 203, 106, 0.18) !important;
      white-space: nowrap !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button em,
    .camp-dock-button em {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:hover:not(:disabled),
    .camp-screen[data-reference-ui="true"] .camp-dock-button:focus-visible,
    .camp-dock-button:hover:not(:disabled),
    .camp-dock-button:focus-visible {
      transform: translateX(-3px) !important;
      filter: brightness(1.12) saturate(1.08) !important;
      outline: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button:active:not(:disabled),
    .camp-dock-button:active:not(:disabled) {
      transform: translateX(-2px) translateY(1px) scale(0.985) !important;
      filter: brightness(0.94) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-menu-button {
      width: 42px !important;
      height: 42px !important;
      border: 0 !important;
      border-radius: 8px !important;
      background:
        radial-gradient(circle at 50% 20%, rgba(255, 229, 153, 0.24), transparent 48%),
        linear-gradient(180deg, rgba(39, 28, 24, 0.58), rgba(7, 6, 10, 0.38)) !important;
      box-shadow:
        0 9px 15px rgba(0, 0, 0, 0.34),
        inset 0 10px 16px rgba(255, 235, 172, 0.045) !important;
      color: #ffeabc !important;
    }

    /* Camp shop clarity pass: readable modal, larger item art, clean hierarchy. */
    .camp-shop-modal {
      z-index: 320 !important;
      display: grid !important;
      place-items: center !important;
      padding: 28px 104px 28px 220px !important;
      background:
        radial-gradient(circle at 58% 46%, rgba(255, 214, 128, 0.12), transparent 30%),
        linear-gradient(90deg, rgba(3, 3, 8, 0.78), rgba(5, 7, 16, 0.58) 50%, rgba(3, 3, 8, 0.78)) !important;
      backdrop-filter: blur(4px) saturate(1.05) !important;
    }

    .camp-shop-modal[hidden] {
      display: none !important;
    }

    .camp-shop-card {
      width: min(760px, calc(100vw - 280px)) !important;
      max-width: 760px !important;
      max-height: min(560px, calc(100vh - 54px)) !important;
      display: grid !important;
      grid-template-rows: 58px 74px minmax(0, 1fr) 32px !important;
      gap: 10px !important;
      padding: 14px !important;
      border: 0 !important;
      border-radius: 8px !important;
      background:
        linear-gradient(135deg, rgba(255, 232, 160, 0.12), transparent 28%),
        radial-gradient(circle at 78% 0%, rgba(255, 196, 103, 0.16), transparent 42%),
        linear-gradient(180deg, rgba(31, 22, 22, 0.96), rgba(8, 9, 15, 0.97)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 222, 139, 0.72),
        inset 0 0 0 1px rgba(255, 255, 255, 0.1),
        inset 0 -28px 40px rgba(0, 0, 0, 0.28),
        0 28px 64px rgba(0, 0, 0, 0.58),
        0 0 34px rgba(255, 151, 96, 0.14) !important;
      overflow: hidden !important;
    }

    .camp-shop-card::before,
    .camp-shop-card::after {
      pointer-events: none !important;
    }

    .camp-shop-head {
      display: grid !important;
      grid-template-columns: minmax(0, 1fr) auto !important;
      align-items: start !important;
      gap: 14px !important;
      min-height: 0 !important;
      padding: 0 2px 8px !important;
      border-bottom: 1px solid rgba(255, 224, 148, 0.24) !important;
    }

    .camp-shop-head span,
    .camp-shop-hero span {
      color: rgba(255, 225, 186, 0.72) !important;
      font-size: 11px !important;
      font-weight: 850 !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    .camp-shop-head h3 {
      margin: 4px 0 0 !important;
      color: #fff0bf !important;
      font-size: 32px !important;
      line-height: 0.95 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      text-shadow:
        0 3px 0 rgba(0, 0, 0, 0.62),
        0 0 16px rgba(255, 198, 104, 0.22) !important;
    }

    .camp-shop-close {
      min-width: 54px !important;
      min-height: 32px !important;
      height: 32px !important;
      padding: 0 12px !important;
      border: 0 !important;
      border-radius: 6px !important;
      background:
        linear-gradient(180deg, rgba(95, 62, 46, 0.84), rgba(25, 16, 17, 0.88)) !important;
      color: #fff0c2 !important;
      font-size: 13px !important;
      font-weight: 900 !important;
      box-shadow:
        0 0 0 1px rgba(255, 223, 143, 0.52),
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 8px 16px rgba(0, 0, 0, 0.32) !important;
    }

    .camp-shop-hero {
      display: grid !important;
      grid-template-columns: 58px minmax(0, 1fr) auto !important;
      align-items: center !important;
      gap: 12px !important;
      min-height: 0 !important;
      padding: 8px 12px !important;
      border: 0 !important;
      border-radius: 7px !important;
      background:
        linear-gradient(90deg, rgba(255, 226, 154, 0.1), transparent 54%),
        linear-gradient(180deg, rgba(10, 12, 20, 0.88), rgba(7, 7, 12, 0.9)) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 225, 151, 0.22),
        inset 0 -18px 22px rgba(0, 0, 0, 0.22) !important;
      overflow: hidden !important;
    }

    .camp-shop-hero::after,
    .camp-shop-hero::before {
      display: none !important;
      content: none !important;
    }

    .camp-shop-portrait {
      width: 58px !important;
      height: 58px !important;
      border-radius: 7px !important;
      background: var(--portrait) center 18% / cover no-repeat !important;
      box-shadow:
        0 0 0 1px rgba(255, 237, 190, 0.32),
        0 0 16px var(--rarity-glow, rgba(255, 214, 120, 0.22)) !important;
      overflow: hidden !important;
    }

    .camp-shop-portrait img {
      display: block !important;
      width: 100% !important;
      height: 100% !important;
      object-fit: cover !important;
      object-position: center 18% !important;
      transform: scale(1.12) !important;
      transform-origin: center top !important;
    }

    .camp-shop-hero strong {
      margin-top: 5px !important;
      color: #fff0bf !important;
      font-size: 20px !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.58) !important;
    }

    .camp-shop-hero em {
      min-width: 94px !important;
      padding: 7px 10px !important;
      border-radius: 999px !important;
      background: rgba(6, 6, 10, 0.74) !important;
      color: #ffe7a6 !important;
      font-size: 13px !important;
      font-style: normal !important;
      font-weight: 950 !important;
      text-align: center !important;
      white-space: nowrap !important;
      box-shadow: inset 0 0 0 1px rgba(255, 224, 145, 0.22) !important;
    }

    .camp-shop-grid {
      min-height: 0 !important;
      display: grid !important;
      grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
      grid-auto-rows: minmax(118px, 1fr) !important;
      gap: 12px !important;
      padding: 0 !important;
      overflow: visible !important;
    }

    .camp-shop-item {
      position: relative !important;
      min-height: 118px !important;
      display: grid !important;
      grid-template-columns: 88px minmax(0, 1fr) !important;
      grid-template-rows: auto 1fr auto !important;
      gap: 5px 12px !important;
      align-items: start !important;
      padding: 12px !important;
      border: 0 !important;
      border-radius: 7px !important;
      background:
        radial-gradient(circle at 20% 15%, color-mix(in srgb, var(--rarity-color, #ffd36d) 20%, transparent), transparent 48%),
        linear-gradient(180deg, rgba(20, 17, 20, 0.96), rgba(8, 8, 13, 0.96)) !important;
      color: #fff0bf !important;
      text-align: left !important;
      box-shadow:
        0 0 0 1px rgba(255, 221, 143, 0.34),
        inset 0 0 0 1px rgba(255, 255, 255, 0.06),
        inset 0 -20px 24px rgba(0, 0, 0, 0.3),
        0 12px 20px rgba(0, 0, 0, 0.28) !important;
      overflow: hidden !important;
    }

    .camp-shop-item::before,
    .camp-shop-item::after {
      display: none !important;
      content: none !important;
    }

    .camp-shop-item .facility-loop-video {
      grid-column: 1 !important;
      grid-row: 1 / 4 !important;
      position: relative !important;
      inset: auto !important;
      width: 82px !important;
      height: 82px !important;
      align-self: center !important;
      justify-self: center !important;
      display: block !important;
      object-fit: contain !important;
      border-radius: 8px !important;
      background:
        radial-gradient(circle at 50% 34%, rgba(255, 226, 145, 0.12), transparent 58%),
        rgba(3, 4, 9, 0.42) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 232, 170, 0.12),
        0 8px 14px rgba(0, 0, 0, 0.34) !important;
      filter:
        drop-shadow(0 7px 9px rgba(0, 0, 0, 0.46))
        saturate(1.08)
        brightness(1.06) !important;
    }

    .camp-shop-item strong {
      grid-column: 2 !important;
      grid-row: 1 !important;
      min-width: 0 !important;
      color: #fff2bf !important;
      font-size: 18px !important;
      font-weight: 950 !important;
      line-height: 1.05 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.58) !important;
      white-space: nowrap !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
    }

    .camp-shop-item span {
      grid-column: 2 !important;
      grid-row: 2 !important;
      min-width: 0 !important;
      color: rgba(255, 238, 208, 0.82) !important;
      font-size: 12px !important;
      font-weight: 750 !important;
      line-height: 1.35 !important;
      letter-spacing: 0 !important;
      display: -webkit-box !important;
      -webkit-line-clamp: 2 !important;
      -webkit-box-orient: vertical !important;
      overflow: hidden !important;
    }

    .camp-shop-item em {
      grid-column: 2 !important;
      grid-row: 3 !important;
      align-self: end !important;
      width: fit-content !important;
      max-width: 100% !important;
      padding: 5px 8px !important;
      border-radius: 999px !important;
      background: rgba(255, 216, 129, 0.11) !important;
      color: #ffe5a0 !important;
      font-size: 12px !important;
      font-style: normal !important;
      font-weight: 950 !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      white-space: nowrap !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      box-shadow: inset 0 0 0 1px rgba(255, 226, 145, 0.18) !important;
    }

    .camp-shop-item:hover:not(:disabled),
    .camp-shop-item:focus-visible {
      transform: translateY(-3px) !important;
      filter: brightness(1.08) saturate(1.06) !important;
      box-shadow:
        0 0 0 1px rgba(255, 231, 154, 0.78),
        0 0 22px rgba(255, 182, 92, 0.18),
        inset 0 0 0 1px rgba(255, 255, 255, 0.12),
        0 15px 24px rgba(0, 0, 0, 0.34) !important;
      outline: 0 !important;
    }

    .camp-shop-item:disabled {
      opacity: 0.5 !important;
      filter: grayscale(0.35) brightness(0.75) !important;
    }

    .camp-shop-foot {
      min-height: 0 !important;
      padding: 8px 10px !important;
      border-radius: 6px !important;
      background: rgba(4, 5, 10, 0.48) !important;
      color: rgba(255, 236, 202, 0.76) !important;
      font-size: 12px !important;
      font-weight: 750 !important;
      line-height: 1.25 !important;
      overflow: hidden !important;
      white-space: nowrap !important;
      text-overflow: ellipsis !important;
      box-shadow: inset 0 0 0 1px rgba(255, 226, 145, 0.12) !important;
    }

    @media (max-width: 930px) {
      .camp-shop-modal {
        padding: 18px 88px 18px 160px !important;
      }

      .camp-shop-card {
        width: min(710px, calc(100vw - 230px)) !important;
      }

      .camp-shop-grid {
        gap: 9px !important;
      }

      .camp-shop-item {
        grid-template-columns: 72px minmax(0, 1fr) !important;
        min-height: 106px !important;
        padding: 10px !important;
      }

      .camp-shop-item .facility-loop-video {
        width: 66px !important;
        height: 66px !important;
      }

      .camp-shop-item strong {
        font-size: 16px !important;
      }

      .camp-shop-item span,
      .camp-shop-item em,
      .camp-shop-foot {
        font-size: 11px !important;
      }
    }

    /* Inline settlement MP4 pass: victory/defeat use real MP4 inside a panel, never as fullscreen art. */
    .overlay.is-settlement {
      place-items: center !important;
      padding: clamp(14px, 2.4vw, 26px) !important;
      background:
        radial-gradient(circle at 50% 44%, rgba(255, 206, 120, 0.12), transparent 34%),
        rgba(2, 3, 8, 0.46) !important;
      backdrop-filter: blur(2px) saturate(1.05) !important;
    }

    .overlay.is-settlement .overlay-card {
      width: min(930px, calc(100vw - 48px)) !important;
      min-height: 0 !important;
      max-height: min(650px, calc(100vh - 42px)) !important;
      display: grid !important;
      grid-template-columns: minmax(380px, 1.12fr) minmax(260px, 0.88fr) !important;
      grid-template-rows: auto auto auto auto 1fr !important;
      grid-template-areas:
        "visual title"
        "visual copy"
        "visual stats"
        "visual panel"
        "visual action" !important;
      align-items: start !important;
      gap: 12px 16px !important;
      padding: 14px !important;
      border: 0 !important;
      border-radius: 8px !important;
      background:
        linear-gradient(135deg, rgba(255, 232, 166, 0.11), transparent 30%),
        radial-gradient(circle at 25% 0%, rgba(255, 205, 120, 0.12), transparent 42%),
        linear-gradient(180deg, rgba(30, 22, 22, 0.94), rgba(7, 8, 14, 0.96)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 221, 142, 0.68),
        inset 0 0 0 1px rgba(255, 255, 255, 0.09),
        inset 0 -30px 42px rgba(0, 0, 0, 0.26),
        0 26px 60px rgba(0, 0, 0, 0.56),
        0 0 34px rgba(255, 151, 96, 0.12) !important;
      isolation: isolate !important;
      text-align: left !important;
      overflow: hidden !important;
      backdrop-filter: blur(4px) saturate(1.08) !important;
    }

    .overlay.is-settlement .overlay-card::before {
      display: none !important;
      content: none !important;
    }

    .overlay.is-settlement .settlement-visual {
      grid-area: visual !important;
      position: relative !important;
      inset: auto !important;
      z-index: 2 !important;
      width: 100% !important;
      height: auto !important;
      min-height: 0 !important;
      aspect-ratio: 16 / 9 !important;
      margin: 0 !important;
      border: 0 !important;
      border-radius: 7px !important;
      background:
        var(--settlement-image, none) center / cover no-repeat,
        linear-gradient(135deg, rgba(10, 13, 24, 0.96), rgba(3, 5, 12, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 226, 154, 0.42),
        inset 0 0 0 1px rgba(255, 255, 255, 0.07),
        inset 0 -26px 32px rgba(0, 0, 0, 0.34),
        0 16px 28px rgba(0, 0, 0, 0.38) !important;
      overflow: hidden !important;
    }

    .overlay.is-settlement .settlement-video {
      object-fit: cover !important;
      object-position: center !important;
    }

    .overlay.is-settlement .settlement-visual::before {
      z-index: 2 !important;
      background:
        linear-gradient(180deg, rgba(255, 244, 198, 0.06), transparent 32%),
        linear-gradient(0deg, rgba(2, 3, 8, 0.46), transparent 50%) !important;
      pointer-events: none !important;
    }

    .overlay.is-settlement .settlement-visual::after {
      left: 0 !important;
      right: 0 !important;
      bottom: 0 !important;
      top: auto !important;
      z-index: 4 !important;
      width: auto !important;
      height: 4px !important;
      border-radius: 0 !important;
      background: linear-gradient(90deg, #ff7fb4, #f0b85c, #7adfff) !important;
    }

    .overlay.is-settlement .settlement-visual-meta {
      left: 12px !important;
      right: 12px !important;
      top: auto !important;
      bottom: 12px !important;
      z-index: 5 !important;
      display: flex !important;
      align-items: end !important;
      justify-content: space-between !important;
      gap: 10px !important;
      text-align: left !important;
    }

    .overlay.is-settlement .settlement-visual-meta strong {
      color: #fff0bd !important;
      font-size: clamp(16px, 2vw, 24px) !important;
      line-height: 1 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.68), 0 0 14px rgba(255, 201, 106, 0.24) !important;
    }

    .overlay.is-settlement .settlement-visual-meta span {
      display: block !important;
      max-width: 34ch !important;
      margin-top: 5px !important;
      color: rgba(255, 238, 210, 0.76) !important;
      font-size: 11px !important;
      line-height: 1.28 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    .overlay.is-settlement .settlement-duration {
      display: block !important;
      flex: 0 0 auto !important;
      border: 0 !important;
      border-radius: 999px !important;
      background: rgba(3, 4, 10, 0.72) !important;
      color: #ffe4a4 !important;
      font-size: 11px !important;
      box-shadow: inset 0 0 0 1px rgba(255, 226, 145, 0.2) !important;
    }

    .overlay.is-settlement .overlay-card h1 {
      grid-area: title !important;
      z-index: 2 !important;
      align-self: start !important;
      max-width: none !important;
      margin: 0 !important;
      color: #fff0bd !important;
      font-size: clamp(38px, 5vw, 66px) !important;
      line-height: 0.92 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      text-shadow:
        0 3px 0 rgba(0, 0, 0, 0.56),
        0 0 20px rgba(255, 205, 112, 0.24) !important;
    }

    .overlay.is-settlement.is-defeat .overlay-card h1 {
      color: #ff9caf !important;
      text-shadow:
        0 3px 0 rgba(0, 0, 0, 0.58),
        0 0 18px rgba(255, 84, 124, 0.28) !important;
    }

    .overlay.is-settlement .overlay-card p {
      grid-area: copy !important;
      z-index: 2 !important;
      max-width: none !important;
      margin: 0 !important;
      color: rgba(255, 235, 208, 0.78) !important;
      font-size: 13px !important;
      font-weight: 760 !important;
      line-height: 1.38 !important;
    }

    .overlay.is-settlement .overlay-stats {
      grid-area: stats !important;
      z-index: 2 !important;
      display: grid !important;
      grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
      gap: 7px !important;
      margin: 0 !important;
    }

    .overlay.is-settlement .overlay-stats span {
      min-height: 54px !important;
      padding: 8px !important;
      border: 0 !important;
      border-radius: 6px !important;
      background: rgba(4, 5, 11, 0.5) !important;
      box-shadow: inset 0 0 0 1px rgba(255, 226, 145, 0.16) !important;
      backdrop-filter: none !important;
    }

    .overlay.is-settlement .settlement-panel {
      grid-area: panel !important;
      z-index: 2 !important;
      display: grid !important;
      grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
      gap: 7px !important;
      margin: 0 !important;
    }

    .overlay.is-settlement .settlement-card {
      min-height: 72px !important;
      padding: 9px !important;
      border: 0 !important;
      border-radius: 6px !important;
      background:
        linear-gradient(180deg, rgba(255, 234, 178, 0.08), rgba(255, 234, 178, 0.02)),
        rgba(5, 6, 12, 0.58) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 226, 145, 0.18),
        inset 0 -14px 18px rgba(0, 0, 0, 0.22) !important;
      backdrop-filter: none !important;
    }

    .overlay.is-settlement .primary {
      grid-area: action !important;
      z-index: 2 !important;
      align-self: end !important;
      width: 100% !important;
      min-height: 46px !important;
      border: 0 !important;
      border-radius: 7px !important;
      background:
        radial-gradient(circle at 50% 0%, rgba(255, 218, 130, 0.22), transparent 54%),
        linear-gradient(180deg, rgba(91, 43, 42, 0.96), rgba(18, 9, 13, 0.98)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 226, 145, 0.54),
        inset 0 1px 0 rgba(255, 255, 255, 0.12),
        0 12px 22px rgba(0, 0, 0, 0.34) !important;
    }

    @media (max-width: 860px) {
      .overlay.is-settlement .overlay-card {
        width: min(760px, calc(100vw - 28px)) !important;
        grid-template-columns: minmax(300px, 1fr) minmax(220px, 0.78fr) !important;
        gap: 10px 12px !important;
      }

      .overlay.is-settlement .overlay-card h1 {
        font-size: clamp(32px, 6vw, 48px) !important;
      }

      .overlay.is-settlement .settlement-visual-meta span {
        display: none !important;
      }
    }

    /* Settlement state: remove battle hand cards so the result animation is clean. */
    html[data-settlement-open] .build-panel,
    html[data-game-mode="victory"] .build-panel,
    html[data-game-mode="defeat"] .build-panel,
    html[data-settlement-open] [data-card-hand-shell],
    html[data-game-mode="victory"] [data-card-hand-shell],
    html[data-game-mode="defeat"] [data-card-hand-shell] {
      display: none !important;
      visibility: hidden !important;
      pointer-events: none !important;
    }

    /* Camp dock icon cleanup: transparent square assets, larger readable symbols, no black icon plate. */
    .camp-screen[data-reference-ui="true"] .camp-bottom-dock,
    .camp-bottom-dock {
      width: 86px !important;
      right: max(8px, env(safe-area-inset-right)) !important;
      gap: 8px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button,
    .camp-dock-button {
      min-height: 66px !important;
      height: 66px !important;
      grid-template-rows: 46px 16px !important;
      gap: 1px !important;
      padding: 5px 4px 5px !important;
      border: 0 !important;
      border-radius: 7px !important;
      background:
        radial-gradient(circle at 50% 34%, rgba(255, 220, 140, 0.2), transparent 58%),
        linear-gradient(180deg, rgba(41, 26, 24, 0.48), rgba(6, 6, 10, 0.26)) !important;
      box-shadow:
        0 9px 15px rgba(0, 0, 0, 0.28),
        inset 0 0 0 1px rgba(255, 226, 145, 0.1),
        inset 0 -14px 18px rgba(0, 0, 0, 0.2) !important;
      backdrop-filter: blur(2px) saturate(1.05) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button.is-primary,
    .camp-dock-button.is-primary {
      background:
        radial-gradient(circle at 50% 34%, rgba(255, 145, 86, 0.32), transparent 60%),
        linear-gradient(180deg, rgba(84, 36, 27, 0.55), rgba(13, 6, 8, 0.28)) !important;
      box-shadow:
        0 10px 16px rgba(0, 0, 0, 0.3),
        0 0 18px rgba(255, 122, 70, 0.2),
        inset 0 0 0 1px rgba(255, 230, 150, 0.16),
        inset 0 -14px 19px rgba(0, 0, 0, 0.22) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button::before,
    .camp-screen[data-reference-ui="true"] .camp-dock-button::after,
    .camp-dock-button::before,
    .camp-dock-button::after {
      display: none !important;
      content: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video,
    .camp-dock-button .facility-loop-video {
      grid-row: 1 !important;
      width: 62px !important;
      height: 62px !important;
      max-width: none !important;
      max-height: none !important;
      margin: -7px 0 -6px !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      object-fit: contain !important;
      object-position: center !important;
      image-rendering: auto !important;
      mix-blend-mode: normal !important;
      filter:
        drop-shadow(0 8px 8px rgba(0, 0, 0, 0.52))
        drop-shadow(0 0 10px rgba(255, 216, 132, 0.24)) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span,
    .camp-dock-button span {
      grid-row: 2 !important;
      font-size: 13px !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
    }

    /* Camp background MP4 restore: show the Seedance loop behind the HUD, with the still as poster fallback. */
    .camp-screen[data-reference-ui="true"],
    .camp-screen:not([data-reference-ui="false"]) {
      background:
        radial-gradient(circle at 25% 18%, rgba(255, 106, 177, 0.16), transparent 26%),
        radial-gradient(circle at 78% 12%, rgba(255, 210, 116, 0.16), transparent 28%),
        linear-gradient(90deg, rgba(2, 3, 9, 0.92), rgba(3, 5, 15, 0.18) 34%, rgba(3, 5, 15, 0.12) 70%, rgba(2, 3, 9, 0.68)),
        #02030a !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-visual,
    .camp-idle-visual {
      display: block !important;
      visibility: visible !important;
      position: absolute !important;
      inset: 0 !important;
      z-index: 0 !important;
      opacity: 1 !important;
      pointer-events: none !important;
      overflow: hidden !important;
      background:
        var(--camp-idle-poster, url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png")) center / cover no-repeat,
        linear-gradient(180deg, #050716, #090a15) !important;
      filter: saturate(1.04) contrast(1.03) brightness(0.9) !important;
      transform: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-visual::before,
    .camp-idle-visual::before {
      content: "" !important;
      position: absolute !important;
      inset: 0 !important;
      z-index: 2 !important;
      pointer-events: none !important;
      background:
        linear-gradient(90deg, rgba(2, 3, 10, 0.78) 0%, rgba(2, 3, 10, 0.22) 28%, rgba(2, 3, 10, 0.1) 62%, rgba(2, 3, 10, 0.66) 100%),
        linear-gradient(180deg, rgba(2, 3, 10, 0.12), rgba(2, 3, 10, 0.02) 42%, rgba(2, 3, 10, 0.62)),
        radial-gradient(circle at 52% 64%, rgba(255, 182, 112, 0.08), transparent 34%) !important;
      opacity: 1 !important;
      mix-blend-mode: normal !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-video,
    .camp-screen[data-reference-ui="true"] .camp-idle-video.seamless-video-peer,
    .camp-idle-video,
    .camp-idle-video.seamless-video-peer {
      display: block !important;
      position: absolute !important;
      inset: 0 !important;
      width: 100% !important;
      height: 100% !important;
      object-fit: cover !important;
      object-position: center !important;
      opacity: 0 !important;
      filter: saturate(1.08) contrast(1.04) brightness(0.9) !important;
      transition: opacity 420ms ease !important;
      mix-blend-mode: normal !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-video.is-ready,
    .camp-idle-video.is-ready {
      opacity: 0.9 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-video.is-seamless-fading-out,
    .camp-idle-video.is-seamless-fading-out {
      opacity: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-shell,
    .camp-shell {
      background: transparent !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-grid,
    .camp-screen[data-reference-ui="true"] .camp-side {
      background:
        linear-gradient(90deg, rgba(2, 3, 10, 0.58) 0%, rgba(2, 3, 10, 0.12) 24%, rgba(2, 3, 10, 0.02) 70%, rgba(2, 3, 10, 0.48) 100%),
        linear-gradient(180deg, rgba(2, 3, 10, 0.06), rgba(2, 3, 10, 0.28)) !important;
      filter: none !important;
    }

    /* Camp heroine framing: keep the 150% presence, but lower the head so the face clears the chapter plaque. */
    .camp-screen[data-reference-ui="true"] .camp-portrait {
      top: 10px !important;
      left: -188px !important;
      width: 820px !important;
      height: 980px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img {
      object-position: left 52% !important;
      transform: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source {
      left: -188px !important;
      top: 2px !important;
      width: 820px !important;
      height: 980px !important;
      object-position: left 52% !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video.seamless-video-peer {
      left: -196px !important;
      top: 30px !important;
      width: 790px !important;
      height: 942px !important;
      object-position: left 54% !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-showcase-video.seamless-video-peer {
      left: -202px !important;
      top: 26px !important;
      width: 810px !important;
      height: 968px !important;
      object-position: left 53% !important;
    }

    /* Camp map cleanup: remove floating building text labels and let the painted scene read cleanly. */
    .camp-screen[data-reference-ui="true"] .camp-map-nav,
    .camp-map-nav {
      display: none !important;
      visibility: hidden !important;
      pointer-events: none !important;
    }

    /* iPhone landscape framing: bring the painted camp/video background closer inside the locked stage. */
    .camp-screen[data-reference-ui="true"] .camp-idle-visual,
    .camp-idle-visual {
      inset: -5.5% !important;
      background-position: 54% 50% !important;
      background-size: cover !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-video,
    .camp-screen[data-reference-ui="true"] .camp-idle-video.seamless-video-peer,
    .camp-idle-video,
    .camp-idle-video.seamless-video-peer {
      object-position: 54% 50% !important;
    }

    /* Clickwasher battle-style prototype: URL flag only, preserves Yatta's girl towers while testing a toy-like TD combat skin. */
    html[data-battle-style="clickwasher"] {
      --cw-plate: rgba(9, 12, 19, 0.84);
      --cw-plate-deep: rgba(4, 6, 11, 0.92);
      --cw-gold: #ffd266;
      --cw-cream: #fff2bc;
      --cw-cyan: #62e7ff;
      --cw-rose: #ff6aa9;
      --cw-green: #7ee987;
      --cw-line: rgba(255, 224, 143, 0.5);
      --cw-shadow: rgba(0, 0, 0, 0.56);
    }

    html[data-battle-style="clickwasher"] body::before {
      content: "";
      position: fixed;
      inset: 0;
      z-index: 2;
      pointer-events: none;
      background:
        radial-gradient(circle at 50% 52%, transparent 0 42%, rgba(0, 0, 0, 0.12) 68%, rgba(0, 0, 0, 0.38) 100%),
        linear-gradient(180deg, rgba(255, 231, 150, 0.05), transparent 18%, rgba(9, 13, 20, 0.2));
      mix-blend-mode: multiply;
    }

    html[data-battle-style="clickwasher"] canvas {
      filter: saturate(1.18) contrast(1.07) brightness(1.03);
    }

    html[data-battle-style="clickwasher"][data-ui-mode="battle"] .top-hud,
    html[data-battle-style="clickwasher"][data-game-mode="countdown"] .top-hud,
    html[data-battle-style="clickwasher"][data-game-mode="playing"] .top-hud,
    html[data-battle-style="clickwasher"][data-game-mode="paused"] .top-hud {
      left: 10px !important;
      right: 10px !important;
      top: 8px !important;
      width: auto !important;
      min-height: 58px !important;
      display: flex !important;
      align-items: flex-start !important;
      gap: 7px !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      pointer-events: none !important;
      z-index: 120 !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .stat,
    html[data-battle-style="clickwasher"] .top-hud .wave-panel {
      pointer-events: auto !important;
      border: 2px solid rgba(255, 222, 133, 0.56) !important;
      border-radius: 8px !important;
      background:
        linear-gradient(180deg, rgba(255, 244, 190, 0.1), transparent 26%),
        linear-gradient(180deg, var(--cw-plate), var(--cw-plate-deep)) !important;
      box-shadow:
        0 10px 18px var(--cw-shadow),
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        inset 0 -16px 22px rgba(0, 0, 0, 0.28) !important;
      backdrop-filter: blur(5px) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .stat {
      min-width: 92px !important;
      height: 48px !important;
      display: grid !important;
      grid-template-columns: 28px minmax(0, 1fr) !important;
      grid-template-rows: 17px 1fr !important;
      align-items: center !important;
      column-gap: 5px !important;
      padding: 5px 8px !important;
      overflow: hidden !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .castle-stat {
      min-width: 150px !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .hud-icon {
      grid-row: 1 / 3 !important;
      width: 26px !important;
      height: 26px !important;
      filter: drop-shadow(0 2px 0 rgba(0, 0, 0, 0.7)) drop-shadow(0 0 9px rgba(255, 210, 102, 0.26)) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .stat span,
    html[data-battle-style="clickwasher"] .top-hud .combat-chip span {
      color: rgba(255, 242, 196, 0.76) !important;
      font-size: 9px !important;
      font-weight: 900 !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .stat strong,
    html[data-battle-style="clickwasher"] .top-hud .combat-chip strong,
    html[data-battle-style="clickwasher"] .top-hud .wave-panel header strong {
      color: var(--cw-cream) !important;
      font-size: 17px !important;
      font-weight: 950 !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.74), 0 0 12px rgba(255, 213, 94, 0.22) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .stat[data-stat="gold"] strong { color: var(--cw-gold) !important; }
    html[data-battle-style="clickwasher"] .top-hud .stat[data-stat="monsters"] strong { color: var(--cw-rose) !important; }
    html[data-battle-style="clickwasher"] .top-hud .stat[data-stat="kills"] strong { color: var(--cw-green) !important; }
    html[data-battle-style="clickwasher"] .top-hud .stat[data-stat="wave"] strong { color: var(--cw-cyan) !important; }

    html[data-battle-style="clickwasher"] .top-hud .hp-track {
      grid-column: 2 !important;
      height: 6px !important;
      border-radius: 999px !important;
      background: rgba(0, 0, 0, 0.48) !important;
      box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .hp-track i {
      border-radius: inherit !important;
      background: linear-gradient(90deg, var(--cw-green), var(--cw-gold), var(--cw-rose)) !important;
      box-shadow: 0 0 10px rgba(126, 233, 135, 0.5) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .wave-panel {
      margin-left: auto !important;
      width: min(410px, 40vw) !important;
      min-height: 58px !important;
      display: grid !important;
      grid-template-columns: minmax(0, 1fr) auto !important;
      grid-template-rows: auto auto !important;
      gap: 5px 8px !important;
      padding: 7px 8px !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .wave-panel header {
      grid-column: 1 / 2 !important;
      min-height: 18px !important;
      display: flex !important;
      align-items: center !important;
      gap: 6px !important;
      margin: 0 !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .wave-panel header span {
      color: rgba(255, 242, 196, 0.76) !important;
      font-size: 10px !important;
      line-height: 1 !important;
      white-space: nowrap !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .combat-readout {
      grid-column: 1 / 2 !important;
      display: flex !important;
      gap: 5px !important;
      overflow: hidden !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .combat-chip {
      min-width: 0 !important;
      height: 22px !important;
      display: grid !important;
      grid-template-columns: 5px minmax(0, 1fr) auto !important;
      gap: 4px !important;
      align-items: center !important;
      padding: 3px 6px !important;
      border-radius: 999px !important;
      background: rgba(0, 0, 0, 0.38) !important;
      box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .combat-chip::before {
      width: 5px !important;
      height: 12px !important;
      border-radius: 999px !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .combat-alert {
      display: none !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .command-row {
      grid-column: 2 / 3 !important;
      grid-row: 1 / 3 !important;
      display: grid !important;
      grid-template-columns: repeat(3, 42px) !important;
      gap: 5px !important;
      align-content: center !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .wave-panel button {
      width: 42px !important;
      height: 42px !important;
      min-width: 42px !important;
      min-height: 42px !important;
      padding: 0 !important;
      display: grid !important;
      place-items: center !important;
      border: 2px solid rgba(255, 230, 151, 0.52) !important;
      border-radius: 8px !important;
      background:
        radial-gradient(circle at 50% 24%, rgba(255, 255, 255, 0.16), transparent 42%),
        linear-gradient(180deg, rgba(62, 71, 82, 0.98), rgba(15, 18, 26, 0.98)) !important;
      color: transparent !important;
      font-size: 0 !important;
      box-shadow:
        0 8px 12px rgba(0, 0, 0, 0.42),
        inset 0 -10px 16px rgba(0, 0, 0, 0.32) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .wave-panel button::before {
      width: 18px !important;
      height: 18px !important;
      margin: 0 !important;
      filter: drop-shadow(0 2px 0 rgba(0, 0, 0, 0.72)) !important;
    }

    html[data-battle-style="clickwasher"] .top-hud .wave-panel .primary {
      background:
        radial-gradient(circle at 50% 24%, rgba(255, 244, 194, 0.24), transparent 48%),
        linear-gradient(180deg, #ffbd48, #c86430) !important;
      border-color: rgba(255, 239, 170, 0.74) !important;
      box-shadow:
        0 10px 16px rgba(147, 67, 24, 0.46),
        0 0 20px rgba(255, 178, 80, 0.34),
        inset 0 -12px 18px rgba(94, 34, 17, 0.32) !important;
    }

    html[data-battle-style="clickwasher"][data-ui-mode="battle"] .build-panel,
    html[data-battle-style="clickwasher"][data-game-mode="countdown"] .build-panel,
    html[data-battle-style="clickwasher"][data-game-mode="playing"] .build-panel,
    html[data-battle-style="clickwasher"][data-game-mode="paused"] .build-panel {
      left: 50% !important;
      right: auto !important;
      bottom: 12px !important;
      width: min(714px, calc(100vw - 24px)) !important;
      max-width: calc(100vw - 24px) !important;
      transform: translateX(-50%) !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      z-index: 115 !important;
    }

    html[data-battle-style="clickwasher"] .build-panel header,
    html[data-battle-style="clickwasher"] .build-panel > p,
    html[data-battle-style="clickwasher"] .tower-status-dock,
    html[data-battle-style="clickwasher"] .slot-grid {
      display: none !important;
    }

    html[data-battle-style="clickwasher"] .hand-shell,
    html[data-battle-style="clickwasher"][data-visible-heroes="1"] .hand-shell {
      min-height: 168px !important;
      padding: 10px 28px 12px !important;
      border: 2px solid rgba(255, 220, 130, 0.56) !important;
      border-radius: 8px !important;
      background:
        linear-gradient(180deg, rgba(255, 244, 190, 0.12), rgba(255, 244, 190, 0.02) 36%),
        linear-gradient(90deg, rgba(41, 24, 28, 0.9), rgba(8, 10, 17, 0.92) 44%, rgba(20, 34, 34, 0.88)) !important;
      box-shadow:
        0 18px 28px rgba(0, 0, 0, 0.58),
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        inset 0 -22px 32px rgba(0, 0, 0, 0.34) !important;
      backdrop-filter: blur(7px) !important;
      overflow: visible !important;
    }

    html[data-battle-style="clickwasher"] .hand-shell::before,
    html[data-battle-style="clickwasher"] .hand-shell::after {
      content: "" !important;
      position: absolute !important;
      top: 10px !important;
      bottom: 10px !important;
      width: 20px !important;
      border-radius: 5px !important;
      background:
        linear-gradient(180deg, rgba(255, 232, 150, 0.42), rgba(126, 233, 135, 0.18)),
        rgba(0, 0, 0, 0.24) !important;
      box-shadow: inset 0 0 0 1px rgba(255, 245, 190, 0.16), 0 0 12px rgba(255, 212, 92, 0.18) !important;
      display: block !important;
      pointer-events: none !important;
    }

    html[data-battle-style="clickwasher"] .hand-shell::before { left: 10px !important; }
    html[data-battle-style="clickwasher"] .hand-shell::after { right: 10px !important; }

    html[data-battle-style="clickwasher"] .hand-shell .type-grid,
    html[data-battle-style="clickwasher"] .type-grid,
    html[data-battle-style="clickwasher"][data-visible-heroes="1"] .type-grid {
      grid-auto-columns: 120px !important;
      gap: 10px !important;
      width: max-content !important;
      margin: 0 auto !important;
      justify-content: start !important;
      padding: 0 !important;
      overflow-x: auto !important;
      overflow-y: visible !important;
      -webkit-mask-image: none !important;
      mask-image: none !important;
    }

    html[data-battle-style="clickwasher"] .tower-card,
    html[data-battle-style="clickwasher"][data-visible-heroes="1"] .tower-card,
    html[data-battle-style="clickwasher"][data-game-mode="countdown"] .tower-card,
    html[data-battle-style="clickwasher"][data-game-mode="playing"] .tower-card,
    html[data-battle-style="clickwasher"][data-game-mode="paused"] .tower-card {
      width: 120px !important;
      min-width: 120px !important;
      height: 146px !important;
      border: 2px solid color-mix(in srgb, var(--rarity-color, #ffd266) 62%, rgba(255, 255, 255, 0.18)) !important;
      border-radius: 8px !important;
      background:
        radial-gradient(circle at 50% 23%, color-mix(in srgb, var(--class-color, #ffd266) 38%, transparent), transparent 54%),
        linear-gradient(180deg, rgba(255, 244, 190, 0.12), rgba(4, 5, 12, 0.96) 72%) !important;
      box-shadow:
        0 12px 18px rgba(0, 0, 0, 0.5),
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        inset 0 -22px 26px rgba(0, 0, 0, 0.44) !important;
      transform: none !important;
    }

    html[data-battle-style="clickwasher"] .tower-card:hover,
    html[data-battle-style="clickwasher"] .tower-card:focus-visible {
      transform: translateY(-5px) !important;
      filter: brightness(1.08) saturate(1.12) !important;
    }

    html[data-battle-style="clickwasher"] .tower-card.selected {
      transform: translateY(-9px) !important;
      box-shadow:
        0 18px 24px rgba(0, 0, 0, 0.58),
        0 0 0 2px rgba(255, 239, 161, 0.78),
        0 0 28px color-mix(in srgb, var(--class-color, #ffd266) 42%, transparent),
        inset 0 0 0 1px rgba(255, 255, 255, 0.2) !important;
    }

    html[data-battle-style="clickwasher"] .tower-card .card-name {
      min-height: 24px !important;
      padding: 0 28px 0 7px !important;
      color: #fff1bb !important;
      font-size: 13px !important;
      background: linear-gradient(90deg, rgba(0, 0, 0, 0.68), rgba(0, 0, 0, 0.04)) !important;
    }

    html[data-battle-style="clickwasher"] .tower-card .portrait {
      inset: 24px 4px 8px !important;
      border-radius: 5px !important;
      background-size: 100% 100%, auto 136% !important;
      background-position: center, center 22% !important;
      filter: saturate(1.22) brightness(1.13) contrast(1.08) !important;
    }

    html[data-battle-style="clickwasher"] .tower-card .card-portrait-image {
      left: 4px !important;
      right: 4px !important;
      top: 20px !important;
      bottom: 8px !important;
      width: calc(100% - 8px) !important;
      height: calc(100% - 28px) !important;
      object-fit: contain !important;
      object-position: center 48% !important;
      transform: scale(1.08) !important;
      filter:
        saturate(1.2)
        brightness(1.12)
        contrast(1.08)
        drop-shadow(0 8px 8px rgba(0, 0, 0, 0.56)) !important;
    }

    html[data-battle-style="clickwasher"] .tower-card .cost-row strong {
      min-width: 26px !important;
      padding: 3px 6px !important;
      border: 1px solid rgba(255, 232, 150, 0.26) !important;
      border-radius: 999px !important;
      background: rgba(2, 4, 10, 0.82) !important;
      color: var(--cw-gold) !important;
      box-shadow: 0 0 12px rgba(255, 204, 91, 0.18) !important;
    }

    html[data-battle-style="clickwasher"] .tower-card.is-deployed {
      border-color: rgba(98, 231, 255, 0.76) !important;
      box-shadow:
        0 12px 18px rgba(0, 0, 0, 0.5),
        0 0 20px rgba(98, 231, 255, 0.26),
        inset 0 0 0 1px rgba(255, 255, 255, 0.1) !important;
    }

    @media (max-width: 1100px) {
      html[data-battle-style="clickwasher"] .top-hud .stat[data-stat="gold"],
      html[data-battle-style="clickwasher"] .top-hud .stat[data-stat="kills"],
      html[data-battle-style="clickwasher"] .top-hud .stat[data-stat="monsters"] {
        display: none !important;
      }

      html[data-battle-style="clickwasher"] .top-hud .wave-panel {
        width: min(320px, 46vw) !important;
      }
    }

    @media (max-width: 900px) {

      html[data-battle-style="clickwasher"] .hand-shell {
        padding-inline: 32px !important;
      }

      html[data-battle-style="clickwasher"] .hand-shell .type-grid,
      html[data-battle-style="clickwasher"] .type-grid {
        justify-content: start !important;
      }
    }

    html[data-battle-style="clickwasher"] .top-hud .wave-panel button,
    html[data-battle-style="clickwasher"][data-game-mode="countdown"] .top-hud .wave-panel button,
    html[data-battle-style="clickwasher"][data-game-mode="playing"] .top-hud .wave-panel button,
    html[data-battle-style="clickwasher"][data-game-mode="paused"] .top-hud .wave-panel button {
      color: transparent !important;
      font-size: 0 !important;
      line-height: 0 !important;
      text-shadow: none !important;
      text-indent: -999px !important;
      overflow: hidden !important;
    }

    html[data-battle-style="clickwasher"][data-ui-mode="battle"] .hand-shell .type-grid,
    html[data-battle-style="clickwasher"][data-ui-mode="battle"][data-visible-heroes="1"] .type-grid,
    html[data-battle-style="clickwasher"][data-game-mode="countdown"] .type-grid,
    html[data-battle-style="clickwasher"][data-game-mode="playing"] .type-grid,
    html[data-battle-style="clickwasher"][data-game-mode="paused"] .type-grid {
      width: max-content !important;
      min-width: 0 !important;
      max-width: 100% !important;
      grid-auto-columns: 120px !important;
      gap: 10px !important;
      margin: 0 auto !important;
      justify-content: start !important;
    }

    html[data-battle-style="clickwasher"][data-ui-mode="battle"] .tower-card,
    html[data-battle-style="clickwasher"][data-ui-mode="battle"][data-visible-heroes="1"] .tower-card,
    html[data-battle-style="clickwasher"][data-game-mode="countdown"] .tower-card,
    html[data-battle-style="clickwasher"][data-game-mode="playing"] .tower-card,
    html[data-battle-style="clickwasher"][data-game-mode="paused"] .tower-card {
      width: 120px !important;
      min-width: 120px !important;
      height: 146px !important;
      min-height: 146px !important;
    }
  
    /* Battle hand Fly.io restore: return to the deployed readable card strip instead of the over-large text-heavy pass. */
    html[data-ui-mode="battle"] .build-panel,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .build-panel,
    html[data-game-mode="countdown"] .build-panel,
    html[data-game-mode="playing"] .build-panel,
    html[data-game-mode="paused"] .build-panel {
      left: 12px !important;
      right: auto !important;
      bottom: max(10px, env(safe-area-inset-bottom)) !important;
      width: min(500px, calc(100vw - 384px)) !important;
      min-width: 306px !important;
      max-width: calc(100vw - 24px) !important;
      padding: 0 !important;
      transform: none !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      filter: none !important;
      pointer-events: auto !important;
      z-index: 86 !important;
    }

    html[data-ui-mode="battle"] .build-panel header,
    html[data-ui-mode="battle"] .build-panel > p,
    html[data-game-mode="countdown"] .build-panel header,
    html[data-game-mode="playing"] .build-panel header,
    html[data-game-mode="paused"] .build-panel header,
    html[data-game-mode="countdown"] .build-panel > p,
    html[data-game-mode="playing"] .build-panel > p,
    html[data-game-mode="paused"] .build-panel > p {
      display: none !important;
    }

    html[data-ui-mode="battle"] .hand-shell,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .hand-shell,
    html[data-game-mode="countdown"] .hand-shell,
    html[data-game-mode="playing"] .hand-shell,
    html[data-game-mode="paused"] .hand-shell {
      position: relative !important;
      width: 100% !important;
      min-width: 0 !important;
      min-height: 0 !important;
      height: auto !important;
      padding: 0 30px 10px !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      backdrop-filter: none !important;
      overflow: visible !important;
      pointer-events: auto !important;
      --hand-left-fade: 0;
      --hand-right-fade: 0;
    }

    html[data-ui-mode="battle"] .hand-shell::before,
    html[data-ui-mode="battle"] .hand-shell::after,
    html[data-game-mode="countdown"] .hand-shell::before,
    html[data-game-mode="countdown"] .hand-shell::after,
    html[data-game-mode="playing"] .hand-shell::before,
    html[data-game-mode="playing"] .hand-shell::after,
    html[data-game-mode="paused"] .hand-shell::before,
    html[data-game-mode="paused"] .hand-shell::after {
      content: "" !important;
      position: absolute !important;
      top: 10px !important;
      bottom: 18px !important;
      z-index: 4 !important;
      width: 34px !important;
      display: block !important;
      pointer-events: none !important;
      opacity: var(--hand-left-fade, 0) !important;
      transition: opacity 160ms ease !important;
    }

    html[data-ui-mode="battle"] .hand-shell::before,
    html[data-game-mode="countdown"] .hand-shell::before,
    html[data-game-mode="playing"] .hand-shell::before,
    html[data-game-mode="paused"] .hand-shell::before {
      left: 26px !important;
      background: linear-gradient(90deg, rgba(4, 6, 17, 0.92), transparent) !important;
    }

    html[data-ui-mode="battle"] .hand-shell::after,
    html[data-game-mode="countdown"] .hand-shell::after,
    html[data-game-mode="playing"] .hand-shell::after,
    html[data-game-mode="paused"] .hand-shell::after {
      right: 26px !important;
      background: linear-gradient(270deg, rgba(4, 6, 17, 0.92), transparent) !important;
      opacity: var(--hand-right-fade, 0) !important;
    }

    html[data-ui-mode="battle"] .hand-shell .type-grid,
    html[data-ui-mode="battle"] .type-grid,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .type-grid,
    html[data-game-mode="countdown"] .type-grid,
    html[data-game-mode="playing"] .type-grid,
    html[data-game-mode="paused"] .type-grid {
      width: 100% !important;
      min-width: 0 !important;
      display: grid !important;
      grid-auto-flow: column !important;
      grid-auto-columns: 76px !important;
      justify-content: start !important;
      gap: 2px !important;
      padding: 9px 8px 11px !important;
      border: 1px solid rgba(255, 226, 170, 0.16) !important;
      border-radius: 8px !important;
      background:
        radial-gradient(circle at 12% 0%, rgba(103, 223, 255, 0.12), transparent 34%),
        linear-gradient(180deg, rgba(5, 9, 24, 0.32), rgba(2, 4, 13, 0.14)) !important;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.06),
        inset 0 -18px 24px rgba(0, 0, 0, 0.18) !important;
      overflow-x: auto !important;
      overflow-y: visible !important;
      overscroll-behavior-x: contain !important;
      scroll-snap-type: x proximity !important;
      scroll-padding-inline: 18px !important;
      scrollbar-color: rgba(255, 213, 128, 0.58) rgba(6, 9, 22, 0.32) !important;
      scrollbar-width: none !important;
      -webkit-mask-image: none !important;
      mask-image: none !important;
      cursor: grab !important;
      touch-action: pan-x !important;
    }

    html[data-ui-mode="battle"] .type-grid::-webkit-scrollbar,
    html[data-game-mode="countdown"] .type-grid::-webkit-scrollbar,
    html[data-game-mode="playing"] .type-grid::-webkit-scrollbar,
    html[data-game-mode="paused"] .type-grid::-webkit-scrollbar {
      width: 0 !important;
      height: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .tower-card,
    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card,
    html[data-game-mode="paused"] .tower-card {
      --class-accent: var(--class-color, #f0b85c);
      --card-raise: 0px;
      --fan-angle: 0deg;
      position: relative !important;
      width: auto !important;
      min-width: 0 !important;
      height: auto !important;
      min-height: auto !important;
      aspect-ratio: 9 / 16 !important;
      display: grid !important;
      grid-template-rows: 1fr 25px !important;
      margin-right: -10px !important;
      padding: 0 !important;
      border: 1px solid color-mix(in srgb, var(--class-accent) 58%, rgba(255, 226, 170, 0.32)) !important;
      border-radius: 9px !important;
      clip-path: none !important;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 22%),
        linear-gradient(165deg, color-mix(in srgb, var(--class-accent) 20%, transparent), rgba(3, 5, 16, 0.96) 52%, rgba(2, 3, 10, 0.98)) !important;
      color: #fff4de !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 248, 224, 0.08),
        0 10px 20px rgba(0, 0, 0, 0.32),
        0 0 18px color-mix(in srgb, var(--class-accent) 24%, transparent) !important;
      overflow: visible !important;
      isolation: isolate !important;
      scroll-snap-align: start !important;
      transform: translateY(var(--card-raise)) rotate(var(--fan-angle)) !important;
      transform-origin: 50% 118% !important;
      pointer-events: auto !important;
    }

    html[data-ui-mode="battle"] .tower-card:hover,
    html[data-ui-mode="battle"] .tower-card:focus-visible {
      --card-raise: -12px;
      z-index: 6 !important;
      filter: saturate(1.1) brightness(1.05) !important;
      outline: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card.selected,
    html[data-game-mode="countdown"] .tower-card.selected,
    html[data-game-mode="playing"] .tower-card.selected,
    html[data-game-mode="paused"] .tower-card.selected {
      --card-raise: -20px;
      z-index: 5 !important;
      border-color: color-mix(in srgb, var(--rarity-color, #2b78cf) 70%, #ffffff 14%) !important;
      box-shadow:
        inset 0 0 0 2px rgba(234, 245, 255, 0.46),
        0 0 0 2px var(--rarity-glow, rgba(42, 129, 215, 0.46)),
        0 16px 26px rgba(0, 0, 0, 0.34),
        0 0 22px var(--rarity-glow, rgba(42, 129, 215, 0.42)) !important;
      filter: saturate(1.08) brightness(1.06) !important;
    }

    html[data-ui-mode="battle"] .tower-card::after,
    html[data-game-mode="countdown"] .tower-card::after,
    html[data-game-mode="playing"] .tower-card::after,
    html[data-game-mode="paused"] .tower-card::after {
      content: "" !important;
      position: absolute !important;
      inset: 0 !important;
      z-index: 2 !important;
      opacity: 0.18 !important;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 20%, rgba(0, 0, 0, 0.12)),
        linear-gradient(0deg, rgba(3, 5, 15, 0.3) 0 12%, transparent 30%) !important;
      mix-blend-mode: screen !important;
      pointer-events: none !important;
      border-radius: inherit !important;
    }

    html[data-ui-mode="battle"] .tower-card .portrait,
    html[data-game-mode="countdown"] .tower-card .portrait,
    html[data-game-mode="playing"] .tower-card .portrait,
    html[data-game-mode="paused"] .tower-card .portrait {
      position: absolute !important;
      inset: 3px 3px 25px !important;
      z-index: 3 !important;
      display: block !important;
      border-radius: 6px 6px 0 0 !important;
      border-bottom: 1px solid color-mix(in srgb, var(--class-accent) 42%, rgba(255, 255, 255, 0.08)) !important;
      background-color: #070a18 !important;
      background-image: var(--portrait) !important;
      background-size: cover !important;
      background-position: center 18% !important;
      opacity: 1 !important;
      filter: saturate(1.18) brightness(1.08) contrast(1.04) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.1),
        inset 0 -16px 18px rgba(2, 3, 11, 0.34) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-portrait-image,
    html[data-game-mode="countdown"] .tower-card .card-portrait-image,
    html[data-game-mode="playing"] .tower-card .card-portrait-image,
    html[data-game-mode="paused"] .tower-card .card-portrait-image {
      position: absolute !important;
      left: 3px !important;
      right: 3px !important;
      top: 3px !important;
      bottom: 25px !important;
      z-index: 4 !important;
      width: calc(100% - 6px) !important;
      height: calc(100% - 28px) !important;
      object-fit: cover !important;
      object-position: center 18% !important;
      transform: none !important;
      opacity: 1 !important;
      filter: saturate(1.12) brightness(1.05) contrast(1.04) !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card.has-card-video:hover .portrait,
    html[data-ui-mode="battle"] .tower-card.has-card-video:focus-visible .portrait,
    html[data-ui-mode="battle"] .tower-card.has-card-video.is-previewing-video .portrait {
      opacity: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-hover-video,
    html[data-game-mode="countdown"] .tower-card .card-hover-video,
    html[data-game-mode="playing"] .tower-card .card-hover-video,
    html[data-game-mode="paused"] .tower-card .card-hover-video {
      position: absolute !important;
      inset: 3px 3px 25px !important;
      z-index: 4 !important;
      width: calc(100% - 6px) !important;
      height: calc(100% - 28px) !important;
      object-fit: cover !important;
      object-position: center 18% !important;
      opacity: 0 !important;
      border-radius: 6px 6px 0 0 !important;
      pointer-events: none !important;
      transform: scale(1.012) !important;
    }

    html[data-ui-mode="battle"] .tower-card.has-card-video:hover .card-hover-video,
    html[data-ui-mode="battle"] .tower-card.has-card-video:focus-visible .card-hover-video,
    html[data-ui-mode="battle"] .tower-card.has-card-video.is-previewing-video .card-hover-video {
      opacity: 1 !important;
      filter: saturate(1.12) brightness(1.08) contrast(1.04) !important;
      transform: scale(1.035) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-name,
    html[data-game-mode="countdown"] .tower-card .card-name,
    html[data-game-mode="playing"] .tower-card .card-name,
    html[data-game-mode="paused"] .tower-card .card-name {
      position: relative !important;
      z-index: 6 !important;
      grid-row: 1 !important;
      align-self: start !important;
      min-height: 20px !important;
      display: grid !important;
      place-items: center !important;
      padding: 4px 28px 0 6px !important;
      background: linear-gradient(180deg, rgba(18, 17, 32, 0.72), rgba(18, 17, 32, 0)) !important;
      color: #fff1dc !important;
      font-size: 0.5rem !important;
      line-height: 1 !important;
      letter-spacing: 0.06em !important;
      white-space: nowrap !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      opacity: 0 !important;
      text-shadow: 0 0 8px rgba(0, 0, 0, 0.8) !important;
    }

    html[data-ui-mode="battle"] .tower-card:hover .card-name,
    html[data-ui-mode="battle"] .tower-card:focus-visible .card-name,
    html[data-ui-mode="battle"] .tower-card.selected .card-name {
      opacity: 1 !important;
      transform: translateY(0) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability-strip,
    html[data-game-mode="countdown"] .tower-card .card-ability-strip,
    html[data-game-mode="playing"] .tower-card .card-ability-strip,
    html[data-game-mode="paused"] .tower-card .card-ability-strip {
      position: absolute !important;
      left: 4px !important;
      top: auto !important;
      bottom: 36px !important;
      z-index: 6 !important;
      width: 27px !important;
      display: grid !important;
      align-content: end !important;
      gap: 3px !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability,
    html[data-game-mode="countdown"] .tower-card .card-ability,
    html[data-game-mode="playing"] .tower-card .card-ability,
    html[data-game-mode="paused"] .tower-card .card-ability {
      display: grid !important;
      place-items: center !important;
      min-height: 24px !important;
      padding: 2px 1px 3px !important;
      border: 1px solid rgba(255, 245, 218, 0.36) !important;
      border-radius: 5px !important;
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.02)),
        rgba(8, 10, 24, 0.72) !important;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 5px 10px rgba(0, 0, 0, 0.32),
        0 0 10px color-mix(in srgb, var(--ability-color, #ffd06a) 26%, transparent) !important;
      color: #fff5da !important;
      text-shadow: 0 2px 0 rgba(0, 0, 0, 0.56) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability strong,
    html[data-game-mode="countdown"] .tower-card .card-ability strong,
    html[data-game-mode="playing"] .tower-card .card-ability strong,
    html[data-game-mode="paused"] .tower-card .card-ability strong {
      display: block !important;
      font-size: clamp(0.56rem, 0.96vw, 0.74rem) !important;
      line-height: 0.92 !important;
      letter-spacing: 0 !important;
      color: var(--ability-color, #ffd06a) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-ability span,
    html[data-game-mode="countdown"] .tower-card .card-ability span,
    html[data-game-mode="playing"] .tower-card .card-ability span,
    html[data-game-mode="paused"] .tower-card .card-ability span {
      display: block !important;
      margin-top: 2px !important;
      color: rgba(255, 237, 210, 0.72) !important;
      font-size: 0.3rem !important;
      line-height: 1 !important;
      letter-spacing: 0.05em !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-runtime-values,
    html[data-ui-mode="battle"] .tower-card .card-runtime-values span,
    html[data-ui-mode="battle"] .tower-card .card-runtime-values i,
    html[data-ui-mode="battle"] .tower-card .card-runtime-values strong,
    html[data-game-mode="countdown"] .tower-card .card-runtime-values,
    html[data-game-mode="playing"] .tower-card .card-runtime-values,
    html[data-game-mode="paused"] .tower-card .card-runtime-values,
    html[data-ui-mode="battle"] .tower-card .card-statline,
    html[data-game-mode="countdown"] .tower-card .card-statline,
    html[data-game-mode="playing"] .tower-card .card-statline,
    html[data-game-mode="paused"] .tower-card .card-statline {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row,
    html[data-game-mode="countdown"] .tower-card .cost-row,
    html[data-game-mode="playing"] .tower-card .cost-row,
    html[data-game-mode="paused"] .tower-card .cost-row {
      position: relative !important;
      z-index: 6 !important;
      grid-row: 2 !important;
      min-height: 25px !important;
      height: 25px !important;
      display: grid !important;
      grid-template-columns: 1fr !important;
      align-items: center !important;
      padding: 0 !important;
      border-top: 1px solid color-mix(in srgb, var(--class-accent) 46%, rgba(255, 226, 170, 0.18)) !important;
      background:
        linear-gradient(90deg, color-mix(in srgb, var(--class-accent) 48%, rgba(5, 8, 20, 0.88)), rgba(4, 6, 17, 0.94)),
        rgba(4, 6, 17, 0.92) !important;
      color: #fff4d8 !important;
      font-size: 0.62rem !important;
      font-weight: 950 !important;
      line-height: 1 !important;
      letter-spacing: 0.02em !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row i,
    html[data-game-mode="countdown"] .tower-card .cost-row i,
    html[data-game-mode="playing"] .tower-card .cost-row i,
    html[data-game-mode="paused"] .tower-card .cost-row i {
      display: grid !important;
      place-items: center !important;
      max-width: none !important;
      height: 100% !important;
      padding: 0 3px !important;
      border-right: 0 !important;
      color: #fff4d8 !important;
      font-size: clamp(0.48rem, 0.82vw, 0.7rem) !important;
      font-style: normal !important;
      letter-spacing: 0.04em !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      white-space: nowrap !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row strong,
    html[data-game-mode="countdown"] .tower-card .cost-row strong,
    html[data-game-mode="playing"] .tower-card .cost-row strong,
    html[data-game-mode="paused"] .tower-card .cost-row strong {
      position: absolute !important;
      right: 4px !important;
      bottom: 4px !important;
      display: block !important;
      padding: 3px 5px !important;
      border: 1px solid rgba(255, 226, 170, 0.2) !important;
      border-radius: 999px !important;
      background: rgba(11, 12, 25, 0.72) !important;
      color: #fff7db !important;
      font-size: 0.58rem !important;
      letter-spacing: 0.02em !important;
      opacity: 0 !important;
      transform: translateY(4px) !important;
      white-space: nowrap !important;
    }

    html[data-ui-mode="battle"] .tower-card:hover .cost-row strong,
    html[data-ui-mode="battle"] .tower-card:focus-visible .cost-row strong,
    html[data-ui-mode="battle"] .tower-card.selected .cost-row strong {
      opacity: 1 !important;
      transform: translateY(0) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-rarity-badge,
    html[data-game-mode="countdown"] .tower-card .card-rarity-badge,
    html[data-game-mode="playing"] .tower-card .card-rarity-badge,
    html[data-game-mode="paused"] .tower-card .card-rarity-badge {
      position: absolute !important;
      right: 5px !important;
      top: 5px !important;
      left: auto !important;
      bottom: auto !important;
      z-index: 7 !important;
      min-width: 28px !important;
      height: auto !important;
      padding: 3px 5px !important;
      border: 1px solid color-mix(in srgb, var(--rarity-color, #aaa) 74%, #ffffff 16%) !important;
      border-radius: 999px !important;
      background: rgba(8, 10, 24, 0.74) !important;
      color: var(--rarity-color, #d5d5d5) !important;
      font-size: 0.44rem !important;
      font-weight: 950 !important;
      line-height: 1 !important;
      box-shadow: 0 0 12px var(--rarity-glow, rgba(255, 255, 255, 0.12)) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-skill-ready,
    html[data-game-mode="countdown"] .tower-card .card-skill-ready,
    html[data-game-mode="playing"] .tower-card .card-skill-ready,
    html[data-game-mode="paused"] .tower-card .card-skill-ready {
      left: 8px !important;
      right: 8px !important;
      top: 50% !important;
      bottom: auto !important;
      z-index: 8 !important;
      min-height: 24px !important;
      display: grid !important;
      place-items: center !important;
      border: 1px solid rgba(255, 246, 218, 0.68) !important;
      border-radius: 0 !important;
      background: rgba(14, 16, 35, 0.72) !important;
      color: #fff7dd !important;
      font-size: 0.52rem !important;
      opacity: 0 !important;
      transform: translateY(-50%) scale(0.92) !important;
    }

    html[data-ui-mode="battle"] .tower-card.is-skill-ready .card-skill-ready {
      opacity: 1 !important;
      transform: translateY(-50%) scale(1) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-skill-ready:empty {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-xp-fill,
    html[data-game-mode="countdown"] .tower-card .card-xp-fill,
    html[data-game-mode="playing"] .tower-card .card-xp-fill,
    html[data-game-mode="paused"] .tower-card .card-xp-fill {
      left: 5px !important;
      right: 5px !important;
      bottom: 28px !important;
      z-index: 7 !important;
      height: 4px !important;
      opacity: 1 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-cooldown-fill,
    html[data-game-mode="countdown"] .tower-card .card-cooldown-fill,
    html[data-game-mode="playing"] .tower-card .card-cooldown-fill,
    html[data-game-mode="paused"] .tower-card .card-cooldown-fill {
      left: 0 !important;
      right: 0 !important;
      bottom: 25px !important;
      z-index: 1 !important;
      height: var(--card-skill-fill, 0%) !important;
      opacity: 0.32 !important;
      mix-blend-mode: screen !important;
    }

    /* Locked iPhone-stage final pass: fixed children now live inside .game-stage, so keep fullscreen modules on that stage and scale the 1366x768 camp coordinate layout down to fit. */
    .game-stage > #scene,
    .game-stage > .top-hud,
    .game-stage > .build-panel,
    .game-stage > .overlay,
    .game-stage > .skill-cinematic,
    .game-stage > .toast,
    .game-stage > .vignette,
    .game-stage > .camp-screen,
    .game-stage > .player-start-screen,
    .game-stage > .story-player,
    .game-stage > .character-video-director {
      position: absolute !important;
    }

    .game-stage > #scene,
    .game-stage > .camp-screen,
    .game-stage > .overlay,
    .game-stage > .skill-cinematic,
    .game-stage > .vignette,
    .game-stage > .player-start-screen,
    .game-stage > .story-player,
    .game-stage > .character-video-director {
      inset: 0 !important;
      width: 100% !important;
      height: 100% !important;
    }

    .game-stage .camp-screen {
      --camp-stage-scale: var(--camp-stage-scale-locked, 1) !important;
    }

    .game-stage .camp-screen[data-reference-ui="true"] .camp-idle-visual,
    .game-stage .camp-idle-visual {
      inset: -6.5% !important;
      background-position: 55% 50% !important;
    }

    /* Camp reference layout pass 2026-05-05: match the provided MMO romance camp grammar. */
    .camp-screen[data-reference-ui="true"] .camp-shell {
      width: 1366px !important;
      height: 768px !important;
      padding: 0 !important;
      display: block !important;
      overflow: hidden !important;
      background: transparent !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-grid,
    .camp-screen[data-reference-ui="true"] .camp-side,
    .camp-screen[data-reference-ui="true"] .camp-profile,
    .camp-screen[data-reference-ui="true"] .camp-head {
      position: absolute !important;
      inset: 0 !important;
      width: 1366px !important;
      height: 768px !important;
      min-width: 0 !important;
      min-height: 0 !important;
      background: transparent !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-visual,
    .camp-screen[data-reference-ui="true"] .camp-idle-video,
    .camp-screen[data-reference-ui="true"] .camp-idle-video.seamless-video-peer {
      inset: -3.8% !important;
      width: auto !important;
      height: auto !important;
      object-fit: cover !important;
      object-position: 52% 50% !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-side {
      z-index: 1 !important;
      pointer-events: none !important;
      filter: saturate(1.08) contrast(1.04) brightness(1.05) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 229, 156, 0.08),
        inset 370px 0 150px rgba(2, 3, 8, 0.5),
        inset -160px 0 110px rgba(2, 3, 8, 0.36),
        inset 0 -120px 125px rgba(2, 3, 8, 0.48) !important;
      background:
        linear-gradient(90deg, rgba(3, 4, 10, 0.7) 0 23%, rgba(3, 4, 10, 0.05) 36%, rgba(3, 4, 10, 0.02) 71%, rgba(3, 4, 10, 0.42) 100%),
        linear-gradient(180deg, rgba(3, 4, 10, 0.08), rgba(3, 4, 10, 0.2)),
        url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png") 52% 50% / cover no-repeat,
        #050817 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-side::after {
      opacity: 0.5 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head {
      z-index: 90 !important;
      display: block !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head > div:first-child {
      position: absolute !important;
      left: 6px !important;
      top: 6px !important;
      width: 306px !important;
      height: 62px !important;
      min-height: 0 !important;
      display: grid !important;
      align-content: center !important;
      padding: 0 22px !important;
      pointer-events: auto !important;
      border-radius: 5px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-head h2 {
      font-size: 29px !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock {
      position: absolute !important;
      left: 524px !important;
      top: 9px !important;
      width: 744px !important;
      height: 42px !important;
      display: flex !important;
      gap: 8px !important;
      align-items: start !important;
      justify-content: start !important;
      pointer-events: auto !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span {
      flex: 0 0 104px !important;
      width: 104px !important;
      height: 34px !important;
      min-width: 0 !important;
      min-height: 0 !important;
      padding: 0 9px !important;
      grid-template-columns: 25px minmax(0, 1fr) 20px !important;
      border-radius: 5px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(2) {
      flex-basis: 180px !important;
      width: 180px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(3) {
      flex-basis: 166px !important;
      width: 166px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock span:nth-child(4) {
      flex-basis: 194px !important;
      width: 194px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-clock strong {
      font-size: 16px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-menu-button {
      position: absolute !important;
      left: 1308px !important;
      top: 9px !important;
      width: 50px !important;
      height: 44px !important;
      display: grid !important;
      place-items: center !important;
      z-index: 95 !important;
      pointer-events: auto !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile {
      z-index: 35 !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -182px !important;
      top: 42px !important;
      width: 760px !important;
      height: 870px !important;
      z-index: 2 !important;
      pointer-events: none !important;
      opacity: 1 !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait {
      left: -174px !important;
      top: 38px !important;
      width: 750px !important;
      height: 860px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img {
      object-fit: contain !important;
      object-position: left 45% !important;
      transform: none !important;
      filter:
        drop-shadow(0 20px 28px rgba(0, 0, 0, 0.62))
        drop-shadow(0 0 22px var(--rarity-glow, rgba(255, 190, 110, 0.22))) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      left: 24px !important;
      top: 620px !important;
      bottom: auto !important;
      width: 246px !important;
      min-height: 76px !important;
      padding: 12px 16px !important;
      z-index: 12 !important;
      pointer-events: auto !important;
      border-radius: 4px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title h3 {
      font-size: 18px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title span {
      font-size: 12px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats {
      margin-top: 7px !important;
      display: block !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats span:nth-child(3) {
      display: inline-flex !important;
      gap: 5px !important;
      align-items: center !important;
      padding: 0 !important;
      border: 0 !important;
      background: transparent !important;
      color: #ffe6b0 !important;
      font-size: 12px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster {
      position: absolute !important;
      left: 286px !important;
      right: auto !important;
      bottom: 18px !important;
      width: 708px !important;
      height: 112px !important;
      z-index: 70 !important;
      display: grid !important;
      grid-template-columns: repeat(5, 132px) !important;
      gap: 10px !important;
      overflow: visible !important;
      pointer-events: auto !important;
      padding: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster::before {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button {
      flex: 0 0 132px !important;
      width: 132px !important;
      min-width: 132px !important;
      height: 112px !important;
      min-height: 112px !important;
      padding: 0 !important;
      border-radius: 5px !important;
      overflow: hidden !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-button.is-selected {
      transform: translateY(-4px) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait {
      inset: 4px 4px 22px !important;
      width: auto !important;
      height: auto !important;
      overflow: hidden !important;
      border-radius: 4px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-portrait img {
      width: 100% !important;
      height: 100% !important;
      object-fit: cover !important;
      object-position: center 16% !important;
      transform: scale(2.58) !important;
      transform-origin: center 16% !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name {
      left: 9px !important;
      right: 9px !important;
      bottom: 6px !important;
      height: 22px !important;
      display: flex !important;
      align-items: center !important;
      justify-content: space-between !important;
      gap: 5px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name strong {
      font-size: 14px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-roster-name span,
    .camp-screen[data-reference-ui="true"] .camp-roster-name i {
      font-size: 11px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-bottom-dock,
    .camp-bottom-dock {
      position: absolute !important;
      left: 1218px !important;
      right: auto !important;
      top: 74px !important;
      bottom: auto !important;
      width: 138px !important;
      height: 590px !important;
      display: grid !important;
      grid-template-columns: 138px !important;
      grid-template-rows: repeat(4, 140px) !important;
      gap: 10px !important;
      padding: 0 !important;
      z-index: 85 !important;
      pointer-events: auto !important;
      background: transparent !important;
      box-shadow: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button,
    .camp-dock-button {
      width: 138px !important;
      height: 140px !important;
      min-height: 0 !important;
      grid-template-rows: 78px 30px !important;
      gap: 4px !important;
      padding: 14px 10px 11px !important;
      border-radius: 5px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button .facility-loop-video,
    .camp-dock-button .facility-loop-video {
      width: 70px !important;
      height: 70px !important;
      margin: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button span,
    .camp-dock-button span {
      font-size: 22px !important;
      font-weight: 950 !important;
      letter-spacing: 0.08em !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-dock-button em,
    .camp-dock-button em {
      display: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-nav,
    .camp-map-nav {
      display: block !important;
      visibility: visible !important;
      position: absolute !important;
      inset: 0 !important;
      width: 1366px !important;
      height: 768px !important;
      z-index: 48 !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button,
    .camp-map-button {
      position: absolute !important;
      display: grid !important;
      place-items: center !important;
      min-width: 82px !important;
      height: 31px !important;
      padding: 0 12px !important;
      pointer-events: auto !important;
      border-radius: 4px !important;
      font-size: 15px !important;
      font-weight: 950 !important;
      color: #fff0c0 !important;
      background:
        linear-gradient(135deg, rgba(255, 235, 166, 0.18), transparent 34%),
        linear-gradient(180deg, rgba(40, 28, 18, 0.96), rgba(7, 7, 10, 0.96)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 218, 132, 0.78),
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        0 8px 14px rgba(0, 0, 0, 0.45) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button::after,
    .camp-map-button::after {
      display: none !important;
      content: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="arcana"],
    .camp-map-button[data-camp-dock="arcana"] {
      left: 878px !important;
      top: 106px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="gear"],
    .camp-map-button[data-camp-dock="gear"] {
      left: 604px !important;
      top: 240px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="chat"],
    .camp-map-button[data-camp-dock="chat"] {
      left: 890px !important;
      top: 242px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="deploy"],
    .camp-map-button[data-camp-dock="deploy"] {
      left: 1106px !important;
      top: 232px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="grace"],
    .camp-map-button[data-camp-dock="grace"] {
      left: 562px !important;
      top: 386px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="date"],
    .camp-map-button[data-camp-dock="date"] {
      left: 940px !important;
      top: 374px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-map-button[data-camp-dock="medical"],
    .camp-map-button[data-camp-dock="medical"] {
      left: 1116px !important;
      top: 386px !important;
    }

    /* Camp reference portrait alignment pass: keep the heroine in the left field but pull her face/body toward the inner 2/3 line. */
    .camp-screen[data-reference-ui="true"] .camp-profile {
      z-index: 56 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait {
      left: -86px !important;
      top: 54px !important;
      width: 710px !important;
      height: 850px !important;
      z-index: 4 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source {
      left: -86px !important;
      top: 54px !important;
      width: 710px !important;
      height: 850px !important;
      z-index: 5 !important;
      object-position: center 52% !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait {
      left: -74px !important;
      top: 52px !important;
      width: 700px !important;
      height: 848px !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video.seamless-video-peer {
      left: -74px !important;
      top: 52px !important;
      width: 700px !important;
      height: 848px !important;
      object-position: center 52% !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img {
      object-position: center 52% !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      left: 30px !important;
      top: 596px !important;
      width: 278px !important;
      min-height: 88px !important;
      z-index: 120 !important;
      position: absolute !important;
      transform: translateZ(1px) !important;
      background:
        linear-gradient(135deg, rgba(255, 215, 142, 0.14), transparent 42%),
        linear-gradient(180deg, rgba(45, 28, 22, 0.93), rgba(12, 9, 12, 0.94)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 206, 121, 0.78),
        inset 0 0 0 1px rgba(255, 255, 255, 0.07),
        0 14px 32px rgba(0, 0, 0, 0.52) !important;
    }

    /* Camp background single-source pass: the idle MP4/poster owns the painted city; camp-side only adds lighting masks. */
    .camp-screen[data-reference-ui="true"] .camp-idle-visual,
    .camp-idle-visual {
      inset: 0 !important;
      z-index: 0 !important;
      background:
        var(--camp-idle-poster, url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png")) 52% 50% / cover no-repeat,
        #02030a !important;
      filter: saturate(1.06) contrast(1.04) brightness(0.94) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-grid,
    .camp-screen[data-reference-ui="true"] .camp-side {
      background: transparent !important;
      background-image: none !important;
      filter: none !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 229, 156, 0.08),
        inset 360px 0 150px rgba(2, 3, 8, 0.44),
        inset -150px 0 110px rgba(2, 3, 8, 0.32),
        inset 0 -120px 125px rgba(2, 3, 8, 0.42) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-video.is-ready,
    .camp-idle-video.is-ready {
      opacity: 1 !important;
    }

    /* Reference map owns the camp background until a matching isometric MP4 exists. */
    .camp-screen[data-reference-ui="true"] .camp-idle-visual,
    .camp-idle-visual {
      background:
        url("../assets/runtime/camp/backgrounds/camp-bg-sakura-fortress-city-v02.png") 52% 50% / cover no-repeat,
        #02030a !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-idle-video,
    .camp-screen[data-reference-ui="true"] .camp-idle-video.seamless-video-peer,
    .camp-idle-video,
    .camp-idle-video.seamless-video-peer {
      display: none !important;
      opacity: 0 !important;
    }

    /* Camp portrait right-shift pass: move the heroine about 15% inward on the locked 1366px stage. */
    .camp-screen[data-reference-ui="true"] .camp-portrait,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source {
      left: 120px !important;
      top: 54px !important;
      width: 710px !important;
      height: 850px !important;
      object-position: center 52% !important;
    }

    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video.seamless-video-peer {
      left: 132px !important;
      top: 52px !important;
      width: 700px !important;
      height: 848px !important;
      object-position: center 52% !important;
    }

    /* Battle hand single-layer pass: remove the stacked panel, rails, fades, stat chips, and keep only clean portrait cards. */
    html[data-ui-mode="battle"] .build-panel,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .build-panel,
    html[data-game-mode="countdown"] .build-panel,
    html[data-game-mode="playing"] .build-panel,
    html[data-game-mode="paused"] .build-panel {
      left: 18px !important;
      right: auto !important;
      bottom: max(14px, env(safe-area-inset-bottom)) !important;
      width: fit-content !important;
      min-width: 0 !important;
      max-width: calc(100vw - 36px) !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      filter: none !important;
      pointer-events: auto !important;
      z-index: 86 !important;
    }

    html[data-ui-mode="battle"] .build-panel header,
    html[data-ui-mode="battle"] .build-panel > p,
    html[data-game-mode="countdown"] .build-panel header,
    html[data-game-mode="playing"] .build-panel header,
    html[data-game-mode="paused"] .build-panel header,
    html[data-game-mode="countdown"] .build-panel > p,
    html[data-game-mode="playing"] .build-panel > p,
    html[data-game-mode="paused"] .build-panel > p {
      display: none !important;
    }

    html[data-ui-mode="battle"] .hand-shell,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .hand-shell,
    html[data-game-mode="countdown"] .hand-shell,
    html[data-game-mode="playing"] .hand-shell,
    html[data-game-mode="paused"] .hand-shell {
      width: fit-content !important;
      min-width: 0 !important;
      max-width: calc(100vw - 36px) !important;
      height: auto !important;
      min-height: 0 !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      backdrop-filter: none !important;
      overflow: visible !important;
      pointer-events: auto !important;
      --hand-left-fade: 0 !important;
      --hand-right-fade: 0 !important;
    }

    html[data-ui-mode="battle"] .hand-shell::before,
    html[data-ui-mode="battle"] .hand-shell::after,
    html[data-game-mode="countdown"] .hand-shell::before,
    html[data-game-mode="countdown"] .hand-shell::after,
    html[data-game-mode="playing"] .hand-shell::before,
    html[data-game-mode="playing"] .hand-shell::after,
    html[data-game-mode="paused"] .hand-shell::before,
    html[data-game-mode="paused"] .hand-shell::after,
    html[data-ui-mode="battle"] .hand-scroll,
    html[data-game-mode="countdown"] .hand-scroll,
    html[data-game-mode="playing"] .hand-scroll,
    html[data-game-mode="paused"] .hand-scroll,
    html[data-ui-mode="battle"] .hand-scroll-meter,
    html[data-game-mode="countdown"] .hand-scroll-meter,
    html[data-game-mode="playing"] .hand-scroll-meter,
    html[data-game-mode="paused"] .hand-scroll-meter {
      display: none !important;
      content: none !important;
    }

    html[data-ui-mode="battle"] .hand-shell .type-grid,
    html[data-ui-mode="battle"] .type-grid,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .type-grid,
    html[data-game-mode="countdown"] .type-grid,
    html[data-game-mode="playing"] .type-grid,
    html[data-game-mode="paused"] .type-grid {
      width: fit-content !important;
      min-width: 0 !important;
      max-width: calc(100vw - 36px) !important;
      height: 136px !important;
      display: flex !important;
      align-items: flex-end !important;
      justify-content: flex-start !important;
      gap: 8px !important;
      padding: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      overflow-x: auto !important;
      overflow-y: visible !important;
      scrollbar-width: none !important;
      -webkit-mask-image: none !important;
      mask-image: none !important;
      cursor: default !important;
      touch-action: pan-x !important;
    }

    html[data-ui-mode="battle"] .type-grid::-webkit-scrollbar,
    html[data-game-mode="countdown"] .type-grid::-webkit-scrollbar,
    html[data-game-mode="playing"] .type-grid::-webkit-scrollbar,
    html[data-game-mode="paused"] .type-grid::-webkit-scrollbar {
      display: none !important;
      width: 0 !important;
      height: 0 !important;
    }

    html[data-ui-mode="battle"] .tower-card,
    html[data-ui-mode="battle"][data-visible-heroes="1"] .tower-card,
    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card,
    html[data-game-mode="paused"] .tower-card {
      flex: 0 0 88px !important;
      width: 88px !important;
      min-width: 88px !important;
      height: 132px !important;
      min-height: 132px !important;
      aspect-ratio: auto !important;
      display: block !important;
      margin: 0 !important;
      padding: 0 !important;
      border: 1px solid rgba(255, 224, 154, 0.5) !important;
      border-radius: 7px !important;
      clip-path: none !important;
      background: rgba(5, 7, 16, 0.34) !important;
      box-shadow: 0 9px 18px rgba(0, 0, 0, 0.42) !important;
      overflow: hidden !important;
      isolation: isolate !important;
      scroll-snap-align: start !important;
      transform: translateY(var(--card-raise, 0px)) !important;
      transform-origin: center bottom !important;
    }

    html[data-ui-mode="battle"] .tower-card::before,
    html[data-ui-mode="battle"] .tower-card::after,
    html[data-game-mode="countdown"] .tower-card::before,
    html[data-game-mode="countdown"] .tower-card::after,
    html[data-game-mode="playing"] .tower-card::before,
    html[data-game-mode="playing"] .tower-card::after,
    html[data-game-mode="paused"] .tower-card::before,
    html[data-game-mode="paused"] .tower-card::after {
      display: none !important;
      content: none !important;
    }

    html[data-ui-mode="battle"] .tower-card:hover,
    html[data-ui-mode="battle"] .tower-card:focus-visible {
      --card-raise: -8px;
      outline: 0 !important;
      filter: saturate(1.06) brightness(1.04) !important;
      box-shadow: 0 13px 23px rgba(0, 0, 0, 0.48) !important;
    }

    html[data-ui-mode="battle"] .tower-card.selected,
    html[data-game-mode="countdown"] .tower-card.selected,
    html[data-game-mode="playing"] .tower-card.selected,
    html[data-game-mode="paused"] .tower-card.selected {
      --card-raise: -10px;
      border-color: rgba(255, 240, 188, 0.92) !important;
      box-shadow:
        0 0 0 2px var(--rarity-glow, rgba(255, 210, 128, 0.42)),
        0 15px 26px rgba(0, 0, 0, 0.48) !important;
      filter: saturate(1.08) brightness(1.06) !important;
    }

    html[data-ui-mode="battle"] .tower-card .portrait,
    html[data-game-mode="countdown"] .tower-card .portrait,
    html[data-game-mode="playing"] .tower-card .portrait,
    html[data-game-mode="paused"] .tower-card .portrait,
    html[data-ui-mode="battle"] .tower-card .card-hover-video,
    html[data-game-mode="countdown"] .tower-card .card-hover-video,
    html[data-game-mode="playing"] .tower-card .card-hover-video,
    html[data-game-mode="paused"] .tower-card .card-hover-video {
      position: absolute !important;
      inset: 0 0 22px !important;
      z-index: 2 !important;
      width: 100% !important;
      height: calc(100% - 22px) !important;
      border: 0 !important;
      border-radius: 6px 6px 0 0 !important;
      background-color: transparent !important;
      background-image: var(--portrait) !important;
      background-size: contain !important;
      background-position: center bottom !important;
      background-repeat: no-repeat !important;
      box-shadow: none !important;
      filter: saturate(1.12) brightness(1.04) contrast(1.02) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-portrait-image,
    html[data-game-mode="countdown"] .tower-card .card-portrait-image,
    html[data-game-mode="playing"] .tower-card .card-portrait-image,
    html[data-game-mode="paused"] .tower-card .card-portrait-image {
      position: absolute !important;
      inset: 0 0 22px !important;
      z-index: 3 !important;
      width: 100% !important;
      height: calc(100% - 22px) !important;
      object-fit: contain !important;
      object-position: center bottom !important;
      transform: none !important;
      opacity: 1 !important;
      filter: saturate(1.1) brightness(1.04) contrast(1.02) !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-name,
    html[data-game-mode="countdown"] .tower-card .card-name,
    html[data-game-mode="playing"] .tower-card .card-name,
    html[data-game-mode="paused"] .tower-card .card-name,
    html[data-ui-mode="battle"] .tower-card .card-ability-strip,
    html[data-game-mode="countdown"] .tower-card .card-ability-strip,
    html[data-game-mode="playing"] .tower-card .card-ability-strip,
    html[data-game-mode="paused"] .tower-card .card-ability-strip,
    html[data-ui-mode="battle"] .tower-card .card-runtime-values,
    html[data-game-mode="countdown"] .tower-card .card-runtime-values,
    html[data-game-mode="playing"] .tower-card .card-runtime-values,
    html[data-game-mode="paused"] .tower-card .card-runtime-values,
    html[data-ui-mode="battle"] .tower-card .card-statline,
    html[data-game-mode="countdown"] .tower-card .card-statline,
    html[data-game-mode="playing"] .tower-card .card-statline,
    html[data-game-mode="paused"] .tower-card .card-statline,
    html[data-ui-mode="battle"] .tower-card .card-rarity-badge,
    html[data-game-mode="countdown"] .tower-card .card-rarity-badge,
    html[data-game-mode="playing"] .tower-card .card-rarity-badge,
    html[data-game-mode="paused"] .tower-card .card-rarity-badge,
    html[data-ui-mode="battle"] .tower-card .card-skill-ready,
    html[data-game-mode="countdown"] .tower-card .card-skill-ready,
    html[data-game-mode="playing"] .tower-card .card-skill-ready,
    html[data-game-mode="paused"] .tower-card .card-skill-ready,
    html[data-ui-mode="battle"] .tower-card .card-xp-fill,
    html[data-game-mode="countdown"] .tower-card .card-xp-fill,
    html[data-game-mode="playing"] .tower-card .card-xp-fill,
    html[data-game-mode="paused"] .tower-card .card-xp-fill,
    html[data-ui-mode="battle"] .tower-card .card-cooldown-fill,
    html[data-game-mode="countdown"] .tower-card .card-cooldown-fill,
    html[data-game-mode="playing"] .tower-card .card-cooldown-fill,
    html[data-game-mode="paused"] .tower-card .card-cooldown-fill {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row,
    html[data-game-mode="countdown"] .tower-card .cost-row,
    html[data-game-mode="playing"] .tower-card .cost-row,
    html[data-game-mode="paused"] .tower-card .cost-row {
      position: absolute !important;
      left: 0 !important;
      right: 0 !important;
      bottom: 0 !important;
      z-index: 5 !important;
      height: 22px !important;
      min-height: 22px !important;
      display: grid !important;
      place-items: center !important;
      padding: 0 4px !important;
      border: 0 !important;
      border-top: 1px solid rgba(255, 224, 154, 0.36) !important;
      background: linear-gradient(180deg, rgba(15, 13, 18, 0.82), rgba(4, 5, 10, 0.92)) !important;
      color: #fff2d2 !important;
      font-size: 12px !important;
      font-weight: 900 !important;
      line-height: 1 !important;
      letter-spacing: 0 !important;
      pointer-events: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row i,
    html[data-game-mode="countdown"] .tower-card .cost-row i,
    html[data-game-mode="playing"] .tower-card .cost-row i,
    html[data-game-mode="paused"] .tower-card .cost-row i {
      display: block !important;
      max-width: 100% !important;
      padding: 0 !important;
      border: 0 !important;
      color: inherit !important;
      font-size: inherit !important;
      font-style: normal !important;
      letter-spacing: 0 !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
      white-space: nowrap !important;
    }

    html[data-ui-mode="battle"] .tower-card .cost-row strong,
    html[data-game-mode="countdown"] .tower-card .cost-row strong,
    html[data-game-mode="playing"] .tower-card .cost-row strong,
    html[data-game-mode="paused"] .tower-card .cost-row strong {
      display: none !important;
    }

    /* Camp profile alignment pass: lock the selected heroine info plate to the same row as the bottom roster. */
    .camp-screen[data-reference-ui="true"] .camp-profile-main {
      left: 30px !important;
      top: 643px !important;
      bottom: auto !important;
      width: 278px !important;
      height: 108px !important;
      min-height: 108px !important;
      padding: 13px 16px 12px !important;
      z-index: 120 !important;
      display: grid !important;
      align-content: center !important;
      gap: 8px !important;
      border-radius: 5px !important;
      transform: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title {
      gap: 8px !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title h3 {
      font-size: 18px !important;
      line-height: 1.05 !important;
      white-space: nowrap !important;
      overflow: hidden !important;
      text-overflow: ellipsis !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-profile-title span {
      font-size: 12px !important;
      line-height: 1.1 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-stats {
      margin-top: 0 !important;
    }

    /* Auto-story navigation pass: story is triggered by progression nodes, not by a manual dock button. */
    .camp-screen[data-reference-ui="true"] .camp-bottom-dock,
    .camp-bottom-dock {
      height: 440px !important;
      grid-template-rows: repeat(3, 140px) !important;
    }

    /* Story progression lock: reference layout should not visually leak unrecruited cards. */
    .tower-card.is-story-hidden,
    .tower-card[hidden],
    html[data-ui-mode="battle"] .tower-card.is-story-hidden,
    html[data-ui-mode="battle"] .tower-card[hidden],
    html[data-game-mode="setup"] .tower-card.is-story-hidden,
    html[data-game-mode="setup"] .tower-card[hidden],
    html[data-game-mode="countdown"] .tower-card.is-story-hidden,
    html[data-game-mode="countdown"] .tower-card[hidden],
    html[data-game-mode="playing"] .tower-card.is-story-hidden,
    html[data-game-mode="playing"] .tower-card[hidden],
    html[data-game-mode="paused"] .tower-card.is-story-hidden,
    html[data-game-mode="paused"] .tower-card[hidden],
    .camp-roster-button.is-story-hidden,
    .camp-roster-button[hidden] {
      display: none !important;
    }

    /* Story viewport lock: keep dialogue and buttons inside the scaled mobile stage. */
    .game-stage > .story-player {
      padding: 24px 32px 32px !important;
      align-items: stretch !important;
    }

    .game-stage > .story-player .story-shell {
      width: min(1120px, calc(100% - 20px)) !important;
      height: 100% !important;
      min-height: 0 !important;
      max-width: none !important;
      margin: 0 auto !important;
      grid-template-columns: minmax(220px, 34%) minmax(0, 1fr) !important;
      align-items: end !important;
    }

    .game-stage > .story-player .story-character {
      align-self: end !important;
      height: min(88%, 400px) !important;
      min-height: 0 !important;
      transform: none !important;
      background-position: center bottom !important;
    }

    .game-stage > .story-player .story-character-video,
    .game-stage > .story-player .story-character-video.seamless-video-peer {
      width: min(360px, 32vw) !important;
      height: min(88%, 400px) !important;
    }

    .game-stage > .story-player .story-dialogue {
      align-self: end !important;
      width: min(680px, 100%) !important;
      max-height: 204px !important;
      margin: 0 0 4px !important;
      padding: 14px 16px !important;
      gap: 6px !important;
      overflow: hidden !important;
    }

    .game-stage > .story-player .story-dialogue p {
      min-height: 0 !important;
      max-height: 4.7em !important;
      overflow: hidden !important;
      line-height: 1.46 !important;
    }

    /* Settlement fullscreen cinematic pass: the MP4 owns the whole result screen; text sits only in the video's quiet left-side space. */
    .overlay.is-settlement {
      place-items: stretch !important;
      padding: 0 !important;
      background: #02030a !important;
      backdrop-filter: none !important;
    }

    .overlay.is-settlement .overlay-card {
      position: relative !important;
      width: 100% !important;
      height: 100% !important;
      max-width: none !important;
      max-height: none !important;
      min-height: 0 !important;
      display: grid !important;
      grid-template-columns: minmax(270px, 42%) minmax(0, 1fr) !important;
      grid-template-rows: minmax(0, 1fr) auto auto auto auto !important;
      grid-template-areas:
        ". ."
        "title ."
        "copy ."
        "stats ."
        "action ." !important;
      align-items: end !important;
      gap: 9px !important;
      padding: clamp(26px, 5vw, 58px) clamp(26px, 6vw, 76px) clamp(28px, 5vw, 58px) !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      text-align: left !important;
      overflow: hidden !important;
      backdrop-filter: none !important;
      isolation: isolate !important;
    }

    .overlay.is-settlement .overlay-card::before {
      content: "" !important;
      display: block !important;
      position: absolute !important;
      inset: 0 !important;
      z-index: 2 !important;
      pointer-events: none !important;
      opacity: 1 !important;
      transform: none !important;
      background:
        radial-gradient(circle at 28% 72%, rgba(4, 6, 14, 0.48), transparent 34%),
        linear-gradient(90deg, rgba(2, 3, 8, 0.82) 0%, rgba(2, 3, 8, 0.54) 26%, rgba(2, 3, 8, 0.12) 52%, rgba(2, 3, 8, 0.08) 100%),
        linear-gradient(0deg, rgba(2, 3, 8, 0.78) 0%, transparent 38%, rgba(2, 3, 8, 0.18) 100%) !important;
      animation: none !important;
    }

    .overlay.is-settlement .settlement-visual {
      position: absolute !important;
      inset: 0 !important;
      z-index: 0 !important;
      width: 100% !important;
      height: 100% !important;
      min-height: 0 !important;
      aspect-ratio: auto !important;
      margin: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background:
        var(--settlement-image, none) center / cover no-repeat,
        #02030a !important;
      box-shadow: none !important;
      overflow: hidden !important;
    }

    .overlay.is-settlement .settlement-video {
      position: absolute !important;
      inset: 0 !important;
      width: 100% !important;
      height: 100% !important;
      object-fit: cover !important;
      object-position: center !important;
      transition: opacity 180ms ease !important;
    }

    .overlay.is-settlement .settlement-visual.has-video .settlement-video.is-ready {
      opacity: 1 !important;
    }

    .overlay.is-settlement .settlement-visual::before,
    .overlay.is-settlement .settlement-visual::after,
    .overlay.is-settlement .settlement-visual-meta,
    .overlay.is-settlement .settlement-duration,
    .overlay.is-settlement .settlement-panel,
    .overlay.is-settlement .settlement-card {
      display: none !important;
      content: none !important;
    }

    .overlay.is-settlement .overlay-card h1,
    .overlay.is-settlement .overlay-card p,
    .overlay.is-settlement .overlay-stats,
    .overlay.is-settlement .primary {
      position: relative !important;
      z-index: 5 !important;
      grid-column: 1 !important;
      max-width: min(430px, 100%) !important;
    }

    .overlay.is-settlement .overlay-card h1 {
      grid-area: title !important;
      margin: 0 !important;
      color: #fff0bd !important;
      font-size: clamp(52px, 8vw, 96px) !important;
      line-height: 0.86 !important;
      letter-spacing: 0 !important;
      text-transform: none !important;
      text-shadow:
        0 4px 0 rgba(0, 0, 0, 0.62),
        0 0 26px rgba(255, 207, 116, 0.32) !important;
    }

    .overlay.is-settlement.is-defeat .overlay-card h1 {
      color: #ff9caf !important;
      text-shadow:
        0 4px 0 rgba(0, 0, 0, 0.62),
        0 0 24px rgba(255, 82, 126, 0.34) !important;
    }

    .overlay.is-settlement .overlay-card p {
      grid-area: copy !important;
      margin: 0 !important;
      color: rgba(255, 240, 216, 0.88) !important;
      font-size: clamp(13px, 1.55vw, 17px) !important;
      font-weight: 850 !important;
      line-height: 1.42 !important;
      text-shadow: 0 2px 8px rgba(0, 0, 0, 0.82) !important;
    }

    .overlay.is-settlement .overlay-stats {
      grid-area: stats !important;
      display: grid !important;
      grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
      gap: 7px !important;
      margin: 5px 0 0 !important;
      padding: 0 !important;
    }

    .overlay.is-settlement .overlay-stats span {
      min-height: 48px !important;
      padding: 8px 9px !important;
      border: 0 !important;
      border-radius: 6px !important;
      background: rgba(4, 5, 12, 0.46) !important;
      box-shadow:
        inset 0 0 0 1px rgba(255, 225, 150, 0.24),
        0 8px 18px rgba(0, 0, 0, 0.24) !important;
      color: rgba(255, 230, 198, 0.72) !important;
      font-size: 10px !important;
      letter-spacing: 0.06em !important;
      backdrop-filter: blur(5px) !important;
    }

    .overlay.is-settlement .overlay-stats strong {
      color: #ffe29c !important;
      font-size: 17px !important;
      line-height: 1 !important;
      text-shadow: 0 0 10px rgba(255, 205, 106, 0.24) !important;
    }

    .overlay.is-settlement .primary {
      grid-area: action !important;
      justify-self: start !important;
      width: min(360px, 100%) !important;
      min-height: 46px !important;
      margin-top: 5px !important;
      border: 0 !important;
      border-radius: 7px !important;
      background:
        radial-gradient(circle at 50% 0%, rgba(255, 221, 133, 0.25), transparent 56%),
        linear-gradient(180deg, rgba(92, 38, 44, 0.9), rgba(18, 9, 14, 0.96)) !important;
      box-shadow:
        0 0 0 1px rgba(255, 226, 145, 0.52),
        inset 0 1px 0 rgba(255, 255, 255, 0.14),
        0 12px 24px rgba(0, 0, 0, 0.36) !important;
    }

    @media (max-width: 860px) {
      .overlay.is-settlement .overlay-card {
        grid-template-columns: minmax(250px, 50%) minmax(0, 1fr) !important;
        padding: 20px 24px 24px !important;
        gap: 7px !important;
      }

      .overlay.is-settlement .overlay-card h1 {
        font-size: clamp(42px, 10vw, 68px) !important;
      }

      .overlay.is-settlement .overlay-card p {
        font-size: 12px !important;
        max-height: 3.2em !important;
        overflow: hidden !important;
      }

      .overlay.is-settlement .overlay-stats span {
        min-height: 42px !important;
        padding: 6px !important;
        font-size: 9px !important;
      }

      .overlay.is-settlement .overlay-stats strong {
        font-size: 14px !important;
      }
    }

    /* Battle card HP veil: one monochrome vertical layer over the card face, fed by live tower HP. */
    html[data-ui-mode="battle"] .tower-card,
    html[data-game-mode="countdown"] .tower-card,
    html[data-game-mode="playing"] .tower-card,
    html[data-game-mode="paused"] .tower-card {
      --card-hp-veil-color: #72dcff;
    }

    html[data-ui-mode="battle"] .tower-card.is-recovering,
    html[data-game-mode="countdown"] .tower-card.is-recovering,
    html[data-game-mode="playing"] .tower-card.is-recovering,
    html[data-game-mode="paused"] .tower-card.is-recovering {
      --card-hp-veil-color: #78ffa1;
    }

    html[data-ui-mode="battle"] .tower-card[data-hp-state="mid"],
    html[data-game-mode="countdown"] .tower-card[data-hp-state="mid"],
    html[data-game-mode="playing"] .tower-card[data-hp-state="mid"],
    html[data-game-mode="paused"] .tower-card[data-hp-state="mid"] {
      --card-hp-veil-color: #ffd06d;
    }

    html[data-ui-mode="battle"] .tower-card[data-hp-state="low"],
    html[data-game-mode="countdown"] .tower-card[data-hp-state="low"],
    html[data-game-mode="playing"] .tower-card[data-hp-state="low"],
    html[data-game-mode="paused"] .tower-card[data-hp-state="low"] {
      --card-hp-veil-color: #ff5f79;
    }

    html[data-ui-mode="battle"] .tower-card .card-hp-veil,
    html[data-game-mode="countdown"] .tower-card .card-hp-veil,
    html[data-game-mode="playing"] .tower-card .card-hp-veil,
    html[data-game-mode="paused"] .tower-card .card-hp-veil {
      position: absolute !important;
      inset: 0 0 22px !important;
      z-index: 8 !important;
      display: block !important;
      border-radius: 6px 6px 0 0 !important;
      overflow: hidden !important;
      pointer-events: none !important;
      opacity: 0.78 !important;
      background:
        linear-gradient(
          0deg,
          color-mix(in srgb, var(--card-hp-veil-color) 34%, transparent) 0 var(--card-hp-percent, 100%),
          rgba(2, 3, 10, 0.58) var(--card-hp-percent, 100%) 100%
        ) !important;
      box-shadow:
        inset 0 0 0 1px color-mix(in srgb, var(--card-hp-veil-color) 26%, transparent),
        inset 0 -18px 24px color-mix(in srgb, var(--card-hp-veil-color) 14%, transparent) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-hp-veil::before,
    html[data-game-mode="countdown"] .tower-card .card-hp-veil::before,
    html[data-game-mode="playing"] .tower-card .card-hp-veil::before,
    html[data-game-mode="paused"] .tower-card .card-hp-veil::before {
      content: "" !important;
      position: absolute !important;
      left: 0 !important;
      right: 0 !important;
      bottom: var(--card-hp-percent, 100%) !important;
      height: 1px !important;
      background: color-mix(in srgb, var(--card-hp-veil-color) 86%, #ffffff 14%) !important;
      box-shadow: 0 0 10px color-mix(in srgb, var(--card-hp-veil-color) 68%, transparent) !important;
      opacity: 0.9 !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-hp-veil i,
    html[data-game-mode="countdown"] .tower-card .card-hp-veil i,
    html[data-game-mode="playing"] .tower-card .card-hp-veil i,
    html[data-game-mode="paused"] .tower-card .card-hp-veil i {
      position: absolute !important;
      left: 5px !important;
      top: 7px !important;
      writing-mode: vertical-rl !important;
      color: rgba(255, 255, 255, 0.72) !important;
      font-size: 8px !important;
      font-style: normal !important;
      font-weight: 900 !important;
      letter-spacing: 0.06em !important;
      line-height: 1 !important;
      text-orientation: upright !important;
      text-shadow: 0 1px 4px rgba(0, 0, 0, 0.88) !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-hp-veil strong,
    html[data-game-mode="countdown"] .tower-card .card-hp-veil strong,
    html[data-game-mode="playing"] .tower-card .card-hp-veil strong,
    html[data-game-mode="paused"] .tower-card .card-hp-veil strong {
      display: none !important;
    }

    html[data-ui-mode="battle"] .tower-card .card-hp-veil em,
    html[data-game-mode="countdown"] .tower-card .card-hp-veil em,
    html[data-game-mode="playing"] .tower-card .card-hp-veil em,
    html[data-game-mode="paused"] .tower-card .card-hp-veil em {
      display: none !important;
    }

    /* Camp heroine dominance pass: one stable large 9:16 character window, cropped by the stage instead of jumping per hero. */
    .camp-screen[data-reference-ui="true"] .camp-profile {
      z-index: 66 !important;
      overflow: visible !important;
      contain: layout style !important;
      pointer-events: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="warrior"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="mage"] .camp-portrait,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-portrait {
      position: absolute !important;
      left: 0 !important;
      top: -16px !important;
      width: 594px !important;
      height: 1056px !important;
      z-index: 54 !important;
      min-width: 0 !important;
      min-height: 0 !important;
      transform: translate3d(0, 0, 0) !important;
      transform-origin: left top !important;
      opacity: 1 !important;
      pointer-events: none !important;
      will-change: opacity !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-portrait img,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-portrait img,
    .camp-screen[data-reference-ui="true"][data-camp-hero="warrior"] .camp-portrait img,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-portrait img,
    .camp-screen[data-reference-ui="true"][data-camp-hero="mage"] .camp-portrait img,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-portrait img {
      width: 100% !important;
      height: 100% !important;
      object-fit: contain !important;
      object-position: center center !important;
      transform: translate3d(0, 0, 0) !important;
      transform-origin: center center !important;
      filter:
        drop-shadow(0 28px 34px rgba(0, 0, 0, 0.62))
        drop-shadow(0 0 24px var(--rarity-glow, rgba(255, 190, 110, 0.22))) !important;
      pointer-events: none !important;
      user-select: none !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready.is-green-screen-source,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="queen"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"][data-camp-hero="warrior"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="warrior"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="archer"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"][data-camp-hero="mage"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="mage"] .camp-showcase-video.seamless-video-peer,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-showcase-video,
    .camp-screen[data-reference-ui="true"][data-camp-hero="healer"] .camp-showcase-video.seamless-video-peer {
      display: block !important;
      position: absolute !important;
      left: 0 !important;
      top: -16px !important;
      bottom: auto !important;
      width: 594px !important;
      height: 1056px !important;
      z-index: 58 !important;
      min-width: 0 !important;
      min-height: 0 !important;
      border: 0 !important;
      border-radius: 0 !important;
      background: transparent !important;
      box-shadow: none !important;
      object-fit: contain !important;
      object-position: center center !important;
      transform: translate3d(0, 0, 0) !important;
      transform-origin: left top !important;
      mix-blend-mode: normal !important;
      pointer-events: none !important;
      will-change: opacity !important;
      filter:
        drop-shadow(0 30px 40px rgba(0, 0, 0, 0.58))
        saturate(1.08)
        contrast(1.03) !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video {
      opacity: 0 !important;
    }

    .camp-screen[data-reference-ui="true"] .camp-showcase-video.is-ready,
    .camp-screen[data-reference-ui="true"] .camp-showcase-video.seamless-video-peer.is-ready {
      opacity: 1 !important;
    }

    .camp-screen[data-reference-ui="true"].has-camp-showcase-video .camp-portrait img {
      opacity: 0 !important;
    }
