.risk-page-shell {
    --risk-human: #4ade80;
    --risk-human-rgb: 74, 222, 128;
    --risk-ai: #fb7185;
    --risk-ai-rgb: 251, 113, 133;
    --risk-ai2: #38bdf8;
    --risk-ai3: #fb923c;
    --risk-ai4: #c084fc;
    --risk-ai5: #fde047;
    --risk-neutral: #f8d16c;
    --risk-neutral-rgb: 248, 209, 108;
    --risk-ocean: #0b2635;
    --risk-ink: #f7fbff;
    --risk-panel: rgba(5, 14, 28, 0.78);
}

.risk-page {
    gap: clamp(1rem, 3vw, 1.8rem);
}

.risk-hero,
.risk-panel {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    border: 1px solid var(--surface-edge-strong);
    border-radius: 8px;
    background:
        linear-gradient(135deg, rgba(74, 222, 128, 0.1), transparent 42%),
        linear-gradient(180deg, var(--glass-tint-strong), var(--glass-tint));
    box-shadow: 0 20px 45px -32px rgba(0, 0, 0, 0.9), inset 0 1px 0 var(--surface-highlight);
}

.risk-hero {
    display: grid;
    gap: 0.65rem;
    padding: clamp(1.2rem, 4vw, 2.35rem);
}

.risk-hero h1,
.risk-hero p {
    margin: 0;
}

.risk-hero .lede {
    max-width: 68ch;
}

.risk-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(300px, 340px);
    gap: 1rem;
    align-items: start;
}

.risk-layout > * {
    min-width: 0;
}

.risk-panel {
    padding: clamp(0.95rem, 2.5vw, 1.35rem);
}

/* Screen-reader-only live region for consolidated phase and action announcements. */
.risk-visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

.risk-board-panel {
    min-width: 0;
}

.risk-panel-heading {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    align-items: start;
    margin-bottom: 1rem;
}

.risk-panel-heading h2,
.risk-panel-heading p,
.risk-territory-card h3,
.risk-log-panel h3 {
    margin: 0;
}

.risk-turn-summary,
.risk-scoreboard {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.risk-turn-summary span,
.risk-scoreboard span {
    min-height: 36px;
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0.4rem 0.55rem;
    border: 1px solid var(--surface-edge);
    border-radius: 6px;
    background: rgba(5, 14, 28, 0.82);
    color: var(--ink-soft);
    font-size: 0.8rem;
    font-weight: 650;
    white-space: nowrap;
}

.risk-scoreboard {
    margin-bottom: 1rem;
}

/* The reserve counter names whose armies it counts, so it may wrap on narrow screens. */
.risk-scoreboard .risk-reserve {
    border-color: rgba(248, 209, 108, 0.45);
    white-space: normal;
}

.risk-reserve strong {
    color: var(--risk-neutral);
    font-size: 0.95rem;
}

.risk-reserve-owner {
    font-size: inherit;
}

/* The per-seat entries are rendered by the game script and laid out as scoreboard items. */
.risk-scoreboard-seats {
    display: contents;
}

.risk-scoreboard-side {
    min-width: 0;
    flex-wrap: wrap;
    white-space: normal;
}

.risk-scoreboard-side.is-current {
    border-color: var(--accent-warm);
}

.risk-scoreboard-side.is-eliminated {
    border-style: dashed;
    opacity: 0.78;
}

.risk-scoreboard .risk-scoreboard-eliminated {
    min-height: 0;
    padding: 0.15rem 0.4rem;
    border-color: currentColor;
    color: #fecaca;
    font-size: 0.72rem;
}

.risk-scoreboard-avatar {
    min-width: 0;
    display: inline-flex;
    flex: 1 1 10rem;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.2rem 0.35rem;
    text-transform: none;
    white-space: normal;
}

/* "Avatar: <name>" is one wrapping line of text, not a row of pills. */
.risk-scoreboard .risk-scoreboard-avatar-name {
    display: inline-block;
    overflow-wrap: break-word;
    white-space: normal;
}

.risk-scoreboard .risk-scoreboard-avatar-name > span {
    display: inline;
    min-height: 0;
    padding: 0;
    border: 0;
    background: none;
    color: var(--ink);
    white-space: normal;
}

.risk-scoreboard-avatar-face {
    min-width: 0;
    overflow-wrap: anywhere;
    font-size: 1rem;
    letter-spacing: 0;
    line-height: 1.25;
    text-transform: none;
}

.risk-scoreboard .risk-scoreboard-cards {
    min-height: 0;
    padding: 0 0.2rem;
    border: 0;
    background: none;
    color: var(--muted);
    font-size: 0.72rem;
}

.risk-owner-glyph {
    font-size: 1rem;
    line-height: 1;
}

.risk-scoreboard .risk-owner-glyph {
    min-height: 0;
    padding: 0;
    border: 0;
    background: none;
}

.owner-human .risk-owner-glyph,
.risk-owner-glyph.owner-human {
    color: var(--risk-human);
}

.owner-ai .risk-owner-glyph,
.risk-owner-glyph.owner-ai {
    color: var(--risk-ai);
}

.owner-ai2 .risk-owner-glyph,
.risk-owner-glyph.owner-ai2 {
    color: var(--risk-ai2);
}

.owner-ai3 .risk-owner-glyph,
.risk-owner-glyph.owner-ai3 {
    color: var(--risk-ai3);
}

.owner-ai4 .risk-owner-glyph,
.risk-owner-glyph.owner-ai4 {
    color: var(--risk-ai4);
}

.owner-ai5 .risk-owner-glyph,
.risk-owner-glyph.owner-ai5 {
    color: var(--risk-ai5);
}

.owner-neutral .risk-owner-glyph,
.risk-owner-glyph.owner-neutral {
    color: #e8dcc0;
}

/* Board */

.risk-map {
    position: relative;
    overflow-x: auto;
    overflow-y: hidden;
    border: 1px solid rgba(248, 209, 108, 0.34);
    border-radius: 8px;
    background: var(--risk-ocean);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
}

/* Shown by the game script only while the board is wider than its frame. */
.risk-map-hint {
    display: flex;
    gap: 0.45rem;
    align-items: center;
    margin: 0 0 0.5rem;
    padding: 0.45rem 0.65rem;
    border: 1px dashed rgba(248, 209, 108, 0.55);
    border-radius: 6px;
    background: rgba(248, 209, 108, 0.08);
    color: var(--ink-soft);
    font-size: 0.82rem;
    font-weight: 750;
    line-height: 1.35;
}

.risk-map-hint[hidden] {
    display: none;
}

.risk-map-hint span {
    color: var(--risk-neutral);
    font-size: 1.1rem;
}

.risk-map.is-scrollable {
    box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.08),
        inset -18px 0 16px -14px rgba(248, 209, 108, 0.45);
}

.risk-board-svg {
    display: block;
    width: 100%;
    min-width: 760px;
    height: auto;
    font-family: inherit;
    user-select: none;
}

.risk-board-svg.is-waiting .risk-land,
.risk-board-svg.is-waiting .risk-marker {
    cursor: progress;
}

.risk-land {
    cursor: pointer;
    transition: filter 160ms ease, stroke 160ms ease, stroke-width 160ms ease;
}

.risk-land:hover,
.risk-land.is-detail {
    filter: brightness(1.14);
}

.risk-land.is-placeable {
    filter: brightness(1.08) saturate(1.1);
}

.risk-land.is-legal {
    stroke: #f9f871;
    stroke-width: 3;
    stroke-dasharray: 7 4;
    filter: brightness(1.2);
}

.risk-land.is-source {
    stroke: #ffffff;
    stroke-width: 4;
    stroke-dasharray: none;
    filter: brightness(1.25);
}

.risk-land.is-target {
    stroke: #ff2bd6;
    stroke-width: 4;
    stroke-dasharray: 2 3;
    filter: brightness(1.18) saturate(1.2);
}

.risk-marker {
    --owner-fill: #64748b;
    --owner-ink: #f7fbff;
    cursor: pointer;
    outline: none;
}

.risk-marker.owner-human {
    --owner-fill: var(--risk-human);
    --owner-ink: #04121c;
}

.risk-marker.owner-ai {
    --owner-fill: var(--risk-ai);
    --owner-ink: #1c0409;
}

.risk-marker.owner-ai2 {
    --owner-fill: var(--risk-ai2);
    --owner-ink: #04141f;
}

.risk-marker.owner-ai3 {
    --owner-fill: var(--risk-ai3);
    --owner-ink: #1f0d02;
}

.risk-marker.owner-ai4 {
    --owner-fill: var(--risk-ai4);
    --owner-ink: #150527;
}

.risk-marker.owner-ai5 {
    --owner-fill: var(--risk-ai5);
    --owner-ink: #1c1602;
}

.risk-marker.owner-neutral {
    --owner-fill: #e8dcc0;
    --owner-ink: #1b1607;
}

.risk-marker-art {
    filter: drop-shadow(0 2px 2px rgba(3, 10, 15, 0.7));
    pointer-events: none;
}

.risk-marker-shape {
    fill: var(--owner-fill);
    stroke: #071923;
    stroke-width: 2;
    transition: fill 160ms ease;
}

.risk-marker.has-art:not(.is-art-missing) .risk-marker-shape {
    display: none;
}

.risk-marker-count {
    fill: #ffffff;
    font-size: 12.5px;
    font-weight: 900;
    paint-order: stroke;
    stroke: rgba(3, 10, 15, 0.95);
    stroke-linejoin: round;
    stroke-width: 3px;
    pointer-events: none;
}

.risk-marker-name {
    fill: #ffffff;
    font-size: 9.5px;
    font-weight: 800;
    paint-order: stroke;
    stroke: rgba(4, 12, 20, 0.85);
    stroke-width: 3px;
    stroke-linejoin: round;
    pointer-events: none;
}

.risk-marker-badge {
    fill: #ffffff;
    font-size: 9px;
    font-weight: 950;
    letter-spacing: 0.08em;
    paint-order: stroke;
    stroke: #071923;
    stroke-width: 3px;
    pointer-events: none;
}

.risk-marker-ring {
    fill: none;
    stroke: transparent;
    stroke-width: 3;
}

.risk-marker:hover .risk-marker-ring {
    stroke: rgba(255, 255, 255, 0.55);
}

.risk-marker.is-placeable .risk-marker-ring {
    stroke: rgba(248, 209, 108, 0.75);
    stroke-dasharray: 1 3;
    stroke-linecap: round;
}

.risk-marker.is-legal .risk-marker-ring {
    stroke: #f9f871;
    stroke-dasharray: 5 3;
    animation: risk-ring-pulse 1.4s ease-in-out infinite;
}

.risk-marker.is-candidate .risk-marker-ring {
    stroke: #38bdf8;
    stroke-width: 4;
    stroke-dasharray: none;
    filter: drop-shadow(0 0 3px rgba(56, 189, 248, 0.85));
}

.risk-marker.is-source .risk-marker-ring {
    stroke: #ffffff;
    stroke-width: 4;
    stroke-dasharray: none;
    animation: none;
}

.risk-marker.is-target .risk-marker-ring {
    stroke: #ff2bd6;
    stroke-width: 4;
    stroke-dasharray: 3 2;
    animation: none;
}

.risk-marker.is-source .risk-marker-badge {
    fill: #ffffff;
}

.risk-marker.is-target .risk-marker-badge {
    fill: #ffb3f0;
}

.risk-marker:focus-visible .risk-marker-ring {
    stroke: #7dd3fc;
    stroke-width: 5;
    stroke-dasharray: none;
}

.risk-map.is-fallback .risk-marker-name {
    font-size: 11px;
}

@keyframes risk-ring-pulse {
    0%,
    100% {
        stroke-opacity: 1;
    }

    50% {
        stroke-opacity: 0.35;
    }
}

.risk-map-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 1rem;
    margin: 0.65rem 0 0;
    color: var(--ink-soft);
    font-size: 0.78rem;
    font-weight: 750;
}

.risk-map-legend > span,
.risk-legend-owners > span {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
}

/* The owner entries are rendered by the game script and flow with the static legend items. */
.risk-map-legend > .risk-legend-owners {
    display: contents;
}

.risk-status-message,
.risk-selection-help {
    min-height: 2.7rem;
    margin: 1rem 0 0;
    padding: 0.75rem;
    border-left: 4px solid var(--accent-warm);
    background: rgba(248, 209, 108, 0.09);
    color: var(--ink-soft);
    font-weight: 750;
}

.risk-selection-help {
    min-height: 0;
    margin-top: 0.75rem;
}

/* Dice tray */

.risk-dice-tray {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.75rem 1rem;
    margin-top: 1rem;
    padding: 0.9rem;
    border: 1px solid var(--surface-edge);
    border-radius: 8px;
    background:
        radial-gradient(circle at 50% 0%, rgba(248, 209, 108, 0.12), transparent 60%),
        rgba(5, 14, 28, 0.66);
}

.risk-dice-tray h3,
.risk-dice-comparisons,
.risk-dice-result {
    grid-column: 1 / -1;
    margin: 0;
}

.risk-dice-side {
    min-width: 0;
    display: grid;
    gap: 0.45rem;
    align-content: start;
}

.risk-dice-label {
    color: var(--ink-soft);
    font-size: 0.78rem;
    font-weight: 850;
    overflow-wrap: anywhere;
}

.risk-dice-row {
    min-height: 52px;
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.risk-die {
    position: relative;
    width: 46px;
    height: 46px;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
    padding: 6px;
    border-radius: 9px;
    box-shadow: inset 0 -3px 0 rgba(0, 0, 0, 0.25), 0 6px 14px -8px rgba(0, 0, 0, 0.9);
}

.risk-die i {
    width: 8px;
    height: 8px;
    place-self: center;
    border-radius: 50%;
    background: currentColor;
    opacity: 0;
}

.risk-die-attack {
    background: linear-gradient(145deg, #ef4444, #b91c1c);
    color: #ffffff;
}

.risk-die-defend {
    background: linear-gradient(145deg, #ffffff, #d6dde6);
    color: #0b1622;
}

.risk-die.is-idle {
    opacity: 0.32;
}

.risk-die[data-value="1"] i:nth-child(5),
.risk-die[data-value="2"] i:nth-child(3),
.risk-die[data-value="2"] i:nth-child(7),
.risk-die[data-value="3"] i:nth-child(3),
.risk-die[data-value="3"] i:nth-child(5),
.risk-die[data-value="3"] i:nth-child(7),
.risk-die[data-value="4"] i:nth-child(1),
.risk-die[data-value="4"] i:nth-child(3),
.risk-die[data-value="4"] i:nth-child(7),
.risk-die[data-value="4"] i:nth-child(9),
.risk-die[data-value="5"] i:nth-child(1),
.risk-die[data-value="5"] i:nth-child(3),
.risk-die[data-value="5"] i:nth-child(5),
.risk-die[data-value="5"] i:nth-child(7),
.risk-die[data-value="5"] i:nth-child(9),
.risk-die[data-value="6"] i:nth-child(1),
.risk-die[data-value="6"] i:nth-child(3),
.risk-die[data-value="6"] i:nth-child(4),
.risk-die[data-value="6"] i:nth-child(6),
.risk-die[data-value="6"] i:nth-child(7),
.risk-die[data-value="6"] i:nth-child(9) {
    opacity: 1;
}

.risk-die.is-rolling {
    animation: risk-die-tumble 420ms ease-in-out infinite;
}

.risk-die-defend.is-rolling {
    animation-delay: -140ms;
}

.risk-die.is-win {
    outline: 3px solid #f9f871;
    outline-offset: 2px;
}

.risk-die.is-loss {
    opacity: 0.62;
    filter: grayscale(0.45);
}

.risk-die.is-unused {
    opacity: 0.38;
}

.risk-die.is-win::after,
.risk-die.is-loss::after {
    position: absolute;
    right: -7px;
    bottom: -7px;
    width: 18px;
    height: 18px;
    display: grid;
    place-items: center;
    border-radius: 50%;
    background: #071923;
    color: #ffffff;
    font-size: 11px;
    font-weight: 900;
    line-height: 1;
}

.risk-die.is-win::after {
    content: "\2713";
    border: 2px solid #f9f871;
}

.risk-die.is-loss::after {
    content: "\2715";
    border: 2px solid rgba(255, 255, 255, 0.5);
}

@keyframes risk-die-tumble {
    0% {
        transform: translateY(0) rotate(0deg);
    }

    25% {
        transform: translateY(-10px) rotate(90deg);
    }

    50% {
        transform: translateY(0) rotate(180deg);
    }

    75% {
        transform: translateY(-6px) rotate(270deg);
    }

    100% {
        transform: translateY(0) rotate(360deg);
    }
}

.risk-dice-comparisons {
    display: grid;
    gap: 0.25rem;
    padding-left: 1.2rem;
    color: var(--ink);
    font-size: 0.85rem;
    font-weight: 750;
}

.risk-dice-comparisons:empty {
    display: none;
}

.risk-dice-result {
    padding: 0.6rem 0.7rem;
    border-left: 4px solid #ef4444;
    background: rgba(239, 68, 68, 0.08);
    color: var(--ink-soft);
    font-weight: 750;
}

/* Command panel */

.risk-command-panel {
    display: grid;
    gap: 1rem;
}

.risk-phase-stepper {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin: 0;
    padding: 0;
    list-style: none;
}

.risk-phase-step {
    position: relative;
    min-width: 0;
    padding: 1.55rem 0.2rem 0.35rem;
    border-top: 3px solid var(--surface-edge-strong);
    color: var(--muted);
    font-size: 0.7rem;
    font-weight: 750;
    line-height: 1.15;
    text-align: center;
    overflow-wrap: anywhere;
}

.risk-phase-step::before {
    position: absolute;
    top: 0.2rem;
    left: 50%;
    width: 1.1rem;
    height: 1.1rem;
    display: grid;
    place-items: center;
    border: 2px solid var(--surface-edge-strong);
    border-radius: 50%;
    background: #071923;
    content: "";
    transform: translateX(-50%);
}

.risk-phase-step.is-active {
    border-top-color: var(--risk-human);
    color: var(--ink);
    font-weight: 950;
    text-decoration: underline;
    text-decoration-thickness: 2px;
    text-underline-offset: 0.22rem;
}

.risk-phase-step.is-active::before {
    border-color: var(--risk-human);
    box-shadow: 0 0 0 3px rgba(var(--risk-human-rgb), 0.18);
}

.risk-phase-step.is-done {
    border-top-color: var(--risk-human);
    color: var(--ink-soft);
}

.risk-phase-step.is-done::before {
    border-color: var(--risk-human);
    background: var(--risk-human);
    color: #052014;
    content: "\2713";
    font-size: 0.8rem;
    font-weight: 950;
}

.risk-turn-guidance {
    margin: 0;
    padding: 0.75rem 0.85rem;
    border-left: 4px solid var(--risk-human);
    border-radius: 6px;
    background: rgba(var(--risk-human-rgb), 0.1);
    color: var(--ink);
    font-size: 0.9rem;
    font-weight: 800;
    line-height: 1.45;
}

.risk-primary-actions {
    display: grid;
}

.risk-primary-actions .risk-button-primary {
    min-height: 60px;
    font-size: 1rem;
}

.risk-command-panel[data-phase="attack"] .risk-turn-guidance,
.risk-command-panel[data-phase="conquer"] .risk-turn-guidance {
    border-left-color: #ef4444;
}

.risk-command-panel[data-phase="fortify"] .risk-turn-guidance {
    border-left-color: #38bdf8;
}

[data-risk-phase-panel][hidden] {
    display: none;
}

.risk-actions {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.6rem;
}

.risk-button {
    min-width: 44px;
    min-height: 44px;
    padding: 0.7rem 0.8rem;
    border: 2px solid var(--surface-edge-strong);
    border-radius: 6px;
    background: rgba(10, 32, 44, 0.88);
    color: var(--ink);
    font: inherit;
    font-size: 0.85rem;
    font-weight: 900;
    line-height: 1.2;
    letter-spacing: 0;
    text-transform: uppercase;
    cursor: pointer;
}

/* Restarting abandons the current game, so it reads as a secondary, cautionary action. */
.risk-button-restart {
    border-style: dashed;
    color: var(--ink-soft);
}

.risk-button:focus-visible,
.risk-inline-field input[type="number"]:focus-visible,
.risk-check input:focus-visible,
.risk-setup-toggle:focus-visible {
    outline: 3px solid #7dd3fc;
    outline-offset: 2px;
}

.risk-start-note {
    grid-column: 1 / -1;
    margin: 0;
    color: var(--muted);
    font-size: 0.8rem;
    font-weight: 750;
    line-height: 1.35;
}

.risk-button-primary {
    width: 100%;
    min-height: 54px;
    border-color: var(--risk-human);
    background: linear-gradient(135deg, rgba(74, 222, 128, 0.34), rgba(248, 209, 108, 0.2));
    font-size: 0.95rem;
    box-shadow: 0 10px 24px -18px rgba(var(--risk-human-rgb), 0.95);
}

.risk-button-attack {
    border-color: #ef4444;
    background: linear-gradient(135deg, rgba(239, 68, 68, 0.28), rgba(10, 32, 44, 0.9));
}

.risk-button:hover:not(:disabled),
.risk-button:focus-visible:not(:disabled) {
    border-color: var(--accent-warm);
    background: rgba(248, 209, 108, 0.16);
    color: #ffffff;
}

.risk-button:disabled {
    opacity: 0.46;
    cursor: not-allowed;
}

.risk-subpanel,
.risk-territory-card,
.risk-log-panel {
    display: grid;
    gap: 0.7rem;
    padding: 0.85rem;
    border: 1px solid var(--surface-edge);
    border-radius: 8px;
    background: rgba(5, 14, 28, 0.58);
}

.risk-subpanel[hidden] {
    display: none;
}

.risk-subpanel h3,
.risk-subpanel p {
    margin: 0;
}

.risk-subpanel-alert {
    border-color: var(--accent-warm);
    box-shadow: 0 0 0 2px rgba(248, 209, 108, 0.18);
}

.risk-dice-choice {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin: 0;
    padding: 0;
    border: 0;
}

.risk-dice-choice legend {
    width: 100%;
    margin-bottom: 0.35rem;
    padding: 0;
    color: var(--muted);
    font-size: 0.8rem;
    font-weight: 850;
}

.risk-dice-choice label {
    min-width: 52px;
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.35rem;
    padding: 0.4rem 0.6rem;
    border: 2px solid var(--surface-edge-strong);
    border-radius: 6px;
    background: rgba(10, 32, 44, 0.88);
    color: var(--ink);
    font-weight: 900;
    cursor: pointer;
}

.risk-dice-choice label:has(input:checked) {
    border-color: #ef4444;
    background: rgba(239, 68, 68, 0.2);
}

.risk-dice-choice label:has(input:disabled) {
    opacity: 0.45;
    cursor: not-allowed;
}

.risk-inline-field {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.risk-inline-field label {
    color: var(--muted);
    font-size: 0.8rem;
    font-weight: 850;
}

.risk-inline-field input[type="number"] {
    width: 5rem;
    min-height: 44px;
    padding: 0.4rem 0.5rem;
    border: 2px solid var(--surface-edge-strong);
    border-radius: 6px;
    background: rgba(5, 14, 28, 0.9);
    color: var(--ink);
    font: inherit;
    font-weight: 900;
}

.risk-inline-field input[type="number"]:disabled {
    opacity: 0.5;
}

.risk-check {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    color: var(--ink-soft);
    font-size: 0.85rem;
    font-weight: 750;
}

.risk-check input {
    width: 20px;
    height: 20px;
}

/* Game setup settings */

.risk-setup-settings {
    display: block;
}

.risk-setup-toggle {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem 0.6rem;
    align-items: baseline;
    min-height: 44px;
    padding: 0.2rem 0;
    border-radius: 4px;
    cursor: pointer;
    list-style-position: inside;
}

.risk-setup-heading {
    color: var(--ink);
    font-size: 1rem;
    font-weight: 900;
}

.risk-setup-summary {
    color: var(--muted);
    font-size: 0.8rem;
    font-weight: 750;
}

.risk-setup-body {
    display: grid;
    gap: 0.8rem;
    margin-top: 0.6rem;
}

.risk-setting-note.is-changed {
    padding: 0.45rem 0.6rem;
    border-left: 3px solid var(--accent-warm);
    background: rgba(248, 209, 108, 0.09);
    color: var(--ink);
}

.risk-setting-choice label {
    font-weight: 800;
}

.risk-setting-choice label:has(input:checked) {
    border-color: var(--risk-human);
    background: rgba(var(--risk-human-rgb), 0.16);
}

.risk-setting-choice label:has(input:focus-visible) {
    outline: 2px solid var(--risk-human);
    outline-offset: 2px;
}

/* Five seat-count options share one row on the narrow command panel. */
.risk-bot-count-choice label {
    min-width: 44px;
    flex: 1 1 44px;
}

.risk-setting-note {
    color: var(--ink-soft);
    font-size: 0.82rem;
    font-weight: 750;
}

/* Cards */

.risk-trade-value,
.risk-hand-help {
    color: var(--ink-soft);
    font-size: 0.82rem;
    font-weight: 750;
}

.risk-hand {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(92px, 1fr));
    gap: 0.55rem;
    margin: 0;
    padding: 4px 0 0;
    list-style: none;
}

.risk-hand-slot {
    min-width: 0;
    display: flex;
    justify-content: center;
}

.risk-hand-empty {
    grid-column: 1 / -1;
    color: var(--muted);
    font-size: 0.85rem;
}

/* Portrait card: decorative art fills the face, text sits on dark scrims above and below it. */
.risk-card {
    --card-tint: 248, 209, 108;
    position: relative;
    width: 100%;
    max-width: 128px;
    aspect-ratio: 5 / 7;
    min-height: 128px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    padding: 0;
    overflow: hidden;
    border: 2px solid rgba(248, 209, 108, 0.6);
    border-radius: 8px;
    background:
        radial-gradient(circle at 50% 42%, rgba(var(--card-tint), 0.34), transparent 62%),
        linear-gradient(170deg, #12264a, #050e1c 78%);
    box-shadow: 0 8px 16px -10px rgba(0, 0, 0, 0.9);
    color: var(--ink);
    font: inherit;
    text-align: left;
    cursor: pointer;
    transition: transform 0.14s ease-out, box-shadow 0.14s ease-out, border-color 0.14s ease-out;
}

.risk-card-infantry {
    --card-tint: 74, 222, 128;
}

.risk-card-cavalry {
    --card-tint: 56, 189, 248;
}

.risk-card-artillery {
    --card-tint: 251, 146, 60;
}

.risk-card-wild {
    --card-tint: 255, 43, 214;
}

.risk-card:hover {
    border-color: var(--risk-neutral);
}

.risk-card:focus-visible {
    outline: 3px solid #ffffff;
    outline-offset: 2px;
}

.risk-card-art {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
}

/* The emblem is the fallback face: visible while art loads and whenever it is missing. */
.risk-card-emblem {
    color: rgba(var(--card-tint), 0.95);
    font-size: 2.6rem;
    line-height: 1;
    text-shadow: 0 2px 10px rgba(0, 0, 0, 0.85);
}

.risk-card-image {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0;
    transition: opacity 0.25s ease-out;
}

.risk-card.is-art-loaded .risk-card-image {
    opacity: 1;
}

.risk-card.is-art-loaded .risk-card-emblem {
    visibility: hidden;
}

.risk-card.is-art-missing {
    border-style: double;
    border-width: 4px;
}

.risk-card-type,
.risk-card-body {
    position: relative;
    display: block;
    padding: 0.3rem 0.4rem;
}

.risk-card-type {
    background: linear-gradient(180deg, rgba(5, 14, 28, 0.94), rgba(5, 14, 28, 0.55) 70%, transparent);
    color: var(--accent-warm);
    font-size: 0.68rem;
    font-weight: 900;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    padding-bottom: 0.7rem;
}

.risk-card-body {
    display: grid;
    gap: 0.1rem;
    padding-top: 1rem;
    background: linear-gradient(0deg, rgba(5, 14, 28, 0.96) 55%, rgba(5, 14, 28, 0.6) 82%, transparent);
}

.risk-card-name {
    color: #ffffff;
    font-size: 0.76rem;
    font-weight: 850;
    line-height: 1.15;
    overflow-wrap: anywhere;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9);
}

.risk-card-owned {
    color: var(--risk-human);
    font-size: 0.66rem;
    font-weight: 850;
}

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

.risk-card[aria-pressed="true"] {
    border-color: #ffffff;
    box-shadow: 0 0 0 3px rgba(255, 43, 214, 0.75), 0 12px 18px -10px rgba(0, 0, 0, 0.9);
    transform: translateY(-4px);
}

.risk-card[aria-pressed="true"] .risk-card-type::after {
    content: " \2713";
    color: #ffffff;
}

/* A complete selection reads as valid (solid green) or not a set (dashed red), never by colour alone. */
.risk-card.is-set-valid {
    border-color: var(--risk-human);
    box-shadow: 0 0 0 3px rgba(var(--risk-human-rgb), 0.8), 0 0 16px rgba(var(--risk-human-rgb), 0.55);
}

.risk-card.is-set-valid .risk-card-type::after {
    content: " \2713 set";
    color: var(--risk-human);
}

.risk-card.is-set-invalid {
    border-style: dashed;
    border-color: #fecaca;
    box-shadow: 0 0 0 3px rgba(var(--risk-ai-rgb), 0.6);
}

.risk-card.is-set-invalid .risk-card-type::after {
    content: " \2715";
    color: #fecaca;
}

/* A newly drawn card deals in once and keeps a gold edge until its timer clears the class. */
.risk-card.is-dealt {
    border-color: var(--risk-neutral);
    box-shadow: 0 0 0 3px rgba(var(--risk-neutral-rgb), 0.7), 0 0 18px rgba(var(--risk-neutral-rgb), 0.5);
    animation: risk-card-deal 0.6s cubic-bezier(0.2, 0.8, 0.3, 1.1);
}

.risk-card.is-fx-pick {
    animation: risk-card-pick 0.3s ease-out;
}

@keyframes risk-card-deal {
    from {
        opacity: 0;
        transform: translateY(-22px) rotate(-7deg) scale(0.9);
    }

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

@keyframes risk-card-pick {
    0% {
        filter: brightness(1.6);
    }

    100% {
        filter: brightness(1);
    }
}

/* Selection */

.risk-selection-figure {
    position: relative;
    aspect-ratio: 16 / 10;
    margin: 0;
    overflow: hidden;
    border: 1px solid var(--surface-edge);
    border-radius: 8px;
    background:
        radial-gradient(circle at 30% 30%, rgba(248, 209, 108, 0.25), transparent 55%),
        linear-gradient(160deg, #123c4a, #071923);
}

.risk-selection-figure img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0.85;
    pointer-events: none;
}

.risk-selection-figure.is-art-missing img {
    display: none;
}

.risk-selection-figure.is-art-missing {
    background:
        repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.04) 0 10px, transparent 10px 20px),
        radial-gradient(circle at 30% 30%, rgba(248, 209, 108, 0.25), transparent 55%),
        linear-gradient(160deg, #123c4a, #071923);
}

.risk-selection-shape {
    position: absolute;
    top: 8%;
    right: 5%;
    width: 46%;
    height: 70%;
    overflow: visible;
    filter: drop-shadow(0 8px 12px rgba(0, 0, 0, 0.65));
    pointer-events: none;
}

.risk-selection-land {
    stroke: #ffffff;
    stroke-width: 3px;
    stroke-linejoin: round;
    vector-effect: non-scaling-stroke;
}

.risk-selection-land.owner-human {
    stroke: var(--risk-human);
}

.risk-selection-land.owner-ai {
    stroke: var(--risk-ai);
}

.risk-selection-land.owner-ai2 {
    stroke: var(--risk-ai2);
}

.risk-selection-land.owner-ai3 {
    stroke: var(--risk-ai3);
}

.risk-selection-land.owner-ai4 {
    stroke: var(--risk-ai4);
}

.risk-selection-land.owner-ai5 {
    stroke: var(--risk-ai5);
}

.risk-selection-land.owner-neutral {
    stroke: #e8dcc0;
    stroke-dasharray: 6 3;
}

.risk-selection-figure figcaption {
    position: absolute;
    left: 0.5rem;
    bottom: 0.5rem;
    max-width: calc(100% - 1rem);
    padding: 0.3rem 0.5rem;
    border-radius: 6px;
    background: rgba(4, 12, 20, 0.82);
    color: #ffffff;
    font-size: 0.8rem;
    font-weight: 850;
}

.risk-selection-list {
    display: grid;
    gap: 0.42rem;
    margin: 0;
}

.risk-selection-list div {
    display: grid;
    grid-template-columns: minmax(5.5rem, auto) minmax(0, 1fr);
    gap: 0.6rem;
}

.risk-selection-list dt {
    color: var(--muted);
    font-weight: 850;
}

.risk-selection-list dd {
    min-width: 0;
    margin: 0;
    overflow-wrap: anywhere;
    color: var(--ink);
}

.risk-log {
    display: grid;
    gap: 0.45rem;
    max-height: 260px;
    margin: 0;
    padding-left: 1.25rem;
    overflow: auto;
    color: var(--ink-soft);
}

.risk-log li {
    padding-bottom: 0.45rem;
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}

.risk-log li::marker {
    color: var(--accent-warm);
}

/* Rules */

.risk-rules h2 {
    margin: 0.2rem 0 1rem;
}

.risk-rules-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 0.9rem 1.2rem;
}

.risk-rules-grid h3 {
    margin: 0 0 0.3rem;
    color: var(--accent-warm);
    font-size: 0.95rem;
}

.risk-rules-grid p {
    margin: 0;
    color: var(--ink-soft);
    font-size: 0.9rem;
    line-height: 1.5;
}

@media (min-width: 941px) {
    .risk-command-panel {
        position: sticky;
        top: 1rem;
        max-height: calc(100vh - 2rem);
        overflow-y: auto;
    }
}

@media (max-width: 940px) {
    .risk-layout {
        grid-template-columns: minmax(0, 1fr);
    }

    /* Keep the turn flow full-width; selection and the log can share the secondary row. */
    .risk-command-panel {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
        align-items: start;
    }

    .risk-command-panel > .risk-subpanel:first-child,
    .risk-command-panel > .risk-objective,
    .risk-command-panel > .risk-phase-stepper,
    .risk-command-panel > .risk-turn-guidance,
    .risk-command-panel > .risk-primary-actions,
    .risk-command-panel > [data-risk-phase-panel] {
        grid-column: 1 / -1;
    }
}

@media (max-width: 700px) {
    .risk-panel-heading {
        display: grid;
    }

    .risk-board-svg {
        min-width: 680px;
    }

    .risk-command-panel {
        grid-template-columns: 1fr;
    }

    .risk-dice-tray {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 430px) {
    .risk-board-svg {
        min-width: 620px;
    }

    .risk-actions {
        grid-template-columns: 1fr;
    }

    .risk-die {
        width: 40px;
        height: 40px;
        padding: 5px;
    }

    .risk-selection-list div {
        grid-template-columns: 1fr;
        gap: 0.1rem;
    }
}

/* Objective and event feedback */

.risk-objective {
    display: grid;
    gap: 0.35rem;
    padding: 0.75rem 0.85rem;
    border: 1px solid rgba(248, 209, 108, 0.45);
    border-left: 4px solid var(--accent-warm);
    border-radius: 8px;
    background: linear-gradient(135deg, rgba(248, 209, 108, 0.12), rgba(5, 14, 28, 0.72));
}

.risk-objective h3,
.risk-objective p {
    margin: 0;
}

.risk-objective-label {
    color: var(--accent-warm);
    font-size: 0.68rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.risk-objective h3 {
    font-size: 1.05rem;
    line-height: 1.2;
}

.risk-objective-text {
    color: var(--ink);
    font-size: 0.88rem;
    font-weight: 700;
    line-height: 1.4;
}

.risk-objective-blocker {
    padding-left: 1.35rem;
    color: var(--ink-soft);
    font-size: 0.8rem;
    font-weight: 750;
    line-height: 1.35;
    text-indent: -1.35rem;
}

.risk-objective-blocker::before {
    content: "\26A0\FE0E\00A0";
    color: var(--risk-neutral);
}

/* The feedback line keeps its space so the controls below never jump when it appears. */
.risk-feedback {
    min-height: 2.5rem;
    display: flex;
    gap: 0.4rem;
    align-items: center;
    padding: 0.3rem 0.55rem;
    border: 1px solid transparent;
    border-radius: 6px;
    color: var(--ink);
    font-size: 0.8rem;
    font-weight: 800;
    line-height: 1.3;
}

.risk-feedback:empty {
    visibility: hidden;
}

.risk-feedback::before {
    flex: 0 0 auto;
    font-size: 1rem;
    line-height: 1;
}

.risk-feedback[class*="is-"] {
    border-color: currentColor;
    background: rgba(5, 14, 28, 0.82);
    animation: risk-feedback-in 0.28s ease-out;
}

.risk-feedback.is-draw,
.risk-feedback.is-trade {
    color: var(--risk-neutral);
}

.risk-feedback.is-draw::before {
    content: "\2605";
}

.risk-feedback.is-trade::before {
    content: "\21C4";
}

.risk-feedback.is-set,
.risk-feedback.is-conquer {
    color: var(--risk-human);
}

.risk-feedback.is-set::before {
    content: "\2713";
}

.risk-feedback.is-conquer::before {
    content: "\2691";
}

.risk-feedback.is-hit {
    color: var(--risk-ink);
}

.risk-feedback.is-hit::before {
    content: "\2694\FE0E";
}

.risk-feedback.is-loss,
.risk-feedback.is-invalid {
    color: #fecaca;
}

.risk-feedback.is-loss::before {
    content: "\25BC";
}

.risk-feedback.is-invalid::before {
    content: "\2715";
}

@keyframes risk-feedback-in {
    from {
        opacity: 0;
        transform: translateY(-5px);
    }

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

/* Map markers flash once per placement, loss or conquest; the class is removed by a timer. */
.risk-marker.is-fx-place .risk-marker-shape {
    animation: risk-fx-place 0.9s ease-out;
}

.risk-marker.is-fx-loss .risk-marker-shape {
    animation: risk-fx-loss 1s ease-out;
}

.risk-marker.is-fx-conquer .risk-marker-shape {
    animation: risk-fx-conquer 1.4s ease-out;
}

@keyframes risk-fx-place {
    0% {
        filter: brightness(1.8) drop-shadow(0 0 8px rgba(255, 255, 255, 0.95));
    }

    100% {
        filter: brightness(1) drop-shadow(0 0 0 rgba(255, 255, 255, 0));
    }
}

@keyframes risk-fx-loss {
    0%,
    40% {
        filter: brightness(0.7) drop-shadow(0 0 9px rgba(255, 60, 60, 1));
    }

    20% {
        filter: brightness(1.5) drop-shadow(0 0 3px rgba(255, 60, 60, 0.8));
    }

    100% {
        filter: brightness(1) drop-shadow(0 0 0 rgba(255, 60, 60, 0));
    }
}

@keyframes risk-fx-conquer {
    0%,
    50% {
        filter: brightness(1.7) drop-shadow(0 0 12px rgba(248, 209, 108, 1));
    }

    25% {
        filter: brightness(1.1) drop-shadow(0 0 4px rgba(255, 43, 214, 0.9));
    }

    100% {
        filter: brightness(1) drop-shadow(0 0 0 rgba(248, 209, 108, 0));
    }
}

.risk-scoreboard strong.is-fx-tick {
    display: inline-block;
    color: var(--risk-neutral);
    animation: risk-fx-tick 0.5s ease-out;
}

@keyframes risk-fx-tick {
    0% {
        transform: scale(1.55);
    }

    100% {
        transform: scale(1);
    }
}

@media (max-width: 940px) {
    .risk-command-panel > .risk-objective {
        grid-column: 1 / -1;
    }
}

@media (max-width: 430px) {
    .risk-hand {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 0.4rem;
    }

    .risk-card-name {
        font-size: 0.7rem;
    }

    .risk-cards-panel .risk-button {
        width: 100%;
    }
}

@media (prefers-reduced-motion: reduce) {
    .risk-die.is-rolling,
    .risk-marker.is-legal .risk-marker-ring,
    .risk-feedback[class*="is-"],
    .risk-scoreboard strong.is-fx-tick,
    .risk-card.is-dealt,
    .risk-card.is-fx-pick {
        animation: none;
    }

    .risk-land,
    .risk-marker-shape,
    .risk-card,
    .risk-card-image {
        transition: none;
    }

    .risk-card[aria-pressed="true"] {
        transform: none;
    }

    /* Static stand-ins: each effect holds one steady highlight until its timer clears the class. */
    .risk-marker.is-fx-place .risk-marker-shape {
        animation: none;
        filter: drop-shadow(0 0 5px rgba(255, 255, 255, 0.95));
    }

    .risk-marker.is-fx-loss .risk-marker-shape {
        animation: none;
        filter: drop-shadow(0 0 6px rgba(255, 60, 60, 1));
    }

    .risk-marker.is-fx-conquer .risk-marker-shape {
        animation: none;
        filter: drop-shadow(0 0 7px rgba(248, 209, 108, 1));
    }
}

/* Opponent-count selector beside the New game button. Seat colours and glyph shapes for the
   six seats are the owner-* classes above; seat 1 is owner-human, seats 2-6 are owner-ai..ai5. */
.risk-opponent-field {
    display: flex;
    flex: 1 1 100%;
    grid-column: 1 / -1;
    align-items: center;
    justify-content: space-between;
    gap: 0.6rem;
    font-size: 0.86rem;
    font-weight: 700;
    color: var(--risk-ink);
}

.risk-opponent-select {
    min-width: 4.5rem;
    min-height: 2.4rem;
    padding: 0.3rem 0.6rem;
    border: 1px solid var(--surface-edge-strong);
    border-radius: 8px;
    background: var(--risk-panel);
    color: var(--risk-ink);
    font: inherit;
}

.risk-opponent-select:focus-visible {
    outline: 2px solid var(--risk-human);
    outline-offset: 2px;
}

/* Online lobby: invite link, seat roster and host controls beside the new-game actions. */
.risk-button-invite {
    border-color: var(--risk-ai2);
}

.risk-lobby {
    border-color: rgba(56, 189, 248, 0.55);
}

.risk-lobby-status {
    color: var(--risk-ink);
    font-weight: 700;
    line-height: 1.4;
}

.risk-lobby-status:empty {
    display: none;
}

.risk-lobby-invite {
    display: grid;
    gap: 0.35rem;
}

.risk-lobby-invite[hidden],
.risk-lobby-note[hidden] {
    display: none;
}

.risk-lobby-invite label {
    color: var(--muted);
    font-size: 0.8rem;
    font-weight: 800;
}

.risk-lobby-link {
    display: flex;
    gap: 0.5rem;
    align-items: stretch;
    min-width: 0;
}

.risk-lobby-url {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 44px;
    padding: 0.4rem 0.6rem;
    border: 1px solid var(--surface-edge-strong);
    border-radius: 8px;
    background: var(--risk-panel);
    color: var(--risk-ink);
    font: inherit;
    font-size: 0.82rem;
}

.risk-lobby-url:focus-visible {
    outline: 3px solid #7dd3fc;
    outline-offset: 2px;
}

.risk-lobby-roster {
    display: grid;
    gap: 0.35rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.risk-lobby-seat {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
    align-items: center;
    min-width: 0;
    padding: 0.4rem 0.55rem;
    border: 1px solid var(--surface-edge);
    border-radius: 6px;
    background: rgba(5, 14, 28, 0.45);
    font-size: 0.86rem;
}

.risk-lobby-seat.is-open {
    border-style: dashed;
    color: var(--muted);
}

.risk-lobby-seat.is-viewer {
    border-color: var(--accent-warm);
}

.risk-lobby-seat-name {
    min-width: 0;
    overflow-wrap: anywhere;
    font-weight: 800;
}

.risk-lobby-tag {
    padding: 0.05rem 0.4rem;
    border: 1px solid currentColor;
    border-radius: 999px;
    color: var(--muted);
    font-size: 0.72rem;
    font-weight: 800;
}

.risk-lobby-note {
    color: var(--muted);
    font-size: 0.8rem;
    font-weight: 700;
    line-height: 1.35;
}

.risk-lobby-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.risk-lobby-actions .risk-button {
    flex: 1 1 8rem;
}

.risk-lobby-actions .risk-button[hidden] {
    display: none;
}

@media (max-width: 940px) {
    .risk-command-panel > .risk-lobby {
        grid-column: 1 / -1;
    }
}

@media (max-width: 430px) {
    .risk-lobby-link {
        flex-direction: column;
    }
}
