/* ==========================================================================
   app-extra.css — styles for pages added to the original Syo Technol frontend.
   Uses only the design tokens defined in style.css (:root). Do not restyle
   anything that style.css already covers.
   ========================================================================== */

:root {
  --danger: #b42318;
  --danger-bg: #fdecea;
  --warning: #8a5a00;
  --warning-bg: #fff4d6;
  --success: #116b3a;
  --success-bg: #e3f8e9;
  --info: #04556a;
  --info-bg: #dcf3f8;
  --sidebar-w: 264px;
}

/* ============ Generic helpers ============ */
[hidden] { display: none !important; }

.visually-hidden {
  position: absolute !important;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.muted { color: var(--muted); }
.text-right { text-align: right; }
.nowrap { white-space: nowrap; }
.mt-0 { margin-top: 0 !important; }
.mt-1 { margin-top: 8px; }
.mt-2 { margin-top: 16px; }
.mt-3 { margin-top: 24px; }
.mt-4 { margin-top: 36px; }
.mb-2 { margin-bottom: 16px; }
.mb-3 { margin-bottom: 24px; }
.vstack-sm > * + * { margin-top: 8px; }
.vstack > * + * { margin-top: 16px; }
.vstack-lg > * + * { margin-top: 28px; }
.row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.row-between { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; }
.grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }
.grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
.grid-4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
.prose { line-height: 1.75; color: var(--ink); }
.prose p, .prose ul, .prose ol { margin-bottom: 14px; }
.prose ul, .prose ol { padding-left: 22px; }
.prose ul { list-style: disc; }
.prose ol { list-style: decimal; }
.prose a { color: var(--green); text-decoration: underline; }
.prose h2, .prose h3 { margin: 22px 0 10px; }
.pre-wrap { white-space: pre-wrap; word-break: break-word; }

/* Small buttons + extra variants (same pill style as .btn) */
.btn-sm { padding: 9px 16px; font-size: 14px; }
.btn-dark {
  background: var(--green);
  color: var(--text-on-dark);
}
.btn-dark:hover {
  background: var(--green-3);
  transform: translateY(-2px);
  box-shadow: var(--shadow-sm);
}
.btn-danger {
  background: var(--danger);
  color: var(--white);
}
.btn-danger:hover { transform: translateY(-2px); box-shadow: 0 12px 26px rgba(180, 35, 24, 0.25); }
.btn-link {
  padding: 0;
  border: 0;
  background: none;
  color: var(--green);
  font-weight: 700;
  font-size: 15px;
  text-decoration: underline;
  cursor: pointer;
}
.btn[disabled], .btn.is-disabled { opacity: 0.55; pointer-events: none; }
.inline-form { display: inline; }

/* ============ Page hero for inner pages ============ */
.page-hero {
  position: relative;
  background: var(--green);
  color: var(--text-on-dark);
  padding-block: clamp(56px, 8vw, 96px);
  overflow: hidden;
}
.page-hero-inner { position: relative; max-width: 760px; }
.page-hero .eyebrow { color: var(--lime); }
.page-hero h1 {
  font-size: clamp(2rem, 4.4vw, 3.3rem);
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--white);
}
.page-hero p { margin-top: 16px; color: var(--muted-on-dark); font-size: 17px; }
.page-section { padding-block: clamp(48px, 7vw, 88px); }

/* ============ Alerts / flash ============ */
.alert {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  padding: 14px 18px;
  border-radius: 14px;
  border: 1px solid transparent;
  font-size: 16px;
  font-weight: 600;
}
.alert ul { list-style: disc; padding-left: 18px; font-weight: 500; }
.alert-success { background: var(--success-bg); color: var(--success); border-color: rgba(17, 107, 58, 0.18); }
.alert-error { background: var(--danger-bg); color: var(--danger); border-color: rgba(180, 35, 24, 0.18); }
.alert-warning { background: var(--warning-bg); color: var(--warning); border-color: rgba(138, 90, 0, 0.18); }
.alert-info { background: var(--info-bg); color: var(--info); border-color: rgba(4, 85, 106, 0.18); }

/* ============ Forms ============ */
/* minmax(0, 1fr): the form's column never grows past the form (a long label or button inside a
   narrow side panel used to push it off-screen). Its buttons may wrap to a second line there. */
.form { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px; }
.form > .btn { white-space: normal; text-align: center; }
.form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.fieldset { display: grid; gap: 12px; margin: 0; padding: 18px; border: 1px solid var(--border); border-radius: 12px; min-width: 0; }
.fieldset legend { padding: 0 6px; font-weight: 700; font-size: 16px; }
.fieldset > .hint { margin: 0; font-size: 14.5px; line-height: 1.55; color: var(--muted); }
.copy-field { display: flex; gap: 10px; align-items: center; }
.copy-field .input { flex: 1; min-width: 0; font-family: ui-monospace, Consolas, monospace; font-size: 14px; }
.copy-field .btn { flex-shrink: 0; }
.reset-link-panel { border-color: rgba(4, 85, 106, 0.25); background: var(--info-bg); }
.form-grid .span-2 { grid-column: 1 / -1; }
/* min-width: 0 lets a field (and a select with long options) shrink to a narrow column instead of
   pushing the layout wider than the screen; the select text is truncated, never the page. */
.field { display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.select { min-width: 0; max-width: 100%; text-overflow: ellipsis; }
.field label, .field .label {
  font-size: 14.5px;
  font-weight: 700;
  color: var(--ink);
}
.field .hint { font-size: 13.5px; color: var(--muted); }
.field .error { font-size: 14px; color: var(--danger); font-weight: 600; }
.input, .select, .textarea {
  width: 100%;
  font: inherit;
  font-size: 16px;
  color: var(--ink);
  background: var(--white);
  border: 1px solid rgba(0, 11, 110, 0.2);
  border-radius: 12px;
  padding: 12px 14px;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.textarea { min-height: 130px; resize: vertical; line-height: 1.6; }
.textarea.code { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 14.5px; }
.select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--green) 50%), linear-gradient(135deg, var(--green) 50%, transparent 50%); background-position: calc(100% - 20px) 52%, calc(100% - 15px) 52%; background-size: 5px 5px; background-repeat: no-repeat; padding-right: 38px; }
.input:focus, .select:focus, .textarea:focus {
  outline: none;
  border-color: var(--green);
  box-shadow: 0 0 0 3px rgba(7, 166, 207, 0.55);
}
.is-invalid { border-color: var(--danger) !important; }
.input[type="file"] { padding: 10px; background: var(--offwhite); }
.check {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 16px;
  cursor: pointer;
}
.check input { width: 18px; height: 18px; margin-top: 3px; accent-color: var(--green); flex-shrink: 0; }
.form-actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }

/* Role picker on the register page */
.choice-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.choice {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 16px;
  border: 1px solid rgba(0, 11, 110, 0.2);
  border-radius: 14px;
  cursor: pointer;
  transition: border-color 0.2s ease, background 0.2s ease;
}
.choice input { position: absolute; opacity: 0; }
.choice strong { font-size: 16px; }
.choice span { font-size: 14px; color: var(--muted); line-height: 1.5; }
.choice:has(input:checked) { border-color: var(--green); background: rgba(7, 166, 207, 0.18); box-shadow: inset 0 0 0 1px var(--green); }
.choice:has(input:focus-visible) { outline: 2px solid var(--lime); outline-offset: 3px; }
/* A fieldset used as a .field: drop the browser's grey frame so the legend reads like any other field label */
fieldset.field { border: 0; margin: 0; padding: 0; min-width: 0; }
fieldset.field > legend { padding: 0; margin-bottom: 7px; }
/* Choice cards are <label>s inside .field, so undo the bold field-label style for their description */
.field .choice { font-weight: 400; }
.field .choice strong { font-weight: 700; color: var(--ink); }

/* ============ Auth pages ============ */
.auth-section {
  background: var(--offwhite);
  padding-block: clamp(48px, 8vw, 96px);
}
.auth-card {
  max-width: 500px;
  margin-inline: auto;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  padding: clamp(28px, 5vw, 44px);
}
.auth-card.wide { max-width: 640px; }
.auth-card h1 { font-size: clamp(1.6rem, 3vw, 2.1rem); font-weight: 800; letter-spacing: -0.03em; }
.auth-card .lead { color: var(--muted); margin-top: 8px; margin-bottom: 26px; font-size: 16px; }
.auth-foot { margin-top: 22px; font-size: 16px; color: var(--muted); text-align: center; }
.auth-foot a, .link { color: var(--green); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
/* Auth card (register etc.): no underline at rest, like the login page links; bold weight keeps them distinguishable */
.auth-card .link, .auth-foot a { text-decoration: none; }
.auth-card .link:hover, .auth-card .link:focus-visible,
.auth-foot a:hover, .auth-foot a:focus-visible { text-decoration: underline; }
.qr-box { display: inline-block; padding: 14px; background: var(--white); border: 1px solid var(--border); border-radius: 14px; }
.qr-box svg { width: 190px; height: 190px; }
.codes { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; font-family: ui-monospace, Consolas, monospace; font-size: 15px; background: var(--offwhite); padding: 16px; border-radius: 12px; }

/* ============ Cards / panels ============ */
.panel {
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: clamp(20px, 3vw, 28px);
}
.panel + .panel { margin-top: 24px; }
/* Grid gaps already space panels; the stacking margin would push later columns down */
:is(.grid-2, .grid-3, .grid-4) > .panel + .panel { margin-top: 0; }

/* Compact activity lists inside panels (admin overview) */
.feed-list { list-style: none; margin: 0; padding: 0; }
.feed-item { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 0; border-top: 1px solid var(--border); }
.feed-item:first-child { border-top: 0; padding-top: 4px; }
.feed-item:last-child { padding-bottom: 0; }
.feed-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; line-height: 1.35; }
.feed-main .link { align-self: flex-start; font-weight: 700; text-decoration: none; }
.feed-main .link:hover, .feed-main .link:focus-visible { text-decoration: underline; }
.feed-meta { font-size: 14.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.feed-item > :last-child { flex-shrink: 0; }
.feed-meta-wrap { white-space: normal; }

/* Admin user detail */
.user-detail { align-items: start; }
.user-actions { display: grid; gap: 18px; margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--border); }
.user-danger { display: grid; gap: 10px; }
.table-actions { display: inline-flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
.table-actions form { margin: 0; }
.user-danger .panel-sub { font-size: 13px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
.activity-when { font-size: 14.5px; text-align: right; white-space: nowrap; }
.link-quiet { font-size: 14.5px; text-decoration: none; }
.link-quiet:hover, .link-quiet:focus-visible { text-decoration: underline; }
.panel-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 18px; }
.panel-title { font-size: 1.12rem; font-weight: 800; letter-spacing: -0.02em; }
.panel-sub { font-size: 14.5px; color: var(--muted); }
.panel.offwhite { background: var(--offwhite); }
.panel.dark { border-color: var(--border-dark); }
.dl { display: grid; grid-template-columns: max-content 1fr; gap: 10px 22px; font-size: 16px; }
.dl dt { color: var(--muted); font-weight: 600; }
.dl dd { font-weight: 600; word-break: break-word; }

/* Stat tiles (dashboard overviews) */
.stat {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 22px;
  border: 1px solid var(--border);
  border-radius: 16px;
  background: var(--white);
}
.stat-label { font-size: 13px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); }
.stat-value { font-size: 30px; font-weight: 800; letter-spacing: -0.02em; color: var(--green); line-height: 1.1; }
.stat-note { font-size: 14px; color: var(--muted); }
.stat.lime { background: var(--lime); border-color: transparent; }
.stat.lime .stat-label, .stat.lime .stat-note { color: rgba(0, 8, 75, 0.7); }
.stat.dark { background: var(--green); border-color: var(--border-dark); }
.stat.dark .stat-value { color: var(--lime); }
.stat.dark .stat-label, .stat.dark .stat-note { color: var(--muted-on-dark); }

/* Course / catalogue cards — same surface language as .case-card */
.course-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
.course-card {
  display: flex;
  flex-direction: column;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  transition: transform 0.35s ease, box-shadow 0.35s ease;
}
.course-card:hover { transform: translateY(-6px); box-shadow: var(--shadow); }
.course-thumb { aspect-ratio: 16 / 9; background: linear-gradient(140deg, var(--green) 0%, var(--green-3) 100%); position: relative; overflow: hidden; }
.course-thumb img { width: 100%; height: 100%; object-fit: cover; }
.course-thumb .thumb-mark { position: absolute; inset: 0; display: grid; place-items: center; color: var(--lime); }
.course-thumb .thumb-mark .icon { width: 46px; height: 46px; }
.course-body { display: flex; flex-direction: column; gap: 10px; padding: 22px 22px 24px; flex: 1; }
.course-body h3 { font-size: 1.15rem; font-weight: 800; }
.course-body p { font-size: 16px; color: var(--muted); }
.course-meta { display: flex; flex-wrap: wrap; gap: 6px; }
.course-foot { margin-top: auto; padding-top: 10px; display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.price { font-size: 1.15rem; font-weight: 800; color: var(--green); }
.price-lg { font-size: 2rem; font-weight: 800; color: var(--green); letter-spacing: -0.02em; }

/* Filters bar */
.filters {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: flex-end;
  padding: 18px;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: 16px;
  margin-bottom: 28px;
}
.filters .field { min-width: 160px; flex: 1; }
.filters .field.grow { flex: 2; }

/* Curriculum list (course detail + player sidebar) */
.curriculum { border: 1px solid var(--border); border-radius: 16px; overflow: hidden; background: var(--white); }
.curriculum-section + .curriculum-section { border-top: 1px solid var(--border); }
.curriculum-section h3 { font-size: 16px; font-weight: 800; padding: 14px 18px; background: var(--offwhite); }
.curriculum-section ol { counter-reset: none; }
.lesson-item { display: flex; align-items: center; gap: 12px; padding: 12px 18px; font-size: 16px; border-top: 1px solid var(--border); }
.lesson-item:first-child { border-top: 0; }
.lesson-item .grow { flex: 1; min-width: 0; }
.lesson-item a { font-weight: 600; }
.lesson-item a:hover { color: var(--green); text-decoration: underline; }
.lesson-item.current { background: rgba(7, 166, 207, 0.2); box-shadow: inset 3px 0 0 var(--green); }
.lesson-tick {
  width: 22px; height: 22px; flex-shrink: 0;
  border-radius: 50%;
  border: 1.5px solid rgba(0, 11, 110, 0.3);
  display: grid; place-items: center;
  font-size: 13px; font-weight: 800; color: var(--green);
}
.lesson-tick.done { background: var(--lime); border-color: var(--lime); }
.lesson-type { font-size: 13px; color: var(--muted); }

/* Admin activity log */
.activity-table td { vertical-align: top; }
.activity-table .badge { white-space: nowrap; }
.activity-table .link { text-decoration: none; }
.activity-table .link:hover, .activity-table .link:focus-visible { text-decoration: underline; }
.activity-sub { display: block; font-size: 13.5px; color: var(--muted); }
.activity-details { min-width: 200px; max-width: 340px; font-size: 14.5px; }
.activity-detail { display: block; line-height: 1.45; word-break: break-word; }
.activity-detail + .activity-detail { margin-top: 2px; }
.lesson-item > .lesson-type { white-space: nowrap; }
.grow { overflow-wrap: anywhere; }

/* ============ Badges ============ */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 13px;
  font-weight: 700;
  line-height: 1.4;
  white-space: nowrap;
  border: 1px solid var(--border);
  background: var(--offwhite);
  color: var(--green);
}
.badge-lime { background: var(--lime); border-color: transparent; color: var(--green); }
.badge-dark { background: var(--green); border-color: transparent; color: var(--lime); }
.badge-success { background: var(--success-bg); color: var(--success); border-color: transparent; }
.badge-warning { background: var(--warning-bg); color: var(--warning); border-color: transparent; }
.badge-danger { background: var(--danger-bg); color: var(--danger); border-color: transparent; }
.badge-info { background: var(--info-bg); color: var(--info); border-color: transparent; }
.badge-muted { background: #f1f1f7; color: var(--muted); border-color: transparent; }

/* ============ Progress bar ============ */
.progress { display: flex; align-items: center; gap: 10px; }
.progress-track { flex: 1; height: 8px; border-radius: 999px; background: rgba(0, 11, 110, 0.1); overflow: hidden; }
.progress-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--green), #07a6cf); }
.progress-fill.done { background: var(--lime); }
.progress-label { font-size: 14px; font-weight: 700; color: var(--green); min-width: 42px; text-align: right; }

/* ============ Tables ============ */
.table-wrap { width: 100%; overflow-x: auto; border: 1px solid var(--border); border-radius: 16px; background: var(--white); }
.table { width: 100%; border-collapse: collapse; font-size: 15px; }
.table th, .table td { text-align: left; padding: 13px 16px; border-bottom: 1px solid var(--border); vertical-align: middle; }
.table th { font-size: 12.5px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); background: var(--offwhite); white-space: nowrap; }
.table tr:last-child td { border-bottom: 0; }
.table tbody tr:hover { background: rgba(246, 247, 250, 0.7); }
.table .actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
.table td.strong, .table .strong { font-weight: 700; }
.empty {
  text-align: center;
  padding: 38px 18px;
  color: var(--muted);
  border: 1px dashed rgba(0, 11, 110, 0.2);
  border-radius: 16px;
  background: var(--white);
}
.empty strong { display: block; color: var(--ink); font-size: 16px; margin-bottom: 4px; }

/* ============ Pagination ============ */
.pagination { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 20px; align-items: center; }
.pagination a, .pagination span {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 38px; height: 38px; padding: 0 12px;
  border-radius: 999px; border: 1px solid var(--border);
  font-size: 15px; font-weight: 700; color: var(--green); background: var(--white);
}
.pagination a:hover { border-color: var(--green); }
.pagination .active { background: var(--green); border-color: var(--green); color: var(--lime); }
.pagination .disabled { opacity: 0.45; }

/* ============ Tabs (in-page navigation) ============ */
.tabs { display: flex; flex-wrap: wrap; gap: 6px; border-bottom: 1px solid var(--border); margin-bottom: 22px; }
.tabs a { padding: 10px 14px; font-size: 15px; font-weight: 700; color: var(--muted); border-bottom: 2px solid transparent; margin-bottom: -1px; }
.tabs a:hover { color: var(--green); }
.tabs a.active { color: var(--green); border-color: var(--lime); }

/* ============ Timeline (service order status) ============ */
.timeline { display: grid; gap: 0; }
.timeline-step { position: relative; display: flex; gap: 14px; padding-bottom: 20px; }
.timeline-step::before { content: ""; position: absolute; left: 11px; top: 24px; bottom: 0; width: 2px; background: rgba(0, 11, 110, 0.14); }
.timeline-step:last-child::before { display: none; }
.timeline-dot { width: 24px; height: 24px; flex-shrink: 0; border-radius: 50%; border: 2px solid rgba(0, 11, 110, 0.25); background: var(--white); display: grid; place-items: center; font-size: 13px; font-weight: 800; color: var(--green); z-index: 1; }
.timeline-step.done .timeline-dot { background: var(--lime); border-color: var(--lime); }
.timeline-step.current .timeline-dot { background: var(--green); border-color: var(--green); color: var(--lime); }
.timeline-step.cancelled .timeline-dot { background: var(--danger-bg); border-color: var(--danger); color: var(--danger); }
.timeline-body strong { display: block; font-size: 16px; }
.timeline-body span { font-size: 14px; color: var(--muted); }

/* ============ Message thread (tickets) ============ */
.thread { display: grid; gap: 14px; }
.message { border: 1px solid var(--border); border-radius: 16px; background: var(--white); padding: 16px 18px; }
.message.staff { background: var(--offwhite); }
.message.note { background: var(--warning-bg); border-color: rgba(138, 90, 0, 0.25); }
.message-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; font-size: 14px; color: var(--muted); margin-bottom: 8px; }
.message-head strong { color: var(--ink); }
.attachments { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.attachments a { font-size: 14px; font-weight: 700; color: var(--green); text-decoration: underline; }

/* ============ Dashboard layout ============ */
.dash-body { background: var(--offwhite); }
.dash { display: grid; grid-template-columns: var(--sidebar-w) minmax(0, 1fr); min-height: 100vh; }
.dash-sidebar {
  position: sticky;
  top: 0;
  height: 100vh;
  overflow-y: auto;
  background: var(--green);
  color: var(--text-on-dark);
  padding: 22px 16px 28px;
  display: flex;
  flex-direction: column;
  gap: 22px;
  z-index: 1150;
}
.dash-sidebar .logo { padding: 2px 8px 10px; }
.dash-sidebar .logo-mark { width: 38px; height: 38px; }
.dash-nav-group { display: flex; flex-direction: column; gap: 2px; }
.dash-nav-title { font-size: 12px; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: var(--lime); padding: 8px 12px 6px; }
.dash-link {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 10px 12px;
  border-radius: 12px;
  font-size: 16px;
  font-weight: 600;
  color: rgba(237, 238, 245, 0.8);
  transition: background 0.2s ease, color 0.2s ease;
}
.dash-link .icon { width: 19px; height: 19px; flex-shrink: 0; }
.dash-link:hover { background: rgba(237, 238, 245, 0.07); color: var(--white); }
.dash-link.active { background: rgba(7, 166, 207, 0.14); color: var(--lime); box-shadow: inset 3px 0 0 var(--lime); }
.dash-link .count { margin-left: auto; font-size: 12.5px; background: var(--lime); color: var(--green); border-radius: 999px; padding: 1px 8px; font-weight: 800; }
.dash-sidebar-foot { margin-top: auto; font-size: 13.5px; color: var(--muted-on-dark); padding: 0 12px; }

.dash-main { display: flex; flex-direction: column; min-width: 0; }
.dash-topbar {
  position: sticky;
  top: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  gap: 14px;
  min-height: 70px;
  padding: 12px clamp(16px, 3vw, 36px);
  background: var(--white); /* opaque: content scrolling underneath must not show through */
  border-bottom: 1px solid var(--border);
}
.dash-topbar h1 { margin: 0; font-size: 1.2rem; line-height: 1.3; font-weight: 800; letter-spacing: -0.02em; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash-user { display: flex; align-items: center; gap: 12px; flex-shrink: 0; font-size: 15px; }
/* Ring keeps white/transparent avatars visible against the white topbar */
.dash-user .avatar-sm { flex-shrink: 0; width: 38px; height: 38px; border-radius: 50%; background: var(--green); color: var(--lime); display: grid; place-items: center; font-size: 14px; font-weight: 800; overflow: hidden; border: 1px solid var(--border); box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.04), 0 1px 3px rgba(15, 23, 42, 0.12); }
.dash-user .avatar-sm.has-photo { position: relative; background: var(--white); }
.dash-user .avatar-sm.has-photo img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; max-width: none; object-fit: cover; object-position: center 30%; border-radius: inherit; }
.dash-user-meta { display: flex; flex-direction: column; justify-content: center; gap: 2px; line-height: 1.2; }
.dash-user-name { font-weight: 700; line-height: 1.2; white-space: nowrap; }
.dash-user-role { font-size: 13px; line-height: 1.2; color: var(--muted); }
.dash-logout { display: flex; align-items: center; margin: 0; }
.dash-toggle { display: none; border-color: var(--border); }
.dash-toggle span { background: var(--green); }
.dash-content { padding: clamp(20px, 3vw, 36px); display: flex; flex-direction: column; gap: 24px; }
.dash-content > .alert { margin-bottom: 0; }
.dash-backdrop { display: none; }
.page-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: space-between; }
.page-actions h2 { font-size: 1.5rem; font-weight: 800; letter-spacing: -0.03em; }

/* Sortable lists (drag-and-drop reorder) */
.sortable { display: grid; gap: 8px; }
.sortable-item { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--white); }
.sortable-item.dragging { opacity: 0.5; border-style: dashed; }
.sortable-item.drag-over { border-color: var(--green); box-shadow: 0 0 0 2px var(--lime); }
.drag-handle { cursor: grab; color: var(--muted); font-size: 18px; line-height: 1; user-select: none; padding: 2px 4px; }
.sortable-item .grow { flex: 1; min-width: 0; }
.section-block { border: 1px solid var(--border); border-radius: 16px; padding: 16px; background: var(--offwhite); }
.section-block + .section-block { margin-top: 14px; }
/* Grid items default to min-width: auto, which let a lesson row's buttons push the block past the panel on phones */
.sortable > * { min-width: 0; }
@media (max-width: 560px) {
  .section-block { padding: 12px; }
  /* Lesson rows: title takes the full line, the ↑ ↓ Edit buttons wrap underneath it */
  .sortable-item { flex-wrap: wrap; gap: 8px 10px; padding: 12px; }
  .sortable-item .grow { flex: 1 1 calc(100% - 48px); }
  .sortable-item > .btn:first-of-type { margin-left: 22px; }
}

/* ============ Lesson player ============ */
.player-layout { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 24px; align-items: start; }
.player-frame { position: relative; aspect-ratio: 16 / 9; background: #000; border-radius: var(--radius); overflow: hidden; }
.player-frame iframe, .player-frame #ytPlayer { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.player-side { position: sticky; top: 90px; max-height: calc(100vh - 110px); overflow-y: auto; }
.player-nav { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.player-status { font-size: 14.5px; color: var(--muted); }

/* ============ Chart (admin revenue) ============ */
.chart { width: 100%; height: auto; display: block; }
.chart .bar { fill: var(--green); }
.chart .bar:hover { fill: #07a6cf; }
.chart .bar.current { fill: var(--lime); }
.chart text { font-family: var(--font); font-size: 12px; fill: var(--muted); }
.chart .grid-line { stroke: rgba(0, 11, 110, 0.1); stroke-width: 1; }

/* ============ Slot picker ============ */
.slot-day { margin-bottom: 18px; }
.slot-day h3 { font-size: 16px; font-weight: 800; margin-bottom: 10px; }
.slot-list { display: flex; flex-wrap: wrap; gap: 8px; }
.slot { position: relative; }
.slot input { position: absolute; opacity: 0; }
.slot span { display: inline-block; padding: 9px 14px; border: 1px solid rgba(0, 11, 110, 0.22); border-radius: 999px; font-size: 15px; font-weight: 700; cursor: pointer; background: var(--white); }
.slot input:checked + span { background: var(--green); border-color: var(--green); color: var(--lime); }
.slot input:focus-visible + span { outline: 2px solid var(--lime); outline-offset: 2px; }

/* ============ Package cards ============ */
.package-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.package-card { display: flex; flex-direction: column; gap: 12px; padding: 26px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--white); }
.package-card.featured { background: var(--green); color: var(--text-on-dark); border-color: var(--border-dark); }
.package-card.featured .price-lg { color: var(--lime); }
.package-card.featured .muted { color: var(--muted-on-dark); }
.package-card h3 { font-size: 1.2rem; font-weight: 800; }
.feature-list { display: grid; gap: 8px; font-size: 16px; }
.feature-list li { display: flex; gap: 8px; }
.feature-list li::before { content: "✓"; color: var(--green); font-weight: 800; }
.package-card.featured .feature-list li::before { color: var(--lime); }
.package-card .btn { margin-top: auto; }

/* Verify page result */
.verify-result { text-align: center; }
.verify-icon { width: 72px; height: 72px; border-radius: 50%; display: grid; place-items: center; margin: 0 auto 18px; font-size: 34px; font-weight: 800; }
.verify-icon.valid { background: var(--lime); color: var(--green); }
.verify-icon.revoked { background: var(--danger-bg); color: var(--danger); }
.verify-icon.missing { background: #f1f1f7; color: var(--muted); }

/* Contact page */
.contact-layout { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 32px; align-items: start; }
.contact-aside .contact-chips { justify-content: flex-start; }

/* Error pages */
.error-code { font-size: clamp(4rem, 12vw, 7rem); font-weight: 800; letter-spacing: -0.04em; color: var(--lime); line-height: 1; }
/* 500 page: the support reference, on the navy hero (light text, monospace code) */
.error-detail { margin-top: 10px; font-size: 16px; color: rgba(237, 238, 245, 0.85); }
.error-ref { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; letter-spacing: 0.04em; color: var(--white); }

/* ============ Responsive ============ */
@media (max-width: 1080px) {
  .grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .player-layout { grid-template-columns: 1fr; }
  .player-side { position: static; max-height: none; }
}

@media (max-width: 992px) {
  .dash { grid-template-columns: minmax(0, 1fr); }
  .dash-sidebar {
    position: fixed;
    inset: 0 auto 0 0;
    width: min(300px, 86vw);
    transform: translateX(-102%);
    transition: transform 0.3s ease;
  }
  .dash.menu-open .dash-sidebar { transform: translateX(0); box-shadow: var(--shadow); }
  .dash.menu-open .dash-backdrop { display: block; position: fixed; inset: 0; background: rgba(0, 6, 60, 0.45); z-index: 1100; }
  .dash-toggle { display: flex; }
  .course-grid, .grid-3, .package-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .contact-layout { grid-template-columns: 1fr; }
}

@media (max-width: 620px) {
  .grid-2, .grid-3, .grid-4, .course-grid, .package-grid, .form-grid, .choice-grid { grid-template-columns: minmax(0, 1fr); }
  .dash-user-meta { display: none; }
  .dl { grid-template-columns: 1fr; gap: 2px 0; }
  .dl dd { margin-bottom: 10px; }
  .table th, .table td { padding: 11px 12px; }
  .codes { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .course-card, .dash-sidebar { transition: none; }
}

@media print {
  .dash-sidebar, .dash-topbar, .dash-backdrop, .form-actions, .announce, .header, .footer, .back-top { display: none !important; }
  .dash { display: block; }
  .dash-body, .dash-content { background: #fff; padding: 0; }
  .panel { border: 0; }
}

/* ============ Confirmation dialog ============ */
.confirm-dialog {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 26px;
  max-width: min(440px, 92vw);
  margin: auto; /* the original CSS reset zeroes the margin <dialog> needs for centring */
  box-shadow: var(--shadow);
  color: var(--ink);
}
.confirm-dialog::backdrop { background: rgba(0, 6, 60, 0.5); }
.confirm-dialog .confirm-text { font-size: 16px; font-weight: 700; margin-bottom: 20px; }
.confirm-dialog .form-actions { justify-content: flex-end; }

/* Whole home-page service card is clickable (link on the title). */
.service-card { position: relative; }
.stretched-link::after { content: ""; position: absolute; inset: 0; z-index: 1; border-radius: inherit; }

/* Two-column page layouts with custom column widths (set inline) stack on tablets and phones. */
@media (max-width: 992px) {
  .grid-2[style*="grid-template-columns"],
  .player-layout[style*="grid-template-columns"] {
    grid-template-columns: minmax(0, 1fr) !important;
  }
}

/* Long button labels wrap instead of pushing the page sideways on small phones (new pages only). */
@media (max-width: 620px) {
  .dash-content .btn,
  .auth-card .btn,
  .page-section .panel .btn {
    white-space: normal;
    text-align: center;
    line-height: 1.25;
  }
  .input[type="file"] { min-width: 0; max-width: 100%; }
}

/* Nav actions: Log in link beside the "Let's Talk" button (announcement bar removed) */
.nav-actions {
  display: flex;
  align-items: center;
  gap: 22px;
}

/* Syo Technol logo image (replaces the original SVG mark + text wordmark) */
.logo-img {
  display: block;
  height: 40px;
  width: auto;
  max-width: 100%;
}
.footer .logo-img { height: 46px; }
.dash-sidebar .logo-img { height: 34px; }
@media (max-width: 480px) {
  .header .logo-img { height: 34px; }
}

/* ============ Hero (refined layout) ============
   Same tokens as style.css; tighter type scale so the hero fits one screen. */
.hero--refined {
  padding-block: clamp(64px, 9vh, 104px) clamp(64px, 9vh, 96px);
}

.hero--refined .hero-title {
  font-size: clamp(2.35rem, 4.2vw, 3.7rem);
  line-height: 1.04;
  max-width: 11.5em;
  text-wrap: balance;
  margin-bottom: 22px;
}

.hero--refined .hero-sub {
  max-width: 46ch;
  color: rgba(237, 238, 245, 0.8);
  margin-bottom: 32px;
}

.hero--refined .hero-cta {
  margin-bottom: 40px;
}

.hero-stats {
  display: grid;
  grid-template-columns: repeat(3, auto);
  justify-content: start;
  gap: 0;
  margin: 0;
  padding-top: 26px;
  border-top: 1px solid rgba(237, 238, 245, 0.12);
}

.hero-stat {
  display: flex;
  flex-direction: column-reverse;
  justify-content: flex-end; /* reversed column: keeps the figures top-aligned */
  gap: 4px;
  padding-inline: 28px;
  border-left: 1px solid rgba(237, 238, 245, 0.12);
}

.hero-stat:first-child {
  padding-left: 0;
  border-left: 0;
}

.hero-stat dd {
  margin: 0;
  font-size: 28px;
  font-weight: 800;
  letter-spacing: -0.02em;
  line-height: 1.1;
  color: var(--lime);
}

.hero-stat dt {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(237, 238, 245, 0.6);
}

.hero--refined .hero-img-wrap img {
  height: clamp(420px, 62vh, 560px);
}

@media (max-width: 620px) {
  .hero--refined { padding-block: 56px 64px; }
  .hero-stat { padding-inline: 16px; }
  .hero-stat dd { font-size: 22px; }
  .hero-stat dt { font-size: 12px; letter-spacing: 0.06em; }
  .hero--refined .hero-img-wrap img { height: 360px; }
}

/* ============ Syo Technol brand finish ============
   Palette: primary #07a6cf (--lime token), secondary #000b6e (--green token).
   Token names are kept from the original design so every component follows. */
:root {
  --brand-gradient: linear-gradient(135deg, #07a6cf 0%, #41bbda 100%);
  --navy-gradient: linear-gradient(160deg, #000b6e 0%, #00084e 62%, #00063b 100%);
}

/* Deep navy surfaces with a soft blue light source */
.hero,
.page-hero {
  background:
    radial-gradient(900px 520px at 88% -8%, rgba(7, 166, 207, 0.3), transparent 62%),
    radial-gradient(700px 480px at -6% 108%, rgba(6, 138, 172, 0.22), transparent 60%),
    var(--navy-gradient);
}

.dark,
.dash-sidebar {
  background:
    radial-gradient(800px 420px at 100% 0%, rgba(7, 166, 207, 0.16), transparent 60%),
    var(--navy-gradient);
}

.footer {
  background:
    radial-gradient(700px 360px at 0% 0%, rgba(7, 166, 207, 0.1), transparent 60%),
    #00063b;
}

/* Glassy sticky header */
.header {
  background: rgba(0, 11, 110, 0.97);
  -webkit-backdrop-filter: saturate(160%) blur(14px);
  backdrop-filter: saturate(160%) blur(14px);
}

/* Gradient highlight word */
.hero-title .hl,
.cta-title .hl {
  background: linear-gradient(90deg, #07a6cf 0%, #7fd1e6 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* Primary buttons: see "Buttons" below (flat fill, white label). */

.btn-primary:focus-visible,
.btn:focus-visible {
  outline: 3px solid #7fd1e6;
  outline-offset: 3px;
}

/* Feature card in the brand colour */
.card-lime {
  background: var(--brand-gradient);
  box-shadow: 0 24px 50px rgba(7, 166, 207, 0.28);
}

.card-lime .feature-icon {
  background: var(--green);
}

/* Cards: crisper edges and blue-tinted depth on hover */
.feature-card,
.service-card,
.case-card,
.info-card,
.course-card,
.package-card,
.panel {
  border-color: rgba(0, 11, 110, 0.08);
}

.service-card:hover,
.case-card:hover,
.feature-card:hover {
  box-shadow: 0 24px 54px rgba(0, 11, 110, 0.12);
}

::selection {
  background: rgba(7, 166, 207, 0.3);
  color: inherit;
}

/* Icons whose shapes had no fill set rendered black: tint them with the current colour */
.trust-stars .star,
.quote-mark {
  fill: currentColor;
}

#i-chip rect {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
}

/* Contact chips: keep the icon on the same line as its text */
.contact-chips li > a,
.contact-chips li > span,
.footer-contact li > a,
.footer-contact li > span {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.footer-contact li > span { align-items: flex-start; }
.footer-contact li > span .icon { margin-top: 3px; flex-shrink: 0; }

/* ============ About (bento layout) ============ */
.about-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: clamp(40px, 6vw, 88px);
  align-items: center;
}

.about-copy .section-title {
  max-width: 13em;
  text-wrap: balance;
  margin-bottom: 18px;
}

.about-text {
  max-width: 46ch;
  font-size: 16.5px;
  line-height: 1.75;
  color: var(--muted);
  margin-bottom: 26px;
}

.about-list {
  display: grid;
  gap: 14px;
  margin-bottom: 32px;
}

.about-list li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: 16px;
  line-height: 1.55;
  color: var(--muted);
}

.about-list strong {
  color: var(--ink);
  font-weight: 700;
}

.about-check {
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  flex-shrink: 0;
  margin-top: 1px;
  border-radius: 8px;
  background: rgba(7, 166, 207, 0.14);
  color: var(--green);
}

.about-check .icon {
  width: 14px;
  height: 14px;
}

.about-bento {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 18px;
}

.bento-media {
  position: relative;
  grid-column: 1 / -1;
  margin: 0;
  border-radius: var(--radius);
  overflow: hidden;
  aspect-ratio: 16 / 9;
  box-shadow: 0 30px 60px rgba(0, 11, 110, 0.16);
}

.bento-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s ease;
}

.bento-media:hover img {
  transform: scale(1.04);
}

.bento-badge {
  position: absolute;
  left: 16px;
  bottom: 16px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 16px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.94);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  font-size: 14px;
  font-weight: 700;
  color: var(--green);
  box-shadow: var(--shadow-sm);
}

.bento-badge .icon {
  width: 16px;
  height: 16px;
  color: var(--lime);
}

.bento-card {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 26px;
  border-radius: var(--radius);
  min-height: 100%;
}

.bento-card h3 {
  font-size: 1.15rem;
  font-weight: 800;
  letter-spacing: -0.01em;
}

.bento-card p {
  font-size: 16px;
  line-height: 1.65;
}

.bento-card--navy {
  background:
    radial-gradient(320px 200px at 100% 0%, rgba(7, 166, 207, 0.25), transparent 70%),
    var(--green);
  color: var(--text-on-dark);
}

.bento-card--navy h3 { color: var(--white); }
.bento-card--navy p { color: var(--muted-on-dark); }

.bento-card--blue {
  background: var(--brand-gradient);
  color: var(--green);
}

.bento-card--blue p { color: rgba(0, 11, 110, 0.82); }

.bento-icon {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  margin-bottom: 6px;
  border-radius: 13px;
}

.bento-card--navy .bento-icon { background: rgba(7, 166, 207, 0.18); color: var(--lime); }
.bento-card--blue .bento-icon { background: var(--green); color: var(--lime); }

.bento-icon .icon { width: 22px; height: 22px; }

@media (max-width: 992px) {
  .about-grid { grid-template-columns: 1fr; }
}

@media (max-width: 560px) {
  .about-bento { grid-template-columns: 1fr; }
  .bento-media { aspect-ratio: 4 / 3; }
}

#i-compass circle {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
}

/* ============ CTA (split layout) ============ */
.cta--split {
  text-align: left;
}

.cta-split {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);
  gap: clamp(40px, 6vw, 88px);
  align-items: center;
}

.cta--split .cta-title {
  max-width: 12em;
  text-wrap: balance;
}

.cta--split .cta-text {
  max-width: 46ch;
  margin-bottom: 32px;
}

.cta-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
}

.cta-buttons .btn-outline-light .icon {
  width: 19px;
  height: 19px;
}

.cta-card {
  padding: clamp(26px, 3vw, 36px);
  border-radius: calc(var(--radius) + 6px);
  border: 1px solid rgba(237, 238, 245, 0.14);
  background: linear-gradient(160deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.03) 100%);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  box-shadow: 0 30px 70px rgba(0, 6, 60, 0.45);
}

.cta-card-title {
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted-on-dark);
  margin-bottom: 18px;
}

.cta-contact {
  display: grid;
}

.cta-contact li {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding-block: 16px;
  border-top: 1px solid rgba(237, 238, 245, 0.1);
}

.cta-contact li:first-child {
  border-top: 0;
  padding-top: 0;
}

.cta-contact-icon {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  flex-shrink: 0;
  border-radius: 13px;
  background: rgba(7, 166, 207, 0.16);
  color: var(--lime);
}

.cta-contact-icon .icon {
  width: 20px;
  height: 20px;
}

.cta-contact-body {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.5;
  color: var(--white);
  overflow-wrap: anywhere;
}

.cta-contact-body a:hover {
  color: var(--lime);
}

.cta-contact-label {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted-on-dark);
}

.cta-card-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-top: 8px;
  padding: 14px 18px;
  border-radius: 14px;
  background: rgba(7, 166, 207, 0.12);
  font-size: 16px;
  font-weight: 700;
  color: var(--lime);
  transition: background 0.25s ease;
}

.cta-card-link:hover {
  background: rgba(7, 166, 207, 0.2);
}

@media (max-width: 992px) {
  .cta-split { grid-template-columns: 1fr; }
}

@media (max-width: 480px) {
  .cta-buttons .btn { width: 100%; justify-content: center; }
}

/* ============ Why choose us (reasons grid) ============ */
.why-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
  gap: clamp(40px, 6vw, 88px);
  align-items: start;
}

.why-intro {
  position: sticky;
  top: 120px;
}

.why-intro .section-title {
  max-width: 11em;
  text-wrap: balance;
  margin-bottom: 18px;
}

.why-text {
  max-width: 44ch;
  font-size: 16.5px;
  line-height: 1.75;
  color: var(--muted);
  margin-bottom: 30px;
}

.why-cards {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 20px;
}

.why-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 28px;
  border-radius: var(--radius);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
  box-shadow: 0 1px 2px rgba(0, 11, 110, 0.04);
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
  overflow: hidden;
}

/* Brand gradient bar that grows on hover */
.why-card::after {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  height: 3px;
  width: 100%;
  background: var(--brand-gradient);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.4s ease;
}

.why-card:hover {
  transform: translateY(-6px);
  border-color: rgba(7, 166, 207, 0.35);
  box-shadow: 0 24px 50px rgba(0, 11, 110, 0.12);
}

.why-card:hover::after {
  transform: scaleX(1);
}

.why-card-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}

.why-icon {
  display: grid;
  place-items: center;
  width: 50px;
  height: 50px;
  border-radius: 14px;
  background: rgba(7, 166, 207, 0.12);
  color: var(--green);
  transition: background 0.3s ease, color 0.3s ease;
}

.why-card:hover .why-icon {
  background: var(--green);
  color: var(--lime);
}

.why-icon .icon {
  width: 24px;
  height: 24px;
}

.why-num {
  font-size: 14px;
  font-weight: 800;
  letter-spacing: 0.08em;
  color: rgba(0, 11, 110, 0.28);
}

.why-card h3 {
  font-size: 1.15rem;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--ink);
}

.why-card p {
  font-size: 16px;
  line-height: 1.65;
  color: var(--muted);
}

@media (max-width: 992px) {
  .why-grid { grid-template-columns: 1fr; }
  .why-intro { position: static; }
}

@media (max-width: 560px) {
  .why-cards { grid-template-columns: 1fr; }
}

/* ============ Services (rich cards, navy on hover) ============ */
.svc-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 28px;
  margin-bottom: clamp(36px, 5vw, 56px);
}

.svc-head .section-title {
  max-width: 13em;
  text-wrap: balance;
  margin-bottom: 14px;
}

.svc-intro {
  max-width: 52ch;
  font-size: 16.5px;
  line-height: 1.7;
  color: var(--muted);
}

.svc-head .btn {
  flex-shrink: 0;
}

.svc-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 22px;
}

.svc-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: clamp(26px, 3vw, 36px);
  border-radius: calc(var(--radius) + 4px);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
  overflow: hidden;
  isolation: isolate;
  transition: transform 0.35s ease, box-shadow 0.35s ease, color 0.35s ease;
}

/* Navy layer that fades in on hover */
.svc-card::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(420px 240px at 100% 0%, rgba(7, 166, 207, 0.3), transparent 70%),
    var(--green);
  opacity: 0;
  transition: opacity 0.35s ease;
}

.svc-card:hover,
.svc-card:focus-within {
  transform: translateY(-6px);
  box-shadow: 0 30px 60px rgba(0, 11, 110, 0.22);
}

.svc-card:hover::before,
.svc-card:focus-within::before {
  opacity: 1;
}

.svc-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}

.svc-icon {
  display: grid;
  place-items: center;
  width: 58px;
  height: 58px;
  border-radius: 16px;
  background: var(--brand-gradient);
  color: var(--green);
  box-shadow: 0 12px 26px rgba(7, 166, 207, 0.3);
}

.svc-icon .icon {
  width: 26px;
  height: 26px;
}

.svc-num {
  font-size: 15px;
  font-weight: 800;
  letter-spacing: 0.08em;
  color: rgba(0, 11, 110, 0.25);
  transition: color 0.35s ease;
}

.svc-card h3 {
  font-size: 1.35rem;
  font-weight: 800;
  letter-spacing: -0.015em;
  color: var(--ink);
  transition: color 0.35s ease;
}

.svc-card p {
  font-size: 16px;
  line-height: 1.65;
  color: var(--muted);
  transition: color 0.35s ease;
}

.svc-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-top: auto;
  padding-top: 18px;
  border-top: 1px solid rgba(0, 11, 110, 0.08);
  transition: border-color 0.35s ease;
}

.svc-price {
  padding: 6px 12px;
  border-radius: 999px;
  background: rgba(7, 166, 207, 0.12);
  font-size: 14px;
  font-weight: 800;
  color: var(--green);
  transition: background 0.35s ease, color 0.35s ease;
}

.svc-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 16px;
  font-weight: 700;
  color: var(--green);
  transition: color 0.35s ease, gap 0.35s ease;
}

.svc-card:hover h3,
.svc-card:focus-within h3 { color: var(--white); }
.svc-card:hover p,
.svc-card:focus-within p { color: var(--muted-on-dark); }
.svc-card:hover .svc-num,
.svc-card:focus-within .svc-num { color: rgba(237, 238, 245, 0.4); }
.svc-card:hover .svc-card-foot,
.svc-card:focus-within .svc-card-foot { border-color: rgba(237, 238, 245, 0.14); }
.svc-card:hover .svc-price,
.svc-card:focus-within .svc-price { background: rgba(7, 166, 207, 0.2); color: var(--lime); }
.svc-card:hover .svc-link,
.svc-card:focus-within .svc-link { color: var(--lime); gap: 12px; }

@media (max-width: 760px) {
  .svc-head { flex-direction: column; align-items: flex-start; }
  .svc-grid { grid-template-columns: 1fr; }
}

/* ============ Portfolio (bento gallery) ============ */
.folio-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  grid-auto-rows: clamp(220px, 22vw, 290px);
  gap: 20px;
}

.folio-tile {
  position: relative;
  margin: 0;
  border-radius: calc(var(--radius) + 4px);
  overflow: hidden;
  background: var(--green);
  box-shadow: 0 18px 40px rgba(0, 11, 110, 0.1);
}

.folio-tile--tall {
  grid-row: span 2;
}

.folio-tile img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s ease;
}

.folio-tile:hover img {
  transform: scale(1.05);
}

.folio-tile figcaption {
  position: absolute;
  inset: auto 0 0 0;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  padding: 60px 22px 20px;
  background: linear-gradient(180deg, transparent 0%, rgba(0, 6, 60, 0.85) 100%);
  color: var(--white);
}

.folio-tile figcaption strong {
  font-size: 1.1rem;
  font-weight: 800;
  letter-spacing: -0.01em;
}

.folio-tag {
  padding: 5px 11px;
  border-radius: 999px;
  background: var(--lime);
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--green);
}

.folio-web {
  grid-column: span 2;
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: clamp(24px, 3vw, 34px);
  background:
    radial-gradient(480px 260px at 100% 0%, rgba(7, 166, 207, 0.3), transparent 70%),
    var(--navy-gradient);
  color: var(--text-on-dark);
}

.folio-web-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}

.folio-web-count {
  font-size: 14.5px;
  color: var(--muted-on-dark);
}

.folio-web-count strong {
  font-size: 1.4rem;
  font-weight: 800;
  color: var(--lime);
  margin-right: 4px;
}

.folio-web h3 {
  max-width: 28ch;
  font-size: clamp(1.2rem, 1.8vw, 1.5rem);
  font-weight: 800;
  line-height: 1.3;
  letter-spacing: -0.015em;
  color: var(--white);
}

.folio-web-links {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: auto;
}

.folio-web-links a {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 14px;
  border-radius: 999px;
  border: 1px solid rgba(237, 238, 245, 0.18);
  background: rgba(255, 255, 255, 0.04);
  font-size: 14.5px;
  font-weight: 700;
  color: var(--white);
  transition: border-color 0.25s ease, background 0.25s ease, color 0.25s ease;
}

.folio-web-links a:hover {
  border-color: var(--lime);
  background: rgba(7, 166, 207, 0.14);
  color: var(--lime);
}

.folio-web-links .icon {
  width: 14px;
  height: 14px;
  color: var(--lime);
}

@media (max-width: 992px) {
  .folio-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: 260px; }
  .folio-web { grid-column: 1 / -1; }
}

@media (max-width: 560px) {
  .folio-grid { grid-template-columns: 1fr; grid-auto-rows: auto; }
  .folio-tile { aspect-ratio: 4 / 3; }
  .folio-tile--tall { grid-row: auto; }
  .folio-web { grid-column: auto; aspect-ratio: auto; }
}

/* ============ Clients: editorial index ============
   Client names set as large type with slash separators; a chip filter dims other industries. */
.cx-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 32px;
  padding-bottom: clamp(28px, 4vw, 40px);
  border-bottom: 1px solid rgba(0, 11, 110, 0.1);
}

.cx-head .section-title {
  max-width: 12em;
  text-wrap: balance;
}

.cx-stats {
  display: flex;
  gap: clamp(28px, 4vw, 56px);
  margin: 0;
}

.cx-stats > div {
  display: flex;
  flex-direction: column-reverse;
  justify-content: flex-end;
  gap: 6px;
}

.cx-stats dd {
  margin: 0;
  font-family: var(--font-heading);
  font-size: clamp(2.2rem, 4vw, 3.2rem);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.04em;
  color: var(--green);
}

.cx-stats dt {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}

.cx-filter {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-block: clamp(28px, 4vw, 40px);
}

.cx-chip {
  padding: 8px 16px;
  border-radius: 8px;
  border: 1px solid rgba(0, 11, 110, 0.14);
  background: var(--white);
  font: inherit;
  font-size: 14.5px;
  font-weight: 700;
  color: var(--muted);
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.cx-chip:hover {
  border-color: var(--green);
  color: var(--green);
}

.cx-chip[aria-pressed="true"] {
  background: var(--green);
  border-color: var(--green);
  color: var(--white);
}

.cx-chip:focus-visible {
  outline: 3px solid #7fd1e6;
  outline-offset: 2px;
}

.cx-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  flex-wrap: wrap;
  margin-top: clamp(36px, 5vw, 56px);
  padding-top: clamp(24px, 3vw, 32px);
  border-top: 1px solid rgba(0, 11, 110, 0.1);
}

.cx-foot p {
  font-family: var(--font-heading);
  font-size: clamp(1.05rem, 1.6vw, 1.3rem);
  font-weight: 700;
  color: var(--ink);
}

@media (max-width: 760px) {
  .cx-head { flex-direction: column; align-items: flex-start; }

}

@media (prefers-reduced-motion: reduce) {
  .cl-tile a, .cl-site .icon { transition: none; }
}

/* ============ Orbit background: rings, grain and soft light ============
   Shared by every dark navy hero-style surface (home hero, inner-page heroes,
   the home CTA and error pages). Replaces the generic square grid.
   Move the ring centre per section with --orbit-x / --orbit-y. */
.orbit-bg {
  --orbit-x: 72%;
  --orbit-y: 46%;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background:
    radial-gradient(1100px 700px at var(--orbit-x) var(--orbit-y), rgba(7, 166, 207, 0.55), transparent 65%),
    radial-gradient(900px 600px at 0% 100%, rgba(15, 25, 119, 0.6), transparent 60%),
    linear-gradient(165deg, #061071 0%, #000958 55%, #00063c 100%);
}

.orbit-bg .hero-grid,
.orbit-bg .cta-grid-bg {
  display: none;
}

.orbit-bg > .hero-bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}

/* Concentric orbit rings, fading out from the focal point */
.orbit-bg > .hero-bg::before {
  content: "";
  position: absolute;
  inset: -20% -10%;
  background: repeating-radial-gradient(
    circle at var(--orbit-x) var(--orbit-y),
    rgba(127, 209, 230, 0.11) 0 1px,
    transparent 1.5px 72px
  );
  -webkit-mask-image: radial-gradient(circle at var(--orbit-x) var(--orbit-y), #000 0%, rgba(0, 0, 0, 0.6) 35%, transparent 62%);
  mask-image: radial-gradient(circle at var(--orbit-x) var(--orbit-y), #000 0%, rgba(0, 0, 0, 0.6) 35%, transparent 62%);
}

/* Fine film grain for depth */
.orbit-bg > .hero-bg::after {
  content: "";
  position: absolute;
  inset: 0;
  opacity: 0.07;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* Hairline brand gradient along the bottom edge */
.orbit-bg::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, rgba(7, 166, 207, 0.6) 50%, transparent 100%);
  z-index: 1;
}

/* Ring centre per surface */
.page-hero.orbit-bg { --orbit-x: 88%; --orbit-y: 40%; }
.cta.orbit-bg { --orbit-x: 76%; --orbit-y: 50%; }

/* Home hero: one focused light behind the photo, one deep pool bottom-left */
.hero--refined .glow-1 {
  width: 620px;
  height: 620px;
  top: 2%;
  right: 4%;
  background: rgba(7, 166, 207, 0.22);
  filter: blur(120px);
}

.hero--refined .glow-2 {
  width: 520px;
  height: 520px;
  bottom: -220px;
  left: -160px;
  background: rgba(7, 166, 207, 0.18);
  filter: blur(120px);
}

/* Photo: offset outline frame, hairline edge, deeper and softer shadow */
.hero--refined .hero-visual {
  isolation: isolate;
}

.hero--refined .hero-visual::before {
  content: "";
  position: absolute;
  inset: 22px -22px -22px 22px;
  z-index: -1;
  border: 1px solid rgba(127, 209, 230, 0.28);
  border-radius: 30px;
}

.hero--refined .hero-img-wrap {
  border-radius: 28px;
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, 0.12),
    0 50px 100px -20px rgba(0, 5, 48, 0.75),
    0 30px 60px -30px rgba(7, 166, 207, 0.35);
}

/* Cleaner divider under the CTA row */
.hero--refined .hero-stats {
  border-top-color: rgba(127, 209, 230, 0.14);
}

.hero--refined .hero-stat {
  border-left-color: rgba(127, 209, 230, 0.14);
}

@media (max-width: 992px) {
  .hero--refined.orbit-bg { --orbit-x: 50%; --orbit-y: 78%; }
  .page-hero.orbit-bg { --orbit-x: 92%; --orbit-y: 30%; }
  .cta.orbit-bg { --orbit-x: 50%; --orbit-y: 78%; }
  .hero--refined .hero-visual::before { inset: 16px -12px -16px 12px; }
}

/* Hero headline: title case (no forced capitals) and extra weight.
   Manrope stops at 800, so a hairline stroke in the text colour adds weight without faux bold. */
.hero--refined .hero-title {
  text-transform: none;
  font-weight: 800;
  letter-spacing: -0.025em;
  line-height: 1.04;
  -webkit-text-stroke: 1.2px currentColor;
  paint-order: stroke fill;
}

.hero--refined .hero-title .hl {
  -webkit-text-stroke: 1.2px #41bbda;
}

/* ============ Buttons ============
   One shape across the project: 8px corners, flat fill, heavy label.
   Primary uses a deeper shade of the brand blue so white text stays readable (4.8:1). */
.btn {
  border-radius: 8px;
  padding: 14px 24px;
  font-size: 16px;
  font-weight: 800;
  letter-spacing: -0.005em;
}

.btn-lg {
  padding: 17px 30px;
  font-size: 16px;
}

.btn-sm {
  padding: 9px 15px;
  font-size: 14px;
  border-radius: 7px;
}

/* Same 44px height as the cart and account circles beside it */
.btn-nav {
  min-height: 44px;
  padding: 14px 22px;
  font-size: 14.5px;
}

.btn-primary {
  background: #057c9a;
  color: var(--white);
  box-shadow: none;
}

.btn-primary:hover {
  background: #046a84;
  color: var(--white);
  transform: translateY(-1px);
  box-shadow: 0 10px 24px rgba(5, 124, 154, 0.3);
}

.btn-dark:hover,
.btn-outline-dark:hover,
.btn-outline-light:hover,
.btn-danger:hover {
  transform: translateY(-1px);
}

.btn-outline-dark {
  border-color: rgba(0, 11, 110, 0.22);
}

.btn:focus-visible {
  outline: 3px solid #7fd1e6;
  outline-offset: 2px;
}

/* Three-sentence headline: sized so each sentence sits on its own line */
.hero--refined .hero-title {
  font-size: clamp(2rem, 3.6vw, 3.4rem);
  max-width: none;
}

/* Headline line spacing: a little more air between the three sentences */
.hero--refined .hero-title {
  line-height: 1.16;
}

/* ============ Heading typeface: Raleway (Google Fonts), Cygre / General Sans as fallbacks ============
   Headings and big numbers; body text, buttons and forms use --font.
   Cygre (RandomMaerks, licensed via Gumroad) is self-hosted from public/assets/fonts/cygre/
   because it is not on Google Fonts and the CSP only allows fonts from self and
   fonts.gstatic.com. Until those files are added, headings fall back to General Sans
   (self-hosted, ITF Free Font License, public/assets/fonts/general-sans/). */
@font-face {
  font-family: "Cygre";
  src: url("../fonts/cygre/Cygre-Medium.woff2") format("woff2"),
       url("../fonts/cygre/Cygre-Medium.ttf") format("truetype");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Cygre";
  src: url("../fonts/cygre/Cygre-SemiBold.woff2") format("woff2"),
       url("../fonts/cygre/Cygre-SemiBold.ttf") format("truetype");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Cygre";
  src: url("../fonts/cygre/Cygre-Bold.woff2") format("woff2"),
       url("../fonts/cygre/Cygre-Bold.ttf") format("truetype");
  font-weight: 700 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "General Sans";
  src: url("../fonts/general-sans/GeneralSans-Medium.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "General Sans";
  src: url("../fonts/general-sans/GeneralSans-Semibold.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "General Sans";
  /* also serves 800: General Sans stops at 700 */
  src: url("../fonts/general-sans/GeneralSans-Bold.woff2") format("woff2");
  font-weight: 700 800;
  font-style: normal;
  font-display: swap;
}
:root {
  --font-heading: "Raleway", "Cygre", "General Sans", "Mulish", ui-sans-serif, system-ui, sans-serif;
}

h1, h2, h3, h4, h5, h6,
.section-title,
.hero-title,
.cta-title,
.page-hero h1,
.panel-title,
.error-code,
.fc-num,
.hero-stat dd,
.clients-stats dd,
.folio-web-count strong,
.stat-value,
.price-lg {
  font-family: var(--font-heading);
  /* Raleway defaults to old-style figures; keep numbers at cap height */
  font-variant-numeric: lining-nums;
}

/* Headings are set tighter than body text: tighten tracking a touch */
.section-title,
.cta-title,
.page-hero h1 {
  letter-spacing: -0.025em;
}

/* Hero headline: the 800 weight is strong on its own, so drop the stroke trick */
.hero--refined .hero-title {
  font-weight: 800;
  letter-spacing: -0.03em;
  -webkit-text-stroke: 0;
}

.hero--refined .hero-title .hl {
  -webkit-text-stroke: 0;
}

/* ============ Consultation booking (guided steps + sticky summary) ============ */
.cs-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(300px, 380px);
  gap: clamp(24px, 3vw, 40px);
  align-items: start;
}

.cs-steps {
  display: grid;
  gap: 20px;
  min-width: 0;
}

.cs-step {
  min-width: 0;
  padding: clamp(22px, 3vw, 34px);
  border-radius: calc(var(--radius) + 4px);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
}

.cs-step-head {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  margin-bottom: 22px;
}

.cs-step-num {
  display: grid;
  place-items: center;
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: 10px;
  background: var(--green);
  color: var(--lime);
  font-family: var(--font-heading);
  font-weight: 800;
}

.cs-step-title {
  font-size: 1.25rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--ink);
}

.cs-step-sub {
  margin-top: 4px;
  font-size: 16px;
  color: var(--muted);
}

/* Day strip (shown once JS is running; without JS every day's times are listed) */
.cs-days {
  display: none;
  gap: 10px;
  overflow-x: auto;
  padding-bottom: 8px;
  margin-bottom: 22px;
  scroll-snap-type: x mandatory;
  scrollbar-width: thin;
}

.cs-js .cs-days { display: flex; }

.cs-day {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  min-width: 78px;
  padding: 12px 10px;
  border-radius: 12px;
  border: 1px solid rgba(0, 11, 110, 0.12);
  background: var(--offwhite);
  font: inherit;
  color: var(--ink);
  cursor: pointer;
  scroll-snap-align: start;
  transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

.cs-day:hover { border-color: var(--green); }

.cs-day-dow,
.cs-day-mon {
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}

.cs-day-num {
  font-family: var(--font-heading);
  font-size: 1.6rem;
  font-weight: 800;
  line-height: 1.1;
}

.cs-day-count {
  margin-top: 4px;
  font-size: 12px;
  font-weight: 600;
  color: #057c9a;
}

.cs-day[aria-selected="true"] {
  background: var(--green);
  border-color: var(--green);
  color: var(--white);
}

.cs-day[aria-selected="true"] .cs-day-dow,
.cs-day[aria-selected="true"] .cs-day-mon { color: rgba(237, 238, 245, 0.7); }
.cs-day[aria-selected="true"] .cs-day-count { color: var(--lime); }

.cs-day:focus-visible {
  outline: 3px solid #7fd1e6;
  outline-offset: 2px;
}

/* Times */
.cs-times {
  margin: 0;
  padding: 0;
  border: 0;
  min-width: 0;
}

.cs-time-group + .cs-time-group { margin-top: 20px; }
.cs-js .cs-time-group { display: none; margin-top: 0; }
.cs-js .cs-time-group.is-active { display: block; }

.cs-time-day {
  margin-bottom: 12px;
  font-size: 15px;
  font-weight: 700;
  color: var(--muted);
}

.cs-time-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: 10px;
}

.slot.cs-slot { display: block; }

.slot.cs-slot span {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 14px 16px;
  border-radius: 10px;
  border: 1px solid rgba(0, 11, 110, 0.14);
  background: var(--white);
  cursor: pointer;
  transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
}

.slot.cs-slot strong {
  font-family: var(--font-heading);
  font-size: 1.05rem;
  font-weight: 800;
  color: var(--ink);
}

.slot.cs-slot small {
  font-size: 13.5px;
  color: var(--muted);
}

.slot.cs-slot span:hover { border-color: #057c9a; }

.slot.cs-slot input:checked + span {
  background: rgba(7, 166, 207, 0.1);
  border-color: #057c9a;
  box-shadow: inset 0 0 0 1px #057c9a;
  color: inherit;
}

.slot.cs-slot input:checked + span strong { color: var(--green); }

.slot.cs-slot input:focus-visible + span {
  outline: 3px solid #7fd1e6;
  outline-offset: 2px;
}

.slot.cs-slot input:disabled + span {
  cursor: default;
  background: var(--offwhite);
}

.cs-locked {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  border-radius: 10px;
  background: var(--offwhite);
  font-size: 16px;
  color: var(--muted);
}

.cs-locked .icon { width: 18px; height: 18px; color: var(--green); flex-shrink: 0; }

/* Summary */
.cs-summary {
  position: sticky;
  top: 100px;
  padding: clamp(24px, 3vw, 32px);
  border-radius: calc(var(--radius) + 4px);
  background:
    radial-gradient(360px 220px at 100% 0%, rgba(7, 166, 207, 0.28), transparent 70%),
    var(--navy-gradient);
  color: var(--text-on-dark);
  box-shadow: 0 30px 60px rgba(0, 11, 110, 0.22);
}

.cs-summary-eyebrow {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--lime);
}

.cs-summary-title {
  margin: 8px 0 20px;
  font-size: 1.35rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--white);
}

.cs-summary-list {
  display: grid;
  margin: 0 0 22px;
}

.cs-summary-list > div {
  display: grid;
  gap: 4px;
  padding-block: 14px;
  border-top: 1px solid rgba(237, 238, 245, 0.12);
}

.cs-summary-list dt {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted-on-dark);
}

.cs-summary-list dt .icon { width: 16px; height: 16px; color: var(--lime); }

.cs-summary-list dd {
  margin: 0;
  font-size: 16px;
  font-weight: 700;
  color: var(--white);
}

.cs-summary-list dd.is-empty { color: rgba(237, 238, 245, 0.55); font-weight: 600; }

.cs-summary-fee dd {
  font-family: var(--font-heading);
  font-size: 1.8rem;
  font-weight: 800;
  letter-spacing: -0.03em;
}

.cs-how {
  display: grid;
  gap: 10px;
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid rgba(237, 238, 245, 0.12);
  counter-reset: cs;
}

.cs-how li {
  display: flex;
  gap: 10px;
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--muted-on-dark);
  counter-increment: cs;
}

.cs-how li::before {
  content: counter(cs);
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  border-radius: 6px;
  background: rgba(7, 166, 207, 0.18);
  font-size: 12px;
  font-weight: 800;
  color: var(--lime);
}

@media (max-width: 992px) {
  .cs-layout { grid-template-columns: 1fr; }
  .cs-summary { position: static; }
}

/* ============ Academy catalogue ============ */
.ac-hero { padding-block: clamp(64px, 9vw, 104px) clamp(56px, 7vw, 84px); }

.ac-hero-inner {
  position: relative;
  max-width: 820px;
  text-align: center;
}

.ac-hero h1 {
  font-size: clamp(2.1rem, 4.4vw, 3.4rem);
  text-wrap: balance;
}

.ac-hero p {
  max-width: 56ch;
  margin-inline: auto;
}

.ac-search {
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: 640px;
  margin: 32px auto 0;
  padding: 8px 8px 8px 18px;
  border-radius: 12px;
  background: var(--white);
  box-shadow: 0 24px 50px rgba(0, 6, 60, 0.35);
}

.ac-search > .icon {
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  color: var(--muted);
}

.ac-search input {
  flex: 1;
  min-width: 0;
  border: 0;
  outline: 0;
  background: transparent;
  font: inherit;
  font-size: 16px;
  color: var(--ink);
}

.ac-search:focus-within {
  box-shadow: 0 0 0 3px #7fd1e6, 0 24px 50px rgba(0, 6, 60, 0.35);
}

.ac-perks {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px 28px;
  margin-top: 26px;
}

.ac-perks li {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 600;
  color: var(--muted-on-dark);
}

.ac-perks .icon { width: 17px; height: 17px; color: var(--lime); }

/* Category tabs */
.ac-section { padding-top: clamp(36px, 5vw, 56px); }

.ac-tabs {
  display: flex;
  gap: 4px;
  overflow-x: auto;
  border-bottom: 1px solid rgba(0, 11, 110, 0.1);
  scrollbar-width: none;
}

.ac-tab {
  position: relative;
  padding: 12px 16px;
  font-size: 16px;
  font-weight: 700;
  white-space: nowrap;
  color: var(--muted);
  transition: color 0.2s ease;
}

.ac-tab::after {
  content: "";
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: -1px;
  height: 2px;
  border-radius: 2px;
  background: #057c9a;
  transform: scaleX(0);
  transition: transform 0.25s ease;
}

.ac-tab:hover { color: var(--ink); }
.ac-tab.is-active { color: var(--green); }
.ac-tab.is-active::after { transform: scaleX(1); }

/* Toolbar: count + chips */
.ac-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin: 22px 0 28px;
}

.ac-count { font-size: 16px; color: var(--muted); }
.ac-count strong { color: var(--ink); font-weight: 800; }

.ac-chipsets {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.ac-chips {
  display: inline-flex;
  padding: 4px;
  gap: 2px;
  border-radius: 10px;
  border: 1px solid rgba(0, 11, 110, 0.1);
  background: var(--white);
}

.ac-chip {
  padding: 7px 12px;
  border-radius: 7px;
  font-size: 14px;
  font-weight: 700;
  white-space: nowrap;
  color: var(--muted);
  transition: background 0.2s ease, color 0.2s ease;
}

.ac-chip:hover { color: var(--ink); }
.ac-chip.is-active { background: var(--green); color: var(--white); }

.ac-tab:focus-visible,
.ac-chip:focus-visible {
  outline: 3px solid #7fd1e6;
  outline-offset: 2px;
}

/* Course grid and cards */
.ac-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
  gap: 24px;
}

.ac-card {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border-radius: calc(var(--radius) + 4px);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.ac-card:hover {
  transform: translateY(-6px);
  border-color: rgba(7, 166, 207, 0.35);
  box-shadow: 0 26px 54px rgba(0, 11, 110, 0.13);
}

.ac-cover {
  position: relative;
  display: block;
  aspect-ratio: 16 / 9;
  overflow: hidden;
}

.ac-cover img { width: 100%; height: 100%; object-fit: cover; }

/* Generated cover art: category tint + orbit rings + large icon */
.ac-cover-art {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  background-image: repeating-radial-gradient(circle at 78% 30%, rgba(255, 255, 255, 0.09) 0 1px, transparent 1.5px 36px);
}

.ac-cover-art .icon {
  width: 64px;
  height: 64px;
  color: rgba(255, 255, 255, 0.92);
  transition: transform 0.4s ease;
}

.ac-card:hover .ac-cover-art .icon { transform: scale(1.08) rotate(-4deg); }

.ac-tone-0 { background: linear-gradient(140deg, #000b6e 0%, #057c9a 100%); }
.ac-tone-1 { background: linear-gradient(140deg, #17217b 0%, #07a6cf 100%); }
.ac-tone-2 { background: linear-gradient(140deg, #00063b 0%, #057c9a 100%); }
.ac-tone-3 { background: linear-gradient(140deg, #000b6e 0%, #0690b3 100%); }

.ac-cover-tags {
  position: absolute;
  left: 14px;
  top: 14px;
  right: 14px;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.ac-tag {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border-radius: 6px;
  background: rgba(255, 255, 255, 0.92);
  font-size: 12.5px;
  font-weight: 800;
  letter-spacing: 0.02em;
  color: var(--green);
}

.ac-tag-live { background: #fff; color: #b42318; }

.ac-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #e5484d;
  box-shadow: 0 0 0 3px rgba(229, 72, 77, 0.2);
}

.ac-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex: 1;
  padding: 22px 22px 20px;
}

.ac-body h3 {
  font-size: 1.2rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  line-height: 1.3;
}

.ac-body h3 a { color: var(--ink); }
.ac-body h3 a:hover { color: var(--green); }

.ac-body p {
  font-size: 16px;
  line-height: 1.6;
  color: var(--muted);
}

.ac-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 16px;
  margin-top: 2px;
}

.ac-meta li {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  font-weight: 600;
  color: var(--muted);
}

.ac-meta .icon { width: 15px; height: 15px; color: #057c9a; }

.ac-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-top: auto;
  padding-top: 16px;
  border-top: 1px solid rgba(0, 11, 110, 0.08);
}

.ac-price {
  font-family: var(--font-heading);
  font-size: 1.3rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--ink);
}

.ac-price.is-free {
  padding: 4px 12px;
  border-radius: 6px;
  background: rgba(7, 166, 207, 0.14);
  font-size: 1rem;
  color: var(--green);
}

.ac-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 700;
  color: var(--green);
}

.ac-card:hover .ac-link .btn-arrow { transform: translateX(4px); }

@media (max-width: 560px) {
  .ac-search { padding-left: 14px; }
  .ac-search .btn { padding-inline: 16px; }
  .ac-toolbar { flex-direction: column; align-items: flex-start; }
  .ac-chipsets { width: 100%; }
  .ac-chips { max-width: 100%; overflow-x: auto; }
}

/* ============ Contact page ============ */
.ct-hero { padding-block: clamp(64px, 9vw, 100px) clamp(110px, 12vw, 140px); }
.ct-hero-inner { position: relative; max-width: 760px; text-align: center; }
.ct-hero h1 { font-size: clamp(2.2rem, 4.6vw, 3.6rem); }
.ct-hero p { max-width: 56ch; margin-inline: auto; }

/* Channel cards overlap the hero */
.ct-channels {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px;
  margin-top: -64px;
}

.ct-channel {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 20px 22px;
  border-radius: calc(var(--radius) + 2px);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
  box-shadow: 0 24px 50px rgba(0, 11, 110, 0.14);
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}

.ct-channel:hover {
  transform: translateY(-4px);
  border-color: rgba(7, 166, 207, 0.4);
  box-shadow: 0 30px 60px rgba(0, 11, 110, 0.18);
}

.ct-channel:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 3px; }

.ct-channel-icon {
  display: grid;
  place-items: center;
  width: 50px;
  height: 50px;
  flex-shrink: 0;
  border-radius: 14px;
  background: var(--green);
  color: var(--lime);
}

.ct-channel-icon .icon { width: 22px; height: 22px; }
.ct-channel-icon.ct-wa { background: #1fa855; color: #fff; }

.ct-channel-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  flex: 1;
}

.ct-channel-label {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}

.ct-channel-text strong {
  font-family: var(--font-heading);
  font-size: 1rem;
  font-weight: 700;
  color: var(--ink);
  overflow-wrap: anywhere;
}

.ct-channel .btn-arrow { color: #057c9a; flex-shrink: 0; }
.ct-channel:hover .btn-arrow { transform: translateX(4px); }

/* Main layout */
.ct-section { padding-top: clamp(40px, 5vw, 64px); }

.ct-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 360px);
  gap: clamp(24px, 3vw, 40px);
  align-items: start;
}

.ct-form-card {
  padding: clamp(24px, 3.5vw, 40px);
  border-radius: calc(var(--radius) + 4px);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
}

.ct-title {
  font-size: clamp(1.4rem, 2.2vw, 1.8rem);
  font-weight: 800;
  letter-spacing: -0.025em;
  color: var(--ink);
}

.ct-sub {
  margin: 6px 0 26px;
  font-size: 16px;
  color: var(--muted);
}

/* Topic chips */
.ct-topics {
  margin: 0 0 22px;
  padding: 0;
  border: 0;
  min-width: 0;
}

.ct-topics legend {
  margin-bottom: 10px;
  font-size: 15px;
  font-weight: 700;
  color: var(--ink);
}

.ct-topic-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.ct-topic { position: relative; }
.ct-topic input { position: absolute; opacity: 0; pointer-events: none; }

.ct-topic span {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  border-radius: 8px;
  border: 1px solid rgba(0, 11, 110, 0.14);
  background: var(--white);
  font-size: 15px;
  font-weight: 700;
  color: var(--muted);
  cursor: pointer;
  transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

.ct-topic span .icon { width: 16px; height: 16px; }
.ct-topic span:hover { border-color: #057c9a; color: var(--ink); }

.ct-topic input:checked + span {
  background: var(--green);
  border-color: var(--green);
  color: var(--white);
}

.ct-topic input:checked + span .icon { color: var(--lime); }
.ct-topic input:focus-visible + span { outline: 3px solid #7fd1e6; outline-offset: 2px; }

.ct-form-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 8px;
  padding-top: 20px;
  border-top: 1px solid rgba(0, 11, 110, 0.08);
}

.ct-form-foot p {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  color: var(--muted);
}

.ct-form-foot p .icon { width: 16px; height: 16px; color: #057c9a; }

/* Side cards */
.ct-side { display: grid; gap: 18px; }

.ct-card {
  padding: 26px;
  border-radius: calc(var(--radius) + 4px);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
}

.ct-card-icon {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  margin-bottom: 14px;
  border-radius: 12px;
  background: rgba(7, 166, 207, 0.14);
  color: var(--green);
}

.ct-card-icon .icon { width: 21px; height: 21px; }

.ct-card h2 {
  font-size: 1.15rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--ink);
}

.ct-card p {
  margin: 8px 0 16px;
  font-size: 16px;
  line-height: 1.6;
  color: var(--muted);
}

.ct-card-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 700;
  color: #057c9a;
}

.ct-card-link .icon { width: 14px; height: 14px; }
.ct-card-link:hover { color: var(--green); }

.ct-card-dark {
  border-color: transparent;
  background:
    radial-gradient(300px 200px at 100% 0%, rgba(7, 166, 207, 0.28), transparent 70%),
    var(--navy-gradient);
}

.ct-card-dark h2 { color: var(--white); }
.ct-card-dark p { color: var(--muted-on-dark); }
.ct-card-dark .ct-card-icon { background: rgba(7, 166, 207, 0.18); color: var(--lime); }

.ct-social {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 18px 22px;
  border-radius: calc(var(--radius) + 4px);
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
}

.ct-social > span { font-size: 15px; font-weight: 700; color: var(--ink); }
.ct-social .social-link { color: var(--green); border-color: rgba(0, 11, 110, 0.14); }
.ct-social .social-link:hover { background: var(--green); color: var(--white); }

@media (max-width: 992px) {
  .ct-channels { grid-template-columns: 1fr; gap: 12px; }
  .ct-layout { grid-template-columns: 1fr; }
}

@media (max-width: 560px) {
  .ct-form-foot { flex-direction: column; align-items: stretch; }
  .ct-form-foot .btn { width: 100%; }
}

/* ============ Clients: friendly tile grid ============ */
.cl-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 16px;
}

.cl-tile[hidden] { display: none; }

.cl-tile a {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-areas:
    "avatar name"
    "avatar type"
    "site site";
  grid-template-rows: auto auto 1fr;
  column-gap: 14px;
  row-gap: 2px;
  height: 100%;
  padding: 18px;
  border-radius: 14px;
  border: 1px solid rgba(0, 11, 110, 0.08);
  background: var(--white);
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}

.cl-tile a:hover {
  transform: translateY(-4px);
  border-color: rgba(7, 166, 207, 0.4);
  box-shadow: 0 18px 40px rgba(0, 11, 110, 0.1);
}

.cl-tile a:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }

.cl-avatar {
  grid-area: avatar;
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border-radius: 12px;
  font-family: var(--font-heading);
  font-size: 16px;
  font-weight: 800;
  letter-spacing: -0.02em;
}

.cl-schools { background: rgba(7, 166, 207, 0.14); color: #04657e; }
.cl-ngo { background: rgba(31, 168, 85, 0.13); color: #12753a; }
.cl-media { background: rgba(7, 166, 207, 0.13); color: #04657e; }

.cl-name {
  grid-area: name;
  align-self: end;
  font-family: var(--font-heading);
  font-size: 16px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--ink);
}

.cl-type {
  grid-area: type;
  align-self: start;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--muted);
}

.cl-site {
  grid-area: site;
  align-self: end;
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px dashed rgba(0, 11, 110, 0.12);
  font-size: 14px;
  font-weight: 600;
  color: #057c9a;
}

.cl-site .icon {
  width: 13px;
  height: 13px;
  margin-left: auto;
  opacity: 0.6;
  transition: transform 0.25s ease, opacity 0.25s ease;
}

.cl-tile a:hover .cl-site .icon { opacity: 1; transform: translate(2px, -2px); }

@media (max-width: 560px) {
  .cl-grid { grid-template-columns: 1fr; gap: 8px; }
  /* Phones: compact one-line rows; the whole tile is the link */
  .cl-tile a {
    grid-template-columns: auto 1fr auto;
    grid-template-rows: auto auto;
    grid-template-areas:
      "avatar name site"
      "avatar type site";
    padding: 12px 14px;
  }
  .cl-avatar { width: 40px; height: 40px; font-size: 15px; }
  .cl-site { margin: 0; padding: 0; border: 0; align-self: center; font-size: 0; }
  .cl-site .icon { width: 15px; height: 15px; margin: 0; }
}

/* Client logos: white badge with a hairline so every logo sits on the same ground */
.cl-avatar.cl-logo {
  background: var(--white);
  border: 1px solid rgba(0, 11, 110, 0.1);
  padding: 4px;
}

.cl-avatar.cl-logo img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

@media (min-width: 561px) {
  .cl-avatar { width: 52px; height: 52px; }
}

/* Hero headline in uppercase */
.hero--refined .hero-title {
  text-transform: uppercase;
  letter-spacing: -0.02em;
  font-size: clamp(1.75rem, 2.75vw, 2.6rem);
  line-height: 1.2;
}

.hero--refined .hero-content {
  max-width: 620px;
}

/* ============ Login (one compact card on a brand gradient) ============
   Page: four close blue tones, no rings or texture. Card: logo + back link, then the form. */
.lx-body {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: clamp(16px, 4vw, 48px);
  background: linear-gradient(135deg, #000b6e 0%, #1c267e 38%, #057c9a 70%, #057c9a 100%);
}
.lx { width: 100%; display: grid; place-items: center; }
.lx-card {
  width: min(420px, 100%);
  border-radius: 20px;
  background: var(--white);
  box-shadow: 0 32px 72px rgba(0, 5, 52, 0.38);
}

.lx-form { padding: clamp(24px, 4vw, 36px) clamp(20px, 4vw, 34px); }
.lx-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 26px;
}
.lx-logo img { display: block; height: 30px; width: auto; }
.lx-back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--muted);
  white-space: nowrap;
  transition: color 0.2s ease;
}
.lx-back .icon { width: 14px; height: 14px; transform: rotate(180deg); }
.lx-back:hover { color: var(--green); }
.lx-form h1 {
  font-size: 1.6rem;
  font-weight: 700;
  color: var(--green);
  margin: 0 0 4px;
}
.lx-sub { margin: 0 0 20px; font-size: 15px; color: var(--muted); }
.lx-fields .field { margin-bottom: 14px; }
.lx-fields .field label { font-size: 14.5px; }
.lx-fields .input { height: 46px; border-radius: 10px; font-size: 16px; background: var(--white); }
.lx-fields .si-eye { top: 28px; width: 38px; height: 38px; }
.lx-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  margin: 2px 0 20px;
  font-size: 14.5px;
}
.lx-link { font-weight: 700; color: #057c9a; }
.lx-link:hover { color: var(--green); text-decoration: underline; text-underline-offset: 3px; }
.lx-fields .btn-lg { padding: 14px 24px; font-size: 16px; }
.lx-foot { margin: 20px 0 0; text-align: center; font-size: 15px; color: var(--muted); }

/* Show / hide password (eye button inside the field) */
.si-password { position: relative; }
.si-password .input { padding-right: 52px; }

.si-eye {
  position: absolute;
  right: 6px;
  top: 31px;
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
}

.si-eye:hover { color: var(--green); background: rgba(0, 11, 110, 0.05); }
.si-eye[aria-pressed="true"] { color: #057c9a; }
.si-eye:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 1px; }
.si-eye .icon { width: 20px; height: 20px; }


/* ============ Body typeface: TT Norms, Mulish as fallback ============
   Body text, buttons and forms use TT Norms (TypeType, commercial licence); headings use
   Raleway (--font-heading). TT Norms is not on Google Fonts, so it is self-hosted from
   public/assets/fonts/tt-norms/ (the CSP only allows fonts from self and fonts.gstatic.com).
   Until the licensed files are added there, body text falls back to Mulish (Google Fonts,
   loaded in the layouts). */
@font-face {
  font-family: "TT Norms";
  src: url("../fonts/tt-norms/TTNorms-Regular.woff2") format("woff2"),
       url("../fonts/tt-norms/TTNorms-Regular.woff") format("woff");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "TT Norms";
  src: url("../fonts/tt-norms/TTNorms-Medium.woff2") format("woff2"),
       url("../fonts/tt-norms/TTNorms-Medium.woff") format("woff");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "TT Norms";
  src: url("../fonts/tt-norms/TTNorms-Bold.woff2") format("woff2"),
       url("../fonts/tt-norms/TTNorms-Bold.woff") format("woff");
  font-weight: 600 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "TT Norms";
  src: url("../fonts/tt-norms/TTNorms-ExtraBold.woff2") format("woff2"),
       url("../fonts/tt-norms/TTNorms-ExtraBold.woff") format("woff");
  font-weight: 800 900;
  font-style: normal;
  font-display: swap;
}
:root {
  --font: "TT Norms", "Mulish", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}

/* ============ Landing page refresh (2026-10) ============
   Flat, balanced surfaces: navy (--green) and cyan (--lime) alternate with white and
   off-white; no glows, grain or orbit rings. One corner scale for the whole site:
   chips/tags 8px, buttons 10px, cards 16px. New home sections use the .lp- prefix. */
:root {
  --r-chip: 8px;
  --r-btn: 10px;
  --r-card: 16px;
}

/* Page side margins 30% smaller (2026-10-28). The white space each side of the content was
   (100vw - 1200px) / 2 + 40px; with a max width of 30vw + 840px and gutters at 70% it becomes
   exactly 70% of that at every width (1440px screen: 160px -> 112px; 1920px: 400px -> 280px).
   16px stays the floor so phones keep a comfortable edge. */
.container {
  max-width: calc(30vw + 840px);
  padding-inline: clamp(16px, 2.52vw, 28px);
}

/* Buttons, tags and chips on the shared scale */
.btn { border-radius: var(--r-btn); }
.btn-sm { border-radius: var(--r-chip); }
.pill,
.folio-tag { border-radius: var(--r-chip); }

/* ---------- Header: white bar, dark text ---------- */
.header {
  background: var(--white);
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  border-bottom: 1px solid var(--border);
}
.header.scrolled { box-shadow: 0 8px 24px rgba(0, 11, 110, 0.08); }

/* ~8% taller bar, logo ~5% smaller */
.header .nav { min-height: 90px; }
.header.scrolled .nav { min-height: 76px; }
.header .logo-img { height: 38px; }
@media (max-width: 480px) {
  .header .logo-img { height: 32px; }
}

/* Menu: bold (700) slate links; hover turns them brand blue (the Book A Service shade, 4.8:1 on white),
   the current page is deep navy. No boxes, no underline. */
.header .nav-links { gap: 4px; }
.header .nav-link {
  padding: 9px 14px;
  border-radius: var(--r-chip);
  font-weight: 700;
  color: #454d95;
  transition: color 0.2s ease;
}
.header .nav-link::after { display: none; }
.header .nav-link:hover { background: none; color: #057c9a; }
.header .nav-link.active { color: var(--green); }
.header .nav-link.active:hover { color: #057c9a; }

/* Outlined brand button (secondary actions next to a solid primary, e.g. "Ask a question") */
.btn-outline-brand {
  background: transparent;
  border: 1px solid #057c9a;
  color: #057c9a;
}
.btn-outline-brand:hover {
  background: rgba(5, 124, 154, 0.08);
  border-color: #046a84;
  color: #046a84;
  transform: translateY(-1px);
}
.header .nav-actions { gap: 12px; }

/* Account menu: circular profile icon + dropdown card with pill actions */
.nav-account { position: relative; }
.nav-account-btn {
  display: inline-grid;
  place-items: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--white);
  color: var(--green);
  cursor: pointer;
  transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}
.nav-account-btn .icon { width: 20px; height: 20px; }
.nav-account-btn:hover,
.nav-account.is-open .nav-account-btn { background: rgba(7, 166, 207, 0.12); border-color: rgba(5, 124, 154, 0.45); }
.nav-account-btn:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }
.nav-account-menu {
  position: absolute;
  top: calc(100% + 12px);
  right: 0;
  z-index: 1300;
  display: grid;
  gap: 10px;
  width: 240px;
  padding: 16px;
  border-radius: var(--r-card);
  background: var(--white);
  border: 1px solid var(--border);
  box-shadow: 0 20px 44px rgba(0, 11, 110, 0.14);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
}
/* Invisible bridge so the menu stays open while the pointer crosses the gap */
.nav-account-menu::before { content: ""; position: absolute; left: 0; right: 0; top: -12px; height: 12px; }
.nav-account.is-open .nav-account-menu { opacity: 1; visibility: visible; transform: none; }
@media (hover: hover) {
  .nav-account:hover .nav-account-menu { opacity: 1; visibility: visible; transform: none; }
}
.nav-account-who { display: grid; gap: 2px; padding-bottom: 12px; margin: 0 0 2px; border-bottom: 1px solid var(--border); font-size: 14px; }
.nav-account-who strong { color: var(--ink); font-size: 16px; }
.nav-account-who span { color: var(--muted); word-break: break-all; }
.nav-account-menu form { margin: 0; }
.nav-pill {
  display: flex;
  justify-content: center;
  width: 100%;
  padding: 11px 18px;
  border: 0;
  border-radius: 999px;
  font: inherit;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.2;
  cursor: pointer;
  transition: background 0.2s ease;
}
.nav-pill--dark { background: var(--green); color: var(--white); }
.nav-pill--dark:hover { background: var(--green-3); color: var(--white); }
.nav-pill--light { background: #f1f1f7; color: var(--ink); }
.nav-pill--light:hover { background: #e5e6f0; color: var(--ink); }
.nav-pill:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  .nav-account-menu { transition: none; }
}
.header .hamburger { border-color: var(--border); }
.header .hamburger span { background: var(--green); }
.header .hamburger:focus-visible,
.header .nav-link:focus-visible {
  outline: 3px solid #7fd1e6;
  outline-offset: 3px;
}

/* Programme menu: nav item with a dropdown card (same card as the account menu) */
.nav-drop { position: relative; }
.nav-drop-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 0;
  background: none;
  font: inherit;
  font-size: 16px;
  font-weight: 600;
  line-height: inherit;
  cursor: pointer;
}
.nav-drop-caret { width: 12px; height: 12px; transition: transform 0.2s ease; }
.nav-drop.is-open .nav-drop-caret { transform: rotate(180deg); }
.nav-drop-menu {
  position: absolute;
  top: calc(100% + 12px);
  left: 0;
  z-index: 1300;
  display: grid;
  gap: 4px;
  width: 300px;
  padding: 8px;
  margin: 0;
  list-style: none;
  border-radius: var(--r-card);
  background: var(--white);
  border: 1px solid var(--border);
  box-shadow: 0 20px 44px rgba(0, 11, 110, 0.14);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
}
/* Invisible bridge so the menu stays open while the pointer crosses the gap */
.nav-drop-menu::before { content: ""; position: absolute; left: 0; right: 0; top: -12px; height: 12px; }
.nav-drop.is-open .nav-drop-menu { opacity: 1; visibility: visible; transform: none; }
@media (hover: hover) {
  .nav-drop:hover .nav-drop-menu { opacity: 1; visibility: visible; transform: none; }
  .nav-drop:hover .nav-drop-caret { transform: rotate(180deg); }
}
/* Each pathway: icon tile + title/description */
.nav-drop-link {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 10px 12px;
  border-radius: var(--r-chip);
  color: var(--ink);
  transition: background 0.2s ease;
}
.nav-drop-icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border-radius: 12px;
  background: rgba(7, 166, 207, 0.1);
  color: #212b81;
  transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease;
}
.nav-drop-icon .icon { width: 22px; height: 22px; }
.nav-drop-text { display: grid; gap: 2px; min-width: 0; }
.nav-drop-text strong { font-size: 16px; font-weight: 700; }
.nav-drop-text span { font-size: 14px; color: var(--muted); }
.nav-drop-link:hover,
.nav-drop-link.is-active { background: rgba(7, 166, 207, 0.08); color: var(--green); }
.nav-drop-link:hover .nav-drop-icon,
.nav-drop-link.is-active .nav-drop-icon { background: #212b81; color: var(--white); transform: scale(1.04); }
.nav-drop-link:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  .nav-drop-menu, .nav-drop-caret, .nav-drop-icon { transition: none; }
}

/* ---------- Mobile menu: a white panel that drops down from the header over a dimmed page ----------
   Replaces the old full-screen navy overlay. The header (z-index 1200) stays on top with the
   hamburger turned into a close button; --mm-top is the header's bottom edge, set by script.js. */
.mobile-menu {
  display: block;
  inset: 0;
  padding: 0;
  background: none;
  z-index: 1100;
  opacity: 1; /* the panel and backdrop fade themselves; visibility waits for them on close */
  transition: visibility 0.25s ease;
}
.mm-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 8, 75, 0.42);
  opacity: 0;
  transition: opacity 0.25s ease;
}
.mm-panel {
  position: absolute;
  top: var(--mm-top, 76px);
  left: 0;
  right: 0;
  max-height: calc(100dvh - var(--mm-top, 76px));
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 10px 20px 22px;
  background: var(--white);
  border-radius: 0 0 22px 22px;
  box-shadow: 0 24px 48px rgba(0, 11, 110, 0.18);
  opacity: 0;
  transform: translateY(-10px);
  transition: opacity 0.22s ease, transform 0.25s cubic-bezier(0.22, 1, 0.36, 1);
}
/* Visible at once when opening (so focus can move in); the 0.25s delay only applies on close */
.mobile-menu.open { transition: none; }
.mobile-menu.open .mm-backdrop { opacity: 1; }
.mobile-menu.open .mm-panel { opacity: 1; transform: none; }

/* Page links: tidy rows with a chevron; the current page gets a cyan bar and tint */
.mobile-menu .mm-list { display: block; list-style: none; margin: 0; padding: 0; text-align: left; }
.mm-list li + li { border-top: 1px solid var(--border); }
.mobile-menu .mm-link {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 54px;
  padding: 0 12px;
  border-radius: 12px;
  font-size: 17px;
  font-weight: 700;
  letter-spacing: 0;
  color: var(--ink);
}
.mm-chevron { width: 14px; height: 14px; flex: none; color: var(--muted); transition: transform 0.2s ease, color 0.2s ease; }
.mobile-menu .mm-link:hover { color: #057c9a; }
.mobile-menu .mm-link:hover .mm-chevron { transform: translateX(3px); color: #057c9a; }
.mobile-menu .mm-link.is-current { background: #e3f5fa; color: var(--green); }
.mobile-menu .mm-link.is-current::before {
  content: "";
  position: absolute;
  left: 0;
  top: 12px;
  bottom: 12px;
  width: 3px;
  border-radius: 3px;
  background: var(--lime);
}
.mm-list li:has(.is-current) + li,
.mm-list li:has(+ li .is-current) + li { border-top-color: transparent; }

/* Programmes: two compact cards (same icons and wording as the desktop dropdown) */
.mm-label {
  margin: 18px 12px 10px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}
.mm-programmes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.mobile-menu .mm-prog {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px;
  border: 1px solid var(--border);
  border-radius: 14px;
  background: var(--offwhite);
  color: var(--ink);
  letter-spacing: 0;
  transition: border-color 0.2s ease, background 0.2s ease;
}
.mobile-menu .mm-prog:hover,
.mobile-menu .mm-prog.is-current { border-color: var(--lime); background: #e3f5fa; }
.mm-prog-icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border-radius: 11px;
  background: linear-gradient(140deg, var(--green) 0%, #057c9a 100%);
  color: var(--white);
}
.mm-prog-icon .icon { width: 18px; height: 18px; }
.mm-prog-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.mm-prog-text strong { font-size: 15px; font-weight: 700; }
.mm-prog-text span { font-size: 13px; color: var(--muted); }

/* Footer: account actions side by side, the main call to action, a phone line */
.mm-footer { display: grid; gap: 10px; margin-top: 20px; padding-top: 18px; border-top: 1px solid var(--border); }
.mm-auth { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.mm-footer .btn { justify-content: center; min-height: 48px; }
.mm-contact { margin: 4px 0 0; text-align: center; font-size: 14px; color: var(--muted); }
.mm-contact a { color: var(--green); font-weight: 700; }
.mobile-menu a:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }

/* Phones: programme cards stack as full-width rows, so title and line each fit on one line */
@media (max-width: 420px) {
  .mm-programmes { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .mobile-menu .mm-prog { padding: 10px 12px; }
  .mm-prog-text { flex-direction: row; align-items: baseline; flex-wrap: wrap; column-gap: 8px; }
}
/* The panel only exists below the desktop breakpoint */
@media (min-width: 993px) {
  .mobile-menu { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .mm-backdrop, .mm-panel, .mm-chevron, .mobile-menu .mm-prog { transition: none; }
  .mm-panel { transform: none; }
}

/* ---------- Shared pieces ---------- */
.lp-circle {
  display: inline-grid;
  place-items: center;
  width: 52px;
  height: 52px;
  flex-shrink: 0;
  border-radius: 50%;
  background: var(--lime);
  color: var(--green);
}
.lp-circle .icon { width: 22px; height: 22px; }

.lp-head {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);
  gap: 24px clamp(32px, 5vw, 72px);
  align-items: end;
  margin-bottom: clamp(36px, 5vw, 56px);
}
.lp-head .section-title { max-width: 14em; text-wrap: balance; }
.lp-head-side { display: flex; flex-direction: column; align-items: flex-start; gap: 20px; }
.lp-head-side p { color: var(--muted); font-size: 16.5px; line-height: 1.7; max-width: 46ch; }
.dark .lp-head-side p { color: var(--muted-on-dark); }

/* ---------- 1. Hero: photo slideshow under a navy → cyan left-to-right gradient ---------- */
.lp-hero {
  background: #000855;
  color: var(--text-on-dark);
  min-height: 550px;
  display: flex;
  align-items: center;
  padding-block: clamp(48px, 5vw, 64px);
  position: relative;
  isolation: isolate;
  overflow: hidden;
}
.lp-hero-inner { width: 100%; text-align: left; position: relative; z-index: 1; }

/* Background slideshow */
.lp-hero-slides { position: absolute; inset: 0; z-index: 0; pointer-events: none; }
.lp-hero-slide {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: right center;
  opacity: 0;
  transform: scale(1.06);
  transition: opacity 1.6s ease, transform 7s ease-out;
}
.lp-hero-slide.is-active { opacity: 1; transform: scale(1); }
/* Brand gradient, left to right: solid navy behind the copy (white text stays above 12:1),
   blending through navy/cyan to a light cyan wash so the photo reads clearly on the right */
.lp-hero-slides::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--hero-blend);
}
@media (prefers-reduced-motion: reduce) {
  .lp-hero-slide { transition: none; transform: none; }
}
.lp-hero-title {
  max-width: 17em;
  font-size: clamp(2rem, 4.6vw, 3.7rem);
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--white);
  text-wrap: balance;
  margin-bottom: 24px;
}
/* Light sky tint: the brand cyan is too dark against the deep hero colour */
.lp-hero-title .hl {
  color: #92d8ea;
  background: none;
  -webkit-text-fill-color: currentColor;
}
.lp-hero-sub {
  max-width: 60ch;
  font-size: clamp(16px, 1.6vw, 18.5px);
  line-height: 1.7;
  color: rgba(244, 244, 249, 0.88);
  margin-bottom: 36px;
}
.lp-hero-cta {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
}

/* ---------- 2. Track record: copy + half-width cyan stats block ---------- */
.lp-stats-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(32px, 5vw, 72px);
  align-items: center;
}
.lp-stats-copy .section-title { margin-bottom: 16px; text-wrap: balance; }
.lp-stats-copy p { color: var(--muted); font-size: 16.5px; line-height: 1.7; max-width: 44ch; }
.lp-stats-block {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin: 0;
  padding: clamp(28px, 4vw, 44px) clamp(20px, 3vw, 36px);
  border-radius: var(--r-card);
  background: #eaf8fb;
  border: 1px solid rgba(7, 166, 207, 0.28);
  color: var(--green);
}
.lp-stat {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding-inline: clamp(12px, 2vw, 24px);
  border-left: 1px solid rgba(0, 11, 110, 0.12);
}
.lp-stat:first-child { border-left: 0; padding-left: 0; }
.lp-stat dd {
  margin: 0;
  font-family: var(--font-heading);
  font-size: clamp(1.9rem, 3.4vw, 2.75rem);
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.02em;
}
.lp-stat dt {
  order: 2;
  font-size: 13.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #4c5499;
}

/* ---------- 3. Why choose us: deep blue band; intro + accordion left, photo composition right ---------- */
.lp-why {
  background: linear-gradient(160deg, #000b6e 0%, #051071 55%, #151f7a 100%);
}
.lp-why .why-text { color: var(--muted-on-dark); max-width: 52ch; margin-bottom: 28px; }
.lp-why-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: clamp(36px, 6vw, 80px);
  align-items: center;
}
.lp-why-copy { display: flex; flex-direction: column; align-items: flex-start; }
.lp-why-copy .section-title { margin-bottom: 14px; }

/* Accordion: one open at a time (<details name>); opens smoothly where the browser supports it */
.lp-acc { display: grid; gap: 12px; width: 100%; margin-bottom: 30px; interpolate-size: allow-keywords; }
.lp-acc-item {
  border: 1px solid transparent;
  border-radius: var(--r-card);
  background: var(--white);
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
}
.lp-acc-item[open] { border-color: var(--lime); box-shadow: 0 18px 40px rgba(0, 4, 40, 0.35); }
.lp-acc-item summary {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 14px 18px 14px 14px;
  list-style: none;
  cursor: pointer;
  border-radius: var(--r-card);
}
.lp-acc-item summary::-webkit-details-marker { display: none; }
.lp-acc-item summary:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }
.lp-acc-item .lp-circle { width: 44px; height: 44px; background: var(--green); color: var(--white); transition: background 0.25s ease; }
.lp-acc-item .lp-circle .icon { width: 20px; height: 20px; }
.lp-acc-item[open] .lp-circle,
.lp-acc-item summary:hover .lp-circle { background: #057c9a; }
.lp-acc-title { flex: 1; font-family: var(--font-heading); font-size: 1.08rem; font-weight: 700; color: var(--ink); }
.lp-acc-chevron {
  width: 28px;
  height: 28px;
  padding: 6px;
  flex-shrink: 0;
  border-radius: 50%;
  background: var(--offwhite);
  color: var(--green);
  transition: transform 0.3s ease, background 0.25s ease;
}
.lp-acc-item[open] .lp-acc-chevron { transform: rotate(180deg); background: rgba(7, 166, 207, 0.16); }
.lp-acc-item p { padding: 0 20px 18px 74px; color: var(--muted); font-size: 16px; line-height: 1.65; }
.lp-acc-item::details-content { height: 0; overflow: hidden; transition: height 0.3s ease, content-visibility 0.3s allow-discrete; }
.lp-acc-item[open]::details-content { height: auto; }

/* Photo composition: two-layer stacked layout */
.lp-why-media {
  position: relative;
  height: 100%;
}
.lp-why-stack {
  position: relative;
  width: min(100%, 460px);
  margin-left: auto;
  aspect-ratio: 4 / 5;
}
.lp-why-photo {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 24px;
  box-shadow: 0 30px 70px rgba(0, 4, 40, 0.45);
  z-index: 1;
}
.lp-why-photo-sm {
  position: absolute;
  left: clamp(-24px, -4vw, -12px);
  bottom: clamp(-24px, -4vw, -12px);
  width: min(46%, 220px);
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  border-radius: 18px;
  box-shadow: 0 26px 60px rgba(0, 4, 40, 0.5);
  z-index: 2;
}

@media (max-width: 992px) {
  .lp-why-grid { grid-template-columns: 1fr; align-items: start; }
  .lp-why-media { max-width: 620px; width: 100%; justify-self: center; margin-top: 12px; }
  .lp-why-stack { margin-inline: auto; }
  .lp-why-photo-sm { width: min(44%, 200px); left: -10px; bottom: -16px; }
}
@media (max-width: 560px) {
  .lp-why-stack { width: min(100%, 340px); }
  .lp-why-photo-sm { width: min(44%, 150px); left: -8px; bottom: -14px; }
  .lp-acc-item p { padding-left: 20px; }
}
@media (prefers-reduced-motion: reduce) {
  .lp-acc-item::details-content,
  .lp-acc-chevron { transition: none; }
}

/* ---------- 4. Who we are: two-row grid, circular icons ---------- */
.lp-about-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}
.lp-tile {
  padding: 28px;
  border-radius: var(--r-card);
  background: var(--offwhite);
  border: 1px solid transparent;
}
.lp-tile .lp-circle { margin-bottom: 18px; }
.lp-tile h3 { font-size: 1.15rem; font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.lp-tile p { color: var(--muted); font-size: 16px; line-height: 1.65; }
.lp-tile--navy { background: var(--green); border-color: var(--green); }
.lp-tile--navy h3 { color: var(--white); }
.lp-tile--navy p { color: var(--muted-on-dark); }
/* Vision: a deeper brand blue so pure white text passes contrast (4.8:1; white on the cyan is only 2.9:1) */
.lp-tile--blue { background: #057c9a; border-color: #057c9a; }
.lp-tile--blue .lp-circle { background: var(--white); color: #057c9a; }
.lp-tile--blue h3,
.lp-tile--blue p { color: var(--white); }
.lp-about-media {
  margin: 0;
  min-height: 240px;
  border-radius: var(--r-card);
  overflow: hidden;
}
.lp-about-media img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ---------- 5. Services (2026-10-28): white cards that fill navy from the bottom on hover ----------
   Head reuses .lp-head (eyebrow + title left, intro + "View All Services" right). Each card is a
   single link: the title's ::after covers the whole card, so the footer arrow is decorative. */
.svx-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
}
.svx-card {
  position: relative;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  min-height: 340px;
  padding: 30px 28px 26px;
  border: 1px solid var(--border);
  border-radius: 24px;
  background: var(--white);
  box-shadow: 0 1px 2px rgba(0, 11, 110, 0.04);
  overflow: hidden;
  transition: transform 0.35s ease, box-shadow 0.35s ease, border-color 0.35s ease;
}
/* Navy fill that rises on hover, with a soft cyan glow in the top-right corner */
.svx-card::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(120% 70% at 100% 0%, rgba(7, 166, 207, 0.35), transparent 60%),
    linear-gradient(160deg, #000b6e 0%, #00084e 100%);
  transform: scaleY(0);
  transform-origin: bottom;
  transition: transform 0.45s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.svx-card:hover,
.svx-card:focus-within {
  transform: translateY(-6px);
  border-color: transparent;
  box-shadow: 0 28px 56px rgba(0, 11, 110, 0.22);
}
.svx-card:hover::before,
.svx-card:focus-within::before { transform: scaleY(1); }

.svx-icon {
  display: grid;
  place-items: center;
  width: 56px;
  height: 56px;
  margin-bottom: 28px;
  border-radius: 16px;
  background: var(--green);
  color: var(--lime);
  transition: background 0.35s ease, color 0.35s ease, transform 0.35s ease;
}
.svx-icon .icon { width: 26px; height: 26px; }
.svx-title {
  margin: 0 0 10px;
  font-size: clamp(1.25rem, 1.6vw, 1.45rem);
  font-weight: 800;
  line-height: 1.25;
  color: var(--green);
  transition: color 0.35s ease;
}
.svx-link { color: inherit; }
.svx-link:hover { text-decoration: none; }
.svx-link::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
.svx-link:focus-visible { outline: none; }
.svx-card:has(.svx-link:focus-visible) { outline: 3px solid #7fd1e6; outline-offset: 3px; }
.svx-text {
  margin: 0 0 20px;
  font-size: 16px;
  line-height: 1.7;
  color: var(--muted);
  transition: color 0.35s ease;
}
.svx-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0 0 24px;
  padding: 0;
  list-style: none;
}
.svx-tags li {
  padding: 6px 12px;
  border: 1px solid rgba(0, 11, 110, 0.14);
  border-radius: 8px;
  background: #f1f1f7;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--green);
  transition: background 0.35s ease, border-color 0.35s ease, color 0.35s ease;
}
.svx-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: auto;
  padding-top: 18px;
  border-top: 1px solid var(--border);
  font-size: 15px;
  font-weight: 800;
  color: var(--green);
  transition: color 0.35s ease, border-color 0.35s ease;
}
.svx-go {
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  background: var(--green);
  color: var(--white);
  transform: rotate(-45deg);
  transition: transform 0.35s ease, background 0.35s ease, color 0.35s ease;
}

/* Hover / keyboard focus: everything flips to the navy theme */
.svx-card:hover .svx-icon,
.svx-card:focus-within .svx-icon { background: var(--lime); color: var(--green); transform: rotate(-6deg) scale(1.05); }
.svx-card:hover .svx-title,
.svx-card:focus-within .svx-title { color: var(--white); }
.svx-card:hover .svx-text,
.svx-card:focus-within .svx-text { color: var(--muted-on-dark); }
.svx-card:hover .svx-tags li,
.svx-card:focus-within .svx-tags li { background: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.18); color: var(--text-on-dark); }
.svx-card:hover .svx-foot,
.svx-card:focus-within .svx-foot { color: var(--white); border-color: var(--border-dark); }
.svx-card:hover .svx-go,
.svx-card:focus-within .svx-go { transform: none; background: var(--lime); color: var(--green); }

@media (max-width: 620px) {
  .svx-grid { grid-template-columns: 1fr; }
  .svx-card { min-height: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .svx-card,
  .svx-card::before,
  .svx-icon,
  .svx-go { transition: none; }
  .svx-card:hover,
  .svx-card:focus-within,
  .svx-card:hover .svx-icon,
  .svx-card:focus-within .svx-icon { transform: none; }
}

/* ---------- 6. Tech stack: three light cards on white (the dark variant below is unused since 2026-10-28) ---------- */
.lp-stack { background: var(--white); }
.lp-stack-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}
.lp-stack-card {
  padding: 28px;
  border-radius: var(--r-card);
  background: var(--offwhite);
  border: 1px solid var(--border);
  transition: border-color 0.25s ease, background 0.25s ease;
}
.lp-stack-card:hover { border-color: var(--lime); background: var(--white); }
.lp-stack-card .lp-circle { margin-bottom: 20px; }
.lp-stack-card h3 { font-size: 1.2rem; font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.lp-stack-card p { font-size: 16px; line-height: 1.6; color: var(--muted); margin-bottom: 20px; }
.lp-chips { display: flex; flex-wrap: wrap; gap: 8px; list-style: none; padding: 0; margin: 0; }
.lp-chips li {
  padding: 7px 12px;
  border-radius: var(--r-chip);
  background: var(--white);
  border: 1px solid var(--border);
  color: var(--green);
  font-size: 14.5px;
  font-weight: 600;
}

/* Tech stack on deep navy (alternates with the light services canvas above and the off-white portfolio below) */
.lp-stack--dark { background: linear-gradient(160deg, #000b6e 0%, #051071 55%, #151f7a 100%); }
.lp-stack--dark .lp-stack-head p { color: var(--muted-on-dark); }
.lp-stack--dark .lp-stack-card { background: rgba(255, 255, 255, 0.05); border-color: var(--border-dark); }
.lp-stack--dark .lp-stack-card:hover { background: rgba(7, 166, 207, 0.08); border-color: var(--lime); }
.lp-stack--dark .lp-stack-card h3 { color: var(--white); }
.lp-stack--dark .lp-stack-card p { color: var(--muted-on-dark); }
.lp-stack--dark .lp-chips li { background: rgba(237, 238, 245, 0.08); border-color: var(--border-dark); color: var(--text-on-dark); }

/* ---------- 7. Clients: logo + domain only, four per row ---------- */
.lp-client-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 20px;
  list-style: none;
  padding: 0;
  margin: 0;
}
.lp-client {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  height: 100%;
  padding: 28px 16px 22px;
  border-radius: var(--r-card);
  background: var(--offwhite);
  border: 1px solid transparent;
  text-align: center;
  transition: transform 0.25s ease, border-color 0.25s ease, background 0.25s ease;
}
.lp-client img { width: 72px; height: 72px; object-fit: contain; }
.lp-client span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
  word-break: break-word;
}
.lp-client span .icon { width: 14px; height: 14px; flex-shrink: 0; color: var(--muted); }
.lp-client:hover,
.lp-client:focus-visible {
  transform: translateY(-3px);
  background: var(--white);
  border-color: var(--lime);
}
.lp-client:hover span { color: var(--green); }

/* ---------- 8. Final CTA: cyan block with photo, contact card below ---------- */
/* Azure gradient one step brighter than the hero and two steps from the navy footer.
   White text: 5:1 on #057c9a, 7.5:1 on #045c73 (WCAG AA for body text throughout). */
.lp-cta {
  background: linear-gradient(135deg, #057c9a 0%, #046a84 50%, #045c73 100%);
  color: var(--white);
}
.lp-cta .eyebrow { color: #c4eaf4; }
.lp-cta .section-title { color: var(--white); text-wrap: balance; margin-bottom: 18px; }
.lp-cta-main {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(32px, 5vw, 64px);
  align-items: center;
}
.lp-cta-copy p { font-size: 17px; line-height: 1.7; color: rgba(255, 255, 255, 0.9); max-width: 48ch; margin-bottom: 30px; }
.lp-cta-buttons { display: flex; flex-wrap: wrap; gap: 14px; }
/* Primary action inverts to white with a navy label; WhatsApp stays an outline */
.btn-white { background: var(--white); color: var(--green); }
.btn-white:hover { background: #e3f5fa; color: var(--green); transform: translateY(-1px); box-shadow: 0 10px 24px rgba(0, 11, 110, 0.25); }
.lp-cta .btn-outline-light { border-color: rgba(255, 255, 255, 0.6); color: var(--white); }
.lp-cta .btn-outline-light:hover { border-color: var(--white); background: rgba(255, 255, 255, 0.1); }
.lp-cta .btn:focus-visible { outline-color: var(--white); }
.lp-cta-media {
  margin: 0;
  border-radius: var(--r-card);
  overflow: hidden;
  aspect-ratio: 4 / 3;
  background: rgba(255, 255, 255, 0.1);
  box-shadow: 0 24px 50px rgba(0, 10, 97, 0.3);
}
.lp-cta-media img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* "Reach us directly" card: intro + consultation button on the left, three clickable action
   tiles on the right. Tiles are top-aligned so a two-line address never shifts the others.
   Cyan #057c9a text on white is 5:1 (AA). */
.reach-card {
  margin-top: clamp(36px, 5vw, 56px);
  padding: clamp(24px, 3vw, 40px);
  border-radius: var(--r-card);
  background: var(--white);
  box-shadow: 0 24px 50px rgba(0, 10, 97, 0.18);
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 2.15fr);
  gap: clamp(24px, 3.5vw, 48px);
  align-items: stretch;
  color: var(--ink);
}
.reach-intro { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.reach-eyebrow { font-size: 13px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: #057c9a; }
.reach-title { margin: 0; font-family: var(--font-heading); font-size: clamp(1.5rem, 2.2vw, 1.9rem); font-weight: 800; line-height: 1.15; color: var(--ink); }
.reach-text { margin: 0; font-size: 16px; line-height: 1.65; color: var(--muted); max-width: 34ch; }
.reach-btn { margin-top: auto; }
.reach-btn:hover .btn-arrow { transform: translateX(4px); }

.reach-tiles {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
  list-style: none;
  margin: 0;
  padding: 0;
}
.reach-tiles li { display: flex; min-width: 0; }
.reach-tile {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
  padding: 20px;
  border: 1px solid var(--border);
  border-radius: 16px;
  background: var(--offwhite);
  color: var(--ink);
  transition: border-color 0.2s ease, background 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}
.reach-tile:hover {
  border-color: var(--lime);
  background: var(--white);
  transform: translateY(-2px);
  box-shadow: 0 14px 30px rgba(0, 11, 110, 0.1);
}
.reach-tile:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }
.reach-icon {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  margin-bottom: 8px;
  border-radius: 12px;
  background: rgba(7, 166, 207, 0.14);
  color: var(--green);
}
.reach-icon .icon { width: 20px; height: 20px; }
.reach-label { font-size: 13px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); }
.reach-value { font-size: 16px; font-weight: 600; line-height: 1.45; overflow-wrap: anywhere; }
.reach-action {
  margin-top: auto;
  padding-top: 10px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 15px;
  font-weight: 700;
  color: #057c9a;
}
.reach-action .btn-arrow { width: 16px; height: 16px; transition: transform 0.2s ease; }
.reach-tile:hover .reach-action .btn-arrow { transform: translateX(4px); }

@media (max-width: 1080px) {
  .reach-card { grid-template-columns: 1fr; }
  .reach-text { max-width: 60ch; }
  .reach-btn { margin-top: 6px; }
}
/* Phones: tiles become full-width rows, icon on the left */
@media (max-width: 760px) {
  .reach-tiles { grid-template-columns: 1fr; gap: 10px; }
  .reach-tile {
    display: grid;
    grid-template-columns: 44px minmax(0, 1fr);
    column-gap: 14px;
    row-gap: 2px;
    padding: 16px;
  }
  .reach-icon { grid-row: 1 / span 3; margin-bottom: 0; align-self: start; }
  .reach-action { padding-top: 6px; }
  .reach-btn { width: 100%; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .reach-tile, .reach-action .btn-arrow { transition: none; }
  .reach-tile:hover { transform: none; }
}

/* Tech stack heading: one straight line at every width (size follows the viewport instead of wrapping) */
.lp-stack-head { margin-bottom: clamp(32px, 4vw, 48px); }
.lp-stack-head .lp-oneline {
  white-space: nowrap;
  font-size: clamp(1.15rem, 5.4vw, 3rem);
  margin-bottom: 14px;
}
.lp-stack-head p { color: var(--muted); font-size: 16.5px; line-height: 1.7; max-width: 60ch; }

/* Home CTA with three standalone touchpoint cards: shorter band, cards close to the footer */
.lp-cta--cards { padding-block: clamp(64px, 8vw, 96px) clamp(36px, 4vw, 48px); }
.lp-touch {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
  list-style: none;
  padding: 0;
  margin: clamp(36px, 4vw, 52px) 0 0;
}
.lp-touch-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
  height: 100%;
  padding: 24px;
  border-radius: var(--r-card);
  background: var(--white);
  color: var(--ink);
  border: 1px solid transparent;
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.lp-touch-card .lp-circle { width: 46px; height: 46px; margin-bottom: 12px; }
.lp-touch-card .lp-circle .icon { width: 20px; height: 20px; }
.lp-touch-label { font-size: 13px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.lp-touch-card strong { font-size: 16px; font-weight: 700; color: var(--green); line-height: 1.5; word-break: break-word; }
.lp-touch-action {
  margin-top: auto;
  padding-top: 14px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 700;
  color: #057c9a;
}
.lp-touch-card:hover,
.lp-touch-card:focus-visible {
  transform: translateY(-4px);
  border-color: #92d8ea;
  box-shadow: 0 20px 40px rgba(0, 10, 97, 0.3);
}
.lp-touch-card:hover .btn-arrow { transform: translateX(4px); }
.lp-touch-card:focus-visible { outline: 3px solid var(--white); outline-offset: 3px; }

/* ---------- Responsive ---------- */
@media (max-width: 1080px) {
  .lp-client-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 992px) {
  .lp-head,
  .lp-stats-grid,
  .lp-cta-main { grid-template-columns: 1fr; }
  .lp-head { align-items: start; }
  .lp-about-grid,
  .lp-stack-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lp-about-media { grid-column: 1 / -1; aspect-ratio: 16 / 7; min-height: 0; }
  .lp-touch { grid-template-columns: 1fr; }
}

@media (max-width: 620px) {
  .lp-about-grid,
  .lp-stack-grid { grid-template-columns: 1fr; }
  .lp-client-grid { gap: 12px; }
  .lp-client { padding: 22px 10px 18px; }
  .lp-client img { width: 56px; height: 56px; }
  .lp-client span { font-size: 13px; }
  .lp-client span .icon { display: none; }
  .lp-stats-block { padding: 24px 16px; }
  .lp-stat { padding-inline: 10px; }
  .lp-stat dt { font-size: 12px; letter-spacing: 0.04em; }
  .lp-hero-cta .btn { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .lp-client { transition: none; }
  .lp-client:hover { transform: none; }
}

/* ============ Inner pages refresh (About, Services, Academy, Contact) ============
   Same single flat colour as the home hero (no gradient), copy aligned with the logo, no glows.
   Prefixes: ab- (about), sv- (services), acx- (academy header), ctx- (contact header). */
.ab-hero,
.sv-hero,
.acx-hero,
.ctx-hero {
  background: #000855;
  color: var(--text-on-dark);
}
.ab-hero .eyebrow,
.sv-hero .eyebrow,
.acx-hero .eyebrow,
.ctx-hero .eyebrow { color: #92d8ea; }
.ab-hero h1,
.sv-hero h1,
.acx-hero h1,
.ctx-hero h1 {
  font-size: clamp(2rem, 4.2vw, 3.3rem);
  line-height: 1.1;
  color: var(--white);
  text-wrap: balance;
  margin-bottom: 18px;
}
.ab-hero p,
.sv-hero p,
.acx-hero p,
.ctx-hero p { font-size: clamp(16px, 1.5vw, 18px); line-height: 1.7; color: rgba(244, 244, 249, 0.86); max-width: 58ch; }

.ab-section-head { margin-bottom: clamp(32px, 4vw, 48px); }
.ab-section-head .section-title { text-wrap: balance; }

/* ---------- About ---------- */
/* Photo header (About, Services, Programmes): the photo fills the header under one flat
   colour overlay, the same treatment as the home hero (no gradient). Set the photo with
   style="--hero-photo: url(...)" and optionally --hero-photo-pos to choose the focal point. */
.hero-photo { position: relative; isolation: isolate; overflow: hidden; }
.hero-photo::before,
.hero-photo::after { content: ""; position: absolute; pointer-events: none; }
.hero-photo::before {
  inset: 0;
  z-index: -2;
  background: var(--hero-photo) var(--hero-photo-pos, center) / cover no-repeat;
}
.hero-photo::after {
  inset: 0;
  z-index: -1;
  background: var(--hero-blend);
}

/* Compact headers, same height as the Portfolio benchmark */
.ab-hero,
.sv-hero,
.acx-hero { padding-block: clamp(56px, 8vw, 96px); }
.ab-hero-copy,
.acx-hero-copy { max-width: 640px; }
.ab-hero-cta { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 30px; }
.ab-story-media,
.ab-caps-media { margin: 0; border-radius: var(--r-card); overflow: hidden; }
.ab-story-media img,
.ab-caps-media img { display: block; width: 100%; height: 100%; object-fit: cover; }

.ab-story-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
  gap: clamp(32px, 5vw, 72px);
  align-items: center;
}
.ab-story-media { aspect-ratio: 1 / 1; }
.ab-story-copy .section-title { margin-bottom: 20px; text-wrap: balance; }
.ab-story-copy p { color: var(--muted); font-size: 16.5px; line-height: 1.75; margin-bottom: 16px; max-width: 60ch; }

.ab-purpose { background: linear-gradient(160deg, #000b6e 0%, #051071 55%, #151f7a 100%); color: var(--text-on-dark); }
.ab-purpose .section-title { color: var(--white); }
.ab-purpose .eyebrow { color: #92d8ea; }
.ab-purpose-head { margin-bottom: clamp(32px, 4vw, 48px); }
.ab-purpose-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
.ab-purpose-card {
  padding: clamp(28px, 3.5vw, 44px);
  border-radius: var(--r-card);
  background: #057c9a;
  color: var(--white);
}
.ab-purpose-card .lp-circle { background: var(--white); color: #057c9a; margin-bottom: 22px; }
.ab-purpose-label {
  display: block;
  font-size: 13.5px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.8);
  margin-bottom: 10px;
}
.ab-purpose-card p { font-family: var(--font-heading); font-size: clamp(1.2rem, 2vw, 1.5rem); line-height: 1.4; font-weight: 600; }
.ab-purpose-card--light { background: #eaf8fb; color: var(--green); }
.ab-purpose-card--light .lp-circle { background: var(--green); color: #92d8ea; }
.ab-purpose-card--light .ab-purpose-label { color: #4c5499; }

.ab-values-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.ab-value {
  padding: 28px;
  border-radius: var(--r-card);
  background: var(--white);
  border: 1px solid var(--border);
  transition: transform 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
}
.ab-value:hover { transform: translateY(-4px); border-color: var(--lime); box-shadow: 0 18px 40px rgba(0, 11, 110, 0.1); }
.ab-value .lp-circle { margin-bottom: 18px; }
.ab-value h3 { font-size: 1.15rem; color: var(--ink); margin-bottom: 8px; }
.ab-value p { color: var(--muted); font-size: 16px; line-height: 1.65; }

.ab-caps-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: clamp(32px, 5vw, 64px);
  align-items: start;
}
.ab-caps-intro .section-title { margin-bottom: 16px; text-wrap: balance; }
.ab-caps-intro p { color: var(--muted); font-size: 16.5px; line-height: 1.7; margin-bottom: 24px; max-width: 46ch; }
.ab-caps-media { aspect-ratio: 3 / 2; }
.ab-caps-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 12px; }
.ab-cap {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 20px 22px;
  border-radius: var(--r-card);
  background: var(--offwhite);
  border: 1px solid transparent;
  color: var(--ink);
  transition: background 0.25s ease, border-color 0.25s ease;
}
.ab-cap-text { display: flex; flex-direction: column; gap: 4px; flex: 1; min-width: 0; }
.ab-cap-text strong { font-family: var(--font-heading); font-size: 1.1rem; color: var(--green); }
.ab-cap-text span { color: var(--muted); font-size: 16px; line-height: 1.55; }
.ab-cap > .btn-arrow { color: #057c9a; }
.ab-cap:hover { background: var(--white); border-color: var(--lime); }
.ab-cap:hover > .btn-arrow { transform: translateX(4px); }

.ab-process { background: var(--white); }
.ab-steps {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 20px;
}
.ab-step {
  position: relative;
  padding: 26px 24px;
  border-radius: var(--r-card);
  background: var(--offwhite);
  border-top: 3px solid var(--lime);
}
.sv-process .ab-step { background: var(--white); }
.ab-step-num {
  display: inline-grid;
  place-items: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--green);
  color: var(--white);
  font-family: var(--font-heading);
  font-weight: 700;
  margin-bottom: 16px;
}
.ab-step h3 { font-size: 1.1rem; color: var(--ink); margin-bottom: 6px; }
.ab-step p { color: var(--muted); font-size: 16px; line-height: 1.6; }

.ab-close {
  background: linear-gradient(135deg, #057c9a 0%, #046a84 50%, #045c73 100%);
  color: var(--white);
  padding-block: clamp(48px, 6vw, 72px);
}
.ab-close-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px 48px;
  flex-wrap: wrap;
}
.ab-close h2 { font-size: clamp(1.6rem, 3vw, 2.3rem); color: var(--white); margin-bottom: 8px; text-wrap: balance; }
.ab-close p { color: rgba(255, 255, 255, 0.9); max-width: 52ch; }
.ab-close-actions { display: flex; flex-wrap: wrap; gap: 14px; }
.ab-close .btn-outline-light { border-color: rgba(255, 255, 255, 0.6); color: var(--white); }
.ab-close .btn-outline-light:hover { border-color: var(--white); background: rgba(255, 255, 255, 0.1); }

/* ---------- Services ---------- */
.sv-hero-list {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  list-style: none;
  padding: 0;
  margin: 28px 0 0;
}
.sv-hero-list li {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  border-radius: var(--r-chip);
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.18);
  font-size: 15px;
  font-weight: 600;
  color: var(--white);
}
.sv-hero-list .icon { width: 17px; height: 17px; color: #92d8ea; }

.sv-list .container { display: grid; gap: clamp(28px, 4vw, 48px); }
.sv-block {
  display: grid;
  grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
  border-radius: var(--r-card);
  background: var(--white);
  border: 1px solid var(--border);
  overflow: hidden;
  transition: box-shadow 0.25s ease, border-color 0.25s ease;
}
.sv-block:hover { border-color: rgba(7, 166, 207, 0.5); box-shadow: 0 24px 50px rgba(0, 11, 110, 0.1); }
.sv-block:nth-child(even) { grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr); }
.sv-block:nth-child(even) .sv-block-media { order: 2; }
.sv-block-media { position: relative; min-height: 280px; background: var(--offwhite); }
.sv-block-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.sv-block-badge {
  position: absolute;
  left: 20px;
  top: 20px;
  display: inline-grid;
  place-items: center;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--white);
  color: #057c9a;
  box-shadow: 0 10px 24px rgba(0, 11, 110, 0.2);
}
.sv-block-body { padding: clamp(24px, 3.5vw, 44px); }
.sv-block-body h2 { font-size: clamp(1.5rem, 2.6vw, 2rem); color: var(--green); margin-bottom: 8px; }
.sv-block-body h2 a { color: inherit; }
.sv-block-body h2 a:hover { text-decoration: underline; text-underline-offset: 5px; }
.sv-block-lead { color: var(--muted); font-size: 16.5px; line-height: 1.7; margin-bottom: 22px; }
.sv-block-body h3 {
  font-family: var(--font);
  font-size: 13.5px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #4c5499;
  margin: 0 0 12px;
}
.sv-block-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 28px; margin-bottom: 22px; }
.sv-checks { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.sv-checks li { position: relative; padding-left: 26px; font-size: 16px; line-height: 1.5; color: var(--ink); }
.sv-checks li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 3px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #057c9a url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 8.2l2.2 2.2 4.8-4.8' fill='none' stroke='white' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 100% no-repeat;
}
.sv-chips { margin-bottom: 22px; }
.sv-packages { list-style: none; padding: 0; margin: 0 0 24px; display: grid; gap: 8px; }
.sv-packages li {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  border-radius: var(--r-chip);
  background: var(--offwhite);
  font-size: 16px;
}
.sv-packages strong { color: var(--green); }
.sv-packages span { color: var(--muted); text-align: right; }
.sv-block-cta { display: flex; flex-wrap: wrap; gap: 12px; }

/* ---------- Academy header + topics ---------- */
/* Highlights: three light cards under the course grid, same surface as the course cards.
   Navy-to-cyan icon tile carries the brand colour; white icon on it is 7:1+ at the navy end. */
.acx-perks {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(12px, 1.6vw, 20px);
  list-style: none;
  padding: 0;
  margin: clamp(36px, 4.5vw, 56px) 0 0;
}
.acx-perk {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding: clamp(18px, 2vw, 24px);
  border: 1px solid var(--border);
  border-radius: var(--r-card);
  background: var(--white);
  transition: border-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}
.acx-perk:hover {
  border-color: rgba(7, 166, 207, 0.55);
  transform: translateY(-2px);
  box-shadow: 0 16px 34px rgba(0, 11, 110, 0.08);
}
.acx-perk-icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border-radius: 13px;
  background: linear-gradient(140deg, var(--green) 0%, #057c9a 100%);
  box-shadow: 0 8px 18px rgba(0, 11, 110, 0.18);
  color: var(--white);
}
.acx-perk-icon .icon { width: 21px; height: 21px; }
.acx-perk-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.acx-perk-title { font-size: 16px; font-weight: 700; line-height: 1.3; color: var(--ink); }
.acx-perk-text { font-size: 15px; line-height: 1.55; color: var(--muted); }
/* Tablets: three narrow cards, so the icon sits above the text instead of beside it */
@media (min-width: 621px) and (max-width: 992px) {
  .acx-perk { flex-direction: column; gap: 14px; }
}
@media (prefers-reduced-motion: reduce) {
  .acx-perk { transition: none; }
  .acx-perk:hover { transform: none; }
}

/* Programme list heading sits in the toolbar, opposite the Online / Physical switch */
.acx-programmes-head { margin: 0; }

/* ---------- Contact header + touchpoints ---------- */
.ctx-hero { padding-block: clamp(56px, 7vw, 88px) clamp(112px, 12vw, 140px); }
.ctx-channels {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
  margin-top: -72px;
}
.ctx-channel {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
  padding: 24px;
  border-radius: var(--r-card);
  background: var(--white);
  border: 1px solid var(--border);
  box-shadow: 0 18px 40px rgba(0, 11, 110, 0.1);
  color: var(--ink);
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.ctx-channel-icon {
  display: inline-grid;
  place-items: center;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--lime);
  color: var(--white);
  margin-bottom: 12px;
}
.ctx-channel-icon .icon { width: 21px; height: 21px; }
.ctx-channel-label { font-size: 13px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.ctx-channel strong { font-size: 16.5px; color: var(--green); word-break: break-word; }
.ctx-channel-action { margin-top: 12px; display: inline-flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 700; color: #057c9a; }
.ctx-channel:hover,
.ctx-channel:focus-visible { transform: translateY(-4px); border-color: var(--lime); box-shadow: 0 24px 48px rgba(0, 11, 110, 0.16); }
.ctx-channel:hover .btn-arrow { transform: translateX(4px); }
/* WhatsApp keeps its own green so it is recognisable at a glance */
.ctx-channel--wa .ctx-channel-icon { background: #25d366; }
.ctx-channel--wa .ctx-channel-action { color: #128c4b; }
.ctx-channel--wa:hover { border-color: #25d366; }

/* ---------- Inner pages: responsive ---------- */
@media (max-width: 992px) {
  .ab-story-grid,
  .ab-caps-grid { grid-template-columns: 1fr; }
  .ab-values-grid,
  .ab-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ab-story-media { aspect-ratio: 16 / 9; }
  .sv-block,
  .sv-block:nth-child(even) { grid-template-columns: 1fr; }
  .sv-block:nth-child(even) .sv-block-media { order: 0; }
  .sv-block-media { min-height: 220px; }
  .ctx-channels { grid-template-columns: 1fr; }
}
@media (max-width: 620px) {
  .acx-perks { grid-template-columns: 1fr; gap: 10px; }
  .ab-purpose-grid,
  .ab-values-grid,
  .ab-steps,
  .sv-block-cols { grid-template-columns: 1fr; }
  .ab-hero-cta .btn,
  .ab-close-actions .btn { width: 100%; }
  .sv-packages li { flex-direction: column; gap: 2px; }
  .sv-packages span { text-align: left; }
}
@media (prefers-reduced-motion: reduce) {
  .ab-value,
  .ctx-channel { transition: none; }
}
.ctx-channels-band { background: var(--offwhite); }

/* Page hero without the orbit rings, glow and grain (flat colour, same as the home and inner-page heroes) */
.page-hero--plain { background: #000855; }

/* ============ Landing refinements (2026-10-28) ============ */

/* Section headings 10% smaller (was clamp(1.9rem, 3.6vw, 3rem)) */
.section-title { font-size: clamp(1.71rem, 3.24vw, 2.7rem); }
.lp-stack-head .lp-oneline { font-size: clamp(1.04rem, 4.86vw, 2.7rem); }

/* Hero headline: a little smaller */
.lp-hero-title {
  font-family: var(--font-heading);
  font-size: clamp(1.85rem, 4.2vw, 3.3rem);
  letter-spacing: -0.02em;
}

/* Secondary buttons on the hero and final CTA: deep brand fill + white text on hover */
.lp-hero .btn-outline-light:hover,
.lp-cta .btn-outline-light:hover,
.lp-cta .btn-white:hover {
  background: var(--green);
  border-color: var(--green);
  color: var(--white);
}

/* Deep brand button ("View All Services"): black on hover */
.btn-deep { background: var(--green); color: var(--white); }
.btn-deep:hover { background: #000000; color: var(--white); transform: translateY(-1px); }

/* No drop shadows on button hover, site-wide */
.btn:hover,
.btn:focus-visible { box-shadow: none; }

/* Header "Book A Service": accent blue at rest, deep brand on hover */
.btn-nav:hover,
.btn-nav:focus-visible { background: var(--green); border-color: var(--green); color: var(--white); }

/* "Start a Project" on the navy Why Choose Us band: white fill on hover */
.lp-why .btn-primary:hover,
.lp-why .btn-primary:focus-visible { background: var(--white); border-color: var(--white); color: var(--green); }

/* ---------- Track record: capsule layout ---------- */
.lp-proof { padding-block: clamp(56px, 7vw, 96px); }
/* Left-aligned like the other home section heads (tech stack, services, who we are) */
.lp-proof-head { text-align: left; margin: 0 0 clamp(28px, 5vw, 48px); }
/* Heading 53px and intro 19px on desktop (owner's sizes); both scale down on small screens */
.lp-proof-head .section-title { margin: 0; font-size: clamp(2rem, 6vw, 53px); }
.lp-proof-head p { color: var(--muted); font-size: clamp(16px, 2.6vw, 19px); line-height: 1.6; max-width: 860px; margin: 12px 0 0; }
.lp-proof-capsules {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(16px, 3vw, 24px);
  align-items: stretch;
}
.lp-proof-capsule {
  display: flex;
  align-items: center;
  gap: clamp(14px, 2.4vw, 18px);
  border-radius: 999px;
  background: var(--white);
  border: 1px solid rgba(15, 23, 42, 0.12);
  padding: clamp(10px, 1.6vw, 12px) clamp(18px, 4vw, 28px);
  box-shadow: none;
  transition: transform 0.25s ease, border-color 0.25s ease;
}
.lp-proof-capsule:hover {
  transform: translateY(-2px);
  border-color: rgba(5, 124, 154, 0.4);
}
.lp-proof-capsule-icon {
  width: clamp(56px, 7vw, 68px);
  height: clamp(56px, 7vw, 68px);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.lp-proof-capsule-icon .icon { width: clamp(26px, 3vw, 30px); height: clamp(26px, 3vw, 30px); color: var(--white); }
.lp-proof-capsule-icon--blue { background: #057c9a; }
.lp-proof-capsule-icon--navy { background: #000b6e; }
.lp-proof-capsule-icon--globe { background: #057c9a; }
.lp-proof-capsule-content { display: flex; flex-direction: column; gap: 2px; }
.lp-proof-capsule-num {
  font-family: var(--font-heading);
  font-size: clamp(2rem, 4vw, 2.8rem);
  font-weight: 800;
  line-height: 0.9;
  letter-spacing: -0.03em;
  color: #000000;
  font-variant-numeric: lining-nums tabular-nums;
}
.lp-proof-capsule-label {
  font-size: clamp(12px, 1vw, 13px);
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(0, 0, 0, 0.7);
}

/* ---------- Who we are: head on the card grid; button starts at the third card ---------- */
.lp-head--cols {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  column-gap: 20px;
}
.lp-head--cols .lp-head-title { grid-column: 1 / span 2; }
.lp-head--cols .lp-head-action { grid-column: 3; justify-self: end; align-self: end; }

/* ---------- Portfolio: head on the bento grid; one-line title over two tiles, button starts at the third ---------- */
.folio-head {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  column-gap: 20px;
  row-gap: 20px;
  align-items: end;
}
/* :first-child only: the action wrapper is a div too, and "> div" used to pull it under the title, mid-page */
.folio-head > div:first-child { grid-column: 1 / span 2; }
.folio-head-action { grid-column: 3; justify-self: end; align-self: end; }
/* Head with only a button on the right (Our Clients): end it on the right edge like the others */
.lp-head-side--end { align-items: flex-end; }
.folio-head .section-title {
  max-width: none;
  margin-bottom: 0;
  white-space: nowrap;
  font-size: clamp(1.2rem, 5.4vw, 2.7rem);
}
.folio-head > .btn { grid-column: 3; justify-self: end; }

/* ---------- Services: View All Services in deep brand ---------- */
/* (card colours live in section 5 above) */

/* ---------- Tech stack: white icons in the circles ---------- */
.lp-stack-card .lp-circle { background: var(--green); color: var(--white); }

/* ---------- Reach us directly: standalone section above the footer ---------- */
.lp-reach { padding-block: clamp(56px, 7vw, 88px); }
.lp-reach-head { margin-bottom: clamp(28px, 4vw, 40px); }
.lp-reach .lp-touch { margin: 0; }
.lp-reach .lp-touch-card { border-color: var(--border); }
.lp-reach .lp-touch-card:hover,
.lp-reach .lp-touch-card:focus-visible { border-color: var(--lime); box-shadow: 0 20px 40px rgba(0, 11, 110, 0.12); }
.lp-reach .lp-touch-card:focus-visible { outline: 3px solid #7fd1e6; }

/* ---------- Responsive ---------- */
@media (max-width: 992px) {
  .lp-proof-capsules { grid-template-columns: 1fr; }
  .lp-head--cols .lp-head-action,
  .folio-head-action { justify-self: start; }
  .lp-head--cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lp-head--cols .lp-head-title { grid-column: 1 / -1; }
  /* Without this the button keeps grid-column: 3, which adds implicit columns and pushes it off-screen on phones */
  .lp-head--cols .lp-head-action,
  .lp-head--cols .lp-head-action-wrap { grid-column: 1; }
  .folio-head { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .folio-head > div:first-child { grid-column: 1 / -1; }
  .folio-head-action { grid-column: 1; }
  .lp-head-side--end { align-items: flex-start; }
}
@media (max-width: 620px) {
  .lp-head--cols { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .folio-head { grid-template-columns: 1fr; }
  .folio-head-action { grid-column: 1; justify-self: start; }
}
@media (max-width: 1080px) {
  .lp-proof-capsules { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .lp-proof-capsule { flex-direction: column; text-align: center; padding: 16px 18px; }
  .lp-proof-capsule-content { align-items: center; }
}
@media (max-width: 480px) {
  .lp-proof-capsules { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .lp-proof-stat { transition: none; }
}

/* ============ Course cart (header badge, slide-out drawer, /cart page) ============ */
.nav-cart {
  position: relative;
  display: inline-grid;
  place-items: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--white);
  color: var(--green);
  transition: background 0.2s ease, border-color 0.2s ease;
}
.nav-cart .icon { width: 20px; height: 20px; }
.nav-cart:hover { background: rgba(7, 166, 207, 0.12); border-color: rgba(5, 124, 154, 0.45); }
.nav-cart:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }
.nav-cart-count {
  position: absolute;
  top: -4px;
  right: -4px;
  display: grid;
  place-items: center;
  min-width: 20px;
  height: 20px;
  padding: 0 5px;
  border-radius: 999px;
  border: 2px solid var(--white);
  background: #057c9a;
  color: var(--white);
  font-size: 12px;
  font-weight: 800;
  line-height: 1;
  font-variant-numeric: lining-nums tabular-nums;
}
.nav-cart-count[hidden] { display: none; }
.nav-cart-count.is-bumped { animation: cart-bump 0.35s ease; }
@keyframes cart-bump { 50% { transform: scale(1.3); } }

/* "Added to cart" toasts: top right, below the sticky header (z-index 1200) */
.cart-toasts {
  position: fixed;
  top: 96px;
  right: 20px;
  z-index: 1300;
  display: grid;
  gap: 10px;
  width: min(380px, calc(100% - 32px));
  pointer-events: none;
}
.cart-toast {
  display: grid;
  grid-template-columns: 52px minmax(0, 1fr) auto;
  gap: 12px;
  align-items: center;
  padding: 12px 12px 12px 14px;
  border: 1px solid var(--border);
  border-left: 4px solid #057c9a;
  border-radius: var(--r-card);
  background: var(--white);
  box-shadow: 0 18px 44px rgba(0, 5, 52, 0.18);
  pointer-events: auto;
  opacity: 0;
  transform: translateX(16px);
  transition: opacity 0.25s ease, transform 0.25s ease;
}
.cart-toast.is-in { opacity: 1; transform: none; }
.cart-toast.is-error { border-left-color: var(--danger); }
.cart-toast-media { position: relative; display: grid; place-items: center; width: 52px; height: 52px; border-radius: 10px; background: var(--offwhite); }
.cart-toast-media img { width: 100%; height: 100%; object-fit: cover; border-radius: 10px; }
.cart-toast-tick {
  position: absolute;
  right: -6px;
  bottom: -6px;
  display: grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border: 2px solid var(--white);
  border-radius: 50%;
  background: var(--success);
  color: var(--white);
}
.cart-toast-media:not(:has(img)) .cart-toast-tick { position: static; width: 32px; height: 32px; border: 0; }
.cart-toast.is-error .cart-toast-tick { background: var(--danger); }
.cart-toast-tick .icon { width: 12px; height: 12px; }
.cart-toast-media:not(:has(img)) .cart-toast-tick .icon { width: 16px; height: 16px; }
.cart-toast-body p { font-size: 15px; font-weight: 700; line-height: 1.4; color: var(--ink); }
.cart-toast-link { display: inline-flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 14.5px; font-weight: 800; color: #057c9a; }
.cart-toast-link:hover { color: var(--green); }
.cart-toast-link:hover .btn-arrow { transform: translateX(3px); }
.cart-toast-close {
  align-self: start;
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
}
.cart-toast-close .icon { width: 14px; height: 14px; }
.cart-toast-close:hover { background: var(--offwhite); color: var(--ink); }
.cart-toast-close:focus-visible,
.cart-toast-link:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; }

/* Cart page: courses + promo on the left, order summary on the right */
.cart-back { display: inline-flex; align-items: center; gap: 8px; margin-bottom: 20px; font-size: 16px; font-weight: 700; color: var(--green); }
.cart-back .icon { width: 16px; height: 16px; transform: rotate(180deg); transition: transform 0.2s ease; }
.cart-back:hover { color: #057c9a; }
.cart-back:hover .icon { transform: rotate(180deg) translateX(3px); }
.cart-layout { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 24px; align-items: start; }
.cart-main { display: grid; gap: 20px; }
.cart-heading { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; font-size: 1.2rem; font-weight: 800; color: var(--ink); }
.cart-count-pill {
  padding: 4px 10px;
  border-radius: 999px;
  background: rgba(7, 166, 207, 0.14);
  color: var(--green);
  font-family: var(--font);
  font-size: 13.5px;
  font-weight: 800;
  font-variant-numeric: lining-nums;
}
.cart-remove-text {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 10px;
  border: 0;
  border-radius: var(--r-chip);
  background: transparent;
  color: var(--muted);
  font: inherit;
  font-size: 14.5px;
  font-weight: 700;
  cursor: pointer;
}
.cart-remove-text .icon { width: 14px; height: 14px; }
.cart-remove-text:hover { background: var(--danger-bg); color: var(--danger); }
.cart-remove-text:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 1px; }
.cart-summary { position: sticky; top: 104px; display: grid; gap: 16px; }
.cart-summary .cart-heading { margin-bottom: 0; }
.cart-summary .cart-totals { padding-top: 0; border-top: 0; }
.cart-summary .cart-note { margin: 0; }
.cart-checkout .btn .icon { width: 16px; height: 16px; }
.page-section .alert { margin-bottom: 20px; }
.cart-loading { color: var(--muted); font-size: 15px; }

.cart { display: flex; flex-direction: column; gap: 18px; }
.cart > .alert { margin: 0; }
.cart-items { display: grid; gap: 12px; }
.cart-item {
  display: grid;
  grid-template-columns: 72px minmax(0, 1fr) auto;
  gap: 14px;
  align-items: center;
  padding: 12px;
  border: 1px solid var(--border);
  border-radius: var(--r-card);
  background: var(--white);
}
.cart-thumb {
  display: grid;
  place-items: center;
  width: 72px;
  height: 56px;
  overflow: hidden;
  border-radius: 10px;
  background: var(--offwhite);
  color: var(--green);
}
.cart-thumb img { width: 100%; height: 100%; object-fit: cover; }
.cart-thumb .icon { width: 22px; height: 22px; }
.cart-item-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cart-item-mode { font-size: 12px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: #057c9a; }
.cart-item-title { font-size: 16px; font-weight: 700; line-height: 1.35; color: var(--ink); }
.cart-item-title:hover { color: var(--green); }
.cart-item-price { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; font-size: 15px; }
.cart-item-price strong { color: var(--green); font-variant-numeric: lining-nums; }
.cart-item-price s { color: var(--muted); font-size: 13.5px; }
.cart-remove {
  display: grid;
  place-items: center;
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
}
.cart-remove .icon { width: 18px; height: 18px; }
.cart-remove:hover { background: var(--danger-bg); color: var(--danger); }
.cart-remove:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 1px; }

.cart-coupon-form { display: flex; gap: 10px; }
.cart-coupon-form .input { flex: 1; min-width: 0; height: 46px; text-transform: uppercase; }
.cart-coupon-form .btn { flex-shrink: 0; }
.cart-coupon-applied {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 12px 14px;
  border: 1px dashed rgba(17, 107, 58, 0.4);
  border-radius: var(--r-chip);
  background: var(--success-bg);
  color: var(--success);
  font-size: 15px;
}
.cart-coupon-applied span { display: inline-flex; align-items: center; gap: 8px; }
.cart-coupon-applied .icon { width: 16px; height: 16px; }
.cart-link { border: 0; background: none; padding: 0; font: inherit; font-weight: 700; color: var(--success); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }

.cart-totals { display: grid; gap: 8px; margin: 0; padding-top: 16px; border-top: 1px solid var(--border); font-size: 16px; }
.cart-totals > div { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.cart-totals dt { color: var(--muted); }
.cart-totals dd { margin: 0; font-weight: 700; color: var(--ink); font-variant-numeric: lining-nums tabular-nums; }
.cart-discount dd { color: var(--success); }
.cart-total { padding-top: 8px; border-top: 1px dashed var(--border); }
.cart-total dt { color: var(--ink); font-weight: 800; }
.cart-total dd { font-family: var(--font-heading); font-size: 1.35rem; font-weight: 800; color: var(--green); }
.cart-note { margin: -6px 0 0; font-size: 14px; line-height: 1.55; color: var(--muted); text-align: center; }
.cart-note--error { margin: 8px 0 0; color: var(--danger); text-align: left; }

.cart-empty { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 36px 8px; text-align: center; }
.cart-empty-icon { display: grid; place-items: center; width: 64px; height: 64px; border-radius: 50%; background: rgba(7, 166, 207, 0.12); color: #057c9a; }
.cart-empty-icon .icon { width: 28px; height: 28px; }
.cart-empty h2,
.cart-empty h3 { font-size: 1.2rem; font-weight: 800; color: var(--ink); }
.cart-empty p { color: var(--muted); font-size: 16px; margin-bottom: 8px; }

.cart-page-card { padding: clamp(20px, 3vw, 32px); border: 1px solid var(--border); border-radius: var(--r-card); background: var(--white); }

/* "Add to Cart" on course cards and the course page */
.ac-body .cart-add { margin-top: 4px; }
.cart-add .btn .icon { width: 17px; height: 17px; }
.cart-add .btn.is-in-cart { background: var(--white); border-color: #057c9a; color: #057c9a; }
.cart-add .btn.is-in-cart:hover { background: rgba(7, 166, 207, 0.1); color: var(--green); border-color: var(--green); }

/* Discounted price with the original struck through */
.ac-price { display: inline-flex; align-items: baseline; flex-wrap: wrap; gap: 4px 8px; font-variant-numeric: lining-nums; }
.ac-price-was,
.price-was {
  font-family: var(--font);
  font-weight: 600;
  color: var(--muted);
  text-decoration-thickness: 1.5px;
  text-decoration-color: rgba(180, 35, 24, 0.7);
}
.ac-price-was { font-size: 1rem; }
.price-lg { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; }
.price-was { font-size: 1.05rem; }
.ac-tag-mode { background: var(--green); color: var(--white); }

@media (max-width: 560px) {
  .cart-toasts { top: 84px; right: 16px; }
  .cart-item { grid-template-columns: 60px minmax(0, 1fr) auto; gap: 10px; }
  .cart-thumb { width: 60px; height: 48px; }
}
@media (prefers-reduced-motion: reduce) {
  .cart-toast { transition: none; }
  .nav-cart-count.is-bumped { animation: none; }
}

/* ============ Inner pages: tighter rhythm and one low photo header ============ */
/* About, Services, Programmes, Portfolio, Contact and Cart share the photo-overlay header,
   about 30% lower than before; section padding on inner pages is about 30% tighter. */
.ab-hero,
.sv-hero,
.acx-hero,
.ctx-hero { padding-block: clamp(40px, 5.6vw, 68px); }
.is-inner .section { padding-block: clamp(59px, 7.7vw, 92px); }
.is-inner .page-section { padding-block: clamp(34px, 4.9vw, 62px); }

/* Contact: the touchpoint cards sit below the header instead of overlapping it */
.ctx-channels-band { padding-top: clamp(28px, 4vw, 44px); }
.ctx-channels { margin-top: 0; }
.ctx-channels-band + .page-section { padding-top: clamp(24px, 3vw, 36px); }

@media (max-width: 768px) {
  .is-inner .section { padding-block: 50px; }
}

/* ============ Landing refinements 2 (2026-10-28) ============ */

/* Clients: heading breaks exactly after "partners," (the <br>), not at the 14em cap */
.lp-clients .lp-head .section-title { max-width: none; text-wrap: wrap; }

/* Portfolio web tile: all client pills on one row from tablet up */
@media (min-width: 768px) {
  .folio-web-links { flex-wrap: nowrap; gap: 8px; }
  .folio-web-links a { padding: 8px 12px; font-size: 14px; white-space: nowrap; }
}
.ac-section .ac-toolbar { margin-top: 0; }
@media (max-width: 992px) {
  .cart-layout { grid-template-columns: 1fr; }
  .cart-summary { position: static; }
}

/* Programme pages (Physical / Online / all): heading 30% smaller than the shared inner-page
   size of clamp(2rem, 4.2vw, 3.3rem), and kept to 10 words or fewer in the view */
.acx-hero--programmes h1 { font-size: clamp(1.4rem, 2.94vw, 2.31rem); }

/* ============ Hero: brand gradient + photo storytelling (2026-10-28) ============
   One left-to-right blend of the two brand colours over every hero photo (home slideshow
   and the inner-page photo headers): solid navy #000B6E behind the copy, through a
   navy/cyan mix, to a light #07A6CF wash so the photo's subject reads clearly on the right.
   The copy column stays at 0.93+ navy, so white text is above 12:1 over any photo.
   On small screens the copy spans the full width, so the blend stays deeper throughout. */
:root {
  --hero-blend: linear-gradient(90deg,
    rgba(0, 11, 110, 0.97) 0%,
    rgba(0, 11, 110, 0.93) 46%,
    rgba(0, 11, 110, 0.76) 62%,
    rgba(4, 89, 159, 0.48) 76%,
    rgba(7, 166, 207, 0.26) 90%,
    rgba(7, 166, 207, 0.16) 100%);
}
@media (max-width: 768px) {
  :root {
    --hero-blend: linear-gradient(90deg,
      rgba(0, 11, 110, 0.95) 0%,
      rgba(0, 11, 110, 0.88) 55%,
      rgba(4, 89, 159, 0.84) 100%);
  }
}
.lp-hero-slide { object-position: center right; }

/* "Now showing" card: names the service in the current photo and links to it */
/* Same line as the hero buttons: the showcase is a zero-height flex box in the buttons' row, so the
   card overflows evenly above and below and its centre sits on the buttons' centre line; the dots
   hang below the card and the buttons do not move */
.lp-hero-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
}
.lp-hero-showcase {
  flex: 0 0 352px;
  height: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.lp-hero-showcase-box { position: relative; }
.lp-hero-showcase .lp-hero-dots { position: absolute; top: 100%; left: 0; }
.lp-hero-cap {
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-areas: "kicker go" "title go" "line go";
  align-items: center;
  column-gap: 14px;
  padding: 16px 18px;
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: 16px;
  background: rgba(0, 11, 110, 0.55);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  box-shadow: 0 18px 40px rgba(0, 6, 60, 0.35);
  color: var(--white);
  text-decoration: none;
  transition: border-color 0.2s ease, background 0.2s ease, transform 0.2s ease;
}
.lp-hero-cap[hidden] { display: none; }
.lp-hero-cap.is-active { animation: lp-cap-in 0.5s ease both; }
@keyframes lp-cap-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.lp-hero-cap:hover,
.lp-hero-cap:focus-visible { border-color: #07a6cf; background: rgba(0, 11, 110, 0.75); transform: translateY(-2px); }
.lp-hero-cap:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 3px; }
.lp-hero-cap-kicker {
  grid-area: kicker;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #7fd1e6;
}
.lp-hero-cap strong { grid-area: title; margin-top: 4px; font-family: var(--font-heading); font-size: 1.15rem; line-height: 1.25; }
.lp-hero-cap-line { grid-area: line; margin-top: 2px; font-size: 14.5px; color: var(--muted-on-dark); }
.lp-hero-cap-go {
  grid-area: go;
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  background: #07a6cf;
  color: var(--green);
  transition: background 0.2s ease, color 0.2s ease;
}
.lp-hero-cap:hover .lp-hero-cap-go,
.lp-hero-cap:focus-visible .lp-hero-cap-go { background: var(--white); }

/* Slide dots: each is a bar that fills over the 6s the slide is shown */
.lp-hero-dots { display: flex; gap: 8px; margin-top: 12px; padding-left: 4px; }
.lp-hero-dot {
  position: relative;
  width: 36px;
  height: 24px;
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
}
.lp-hero-dot span {
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 4px;
  margin-top: -2px;
  overflow: hidden;
  border-radius: 4px;
  background: rgba(255, 255, 255, 0.3);
}
.lp-hero-dot span::after {
  content: "";
  position: absolute;
  inset: 0;
  transform: scaleX(0);
  transform-origin: left;
  background: #07a6cf;
}
.lp-hero-dot.is-active span::after { transform: scaleX(1); }
.lp-hero-dot.is-running span::after { animation: lp-dot-fill 6s linear both; }
.lp-hero-showcase.is-paused .lp-hero-dot.is-running span::after { animation-play-state: paused; }
@keyframes lp-dot-fill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.lp-hero-dot:hover span { background: rgba(255, 255, 255, 0.5); }
.lp-hero-dot:focus-visible { outline: 3px solid #7fd1e6; outline-offset: 2px; border-radius: 4px; }

@media (max-width: 992px) {
  .lp-hero-actions { flex-direction: column; align-items: flex-start; gap: 32px; }
  .lp-hero-actions .lp-hero-cta { align-self: stretch; }
  .lp-hero-showcase { flex: none; height: auto; width: min(100%, 340px); }
  .lp-hero-showcase .lp-hero-dots { position: static; }
}
@media (prefers-reduced-motion: reduce) {
  .lp-hero-cap.is-active { animation: none; }
  .lp-hero-cap:hover, .lp-hero-cap:focus-visible { transform: none; }
}

/* Home book showcase (replaces the stat capsules): widths, gaps, shadow, hover and scroll speed
   copied from the 1syotechnol landing page (heights changed to 4:3, see below). The covers are rendered twice, so -50% is exactly
   one set; 4s per cover keeps the original speed (10 cards in 20s) whatever the cover count. */
.book-showcase-track { width: 100%; overflow: hidden; padding: 12px 0; }
.book-showcase-strip {
  display: flex;
  flex-direction: row;
  gap: 2rem;
  width: max-content;
  animation: book-showcase-scroll calc(var(--book-count, 10) * 4s) linear infinite;
}
.book-showcase-strip:hover { animation-play-state: paused; }
/* Every card is the same 4:3 box (closest to the covers, which range 1:1 to 3:2); each image
   fills it with object-fit: cover, scaled proportionally and centred, so no card shows blank bands. */
.book-showcase-card {
  flex-shrink: 0;
  width: 400px;
  height: 300px;
  background: #f1f1f7;
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  transition: transform 0.3s ease;
}
.book-showcase-card:hover { transform: scale(1.03); }
.book-showcase-card img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center; }
@keyframes book-showcase-scroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(calc(-50% - 1rem)); }
}
@media (max-width: 768px) {
  .book-showcase-strip { gap: 1.5rem; }
  .book-showcase-card { width: 320px; height: 240px; }
  @keyframes book-showcase-scroll { 100% { transform: translateX(calc(-50% - 0.75rem)); } }
}
@media (max-width: 480px) {
  .book-showcase-strip { gap: 1rem; }
  .book-showcase-card { width: 280px; height: 210px; }
  @keyframes book-showcase-scroll { 100% { transform: translateX(calc(-50% - 0.5rem)); } }
}

/* ============ Phones & touch screens: responsive audit fixes ============
   1. Form fields at 16px: iOS Safari zooms the whole page when a field under 16px is tapped.
   2. Text links in lists get a 24px+ tap area (WCAG 2.5.8). The padding is cancelled by an equal
      negative margin, so nothing moves on screen; only the touchable area grows. */
@media (max-width: 767px) {
  .input, .select, .textarea,
  .lx-fields .input,
  .textarea.code { font-size: 16px; }
}
@media (max-width: 767px), (pointer: coarse) {
  .footer-grid ul a,
  .footer-legal a,
  .lesson-item .grow a,
  .lx-back, .lx-link, .auth-foot a,
  .feed-main a.link,
  .dash-content > p > a.link,
  .panel-head a.link {
    display: inline-block;
    padding-block: 4px;
    margin-block: -4px;
  }
}
