/* =========================================================================
   KDS — COURSE DETAIL PAGE (2026 redesign)
   -------------------------------------------------------------------------
   Ported from the approved "automatic-driving-course" design comp.

   ── Why every selector is prefixed ──────────────────────────────────────
   The comp was authored as a standalone page, so it styled element and
   utility selectors that this site's retained header and footer already own:
   `.container` (Bootstrap's, redefined to 1120px), `.btn-primary` /
   `.btn-secondary` (Bootstrap's), `section {padding:52px 0}`,
   `footer {background:#15120D}`, plus bare `body`, `h1,h2,h3`, `p`, `a` and
   `img,svg` resets. Shipped verbatim those would repaint the real footer,
   shrink the header's container and knock the whole theme's rhythm out.

   So: every rule below is scoped under `.kdscd`, and every class is renamed
   with the same prefix. Inside the wrapper the page is pixel-identical to the
   comp; outside it, nothing changes. The comp's own <header>, <footer> and
   sticky WhatsApp FAB are not ported at all — the layout supplies all three.

   ── Colour ─────────────────────────────────────────────────────────────
   The comp shipped its own orange (#E8720C). It is mapped here to the brand
   orange #FF4D03 from main/css/kds-design-system.css, because the header and
   footer wrapping this page are that orange and two of them on one screen
   reads as a mistake. Structure, spacing, radii and type scale are unchanged.
   ========================================================================= */

.kdscd {
  /* Brand orange, not the comp's #E8720C — see header note. */
  --kdscd-primary: #FF4D03;
  --kdscd-primary-deep: #C75E00;
  --kdscd-cream: #FFF4E8;

  --kdscd-text: #1F1F1F;
  --kdscd-text-dim: #5A5248;
  --kdscd-border: #EAE0D2;

  /* Dark bands (trust strip, final CTA) use the site's ink so they match the
     title bar and dark surfaces elsewhere rather than inventing a third dark. */
  --kdscd-dark: #191825;

  --kdscd-success: #2C7A3F;
  --kdscd-success-soft: #E5F2E8;
  --kdscd-white: #FFFFFF;
  --kdscd-radius: 12px;

  font-family: 'Poppins', ui-sans-serif, system-ui, sans-serif;
  color: var(--kdscd-text);
  background: var(--kdscd-white);
  line-height: 1.6;
  font-size: 16px;
}

.kdscd *,
.kdscd *::before,
.kdscd *::after { box-sizing: border-box; }

/* `color: inherit` matters as much as the rest of this rule. The theme sets
   `h1,h2,h3,h4,h5,h6 { color:#191825 }` in main/css/style.css, and a direct
   element rule always beats an inherited colour — so headings inside the orange
   guarantee band, the licence banner and the dark CTA came out near-black on
   their own background. Inheriting means a heading always takes the colour of
   the band it sits in, here and in any band added later. */
.kdscd h1,
.kdscd h2,
.kdscd h3,
.kdscd h4 { font-family: 'Nunito', 'Poppins', system-ui, sans-serif; font-weight: 700; line-height: 1.2; margin: 0; text-wrap: balance; color: inherit; }
.kdscd p { margin: 0; }
.kdscd a { color: inherit; }
.kdscd img,
.kdscd svg { max-width: 100%; display: block; }

.kdscd-container { max-width: 1120px; margin: 0 auto; padding: 0 20px; }

.kdscd a:focus-visible,
.kdscd button:focus-visible,
.kdscd summary:focus-visible {
  outline: 3px solid var(--kdscd-primary-deep);
  outline-offset: 2px;
}

/* ---------- Hero ---------- */
.kdscd-hero {
  background: linear-gradient(180deg, var(--kdscd-cream) 0%, #fff 100%);
  padding: 40px 0 32px;
}
@media (max-width: 991.98px) {
  .kdscd-hero {
    padding: 85px 0 32px;
  }
}
.kdscd-hero-grid { display: grid; gap: 28px; align-items: center; }
@media (min-width: 900px) { .kdscd-hero-grid { grid-template-columns: 1.1fr .9fr; gap: 48px; } }

.kdscd-eyebrow {
  display: inline-block; font-size: 12.5px; font-weight: 600; letter-spacing: .06em;
  text-transform: uppercase; color: var(--kdscd-primary-deep); background: #fff;
  border: 1px solid var(--kdscd-border); padding: 5px 12px; border-radius: 20px;
  margin-bottom: 14px;
}
.kdscd-hero-title { font-size: clamp(28px, 5vw, 42px); color: var(--kdscd-text); }
.kdscd-hero-title em { color: var(--kdscd-primary); font-style: normal; }
.kdscd-hero-sub { font-size: 16.5px; color: var(--kdscd-text-dim); margin: 16px 0 22px; max-width: 52ch; }

.kdscd-ctas { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 20px; }

/* Each button rule is written as `.kdscd .kdscd-btn-*` (0,2,0) on purpose:
   the reset above it, `.kdscd a { color: inherit }`, is (0,1,1) and would
   otherwise win over a bare class and strip the label colour off every button
   that happens to be an <a> — which is most of them. */
.kdscd .kdscd-btn-primary {
  background: var(--kdscd-primary); color: #fff; padding: 14px 22px; border-radius: 9px;
  font-weight: 600; font-size: 15px; text-decoration: none; border: none; cursor: pointer;
  display: inline-flex; align-items: center; gap: 8px;
}
.kdscd .kdscd-btn-primary:hover,
.kdscd .kdscd-btn-primary:focus { background: var(--kdscd-primary-deep); color: #fff; text-decoration: none; }

.kdscd .kdscd-btn-secondary {
  background: #fff; color: var(--kdscd-text); border: 1.5px solid var(--kdscd-border);
  padding: 13px 22px; border-radius: 9px; font-weight: 600; font-size: 15px;
  text-decoration: none; display: inline-flex; align-items: center; gap: 8px;
}
.kdscd .kdscd-btn-secondary:hover,
.kdscd .kdscd-btn-secondary:focus { color: var(--kdscd-text); text-decoration: none; border-color: var(--kdscd-primary); }

.kdscd .kdscd-btn-wa {
  background: linear-gradient(135deg, #FF4D03 0%, #FF7700 100%);
  color: #fff;
  padding: 14px 22px;
  border-radius: 9px;
  font-weight: 600;
  font-size: 15px;
  text-decoration: none;
  border: none;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  box-shadow: 0 4px 14px rgba(255, 77, 3, 0.28);
  transition: all 0.25s ease;
}
.kdscd .kdscd-btn-wa svg { fill: #fff; }
.kdscd .kdscd-btn-wa:hover,
.kdscd .kdscd-btn-wa:focus {
  background: linear-gradient(135deg, #E03E00 0%, #E66000 100%);
  color: #fff;
  text-decoration: none;
  box-shadow: 0 6px 20px rgba(255, 77, 3, 0.4);
  transform: translateY(-1px);
}

.kdscd-trust-mini { display: flex; flex-wrap: wrap; gap: 16px; font-size: 13.5px; color: var(--kdscd-text-dim); }
.kdscd-trust-mini strong { color: var(--kdscd-text); }

/* The comp used a dashed gradient placeholder here and told us to swap in real
   photography before launch. The car model's own admin-uploaded image is that
   photograph, so it fills the frame; the gradient stays as the fallback for a
   model with no image yet. */
/* The comp's frame was 4/3 with object-fit:cover. The real car photos are
   portrait (1024x1280), so cover cropped the roof and the wheels off. The frame
   now takes the image's own aspect ratio, so the vehicle is shown whole. */
.kdscd-hero-visual { border-radius: var(--kdscd-radius); overflow: hidden; position: relative; }
.kdscd-hero-visual img { width: 100%; height: auto; }

/* Only the no-photo fallback keeps a fixed frame to fill. Two live pages reach
   it — Honda City and Swift have no car_models row, so there is no photo to
   show. The comp's dashed "replace this placeholder" border is deliberately not
   kept: on a page a customer actually lands on it reads as a broken image
   rather than as a design. Solid panel, same as the licence banner's fallback. */
.kdscd-hero-visual--empty {
  aspect-ratio: 4/3;
  background: linear-gradient(135deg, var(--kdscd-primary) 0%, var(--kdscd-primary-deep) 100%);
  border: 1px solid rgba(255, 255, 255, .28);
  display: flex; align-items: center; justify-content: center;
}

/* ---------- Section shell ---------- */
.kdscd-sec { padding: 52px 0; }
.kdscd-sec.is-alt { background: var(--kdscd-cream); }
.kdscd-sec-head { max-width: 640px; margin: 0 0 30px; }
.kdscd-sec-head h2 { font-size: clamp(22px, 3.5vw, 30px); }
.kdscd-sec-head p { color: var(--kdscd-text-dim); margin-top: 8px; font-size: 15px; }
.kdscd-sec-head .kdscd-sec-notice { color: inherit; font-size: clamp(22px, 3.5vw, 30px); font-weight: 800; letter-spacing: .02em; margin-top: 10px; }

/* ---------- Why this course ---------- */
.kdscd-why-grid { display: grid; gap: 16px; }
@media (min-width: 768px) { .kdscd-why-grid { grid-template-columns: repeat(3, 1fr); } }
.kdscd-why-card { background: #fff; border: 1px solid var(--kdscd-border); border-radius: var(--kdscd-radius); padding: 22px; }
.kdscd-icon-badge {
  width: 42px; height: 42px; border-radius: 10px; background: var(--kdscd-cream);
  display: flex; align-items: center; justify-content: center; margin-bottom: 14px;
}
.kdscd-icon-badge svg { width: 22px; height: 22px; stroke: var(--kdscd-primary-deep); }
.kdscd-why-card h3 { font-size: 16.5px; margin-bottom: 8px; }
.kdscd-why-card p { font-size: 14.5px; color: var(--kdscd-text-dim); }

/* ---------- Trust strip ---------- */
.kdscd-trust-strip { background: var(--kdscd-dark); color: #fff; padding: 16px 0; text-align: center; font-size: 14px; }
.kdscd-trust-strip .kdscd-container { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 22px; }
.kdscd-trust-strip strong { color: #FFD27A; }

/* ---------- Inclusions ---------- */
.kdscd-promise {
  background: var(--kdscd-success-soft); border: 1px solid #cfe6d4; border-radius: var(--kdscd-radius);
  padding: 18px 20px; margin-bottom: 28px; font-size: 14.5px; color: var(--kdscd-text-dim);
}
.kdscd-promise strong { color: var(--kdscd-success); display: block; font-size: 16px; margin-bottom: 4px; }

/* =========================================================================
   Card skin — shared by the inclusions grid and the package grid
   -------------------------------------------------------------------------
   The comp drew both grids as flat bordered boxes. They are rebuilt here on
   the homepage's "Why KDS" bento pattern (public/index.blade.php,
   `.kds-bento-card`) so the two most persuasive grids on the site share one
   visual language: 20px radius, a tinted corner wash, a gradient beam that
   wipes across the top edge on hover, a 6px lift on a coloured shadow, and an
   icon chip that scales and tips.

   One skin paints both grids. A palette class only re-points the custom
   properties below, so nothing that actually paints is written twice — and a
   seventh palette is six declarations, not a rule block.

   The inclusions grid sits on the cream band, so its card body stays white and
   the tint is carried by the corner wash, the border, the icon and the
   watermark. A full-body gradient like the homepage's would sink into cream.
   The package grid sits on white, so the featured card can take the full
   homepage treatment.
   ========================================================================= */

.kdscd-incl-card,
.kdscd-price-card {
  /* Orange is the default palette; the classes further down re-point these. */
  --kc-accent: var(--kdscd-primary);
  --kc-accent-2: #FF8800;
  --kc-wash: rgba(255, 77, 3, .13);
  --kc-bd: #FFD8BF;
  --kc-bd-h: #FFBE99;
  --kc-sh: rgba(255, 77, 3, .16);
  --kc-ic-bg: #FFF4ED;
  --kc-ic-bd: #FFE2D1;

  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid var(--kc-bd);
  border-radius: 20px;
  box-shadow: 0 4px 18px rgba(20, 20, 32, .03), 0 1px 2px rgba(20, 20, 32, .02);
  transition: transform .32s cubic-bezier(.16, 1, .3, 1), box-shadow .32s ease, border-color .32s ease;
}

/* Top light beam. */
.kdscd-incl-card::before,
.kdscd-price-card::before {
  content: '';
  position: absolute;
  inset: 0 0 auto;
  height: 3px;
  background: linear-gradient(90deg, var(--kc-accent), var(--kc-accent-2), var(--kc-accent));
  opacity: 0;
  transform: scaleX(.3);
  transform-origin: center;
  transition: opacity .35s ease, transform .35s ease;
  z-index: 4;
}

/* Corner wash — faintly on at rest so the palette reads without a pointer,
   which is the only state a touch device ever sees. */
.kdscd-incl-card::after,
.kdscd-price-card::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: radial-gradient(circle at 88% 6%, var(--kc-wash) 0%, transparent 58%);
  opacity: .6;
  transition: opacity .35s ease;
}

.kdscd-incl-card:hover,
.kdscd-price-card:hover {
  transform: translateY(-6px);
  border-color: var(--kc-bd-h);
  box-shadow: 0 18px 42px var(--kc-sh), 0 4px 10px rgba(20, 20, 32, .04);
}
.kdscd-incl-card:hover::before,
.kdscd-price-card:hover::before { opacity: 1; transform: scaleX(1); }
.kdscd-incl-card:hover::after,
.kdscd-price-card:hover::after { opacity: 1; }

/* Both washes are painted inside the card, so the content has to be lifted off
   them. The watermark rule below re-lowers itself back under the copy. */
.kdscd-incl-card > *,
.kdscd-price-card > * { position: relative; z-index: 2; }

/* Watermark index. The homepage keeps it bottom-right, under a transparent
   footer row. These cards end in body copy instead, so it rides the top-right
   corner with the wash — bottom-right put a grey smudge through the last line
   of every description. */
.kdscd-card-num {
  position: absolute;
  top: 2px;
  right: 14px;
  z-index: 1;
  font-size: 58px;
  font-weight: 900;
  line-height: .9;
  letter-spacing: -2.5px;
  color: rgba(20, 20, 32, .05);
  pointer-events: none;
  user-select: none;
  transition: color .35s ease, transform .35s cubic-bezier(.16, 1, .3, 1);
}
.kdscd-incl-card:hover .kdscd-card-num { color: var(--kc-wash); transform: scale(1.08) translate(-2px, 2px); }

/* Icon chip. */
.kdscd-card-ic {
  width: 44px;
  height: 44px;
  border-radius: 13px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  background: var(--kc-ic-bg);
  border: 1px solid var(--kc-ic-bd);
  transition: transform .32s cubic-bezier(.16, 1, .3, 1), box-shadow .32s ease;
}
.kdscd-card-ic svg { width: 21px; height: 21px; stroke: var(--kc-accent); }
.kdscd-incl-card:hover .kdscd-card-ic,
.kdscd-price-card:hover .kdscd-card-ic {
  transform: scale(1.1) rotate(4deg);
  box-shadow: 0 6px 16px var(--kc-sh);
}

/* ---- Palettes, lifted from the homepage bento ---- */
.kdscd-tint-blue {
  --kc-accent: #2563EB; --kc-accent-2: #60A5FA; --kc-wash: rgba(59, 130, 246, .13);
  --kc-bd: #D8E7FA; --kc-bd-h: #93C5FD; --kc-sh: rgba(37, 99, 235, .14);
  --kc-ic-bg: #EFF6FF; --kc-ic-bd: #DBEAFE;
}
.kdscd-tint-cyan {
  --kc-accent: #0891B2; --kc-accent-2: #22D3EE; --kc-wash: rgba(6, 182, 212, .13);
  --kc-bd: #C9F3EA; --kc-bd-h: #67E8F9; --kc-sh: rgba(6, 182, 212, .14);
  --kc-ic-bg: #ECFEFF; --kc-ic-bd: #CFFAFE;
}
.kdscd-tint-purple {
  --kc-accent: #9333EA; --kc-accent-2: #C084FC; --kc-wash: rgba(168, 85, 247, .13);
  --kc-bd: #EBD8FC; --kc-bd-h: #D8B4FE; --kc-sh: rgba(168, 85, 247, .14);
  --kc-ic-bg: #FBF5FF; --kc-ic-bd: #F3E8FF;
}
.kdscd-tint-amber {
  --kc-accent: #B45309; --kc-accent-2: #FBBF24; --kc-wash: rgba(245, 158, 11, .16);
  --kc-bd: #FEDCA6; --kc-bd-h: #FCD34D; --kc-sh: rgba(245, 158, 11, .16);
  --kc-ic-bg: #FFFBEB; --kc-ic-bd: #FEF3C7;
}
.kdscd-tint-rose {
  --kc-accent: #E11D48; --kc-accent-2: #FB7185; --kc-wash: rgba(244, 63, 94, .13);
  --kc-bd: #FCD2DC; --kc-bd-h: #FDA4AF; --kc-sh: rgba(244, 63, 94, .14);
  --kc-ic-bg: #FFF1F4; --kc-ic-bd: #FFE4E8;
}

/* ---------- Inclusions ---------- */
.kdscd-incl-grid { display: grid; gap: 16px; }
@media (min-width: 640px) { .kdscd-incl-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .kdscd-incl-grid { grid-template-columns: repeat(3, 1fr); } }
.kdscd-incl-card { padding: 22px 20px 20px; }
.kdscd-incl-card h3 { font-size: 16px; margin: 14px 0 6px; letter-spacing: -.2px; }
.kdscd-incl-card p { font-size: 13.5px; line-height: 1.58; color: var(--kdscd-text-dim); }

/* ---------- Pricing ---------- */
.kdscd-price-grid { display: grid; gap: 18px; }
@media (min-width: 700px) { .kdscd-price-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1080px) { .kdscd-price-grid { grid-template-columns: repeat(4, 1fr); } }

.kdscd-price-card { padding: 20px 18px 18px; gap: 8px; }

/* The featured card takes the homepage's warm-sunrise body rather than only a
   corner wash: at four across, a badge alone was not enough to pick it out. */
.kdscd-price-card.is-featured {
  /* Higher specificity than the palette classes, so the featured card comes
     back to orange whichever tier the badge lands on. */
  --kc-accent: var(--kdscd-primary);
  --kc-accent-2: #FF8800;
  --kc-wash: rgba(255, 77, 3, .13);
  --kc-bd: #FFD8BF;
  --kc-bd-h: #FFBE99;
  --kc-sh: rgba(255, 77, 3, .16);
  --kc-ic-bg: #FFF4ED;
  --kc-ic-bd: #FFE2D1;

  background: linear-gradient(150deg, #fff 0%, #FFF3E7 42%, #FFE3CC 100%);
  border-width: 1.5px;
  box-shadow: 0 10px 30px rgba(255, 77, 3, .15), 0 2px 6px rgba(20, 20, 32, .03);
}
.kdscd-price-card.is-featured:hover { box-shadow: 0 22px 48px rgba(255, 77, 3, .2), 0 4px 10px rgba(20, 20, 32, .04); }

.kdscd-price-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 12px; }

.kdscd-badge-popular {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 10px; border-radius: 50px;
  background: #FFF3EC; border: 1px solid #FFD8C4;
  font-size: 9.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--kdscd-primary); white-space: nowrap;
  transition: background .25s ease, color .25s ease, border-color .25s ease, box-shadow .25s ease;
}
.kdscd-badge-popular svg { width: 9px; height: 9px; fill: var(--kdscd-primary); stroke: none; transition: fill .25s ease; }
.kdscd-price-card:hover .kdscd-badge-popular {
  background: var(--kdscd-primary); color: #fff; border-color: var(--kdscd-primary);
  box-shadow: 0 4px 12px rgba(255, 77, 3, .32);
}
.kdscd-price-card:hover .kdscd-badge-popular svg { fill: #fff; }

.kdscd-days {
  display: inline-flex; align-items: center; align-self: flex-start;
  padding: 4px 11px; border-radius: 50px;
  background: var(--kc-ic-bg); border: 1px solid var(--kc-ic-bd);
  font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--kc-accent); transition: all .22s ease;
}

/* Tier rung above the package name — "Standard" over "Foundation to Mastery" —
   so the ladder is readable without comparing four prices. */
.kdscd-tier {
  font-size: 10.5px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase;
  color: var(--kc-accent); margin-top: 10px;
}
/* Package headline shows "Best for: ...", reserving consistent height across cards */
.kdscd-price-card h3 {
  font-size: 15px;
  font-weight: 700;
  color: #1e293b;
  margin: 3px 0 6px;
  min-height: 2.7em;
  line-height: 1.35;
  letter-spacing: -.2px;
}

/* What the package contains. The four tiers carry 3–5 bullets each, so the list
   is left to run its own length and the price block below it is pushed to the bottom
   of the card — keeping prices and buttons on one line across the row. */
.kdscd-feat { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 9px; }
.kdscd-feat li {
  display: grid; grid-template-columns: 16px 1fr; gap: 9px; align-items: start;
  font-size: 13px; line-height: 1.5; color: var(--kdscd-text-dim);
}
.kdscd-feat svg { width: 16px; height: 16px; margin-top: 2px; stroke: var(--kc-accent); }

.kdscd-price-block {
  border-top: 1px solid var(--kc-ic-bd);
  padding-top: 12px;
}
.kdscd-price-card .kdscd-price-block { margin-top: auto; }
.kdscd-amount { font-size: 28px; font-weight: 800; letter-spacing: -.7px; margin-top: 2px; }
.kdscd-amount small { font-size: 13px; font-weight: 500; letter-spacing: 0; color: var(--kdscd-text-dim); }
.kdscd-price-card.is-featured .kdscd-amount { color: var(--kdscd-primary); }

/* Not in the comp: several packages carry a percentage discount in the DB, and
   the card must show what was struck through or the saving is invisible. */
.kdscd-was { font-size: 12.5px; color: var(--kdscd-text-dim); margin-top: -4px; }
.kdscd-was del { margin-right: 6px; }
.kdscd-save { color: var(--kdscd-success); font-weight: 600; }

/* The bottom block is pinned by .kdscd-price-block's auto margin */
.kdscd-price-card .kdscd-card-actions { padding-top: 12px; }
.kdscd-price-card .kdscd-btn-primary,
.kdscd-price-card .kdscd-btn-secondary {
  width: 100%; justify-content: center; margin-top: 8px; font-size: 14px; padding: 12px;
  border-radius: 11px; transition: transform .25s ease, box-shadow .25s ease, background .2s ease, border-color .2s ease;
}
.kdscd-price-card .kdscd-btn-primary { box-shadow: 0 6px 16px rgba(255, 77, 3, .2); }
.kdscd-price-card:hover .kdscd-btn-primary { box-shadow: 0 10px 24px rgba(255, 77, 3, .32); }
.kdscd-price-card .kdscd-btn-primary:hover,
.kdscd-price-card .kdscd-btn-secondary:hover { transform: translateY(-2px); }

.kdscd-price-note { font-size: 12.5px; color: var(--kdscd-text-dim); text-align: center; margin-top: 20px; }

/* The lift, the beam wipe and the icon tip are decoration; a visitor who has
   asked the OS for less motion still gets the palette and the shadow. */
@media (prefers-reduced-motion: reduce) {
  .kdscd-incl-card,
  .kdscd-price-card,
  .kdscd-card-ic,
  .kdscd-card-num,
  .kdscd-incl-card::before,
  .kdscd-price-card::before,
  .kdscd-incl-card::after,
  .kdscd-price-card::after,
  .kdscd-price-card .kdscd-btn-primary,
  .kdscd-price-card .kdscd-btn-secondary { transition: none; }
  .kdscd-incl-card:hover,
  .kdscd-price-card:hover,
  .kdscd-incl-card:hover .kdscd-card-num,
  .kdscd-incl-card:hover .kdscd-card-ic,
  .kdscd-price-card:hover .kdscd-card-ic,
  .kdscd-price-card .kdscd-btn-primary:hover,
  .kdscd-price-card .kdscd-btn-secondary:hover { transform: none; }
}

/* ---------- Guarantee band ---------- */
.kdscd-guarantee {
  background: var(--kdscd-primary); color: #fff; border-radius: var(--kdscd-radius); padding: 26px 24px;
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 18px;
}
.kdscd-guarantee-text { display: flex; gap: 14px; align-items: flex-start; max-width: 640px; }
.kdscd-guarantee-text svg { width: 28px; height: 28px; stroke: #fff; flex-shrink: 0; }
.kdscd-guarantee-text h3 { font-size: 19px; margin-bottom: 4px; }
.kdscd-guarantee-text p { font-size: 13.5px; opacity: .92; }
.kdscd .kdscd-guarantee .kdscd-btn-secondary { background: #fff; color: var(--kdscd-primary-deep); border: none; white-space: nowrap; }

/* ---------- Licence cross-sell ---------- */
.kdscd-license {
  background: linear-gradient(120deg, var(--kdscd-primary-deep), var(--kdscd-primary));
  border-radius: var(--kdscd-radius); padding: 36px 28px; color: #fff; display: grid; gap: 24px; align-items: center;
}
@media (min-width: 800px) { .kdscd-license { grid-template-columns: 1.2fr .8fr; } }
.kdscd-license .kdscd-eyebrow { background: rgba(255, 255, 255, .15); color: #fff; border-color: transparent; }
.kdscd-license h2 { font-size: clamp(22px, 3.5vw, 28px); margin-bottom: 10px; }
.kdscd-license p { font-size: 14.5px; opacity: .95; max-width: 46ch; margin-bottom: 18px; }
.kdscd .kdscd-license .kdscd-btn-secondary { background: #fff; color: var(--kdscd-primary-deep); border: none; }
/* The comp marked this a dashed photo placeholder ("replace with a real KDS
   student holding their licence"). There is no such photo in the media library,
   and a dashed empty frame reads as an unfinished page, so it ships as a solid
   decorative panel instead. Drop an <img> in and it fills the frame. */
.kdscd-license-visual {
  aspect-ratio: 16/9; border-radius: 10px; overflow: hidden; position: relative;
  background: rgba(255, 255, 255, .12); border: 1px solid rgba(255, 255, 255, .28);
  display: flex; align-items: center; justify-content: center;
}
.kdscd-license-visual svg { width: 92px; height: 92px; stroke: rgba(255, 255, 255, .92); }

/* With a real photo the frame goes 4:3 — the student shot is portrait (854x1280)
   and a 16:9 crop of it keeps the car door and loses the face. At 4:3 the crop
   shows half the frame's height; `object-position: center 48%` lands that window
   on the student and the licence in her hand, which are the two things the photo
   is there to show. */
.kdscd-license-visual.has-photo { aspect-ratio: 4/3; background: none; border: none; }
.kdscd-license-visual.has-photo img {
  width: 100%; height: 100%; object-fit: cover; object-position: center 48%;
  /* The photo is portrait and the frame is landscape, so `cover` matches it on
     width — which means object-position's horizontal axis does nothing and the
     student sits left with dead car interior to her right. A small scale, with
     the origin over her, crops that in. The container clips it (overflow:hidden). */
  transform: scale(1.28); transform-origin: 36% 46%;
}

/* ---------- Reviews ---------- */
.kdscd-review-grid { display: grid; gap: 16px; }
@media (min-width: 768px) { .kdscd-review-grid { grid-template-columns: repeat(3, 1fr); } }
.kdscd-review-card { background: #fff; border: 1px solid var(--kdscd-border); border-radius: var(--kdscd-radius); padding: 20px; }
.kdscd-stars { color: var(--kdscd-primary); font-size: 14px; margin-bottom: 10px; letter-spacing: 2px; }
.kdscd-review-card p { font-size: 14px; color: var(--kdscd-text); margin-bottom: 14px; }
.kdscd-reviewer { display: flex; align-items: center; gap: 10px; }
.kdscd-avatar {
  width: 34px; height: 34px; border-radius: 50%; background: var(--kdscd-cream); color: var(--kdscd-primary-deep);
  display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 13px; flex-shrink: 0;
}
.kdscd-who { font-size: 13px; }
.kdscd-who span { display: block; color: var(--kdscd-text-dim); font-size: 11.5px; }

/* ---------- FAQ ---------- */
.kdscd-faq-item { border: 1px solid var(--kdscd-border); border-radius: 10px; margin-bottom: 10px; background: #fff; overflow: hidden; }
.kdscd-faq-item summary {
  padding: 16px 18px; font-weight: 600; font-size: 15px; cursor: pointer; list-style: none;
  display: flex; justify-content: space-between; align-items: center; gap: 12px;
}
.kdscd-faq-item summary::-webkit-details-marker { display: none; }
.kdscd-faq-item summary::after { content: "+"; font-size: 20px; color: var(--kdscd-primary); flex-shrink: 0; }
.kdscd-faq-item[open] summary::after { content: "–"; }
.kdscd-faq-a { padding: 0 18px 18px; font-size: 14.5px; color: var(--kdscd-text-dim); }

/* ---------- Admission form ----------
   Not in the comp (which was WhatsApp-only), but these pages carry the real
   admission form that creates the student record and notifies the admin, so it
   is kept and restyled into the comp's card idiom. */
.kdscd-form-card {
  background: #fff; border: 1px solid var(--kdscd-border); border-radius: var(--kdscd-radius);
  padding: 28px 24px; max-width: 900px; margin: 0 auto;
}
@media (min-width: 700px) { .kdscd-form-card { padding: 32px; } }
.kdscd-form-grid { display: grid; gap: 16px; }
@media (min-width: 640px) { .kdscd-form-grid { grid-template-columns: repeat(2, 1fr); } }
.kdscd-field { display: flex; flex-direction: column; gap: 6px; }
.kdscd-field.is-full { grid-column: 1 / -1; }
.kdscd-field label { font-size: 13px; font-weight: 600; color: var(--kdscd-text); }
.kdscd-field .req { color: #C0392B; }
.kdscd-field input,
.kdscd-field select {
  width: 100%; font-family: inherit; font-size: 14.5px; color: var(--kdscd-text);
  background: #fff; border: 1.5px solid var(--kdscd-border); border-radius: 9px; padding: 11px 13px;
  -webkit-appearance: none; appearance: none;
}
.kdscd-field select {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A5248' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center; background-size: 16px; padding-right: 38px;
}
.kdscd-field input:focus,
.kdscd-field select:focus { outline: none; border-color: var(--kdscd-primary); box-shadow: 0 0 0 3px rgba(255, 77, 3, .12); }
.kdscd-form-note { font-size: 12.5px; color: var(--kdscd-text-dim); text-align: center; margin-top: 12px; }
.kdscd-form-submit { display: flex; justify-content: center; margin-top: 4px; }
.kdscd-alert { border-radius: 10px; padding: 14px 16px; font-size: 14px; margin-bottom: 20px; }
.kdscd-alert.is-ok { background: var(--kdscd-success-soft); border: 1px solid #cfe6d4; color: #1E5B2C; }
.kdscd-alert.is-err { background: #FDECEA; border: 1px solid #F5C6C0; color: #922B21; }
.kdscd-alert ul { margin: 0; padding-left: 18px; }

/* ---------- Final CTA ---------- */
.kdscd-final { background: var(--kdscd-dark); color: #fff; text-align: center; }
.kdscd-final h2 { color: #fff; font-size: clamp(22px, 4vw, 30px); margin-bottom: 10px; }
.kdscd-final p { color: #d8d2c8; margin-bottom: 22px; }
.kdscd-final .kdscd-ctas { justify-content: center; margin-bottom: 0; }
.kdscd .kdscd-final .kdscd-btn-secondary { background: transparent; color: #fff; border-color: #4a4438; }
