/* Navy table, cream cards. Card kinds are told apart by shape first and by
   blue / orange / ink second; nothing on the page depends on red or green. */

:root {
	--navy: #0e1a2b;
	--navy-2: #16273f;
	--line: #2c4263;
	--mist: #a9b8cf;
	--paper: #f6f1e4;
	--paper-2: #e9e1cd;
	--ink: #1b2433;
	--ink-soft: #55607a;
	--blue: #1f5fd0;
	--orange: #c45f00;
	--amber: #f2a230;
	--serif: 'Iowan Old Style', 'Palatino Linotype', Palatino, 'Book Antiqua', Georgia, serif;
	--sans: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}

* {
	box-sizing: border-box;
}

html {
	background: var(--navy);
}

/* The table: a lit patch of navy with a fine grain over it, like felt. */

body {
	margin: 0;
	min-height: 100vh;
	background:
		url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .09 0'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23g)'/%3E%3C/svg%3E"),
		radial-gradient(120% 80% at 50% 0%, var(--navy-2), var(--navy) 70%);
	color: var(--paper);
	font: 16px/1.4 var(--sans);
}

.table {
	max-width: 960px;
	margin: 0 auto;
	padding: 18px 20px 28px;
}

.top {
	display: flex;
	align-items: baseline;
	gap: 14px;
	flex-wrap: wrap;
	margin-bottom: 14px;
}

.is-framed .top {
	display: none;
}

.is-framed .table {
	padding-top: 22px;
}

.top h1 {
	margin: 0;
	font: 700 26px/1 var(--serif);
	letter-spacing: 0.02em;
}

.top p {
	margin: 0;
	color: var(--mist);
	font-size: 15px;
}

/* --- the hand ------------------------------------------------------------ */

.hand {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 18px;
	perspective: 1200px;
}

.card {
	--accent: var(--ink);
	position: relative;
	display: flex;
	flex-direction: column;
	min-height: clamp(230px, 44vh, 330px);
	padding: 16px 16px 14px;
	border-radius: 14px;
	border: 3px solid transparent;
	background: linear-gradient(180deg, var(--paper), var(--paper-2));
	color: var(--ink);
	box-shadow: 0 1px 0 #fff8 inset, 0 10px 24px #0007;
	transform-origin: 50% 50%;
	backface-visibility: hidden;
}

.card--theme {
	--accent: var(--blue);
}

.card--verb {
	--accent: var(--orange);
}

.card__kind {
	display: grid;
	grid-template-columns: 20px 1fr;
	column-gap: 8px;
	align-items: center;
}

.card__shape {
	width: 20px;
	height: 20px;
	fill: var(--accent);
}

.card__name {
	color: var(--accent);
	font: 700 13px/1 var(--sans);
	letter-spacing: 0.14em;
	text-transform: uppercase;
}

.card__hint {
	grid-column: 2;
	color: var(--ink-soft);
	font-size: 13px;
}

.card__text {
	flex: 1;
	display: flex;
	align-items: center;
	margin: 6px 0;
	font: 600 30px/1.12 var(--serif);
	text-wrap: balance;
	overflow-wrap: anywhere;
}

.card__text[data-size='xl'] {
	font-size: 46px;
}

.card__text[data-size='l'] {
	font-size: 36px;
}

.card__text[data-size='s'] {
	font-size: 24px;
}

/* The odd card: a dashed inner frame and a named mark, so it reads without colour. */

.card__odd {
	position: absolute;
	top: 14px;
	right: 14px;
	margin: 0;
	padding: 3px 8px;
	border: 1.5px dashed var(--ink);
	border-radius: 999px;
	font: 600 11px/1.2 var(--sans);
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

.card.is-odd::after {
	content: '';
	position: absolute;
	inset: 6px;
	border: 1.5px dashed #1b243366;
	border-radius: 9px;
	pointer-events: none;
}

/* The back, seen only while a card turns over: a navy lattice, an amber
   frame, and the three shapes of the deck. */

.card__back {
	position: absolute;
	inset: -3px;
	z-index: 3;
	display: grid;
	place-items: center;
	border-radius: 14px;
	background:
		repeating-linear-gradient(45deg, #ffffff14 0 2px, transparent 2px 14px),
		repeating-linear-gradient(-45deg, #ffffff14 0 2px, transparent 2px 14px),
		linear-gradient(160deg, #1d3a66, #12233d);
	opacity: 0;
	pointer-events: none;
}

.card__back::before {
	content: '';
	position: absolute;
	inset: 10px;
	border: 1.5px solid var(--amber);
	border-radius: 8px;
}

.card__back svg {
	width: 96px;
	padding: 10px 14px;
	border: 1.5px solid var(--paper);
	border-radius: 999px;
	background: var(--navy);
	box-sizing: content-box;
}

.card__back circle {
	fill: #6aa5ff;
}

.card__back path {
	fill: var(--amber);
}

.card__back rect {
	fill: var(--paper);
}

/* A locked card: solid ink frame, pressed down, padlock filled in. */

.card.is-locked {
	border-color: var(--ink);
	box-shadow: 0 0 0 3px var(--amber), 0 4px 10px #0007;
	transform: translateY(3px);
}

.card__actions {
	display: flex;
	gap: 8px;
	position: relative;
	z-index: 1;
}

.chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 7px 12px 7px 9px;
	border: 1.5px solid var(--ink);
	border-radius: 999px;
	background: transparent;
	color: var(--ink);
	font: 600 14px/1 var(--sans);
	cursor: pointer;
}

.chip svg {
	width: 16px;
	height: 16px;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.8;
	stroke-linecap: round;
	stroke-linejoin: round;
}

.chip:hover:not(:disabled) {
	background: #1b243314;
}

.chip:disabled {
	opacity: 0.35;
	cursor: default;
}

.chip--lock .lock-bar {
	transform: translate(3px, -1px) rotate(18deg);
	transform-origin: 13px 9px;
	transition: transform 0.12s;
}

.chip--lock[aria-pressed='true'] {
	background: var(--ink);
	color: var(--paper);
}

.chip--lock[aria-pressed='true'] .lock-body {
	fill: currentColor;
}

.chip--lock[aria-pressed='true'] .lock-bar {
	transform: none;
}

/* --- under the hand ------------------------------------------------------ */

.push {
	min-height: 1.5em;
	margin: 18px 0 14px;
	text-align: center;
	color: var(--paper);
	font: italic 19px/1.3 var(--serif);
}

.bar {
	display: flex;
	justify-content: center;
	gap: 10px;
	flex-wrap: wrap;
}

.bar--left {
	justify-content: flex-start;
}

.btn {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 11px 18px;
	border: 1.5px solid var(--line);
	border-radius: 10px;
	background: #ffffff0a;
	color: var(--paper);
	font: 600 16px/1 var(--sans);
	cursor: pointer;
}

.btn:hover {
	border-color: var(--mist);
}

.btn--deal {
	padding: 11px 26px;
	border-color: var(--amber);
	background: var(--amber);
	color: var(--ink);
	font-size: 18px;
}

.btn--deal:hover {
	border-color: #ffc35c;
	background: #ffc35c;
}

.btn--small {
	padding: 8px 12px;
	font-size: 14px;
}

.btn.is-armed {
	border-color: var(--amber);
	color: var(--amber);
}

kbd {
	padding: 2px 6px;
	border: 1px solid currentColor;
	border-radius: 5px;
	font: 600 11px/1.2 var(--sans);
	opacity: 0.7;
}

.code {
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
	margin-top: 14px;
	color: var(--mist);
	font-size: 14px;
}

.code input,
.manual textarea {
	padding: 8px 10px;
	border: 1.5px solid var(--line);
	border-radius: 8px;
	background: #0009;
	color: var(--paper);
	font: 600 15px/1.2 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
	letter-spacing: 0.06em;
}

.code input {
	width: 8.5em;
	text-transform: uppercase;
}

.status {
	min-width: 12em;
	color: var(--amber);
}

.manual {
	max-width: 520px;
	margin: 14px auto 0;
	color: var(--mist);
	font-size: 14px;
}

.manual textarea {
	display: block;
	width: 100%;
	margin-top: 6px;
	resize: vertical;
}

/* --- kept hands ---------------------------------------------------------- */

.kept {
	margin-top: 26px;
	padding-top: 18px;
	border-top: 1px solid var(--line);
}

.kept h2 {
	margin: 0 0 10px;
	font: 700 18px/1 var(--serif);
}

.kept ol {
	margin: 0 0 12px;
	padding: 0;
	list-style: none;
}

.kept li {
	display: flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
	padding: 8px 0;
	border-bottom: 1px solid #2c426366;
}

.kept__hand {
	flex: 1 1 320px;
	font: 17px/1.3 var(--serif);
}

.kept__hand b {
	font-weight: 600;
}

.kept__hand i {
	padding: 0 6px;
	color: var(--mist);
	font-style: normal;
}

.kept__code {
	color: var(--mist);
	font: 13px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

.foot {
	margin-top: 22px;
	color: var(--mist);
	font-size: 13px;
	text-align: center;
}

.foot p {
	margin: 0;
}

:focus-visible {
	outline: 3px solid var(--amber);
	outline-offset: 2px;
}

/* --- narrow screens: the cards become rows ------------------------------- */

@media (max-width: 680px) {
	.table {
		padding: 14px 12px 24px;
	}

	.hand {
		grid-template-columns: 1fr;
		gap: 12px;
	}

	.card {
		min-height: 0;
		padding: 12px 14px;
	}

	.card__text,
	.card__text[data-size] {
		margin: 10px 0 12px;
		font-size: 26px;
	}

	.card__text[data-size='xl'],
	.card__text[data-size='l'] {
		font-size: 32px;
	}

	.push {
		font-size: 17px;
	}

	kbd,
	.foot kbd {
		display: none;
	}
}

@media (prefers-reduced-motion: reduce) {
	* {
		transition: none !important;
	}
}
