/* Print My Ticket : les billets (cinéma, concert, théâtre, avion). Tailles en cqw : ils s'adaptent à l'écran et s'impriment à taille réelle. */
/* ---------- THE TICKET: portrait 80 × 115 mm, modelled on early-2000s multiplex tickets.
   Sized in cqw so it scales on screen and prints at real size. ---------- */
.ticket-holder { width: 100%; max-width: 400px; container-type: inline-size; }
.ticket-holder.wide { max-width: 760px; }
.ticket { position: relative; width: 100%; overflow: hidden; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.ticket [data-img] { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ticket .ph { position: absolute; inset: 0; background:
  radial-gradient(70% 55% at 50% 30%, rgba(255,214,140,.55) 0, transparent 60%),
  radial-gradient(80% 60% at 85% 95%, rgba(200,40,60,.55) 0, transparent 60%),
  linear-gradient(180deg, #2b2440, #0f0d14); }
.ticket .ph span { position: absolute; left: 4%; right: 4%; bottom: 8%; text-align: center; font-family: var(--f-display); font-weight: 800; font-size: 3cqw; letter-spacing: .12em; text-transform: uppercase; color: rgba(255,240,215,.85); }
.t-cinema .ph span { font-size: 6cqw; }
[data-fit] { font-size: calc(var(--fs) * var(--fit, 1)) !important; }
/* --- CINÉMA --- */
.ticket.t-cinema {
  --t-accent: #1d3f8f;
  --t-print: #4b4a50;
  --t-sheet: #f3f6fb;
  position: relative; width: 100%; aspect-ratio: 80 / 115;
  display: grid; grid-template-rows: 51% auto auto 1fr auto;
  background: #ffffff; color: #1b1b22; overflow: hidden;
  font-family: var(--f-body);
  box-shadow: 0 1px 0 rgba(0,0,0,.06), 0 22px 44px -20px rgba(15,20,40,.5);
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.t-photo { position: relative; background: #15131b; overflow: hidden; }

.t-head { display: grid; grid-template-columns: auto auto 1fr; align-items: center; gap: 2.4cqw; padding: 2.6cqw 4cqw 2.2cqw; background: #fff; }
.t-logo { width: 9cqw; height: 9cqw; display: grid; place-items: center; background: var(--t-accent); }
.t-logo { overflow: hidden; color: #fff; font-family: var(--f-body); font-weight: 900; font-size: 3.4cqw; letter-spacing: -.02em; line-height: 1; }
.t-logo img { width: 100%; height: 100%; object-fit: contain; background: #fff; }
.t-logo.has-img { background: #fff; }
.t-cname { font-weight: 800; font-size: 5.2cqw; line-height: .95; text-transform: uppercase; letter-spacing: .01em; color: var(--t-accent); max-width: 36cqw; overflow-wrap: anywhere; }
.t-addr { font-size: 3cqw; line-height: 1.3; font-style: italic; color: #33333c; text-align: right; overflow-wrap: anywhere; }

.t-band { background: var(--t-accent); color: #fff; display: grid; grid-template-columns: 1.2fr 1fr 1.4fr 1fr 1fr; padding: .9cqw 4cqw; font-size: 2.1cqw; letter-spacing: .04em; }
.t-band span:nth-child(4), .t-band span:nth-child(5) { text-align: right; }

.t-print { position: relative; display: grid; grid-template-columns: 1fr 25cqw; background: var(--t-sheet); min-height: 0; }
.t-lines { padding: 1.6cqw 3cqw 1.4cqw 4cqw; display: grid; align-content: space-between; min-width: 0; }
.t-l { display: flex; justify-content: space-between; gap: 2cqw; min-width: 0; }
.t-c { display: grid; gap: .1cqw; min-width: 0; }
.t-c.grow { flex: 1; }
.t-c.r { text-align: right; }
.t-k { font-size: 2.1cqw; color: var(--t-accent); opacity: .8; white-space: nowrap; }
.t-v { font-family: "Courier Prime", "Courier New", var(--f-mono); color: var(--t-print); font-size: 4.3cqw; line-height: 1.05; white-space: nowrap; overflow: hidden; text-overflow: clip; letter-spacing: .02em; }
.t-v.small { font-size: 3.4cqw; }
.t-v.title { text-transform: uppercase; }
.t-salle { border-left: .35cqw solid #c9d2e4; display: grid; grid-template-rows: auto auto 1fr; justify-items: center; padding: 1.6cqw 1.6cqw 1.4cqw; gap: .6cqw; }
.t-salle-h { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 1cqw; width: 100%; font-size: 2.6cqw; font-weight: 700; color: #1b1b22; }
.t-salle-h::before, .t-salle-h::after { content: ""; height: 2cqw; background: var(--t-accent); }
.t-salle-n { font-family: "Courier Prime", "Courier New", var(--f-mono); font-weight: 700; color: var(--t-print); font-size: 11cqw; line-height: .95; }
.t-salle-x { align-self: end; text-align: center; font-family: "Courier Prime", "Courier New", var(--f-mono); color: var(--t-print); font-size: 3.4cqw; line-height: 1.2; }

.t-legal { background: var(--t-sheet); border-top: .2cqw solid #d5dbe8; padding: 1.4cqw 4cqw 1.8cqw; font-size: 2.05cqw; line-height: 1.35; color: #33333c; }

/* --- CONCERT : 190 × 70 mm, billet sombre avec talon détachable --- */
.ticket.t-concert {
  --t-accent: #ff3d7f; --fg-c: #f5f1f7;
  aspect-ratio: 190 / 70; display: grid; grid-template-columns: minmax(0, 1fr) 23%;
  background: #17141c; color: var(--fg-c); font-family: var(--f-body);
  -webkit-mask: radial-gradient(circle at 0 50%, #0000 3cqw, #000 calc(3cqw + .5px)) left / 51% 100% no-repeat, radial-gradient(circle at 100% 50%, #0000 3cqw, #000 calc(3cqw + .5px)) right / 51% 100% no-repeat;
  mask: radial-gradient(circle at 0 50%, #0000 3cqw, #000 calc(3cqw + .5px)) left / 51% 100% no-repeat, radial-gradient(circle at 100% 50%, #0000 3cqw, #000 calc(3cqw + .5px)) right / 51% 100% no-repeat;
}
.cc-main { position: relative; display: grid; grid-template-columns: 42% minmax(0, 1fr); min-width: 0; }
.cc-art { position: relative; overflow: hidden; -webkit-mask: linear-gradient(90deg, #000 62%, transparent); mask: linear-gradient(90deg, #000 62%, transparent); }
.cc-arcs { position: absolute; right: -6cqw; top: -10cqw; width: 26cqw; height: 26cqw; border-radius: 50%; background: repeating-radial-gradient(circle, transparent 0 1.1cqw, color-mix(in srgb, var(--t-accent) 55%, transparent) 1.1cqw 1.25cqw); opacity: .55; }
.cc-body { position: relative; display: grid; align-content: center; justify-items: center; text-align: center; gap: 1cqw; padding: 2cqw 2.5cqw 2cqw 0; min-width: 0; }
.cc-tour { margin: 0; font-size: 1.5cqw; letter-spacing: .3em; text-transform: uppercase; color: color-mix(in srgb, var(--fg-c) 75%, transparent); max-width: 100%; white-space: nowrap; overflow: hidden; }
.cc-title { --fs: 5.6cqw; margin: 0; font-family: var(--f-display); font-weight: 900; text-transform: uppercase; line-height: .95; letter-spacing: .03em; max-width: 100%; overflow-wrap: anywhere; text-wrap: balance; }
.cc-date { margin: .4cqw 0 0; border: .2cqw solid var(--fg-c); padding: .6cqw 2.4cqw; font-size: 1.7cqw; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; white-space: nowrap; }
.cc-venue { margin: 0; font-size: 1.45cqw; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: color-mix(in srgb, var(--fg-c) 80%, transparent); max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cc-cat { margin: 0; font-size: 1.35cqw; letter-spacing: .14em; text-transform: uppercase; color: var(--t-accent); white-space: nowrap; }
.cc-stub { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 1.4cqw; align-items: stretch; padding: 2.6cqw 3.6cqw 2.6cqw 1.6cqw; border-left: .25cqw dashed rgba(255,255,255,.35); background: #1d1923; }
.cc-no { writing-mode: vertical-rl; transform: rotate(180deg); display: flex; justify-content: center; gap: .8cqw; font-size: 1.3cqw; letter-spacing: .2em; text-transform: uppercase; white-space: nowrap; }
.cc-no b { font-family: var(--f-mono); font-weight: 500; letter-spacing: .08em; color: color-mix(in srgb, var(--fg-c) 80%, transparent); }
.cc-seat { display: grid; grid-template-rows: repeat(4, 1fr); border-left: .15cqw solid rgba(255,255,255,.4); border-right: .15cqw solid rgba(255,255,255,.4); }
.cc-seat div { display: grid; align-content: center; justify-items: center; border-bottom: .15cqw solid rgba(255,255,255,.4); padding: 0 .4cqw; min-width: 0; }
.cc-seat div:last-child { border-bottom: 0; }
.cc-seat i { font-style: normal; font-size: 1.05cqw; letter-spacing: .14em; text-transform: uppercase; opacity: .75; }
.cc-seat b { font-family: var(--f-mono); font-weight: 500; font-size: 1.9cqw; line-height: 1.1; max-width: 100%; overflow: hidden; white-space: nowrap; }
.cc-bar { position: relative; width: 4.2cqw; background: #fff; padding: .5cqw .4cqw; }
.cc-bar img { position: static; width: 100%; height: 100%; object-fit: fill; display: block; }
.cc-legal { position: absolute; left: 0; right: 0; bottom: 1.4cqw; margin: 0; text-align: center; font-size: .95cqw; letter-spacing: .1em; text-transform: uppercase; opacity: .55; }

/* --- THÉÂTRE : 190 × 70 mm, billet d'antan à encoches --- */
.ticket.t-theatre {
  --t-accent: #a8d5b0; --ink-t: #3b2e27; --red-t: #d8322a;
  aspect-ratio: 190 / 70; color: var(--ink-t); font-family: var(--f-body);
  background: repeating-linear-gradient(90deg, rgba(255,255,255,.1) 0 1.1cqw, rgba(0,0,0,.025) 1.1cqw 2.2cqw), var(--t-accent);
  -webkit-mask: radial-gradient(circle at 0 0, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 100% 0, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 0 100%, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 100% 100%, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 0 50%, #0000 6cqw, #000 calc(6cqw + .5px)), radial-gradient(circle at 100% 50%, #0000 6cqw, #000 calc(6cqw + .5px));
  -webkit-mask-composite: source-in;
  mask: radial-gradient(circle at 0 0, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 100% 0, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 0 100%, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 100% 100%, #0000 4cqw, #000 calc(4cqw + .5px)), radial-gradient(circle at 0 50%, #0000 6cqw, #000 calc(6cqw + .5px)), radial-gradient(circle at 100% 50%, #0000 6cqw, #000 calc(6cqw + .5px));
  mask-composite: intersect;
  display: grid; grid-template-columns: 16% minmax(0, 1fr) 16%;
}
.th-frame { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.th-side { display: grid; place-items: center; }
.th-side span { writing-mode: vertical-rl; transform: rotate(180deg); font-family: var(--f-mono); color: var(--red-t); font-size: 3cqw; letter-spacing: .18em; white-space: nowrap; }
.th-side + .th-center + .th-side span { transform: none; }
.th-center { display: grid; grid-template-rows: auto auto auto 1fr auto; justify-items: center; text-align: center; padding: 2.4cqw 1.5cqw 2.2cqw; min-width: 0; }
.th-house { margin: 0; font-size: 1.9cqw; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.th-title { --fs: 5.2cqw; margin: .3cqw 0 0; font-family: var(--f-display); font-weight: 800; line-height: .95; text-transform: uppercase; letter-spacing: .01em; text-shadow: .35cqw .35cqw 0 rgba(255,255,255,.35); max-width: 100%; overflow-wrap: anywhere; text-wrap: balance; }
.th-sub { margin: .4cqw 0 0; font-size: 1.6cqw; font-style: italic; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.th-row { display: grid; grid-template-columns: 16.5cqw minmax(0, 1fr); gap: 2cqw; align-items: center; align-self: center; width: 97%; min-height: 0; margin: .6cqw 0; }
.th-medal { position: relative; width: 16.5cqw; align-self: center; aspect-ratio: 1; border-radius: 50%; overflow: hidden; border: .5cqw solid #fffbe9; box-shadow: .5cqw .6cqw 0 rgba(0,0,0,.18); background: #222; }
.th-info { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .3cqw 1.6cqw; margin: 0; text-align: left; font-size: 1.7cqw; align-content: center; }
.th-info dt { font-size: 1.3cqw; letter-spacing: .14em; text-transform: uppercase; opacity: .75; align-self: center; }
.th-info dd { margin: 0; font-family: "Courier Prime", "Courier New", var(--f-mono); font-weight: 700; font-size: 2.1cqw; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.th-admit { margin: .4cqw 0 0; font-size: 1.5cqw; font-weight: 600; letter-spacing: .24em; text-transform: uppercase; }

/* --- AVION : 210 × 90 mm, carte d'embarquement --- */
.ticket.t-avion {
  --t-accent: #c8102e; --paper-a: #f8f1ee; --ink-a: #262226;
  aspect-ratio: 210 / 90; display: grid; grid-template-columns: minmax(0, 1fr) 25%;
  background: var(--paper-a); color: var(--ink-a); font-family: var(--f-body); border-radius: 1.9cqw; /* coins arrondis de 4 mm, suivis par le trait de découpe du PDF */
}
.av-main { display: grid; grid-template-columns: 23% minmax(0, 1fr) 5.5%; gap: 2cqw; padding: 2.2cqw 2cqw 2cqw 2.4cqw; min-width: 0; }
.av-art { position: relative; overflow: hidden; border-radius: .8cqw; background: #222; }
.av-fields { display: grid; grid-template-rows: auto auto 1fr auto auto auto; gap: 1.1cqw; min-width: 0; }
.av-top { display: flex; align-items: center; justify-content: space-between; gap: 1.5cqw; }
.av-air { display: flex; align-items: center; gap: 1cqw; min-width: 0; }
.av-mark { width: 3.6cqw; height: 3.6cqw; display: grid; place-items: center; background: var(--t-accent); color: #fff; font-weight: 900; font-size: 1.6cqw; border-radius: .4cqw; flex: none; }
.av-name { font-weight: 900; font-size: 2.3cqw; letter-spacing: .06em; text-transform: uppercase; color: var(--t-accent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.av-kind { font-size: 1.3cqw; color: var(--t-accent); font-weight: 700; white-space: nowrap; }
.av-grid { display: grid; gap: .9cqw 1.8cqw; min-width: 0; }
.av-grid.g4 { grid-template-columns: 2.1fr 1fr 1.15fr .8fr; }
.av-grid.g3b { grid-template-columns: 1.3fr 1fr 1fr; }
.av-grid.g3 { grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: end; }
.av-f { display: grid; gap: .2cqw; border-bottom: .2cqw solid var(--t-accent); padding-bottom: .4cqw; min-width: 0; }
.av-f i { font-style: normal; font-size: 1.05cqw; color: var(--t-accent); white-space: nowrap; }
.av-f i em { font-style: normal; opacity: .7; }
.av-f b { font-family: "Courier Prime", "Courier New", var(--f-mono); font-weight: 700; font-size: 1.85cqw; text-transform: uppercase; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.av-f b.big { font-family: var(--f-display); font-weight: 900; font-size: 4.6cqw; line-height: .9; letter-spacing: .04em; }
.av-f small { font-size: 1.3cqw; text-transform: uppercase; letter-spacing: .06em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.av-plane { width: 4cqw; height: 4cqw; color: var(--t-accent); align-self: center; }
.av-foot { display: flex; justify-content: space-between; align-items: baseline; gap: 2cqw; font-size: 1.3cqw; white-space: nowrap; color: var(--t-accent); font-weight: 700; }
.av-foot span:last-child { font-weight: 400; font-size: 1.1cqw; color: var(--ink-a); opacity: .7; }
.av-bar { position: relative; background: #fff; padding: .4cqw; }
.av-bar img { position: static; width: 100%; height: 100%; object-fit: fill; display: block; }
.av-stub { position: relative; display: grid; align-content: space-between; gap: 1cqw; padding: 2.2cqw 2.2cqw 2cqw; border-left: .25cqw dashed color-mix(in srgb, var(--t-accent) 60%, transparent); min-width: 0; }
.av-stub .av-grid { grid-template-columns: 1fr 1fr; gap: .9cqw 1.4cqw; }
.av-stub .av-f b { font-size: 1.6cqw; }
.av-stub-h { font-size: 1.3cqw; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; color: var(--t-accent); }
.t-v.title { --fs: 4.3cqw; }
.ticket[lang="en"] .av-f i em { display: none; }

/* --- MATCH : 210 × 70 mm, billet de stade classique (talon code-barres, photo, infos en blocs, bande des places, bandeau compétition) --- */
.ticket.t-match {
  --t-accent: #1d4fa0; --lime: #c6d82b; --ink-m: #16161a;
  aspect-ratio: 210 / 70; display: grid; grid-template-columns: 7% 19% minmax(0, 1fr) 10%; grid-template-rows: minmax(0, 1fr);
  background: #fff; color: var(--ink-m); font-family: var(--f-body);
}
.mt-stub { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: .5cqw; padding: 3cqw 1cqw; border-right: .25cqw dashed #b9bcc4; }
.mt-stub img { position: static; width: 100%; height: 100%; object-fit: fill; }
.mt-stub span { writing-mode: vertical-rl; font-family: var(--f-mono); font-size: 1cqw; letter-spacing: .08em; white-space: nowrap; }
.mt-art { position: relative; overflow: hidden; background: var(--t-accent); }
.mt-main { position: relative; display: grid; grid-template-rows: auto auto 1fr auto auto; padding: 1.8cqw 2.6cqw .5cqw; min-width: 0;
  background: repeating-linear-gradient(135deg, #f4f5f8 0 1.2cqw, #eceef2 1.2cqw 1.4cqw); }
.t-match .mt-comp-l { margin: 0; font-size: 1.25cqw; font-weight: 800; letter-spacing: .2em; text-transform: uppercase; color: var(--t-accent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mt-teams { --fs: 4.6cqw; margin: .3cqw 0 0; font-family: var(--f-display); font-weight: 900; line-height: 1; text-transform: uppercase; white-space: nowrap; overflow: hidden; max-width: 100%; }
.mt-teams i { font-style: italic; font-weight: 800; font-size: .48em; color: var(--t-accent); margin: 0 .25em; }
.mt-info { display: grid; grid-template-columns: 10.5cqw minmax(0, 1fr) max-content max-content; align-items: center; align-self: center; }
.mt-info > div { display: grid; gap: .15cqw; padding: 0 1.4cqw; border-left: .18cqw solid #c9ccd4; min-width: 0; }
.mt-info > svg + div { border-left: .18cqw solid #c9ccd4; }
.mt-stadium { width: 9cqw; height: 3.8cqw; color: var(--ink-m); }
.mt-info small { font-size: 1cqw; letter-spacing: .12em; text-transform: uppercase; opacity: .65; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mt-info > div:last-child small { white-space: normal; max-width: 11cqw; }
.mt-info > div:last-child { padding-right: 0; }
.mt-info b { font-size: 1.75cqw; font-weight: 800; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mt-seat { display: grid; grid-template-columns: 1.6fr repeat(5, minmax(0, 1fr)); background: var(--t-accent); color: #fff; border-radius: .8cqw; overflow: hidden; }
.mt-seat > div { display: grid; gap: .2cqw; align-content: center; padding: .8cqw 1cqw; text-align: center; border-left: .15cqw solid rgba(255,255,255,.3); min-width: 0; }
.mt-seat > .mt-holder { text-align: left; border: 0; background: rgba(0,0,0,.18); font-size: 1.2cqw; line-height: 1.3; gap: 0; }
.mt-holder span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mt-holder span:empty { display: none; }
.mt-seat i { font-style: normal; font-size: 1cqw; letter-spacing: .14em; text-transform: uppercase; opacity: .8; }
.mt-seat b { font-family: var(--f-mono); font-weight: 500; font-size: 1.9cqw; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.t-match .mt-foot { display: flex; justify-content: space-between; gap: 2cqw; margin: .3cqw 0 0; font-size: .8cqw; letter-spacing: .06em; text-transform: uppercase; opacity: .6; white-space: nowrap; }
.mt-band { position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr); min-height: 0; justify-items: center; padding: 1.6cqw .6cqw; background: var(--t-accent); color: #fff; overflow: hidden; }
.mt-band::before { content: ""; position: absolute; left: -8cqw; top: -4cqw; width: 11cqw; height: 42cqw; border-radius: 50%; border: .8cqw solid var(--lime); pointer-events: none; }
.mt-hex { position: relative; width: 8.4cqw; aspect-ratio: 1 / .9; display: grid; place-content: center; justify-items: center; text-align: center; background: #eceef2; color: var(--ink-m); clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%); padding: 0 .8cqw; }
.mt-hex i { font-style: normal; font-size: 1cqw; text-transform: uppercase; }
.mt-hex b { --fs: 1.6cqw; font-family: var(--f-display); font-weight: 900; line-height: 1.05; text-transform: uppercase; max-width: 7cqw; text-wrap: balance; }
.mt-hex b:empty { display: none; }
.t-match .mt-comp { --fs: 2.6cqw; position: relative; margin: 1cqw 1.3cqw 0 0; writing-mode: vertical-rl; transform: rotate(180deg); align-self: center; justify-self: end; /* à droite de l'arc vert, bien détaché */ font-family: var(--f-display); font-weight: 800; font-style: italic; color: var(--lime); line-height: 1; white-space: nowrap; max-height: 100%; overflow: hidden; }
/* Petits aperçus (accueil) : les plus petits textes atteignent la taille minimale du navigateur, on allège */
@container (max-width: 600px) { .mt-foot, .mt-holder span:last-child { display: none; } }
