.gesv-page {
	--gesv-bg: #0B0C0E;
	--gesv-panel: #16181C;
	--gesv-panel2: #1C1F25;
	--gesv-line: #2C3037;
	--gesv-goldline: #4A3E20;
	--gesv-gold: #C9A24B;
	--gesv-gold2: #DCC07F;
	--gesv-text: #FFFFFF;
	--gesv-body: #F1F2F4;
	--gesv-mut: #9BA1AA;
	--gesv-sans: "Montserrat", system-ui, -apple-system, "Segoe UI", sans-serif;
	--gesv-serif: "Playfair Display", Georgia, "Times New Roman", serif;
	--gesv-script: "Great Vibes", cursive;
	/* Full-bleed dark section: breaks out of the theme's centered content column
	   so the simulator reads as its own immersive page (brief section 2: a
	   dedicated page, not a card dropped into arbitrary page content),
	   regardless of how narrow or padded the parent container is. */
	background: var(--gesv-bg);
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
	padding: 40px 22px 70px;
}
.gesv-wrap {
	max-width: 1000px;
	margin: 0 auto;
	color: var(--gesv-text);
	font-family: var(--gesv-sans);
	font-weight: 500;
	line-height: 1.5;
}
.gesv-wrap * { box-sizing: border-box; }

.gesv-card, .gesv-card2 {
	background: var(--gesv-panel);
	border: 1px solid var(--gesv-goldline);
	border-radius: 12px;
	padding: 24px;
	margin-top: 20px;
}
.gesv-ph { display: flex; align-items: baseline; gap: 12px; border-bottom: 1px solid var(--gesv-line); padding-bottom: 14px; margin-bottom: 18px; }
.gesv-ph--tight { margin-top: 24px; }
.gesv-ph .gesv-ac { font-family: var(--gesv-serif); font-weight: 700; font-size: 20px; color: var(--gesv-gold); }
.gesv-ph .gesv-desc { font-size: 12px; color: var(--gesv-mut); }

.gesv-flds { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 560px) { .gesv-flds { grid-template-columns: 1fr; } }
.gesv-fld { display: flex; flex-direction: column; gap: 6px; margin-bottom: 4px; }
.gesv-fld label { font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: var(--gesv-text); font-weight: 500; }
.gesv-fld input {
	width: 100%; display: block; box-sizing: border-box;
	background: var(--gesv-panel2) !important; border: 1px solid var(--gesv-line); color: var(--gesv-text) !important;
	font-family: var(--gesv-sans); font-size: 14px; padding: 10px 12px; border-radius: 8px;
}
.gesv-fld input::placeholder { color: var(--gesv-text) !important; opacity: .55; }
.gesv-fld input:focus,
.gesv-fld input:active {
	outline: none; border-color: var(--gesv-gold);
	color: var(--gesv-text) !important; background: var(--gesv-panel2) !important;
}
.gesv-full { grid-column: 1 / -1; }

.gesv-input-wrap { position: relative; width: 100%; display: block; }
.gesv-input-wrap input { padding-right: 34px; }
.gesv-fld-check {
	position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
	font-size: 15px; line-height: 1; opacity: 0; transition: opacity .15s ease;
	pointer-events: none;
}
.gesv-fld-check.is-valid { opacity: 1; }
.gesv-fld-check.is-valid::before { content: "✅"; }
.gesv-fld-check.is-invalid { opacity: 1; color: #e0806a; }
.gesv-fld-check.is-invalid::before { content: "⚠"; }
.gesv-input-wrap input.gesv-input-invalid { border-color: #e0806a; }
.gesv-fld-error { display: block; min-height: 14px; margin-top: 4px; font-size: 11px; color: #e0806a; }
.gesv-required-legend { font-size: 10px; color: var(--gesv-mut); margin: 8px 0 0; }

.gesv-rgpd { display: flex; align-items: flex-start; gap: 10px; font-size: 13px; color: var(--gesv-body); margin-top: 18px; cursor: pointer; }
.gesv-rgpd input { margin-top: 3px; }

.gesv-run-wrap { margin: 26px 0 0; text-align: center; }
.gesv-btn-run, .gesv-btn-cta {
	font-family: var(--gesv-sans); font-size: 16px; letter-spacing: .04em; text-transform: uppercase; font-weight: 600;
	background: linear-gradient(180deg, var(--gesv-gold2), var(--gesv-gold)); color: #1A1407; border: none;
	padding: 18px 28px; border-radius: 12px; cursor: pointer; width: 100%;
	display: flex; align-items: center; justify-content: center; gap: 12px;
}
.gesv-btn-run:disabled { opacity: .7; cursor: default; }
.gesv-spin { width: 16px; height: 16px; border: 2px solid rgba(26,20,7,.35); border-top-color: #1A1407; border-radius: 50%; display: none; animation: gesv-sp .8s linear infinite; }
.gesv-btn-run.gesv-loading .gesv-spin { display: inline-block; }
@keyframes gesv-sp { to { transform: rotate(360deg); } }
.gesv-run-note { display: block; margin-top: 12px; font-size: 12px; color: var(--gesv-mut); }
.gesv-run-note.gesv-error { color: #e0806a; }

.gesv-results-sec[hidden] { display: none; }
.gesv-res-eyebrow { text-align: center; font-size: 12px; letter-spacing: .2em; text-transform: uppercase; color: var(--gesv-gold); font-weight: 600; margin: 30px 0 6px; }
.gesv-res-note { text-align: center; font-size: 12px; color: var(--gesv-mut); margin: 0 auto 18px; max-width: 620px; }

.gesv-analysis-loading { text-align: center; padding: 34px 0 10px; }
.gesv-analysis-loading[hidden] { display: none; }
.gesv-loading-ring-wrap { position: relative; width: 180px; height: 180px; margin: 0 auto 22px; }
.gesv-loading-ring-wrap::before,
.gesv-loading-ring-wrap::after {
	content: ""; position: absolute; inset: -16px; border-radius: 50%;
	border: 1px solid rgba(201,162,75,.18);
	animation: gesv-loading-ripple 3.2s ease-out infinite;
}
.gesv-loading-ring-wrap::after { inset: -32px; animation-delay: .8s; }
@media (prefers-reduced-motion: reduce) {
	.gesv-loading-ring-wrap::before, .gesv-loading-ring-wrap::after { animation: none; }
}
@keyframes gesv-loading-ripple {
	0% { opacity: .5; transform: scale(.94); }
	70% { opacity: 0; transform: scale(1.08); }
	100% { opacity: 0; }
}
.gesv-loading-ring { transform: rotate(-90deg); position: relative; z-index: 1; }
.gesv-loading-track { stroke: var(--gesv-line); stroke-width: 8; fill: none; }
.gesv-loading-bar { stroke: url(#gesv-g); stroke-width: 8; fill: none; stroke-linecap: round; transition: stroke-dashoffset .7s cubic-bezier(.22,1,.36,1); }
.gesv-loading-center { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; z-index: 1; }
.gesv-loading-count { font-family: var(--gesv-serif); font-weight: 700; font-size: 26px; color: #fff; }
.gesv-loading-title { font-size: 15px; color: var(--gesv-text); font-weight: 600; margin: 0 0 4px; }
.gesv-loading-sub { font-size: 12px; color: var(--gesv-mut); margin: 0 0 18px; }
.gesv-loading-stop { margin: 0 auto; }
.gesv-cancelled-note { text-align: center; font-size: 13px; color: var(--gesv-mut); padding: 20px 0; }
.gesv-cancelled-note[hidden] { display: none; }

.gesv-results-content[hidden] { display: none; }

.gesv-wrap.gesv-processing .gesv-card {
	opacity: .35; filter: blur(1px); pointer-events: none;
	transition: opacity .5s ease, filter .5s ease;
}

.gesv-cats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
@media (max-width: 780px) { .gesv-cats { grid-template-columns: 1fr 1fr; } }
@media (max-width: 430px) { .gesv-cats { grid-template-columns: 1fr; } }
.gesv-camembert { background: var(--gesv-panel); border: 1px solid var(--gesv-goldline); border-radius: 12px; padding: 18px 12px; text-align: center; }
.gesv-donut { position: relative; width: 120px; height: 120px; margin: 0 auto 10px; }
.gesv-donut svg { transform: rotate(-90deg); width: 120px; height: 120px; }
.gesv-d-track { stroke: var(--gesv-line); stroke-width: 9; fill: none; }
.gesv-d-prog { stroke: url(#gesv-g); stroke-width: 9; fill: none; stroke-linecap: round; transition: stroke-dashoffset 1s cubic-bezier(.22,1,.36,1); }
.gesv-d-num { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-family: var(--gesv-serif); font-weight: 700; font-size: 30px; color: #fff; }
.gesv-d-num small { font-size: 12px; color: var(--gesv-mut); font-weight: 400; }
.gesv-c-ac { font-family: var(--gesv-serif); font-weight: 700; font-size: 20px; color: var(--gesv-gold); }
.gesv-c-verb { font-style: italic; font-weight: 600; font-size: 13px; color: var(--gesv-gold2); }
.gesv-c-desc { font-size: 10px; color: var(--gesv-mut); text-transform: uppercase; margin-top: 6px; }
.gesv-c-status { font-size: 10px; color: var(--gesv-mut); margin-top: 4px; }

.gesv-global { margin-top: 18px; background: linear-gradient(180deg, var(--gesv-panel2), var(--gesv-panel)); border: 1px solid var(--gesv-goldline); border-radius: 14px; padding: 26px 20px; text-align: center; }
.gesv-global h2 { font-size: 11px; letter-spacing: .2em; text-transform: uppercase; color: var(--gesv-gold); font-weight: 600; margin: 0 0 6px; }
.gesv-gauge-wrap { position: relative; width: 220px; height: 220px; margin: 12px auto 4px; }
.gesv-ring { transform: rotate(-90deg); }
.gesv-ring .gesv-track { stroke: var(--gesv-line); stroke-width: 10; fill: none; }
.gesv-ring .gesv-prog { stroke: url(#gesv-g); stroke-width: 10; fill: none; stroke-linecap: round; transition: stroke-dashoffset 1s cubic-bezier(.22,1,.36,1); }
.gesv-gauge-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.gesv-gauge-center .gesv-num { font-family: var(--gesv-serif); font-weight: 700; font-size: 58px; color: #fff; line-height: 1; }
.gesv-gauge-center .gesv-den { font-size: 12px; color: var(--gesv-mut); letter-spacing: .1em; margin-top: 2px; }
.gesv-verdict { font-family: var(--gesv-serif); font-style: italic; font-weight: 600; font-size: 23px; color: var(--gesv-gold); margin: 12px 0 4px; }
.gesv-verdict-txt { font-size: 13px; color: var(--gesv-body); max-width: 520px; margin: 0 auto; }

.gesv-two { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 18px; }
@media (max-width: 780px) { .gesv-two { grid-template-columns: 1fr; } }
.gesv-block-h { font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: var(--gesv-gold); font-weight: 600; margin: 0 0 14px; }
.gesv-airow { padding: 9px 0; border-bottom: 1px solid rgba(44,48,55,.5); }
.gesv-airow:last-child { border-bottom: none; }
.gesv-airow .gesv-top { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.gesv-airow .gesv-an { font-weight: 500; font-size: 13px; }
.gesv-airow .gesv-av { font-family: var(--gesv-serif); font-weight: 700; color: var(--gesv-gold2); font-size: 16px; }
.gesv-airow .gesv-ad { font-size: 10px; color: var(--gesv-mut); margin: 1px 0 6px; }
.gesv-airow .gesv-abar { height: 5px; background: var(--gesv-line); border-radius: 3px; overflow: hidden; }
.gesv-airow .gesv-abar i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, var(--gesv-gold), var(--gesv-gold2)); border-radius: 3px; transition: width .8s cubic-bezier(.22,1,.36,1); }

#gesv-prio { list-style: none; margin: 0; padding: 0; }
#gesv-prio li { display: flex; gap: 10px; align-items: flex-start; padding: 8px 0; border-bottom: 1px solid rgba(44,48,55,.5); font-size: 13px; }
#gesv-prio li:last-child { border-bottom: none; }
#gesv-prio .gesv-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--gesv-gold); margin-top: 6px; flex: none; }
#gesv-prio .gesv-pc { color: var(--gesv-mut); font-size: 10px; text-transform: uppercase; letter-spacing: .06em; }
#gesv-prio .gesv-empty { color: var(--gesv-mut); font-style: italic; }

.gesv-detail { margin-top: 18px; background: var(--gesv-panel); border: 1px solid var(--gesv-goldline); border-radius: 12px; padding: 16px 20px; }
.gesv-detail summary { cursor: pointer; color: var(--gesv-gold); font-weight: 600; font-size: 13px; }
.gesv-detail ul { list-style: none; margin: 14px 0 0; padding: 0; }
.gesv-detail li { display: flex; justify-content: space-between; gap: 12px; padding: 6px 0; border-bottom: 1px solid rgba(44,48,55,.4); font-size: 12.5px; }
.gesv-detail li .gesv-mut { color: var(--gesv-mut); font-size: 11px; font-style: italic; }
.gesv-detail li .gesv-status-ok { color: var(--gesv-gold2); }
.gesv-detail li .gesv-status-unavailable, .gesv-detail li .gesv-status-pending { color: var(--gesv-mut); font-style: italic; }

.gesv-disclaimer { max-width: 760px; margin: 18px auto 0; font-size: 11px; color: var(--gesv-mut); text-align: center; }

.gesv-cta { margin-top: 18px; background: rgba(201,162,75,.07); border: 1px solid var(--gesv-goldline); border-radius: 12px; padding: 22px; text-align: center; }
.gesv-cta-script { font-family: var(--gesv-script); color: var(--gesv-gold); font-size: 30px; line-height: 1; margin-bottom: 10px; }
.gesv-contact-form { max-width: 420px; margin: 16px auto 0; text-align: left; display: flex; flex-direction: column; gap: 14px; }
.gesv-contact-form[hidden] { display: none; }
.gesv-contact-success { color: var(--gesv-gold2); font-weight: 500; }

.gesv-header { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; border-bottom: 1px solid var(--gesv-goldline); padding-bottom: 20px; }
.gesv-brand { display: flex; align-items: center; gap: 14px; }
.gesv-brand img { width: 48px; height: 48px; object-fit: contain; }
.gesv-brand-name { font-family: var(--gesv-serif); font-weight: 700; letter-spacing: .1em; font-size: 17px; color: #fff; }
.gesv-brand-sub { font-size: 10px; letter-spacing: .16em; color: var(--gesv-mut); text-transform: uppercase; margin-top: 2px; }
.gesv-head-actions { display: flex; gap: 10px; }
.gesv-btn-ghost {
	font-family: var(--gesv-sans); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; font-weight: 500;
	background: transparent; color: var(--gesv-gold); border: 1px solid var(--gesv-goldline); padding: 9px 14px; border-radius: 8px; cursor: pointer;
}
.gesv-btn-ghost:hover { border-color: var(--gesv-gold); background: rgba(201,162,75,.08); }

.gesv-intro { margin: 28px 0 0; }
.gesv-eyebrow { font-size: 12px; letter-spacing: .24em; text-transform: uppercase; color: var(--gesv-gold); font-weight: 600; }
.gesv-intro h1 { font-family: var(--gesv-serif); font-weight: 700; color: #fff; font-size: clamp(24px, 4vw, 38px); margin: .18em 0 .12em; line-height: 1.1; }
.gesv-intro p { color: var(--gesv-body); width: 100%; font-size: 14px; margin: 0; }

.gesv-footer { margin-top: 40px; text-align: center; color: var(--gesv-mut); font-size: 11px; letter-spacing: .16em; text-transform: uppercase; }
.gesv-footer-dot { color: var(--gesv-gold); margin: 0 8px; }

/* Read-only reproduction of the results panel only (admin "detail" iframe and
   the PDF export both load the real shortcode page in this mode): hides the
   form, the reset/print header buttons, the "recevoir une offre" CTA and the
   footer, since none of those make sense outside the visitor's own session. */
.gesv-snapshot-mode .gesv-intro,
.gesv-snapshot-mode .gesv-card,
.gesv-snapshot-mode .gesv-head-actions,
.gesv-snapshot-mode .gesv-cta,
.gesv-snapshot-mode .gesv-footer {
	display: none;
}
.gesv-snapshot-mode .gesv-page { padding-top: 24px; }

/* Honeypot (class-rate-limiter.php / Rest_Api::create_analysis()): off-screen
   rather than display:none — some bots specifically skip display:none fields,
   fewer skip a field that's merely positioned off-canvas. tabindex="-1" and
   aria-hidden keep it out of keyboard/screen-reader navigation for real visitors. */
.gesv-hp-wrap { position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* PDF export (admin "Télécharger le PDF" → window.print() on the snapshot
   page, see Admin::handle_view_snapshot()): browsers strip background colors
   from print output by default, which would turn this dark theme into
   unreadable white-on-white — force them to print as seen. Also expands the
   "Détail par critère" accordion, closed by default, so all 17 criteria are
   on the page instead of just the summary line. */
@media print {
	* { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
	.gesv-page { width: auto; margin: 0; padding: 16px 0; }
	.gesv-detail ul { display: block !important; }
	.gesv-detail summary { list-style: none; }
	.gesv-detail summary::-webkit-details-marker { display: none; }
	.gesv-cats { break-inside: avoid; }
	.gesv-two { break-inside: avoid; }
}
