/* ==========================================================================
   FOS v2 · CUSTOMER STORE component library  ·  store.css  ·  LIGHT-ONLY
   --------------------------------------------------------------------------
   The shared .fos-* layer that ends v0703's "每頁 inline 200–1600 行 CSS、檔案
   太散" complaint. Everything the storefront repeats lives here once.

   HEAD CONVENTION (every store/ page):
     <head>
       <link rel="stylesheet" href="tokens.css">   (Layer 1/2 tokens + web fonts)
       <link rel="stylesheet" href="store.css">     (this file — the .fos-* library)
       <style> …page-specific overrides only… </style>
     </head>
     <body>
       <header class="fos-topbar"></header>         (empty mount point; chrome.js fills it)
       …page content, wrapped in <div class="fos-frame">…
       <!-- body end, in this order -->
       <script src="../src/core.js"></script>
       …other fos SDK modules the page needs…
       <script src="chrome.js"></script>            (topbar + legal footer + related strip)
     </body>
   store.css intentionally does NOT @import tokens.css — pages link both sheets
   (tokens first) per the convention above, so tokens' vars are always present.

   IRON RULES encoded below (do not break when extending):
     · ≥12px font floor everywhere (presbyopia — never go below --fs-micro).
     · Hints/captions use --text-muted-strong (AA), never raw --muted.
     · Gold TEXT uses --gold-text; warn TEXT --warn-strong; danger TEXT
       --danger-strong. Raw --gold/--warn/--danger are fills/borders only.
     · Only ≥900px and ≥1200px breakpoints (mobile-first 448 phone card).
     · LIGHT-ONLY. No dark-scheme media blocks anywhere.

   TWO TIERS:
     (a) ported canonical components from v0703 shared/components.css
     (b) store-specific idioms folded out of the inline store pages
         (persona / select-card / stepper / seg / price / sticky-cta /
          quote / bundle / region / coach / faq / line-banner / skeleton)
   ========================================================================== */

/* ============ BASE (from components.css, re-skinned light) ============ */
* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: var(--font-sans);
  background: var(--surface-1);
  color: var(--text-1);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
a { color: inherit; text-decoration: none; }

/* mono enforcement — Windows falls back to Cascadia / Consolas (nicer than the
   platform default monospace); ligatures off so IDs / digits stay per-glyph */
.fos-mono, code, kbd, pre, samp,
[class*="mono"], [style*="JetBrains Mono"] {
  font-family: var(--font-mono);
  font-feature-settings: 'liga' 0, 'calt' 0, 'tnum' 1;
}

/* ============ LAYOUT PRIMITIVES ============ */
.fos-container { max-width: var(--frame-desktop); margin: 0 auto; padding: 24px 20px; }
.fos-grid { display: grid; gap: 12px; }
.fos-grid-2 { grid-template-columns: repeat(2, 1fr); }
.fos-grid-3 { grid-template-columns: repeat(3, 1fr); }
.fos-grid-auto { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }

.fos-hint { color: var(--text-muted-strong); font-size: var(--fs-caption); line-height: var(--lh-body); }

/* the 448 phone card the whole store lives inside (was inline .page everywhere) */
.fos-frame {
  max-width: var(--frame-mobile);
  margin: 0 auto;
  background: var(--paper);
  min-height: 100vh;
}

/* ============ 1 · BUTTON .fos-btn ============ */
.fos-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 10px 18px; border: 0; border-radius: 10px;
  font-weight: var(--fw-medium); cursor: pointer; font-family: inherit;
  font-size: 14px; text-decoration: none; line-height: 1.2;
  transition: background .14s, transform .14s, box-shadow .14s, border-color .14s;
}
.fos-btn:focus-visible { outline: none; box-shadow: var(--ring-gold); }
.fos-btn-primary { background: var(--ink); color: var(--accent); }
.fos-btn-primary:hover { background: var(--ink-2); }
.fos-btn-gold { background: var(--accent); color: var(--ink); }
.fos-btn-gold:hover { background: var(--accent-strong); }
.fos-btn-ok { background: var(--ok); color: var(--surface-0); }
.fos-btn-danger { background: var(--danger); color: var(--surface-0); }
.fos-btn-ghost { background: var(--surface-1); color: var(--text-1); border: 1px solid var(--border); }
.fos-btn-ghost:hover { border-color: var(--accent); background: var(--gold-soft); color: var(--gold-text); }
.fos-btn-sm { padding: 6px 12px; font-size: var(--fs-caption); border-radius: var(--r-md); }
.fos-btn-lg { padding: 13px 24px; font-size: var(--fs-body); border-radius: var(--r-lg); }
.fos-btn-block { width: 100%; }
.fos-btn:disabled, .fos-btn[aria-disabled="true"] { opacity: .45; cursor: not-allowed; }

/* ============ 2 · CARD .fos-card ============ */
.fos-card {
  background: var(--surface-0);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 16px;
  margin-bottom: 12px;
  box-shadow: var(--shadow-sm);
}
.fos-card--flat { box-shadow: none; }

/* ============ 3 · TAG .fos-tag ============ */
.fos-tag {
  display: inline-block; padding: 2px 8px; border-radius: var(--r-pill);
  font-size: var(--fs-micro); font-weight: var(--fw-medium);
  background: var(--surface-1); color: var(--text-2);
}
.fos-tag.green { background: var(--ok-soft); color: var(--ok); }
.fos-tag.gold { background: var(--gold-soft); color: var(--gold-text); }
.fos-tag.info { background: var(--info-soft); color: var(--info); }

/* ============ 4 · STATUS BADGE .fos-badge (soft fill + AA-safe strong text) ============ */
.fos-badge {
  display: inline-block; padding: 2px 9px; border-radius: var(--r-pill);
  font-size: var(--fs-micro); font-weight: var(--fw-heavy);
  line-height: 1.5; white-space: nowrap;
}
.fos-badge--ok      { background: var(--ok-soft);     color: var(--ok); }
.fos-badge--warn    { background: var(--warn-soft);   color: var(--warn-strong); }
.fos-badge--danger  { background: var(--danger-soft); color: var(--danger-strong); }
.fos-badge--info    { background: var(--info-soft);   color: var(--info); }
.fos-badge--pending { background: var(--gold-soft);   color: var(--gold-text); }

/* ============ 5 · FORM FIELD .fos-field-* ============ */
.fos-field { margin-bottom: 11px; }
.fos-field:last-child { margin-bottom: 0; }
.fos-field-label { display: block; font-size: var(--fs-caption); font-weight: var(--fw-heavy); margin-bottom: 5px; color: var(--text-1); }
.fos-field-label .req { color: var(--accent-strong); margin-left: 2px; }
.fos-field-input, .fos-field-select {
  width: 100%; padding: 11px 13px;
  border: 1.5px solid var(--border); border-radius: 9px;
  font-size: var(--fs-body); font-family: inherit;
  background: var(--surface-0); color: var(--text-1);
  transition: border-color .14s, box-shadow .14s;
}
.fos-field-input:focus, .fos-field-select:focus { outline: none; border-color: var(--accent); box-shadow: var(--ring-gold); }
.fos-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }
.fos-field-hint { font-size: var(--fs-caption); color: var(--text-muted-strong); margin-top: 5px; line-height: var(--lh-body); }
.fos-field-input.error, .fos-field-select.error { border-color: var(--danger); box-shadow: 0 0 0 3px rgba(179,81,81,.12); }
.fos-field-error {
  display: block; margin-top: 6px;
  font-size: var(--fs-caption); font-weight: var(--fw-bold);
  color: var(--danger-strong);
}

/* ============ 6 · MODAL .fos-modal (mobile bottom-sheet ↔ ≥900 centered dialog) ============ */
.fos-modal-backdrop {
  position: fixed; inset: 0; background: rgba(10,37,64,.55);
  z-index: var(--z-overlay);
  display: none; align-items: flex-end; justify-content: center;
}
.fos-modal-backdrop.show { display: flex; }
.fos-modal {
  position: relative; z-index: var(--z-modal);
  background: var(--surface-0); width: 100%; max-width: var(--frame-mobile);
  max-height: 94vh; border-radius: 18px 18px 0 0;
  display: flex; flex-direction: column;
  animation: fos-modal-up .25s ease;
}
@keyframes fos-modal-up { from { transform: translateY(40px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
.fos-modal-head {
  position: sticky; top: 0; z-index: var(--z-raised);
  background: var(--surface-0); padding: 14px 16px;
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; gap: 10px;
  border-radius: inherit; border-bottom-left-radius: 0; border-bottom-right-radius: 0;
}
.fos-modal-title { flex: 1; font-size: var(--fs-body-lg); font-weight: var(--fw-black); }
.fos-modal-close {
  width: 28px; height: 28px; border: 0; border-radius: var(--r-sm);
  background: var(--surface-1); color: var(--text-2); font-size: 14px;
  display: grid; place-items: center; cursor: pointer; font-family: inherit;
}
.fos-modal-body { padding: 14px 16px; overflow-y: auto; flex: 1; }
.fos-modal-foot {
  position: sticky; bottom: 0;
  background: var(--surface-0); border-top: 1px solid var(--border);
  padding: 12px 16px; display: flex; gap: 8px;
}
@media (min-width: 900px) {
  .fos-modal-backdrop { align-items: center; padding: 20px; }
  .fos-modal { max-width: 720px; max-height: 88vh; border-radius: 14px; }
  .fos-modal--lg { max-width: 920px; }
  .fos-modal-foot { justify-content: flex-end; }
}

/* ============ 7 · STEP BAR .fos-step* ============ */
.fos-step-bar {
  display: flex; gap: 5px; padding: 10px 16px; background: var(--surface-0);
  border-bottom: 1px solid var(--border); overflow-x: auto;
  position: sticky; top: 48px; z-index: calc(var(--z-sticky) - 5);
}
.fos-step-pill {
  flex: 1; min-width: 55px; padding: 6px 4px;
  background: var(--surface-1); border-radius: var(--r-sm); text-align: center;
  font-size: var(--fs-micro); color: var(--text-muted-strong);
  font-weight: var(--fw-bold); line-height: 1.4;
}
.fos-step-pill .num {
  font-family: var(--font-mono);
  font-size: var(--fs-micro); font-weight: var(--fw-black);
  margin-bottom: 1px; display: block;
}
.fos-step-pill.active { background: var(--ink); color: var(--accent); }
.fos-step-pill.done { background: var(--ok-soft); color: var(--ok); }
.fos-step { padding: 18px 16px 12px; display: none; }
.fos-step.active { display: block; }
.fos-step-title { font-size: var(--fs-h2); font-weight: var(--fw-black); color: var(--text-1); margin-bottom: 5px; line-height: var(--lh-tight); }
.fos-step-desc { font-size: var(--fs-micro); color: var(--text-muted-strong); margin-bottom: 18px; line-height: 1.55; }
@media (min-width: 900px) {
  .fos-step { padding: 28px 36px 18px; }
  .fos-step-title { font-size: 22px; margin-bottom: 8px; }
  .fos-step-desc { font-size: var(--fs-caption); margin-bottom: 22px; }
  .fos-step-bar { padding: 12px 24px; top: 54px; }
  .fos-step-pill { padding: 8px 6px; }
}

/* ============ 8 · TOAST .fos-toast (JS-injected, fixed bottom-center) ============ */
.fos-toast {
  position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%);
  z-index: var(--z-toast);
  display: inline-flex; align-items: center; gap: 10px;
  padding: 11px 22px; border-radius: var(--r-pill);
  font-size: var(--fs-caption); font-weight: var(--fw-heavy);
  color: var(--surface-0); box-shadow: var(--shadow-lg);
  max-width: calc(100vw - 32px); line-height: 1.4;
  transition: opacity .25s;
}
.fos-toast--ok { background: var(--ok); }
.fos-toast--warn { background: var(--warn-strong); } /* raw --warn fails AA on white text */
.fos-toast--danger { background: var(--danger); }

/* ============ 9 · EMPTY STATE .fos-empty ============ */
.fos-empty {
  text-align: center; padding: 60px 20px; color: var(--text-muted-strong);
  border: 2px dashed var(--border); border-radius: var(--r-lg);
  font-size: var(--fs-caption); font-weight: var(--fw-bold);
}

/* ============ 10 · STAT CARD .fos-stat* (mono numbers) ============ */
.fos-stat-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }
.fos-stat {
  background: var(--surface-0); border: 1px solid var(--border);
  border-radius: var(--r-md); padding: 12px 14px;
}
.fos-stat-num {
  font-family: var(--font-mono);
  font-size: 21px; font-weight: var(--fw-heavy);
  color: var(--text-1); line-height: 1.1;
}
.fos-stat-num.ok { color: var(--ok); }
.fos-stat-num.warn { color: var(--warn-strong); }
.fos-stat-num.danger { color: var(--danger); }
.fos-stat-num.info { color: var(--info); }
.fos-stat-label {
  font-size: var(--fs-micro); font-weight: var(--fw-bold);
  color: var(--text-muted-strong); letter-spacing: .04em; margin-top: 3px;
}
.fos-stat-sub { font-size: var(--fs-micro); color: var(--text-muted-strong); margin-top: 3px; font-weight: var(--fw-medium); }

/* ==========================================================================
   TIER (b) · STORE-SPECIFIC IDIOMS
   folded out of the inline customer-*.html pages (homepage / product /
   checkout / lodging / bundle / booking / recommender), same .fos-* namespace.
   ========================================================================== */

/* ---- Topbar (sticky blurred bar; chrome.js injects back / brand / cart / user) ---- */
.fos-topbar {
  position: sticky; top: 0; z-index: var(--z-header);   /* 高於頁內 sticky 子導覽(--z-sticky)，避免 user 選單下拉被分頁列蓋住 */
  background: rgba(255,255,255,.96);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border);
  padding: 12px 16px;
  display: flex; align-items: center; gap: 12px;
  min-height: 56px;
}
.fos-topbar a { color: var(--text-1); text-decoration: none; font-weight: var(--fw-medium); }
.fos-topbar h1 { margin: 0; font-size: var(--fs-h2); flex: 1; }

/* ---- Hero (navy gradient banner with gold eyebrow / CTA) ---- */
.fos-hero {
  background: linear-gradient(160deg, var(--ink) 0%, var(--ink-2) 100%);
  color: #FFF; padding: 36px 22px 40px;
  position: relative; overflow: hidden;
}
.fos-hero::after {
  content: ""; position: absolute; right: -30px; bottom: -30px;
  width: 160px; height: 160px;
  background: radial-gradient(circle, rgba(232,201,122,.2) 0%, transparent 70%);
  pointer-events: none;
}
.fos-hero-eyebrow { font-family: var(--font-mono); font-size: var(--fs-micro); letter-spacing: .22em; color: var(--gold); font-weight: var(--fw-heavy); margin-bottom: 12px; }
.fos-hero h1 { font-size: var(--fs-hero); font-weight: var(--fw-black); line-height: 1.25; letter-spacing: -.022em; margin: 0 0 10px; }
.fos-hero h1 b { color: var(--gold); }
.fos-hero p { font-size: var(--fs-body); color: rgba(255,255,255,.72); line-height: 1.65; margin: 0 0 22px; }

/* ---- Persona selector card (3-up featured picker on homepage) ---- */
.fos-persona {
  display: block; position: relative;
  background: var(--surface-0); border: 1.5px solid var(--border);
  border-radius: 14px; padding: 18px 18px 16px;
  transition: border-color .18s, transform .18s, box-shadow .18s;
}
.fos-persona:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: var(--shadow-lift); }
.fos-persona.featured { background: linear-gradient(135deg, var(--gold-soft) 0%, #FFFCF6 100%); border-color: var(--accent); }
.fos-persona-tag { font-size: var(--fs-micro); letter-spacing: .1em; color: var(--gold-text); font-weight: var(--fw-heavy); margin-bottom: 4px; }
.fos-persona-title { font-size: var(--fs-body-lg); font-weight: var(--fw-black); color: var(--text-1); line-height: 1.3; margin-bottom: 5px; }
.fos-persona-desc { font-size: 14px; color: var(--text-muted-strong); line-height: 1.6; margin-bottom: 12px; }

/* ---- Selection card (generalizes opt-card / trip-btn / date-cell / disc-btn):
        1.5px line border, gold on hover, .selected = gold-soft fill + ring ---- */
.fos-select-card {
  display: block; width: 100%; text-align: left;
  background: var(--surface-0); border: 1.5px solid var(--border);
  border-radius: 11px; padding: 12px; cursor: pointer;
  color: var(--text-1); font-family: inherit;
  transition: border-color .14s, background .14s, box-shadow .14s;
}
.fos-select-card:hover { border-color: var(--accent); }
.fos-select-card:focus-visible { outline: none; border-color: var(--accent); box-shadow: var(--ring-gold); }
.fos-select-card.selected { border-color: var(--accent); background: var(--gold-soft); box-shadow: var(--ring-gold); }
.fos-select-card .sc-title { font-size: 14px; font-weight: var(--fw-black); color: var(--text-1); line-height: 1.3; }
.fos-select-card .sc-meta { font-size: var(--fs-micro); color: var(--text-muted-strong); font-weight: var(--fw-medium); margin-top: 2px; }
/* optional radio affordance */
.fos-select-card .sc-radio { width: 18px; height: 18px; border-radius: 50%; border: 2px solid var(--border); background: var(--surface-0); flex-shrink: 0; transition: all .14s; }
.fos-select-card.selected .sc-radio { border-color: var(--accent-strong); background: var(--accent-strong); box-shadow: inset 0 0 0 3px var(--surface-0); }

/* ---- Stepper + qty/pax rows (− value + quantity controls) ---- */
.fos-stepper { display: inline-flex; align-items: center; gap: 7px; background: var(--surface-1); border-radius: 7px; padding: 2px; }
.fos-stepper button {
  width: 26px; height: 26px; border-radius: 5px; background: var(--surface-0);
  border: 1px solid var(--border); font-size: 15px; font-weight: var(--fw-heavy);
  color: var(--text-1); display: grid; place-items: center; cursor: pointer;
  font-family: inherit; transition: background .14s, border-color .14s;
}
.fos-stepper button:hover:not(:disabled) { background: var(--accent); border-color: var(--accent-strong); }
.fos-stepper button:disabled { color: var(--border); cursor: not-allowed; }
.fos-stepper .val { font-family: var(--font-mono); font-size: var(--fs-body-lg); font-weight: var(--fw-black); color: var(--text-1); min-width: 18px; text-align: center; }
.fos-qtypax { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }
.fos-qtypax .qp-cell { display: flex; align-items: center; gap: 9px; padding: 11px; background: var(--surface-0); border: 1.5px solid var(--border); border-radius: 10px; }
.fos-qtypax .qp-info { flex: 1; min-width: 0; }
.fos-qtypax .qp-label { font-size: 14px; font-weight: var(--fw-black); color: var(--text-1); line-height: 1.3; }
.fos-qtypax .qp-sub { font-size: var(--fs-micro); color: var(--text-muted-strong); font-weight: var(--fw-medium); margin-top: 1px; }

/* ---- Segmented pills (single-select control row) ---- */
.fos-seg { display: flex; gap: 6px; flex-wrap: wrap; }
.fos-seg .seg {
  padding: 6px 12px; border: 1.5px solid var(--border); border-radius: var(--r-pill);
  font-size: var(--fs-micro); font-weight: var(--fw-heavy); color: var(--text-2);
  background: var(--surface-0); cursor: pointer; font-family: inherit;
  transition: background .14s, border-color .14s, color .14s;
}
.fos-seg .seg:hover { border-color: var(--accent); }
.fos-seg .seg.on { background: var(--accent); border-color: var(--accent); color: var(--ink); }

/* ---- Price (mono, tabular; gold uses --gold-text, NEVER raw --gold on white) ---- */
.fos-price {
  font-family: var(--font-mono); font-feature-settings: 'tnum' 1;
  font-size: 22px; font-weight: var(--fw-heavy); color: var(--text-1);
  letter-spacing: -.01em; line-height: 1.1;
}
.fos-price.gold { color: var(--gold-text); }
.fos-price.sm { font-size: var(--fs-body-lg); }
.fos-price.lg { font-size: 26px; }
.fos-price small { font-size: var(--fs-micro); font-weight: var(--fw-medium); color: var(--text-muted-strong); margin-right: 2px; }

/* ---- Sticky CTA bar (fixed bottom, re-centered to the 448 frame; ≥900 to 1100) ---- */
.fos-sticky-cta {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-header);
  background: rgba(255,255,255,.97);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-top: 1px solid var(--border);
  box-shadow: var(--shadow-up);
}
.fos-sticky-inner {
  max-width: var(--frame-mobile); margin: 0 auto;
  padding: 11px 16px; display: flex; align-items: center; gap: 12px;
}
.fos-sticky-total { font-family: var(--font-mono); font-feature-settings: 'tnum' 1; font-size: 18px; font-weight: var(--fw-black); color: var(--text-1); display: block; margin-top: 2px; }
.fos-sticky-label { font-size: var(--fs-micro); color: var(--text-muted-strong); font-weight: var(--fw-bold); }
.fos-sticky-cta .fos-btn { flex-shrink: 0; }
/* hidden-until-shown variant (products list scroll-in) */
.fos-sticky-cta.reveal { transform: translateY(100%); transition: transform .25s; }
.fos-sticky-cta.reveal.show { transform: translateY(0); }
@media (min-width: 900px) {
  .fos-sticky-inner { max-width: var(--frame-desktop); padding: 14px 32px; }
}

/* ---- Quote box (collapsible line-item breakdown) ---- */
.fos-quote { background: var(--surface-0); border: 1px solid var(--border); border-radius: 11px; overflow: hidden; margin-bottom: 13px; }
.fos-quote-head { width: 100%; display: flex; align-items: center; gap: 8px; padding: 12px 13px; font-size: 14px; font-weight: var(--fw-black); color: var(--text-1); background: transparent; border: 0; cursor: pointer; font-family: inherit; }
.fos-quote-total { margin-left: auto; font-family: var(--font-mono); font-feature-settings: 'tnum' 1; font-size: var(--fs-body-lg); font-weight: var(--fw-black); color: var(--text-1); }
.fos-quote-arrow { font-size: var(--fs-caption); color: var(--text-muted-strong); transition: transform .2s; }
.fos-quote.open .fos-quote-arrow { transform: rotate(180deg); }
.fos-quote-rows { display: none; border-top: 1px dashed var(--border); padding: 5px 13px 11px; max-height: 280px; overflow-y: auto; }
.fos-quote.open .fos-quote-rows { display: block; }
.fos-quote-row { display: flex; align-items: flex-start; gap: 9px; padding: 8px 0; border-bottom: 1px dashed var(--border); }
.fos-quote-row:last-child { border-bottom: 0; }
.fos-quote-row .q-lbl { flex: 1; min-width: 0; font-size: var(--fs-caption); font-weight: var(--fw-bold); color: var(--text-1); line-height: 1.45; }
.fos-quote-row .q-unit { display: block; font-family: var(--font-mono); font-size: var(--fs-micro); color: var(--text-muted-strong); font-weight: var(--fw-bold); margin-top: 1px; }
.fos-quote-row .q-sub { flex-shrink: 0; font-family: var(--font-mono); font-feature-settings: 'tnum' 1; font-size: var(--fs-caption); font-weight: var(--fw-black); color: var(--text-1); }

/* ---- Bundle card (horizontally-scrolled package tiles) ---- */
.fos-bundle { display: block; background: var(--surface-0); border: 1px solid var(--border); border-radius: 13px; overflow: hidden; transition: border-color .18s, transform .18s, box-shadow .18s; }
.fos-bundle:hover { border-color: var(--accent); box-shadow: var(--shadow-lift); transform: translateY(-2px); }
.fos-bundle-img { height: 130px; background: linear-gradient(135deg, var(--bg-2) 0%, var(--ink) 200%); display: grid; place-items: center; font-size: 34px; color: rgba(255,255,255,.4); }
.fos-bundle-body { padding: 11px 13px 13px; }
.fos-bundle-tag { display: inline-block; font-size: var(--fs-micro); letter-spacing: .08em; color: var(--gold-text); background: var(--gold-soft); padding: 3px 6px; border-radius: 4px; font-weight: var(--fw-heavy); margin-bottom: 7px; }
.fos-bundle-title { font-size: var(--fs-body); font-weight: var(--fw-black); color: var(--text-1); line-height: 1.35; margin-bottom: 4px; }
.fos-bundle-meta { font-size: var(--fs-caption); color: var(--text-muted-strong); font-weight: var(--fw-medium); margin-bottom: 10px; line-height: 1.5; }
.fos-bundle-price { display: flex; align-items: baseline; gap: 6px; border-top: 1px dashed var(--border); padding-top: 9px; }

/* ---- Region tile (navy gradient area cards) ---- */
.fos-region { display: flex; align-items: center; gap: 10px; position: relative; overflow: hidden; border-radius: 11px; padding: 11px 12px; color: #FFF; background: linear-gradient(135deg, var(--ink-2) 0%, var(--ink) 100%); transition: transform .2s, box-shadow .2s; }
.fos-region:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); }
.fos-region::before { content: ""; position: absolute; inset: 0; background: radial-gradient(circle at top right, rgba(232,201,122,.16) 0%, transparent 65%); pointer-events: none; }
.fos-region-text { position: relative; z-index: 1; flex: 1; min-width: 0; }
.fos-region-tag { font-family: var(--font-mono); font-size: var(--fs-micro); letter-spacing: .16em; color: var(--gold); font-weight: var(--fw-heavy); margin-bottom: 2px; }
.fos-region-name { font-size: var(--fs-body-lg); font-weight: var(--fw-black); letter-spacing: -.018em; line-height: 1.15; }
.fos-region-sub { font-size: var(--fs-micro); color: rgba(255,255,255,.6); font-weight: var(--fw-medium); line-height: 1.4; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fos-region-count { position: relative; z-index: 1; text-align: right; flex-shrink: 0; line-height: 1; }
.fos-region-count-num { font-family: var(--font-mono); font-size: 22px; font-weight: var(--fw-black); color: var(--gold); }

/* ---- Coach trust card (credential-dense avatar block) ---- */
.fos-coach { display: flex; flex-direction: column; background: var(--surface-0); border: 1px solid var(--border); border-radius: 13px; padding: 14px 14px 13px; transition: border-color .18s, transform .18s, box-shadow .18s; }
.fos-coach:hover { border-color: var(--accent); box-shadow: var(--shadow-lift); transform: translateY(-2px); }
.fos-coach-top { display: flex; align-items: center; gap: 11px; margin-bottom: 10px; }
.fos-coach-avatar { width: 56px; height: 56px; border-radius: 50%; background: linear-gradient(135deg, var(--ink) 0%, var(--ink-2) 100%); display: grid; place-items: center; flex-shrink: 0; box-shadow: inset 0 0 0 2px rgba(232,201,122,.45); overflow: hidden; }
.fos-coach-avatar .init { font-size: 24px; font-weight: var(--fw-black); color: var(--gold); line-height: 1; }
.fos-coach-name { font-size: var(--fs-sub); font-weight: var(--fw-black); color: var(--text-1); line-height: 1.25; }
.fos-coach-years { font-size: var(--fs-caption); color: var(--text-muted-strong); font-weight: var(--fw-bold); margin-top: 2px; }
.fos-coach-pill-row { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 8px; }
.fos-coach-cert { font-family: var(--font-mono); font-size: var(--fs-micro); color: var(--ink); font-weight: var(--fw-heavy); background: var(--gold); padding: 3px 8px; border-radius: 5px; letter-spacing: .04em; }
.fos-coach-fact { display: flex; gap: 7px; font-size: var(--fs-caption); color: var(--ink-2); font-weight: var(--fw-bold); line-height: 1.55; margin-top: 4px; }
.fos-coach-fact .k { flex: 0 0 auto; font-family: var(--font-mono); font-size: var(--fs-micro); color: var(--text-muted-strong); font-weight: var(--fw-heavy); letter-spacing: .06em; padding-top: 1px; }

/* ---- FAQ accordion ---- */
.fos-faq { background: var(--surface-0); border: 1px solid var(--border); border-radius: 11px; overflow: hidden; }
.fos-faq-item { padding: 13px 14px; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 9px; cursor: pointer; transition: background .14s; }
.fos-faq-item:last-child { border-bottom: 0; }
.fos-faq-item:hover { background: var(--surface-1); }
.fos-faq-q { flex: 1; font-size: 14px; font-weight: var(--fw-bold); color: var(--text-1); }
.fos-faq-arrow { font-size: var(--fs-micro); color: var(--text-muted-strong); transition: transform .18s; }
.fos-faq-item.open .fos-faq-arrow { transform: rotate(180deg); }
.fos-faq-a { display: none; padding: 0 14px 13px; font-size: var(--fs-caption); color: var(--text-muted-strong); line-height: 1.7; }
.fos-faq-item.open + .fos-faq-a { display: block; }

/* ---- LINE banner (green contact strip) ---- */
.fos-line-banner { background: var(--line-green); color: #FFF; border-radius: 13px; padding: 15px 16px; display: flex; align-items: center; gap: 12px; }
.fos-line-banner-body { flex: 1; min-width: 0; }
.fos-line-banner-title { font-size: var(--fs-body); font-weight: var(--fw-black); line-height: 1.3; }
.fos-line-banner-sub { font-size: var(--fs-caption); opacity: .9; font-weight: var(--fw-medium); margin-top: 2px; }
.fos-line-banner-cta { font-size: var(--fs-caption); font-weight: var(--fw-heavy); background: rgba(255,255,255,.2); padding: 7px 11px; border-radius: 6px; flex-shrink: 0; color: #FFF; }
.fos-line-banner-cta:hover { background: rgba(255,255,255,.3); }

/* ---- Skeleton loader ---- */
.fos-skeleton { background: linear-gradient(90deg, var(--bg) 0%, var(--bg-2) 50%, var(--bg) 100%); background-size: 200% 100%; animation: fos-skel 1.4s ease-in-out infinite; border-radius: 8px; }
@keyframes fos-skel { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }

/* ============ RWD (stack 2/3-col grids on the narrowest phones) ============ */
@media (max-width: 480px) {
  .fos-grid-2, .fos-grid-3 { grid-template-columns: 1fr; }
}
