/*
 * Print My File 1.0.22 — AAA wave 1. Built on the production 1.0.21 sheet
 * (print-my-file.cancel-feedback-a2dbe87bfe0b.css).
 *
 * The studio is NIGHT now (PMF-UX-07; owner 2026-10-10: night is the default
 * surface sitewide). It was a white card on a #0a0a14 page with a black price
 * card inside it: two visual languages in one box. Every text pair below is
 * WCAG AA on the surface it sits on (see the 1.0.22 contrast check).
 *
 * 1.0.23 (AAA wave 2, PMF-C): the keep / move block in the studio and the
 * "What we print" illustration strip below the hero.
 */

/* ── tokens ── */
body.page-print-my-file, .tdc-od, .tdc-od-bar, .tdc-od-dropall {
	--od-ink: var(--color-text-on-dark, #f0f0ff);
	--od-muted: #b4b5cf;
	--od-page: var(--color-dark, #0a0a14);
	--od-surface: #12121c;
	--od-raised: #191929;
	--od-field: #1d1d30;
	--od-line: rgba(255, 255, 255, .12);
	--od-line-strong: rgba(255, 255, 255, .26);
	--od-cyan: var(--color-neon-cyan, #00f0ff);
	--od-cyan-ink: #bff8ff;
	--od-violet: #d6aaff;
	--od-pink: var(--color-neon-pink, #ff2d78);
	--od-cta: var(--color-cta, #ff5c5c);
	--od-on-cta: var(--color-on-cta, #0a0a14);
	--od-ok: #7dffd2;
	--od-warn: #ffd27a;
	--od-amber: #ffc98a;
	--od-danger: #ffc4c4;
}

/* ── hero: the drop zone is the dominant block (PMF-UX-10) ── */
.tdc-od-hero .landing-hero__content { position: relative; z-index: 1; }
.tdc-od-hero__grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-xl, 28px); align-items: start; }
.tdc-od-hero__copy { max-width: 900px; }
.tdc-od-hero .landing-hero__title { margin-bottom: var(--space-md, 16px); }
.tdc-od-hero__from { margin: 0 0 var(--space-xs, 4px); font-size: var(--text-sm, 14px); font-weight: 600; color: var(--od-ink); }
.tdc-od-hero__copy > .tdc-od-chips { margin: var(--space-sm, 8px) 0 var(--space-md, 16px); }
.tdc-od-hero .landing-hero__subtitle { max-width: 780px; margin-bottom: 0; }
.tdc-od-hero::after { content: ''; position: absolute; inset: auto 0 0 auto; width: 55%; height: 100%; background: radial-gradient(ellipse at 75% 45%, rgba(0, 240, 255, .10) 0%, transparent 60%); pointer-events: none; }
.tdc-od-chips li { white-space: nowrap; }
.tdc-od-hero__app { width: 100%; min-width: 0; }
/*
 * The theme caps landing content at --container-narrow (736 px at 1440) and
 * pads the hero top by header + 96 px; with both, the drop zone sat under the
 * fold at 736 px wide. Scoped to this page: wider content, a one-line H1, and
 * less dead sky above the kicker. The horizon geometry is anchored to the
 * hero's BOTTOM (main.css --tdc-horizon), so neither change moves the floor
 * relative to the content that ends the hero.
 */
body.page-print-my-file .tdc-od-hero .tdc-od-hero__grid { width: 100%; max-width: min(1160px, 100%); }
body.page-print-my-file .tdc-od-hero .landing-hero__title { font-size: clamp(34px, 3.9vw, 54px); line-height: 1.08; text-wrap: balance; }
@media (min-width: 769px) {
	body.page-print-my-file .tdc-od-hero.landing-hero { padding-top: calc(var(--space-3xl, 64px) - 8px); }
}

/* ── app shell ── */
.tdc-od { position: relative; }
.tdc-od [hidden], .tdc-od__studio[hidden], .tdc-od__progress[hidden] { display: none !important; }
.tdc-od__hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; opacity: 0; }
.tdc-od-sticky { display: none; }

/* F8: in the accessibility tree, out of sight. Not `hidden`. */
.tdc-od__file-input { position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important; padding: 0 !important; border: 0 !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important; white-space: nowrap !important; }

/* ── drop zone ── */
.tdc-od__dropwrap { position: relative; }
.tdc-od__drop {
	position: relative; display: flex; align-items: center; justify-content: center; min-height: 300px; padding: var(--space-2xl, 40px) var(--space-xl, 32px);
	border: 2px dashed rgba(0, 240, 255, .5); border-radius: var(--radius-xl, 24px);
	background: linear-gradient(160deg, #15152a, #0d0d18);
	box-shadow: 0 24px 70px rgba(0, 0, 0, .5), inset 0 0 0 1px rgba(255, 255, 255, .04);
	color: var(--od-ink); cursor: pointer; text-align: center;
	transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}
.tdc-od__drop:hover { border-color: var(--od-cyan); box-shadow: 0 24px 70px rgba(0, 0, 0, .5), 0 0 0 4px rgba(0, 240, 255, .08); }
.tdc-od__drop:focus-visible { border-color: var(--od-cyan); outline: 3px solid var(--od-cyan); outline-offset: 3px; }
.tdc-od__drop.is-over { border-style: solid; border-color: var(--od-cyan); transform: scale(1.01); background: linear-gradient(160deg, #0f2a36, #0d0d18); }
.tdc-od__drop.is-busy { cursor: progress; }
.tdc-od__drop-inner { display: flex; flex-direction: column; align-items: center; gap: var(--space-sm, 10px); }
.tdc-od__drop-icon { display: inline-flex; width: 76px; height: 76px; align-items: center; justify-content: center; border-radius: 50%; color: var(--od-cyan); background: rgba(0, 240, 255, .08); box-shadow: 0 0 0 1px rgba(0, 240, 255, .28), 0 0 36px rgba(0, 240, 255, .2); margin-bottom: var(--space-xs, 4px); }
.tdc-od__drop.is-over .tdc-od__drop-icon { animation: tdc-od-bob .8s ease-in-out infinite; }
@keyframes tdc-od-bob { 50% { transform: translateY(-6px); } }
.tdc-od__drop-title { font-size: clamp(22px, 2.6vw, 32px); font-weight: 700; letter-spacing: -.01em; line-height: 1.2; }
.tdc-od__drop-or { font-size: var(--text-sm, 14px); color: var(--od-muted); }
/* 1.0.26 (W4 pmf-performance-05): a native <label for="tdc-od-file">, so it takes its own taps (the picker opens before the script runs). */
.tdc-od__browse { cursor: pointer; }
.tdc-od__drop-formats { font-size: 13.5px; color: var(--od-muted); margin-top: var(--space-xs, 4px); }

/* PMF-UX-18: the progress panel lies OVER the zone, opaque, so nothing overlaps it. */
.tdc-od__progress {
	position: absolute; inset: 0; z-index: 2; display: flex; flex-direction: column; justify-content: center; gap: 12px;
	padding: var(--space-lg, 24px) var(--space-xl, 32px); border: 2px solid rgba(0, 240, 255, .5); border-radius: var(--radius-xl, 24px);
	background: #10101d; color: var(--od-ink); text-align: left;
}
.tdc-od__progress > * { width: 100%; max-width: 680px; margin-inline: auto; }
.tdc-od__progress-file { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; min-width: 0; }
.tdc-od__progress-name { font-weight: 700; font-size: 16px; word-break: break-all; }
.tdc-od__progress-size { font-size: 14px; color: var(--od-muted); font-variant-numeric: tabular-nums; }
.tdc-od__progress-bar { height: 10px; border-radius: 999px; background: rgba(255, 255, 255, .12); overflow: hidden; }
.tdc-od__progress-bar span { display: block; height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, var(--od-pink), var(--od-cyan)); transition: width .15s linear; }
.tdc-od__progress-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; }
.tdc-od__progress-label { font-size: 14px; font-weight: 600; color: var(--od-cyan-ink); }
.tdc-od__progress-cancel { min-height: 40px; padding: 6px 14px; border: 1.5px solid var(--od-line-strong); border-radius: 10px; background: transparent; color: var(--od-ink); font: inherit; font-size: 14px; cursor: pointer; }
.tdc-od__progress-cancel:hover, .tdc-od__progress-cancel:focus-visible { border-color: var(--od-danger); color: var(--od-danger); }
.tdc-od__progress-cancel:focus-visible { outline: 2px solid var(--od-cyan); outline-offset: 2px; }

/* The security line: opaque, because the build plate runs behind it. */
.tdc-od__secure { display: flex; align-items: flex-start; justify-content: center; gap: 8px; width: fit-content; max-width: 100%; margin: 12px auto 0; padding: 8px 14px; border: 1px solid var(--od-line); border-radius: 999px; background: #0d0d18; color: var(--od-muted); font-size: 13.5px; line-height: 1.45; }
.tdc-od__secure svg { flex: none; margin-top: 1px; color: var(--od-ok); }

/* PD-01: phones only. */
.tdc-od__handoff { display: none; }

/* ── messages: opaque on every surface (PMF-UX-10) ── */
.tdc-od__msg { margin: var(--space-md, 16px) 0 0; padding: 12px 16px; border-radius: 12px; font-size: 15px; line-height: 1.45; }
.tdc-od__msg.is-error { background: #2a1117; color: var(--od-danger); border: 1px solid rgba(255, 92, 92, .55); }
.tdc-od__msg.is-info { background: #0b1f26; color: #c9fbff; border: 1px solid rgba(0, 240, 255, .4); }
.tdc-od__msg.is-ok { background: #0b2621; color: #b4ffe6; border: 1px solid rgba(0, 229, 160, .45); }
.tdc-od__msg button { margin-left: 4px; min-height: 36px; padding: 4px 12px; border: 1.5px solid currentColor; border-radius: 8px; background: transparent; color: inherit; font: inherit; font-weight: 600; cursor: pointer; }

/* ── the studio, on night tokens (PMF-UX-07) ── */
.tdc-od__studio {
	margin-top: var(--space-xl, 32px); padding: var(--space-lg, 24px);
	display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-lg, 24px);
	background: var(--od-surface); color: var(--od-ink); color-scheme: dark;
	border: 1px solid var(--od-line); border-radius: var(--radius-xl, 24px);
	box-shadow: 0 30px 80px rgba(0, 0, 0, .55), inset 0 1px 0 rgba(255, 255, 255, .04);
}
.tdc-od__studio:focus { outline: none; }
.tdc-od__studio:focus-visible { outline: 3px solid var(--od-cyan); outline-offset: 4px; }

.tdc-od-hero__grid:has(.has-job) { gap: var(--space-lg, 24px); }
.tdc-od-hero__grid:has(.has-job) .landing-hero__subtitle,
.tdc-od-hero__grid:has(.has-job) .tdc-od-chips,
.tdc-od-hero__grid:has(.has-job) .tdc-od-hero__from,
.tdc-od-hero__app:has(.has-job) .tdc-od-hero__aside { display: none; }
.tdc-od-hero__grid:has(.has-job) .landing-hero__title { font-size: clamp(24px, 3vw, 32px); margin-bottom: 0; }

.tdc-od.has-job { display: grid; grid-template-columns: minmax(0, 1fr); }
/* Direct children only: `.tdc-od.has-job .tdc-od__msg` also matched the
   messages INSIDE the form (a flex column) and moved the rights refusal
   below both buttons. */
.tdc-od.has-job > .tdc-od__msg { order: 1; }
.tdc-od.has-job > .tdc-od__studio { order: 2; }
.tdc-od.has-job > .tdc-od__dropwrap { order: 3; margin-top: var(--space-md, 16px); }
.tdc-od.has-job .tdc-od__secure, .tdc-od.has-job .tdc-od__handoff { display: none; }
.tdc-od.has-job .tdc-od__drop {
	min-height: 104px; padding: var(--space-md, 16px) var(--space-lg, 24px); border-radius: 16px;
}
.tdc-od.has-job .tdc-od__progress { border-radius: 16px; padding: 12px 20px; gap: 8px; }
.tdc-od__drop-compact { display: none; }
.tdc-od.has-job .tdc-od__drop-inner { display: none; }
.tdc-od.has-job .tdc-od__drop-compact { display: flex; align-items: center; justify-content: center; gap: 10px; font-size: 15px; font-weight: 600; line-height: 1.35; text-align: center; }
.tdc-od__drop-compact-icon { display: inline-flex; flex: none; color: var(--od-cyan); }
@media (min-width: 900px) {
	.tdc-od__studio { grid-template-columns: minmax(0, 1.15fr) minmax(360px, .85fr); padding: var(--space-xl, 32px); gap: var(--space-xl, 32px); }
	/* PMF-UX-08 layout: the model stays in view while the options scroll. */
	.tdc-od__stage { position: sticky; top: calc(var(--header-height, 72px) + 16px); align-self: start; }
}

.tdc-od__stage { display: flex; flex-direction: column; gap: var(--space-md, 16px); min-width: 0; }

/* ── viewer ── */
.tdc-od__viewer { position: relative; aspect-ratio: 4 / 3; min-height: 280px; border-radius: 18px; overflow: hidden; background: radial-gradient(ellipse at 50% 35%, #23234a 0%, #11111f 55%, #08080f 100%); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .06); }
@keyframes tdc-od-materialize {
	0%   { transform: translateY(100%); opacity: 0; }
	10%  { opacity: 1; }
	86%  { opacity: 1; }
	100% { transform: translateY(-150%); opacity: 0; }
}
@media (prefers-reduced-motion: no-preference) {
	.tdc-od__viewer::before {
		content: ''; position: absolute; inset: auto 0 0 0; height: 46%; z-index: 2; pointer-events: none;
		background: linear-gradient(to top, rgba(0, 240, 255, 0) 0%, rgba(0, 240, 255, .08) 58%, rgba(0, 240, 255, .42) 94%, rgba(186, 246, 255, .85) 100%);
		animation: tdc-od-materialize 1.45s cubic-bezier(.22, .61, .36, 1) both;
	}
}
.tdc-od__viewer canvas { display: block; width: 100% !important; height: 100% !important; touch-action: none; cursor: grab; }
.tdc-od__viewer canvas:active { cursor: grabbing; }
.tdc-od__viewer.is-loading::after { content: ''; position: absolute; inset: 0; margin: auto; width: 40px; height: 40px; border-radius: 50%; border: 3px solid rgba(0, 240, 255, .25); border-top-color: var(--od-cyan); animation: tdc-od-spin .9s linear infinite; }
.tdc-od__viewer-fail { position: absolute; inset: 0; display: grid; place-items: center; margin: 0; padding: var(--space-lg, 24px); color: var(--od-muted); text-align: center; font-size: 14px; }
/* The dimensions sit UNDER the canvas, never on the model. */
.tdc-od__viewer-caption { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 16px; margin: -6px 2px 0; font-size: 13.5px; line-height: 1.4; color: var(--od-muted); }
.tdc-od__viewer-caption:empty { display: none; }
.tdc-od__viewer-dims { color: var(--od-ink); font-weight: 600; font-variant-numeric: tabular-nums; }

.tdc-od__file { display: flex; flex-wrap: wrap; gap: var(--space-sm, 8px) var(--space-lg, 24px); align-items: baseline; }
.tdc-od__file-name { flex: 1 1 100%; font-size: 17px; word-break: break-all; color: var(--od-ink); }
.tdc-od__file-meta { display: flex; flex-wrap: wrap; gap: var(--space-sm, 8px) var(--space-lg, 24px); margin: 0; }
.tdc-od__file-meta div { display: flex; flex-direction: column; }
.tdc-od__file-meta dt { font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: var(--od-muted); }
.tdc-od__file-meta dd { margin: 0; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--od-ink); }
.tdc-od__pill { display: inline-block; padding: 4px 10px; border-radius: 999px; background: rgba(180, 74, 255, .16); color: var(--od-violet); font-size: 12px; font-weight: 600; }
.tdc-od__warn { margin: 0; padding: 10px 14px; border-radius: 10px; font-size: 14px; background: #2a210c; color: var(--od-warn); border: 1px solid rgba(255, 176, 32, .45); }
.tdc-od__warn.is-info { background: #0b1f26; color: #c9fbff; border-color: rgba(0, 240, 255, .4); }

.tdc-od__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm, 8px); align-self: flex-start; }
.tdc-od__action { min-height: 44px; padding: 10px 18px; font-size: 14.5px; border-radius: 10px; border: 1.5px solid; cursor: pointer; }
.tdc-od__action.tdc-od__newfile { background: transparent; color: var(--od-cyan-ink); border-color: rgba(0, 240, 255, .55); }
.tdc-od__action.tdc-od__newfile:hover, .tdc-od__action.tdc-od__newfile:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
.tdc-od__action--cancel { background: transparent; color: var(--od-muted); border-color: var(--od-line-strong); }
.tdc-od__action--cancel:hover, .tdc-od__action--cancel:focus-visible { color: var(--od-danger); border-color: rgba(255, 92, 92, .6); background: rgba(255, 92, 92, .08); }
.tdc-od__action--danger { background: #b02a2a; color: #fff; border-color: #b02a2a; }
.tdc-od__action--danger:hover, .tdc-od__action--danger:focus-visible { background: #8f1d1d; border-color: #8f1d1d; }
.tdc-od__action:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__confirm { align-self: flex-start; padding: 12px 14px; border: 1.5px solid rgba(255, 92, 92, .55); border-radius: 12px; background: #24111a; }
.tdc-od__confirm-q { margin: 0 0 10px; font-size: 14.5px; font-weight: 600; color: var(--od-ink); }
.tdc-od__confirm-actions { display: flex; flex-wrap: wrap; gap: var(--space-sm, 8px); }
#tdc-od-cancel-msg { order: 0; margin: 0; }

/* ── PMF-C (1.0.23): keep this quote / move it to another device ── */
.tdc-od__keep { display: flex; flex-direction: column; gap: 10px; padding: 14px 16px; border: 1px solid var(--od-line); border-radius: 14px; background: var(--od-raised); }
.tdc-od__keep[hidden], .tdc-od__keep [hidden] { display: none; }
.tdc-od__keep-q { margin: 0; font-size: 14.5px; font-weight: 700; color: var(--od-ink); }
.tdc-od__keep-actions { display: flex; flex-wrap: wrap; gap: var(--space-sm, 8px); }
/* Labels wrap (FR "Envoyer cette soumission à mon ordinateur" is wider than a 390 px phone's button). */
.tdc-od__keep .tdc-od__action { background: transparent; color: var(--od-cyan-ink); border-color: rgba(0, 240, 255, .55); text-decoration: none; display: inline-flex; align-items: center; justify-content: center; height: auto; white-space: normal; text-align: center; line-height: 1.3; letter-spacing: normal; overflow-wrap: anywhere; }
.tdc-od__keep .tdc-od__action:hover, .tdc-od__keep .tdc-od__action:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
/* The page's one pink accent stays on "Continue to checkout": Send and Share are cyan. */
.tdc-od__keep .tdc-od__action.btn--accent, .tdc-od__email-send { background: var(--od-cyan); color: #0a0a14; border-color: var(--od-cyan); font-weight: 700; box-shadow: none; letter-spacing: normal; }
.tdc-od__keep .tdc-od__action.btn--accent:hover, .tdc-od__keep .tdc-od__action.btn--accent:focus-visible, .tdc-od__email-send:hover, .tdc-od__email-send:focus-visible { background: var(--od-cyan-ink); color: #0a0a14; border-color: var(--od-cyan-ink); }
.tdc-od__keep-btn[aria-expanded="true"] { background: rgba(0, 240, 255, .12); border-color: var(--od-cyan); color: #fff; }
.tdc-od__move-phone { display: none; }
.tdc-od__email, .tdc-od__move { display: flex; flex-direction: column; gap: 10px; padding-top: 4px; }
.tdc-od__email input[type="email"], .tdc-od__move input[type="text"] { width: 100%; min-height: 44px; padding: 8px 12px; border: 1.5px solid var(--od-line-strong); border-radius: 10px; background: var(--od-field); color: var(--od-ink); font: inherit; font-size: 15px; }
.tdc-od__move input[type="text"] { font-size: 13.5px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.tdc-od__email input:focus-visible, .tdc-od__move input:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 1px; border-color: var(--od-cyan); }
.tdc-od__fine { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--od-muted); }
.tdc-od__email-send { align-self: flex-start; min-height: 44px; padding: 10px 22px; border-radius: 10px; border: 1.5px solid; cursor: pointer; }
.tdc-od__email-send:disabled { opacity: .6; cursor: progress; }
.tdc-od__keep-status { margin: 0; font-size: 13.5px; line-height: 1.45; color: var(--od-ok); }
.tdc-od__keep-status:empty { display: none; }
.tdc-od__keep-status.is-error { color: var(--od-danger); }
.tdc-od__msg-retry { margin-left: 4px; min-height: 36px; padding: 4px 14px; border: 1.5px solid currentColor; border-radius: 8px; background: transparent; color: inherit; font: inherit; font-weight: 700; cursor: pointer; }
.tdc-od__msg-retry:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }

/* ── options ── */
.tdc-od__config { display: flex; flex-direction: column; gap: var(--space-md, 16px); min-width: 0; }
.tdc-od__group { border: 0; padding: 0; margin: 0; min-width: 0; }
.tdc-od__group legend { padding: 0; margin-bottom: var(--space-sm, 8px); font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--od-muted); }
.tdc-od__colour-name { text-transform: none; letter-spacing: 0; font-weight: 600; color: var(--od-ink); }
.tdc-od__materials { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--space-sm, 8px); }
.tdc-od__material { position: relative; display: flex; flex-direction: column; gap: 2px; padding: 12px 14px; border: 1.5px solid var(--od-line-strong); border-radius: 12px; background: var(--od-raised); cursor: pointer; transition: border-color .15s ease, box-shadow .15s ease, background .15s ease; }
.tdc-od__material:hover { border-color: rgba(0, 240, 255, .55); }
.tdc-od__material input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.tdc-od__material:has(input:checked) { border-color: var(--od-cyan); background: #12262e; box-shadow: 0 0 0 3px rgba(0, 240, 255, .18); }
.tdc-od__material:has(input:focus-visible) { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__material-name { font-weight: 700; color: var(--od-ink); }
.tdc-od__material-desc { font-size: 12.5px; line-height: 1.35; color: var(--od-muted); }
.tdc-od__file-colours { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: var(--space-lg, 24px) 0 var(--space-xs, 6px); }
.tdc-od__file-colours.is-warning { padding: 10px 12px; border: 1px solid rgba(255, 149, 0, .5); border-radius: 10px; background: #2a1c0c; }
.tdc-od__file-colours.is-warning .tdc-od__file-colours-label { color: var(--od-amber); }
.tdc-od__file-colours[hidden] { display: none; }
.tdc-od__file-colours-label { font-size: 13px; font-weight: 600; color: var(--od-muted); }
.tdc-od__file-colours-label--soft { font-weight: 500; }
.tdc-od__file-colours-list { display: flex; flex-wrap: wrap; gap: 8px; }
.tdc-od__file-colour { display: inline-flex; align-items: center; gap: 6px; padding: 3px 9px 3px 4px; border: 1px solid var(--od-line-strong); border-radius: 999px; background: rgba(255, 255, 255, .04); }
.tdc-od__file-colour-dot { width: 16px; height: 16px; border-radius: 50%; background: var(--chip, #888); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .35); }
.tdc-od__file-colour-hex { font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace); font-size: 11px; letter-spacing: .02em; color: var(--od-muted); font-variant-numeric: tabular-nums; }

.tdc-od__swatches { display: flex; flex-wrap: wrap; gap: 8px; }
.tdc-od__swatch { width: 38px; height: 38px; padding: 0; border: 2px solid rgba(255, 255, 255, .22); border-radius: 50%; background: var(--dot, #888); cursor: pointer; box-shadow: inset 0 0 0 2px var(--od-surface); transition: transform .12s ease, box-shadow .12s ease; }
.tdc-od__swatch:hover { transform: scale(1.08); }
.tdc-od__swatch.is-selected { border-color: var(--od-cyan); box-shadow: inset 0 0 0 2px var(--od-surface), 0 0 0 3px rgba(0, 240, 255, .55); }
.tdc-od__swatch:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 3px; }
.tdc-od__row { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-sm, 8px) var(--space-md, 16px); }
.tdc-od__field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.tdc-od__field > span { font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--od-muted); }
.tdc-od__field-desc { font-size: 12.5px; line-height: 1.35; color: var(--od-muted); }
.tdc-od__field-desc:empty { display: none; }
.tdc-od__field select, .tdc-od__field textarea, .tdc-od__qty input { width: 100%; min-height: 44px; padding: 8px 12px; border: 1.5px solid var(--od-line-strong); border-radius: 10px; background: var(--od-field); color: var(--od-ink); font: inherit; }
.tdc-od__field select option { background: var(--od-surface); color: var(--od-ink); }
.tdc-od__field select:focus-visible, .tdc-od__field textarea:focus-visible, .tdc-od__qty input:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 1px; border-color: var(--od-cyan); }
.tdc-od__qty { display: grid; grid-template-columns: 44px 1fr 44px; }
.tdc-od__qty button { min-height: 44px; border: 1.5px solid var(--od-line-strong); background: var(--od-raised); color: var(--od-ink); font-size: 20px; cursor: pointer; }
.tdc-od__qty button:hover { background: #24243a; }
.tdc-od__qty button:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 1px; }
.tdc-od__qty button:first-child { border-radius: 10px 0 0 10px; border-right: 0; }
.tdc-od__qty button:last-child { border-radius: 0 10px 10px 0; border-left: 0; }
.tdc-od__qty input { border-radius: 0; text-align: center; font-variant-numeric: tabular-nums; -moz-appearance: textfield; }
.tdc-od__qty input::-webkit-inner-spin-button, .tdc-od__qty input::-webkit-outer-spin-button { -webkit-appearance: none; }
.tdc-od__toggle { display: flex; gap: 10px; align-items: flex-start; font-size: 14.5px; line-height: 1.4; cursor: pointer; color: var(--od-ink); }
/* Checkboxes that read as checkboxes on night (unticked was a solid dark square). */
.tdc-od__toggle input[type="checkbox"] {
	-webkit-appearance: none; appearance: none; flex: none; width: 22px; height: 22px; margin: 0; border: 2px solid #9a9bbd; border-radius: 6px;
	background: transparent center / 14px 14px no-repeat; cursor: pointer; transition: background-color .12s ease, border-color .12s ease;
}
.tdc-od__toggle input[type="checkbox"]:hover { border-color: var(--od-cyan); }
.tdc-od__toggle input[type="checkbox"]:checked {
	border-color: var(--od-cyan); background-color: var(--od-cyan);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 8.5l3.2 3.2L13 5' fill='none' stroke='%230a0a14' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.tdc-od__toggle input[type="checkbox"]:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__toggle--rights { padding: 12px 14px; border-radius: 12px; background: var(--od-raised); border: 1px solid var(--od-line); }
.tdc-od__toggle--rights:has(input:checked) { border-color: rgba(0, 240, 255, .45); }
/* PMF-UX-20: the rights refusal sits right under its checkbox. */
.tdc-od__rights-msg { margin-top: -6px; }

/* ── price card ── */
.tdc-od__price { padding: var(--space-md, 16px) var(--space-lg, 24px); border-radius: 16px; background: #0b0b15; color: var(--od-ink); box-shadow: inset 0 0 0 1px rgba(0, 240, 255, .28), 0 0 40px rgba(0, 240, 255, .06); }
.tdc-od__price-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin-bottom: 6px; }
.tdc-od__badge { display: inline-flex; align-items: center; padding: 4px 10px; border-radius: 999px; font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; background: rgba(255, 176, 32, .18); color: var(--od-warn); }
.tdc-od__badge.is-precise { background: rgba(0, 229, 160, .16); color: var(--od-ok); }
/* PMF-UX-15: a failed slice has its own badge. */
.tdc-od__badge.is-failed { background: rgba(255, 149, 0, .12); color: var(--od-amber); box-shadow: inset 0 0 0 1px rgba(255, 149, 0, .5); }
.tdc-od__slicing, .tdc-od__updating { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--od-cyan-ink); }
.tdc-od__spinner { width: 14px; height: 14px; border-radius: 50%; border: 2px solid rgba(0, 240, 255, .3); border-top-color: var(--od-cyan); animation: tdc-od-spin .9s linear infinite; }
.tdc-od__spinner--lg { flex: none; width: 26px; height: 26px; border-width: 3px; }
@keyframes tdc-od-spin { to { transform: rotate(360deg); } }
/* PD-04: "Calculating your exact price…" in place of the number. */
.tdc-od__calc { display: flex; align-items: center; gap: 14px; padding: 10px 0 6px; }
.tdc-od__calc-text { display: flex; flex-direction: column; gap: 2px; }
.tdc-od__calc-text strong { font-size: 20px; line-height: 1.25; color: var(--od-ink); }
.tdc-od__calc-text small { font-size: 13px; line-height: 1.4; color: var(--od-cyan-ink); }
.tdc-od__price.is-calculating .tdc-od__badge,
.tdc-od__price.is-calculating .tdc-od__total,
.tdc-od__price.is-calculating .tdc-od__lines,
.tdc-od__price.is-calculating .tdc-od__breakdown,
.tdc-od__price.is-calculating .tdc-od__hint { display: none; }
.tdc-od__total { font-size: clamp(32px, 4vw, 44px); font-weight: 800; letter-spacing: -.02em; line-height: 1.1; font-variant-numeric: tabular-nums; transition: opacity .15s ease; }
.tdc-od__total small { font-size: 14px; font-weight: 600; color: var(--od-muted); margin-left: 4px; }
/* PMF-UX-06: the last total stays, dimmed, while a re-quote is out or unconfirmed. */
.tdc-od__price.is-updating .tdc-od__total, .tdc-od__price.is-stale .tdc-od__total,
.tdc-od__price.is-updating .tdc-od__lines, .tdc-od__price.is-stale .tdc-od__lines,
.tdc-od__price.is-updating .tdc-od__breakdown dl, .tdc-od__price.is-stale .tdc-od__breakdown dl { opacity: .45; }
.tdc-od__lines, .tdc-od__breakdown dl { margin: var(--space-sm, 8px) 0 0; transition: opacity .15s ease; }
.tdc-od__lines div, .tdc-od__breakdown dl div { display: flex; justify-content: space-between; gap: 12px; padding: 5px 0; border-top: 1px solid rgba(255, 255, 255, .08); font-size: 14px; }
.tdc-od__lines dt, .tdc-od__breakdown dt { color: #d4d5ea; }
.tdc-od__lines dd, .tdc-od__breakdown dd { margin: 0; font-variant-numeric: tabular-nums; font-weight: 600; }
.tdc-od__breakdown { margin-top: var(--space-sm, 8px); font-size: 14px; }
.tdc-od__breakdown summary { cursor: pointer; color: var(--od-cyan-ink); }
.tdc-od__hint { margin: var(--space-sm, 8px) 0 0; font-size: 13px; line-height: 1.45; color: var(--od-muted); }
.tdc-od__hint:empty { display: none; }
/* PMF-UX-15: was out-specified to rgb(94,94,107) on #0a0a14 (3.08:1). */
.tdc-od__config .tdc-od__price .tdc-od__hint { color: var(--od-cyan-ink); }
.tdc-od__taxes { margin: 6px 0 0; font-size: 12.5px; color: var(--od-muted); }
.tdc-od__ship { margin: var(--space-sm, 8px) 0 0; padding-top: 6px; border-top: 1px solid rgba(255, 255, 255, .08); font-size: 13.5px; font-weight: 600; line-height: 1.4; color: var(--od-ink); }
.tdc-od__checkout { width: 100%; justify-content: center; }
.tdc-od__another { width: 100%; min-height: 48px; justify-content: center; padding: 10px 18px; background: transparent; color: var(--od-cyan-ink); border: 1.5px solid rgba(0, 240, 255, .55); border-radius: 10px; font-size: 15px; font-weight: 600; line-height: 1.3; white-space: normal; text-align: center; cursor: pointer; }
.tdc-od__another:hover, .tdc-od__another:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
.tdc-od__another:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__another:disabled, .tdc-od__checkout:disabled { opacity: .55; cursor: progress; }
.tdc-od__cart { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 4px 8px; margin: 0 0 var(--space-md, 16px); padding: 10px 16px; border-radius: 999px; background: #0b1f26; border: 1px solid rgba(0, 240, 255, .4); color: var(--od-cyan-ink); font-size: 14.5px; font-weight: 600; line-height: 1.35; text-align: center; }
.tdc-od__cart[hidden] { display: none; }
.tdc-od__cart-link { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
.tdc-od__cart-link:hover, .tdc-od__cart-link:focus-visible { color: var(--od-cyan); }

/* ── hero aside: the AI-assistant lines and the model link, on an opaque card ── */
.tdc-od-hero__aside { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 24px; margin-top: 16px; padding: 14px 18px; border: 1px solid var(--od-line); border-radius: 16px; background: #0d0d18; }
.tdc-od-agent { flex: 1 1 420px; margin: 0; font-size: 14px; line-height: 1.5; color: var(--od-muted); }
.tdc-od-agent__q { display: block; color: var(--od-ink); font-weight: 700; }
.tdc-od-agent__a { display: block; }
.tdc-od-hero .tdc-od-hero__model-link { margin: 0; font-size: 14px; line-height: 1.5; }
.tdc-od-hero .tdc-od-hero__model-link a { display: inline-flex; align-items: center; min-height: 44px; color: var(--color-neon-cyan, #00f0ff); text-decoration: underline; text-underline-offset: 3px; }
.tdc-od-hero .tdc-od-hero__model-link a:focus-visible { outline: 3px solid var(--color-focus, #00f0ff); outline-offset: 4px; border-radius: 2px; }

/* ── page sections below the hero ── */
/* PMF-UX-09 (1.0.23): "What we print", illustrations captioned as such. */
.tdc-od-gallery__list { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-md, 16px); margin: var(--space-lg, 24px) 0 0; padding: 0; list-style: none; }
.tdc-od-gallery__fig { margin: 0; overflow: hidden; border-radius: 16px; background: var(--od-surface, #12121c); box-shadow: 0 0 0 1px var(--od-line, rgba(255, 255, 255, .12)); }
.tdc-od-gallery__img { display: block; width: 100%; height: auto; aspect-ratio: 800 / 533; object-fit: cover; background: #0d0d18; }
.tdc-od-gallery__cap { display: flex; flex-direction: column; gap: 4px; padding: 10px 14px 14px; font-size: 14px; line-height: 1.4; color: var(--od-ink, #f0f0ff); }
.tdc-od-gallery__tag { align-self: flex-start; padding: 2px 8px; border-radius: 999px; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--od-cyan-ink, #bff8ff); background: rgba(0, 240, 255, .1); box-shadow: inset 0 0 0 1px rgba(0, 240, 255, .35); }
.tdc-od-gallery__label { font-weight: 600; }
@media (max-width: 1023px) { .tdc-od-gallery__list { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 599px) {
	.tdc-od-gallery__list { display: flex; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 6px; -webkit-overflow-scrolling: touch; }
	.tdc-od-gallery__item { flex: 0 0 78%; scroll-snap-align: start; }
}
.tdc-od-materials { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--space-lg, 24px); }
.tdc-od-material { padding: var(--space-lg, 24px); }
.tdc-od-material__name { margin: 0 0 6px; font-size: 22px; }
.tdc-od-material__desc { margin: 0 0 var(--space-md, 16px); opacity: .85; }
.tdc-od-material__colours { display: flex; flex-wrap: wrap; gap: 8px 14px; margin: 0; padding: 0; list-style: none; font-size: 14px; }
.tdc-od-material__colours li { display: inline-flex; align-items: center; gap: 6px; }
.tdc-od-dot { width: 16px; height: 16px; border-radius: 50%; background: var(--dot); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .3); }
.tdc-od-pricerows { display: grid; gap: var(--space-md, 16px); margin: 0; padding: 0; list-style: none; }
.tdc-od-pricerow { display: grid; grid-template-columns: 44px 1fr; gap: 14px; align-items: start; }
.tdc-od-pricerow__icon { display: inline-flex; width: 44px; height: 44px; align-items: center; justify-content: center; border-radius: 12px; background: rgba(0, 240, 255, .08); color: var(--color-neon-cyan, #00f0ff); box-shadow: 0 0 0 1px rgba(0, 240, 255, .22); }
.tdc-od-pricerow p { margin: 2px 0 0; color: inherit; opacity: .82; }
.tdc-od-trust__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--space-lg, 24px); }
.tdc-od-trust__item h3 { margin: var(--space-sm, 8px) 0 6px; font-size: 18px; }
.tdc-od-trust__item p { margin: 0; opacity: .82; }
.tdc-od-trust__icon { display: inline-flex; width: 48px; height: 48px; align-items: center; justify-content: center; border-radius: 12px; color: #00f0ff; background: rgba(0, 240, 255, .08); box-shadow: 0 0 0 1px rgba(0, 240, 255, .25); }
.tdc-od-faq { display: grid; gap: 10px; }
.tdc-od-faq__item { padding: 14px 18px; border: 1px solid var(--od-line); border-radius: 12px; background: var(--od-surface); color: var(--od-ink); }
.tdc-od-faq__item summary { cursor: pointer; font-weight: 700; list-style: none; display: flex; justify-content: space-between; gap: 12px; color: var(--od-ink); }
.tdc-od-faq__item summary::-webkit-details-marker { display: none; }
.tdc-od-faq__item summary::after { content: '+'; font-weight: 400; color: var(--color-neon-cyan, #00f0ff); }
.tdc-od-faq__item[open] summary::after { content: '−'; }
.tdc-od-faq__item summary:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 4px; border-radius: 4px; }
.tdc-od-faq__item p { margin: 10px 0 0; color: var(--od-muted); line-height: 1.55; }
.tdc-od-faq__item a { color: var(--color-neon-cyan, #00f0ff); }
.tdc-od-samples__table { width: 100%; border-collapse: collapse; margin: var(--space-lg, 24px) 0 var(--space-sm, 8px); font-size: 15px; }
.tdc-od-samples__table th, .tdc-od-samples__table td { padding: 12px 14px; text-align: left; vertical-align: baseline; border-bottom: 1px solid rgba(128, 128, 148, .35); }
.tdc-od-samples__table thead th { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; opacity: .78; }
.tdc-od-samples__table tbody th { font-weight: 600; }
.tdc-od-samples__table .tdc-od-samples__size { white-space: nowrap; opacity: .82; font-variant-numeric: tabular-nums; }
.tdc-od-samples__table .tdc-od-samples__price { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.tdc-od-samples__table tbody .tdc-od-samples__price { font-weight: 700; font-size: 17px; }
.tdc-od-samples__note { margin: 0; font-size: 13px; opacity: .8; }
.tdc-od-crosslinks { margin: var(--space-lg, 24px) 0 0; font-size: 15px; line-height: 1.5; }
.tdc-od-crosslinks a { text-decoration: underline; text-underline-offset: 2px; }
@media (max-width: 479px) {
	.tdc-od-samples__table .tdc-od-samples__size { display: none; }
	.tdc-od-samples__table th, .tdc-od-samples__table td { padding: 10px 8px; }
}
@media (max-width: 767px) {
	.tdc-od-samples__table .tdc-od-samples__price { white-space: normal; }
}
.tdc-od-cta { text-align: center; }
.tdc-od-cta__other-title { margin: var(--space-2xl, 32px) 0 var(--space-md, 16px); font-size: 18px; }
.tdc-od-cta__other { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--space-md, 16px); text-align: left; }
.tdc-od-cta__card { display: flex; flex-direction: column; gap: 4px; padding: var(--space-md, 16px) var(--space-lg, 24px); text-decoration: none; color: inherit; }
.tdc-od-cta__card span { font-size: 14px; color: inherit; opacity: .8; }
.tdc-od-cta .tdc-od-model-platforms { margin: 0 0 var(--space-lg, 24px); text-align: left; }
.tdc-od-cta .tdc-od-model-platforms h4 { margin: 0 0 var(--space-sm, 8px); font-size: 18px; line-height: 1.3; }
.tdc-od-cta .tdc-od-model-platforms h4:focus { outline: 3px solid var(--color-focus, #00f0ff); outline-offset: 4px; }
.tdc-od-cta .tdc-od-model-platforms__intro { margin: 0 0 12px; font-size: 15px; line-height: 1.5; }
.tdc-od-cta .tdc-od-model-platforms__steps { display: flex; flex-wrap: wrap; gap: 8px 28px; margin: 0 0 12px; padding-left: 20px; font-size: 14px; line-height: 1.5; }
.tdc-od-cta .tdc-od-model-platforms__steps li { padding-right: 4px; }
.tdc-od-cta .tdc-od-model-platforms__links { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px 16px; margin: 0 0 12px; padding: 0; list-style: none; }
.tdc-od-cta .tdc-od-model-platforms__links a { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0 4px; min-height: 44px; padding: 6px 0; color: var(--color-neon-cyan, #00f0ff); text-decoration: underline; text-underline-offset: 3px; line-height: 1.4; }
.tdc-od-cta .tdc-od-model-platforms__links a:hover { color: var(--color-text-on-dark, #f0f0ff); }
.tdc-od-cta .tdc-od-model-platforms__links a:focus-visible { outline: 3px solid var(--color-focus, #00f0ff); outline-offset: 4px; border-radius: 2px; }
.tdc-od-cta .tdc-od-model-platforms__new-tab { font-size: 12px; }
.tdc-od-cta .tdc-od-model-platforms__note { margin: 0; font-size: 13px; line-height: 1.5; color: var(--color-text-on-dark-muted, #b4b5cf); }

/* My Account / cart surfaces that share this sheet. */
.tdc-od-account__lede { margin-bottom: var(--space-md, 16px); }
.tdc-od-account__actions { white-space: nowrap; }
.tdc-od-account__delete { margin-left: 6px; }
.tdc-od-cart-thumb { display: inline-flex; width: 64px; height: 64px; align-items: center; justify-content: center; border-radius: 10px; background: #0a0a14; color: #00f0ff; }

/* ── PMF-UX-19: the whole-page drop overlay ── */
.tdc-od-dropall[hidden] { display: none !important; }
.tdc-od-dropall { position: fixed; inset: 0; z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 24px; background: rgba(6, 6, 14, .8); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); pointer-events: none; }
.tdc-od-dropall__card { display: flex; flex-direction: column; align-items: center; gap: 12px; max-width: 760px; padding: 48px 56px; border: 3px dashed var(--od-cyan); border-radius: 28px; background: #10101d; color: var(--od-ink); text-align: center; box-shadow: 0 0 80px rgba(0, 240, 255, .22); }
.tdc-od-dropall__card svg { color: var(--od-cyan); }
.tdc-od-dropall__card strong { font-size: clamp(22px, 3vw, 30px); line-height: 1.25; }
.tdc-od-dropall__card span { font-size: 14px; color: var(--od-muted); }

/* ── PMF-UX-03: the phone bar ── */
.tdc-od-bar[hidden] { display: none !important; }
.tdc-od-bar { display: none; }

@media (prefers-reduced-motion: reduce) {
	.tdc-od__drop, .tdc-od__material, .tdc-od__swatch, .tdc-od__total, .tdc-od__lines, .tdc-od__breakdown dl, .tdc-od__progress-bar span { transition: none; }
	.tdc-od__drop.is-over .tdc-od__drop-icon { animation: none; }
}

@media (max-width: 599px) {
	.tdc-od__studio { padding: var(--space-md, 16px); border-radius: 16px; }
	.tdc-od__total { font-size: 32px; }

	.tdc-od-hero__grid { row-gap: 0; }
	.tdc-od-hero__copy { display: contents; }
	.tdc-od-hero__copy > .figurine-kicker { order: 0; }
	.tdc-od-hero__copy > .landing-hero__title { order: 1; }
	.tdc-od-hero__app { order: 2; margin-top: var(--space-md, 16px); }
	.tdc-od-hero__copy > .landing-hero__subtitle { order: 3; margin-top: var(--space-lg, 24px); }
	.tdc-od-hero__copy > .tdc-od-hero__from { order: 1; margin: 0; }
	.tdc-od-hero__copy > .tdc-od-chips { order: 4; margin: var(--space-sm, 8px) 0 0; }

	.tdc-od__drop { min-height: 0; padding: var(--space-md, 16px); }
	.tdc-od__drop-inner { gap: 10px; }
	.tdc-od__drop-icon, .tdc-od__drop-or { display: none; }
	.tdc-od__browse { order: 1; width: 100%; pointer-events: auto; }
	.tdc-od__drop-title { order: 2; font-size: var(--text-sm, 14px); font-weight: 600; color: var(--od-muted); }
	.tdc-od__drop-formats { order: 3; margin-top: 0; }
	.tdc-od__progress { padding: 14px 16px; gap: 8px; }
	.tdc-od__secure { border-radius: 14px; text-align: left; }

	/* PD-01: "File on your computer? Send yourself this page." */
	.tdc-od__handoff { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; padding: 12px 14px; border: 1px solid var(--od-line); border-radius: 14px; background: #0d0d18; color: var(--od-ink); }
	.tdc-od__handoff-q { margin: 0; font-size: 14px; font-weight: 700; }
	.tdc-od__handoff-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
	.tdc-od__handoff-send { min-height: 44px; padding: 8px 16px; border: 1.5px solid rgba(0, 240, 255, .6); border-radius: 999px; background: rgba(0, 240, 255, .08); color: var(--od-cyan-ink); font: inherit; font-size: 14.5px; font-weight: 600; cursor: pointer; }
	.tdc-od__handoff-send:focus-visible { outline: 2px solid var(--od-cyan); outline-offset: 2px; }
	.tdc-od__handoff-mail { display: inline-flex; align-items: center; min-height: 44px; color: var(--color-neon-cyan, #00f0ff); font-size: 14px; text-decoration: underline; text-underline-offset: 3px; }
	.tdc-od__handoff-status { margin: 0; font-size: 13px; color: var(--od-ok); }
	.tdc-od__handoff-status:empty { display: none; }
	/* 1.0.29 (pmf-uploads-08): above the drop zone now, with "Email me a link to finish on my computer". */
	.tdc-od__handoff { margin: 0 0 12px; }
	.tdc-od__handoff-form { display: flex; flex-direction: column; gap: 8px; margin: 0; }
	.tdc-od__handoff-form[hidden] { display: none; }
	.tdc-od__handoff-label { font-size: 13px; color: var(--od-muted); }
	.tdc-od__handoff-email { min-height: 44px; padding: 8px 12px; border: 1px solid var(--od-line); border-radius: 10px; background: #08080f; color: var(--od-ink); font: inherit; font-size: 16px; }
	.tdc-od__handoff-email:focus-visible { outline: 2px solid var(--od-cyan); outline-offset: 2px; }
	.tdc-od__handoff-email-btn { min-height: 44px; padding: 10px 16px; border: 0; border-radius: 999px; background: var(--color-neon-cyan, #00f0ff); color: #0a0a14; font: inherit; font-size: 15px; font-weight: 700; cursor: pointer; }
	.tdc-od__handoff-email-btn:disabled { opacity: .6; cursor: progress; }
	.tdc-od__handoff-email-btn:focus-visible { outline: 2px solid #ffffff; outline-offset: 2px; }
	.tdc-od__handoff-note { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--od-muted); }
	.tdc-od__handoff-status.is-error { color: var(--od-warn); }

	.tdc-od-hero__aside { padding: 12px 14px; }
	.tdc-od-agent { flex-basis: 100%; }

	.tdc-od-sticky:not([hidden]) {
		position: fixed; left: 12px; right: 12px;
		bottom: calc(12px + var(--tdc-consent-h, 0px) + env(safe-area-inset-bottom, 0px));
		z-index: 95; display: flex; align-items: center; justify-content: center;
		min-height: 52px; margin: 0; padding: .875rem 1.5rem;
		border: 2px solid var(--color-cta, #ff5c5c); border-radius: var(--radius-full, 9999px);
		background: var(--color-cta, #ff5c5c); color: var(--color-on-cta, #0a0a14);
		font-family: inherit; font-size: var(--text-base, 16px); font-weight: var(--weight-semibold, 600);
		line-height: 1; letter-spacing: var(--tracking-wide, .05em); white-space: nowrap; text-decoration: none;
		box-shadow: 0 8px 30px rgba(0, 0, 0, .4), var(--glow-cta-md, 0 4px 20px rgba(255, 92, 92, .4));
		cursor: pointer;
	}
	.tdc-od-sticky:not([hidden]):focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 3px; }
	:root:has(.floating-cart[aria-hidden="false"]) .tdc-od-sticky:not([hidden]) { right: 68px; }
	:root:has(.tdc-od.has-job) .tdc-od-sticky { display: none; }

	/* The bar sits on the theme's published consent clearance, like the PDP and cart bars. */
	.tdc-od-bar:not([hidden]) {
		position: fixed; left: 0; right: 0; bottom: var(--tdc-consent-h, 0px); z-index: var(--z-sticky, 100);
		display: flex; align-items: center; gap: 12px;
		padding: 10px 16px calc(10px + env(safe-area-inset-bottom, 0px));
		background: rgba(12, 12, 22, .97); border-top: 1px solid rgba(0, 240, 255, .4);
		box-shadow: 0 -12px 32px rgba(0, 0, 0, .55); color: var(--od-ink);
	}
	.tdc-od-bar__price { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
	.tdc-od-bar__badge { font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--od-warn); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
	.tdc-od-bar__badge:empty { display: none; }
	.tdc-od-bar.is-precise .tdc-od-bar__badge { color: var(--od-ok); }
	.tdc-od-bar.is-failed .tdc-od-bar__badge { color: var(--od-amber); }
	.tdc-od-bar__total { font-size: 22px; font-weight: 800; line-height: 1.15; font-variant-numeric: tabular-nums; transition: opacity .15s ease; }
	.tdc-od-bar.is-stale .tdc-od-bar__total { opacity: .5; }
	.tdc-od-bar.is-calculating .tdc-od-bar__total { font-size: 15px; font-weight: 600; color: var(--od-cyan-ink); }
	.tdc-od-bar__go { flex: none; min-height: 48px; padding: 0 22px; border: 0; border-radius: var(--radius-full, 9999px); background: var(--od-cta); color: var(--od-on-cta); font: inherit; font-size: 16px; font-weight: 700; cursor: pointer; box-shadow: var(--glow-cta-md, 0 4px 20px rgba(255, 92, 92, .4)); }
	.tdc-od-bar__go:disabled { opacity: .55; cursor: progress; box-shadow: none; }
	.tdc-od-bar__go:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 3px; }
	/* Room for the bar at the end of the page, and the theme's back-to-top
	   steps aside while it is open (PMF-UX-22), the theme's own inert treatment. */
	/* 1.0.24: the bar is up to ~90 px tall with its "delivered" line (owner 31); 76 px left the page end under it. */
	body.page-print-my-file:has(#tdc-od-bar:not([hidden])) { padding-bottom: calc(100px + var(--tdc-consent-h, 0px) + env(safe-area-inset-bottom, 0px)); }
	/* Keyboard focus and in-page scrolls stop ABOVE the bar, never under it
	   (WCAG 2.2 2.4.11 Focus Not Obscured; measured: an option scrolled into
	   view on a 390x664 iPhone landed under the bar and a tap hit the bar). */
	html:has(#tdc-od-bar:not([hidden])) { scroll-padding-bottom: calc(100px + var(--tdc-consent-h, 0px) + env(safe-area-inset-bottom, 0px)); }
	body.page-print-my-file:has(#tdc-od-bar:not([hidden])) .back-to-top { opacity: 0; visibility: hidden; pointer-events: none; }

	.tdc-od-cta .tdc-od-model-platforms__links { grid-template-columns: repeat(2, minmax(0, 1fr)); }

	/* PMF-C (1.0.23): on a phone the move button names the computer. */
	.tdc-od__move-phone { display: inline; }
	.tdc-od__move-wide { display: none; }
	.tdc-od__keep-actions .tdc-od__action { flex: 1 1 100%; justify-content: center; }
}

/* =====================================================================
 * 1.0.24 (AAA wave 3, PMF-B): project mode, delivered total, large format.
 * Night tokens only; every text pair below is WCAG AA on its own surface
 * (checked by the 1.0.24 e2e contrast scan and axe-core 4.10.2).
 * ===================================================================== */
.tdc-od__sr { position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important; padding: 0 !important; border: 0 !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important; white-space: nowrap !important; }

/* Project mode swaps the one-file controls for the project ones. */
.tdc-od.is-project .tdc-od__single,
.tdc-od.is-project .tdc-od__keep,
.tdc-od.is-project .tdc-od__price .tdc-od__ship,
.tdc-od.is-project .tdc-od__price .tdc-od__taxes,
.tdc-od.is-project .tdc-od__price .tdc-od__delivery,
.tdc-od.is-project .tdc-od__price .tdc-od__proj-free,
.tdc-od.is-project .tdc-od__price .tdc-od__arrival { display: none !important; }
.tdc-od.has-job > .tdc-od__project { order: 2; }
.tdc-od.has-job > .tdc-od__studio { order: 3; }
.tdc-od.has-job > .tdc-od__dropwrap { order: 4; }

.tdc-od__project {
	margin-top: var(--space-lg, 24px); padding: var(--space-lg, 24px);
	display: flex; flex-direction: column; gap: var(--space-md, 16px);
	background: var(--od-surface); color: var(--od-ink); color-scheme: dark;
	border: 1px solid var(--od-line); border-radius: var(--radius-xl, 24px);
	box-shadow: 0 30px 80px rgba(0, 0, 0, .55), inset 0 1px 0 rgba(255, 255, 255, .04);
}
.tdc-od__project[hidden] { display: none !important; }
.tdc-od__proj-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; }
.tdc-od__proj-title { margin: 0; font-size: 20px; line-height: 1.3; color: var(--od-ink); }
.tdc-od__proj-count { font-weight: 600; color: var(--od-muted); font-variant-numeric: tabular-nums; }
.tdc-od__proj-add { min-height: 44px; padding: 8px 18px; border: 1.5px solid rgba(0, 240, 255, .55); border-radius: 10px; background: transparent; color: var(--od-cyan-ink); font: inherit; font-size: 15px; font-weight: 600; cursor: pointer; }
.tdc-od__proj-add:hover, .tdc-od__proj-add:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
.tdc-od__proj-add:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__proj-note { margin: 0; }
.tdc-od__proj-note[hidden] { display: none; }

/* The list scrolls inside the card past a screenful; it is focusable and named (C13). */
.tdc-od__proj-list { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 2px; list-style: none; max-height: min(62vh, 560px); overflow-y: auto; overscroll-behavior: contain; border-radius: 14px; }
.tdc-od__proj-list:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__item {
	display: grid; grid-template-columns: 56px minmax(0, 1fr) auto auto auto; align-items: center; gap: 6px 14px;
	padding: 10px 12px; border: 1px solid var(--od-line); border-radius: 14px; background: var(--od-raised);
}
.tdc-od__item.is-active { border-color: rgba(0, 240, 255, .7); box-shadow: inset 0 0 0 1px rgba(0, 240, 255, .35); background: #13202a; }
.tdc-od__item.is-carted { background: #10201d; border-color: rgba(0, 229, 160, .35); }
.tdc-od__item.is-error { border-color: rgba(255, 92, 92, .5); }
.tdc-od__thumb { position: relative; display: inline-flex; width: 56px; height: 42px; align-items: center; justify-content: center; border-radius: 8px; overflow: hidden; background: #0d0d18; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .08); }
.tdc-od__thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
.tdc-od__thumb img[hidden] { display: none; }
.tdc-od__thumb-ext { font-size: 11px; font-weight: 700; letter-spacing: .06em; color: var(--od-cyan-ink); }
.tdc-od__item-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.tdc-od__item-foot { display: contents; }
.tdc-od__item-name { font-weight: 700; font-size: 15px; line-height: 1.3; color: var(--od-ink); overflow-wrap: anywhere; }
.tdc-od__item-meta { font-size: 12.5px; line-height: 1.35; color: var(--od-muted); font-variant-numeric: tabular-nums; }
.tdc-od__item-status { font-size: 13px; font-weight: 600; line-height: 1.35; color: var(--od-muted); }
.tdc-od__item.is-ok .tdc-od__item-status { color: var(--od-ok); }
.tdc-od__item.is-warn .tdc-od__item-status { color: var(--od-warn); }
.tdc-od__item.is-amber .tdc-od__item-status { color: var(--od-amber); }
.tdc-od__item.is-error .tdc-od__item-status { color: var(--od-danger); }
.tdc-od__item.is-busy .tdc-od__item-status { color: var(--od-cyan-ink); }
.tdc-od__item-bar { display: block; height: 6px; margin-top: 4px; border-radius: 999px; background: rgba(255, 255, 255, .12); overflow: hidden; }
.tdc-od__item-bar[hidden] { display: none; }
.tdc-od__item-bar span { display: block; height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, var(--od-pink), var(--od-cyan)); transition: width .15s linear; }
.tdc-od__item-qty { display: inline-grid; grid-template-columns: 36px 52px 36px; }
.tdc-od__item-qty[hidden] { display: none; }
.tdc-od__item-qty button { min-height: 40px; border: 1.5px solid var(--od-line-strong); background: var(--od-surface); color: var(--od-ink); font-size: 18px; cursor: pointer; }
.tdc-od__item-qty button:first-child { border-radius: 10px 0 0 10px; border-right: 0; }
.tdc-od__item-qty button:last-child { border-radius: 0 10px 10px 0; border-left: 0; }
.tdc-od__item-qty button:disabled { opacity: .45; cursor: default; }
.tdc-od__item-qty input { width: 100%; min-height: 40px; padding: 4px; border: 1.5px solid var(--od-line-strong); border-radius: 0; background: var(--od-field); color: var(--od-ink); font: inherit; font-size: 15px; text-align: center; font-variant-numeric: tabular-nums; -moz-appearance: textfield; }
.tdc-od__item-qty input::-webkit-inner-spin-button, .tdc-od__item-qty input::-webkit-outer-spin-button { -webkit-appearance: none; }
.tdc-od__item-qty button:focus-visible, .tdc-od__item-qty input:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 1px; position: relative; z-index: 1; }
.tdc-od__item-price { min-width: 72px; font-size: 17px; font-weight: 800; text-align: right; font-variant-numeric: tabular-nums; color: var(--od-ink); }
.tdc-od__item-actions { display: inline-flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
.tdc-od__item-btn { min-height: 40px; padding: 6px 12px; border: 1.5px solid rgba(0, 240, 255, .55); border-radius: 10px; background: transparent; color: var(--od-cyan-ink); font: inherit; font-size: 14px; font-weight: 600; line-height: 1.2; cursor: pointer; }
.tdc-od__item-btn[hidden] { display: none; }
.tdc-od__item-btn:hover, .tdc-od__item-btn:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
.tdc-od__item-btn:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__item-btn:disabled { opacity: .55; cursor: progress; }
.tdc-od__item-btn--quiet { border-color: var(--od-line-strong); color: var(--od-muted); }
.tdc-od__item-btn--quiet:hover, .tdc-od__item-btn--quiet:focus-visible { color: var(--od-danger); border-color: rgba(255, 92, 92, .6); background: rgba(255, 92, 92, .08); }
.tdc-od__item-btn--danger { background: #b02a2a; border-color: #b02a2a; color: #fff; }
.tdc-od__item-btn--danger:hover, .tdc-od__item-btn--danger:focus-visible { background: #8f1d1d; border-color: #8f1d1d; color: #fff; }
.tdc-od__item-confirm { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 8px 10px; border: 1.5px solid rgba(255, 92, 92, .55); border-radius: 10px; background: #24111a; }
.tdc-od__item-confirm[hidden] { display: none; }
.tdc-od__item-confirm-q { font-size: 14px; font-weight: 600; color: var(--od-ink); }
.tdc-od__proj-removed { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; padding: 10px 12px; border: 1px dashed var(--od-line-strong); border-radius: 12px; font-size: 14px; color: var(--od-muted); }
.tdc-od__proj-removed[hidden] { display: none; }
.tdc-od__proj-removed-q { font-weight: 600; color: var(--od-ink); }
.tdc-od__proj-removed-item { display: inline-flex; align-items: center; gap: 8px; color: var(--od-ink); overflow-wrap: anywhere; }

/* The project total and the price card delivered total share one look. */
.tdc-od__proj-sum { padding: var(--space-md, 16px) var(--space-lg, 24px); border-radius: 16px; background: #0b0b15; box-shadow: inset 0 0 0 1px rgba(0, 240, 255, .28); }
.tdc-od__proj-lines, .tdc-od__delivery { margin: 0; }
.tdc-od__delivery { margin-top: var(--space-sm, 8px); }
.tdc-od__delivery[hidden] { display: none; }
.tdc-od__proj-lines div, .tdc-od__delivery div { display: flex; justify-content: space-between; gap: 12px; padding: 6px 0; border-top: 1px solid rgba(255, 255, 255, .08); font-size: 14.5px; }
.tdc-od__proj-lines div:first-child { border-top: 0; }
.tdc-od__proj-lines dt, .tdc-od__delivery dt { color: #d4d5ea; }
.tdc-od__proj-lines dd, .tdc-od__delivery dd { margin: 0; font-weight: 600; font-variant-numeric: tabular-nums; text-align: right; }
.tdc-od__proj-lines .is-total, .tdc-od__delivery .is-total { padding-top: 8px; border-top-color: rgba(0, 240, 255, .3); }
.tdc-od__proj-lines .is-total dt, .tdc-od__delivery .is-total dt { font-weight: 700; color: var(--od-ink); }
.tdc-od__proj-lines .is-total dd, .tdc-od__delivery .is-total dd { font-size: 20px; font-weight: 800; color: var(--od-ink); }
.tdc-od__proj-free { margin: 6px 0 0; font-size: 13.5px; line-height: 1.45; color: var(--od-cyan-ink); }
.tdc-od__proj-free[hidden] { display: none; }
.tdc-od__arrival { margin: 6px 0 0; font-size: 14px; font-weight: 600; line-height: 1.45; color: var(--od-ok); }
.tdc-od__arrival[hidden] { display: none; }
.tdc-od__proj-sum .tdc-od__taxes { margin-top: 6px; }
.tdc-od__proj-fields { margin: 0; }
.tdc-od__proj-actions { display: flex; flex-wrap: wrap; gap: var(--space-sm, 10px); }
.tdc-od__proj-actions > * { flex: 1 1 260px; justify-content: center; text-align: center; }
.tdc-od__proj-addall[hidden], .tdc-od__proj-checkout[hidden] { display: none !important; }
.tdc-od__proj-addall:disabled { opacity: .55; cursor: not-allowed; box-shadow: none; }
.tdc-od__proj-checkout { display: inline-flex; align-items: center; min-height: 52px; border-radius: 12px; font-weight: 700; text-decoration: none; }
.tdc-od__proj-checkout.btn--outline { background: transparent; color: var(--od-cyan-ink); border: 1.5px solid rgba(0, 240, 255, .55); }
.tdc-od__proj-checkout.btn--outline:hover, .tdc-od__proj-checkout.btn--outline:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
.tdc-od__proj-checkout:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 3px; }
.tdc-od__proj-status { margin: 0; font-size: 14px; line-height: 1.45; color: var(--od-cyan-ink); }
.tdc-od__proj-status:empty { display: none; }

/* Studio controls for a project: apply to all, next file. */
.tdc-od__apply { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 12px 14px; border: 1px solid var(--od-line); border-radius: 12px; background: var(--od-raised); }
.tdc-od__apply[hidden] { display: none !important; }
.tdc-od__apply-btn, .tdc-od__next { min-height: 44px; padding: 8px 16px; border: 1.5px solid rgba(0, 240, 255, .55); border-radius: 10px; background: transparent; color: var(--od-cyan-ink); font: inherit; font-size: 15px; font-weight: 600; line-height: 1.3; white-space: normal; text-align: center; cursor: pointer; }
.tdc-od__apply-btn:hover, .tdc-od__apply-btn:focus-visible, .tdc-od__next:hover, .tdc-od__next:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
.tdc-od__apply-btn:focus-visible, .tdc-od__next:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__apply-btn:disabled, .tdc-od__next:disabled { opacity: .5; cursor: not-allowed; }
.tdc-od__apply .tdc-od__fine { flex: 1 1 100%; order: 3; }

/* One file, a part already in the cart: "add and upload another" leads (program PMF-B 1). */
.tdc-od__another.is-primary { background: var(--od-cta); color: var(--od-on-cta); border-color: var(--od-cta); font-weight: 700; min-height: 52px; }
.tdc-od__another.is-primary:hover, .tdc-od__another.is-primary:focus-visible { background: var(--od-cta); color: var(--od-on-cta); filter: brightness(1.08); }
.tdc-od__checkout.is-secondary { background: transparent; color: var(--od-cyan-ink); border: 1.5px solid rgba(0, 240, 255, .55); box-shadow: none; }
.tdc-od__checkout.is-secondary:hover, .tdc-od__checkout.is-secondary:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }

/* The email address error, beside its field (PMFUX F11). */
.tdc-od__field-err { margin: -4px 0 0; font-size: 13.5px; line-height: 1.4; color: var(--od-danger); }
.tdc-od__field-err[hidden] { display: none; }
.tdc-od__email input[aria-invalid="true"] { border-color: rgba(255, 92, 92, .8); }

.tdc-od__pill--large { background: rgba(0, 240, 255, .12); color: var(--od-cyan-ink); }
.tdc-od__price.is-updating .tdc-od__delivery, .tdc-od__price.is-stale .tdc-od__delivery { opacity: .45; }
/* 1.0.30 (1.0.28 F1 / 1.0.29 O1): figures from an estimate read as such; a project row waiting for its exact price says so. */
.tdc-od__delivery.is-provisional .is-total dd { font-weight: 700; }
.tdc-od__proj-lines .is-calculating dd { font-weight: 600; color: #d4d5ea; font-variant-numeric: normal; }
/* 1.0.30: an amount never breaks inside itself ("−$4.54" split after its minus, « −4,00 $ » before its $, at 1440 and 390): the label wraps instead. */
.tdc-od__proj-lines dd, .tdc-od__delivery dd { white-space: nowrap; }

/* C13: the gallery strip scrolls sideways on phones and is reachable by keyboard. */
.tdc-od-gallery__list:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 4px; border-radius: 12px; }

@media (max-width: 599px) {
	.tdc-od__project { padding: var(--space-md, 16px); border-radius: 16px; }
	.tdc-od__proj-list { max-height: 56vh; }
	/* 1.0.24: the actions used to share the price's column, which they widened to ~200 px,
	   leaving the name ~60 px (one word per line, measured in WebKit at 390). The footer
	   now takes its own line: quantity left, price and actions right, wrapping if needed. */
	.tdc-od__item { grid-template-columns: 48px minmax(0, 1fr); grid-template-areas: "thumb main" "foot foot"; align-items: start; padding: 10px; }
	.tdc-od__thumb { grid-area: thumb; width: 48px; height: 36px; }
	.tdc-od__item-main { grid-area: main; }
	.tdc-od__item-foot { grid-area: foot; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
	.tdc-od__item-qty { margin-right: auto; }
	.tdc-od__item-price { min-width: 0; font-size: 16px; }
	.tdc-od__item-confirm { grid-column: 1 / -1; }
	.tdc-od__proj-actions > * { flex-basis: 100%; }
	/* PMFUX F12: the phone bar is opaque, so nothing under it ghosts through. */
	.tdc-od-bar:not([hidden]) { background: #0c0c16; }
	.tdc-od-bar.is-project .tdc-od-bar__badge { color: var(--od-cyan-ink); }
}
@media (prefers-reduced-motion: reduce) {
	.tdc-od__item-bar span { transition: none; }
}

/* ---------------------------------------------------------------------
 * 1.0.24 owner decision 33: "Your file's settings" (a 3MF is a prepared
 * project). Amber frame: it asks a question; the two answers are large
 * targets (44 px+), the pick is cyan, nothing is pre-selected.
 * --------------------------------------------------------------------- */
.tdc-od__intent { display: flex; flex-direction: column; gap: 12px; margin: 0 0 var(--space-md, 16px); padding: 16px; border: 1.5px solid rgba(255, 201, 138, .55); border-radius: 14px; background: #1f1810; color: var(--od-ink); }
.tdc-od__intent[hidden] { display: none !important; }
.tdc-od__intent-title { margin: 0; font-size: 17px; line-height: 1.3; color: var(--od-ink); }
.tdc-od__intent-lede { margin: 0; font-size: 14px; line-height: 1.5; color: #ece3d3; }
.tdc-od__intent-scroll { overflow-x: auto; border-radius: 10px; background: #17120c; }
.tdc-od__intent-scroll:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__intent-table { width: 100%; border-collapse: collapse; font-size: 14px; line-height: 1.4; }
.tdc-od__intent-table th, .tdc-od__intent-table td { padding: 8px 10px; border-top: 1px solid rgba(255, 255, 255, .1); text-align: left; vertical-align: top; }
.tdc-od__intent-table thead th { border-top: 0; font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: #cfc6b6; }
.tdc-od__intent-table tbody th { font-weight: 600; color: var(--od-ink); }
.tdc-od__intent-table tbody td:nth-child(2) { color: var(--od-amber); font-weight: 600; }
.tdc-od__intent-table tbody td:nth-child(3) { color: #d4d5ea; }
.tdc-od__intent-table .tdc-od__file-colours-list { gap: 6px; }
.tdc-od__intent-table .tdc-od__file-colour-hex { color: #e6e6f5; }
.tdc-od__intent-choice { display: flex; flex-direction: column; gap: 8px; min-width: 0; margin: 0; padding: 0; border: 0; }
.tdc-od__intent-choice legend { margin-bottom: 6px; padding: 0; font-size: 15px; font-weight: 700; color: var(--od-ink); }
.tdc-od__intent-opt { display: flex; align-items: flex-start; gap: 10px; min-height: 44px; padding: 12px 14px; border: 1.5px solid var(--od-line-strong); border-radius: 12px; background: var(--od-raised); color: var(--od-ink); font-size: 15px; line-height: 1.4; cursor: pointer; }
.tdc-od__intent-opt input { flex: none; width: 20px; height: 20px; margin: 1px 0 0; accent-color: var(--od-cyan); }
.tdc-od__intent-opt:hover { border-color: rgba(0, 240, 255, .55); }
.tdc-od__intent-opt:has(input:checked) { border-color: var(--od-cyan); background: #13202a; box-shadow: inset 0 0 0 1px rgba(0, 240, 255, .35); }
.tdc-od__intent-opt:has(input:focus-visible) { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__intent-note { color: #ece3d3; }
.tdc-od__intent .tdc-od__msg { margin: 0; }
/* As-is: the file's own material, colours, infill and supports apply, so those controls rest. */
.tdc-od__config.is-as-is .tdc-od__swatch, .tdc-od__config.is-as-is .tdc-od__material { filter: saturate(.35); cursor: not-allowed; }
.tdc-od__config.is-as-is .tdc-od__opt select, .tdc-od__config.is-as-is .tdc-od__opt input { cursor: not-allowed; }
/* 1.0.24: desaturation alone still read as "pick one" in the as-is screenshot; the
   resting controls dim too (inactive controls are outside WCAG 1.4.3). Quantity and
   priority production are not in an .tdc-od__opt group and stay at full strength. */
.tdc-od__config.is-as-is .tdc-od__opt:disabled, .tdc-od__config.is-as-is .tdc-od__opt:has(:disabled),
.tdc-od__config.is-as-is .tdc-od__field--colours:has(:disabled) { opacity: .55; }

/* Every colour of a multi-colour print, in the price breakdown. */
.tdc-od__filaments { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.tdc-od__filaments .tdc-od__file-colours-label { margin: 0; }
.tdc-od__filaments .tdc-od__file-colour-hex { color: #e6e6f5; font-size: 12px; }

/* A project row whose file settings differ, and its two picks. */
.tdc-od__item-diff { font-size: 12.5px; line-height: 1.35; color: var(--od-amber); overflow-wrap: anywhere; }
.tdc-od__item-mode { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }

/* Large format (owner decision 30): where a part over the standard envelope is printed. */
.tdc-od__large-note { margin: 8px 0 0; font-size: 13px; line-height: 1.45; color: var(--od-cyan-ink); }

@media (max-width: 599px) {
	.tdc-od__intent { padding: 12px; }
	.tdc-od__intent-table { font-size: 13.5px; }
	.tdc-od__intent-table th, .tdc-od__intent-table td { padding: 7px 8px; }
	.tdc-od-bar__delivered { font-size: 12px; font-weight: 600; color: var(--od-muted); }
	.tdc-od-bar__delivered:empty { display: none; }
}

/* 1.0.24: the viewer's 280 px floor with a 4:3 ratio forced it 373 px wide, so on a
   390 px phone it ran 16 px past the studio and was clipped (measured, Chromium and
   WebKit, 1.0.23 CSS). Phones take their height from the width instead. */
@media (max-width: 599px) {
	.tdc-od__viewer { min-height: 0; }
}
/* Contract v3: as-is offered only where the farm can print it; otherwise the choice rests and the reason is said. */
.tdc-od__intent-opt.is-disabled { cursor: not-allowed; border-style: dashed; }
.tdc-od__intent-opt.is-disabled span { color: #c9c2b4; }

/* ---------------------------------------------------------------------
   1.0.26 "clear and honest" (W4 QW-5)
   --------------------------------------------------------------------- */
/* pmf-journey-01: a refusal is focused after it is brought into view; the ring shows only for keyboard focus. */
.tdc-od__msg:focus { outline: none; }
.tdc-od__msg:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
/* pmf-journey-07: a connection lost while re-pricing is said inside the price card. */
.tdc-od__price .tdc-od__price-msg { margin: 10px 0 0; }
/* pmf-journey-03: what an FDM part looks like, beside the price. */
.tdc-od__fdm { margin: 10px 0 0; font-size: 13.5px; line-height: 1.45; color: var(--od-muted); }
/* 1.0.29 (owner decision 61): what you'll receive, beside the price. */
.tdc-od__receive { margin: 10px 0 0; padding: 10px 12px; border: 1px solid var(--od-line); border-radius: 12px; }
.tdc-od__receive-title { margin: 0 0 6px; font-size: 13.5px; font-weight: 700; color: var(--od-ink); }
.tdc-od__receive-list { margin: 0; padding-left: 18px; font-size: 13px; line-height: 1.5; color: var(--od-muted); }
.tdc-od__receive-list li + li { margin-top: 4px; }
@media (max-width: 599px) {
	/* pmf-journey-11: "1 needs your choice" in amber, and a longer add label may take two lines. */
	.tdc-od-bar.is-asking .tdc-od-bar__badge { color: var(--od-amber); }
	.tdc-od-bar__go { max-width: 58%; white-space: normal; line-height: 1.2; padding-block: 6px; }
}

/* 1.0.27 (owner decisions 51/52): map credits, Mini Skyline, "Not cleared for sale". */
.tdc-od__credit { margin: 10px 0 0; }
.tdc-od__pill--credit { background: rgba(0, 240, 255, .12); color: var(--od-cyan-ink); }
.tdc-od__credit-note { margin: 6px 0 0; font-size: 13px; line-height: 1.45; color: var(--od-muted); overflow-wrap: anywhere; }
.tdc-od__cleared { display: grid; gap: 8px; }
.tdc-od__cleared[hidden], .tdc-od__toggle--cleared[hidden], .tdc-od__toggle--map[hidden] { display: none; }
.tdc-od__toggle--cleared { padding: 12px 14px; border-radius: 12px; background: var(--od-raised); border: 1px solid rgba(255, 184, 77, .55); }
.tdc-od__toggle--cleared:has(input:checked) { border-color: rgba(0, 240, 255, .45); }

/* 1.0.28 (pmf-uploads-04): "Your recent uploads": this browser's open quotes, from the server's list. */
.tdc-od__recent { margin: 0 0 var(--space-md, 16px); padding: 14px 16px 16px; border: 1px solid rgba(0, 240, 255, .35); border-radius: 14px; background: var(--od-surface); color: var(--od-ink); }
.tdc-od__recent[hidden] { display: none; }
.tdc-od__recent-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.tdc-od__recent-title { margin: 0; font-size: 18px; line-height: 1.3; color: var(--od-ink); }
.tdc-od__recent-hide { min-height: 44px; padding: 6px 4px; border: 0; background: none; color: var(--od-muted); font: inherit; font-size: 14px; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.tdc-od__recent-hide:hover, .tdc-od__recent-hide:focus-visible { color: #fff; }
.tdc-od__recent-intro { margin: 4px 0 10px; font-size: 14px; line-height: 1.45; color: var(--od-muted); }
.tdc-od__recent-list { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.tdc-od__recent-item { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name open" "meta open"; align-items: center; gap: 2px 12px; padding: 10px 12px; border-radius: 10px; background: var(--od-raised); }
.tdc-od__recent-name { grid-area: name; min-width: 0; font-weight: 600; overflow-wrap: anywhere; }
.tdc-od__recent-meta { grid-area: meta; min-width: 0; font-size: 13.5px; color: var(--od-muted); overflow-wrap: anywhere; }
.tdc-od__recent-open { grid-area: open; min-height: 44px; padding: 8px 16px; border: 1.5px solid rgba(0, 240, 255, .55); border-radius: 10px; background: transparent; color: var(--od-cyan-ink); font: inherit; font-size: 15px; font-weight: 600; cursor: pointer; }
.tdc-od__recent-open:hover, .tdc-od__recent-open:focus-visible { background: rgba(0, 240, 255, .12); color: #fff; border-color: var(--od-cyan); }
.tdc-od__recent-open:focus-visible, .tdc-od__recent-hide:focus-visible { outline: 2px solid var(--color-focus, #00f0ff); outline-offset: 2px; }
.tdc-od__recent-all { width: 100%; min-height: 44px; margin-top: 10px; justify-content: center; }
.tdc-od__recent-all[hidden] { display: none; }
/* 1.0.28 (journeys-01, journeys-04): a project of several plates; the seconds so far for a very detailed file. */
.tdc-od__plates-note { margin: 8px 0 0; font-size: 14px; line-height: 1.45; color: var(--od-muted); }
.tdc-od__calc-elapsed { white-space: nowrap; }
