@property --hand-spacing {
    syntax: "*";
    inherits: false;
}

@property --hand-overlap {
    syntax: "*";
    inherits: true;
}

@property --fan-angle {
    syntax: "*";
    inherits: false;
}

@property --fan-offset {
    syntax: "*";
    inherits: false;
}

.card {
    position: relative;

    transition: transform 0.15s ease, outline-color 0.15s ease;

    margin: 10px;

    width: 100px;
    height: 150px;

    background-color: white;
    border-radius: 8px;

    font-size: 32px;
    font-weight: bold;
    user-select: none;
}

.card.red {
    color: #FF0000;
}

.card.black {
    color: #000000;
}

.card.blue {
    color: #0000FF;
}

.card.green {
    color: #08ae08;
}

.card-top {
    position: absolute;
    top: 8px;
    left: 8px;
}

.card-bottom {
    position: absolute;
    bottom: 8px;
    right: 8px;
    transform: rotate(180deg);
}

.card-top, .card-bottom {
    display: flex;
    flex-direction: column;
    align-items: center;
    line-height: 0.9;
}

.card-suit {
    font-family: "Times New Roman", serif;
    font-size: 32px;
    font-weight: normal;
    font-variant-emoji: text;
}

.card.flipped {
    background-color: #880000;
    background-image: repeating-linear-gradient(
            45deg,
            transparent,
            transparent 5px,
            rgba(255, 255, 255, 0.15) 5px,
            rgba(255, 255, 255, 0.15) 10px
    );

    border: 4px solid white;

    box-sizing: border-box;
}

.card.flipped .card-top,
.card.flipped .card-bottom {
    visibility: hidden;
}

#deck {
    display: grid;
    grid-template-columns: repeat(13, 120px);
    gap: 10px;
    padding: 20px;
}

.card.selected {
    transform: translateY(-15px);
    outline: 3px solid gold;
}

.card.can-move {
    cursor: grab;
    touch-action: none;
}

.card-top,
.card-bottom {
    pointer-events: none;
}

.card.can-move:active {
    cursor: grabbing;
}

.card.can-move:hover:not(.selected) {
    transform: translateY(-8px);
}

.card:not(.can-move) {
    cursor: default;
}

.card.card-drag-source {
    opacity: 0.35;
}

.card.card-drag-preview {
    position: fixed;
    z-index: 1001;
    margin: 0;
    pointer-events: none;
    box-shadow: 0 6px 16px rgb(0 0 0 / 0.4);
}

.card[data-card-drag] {
    cursor: grab;
    touch-action: none;
    -webkit-user-select: none;
}

.card-slot {
    background-color: rgb(0 0 0 / 0.2);
    outline: 2px dashed rgba(255, 255, 255, 0.1);
    box-shadow: 0 0 0 2px rgb(0 0 0 / 0.2);

    width: 100px;
    height: 150px;

    border-radius: 8px;

    position: relative;
    box-sizing: border-box;
}

.card-slot > .card {
    margin: 0;
    position: absolute;
    inset: 0;
}

.card-slot.can-drop:hover {
    outline: 2px dashed yellow;
}

.card-slot:not(.can-drop) {
    display: flex;
    justify-content: center;
    align-items: center;
}

.card-hand {
    box-sizing: border-box;
    width: max-content;
    max-width: 100%;
    background-color: rgb(0 0 0 / 0.2);
    outline: 2px solid rgba(255, 255, 255, 0.4);
    border-radius: 8px;
}

.card-hand-controls {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
    padding: 8px;
}

.card-hand-controls .game-button {
    padding: 6px 10px;
    font-size: 14px;
}

.card-hand-cards {
    display: flex;
    gap: var(--hand-spacing, 12px);
    box-sizing: border-box;
    min-height: 182px;
    overflow-x: auto;
    padding: 20px 16px 16px;
}

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

.card-hand-cards > .card {
    flex-shrink: 0;
    margin: 0;
}

.card-hand:is([data-layout="overlap"], [data-layout="fan"]) > .card-hand-cards {
    gap: 0;
    padding-block: 24px;
}

.card-hand:is([data-layout="overlap"], [data-layout="fan"]) > .card-hand-cards > .card + .card {
    margin-inline-start: calc(-1 * clamp(0px, var(--hand-overlap), 68px));
}

.card-hand[data-layout="fan"] > .card-hand-cards > .card {
    rotate: var(--fan-angle);
    translate: 0 var(--fan-offset);
}

.card-hand-cards > .card.selected {
    z-index: 1;
}

.card-stack {
    position: relative;
    isolation: isolate;
    width: 100px;
    height: 150px;

    border-radius: 8px;
}

.card-stack > .card {
    position: absolute;
    inset: 0;
    margin: 0;
}

.card-stack.has-underlying-cards::before {
    content: "";
    --stack-edge: color-mix(in srgb, var(--deck-border, white) 72%, black);

    position: absolute;
    inset: 4px -4px -4px 4px;

    background-color: var(--stack-edge);
    border-radius: 8px;

    box-shadow:
            -1px -1px 0 var(--stack-edge),
            -2px -2px 0 var(--stack-edge),
            -3px -3px 0 var(--stack-edge);

    z-index: -2;
    pointer-events: none;
}

.card-stack.has-underlying-cards:not(.flipped)::after {
    content: "";

    position: absolute;
    inset: 0 0 0 0;
    border-radius: 8px;

    z-index: -1;

    background-color: white;
}

.card-stack.has-underlying-cards.flipped::after {
    content: "";

    position: absolute;
    inset: 0 0 0 0;
    border-radius: 8px;

    background-color: #880000;
    background-image: repeating-linear-gradient(
            45deg,
            transparent,
            transparent 5px,
            rgba(255, 255, 255, 0.15) 5px,
            rgba(255, 255, 255, 0.15) 10px
    );

    box-shadow: inset 0 0 0 4px white;

    z-index: -1;
}

.card-stack.empty {
    outline: 2px dashed rgba(255, 255, 255, 0.4);
}

[data-card-back="navy"] .card.flipped {
    background-color: #163c69;
    background-image:
        repeating-linear-gradient(45deg, transparent 0 6px, #a4c1e640 6px 8px),
        repeating-linear-gradient(-45deg, transparent 0 6px, #a4c1e640 6px 8px);
}

[data-card-back="violet"] .card.flipped {
    background-color: #58387e;
    background-image: conic-gradient(from 45deg, #c0a1eb66 25%, transparent 0 50%, #c0a1eb66 0 75%, transparent 0);
    background-size: 12px 12px;
}

[data-card-back="gold"] .card.flipped {
    background-color: #825314;
    background-image: repeating-linear-gradient(135deg, transparent 0 5px, #ffd27385 5px 8px, transparent 8px 11px);
}

[data-card-back="jade"] .card.flipped {
    background: repeating-conic-gradient(#145c50 0% 25%, #267b65 0% 50%) 0 0 / 12px 12px;
}
[data-card-back="dusk"] .card.flipped {
    background: repeating-linear-gradient(135deg, #32254c 0 8px, #604466 8px 11px);
}
[data-card-back="gold-crown"] { --deck-border: #e7b968; }
[data-card-back="gold-crown"] .card.flipped {
    background: radial-gradient(ellipse, #614620, #271b18);
    border-color: var(--deck-border);
    container-type: inline-size;
}
[data-card-back="gold-crown"] .card.flipped::after {
    content: '♛';
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
    overflow: clip;
    color: #f4ca77;
    font-size: 60cqw;
    line-height: 1;
}
[data-card-back^="win-"] { --deck-border: #d7b580; }
[data-card-back^="win-"] .card.flipped {
    background: repeating-linear-gradient(45deg, hsl(var(--cosmetic-hue, 145) 35% 23%) 0 6px, #d7b580 6px 8px, hsl(var(--cosmetic-hue, 145) 38% 36%) 8px 13px);
    border-color: var(--deck-border);
}

[data-card-back^="mastery-"] .card.flipped {
    background: repeating-linear-gradient(45deg, hsl(var(--cosmetic-hue, 212) 45% 28%) 0 6px, #d7b580 6px 8px, hsl(var(--cosmetic-hue, 212) 46% 39%) 8px 13px);
}
:is([data-card-back="bronze-laurel"], [data-card-back="silver-trophy"], [data-card-back^="gold-"]:where(:not([data-card-back="gold-crown"]))) .card.flipped {
    background: radial-gradient(ellipse, #665126, #272018);
    container-type: inline-size;
}
:is([data-card-back="bronze-laurel"], [data-card-back="silver-trophy"], [data-card-back^="gold-"]:where(:not([data-card-back="gold-crown"]))) .card.flipped::after {
    content: var(--reward-symbol, '✦');
    position: absolute; inset: 0; display: grid; place-items: center;
    color: #f5d68f; font-size: 55cqw; line-height: 1;
}
[data-card-back="bronze-laurel"] { --reward-symbol: '❦'; }
[data-card-back="silver-trophy"] { --reward-symbol: '🏆'; }
[data-card-back="gold-spider"] {
    --deck-border: #e7b968;
    --reward-symbol: '\1F577\FE0E';
}
[data-card-back="gold-spider"] .card.flipped { border-color: var(--deck-border); }
[data-card-back="gold-spider"] .card.flipped::after { font-variant-emoji: text; }
[data-card-back="gold-pawn"] { --reward-symbol: '♞'; }
[data-card-back="gold-rook"] { --reward-symbol: '♝'; }
[data-card-back="gold-queen"] { --reward-symbol: '♜'; }
[data-card-back="gold-king"] { --reward-symbol: '♚'; }
[data-card-back="silver-trophy"] { --deck-border: #bcc9d8; }
[data-card-back="silver-trophy"] .card.flipped {
    background: radial-gradient(ellipse, #64748a, #273344);
    border-color: var(--deck-border);
}
[data-card-back="silver-trophy"] .card.flipped::after { filter: grayscale(1) brightness(1.15); }
