/* ==========================================================================
   TDX Deck — portfolio Thomas Dassonville
   Rétro-futurisme « cartes à collectionner » — Divi 5
   ========================================================================== */

/* ---------- 1. Jetons ---------- */
:root {
	--tdx-red: #E63946;      /* accent : gros titres, boutons, rareté rare. Jamais en texte courant sur navy (≈2,8:1). */
	--tdx-cream: #F1FAEE;    /* texte principal sur navy (≈11,7:1) */
	--tdx-ice: #A8DADC;      /* texte secondaire sur navy (≈7,9:1) */
	--tdx-steel: #457B9D;    /* bordures, surfaces secondaires */
	--tdx-navy: #1D3557;     /* fond */
	--tdx-navy-deep: #142640;
	--tdx-line: rgba(168, 218, 220, .28);

	--tdx-font-display: 'Unbounded', 'Arial Black', system-ui, sans-serif;
	--tdx-font-mono: 'Space Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;

	--tdx-radius-card: 18px;
	--tdx-radius: 10px;
	--tdx-gap: clamp(16px, 2.5vw, 32px);
	--tdx-ease: cubic-bezier(.2, .8, .2, 1);
	--tdx-flip: 600ms;
}

/* ---------- 2. Base ---------- */
body.tdx {
	background-color: var(--tdx-navy);
	color: var(--tdx-cream);
}

/* Trame de fond : grille fine + scanlines très légères */
body.tdx #page-container,
body.tdx .et-l--body {
	background-color: var(--tdx-navy);
	background-image:
		repeating-linear-gradient(0deg, rgba(241, 250, 238, .025) 0 1px, transparent 1px 4px),
		linear-gradient(var(--tdx-line) 1px, transparent 1px),
		linear-gradient(90deg, var(--tdx-line) 1px, transparent 1px);
	background-size: auto, 64px 64px, 64px 64px;
	background-position: 0 0, -1px -1px, -1px -1px;
	background-blend-mode: normal;
}

body.tdx ::selection { background: var(--tdx-red); color: var(--tdx-cream); }

body.tdx :focus-visible {
	outline: 2px solid var(--tdx-ice);
	outline-offset: 3px;
}

.screen-reader-text {
	position: absolute !important;
	width: 1px; height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	white-space: nowrap;
}

/* ---------- 3. Typographie utilitaire (classes à poser dans Divi) ---------- */
.tdx-signature {
	font-family: var(--tdx-font-display);
	font-weight: 700;
	font-size: clamp(15px, 1.4vw, 18px);
	letter-spacing: .02em;
	line-height: 1.1;
	color: var(--tdx-cream);
	text-decoration: none;
}
.tdx-signature em { font-style: normal; color: var(--tdx-red); }
.tdx-signature small {
	display: block;
	font-family: var(--tdx-font-mono);
	font-weight: 400;
	font-size: 11px;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--tdx-ice);
}

.tdx-kicker {
	font-family: var(--tdx-font-mono);
	font-size: 13px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--tdx-ice);
}
.tdx-kicker::before { content: '// '; color: var(--tdx-steel); }

.tdx-display,
.tdx-display h1,
.tdx-display h2 {
	font-family: var(--tdx-font-display);
	font-weight: 700;
	font-size: clamp(40px, 8vw, 112px);
	line-height: .95;
	letter-spacing: -.02em;
	color: var(--tdx-cream);
	padding-bottom: 0;
}
.tdx-display em,
.tdx-accent { font-style: normal; color: var(--tdx-red); }

.tdx-h2,
.tdx-h2 h2 {
	font-family: var(--tdx-font-display);
	font-weight: 500;
	font-size: clamp(28px, 4vw, 52px);
	line-height: 1.05;
	color: var(--tdx-cream);
}

.tdx-mono,
.tdx-counter {
	font-family: var(--tdx-font-mono);
	font-size: 13px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--tdx-ice);
}

.tdx-lead {
	font-size: clamp(16px, 1.3vw, 19px);
	line-height: 1.65;
	color: var(--tdx-cream);
	max-width: 60ch;
}

/* Barre « spectre » façon référence Ventura, en palette */
.tdx-spectrum {
	height: 10px;
	border-radius: 999px;
	background: linear-gradient(90deg, var(--tdx-steel), var(--tdx-ice) 45%, var(--tdx-cream) 60%, var(--tdx-red));
}

/* ---------- 4. Boutons ---------- */
.tdx-btn,
body.tdx .et_pb_button.tdx-btn {
	display: inline-flex;
	align-items: center;
	gap: .5em;
	padding: .8em 1.4em;
	border: 0;
	border-radius: 999px;
	background: var(--tdx-red);
	color: var(--tdx-cream);
	font-family: var(--tdx-font-mono);
	font-weight: 700;
	font-size: 14px;
	letter-spacing: .06em;
	text-transform: uppercase;
	text-decoration: none;
	transition: transform .2s var(--tdx-ease), box-shadow .2s var(--tdx-ease);
	box-shadow: 0 4px 0 var(--tdx-navy-deep);
}
.tdx-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 0 var(--tdx-navy-deep); }
.tdx-btn:active { transform: translateY(2px); box-shadow: 0 2px 0 var(--tdx-navy-deep); }
.tdx-btn--ghost {
	background: transparent;
	color: var(--tdx-cream);
	box-shadow: inset 0 0 0 1.5px var(--tdx-ice);
}
.tdx-btn--ghost:hover { box-shadow: inset 0 0 0 1.5px var(--tdx-cream); }
.tdx-btn--small { padding: .55em 1em; font-size: 12px; }

/* ---------- 5. Pastilles ---------- */
.tdx-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	list-style: none;
	margin: 0 0 1em;
	padding: 0 !important;
}
.tdx-chips li {
	padding: .3em .75em;
	border-radius: 999px;
	background: var(--tdx-ice);
	color: var(--tdx-navy);
	font-family: var(--tdx-font-mono);
	font-size: 12px;
	line-height: 1.4;
}
.tdx-chips--ghost li {
	background: transparent;
	color: var(--tdx-ice);
	box-shadow: inset 0 0 0 1px var(--tdx-ice);
}

/* ---------- 6. Filtres ---------- */
.tdx-filters {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-bottom: var(--tdx-gap);
}
.tdx-filter {
	cursor: pointer;
	padding: .55em 1.1em;
	border: 0;
	border-radius: 999px;
	background: transparent;
	box-shadow: inset 0 0 0 1px var(--tdx-steel);
	color: var(--tdx-ice);
	font-family: var(--tdx-font-mono);
	font-size: 13px;
	letter-spacing: .04em;
	transition: background .2s, color .2s, box-shadow .2s;
}
.tdx-filter:hover { box-shadow: inset 0 0 0 1px var(--tdx-ice); }
.tdx-filter[aria-pressed="true"] {
	background: var(--tdx-cream);
	color: var(--tdx-navy);
	box-shadow: none;
}
.tdx-filter__count { opacity: .7; margin-left: .3em; }

/* ---------- 7. Grille du deck ---------- */
.tdx-deck__grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr));
	gap: var(--tdx-gap);
	perspective: 1600px;
}
.tdx-card.is-hidden { display: none; }

/* ---------- 8. La carte ---------- */
.tdx-card {
	--card-bg: var(--tdx-cream);
	--card-ink: var(--tdx-navy);
	--card-frame: var(--tdx-steel);
	--card-accent: var(--tdx-steel);
	--mx: 50%;
	--my: 50%;
	--rx: 0deg;
	--ry: 0deg;
	position: relative;
	aspect-ratio: 63 / 88; /* format TCG standard */
	transform: rotateX(var(--ry)) rotateY(var(--rx));
	transform-style: preserve-3d;
	transition: transform .3s var(--tdx-ease);
	animation: tdx-deal .6s var(--tdx-ease) backwards; /* « backwards » : laisse transform libre pour l'inclinaison après l'animation */
	animation-delay: calc(var(--i, 0) * 70ms);
}
.tdx-card--rare  { --card-frame: var(--tdx-red);   --card-accent: var(--tdx-red); }
.tdx-card--forge { --card-bg: var(--tdx-ice);      --card-frame: var(--tdx-navy-deep); --card-accent: var(--tdx-navy); }

.tdx-card__inner {
	position: absolute;
	inset: 0;
	transform-style: preserve-3d;
	transition: transform var(--tdx-flip) var(--tdx-ease);
}
.tdx-card.is-flipped .tdx-card__inner { transform: rotateY(180deg); }

@media (hover: hover) and (pointer: fine) {
	.tdx-card:hover .tdx-card__inner { transform: rotateY(180deg); }
	.tdx-card.is-flipped:hover .tdx-card__inner { transform: rotateY(0deg); }
}

.tdx-card__face {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	padding: 12px;
	border-radius: var(--tdx-radius-card);
	background: var(--card-bg);
	color: var(--card-ink);
	box-shadow:
		inset 0 0 0 4px var(--card-frame),
		inset 0 0 0 6px var(--card-bg),
		inset 0 0 0 7px var(--card-frame),
		0 18px 40px -18px rgba(0, 0, 0, .6);
	backface-visibility: hidden;
	-webkit-backface-visibility: hidden;
	overflow: hidden;
}
.tdx-card__back {
	transform: rotateY(180deg);
	padding: 22px 20px;
	background: var(--tdx-navy-deep);
	color: var(--tdx-cream);
	box-shadow:
		inset 0 0 0 4px var(--card-frame),
		0 18px 40px -18px rgba(0, 0, 0, .6);
	background-image: repeating-linear-gradient(45deg, rgba(168, 218, 220, .06) 0 2px, transparent 2px 12px);
}

/* Haut de carte */
.tdx-card__top {
	display: flex;
	justify-content: space-between;
	align-items: center;
	padding: 4px 6px 8px;
	font-family: var(--tdx-font-mono);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .08em;
	text-transform: uppercase;
}
.tdx-card__num { font-size: 13px; }
.tdx-card__rarity { display: inline-flex; align-items: center; gap: 6px; }
.tdx-pip {
	width: 10px; height: 10px;
	border-radius: 50%;
	background: var(--card-accent);
}
.tdx-card--forge .tdx-pip { animation: tdx-blink 1.4s steps(2) infinite; }

/* Illustration */
.tdx-card__art {
	position: relative;
	flex: 1 1 auto;
	min-height: 0;
	border-radius: 10px;
	overflow: hidden;
	background: var(--tdx-steel);
}
.tdx-card__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}
.tdx-card__placeholder {
	position: absolute;
	inset: 0;
	display: grid;
	place-items: center;
	font-family: var(--tdx-font-display);
	font-weight: 700;
	font-size: clamp(40px, 6vw, 72px);
	color: var(--tdx-cream);
	background:
		repeating-linear-gradient(0deg, rgba(29, 53, 87, .25) 0 2px, transparent 2px 6px),
		linear-gradient(160deg, var(--tdx-steel), var(--tdx-navy));
}

/* Titre + type */
.tdx-card__title {
	margin: 10px 4px 0;
	padding: 0;
	font-family: var(--tdx-font-display);
	font-weight: 700;
	font-size: clamp(17px, 1.6vw, 21px);
	line-height: 1.1;
	color: var(--card-ink);
}
.tdx-card__title a { color: inherit; text-decoration: none; }
.tdx-card__title a::after { content: ''; position: absolute; inset: 0; z-index: 1; } /* toute la face cliquable */
.tdx-card__type {
	margin: 4px 4px 0;
	padding: 0;
	font-family: var(--tdx-font-mono);
	font-size: 12px;
	line-height: 1.35;
	color: var(--tdx-steel);
}
.tdx-card--forge .tdx-card__type { color: var(--tdx-navy); }

.tdx-card__foot {
	display: flex;
	justify-content: space-between;
	gap: 8px;
	margin-top: 8px;
	padding: 8px 6px 2px;
	border-top: 1px dashed currentColor;
	font-family: var(--tdx-font-mono);
	font-size: 11px;
	line-height: 1.3;
	text-transform: uppercase;
	letter-spacing: .04em;
}

/* Dos */
.tdx-card__label {
	font-family: var(--tdx-font-mono);
	font-size: 12px;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--tdx-ice);
	margin: 0 0 .8em;
	padding: 0;
}
.tdx-card__text {
	flex: 1 1 auto;
	font-size: 15px;
	line-height: 1.55;
	color: var(--tdx-cream);
	padding: 0;
}
.tdx-card__back .tdx-btn { align-self: flex-start; position: relative; z-index: 2; }

/* Bouton retourner (tactile + clavier) */
.tdx-card__flip {
	position: absolute;
	right: 10px;
	bottom: 10px;
	z-index: 3;
	width: 36px; height: 36px;
	display: grid;
	place-items: center;
	border: 0;
	border-radius: 50%;
	background: var(--tdx-navy);
	color: var(--tdx-cream);
	font-size: 18px;
	cursor: pointer;
	transform: translateZ(2px);
	box-shadow: 0 0 0 2px var(--tdx-cream);
}
@media (hover: hover) and (pointer: fine) {
	.tdx-card__flip { opacity: 0; transition: opacity .2s; }
	.tdx-card:focus-within .tdx-card__flip,
	.tdx-card:hover .tdx-card__flip { opacity: 1; }
}

/* Reflet holographique des cartes rares (suit le pointeur) */
.tdx-card--rare .tdx-card__front::after {
	content: '';
	position: absolute;
	inset: 0;
	border-radius: inherit;
	pointer-events: none;
	background:
		radial-gradient(circle at var(--mx) var(--my), rgba(241, 250, 238, .55), transparent 40%),
		linear-gradient(115deg, transparent 30%, rgba(168, 218, 220, .35) 45%, rgba(230, 57, 70, .25) 55%, transparent 70%);
	background-size: 100% 100%, 250% 250%;
	background-position: center, var(--mx) var(--my);
	mix-blend-mode: soft-light;
	opacity: .9;
}

/* ---------- 9. Grande carte (page projet) ---------- */
.tdx-hero-card {
	width: 100%; /* sans largeur explicite, margin auto réduit la carte (contenu en absolu) à 0 */
	max-width: 380px;
	margin-inline: auto;
	perspective: 1600px;
}
.tdx-hero-card .tdx-card { animation: none; }

/* Éventail de cartes du hero [tdx_main] */
.tdx-hand {
	position: relative;
	width: min(100%, 520px);
	aspect-ratio: 520 / 420;
	margin-inline: auto;
	perspective: 1600px;
}
.tdx-hand .tdx-card {
	position: absolute;
	top: 6%;
	width: 44%;
	animation-name: tdx-deal-hand;
}
.tdx-hand .tdx-card:nth-child(1) { left: 0;   rotate: -10deg; }
.tdx-hand .tdx-card:nth-child(2) { left: 28%; top: 0; z-index: 2; }
.tdx-hand .tdx-card:nth-child(3) { left: 56%; rotate: 9deg; }
@keyframes tdx-deal-hand { from { opacity: 0; translate: 0 40px; } }

/* ---------- 10. Fiche technique ---------- */
.tdx-fiche {
	position: relative;
	padding: 24px;
	border-radius: var(--tdx-radius-card);
	background: var(--tdx-navy-deep);
	box-shadow: inset 0 0 0 1px var(--tdx-line);
}
.tdx-fiche::before,
.tdx-fiche::after { /* coins de visée HUD */
	content: '';
	position: absolute;
	width: 16px; height: 16px;
	border: 2px solid var(--tdx-ice);
}
.tdx-fiche::before { top: 8px; left: 8px; border-right: 0; border-bottom: 0; }
.tdx-fiche::after  { bottom: 8px; right: 8px; border-left: 0; border-top: 0; }
.tdx-fiche__head {
	display: flex;
	justify-content: space-between;
	font-family: var(--tdx-font-mono);
	font-size: 13px;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--tdx-ice);
	padding: 0 0 12px;
	border-bottom: 1px solid var(--tdx-line);
	margin-bottom: 12px;
}
.tdx-fiche__head span { color: var(--tdx-red); font-weight: 700; }
.tdx-fiche__list { margin: 0 0 16px; }
.tdx-fiche__list div {
	display: grid;
	grid-template-columns: 9em 1fr;
	gap: 12px;
	padding: 8px 0;
	border-bottom: 1px dashed var(--tdx-line);
}
.tdx-fiche__list dt {
	font-family: var(--tdx-font-mono);
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: .08em;
	color: var(--tdx-ice);
}
.tdx-fiche__list dd { margin: 0; color: var(--tdx-cream); }

/* ---------- 11. Panneaux « bento » (sections Divi) ---------- */
.tdx-panel {
	border-radius: var(--tdx-radius-card);
	background: var(--tdx-navy-deep);
	box-shadow: inset 0 0 0 1px var(--tdx-line);
	padding: clamp(20px, 3vw, 36px) !important;
}
.tdx-panel--cream { background: var(--tdx-cream); color: var(--tdx-navy); box-shadow: none; }
.tdx-panel--cream h2, .tdx-panel--cream h3, .tdx-panel--cream p { color: var(--tdx-navy); }
.tdx-panel--red { background: var(--tdx-red); color: var(--tdx-cream); box-shadow: none; }
.tdx-panel--ice { background: var(--tdx-ice); color: var(--tdx-navy); box-shadow: none; }

.tdx-stat {
	font-family: var(--tdx-font-display);
	font-weight: 700;
	font-size: clamp(48px, 6vw, 88px);
	line-height: .9;
}

/* Bandeau défilant d'intérêts */
.tdx-marquee { overflow: hidden; white-space: nowrap; }
.tdx-marquee__track {
	display: inline-flex;
	gap: 2.5em;
	font-family: var(--tdx-font-display);
	font-size: clamp(22px, 3vw, 40px);
	animation: tdx-marquee 30s linear infinite;
}
.tdx-marquee__track span::after { content: '✦'; margin-left: 2.5em; color: var(--tdx-red); }

/* ---------- 12. Animations ---------- */
@keyframes tdx-deal {
	from { opacity: 0; transform: translateY(24px) rotate(-3deg); }
	to   { opacity: 1; transform: none; }
}
@keyframes tdx-blink { 50% { opacity: .25; } }
@keyframes tdx-marquee { to { transform: translateX(-50%); } }

@media (prefers-reduced-motion: reduce) {
	.tdx-card,
	.tdx-card__inner,
	.tdx-marquee__track,
	.tdx-card--forge .tdx-pip { animation: none !important; transition: none !important; }
	.tdx-card { transform: none !important; }
	.tdx-card--rare .tdx-card__front::after { display: none; }
	body.tdx #page-container { background-image: none; }
}

/* ---------- 13. Responsive ---------- */
@media (max-width: 600px) {
	.tdx-deck__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
	.tdx-card__face { padding: 8px; }
	.tdx-card__top { font-size: 10px; padding: 2px 4px 6px; }
	.tdx-card__title { font-size: 15px; margin-top: 8px; }
	.tdx-card__type { display: none; }
	.tdx-card__foot { font-size: 10px; flex-direction: column; gap: 2px; }
	.tdx-card__back { padding: 14px 12px; }
	.tdx-card__text { font-size: 13px; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical; }
	.tdx-card__flip { width: 32px; height: 32px; right: 6px; bottom: 6px; }
	.tdx-fiche__list div { grid-template-columns: 1fr; gap: 2px; }
}
@media (max-width: 380px) {
	.tdx-deck__grid { grid-template-columns: minmax(0, 1fr); }
	.tdx-card { max-width: 300px; margin-inline: auto; width: 100%; }
}

@media print {
	body.tdx #page-container { background: #fff; }
	.tdx-card__inner { transform: none !important; }
	.tdx-card__back, .tdx-card__flip, .tdx-filters { display: none; }
}
