/* =====================================================================
   Reusable components — usable across the top page and future sub-pages.
   Naming: .c-* = generic component, section-specific classes live in
   sections.css.
   ===================================================================== */

/* ---- Container ------------------------------------------------------- */
.c-container {
  width: 100%;
  max-width: var(--content-max);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

/* ---- Section wrapper + background tints ------------------------------ */
.c-section { padding-block: var(--section-y); }
.c-section--sm { padding-block: var(--section-y-sm); }
.bg-white { background: var(--bg-white); }
.bg-blue  { background: var(--bg-blue); }
.bg-cream { background: var(--bg-cream); }

/* ---- Section heading (eyebrow + title + accent rule + lead) ---------- */
.c-heading { max-width: 760px; }
.c-heading--center { margin-inline: auto; text-align: center; }

.c-heading__eyebrow {
  position: relative;
  display: block;
  font-size: var(--fs-eyebrow);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--color-accent);
  padding-bottom: 12px;
  margin-bottom: var(--space-sm);
}
/* short underline beneath the eyebrow (matches its colour) */
.c-heading__eyebrow::after {
  content: "";
  position: absolute; left: 0; bottom: 0;
  width: 28px; height: 2px;
  background: currentColor;
  border-radius: var(--radius-pill);
}
.c-heading--center .c-heading__eyebrow::after { left: 50%; transform: translateX(-50%); }
/* Light-blue eyebrow variant (COMMITMENT / CASE per design A) */
.c-heading__eyebrow--blue { color: var(--color-eyebrow-blue); }
/* Japanese brand-blue eyebrow (私たちの想い) */
.c-heading__eyebrow--jp { color: var(--color-brand-blue); text-transform: none; letter-spacing: 0.1em; }

.c-heading__title {
  font-size: var(--fs-h2);
  line-height: var(--lh-heading);
  font-weight: 600;              /* design A titles are not heavy        */
  color: var(--color-brand-blue);
  letter-spacing: 0.02em;
}
.c-heading__rule {
  width: 48px; height: 3px;
  background: var(--color-brand-blue); /* short BLUE accent line          */
  border-radius: var(--radius-pill);
  margin-top: var(--space-md);
}
.c-heading--center .c-heading__rule { margin-inline: auto; }
.c-heading__lead {
  margin-top: var(--space-lg);
  font-size: var(--fs-body);
  color: var(--color-text);
}

/* ---- Buttons -------------------------------------------------------- */
.c-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2xs);
  min-height: var(--btn-height);
  min-width: 220px;
  padding: 0 var(--space-lg);
  border-radius: var(--radius-btn);  /* rounded corners, not a pill      */
  font-weight: 600;
  letter-spacing: 0.06em;
  font-size: var(--fs-body);
  border: 2px solid transparent;
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease),
              border-color var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.c-btn:hover { text-decoration: none; transform: translateY(-1px); }
.c-btn__arrow { font-size: 1.1em; line-height: 1; }
.c-btn__icon { flex: none; }

/* Primary = filled brand blue (order / main CTA) */
.c-btn--primary {
  background: var(--color-brand-blue);
  color: var(--color-white);
}
.c-btn--primary:hover { background: var(--color-navy); }

/* Accent = filled orange-yellow (emphasis CTA) */
.c-btn--accent {
  background: var(--color-accent);
  color: var(--color-navy);
}
.c-btn--accent:hover { background: var(--color-accent-ink); color: #fff; }

/* Secondary = outline (details / secondary CTA) — same radius as primary
   (via --radius-btn). Thinner border (~2/3 of 2px) for a lighter outline. */
.c-btn--secondary {
  background: var(--color-white);
  color: var(--color-brand-blue);
  border-color: var(--color-brand-blue);
  border-width: 1.3px;
}
.c-btn--secondary:hover { background: var(--color-brand-blue); color: #fff; }

.c-btn--block { width: 100%; }
.c-btn--sm { min-height: var(--btn-height-sm); min-width: 0; }

/* text を持たず、アイコンのみの正方形ボタン（注文ページのヘッダーなど、
   文字を入れるとヘッダー幅が広がり読みにくくなる場面向け） */
.c-btn--icon-only { width: var(--btn-height-sm); padding: 0; gap: 0; }

/* Large LP-style CTA (今すぐ注文する／資料請求はこちら 等) — icon left,
   width ~75% of its container, centered. Used in hero / about / kodawari. */
.c-btn--lp { width: 75%; max-width: 640px; margin-inline: auto; min-width: 0; }
.c-btn--lp .c-btn__icon { width: 20px; height: 20px; }

/* ---- Feature item (5 effects) ---------------------------------------
   Plain columns per design A (no card border); only the "安心" variant
   is boxed.                                                            */
/* icon on the LEFT, title + text stacked on the right (design A) */
.c-feature {
  display: grid;
  grid-template-columns: auto 1fr;
  column-gap: var(--space-sm);
  row-gap: 6px;
  align-items: start;
  padding: var(--space-2xs) 0;
  height: 100%;
}
.c-feature__icon {
  grid-row: 1 / span 2;
  width: 44px; height: 44px;
  color: var(--color-brand-blue);
}
.c-feature__icon svg { width: 100%; height: 100%; }
.c-feature__title {
  grid-column: 2;
  font-size: 1rem;
  font-weight: 600;
  color: var(--color-navy);
  line-height: var(--lh-heading);
}
.c-feature__text {
  grid-column: 2;
  font-size: 0.8125rem;
  line-height: 1.8;
  color: var(--color-text);
}
/* boxed column (right): two stacked items with a dotted divider */
.c-feature-box {
  display: flex;
  flex-direction: column;
  justify-content: flex-start;   /* top-align so item 1 matches the grid  */
  gap: var(--space-lg);
  height: 100%;
  background: var(--bg-blue);
  border: 1px solid #cfe2f2;
  border-radius: var(--radius-md);
  padding: var(--space-lg) var(--space-md);
}
.c-feature-box__hr { border: 0; border-top: 1px dashed #a9c8e4; width: 100%; margin: var(--space-2xs) 0; }

/* ---- Plan card ------------------------------------------------------ */
.c-plan-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-sm);
  padding: var(--space-xs) var(--space-lg);
  background: transparent;   /* no box — separated by dividers instead   */
  text-align: center;
  height: 100%;
}
.c-plan-card__media {
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--bg-blue);
}
.c-plan-card__media img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.c-plan-card__name {
  font-size: var(--fs-h3);
  font-weight: 600;
  color: var(--color-navy);
}
.c-plan-card__price {
  font-size: 1.5rem;                 /* ~half of the featured price       */
  font-weight: 800;
  color: var(--color-brand-blue);
  line-height: 1.2;
  margin-top: var(--space-2xs);
}
.c-plan-card__price small { font-size: 0.55em; font-weight: 700; }
.c-plan-card__unit { font-size: 0.8rem; font-weight: 600; color: var(--color-text-muted); }
.c-plan-card__link {
  align-self: center;
  margin-top: var(--space-2xs);
  display: inline-flex; align-items: center; gap: var(--space-2xs);
  color: var(--color-brand-blue);
  font-weight: 600;
  border-bottom: 1.5px solid var(--color-brand-blue);
  padding-bottom: 4px;
}
.c-plan-card__link:hover { text-decoration: none; color: var(--color-navy); border-color: var(--color-navy); }
.c-plan-card__note { font-size: var(--fs-eyebrow); color: var(--color-text-muted); }

/* ---- Notice block (insurance / cautions) ---------------------------- */
.c-notice {
  background: var(--bg-blue);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-lg);
}
.c-notice__title {
  display: flex;
  align-items: center;
  gap: var(--space-2xs);
  font-size: var(--fs-h3);
  font-weight: 600;
  color: var(--color-navy);
  margin-bottom: var(--space-sm);
}
.c-notice__title svg { width: 22px; height: 22px; color: var(--color-brand-blue); flex: none; }
.c-notice__list { display: grid; gap: var(--space-xs); }
.c-notice__list li {
  position: relative;
  padding-left: 1.4em;
  font-size: var(--fs-body);
  color: var(--color-text);
}
.c-notice__list li::before {
  content: "";
  position: absolute; left: 0; top: 0.7em;
  width: 6px; height: 6px;
  background: var(--color-accent);
  border-radius: 50%;
}
/* insurance variant — blue, smaller text (~70%) */
.c-notice--insurance .c-notice__list { color: var(--color-brand-blue); font-size: 0.78rem; line-height: 1.9; }
.c-notice--insurance .c-notice__list li::before { background: var(--color-brand-blue); }

/* ご契約前にご確認ください — orange heading + rule, grey bullets */
.notice-terms__title { font-size: var(--fs-h3); font-weight: 600; color: var(--color-accent-ink); }
.notice-terms__rule { display: block; width: 40px; height: 3px; background: var(--color-accent); border-radius: var(--radius-pill); margin: var(--space-sm) 0 var(--space-md); }
.notice-terms__list { display: grid; gap: var(--space-2xs); }
.notice-terms__list li { position: relative; padding-left: 1.2em; font-size: 0.85rem; color: var(--color-text); }
.notice-terms__list li::before { content: "・"; position: absolute; left: 0; color: var(--color-text-muted); }

/* ---- Category link (gallery / FAQ tabs) ----------------------------- */
.c-category-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  width: 100%;
  min-height: var(--tap-min);
  padding: var(--space-md) var(--space-md);  /* more vertical breathing   */
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);           /* less rounded              */
  color: var(--color-brand-blue);
  font-weight: 600;
  text-align: left;
  transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
/* hover / focus / active → light blue wash (design A) */
.c-category-link:hover,
.c-category-link:focus-visible,
.c-category-link[aria-current="true"] {
  text-decoration: none;
  background: var(--color-tint-blue);
  border-color: var(--color-brand-blue);
}
.c-category-link__icon { color: var(--color-brand-blue); flex: none; }
.c-category-link__arrow { color: var(--color-brand-blue); }

/* Light-blue variant, centered label, circled chevron on the right (利用事例) */
.c-category-link--filled {
  position: relative;
  justify-content: center;
  background: var(--color-cases-btn);
  border-color: var(--color-cases-btn);
  color: var(--color-navy);
  padding-block: var(--space-md);
}
.c-category-link--filled:hover,
.c-category-link--filled:focus-visible,
.c-category-link--filled[aria-current="true"] {
  background: #b1c8ea;
  border-color: #9fbbe4;
}
.c-category-link--filled .c-category-link__icon {
  color: var(--color-brand-blue);
  position: absolute; left: var(--space-md);
}
.c-category-link--filled .c-category-link__arrow {
  position: absolute; right: var(--space-sm);
  display: grid; place-items: center;
  width: 26px; height: 26px;
  background: #fff; color: var(--color-brand-blue);
  border-radius: 50%;
  font-size: 0.95rem; line-height: 1; font-weight: 700;
}

/* ---- Specification row ---------------------------------------------- */
.c-spec {
  display: grid;
}
.c-spec__row {
  display: grid;
  grid-template-columns: 160px 1fr;
  gap: var(--space-md);
  align-items: center;
  padding: var(--space-xs) 0;
  border-bottom: 1px solid var(--color-border);   /* thin grey divider     */
}
.c-spec__label {
  font-weight: 600;
  color: var(--color-brand-blue);
  background: var(--color-tint-blue);   /* light-blue label cell         */
  border-radius: var(--radius-sm);
  padding: var(--space-xs) var(--space-md);
  display: flex; align-items: center;
}
.c-spec__value { color: var(--color-text); align-self: center; }

/* ---- FAQ item (accordion) ------------------------------------------- */
.c-faq { display: grid; gap: var(--space-sm); }
.c-faq__item {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-white);
  overflow: hidden;
}
.c-faq__trigger {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  width: 100%;
  min-height: var(--tap-min);
  padding: var(--space-md);
  background: transparent;
  border: 0;
  text-align: left;
  font-weight: 500;              /* ~80% of previous weight              */
  color: var(--color-navy);
}
.c-faq__q {
  flex: none;
  width: 28px; height: 28px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: var(--color-brand-blue);
  color: #fff;
  font-size: 0.85rem;
}
.c-faq__label { flex: 1; }
.c-faq__icon {
  flex: none;
  width: 28px; height: 28px;
  position: relative;
  border: 1.5px solid var(--color-brand-blue);   /* circle around +/-     */
  border-radius: 50%;
}
.c-faq__icon::before,
.c-faq__icon::after {
  content: "";
  position: absolute;
  top: 50%; left: 50%;
  background: var(--color-brand-blue);
  border-radius: 2px;
}
.c-faq__icon::before { width: 12px; height: 2px; transform: translate(-50%, -50%); }
.c-faq__icon::after  { width: 2px; height: 12px; transform: translate(-50%, -50%);
  transition: transform var(--dur) var(--ease); }
.c-faq__trigger[aria-expanded="true"] .c-faq__icon::after { transform: translate(-50%, -50%) rotate(90deg); }

.c-faq__panel {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows var(--dur) var(--ease);
}
.c-faq__panel[hidden] { display: grid; } /* keep grid for animation */
.c-faq__item.is-open .c-faq__panel { grid-template-rows: 1fr; }
.c-faq__panel-inner { overflow: hidden; }
.c-faq__answer {
  padding: 0 var(--space-md) var(--space-md) calc(var(--space-md) + 28px + var(--space-sm));
  color: var(--color-text);
}

/* ---- TODO / unconfirmed copy marker ---------------------------------
   Text that could not be read reliably from the low-res design comp is
   wrapped in .todo-text so it is obviously a placeholder, never mistaken
   for finalized copy. Replace with the official wording.               */
.todo-text {
  color: var(--color-text-muted);
  background: #fff6e6;
  border-bottom: 1px dashed var(--color-accent);
  padding: 0 2px;
}

/* ---- (placeholder image marker removed) ----------------------------- */
