@charset "utf-8";
/* ==========================================================================
   themes/lampstand — base.css (R03 Agent A · TASK-001 shell refinement)
   Common design system: tokens, reset, typography, shell (header / nav /
   subhero / footer), shared components, a11y helpers, motion policy.

   Load order (layout.php):
     front.css → page-builder.css → theme.css → base.css → home.css → page.css → board.css
   B (home/page) and C (board) USE these tokens; they do not redefine them.

   Contrast notes (WCAG AA, normal text):
     ink #1c2321 / ink-2 #4a5552 / ink-3 #6b7672 on #fff  → ≥ 4.5:1
     ink-3 on bg-soft (#f6f8f7) is ~4.45:1 → use ink-2 for small text on soft bands
     primary #1f4d3f on #fff ≈ 9.6:1, #fff on primary ≈ 9.6:1
     primary-ink #163a2f (footer) + white .72 alpha text ≈ 7:1
     focus #2f7d64 on #fff ≈ 4.9:1 (non-text ≥ 3:1)
     accent #b8873b on #fff ≈ 3.1:1 → decorative / large text only

   Menu contract ({!!MENU_HTML!!}, HomeController::renderLevel — not changed):
     ul > li[.is-active] > a[href][aria-current="page"][target="_blank"] (+ nested ul, depth ≤ 3)
   theme.js only ADDS: button.ls-subnav-btn, li.is-open / .is-ancestor / .is-dismissed,
   span.ls-nav__ext (external-link cue). Labels, order and hrefs are never changed.
   ========================================================================== */

/* ---- 1. Tokens ----------------------------------------------------------- */
:root {
  --ls-c-primary: #1f4d3f;
  --ls-c-primary-ink: #163a2f;
  --ls-c-primary-soft: #e8f0ec;
  --ls-c-accent: #b8873b;
  --ls-c-ink: #1c2321;
  --ls-c-ink-2: #4a5552;
  --ls-c-ink-3: #6b7672;
  --ls-c-line: #e3e7e5;
  --ls-c-line-strong: #cfd8d4;
  --ls-c-bg: #ffffff;
  --ls-c-bg-soft: #f6f8f7;
  --ls-c-focus: #2f7d64;
  --ls-c-on-primary: #ffffff;
  --ls-c-danger: #b42318;          /* 6.6:1 on #fff */

  --ls-radius-sm: 6px;
  --ls-radius: 12px;
  --ls-radius-lg: 20px;
  --ls-shadow-sm: 0 1px 2px rgba(16, 32, 26, .06);
  --ls-shadow: 0 6px 24px rgba(16, 32, 26, .08);
  --ls-shadow-lg: 0 16px 40px rgba(16, 32, 26, .12);

  --ls-space-1: 4px;
  --ls-space-2: 8px;
  --ls-space-3: 12px;
  --ls-space-4: 16px;
  --ls-space-5: 24px;
  --ls-space-6: 32px;
  --ls-space-7: 48px;
  --ls-space-8: 72px;

  --ls-fs-xs: .8125rem;
  --ls-fs-sm: .9375rem;
  --ls-fs-base: 1.0625rem;
  --ls-fs-lg: 1.25rem;
  --ls-fs-xl: 1.625rem;
  --ls-fs-2xl: clamp(1.75rem, 3.2vw, 2.5rem);
  --ls-fs-hero: clamp(2rem, 5vw, 3.5rem);
  --ls-lh-tight: 1.3;
  --ls-lh-body: 1.7;

  /* Local/system fonts only (no web-font download). Korean first, then
     platform UI fonts, then emoji so pictographs never fall back to tofu. */
  --ls-font: "Pretendard Variable", "Pretendard", "Apple SD Gothic Neo", "Malgun Gothic", "맑은 고딕",
             "Noto Sans KR", "Noto Sans CJK KR", "Nanum Gothic", "나눔고딕",
             system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif,
             "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";
  --ls-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, "D2Coding", monospace;

  --ls-container: 1200px;
  --ls-gutter: 20px;
  --ls-header-h: 60px;
  --ls-tap: 44px;

  --ls-z-skip: 1000;
  --ls-z-header: 100;
  --ls-z-panel: 99;
  --ls-z-backdrop: 98;

  --ls-ease: cubic-bezier(.2, .7, .2, 1);
  --ls-dur: .2s;

  /* Re-map the core front.css / page-builder.css tokens so core atoms
     (board, pager, page-builder blocks, popups, task lists) follow the theme
     instead of the core blue. */
  --bg: var(--ls-c-bg);
  --surface: var(--ls-c-bg-soft);
  --text: var(--ls-c-ink);
  --text-mute: var(--ls-c-ink-2);
  --muted: var(--ls-c-ink-2);
  --border: var(--ls-c-line);
  --accent: var(--ls-c-primary);
  --accent-2: var(--ls-c-primary-ink);
  --max-w: var(--ls-container);
}
@media (min-width: 768px)  { :root { --ls-gutter: 32px; } }
@media (min-width: 1024px) { :root { --ls-header-h: 72px; --ls-gutter: 40px; } }

/* ---- 2. Reset ------------------------------------------------------------ */
*, *::before, *::after { box-sizing: border-box; }
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-padding-top: calc(var(--ls-header-h) + 16px);
}
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
body, h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd { margin: 0; }
img, svg, video, canvas { display: block; max-width: 100%; height: auto; }
img { border-style: none; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
table { border-collapse: collapse; }
[hidden] { display: none !important; }

/* ---- 3. Typography & body (overrides front.css body font / colours) ------ */
body.theme--lampstand {
  margin: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  font-family: var(--ls-font);
  font-size: var(--ls-fs-base);
  line-height: var(--ls-lh-body);
  color: var(--ls-c-ink);
  background: var(--ls-c-bg);
  word-break: keep-all;          /* Korean: break between words, not syllables */
  overflow-wrap: break-word;     /* …but never let a long URL widen the page */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
.theme--lampstand h1, .theme--lampstand h2, .theme--lampstand h3,
.theme--lampstand h4, .theme--lampstand h5, .theme--lampstand h6 {
  font-weight: 700;
  line-height: var(--ls-lh-tight);
  letter-spacing: -.02em;
  color: var(--ls-c-ink);
  text-wrap: balance;
}
.theme--lampstand p { margin: 0 0 1em; text-wrap: pretty; }
.theme--lampstand p:last-child { margin-bottom: 0; }
.theme--lampstand a {
  color: var(--ls-c-primary);
  text-decoration-thickness: 1px;
  text-underline-offset: .2em;
  transition: color var(--ls-dur) var(--ls-ease);
}
.theme--lampstand a:hover { color: var(--ls-c-primary-ink); }
.theme--lampstand strong, .theme--lampstand b { font-weight: 700; }
.theme--lampstand small { font-size: var(--ls-fs-sm); }
.theme--lampstand address { font-style: normal; }
.theme--lampstand :lang(en) { word-break: normal; }
::selection { background: var(--ls-c-primary-soft); color: var(--ls-c-primary-ink); }

/* ---- 4. Accessibility helpers ------------------------------------------- */
.ls-sr {
  position: absolute !important;
  width: 1px !important; height: 1px !important;
  padding: 0 !important; margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important;
  white-space: nowrap !important; border: 0 !important;
}
/* front.css parks the skip link at left:-9999px with a black box. */
.theme--lampstand .skip-link {
  position: fixed; left: var(--ls-space-4); top: -100px; z-index: var(--ls-z-skip);
  padding: var(--ls-space-3) var(--ls-space-5);
  background: var(--ls-c-primary); color: var(--ls-c-on-primary);
  border-radius: var(--ls-radius-sm);
  font-weight: 700; text-decoration: none;
  box-shadow: var(--ls-shadow);
}
.theme--lampstand .skip-link:focus,
.theme--lampstand .skip-link:focus-visible { left: var(--ls-space-4); top: var(--ls-space-3); color: var(--ls-c-on-primary); }

.theme--lampstand :focus-visible {
  outline: 3px solid var(--ls-c-focus);
  outline-offset: 2px;
  border-radius: 2px;
}
.theme--lampstand :focus:not(:focus-visible) { outline: none; }
.ls-main:focus { outline: none; }
/* Focus on dark surfaces (footer, hero overlays). */
.ls-footer :focus-visible,
.ls-on-dark :focus-visible { outline-color: #ffffff; }

.ls-placeholder {
  display: inline-block;
  padding: 0 6px;
  border-radius: 4px;
  background: #fff6dc;
  color: #6b4e00;            /* 7:1 on #fff6dc */
}

/* ---- 5. Shell: container -------------------------------------------------- */
.ls-container {
  width: 100%;
  max-width: calc(var(--ls-container) + var(--ls-gutter) * 2);
  margin-inline: auto;
  padding-inline: var(--ls-gutter);
}

/* ---- 6. Header ------------------------------------------------------------ */
.ls-header {
  position: sticky; top: 0; z-index: var(--ls-z-header);
  background: var(--ls-c-bg);
  border-bottom: 1px solid var(--ls-c-line);
  transition: box-shadow var(--ls-dur) var(--ls-ease), border-color var(--ls-dur) var(--ls-ease);
}
.ls-header.is-scrolled,
.ls-nav-open .ls-header { box-shadow: var(--ls-shadow); border-bottom-color: transparent; }
.ls-header__inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--ls-space-4);
  min-height: var(--ls-header-h);
}
.ls-logo {
  display: inline-flex; align-items: center;
  min-height: var(--ls-tap); flex: 0 0 auto;
  line-height: 0; text-decoration: none;
  border-radius: var(--ls-radius-sm);
}
.ls-logo img { width: auto; height: 40px; }
@media (min-width: 1024px) { .ls-logo img { height: 48px; } }

/* Hamburger (shown < 1024px, only when JS is running). */
.ls-nav-toggle {
  display: none;
  align-items: center; gap: var(--ls-space-2);
  min-width: var(--ls-tap); min-height: var(--ls-tap);
  padding: 0 var(--ls-space-3);
  margin-right: calc(var(--ls-space-3) * -1);
  background: transparent; border: 1px solid transparent; border-radius: var(--ls-radius-sm);
  color: var(--ls-c-ink); font-size: var(--ls-fs-sm); font-weight: 600;
  transition: background-color var(--ls-dur) var(--ls-ease), border-color var(--ls-dur) var(--ls-ease);
}
.ls-nav-toggle:hover { background: var(--ls-c-bg-soft); }
.ls-nav-toggle[aria-expanded="true"] { background: var(--ls-c-primary-soft); color: var(--ls-c-primary-ink); }
.ls-nav-toggle__icon { position: relative; display: inline-block; width: 22px; height: 16px; }
.ls-nav-toggle__icon span {
  position: absolute; left: 0; right: 0; height: 2px; border-radius: 2px;
  background: currentColor;
  transition: transform var(--ls-dur) var(--ls-ease), opacity var(--ls-dur) var(--ls-ease), top var(--ls-dur) var(--ls-ease);
}
.ls-nav-toggle__icon span:nth-child(1) { top: 0; }
.ls-nav-toggle__icon span:nth-child(2) { top: 7px; }
.ls-nav-toggle__icon span:nth-child(3) { top: 14px; }
.ls-nav-toggle[aria-expanded="true"] .ls-nav-toggle__icon span:nth-child(1) { top: 7px; transform: rotate(45deg); }
.ls-nav-toggle[aria-expanded="true"] .ls-nav-toggle__icon span:nth-child(2) { opacity: 0; }
.ls-nav-toggle[aria-expanded="true"] .ls-nav-toggle__icon span:nth-child(3) { top: 7px; transform: rotate(-45deg); }

/* ---- 7. Navigation ------------------------------------------------------- */
.ls-nav ul { list-style: none; margin: 0; padding: 0; }
.ls-nav li { position: relative; }
.ls-nav a {
  display: flex; align-items: center;
  min-height: var(--ls-tap);
  color: var(--ls-c-ink-2);
  font-weight: 600;
  text-decoration: none;
}
.ls-nav a:hover { color: var(--ls-c-primary); }
.ls-nav li.is-active > a,
.ls-nav li.is-ancestor > a,
.ls-nav a[aria-current="page"] { color: var(--ls-c-primary); }
/* Separate rule: an unsupported :has() must not invalidate the list above. */
.ls-nav li:has(li.is-active) > a { color: var(--ls-c-primary); }
.ls-nav a[aria-current="page"] { font-weight: 700; }

/* External-link cue appended by theme.js (visible arrow + SR "(새 창)"). */
.ls-nav__ext { display: inline-block; margin-left: .3em; font-size: .8em; line-height: 1; opacity: .75; }

.ls-subnav-btn {
  display: inline-flex; align-items: center; justify-content: center;
  flex: 0 0 auto;
  width: var(--ls-tap); height: var(--ls-tap); padding: 0;
  background: transparent; border: 0; border-radius: var(--ls-radius-sm);
  color: var(--ls-c-ink-2);
}
.ls-subnav-btn:hover { background: var(--ls-c-bg-soft); color: var(--ls-c-primary); }
.ls-subnav-btn::before {
  content: ""; width: 8px; height: 8px;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  transition: transform var(--ls-dur) var(--ls-ease);
}
.ls-subnav-btn[aria-expanded="true"]::before { transform: translateY(2px) rotate(-135deg); }

/* < 1024px ------------------------------------------------------------------ */
@media (max-width: 1023.98px) {
  .ls-header__inner { flex-wrap: wrap; }
  /* No JS: the menu is a plain stacked list under the bar (always reachable). */
  .ls-nav { flex: 1 0 100%; padding-bottom: var(--ls-space-3); }
  .ls-nav > ul > li { border-top: 1px solid var(--ls-c-line); }
  .ls-nav li { display: flex; flex-wrap: wrap; align-items: center; }
  .ls-nav li > a { flex: 1 1 0; min-width: 0; min-height: 52px; font-size: var(--ls-fs-lg); }
  .ls-nav li > ul {
    flex: 1 0 100%;
    margin: 0 0 var(--ls-space-2);
    padding: var(--ls-space-1) 0 var(--ls-space-1) var(--ls-space-4);
    border-left: 2px solid var(--ls-c-line);
  }
  .ls-nav li > ul a { min-height: var(--ls-tap); font-size: var(--ls-fs-base); font-weight: 500; }
  .ls-nav li > ul > li > ul a { font-size: var(--ls-fs-sm); }
  .ls-js .ls-nav li > ul { display: none; }
  .ls-js .ls-nav li.is-open > ul { display: block; }
  .ls-nav > ul > li.is-active > a { position: relative; }
  .ls-nav > ul > li.is-active > a::before {
    content: ""; position: absolute; left: calc(var(--ls-gutter) * -1); top: 12px; bottom: 12px;
    width: 3px; border-radius: 0 3px 3px 0; background: var(--ls-c-primary);
  }
  .ls-nav li > ul a[aria-current="page"] {
    margin-left: calc(var(--ls-space-4) * -1 - 2px);
    padding-left: calc(var(--ls-space-4) - 1px);
    border-left: 3px solid var(--ls-c-primary);
  }

  /* JS: slide-down panel anchored under the sticky header. */
  .ls-js .ls-nav-toggle { display: inline-flex; }
  .ls-js .ls-header__inner { flex-wrap: nowrap; }
  .ls-js .ls-nav {
    position: fixed; left: 0; right: 0; top: var(--ls-header-h);
    max-height: calc(100vh - var(--ls-header-h));
    max-height: calc(100dvh - var(--ls-header-h));
    overflow-y: auto; overscroll-behavior: contain;
    padding: var(--ls-space-2) var(--ls-gutter) var(--ls-space-6);
    padding-bottom: max(var(--ls-space-6), env(safe-area-inset-bottom));
    background: var(--ls-c-bg);
    border-top: 1px solid var(--ls-c-line);
    box-shadow: var(--ls-shadow-lg);
    visibility: hidden; opacity: 0; transform: translateY(-8px);
    transition: opacity var(--ls-dur) var(--ls-ease), transform var(--ls-dur) var(--ls-ease), visibility 0s linear var(--ls-dur);
    z-index: var(--ls-z-panel);
  }
  .ls-js .ls-nav.is-open {
    visibility: visible; opacity: 1; transform: none;
    transition: opacity var(--ls-dur) var(--ls-ease), transform var(--ls-dur) var(--ls-ease), visibility 0s;
  }
  .ls-js .ls-nav > ul > li:first-child { border-top: 0; }
  @media (min-width: 768px) {
    /* Tablet: keep the panel a readable column instead of full-bleed rows. */
    .ls-js .ls-nav > ul { max-width: 640px; margin-inline: auto; }
  }
  .ls-nav-backdrop {
    position: fixed; inset: var(--ls-header-h) 0 0 0; z-index: var(--ls-z-backdrop);
    background: rgba(16, 32, 26, .32);
    opacity: 0; visibility: hidden;
    transition: opacity var(--ls-dur) var(--ls-ease), visibility 0s linear var(--ls-dur);
  }
  .ls-nav-open .ls-nav-backdrop { opacity: 1; visibility: visible; transition: opacity var(--ls-dur) var(--ls-ease), visibility 0s; }
  html.ls-nav-open, html.ls-nav-open body { overflow: hidden; }
}

/* ≥ 1024px: horizontal menu --------------------------------------------- */
@media (min-width: 1024px) {
  .ls-nav-backdrop { display: none; }
  .ls-nav { min-width: 0; }
  /* Many/long top-level labels wrap to a second row instead of overflowing. */
  .ls-nav > ul { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; column-gap: var(--ls-space-1); }
  .ls-nav > ul > li { display: flex; align-items: center; }
  .ls-nav > ul > li > a {
    position: relative;
    min-height: var(--ls-header-h);
    padding: 0 var(--ls-space-4);
    font-size: var(--ls-fs-base);
    white-space: nowrap;
  }
  .ls-nav > ul > li > a::after {
    content: ""; position: absolute; left: var(--ls-space-4); right: var(--ls-space-4); bottom: 14px;
    height: 2px; border-radius: 2px; background: var(--ls-c-primary);
    transform: scaleX(0); transform-origin: center;
    transition: transform var(--ls-dur) var(--ls-ease);
  }
  .ls-nav > ul > li > a:hover::after,
  .ls-nav > ul > li.is-active > a::after,
  .ls-nav > ul > li.is-ancestor > a::after,
  .ls-nav > ul > li > a[aria-current="page"]::after { transform: scaleX(1); }
  .ls-nav > ul > li:has(li.is-active) > a::after { transform: scaleX(1); }
  .ls-nav > ul > li > a:focus-visible { outline-offset: -6px; }
  .ls-nav > ul > li > .ls-subnav-btn { width: 28px; margin-left: -12px; }

  /* Dropdown (level 2) and flyout (level 3). Open on hover, keyboard focus
     inside, or the JS toggle button; Esc dismisses (li.is-dismissed). */
  .ls-nav li > ul {
    position: absolute; top: calc(100% - 8px); left: 0; z-index: 1;
    min-width: 220px; max-width: 320px;
    padding: var(--ls-space-2);
    background: var(--ls-c-bg);
    border: 1px solid var(--ls-c-line); border-radius: var(--ls-radius);
    box-shadow: var(--ls-shadow-lg);
    visibility: hidden; opacity: 0; transform: translateY(4px);
    transition: opacity var(--ls-dur) var(--ls-ease), transform var(--ls-dur) var(--ls-ease), visibility 0s linear var(--ls-dur);
  }
  .ls-nav li li > ul { top: calc(var(--ls-space-2) * -1 - 1px); left: 100%; margin-left: var(--ls-space-1); }
  /* Last two top-level items open towards the left so nothing leaves the viewport. */
  .ls-nav > ul > li:nth-last-child(-n+2) > ul { left: auto; right: 0; }
  .ls-nav > ul > li:nth-last-child(-n+2) li > ul { left: auto; right: 100%; margin: 0 var(--ls-space-1) 0 0; }

  .ls-nav li:hover > ul,
  .ls-nav li:focus-within > ul,
  .ls-nav li.is-open > ul {
    visibility: visible; opacity: 1; transform: none;
    transition: opacity var(--ls-dur) var(--ls-ease), transform var(--ls-dur) var(--ls-ease), visibility 0s;
  }
  /* Must follow the open rule (same specificity). */
  .ls-nav li.is-dismissed > ul { visibility: hidden; opacity: 0; transform: translateY(4px); }

  .ls-nav li li { display: flex; align-items: center; }
  .ls-nav li > ul a {
    flex: 1 1 auto; min-width: 0;
    padding: var(--ls-space-2) var(--ls-space-3); border-radius: var(--ls-radius-sm);
    font-size: var(--ls-fs-sm); font-weight: 500; line-height: 1.45;
  }
  .ls-nav li > ul a:hover { background: var(--ls-c-bg-soft); }
  .ls-nav li > ul li.is-active > a,
  .ls-nav li > ul a[aria-current="page"] { background: var(--ls-c-primary-soft); color: var(--ls-c-primary-ink); }
  .ls-nav li li > .ls-subnav-btn { width: 32px; height: 36px; }
  .ls-nav li li > .ls-subnav-btn::before,
  .ls-nav li li > .ls-subnav-btn[aria-expanded="true"]::before { transform: translateX(-2px) rotate(-45deg); }
}
/* Narrow desktop: tighter item padding so six+ labels fit on one row. */
@media (min-width: 1024px) and (max-width: 1279.98px) {
  .ls-nav > ul > li > a { padding: 0 var(--ls-space-3); }
  .ls-nav > ul > li > a::after { left: var(--ls-space-3); right: var(--ls-space-3); }
}

/* ---- 8. Main + content wrapper ------------------------------------------- */
.ls-main { display: block; flex: 1 0 auto; }
/* .lp-content keeps its historical class (core/agents target it). Board, page
   and section bodies get a centred container on every non-home page. */
body:not(.page-home) .lp-content {
  width: 100%;
  max-width: calc(var(--ls-container) + var(--ls-gutter) * 2);
  margin-inline: auto;
  padding: var(--ls-space-6) var(--ls-gutter) var(--ls-space-8);
}
@media (min-width: 1024px) {
  body:not(.page-home) .lp-content { padding-top: var(--ls-space-7); }
}

/* ---- 9. Sub hero band + crumb (non-home; filled by theme.js) -------------- */
.ls-subhero {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(120% 140% at 100% 0%, rgba(184, 135, 59, .10) 0%, rgba(184, 135, 59, 0) 45%),
    linear-gradient(180deg, var(--ls-c-primary-soft) 0%, #f2f6f4 100%);
  border-bottom: 1px solid var(--ls-c-line);
}
.ls-subhero__inner {
  display: flex; flex-direction: column; gap: var(--ls-space-3);
  padding-block: var(--ls-space-6) var(--ls-space-6);
}
@media (min-width: 1024px) { .ls-subhero__inner { padding-block: var(--ls-space-7) var(--ls-space-7); } }
.ls-subhero__title {
  margin: 0;
  font-size: var(--ls-fs-2xl);
  font-weight: 700;
  line-height: 1.25;
  letter-spacing: -.025em;
  color: var(--ls-c-primary-ink);
}
.page-home .ls-subhero { display: none !important; }

.ls-crumb ol {
  display: flex; flex-wrap: wrap; align-items: center;
  list-style: none; margin: 0; padding: 0;
  font-size: var(--ls-fs-sm); color: var(--ls-c-ink-2);
}
.ls-crumb li { display: inline-flex; align-items: center; }
.ls-crumb li + li::before {
  content: "\203A";
  content: "\203A" / "";
  margin: 0 var(--ls-space-2);
  color: var(--ls-c-ink-3);
}
.ls-crumb a {
  display: inline-flex; align-items: center; min-height: 32px;
  color: var(--ls-c-ink-2); text-decoration: none;
}
.ls-crumb a:hover { color: var(--ls-c-primary); text-decoration: underline; }
.ls-crumb [aria-current] { color: var(--ls-c-primary-ink); font-weight: 600; }

/* ---- 10. Footer ----------------------------------------------------------- */
.ls-footer {
  margin-top: auto;
  background: var(--ls-c-primary-ink);
  color: rgba(255, 255, 255, .86);
  font-size: var(--ls-fs-sm);
  line-height: 1.75;
}
.ls-footer__inner {
  display: grid; gap: var(--ls-space-5);
  padding-block: var(--ls-space-7) var(--ls-space-6);
  padding-bottom: max(var(--ls-space-6), env(safe-area-inset-bottom));
}
@media (min-width: 768px) {
  .ls-footer__inner {
    grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
    align-items: start;
    gap: var(--ls-space-6);
  }
  .ls-footer__bottom { grid-column: 1 / -1; }
}
.ls-footer__name { margin: 0; color: #fff; font-size: var(--ls-fs-lg); line-height: 1.4; }
.ls-footer__name strong { font-weight: 700; letter-spacing: -.01em; }
.ls-footer__name span { display: block; margin-top: 2px; font-size: var(--ls-fs-sm); color: rgba(255, 255, 255, .78); }
.ls-footer__addr { display: flex; flex-direction: column; gap: var(--ls-space-1); }
.ls-footer .ls-placeholder { background: rgba(255, 255, 255, .12); color: #fff3cf; }
.ls-footer__bottom {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--ls-space-3) var(--ls-space-5);
  padding-top: var(--ls-space-5);
  border-top: 1px solid rgba(255, 255, 255, .14);
}
.ls-footer__copy {
  color: rgba(255, 255, 255, .72);
  font-size: var(--ls-fs-xs);
}
.ls-footer__copy p { margin: 0; }
.ls-footer__top { margin: 0; }
.ls-footer__top a {
  display: inline-flex; align-items: center; gap: var(--ls-space-1);
  min-height: var(--ls-tap); padding: 0 var(--ls-space-4);
  border: 1px solid rgba(255, 255, 255, .32); border-radius: 999px;
  font-size: var(--ls-fs-xs); font-weight: 600; text-decoration: none;
}
.ls-footer__top a:hover { background: rgba(255, 255, 255, .1); border-color: rgba(255, 255, 255, .6); }
.ls-footer a { color: #fff; }
.ls-footer a:hover { color: #fff; text-decoration-thickness: 2px; }

/* ---- 11. Components -------------------------------------------------------- */
/* Buttons: primary (filled) · line (outlined) · ghost (on dark/photo) · text.
   Sizes: default 48px, --sm 40px (keep ≥ 44px hit area via padding on touch). */
.ls-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--ls-space-2);
  min-height: 48px;
  padding: 0 var(--ls-space-5);
  border: 1px solid transparent;
  border-radius: 999px;
  font-size: var(--ls-fs-sm);
  font-weight: 700;
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color var(--ls-dur) var(--ls-ease), color var(--ls-dur) var(--ls-ease),
              border-color var(--ls-dur) var(--ls-ease), box-shadow var(--ls-dur) var(--ls-ease),
              transform var(--ls-dur) var(--ls-ease);
}
.ls-btn:active { transform: translateY(1px); }
.theme--lampstand .ls-btn:focus-visible { outline-offset: 3px; border-radius: 999px; }
.ls-btn--sm { min-height: 40px; padding: 0 var(--ls-space-4); font-size: var(--ls-fs-xs); }
@media (pointer: coarse) { .ls-btn--sm { min-height: var(--ls-tap); } }
.ls-btn--block { display: flex; width: 100%; white-space: normal; }
.theme--lampstand .ls-btn--primary { background: var(--ls-c-primary); border-color: var(--ls-c-primary); color: var(--ls-c-on-primary); }
.theme--lampstand .ls-btn--primary:hover { background: var(--ls-c-primary-ink); border-color: var(--ls-c-primary-ink); color: var(--ls-c-on-primary); box-shadow: var(--ls-shadow); }
.theme--lampstand .ls-btn--line { background: var(--ls-c-bg); border-color: var(--ls-c-primary); color: var(--ls-c-primary); }
.theme--lampstand .ls-btn--line:hover { background: var(--ls-c-primary-soft); color: var(--ls-c-primary-ink); }
/* ghost: for dark/photo backgrounds */
.theme--lampstand .ls-btn--ghost { background: rgba(255, 255, 255, .08); border-color: rgba(255, 255, 255, .72); color: #fff; }
.theme--lampstand .ls-btn--ghost:hover { background: #fff; border-color: #fff; color: var(--ls-c-primary-ink); }
.theme--lampstand .ls-btn--ghost:focus-visible { outline-color: #fff; }
.theme--lampstand .ls-btn--text { min-height: var(--ls-tap); padding: 0 var(--ls-space-2); background: transparent; color: var(--ls-c-primary); }
.theme--lampstand .ls-btn--text:hover { background: var(--ls-c-primary-soft); color: var(--ls-c-primary-ink); }
.ls-btn[disabled], .ls-btn[aria-disabled="true"] { opacity: .5; cursor: not-allowed; pointer-events: none; box-shadow: none; transform: none; }

/* Card */
.ls-card {
  display: block;
  padding: var(--ls-space-5);
  background: var(--ls-c-bg);
  border: 1px solid var(--ls-c-line);
  border-radius: var(--ls-radius);
  box-shadow: var(--ls-shadow-sm);
  color: inherit;
  transition: box-shadow var(--ls-dur) var(--ls-ease), transform var(--ls-dur) var(--ls-ease), border-color var(--ls-dur) var(--ls-ease);
}
a.ls-card { text-decoration: none; }
a.ls-card:hover, .ls-card--hover:hover { box-shadow: var(--ls-shadow); transform: translateY(-2px); border-color: var(--ls-c-line-strong); }
.ls-card--soft { background: var(--ls-c-bg-soft); box-shadow: none; }
.ls-card__title { margin: 0 0 var(--ls-space-2); font-size: var(--ls-fs-lg); font-weight: 700; line-height: var(--ls-lh-tight); color: var(--ls-c-ink); }
.ls-card__meta { font-size: var(--ls-fs-sm); color: var(--ls-c-ink-2); }

/* Eyebrow */
.ls-eyebrow {
  display: inline-block;
  margin: 0 0 var(--ls-space-2);
  font-size: var(--ls-fs-xs);
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--ls-c-primary);
}

/* Sections */
.ls-section { padding-block: var(--ls-space-7); }
@media (min-width: 1024px) { .ls-section { padding-block: var(--ls-space-8); } }
.ls-section--soft { background: var(--ls-c-bg-soft); }
.ls-section--soft .ls-section__sub { color: var(--ls-c-ink-2); }
.ls-section__head { margin: 0 0 var(--ls-space-6); text-align: center; }
.ls-section__title {
  margin: 0;
  font-size: var(--ls-fs-2xl);
  font-weight: 700;
  line-height: 1.25;
  letter-spacing: -.025em;
  color: var(--ls-c-ink);
}
.ls-section__sub { margin: var(--ls-space-2) 0 0; font-size: var(--ls-fs-base); color: var(--ls-c-ink-2); }

/* ---- 12. Home-only mechanics (visuals belong to home.css / Agent B) ------- */
.ls-home-only { display: none; }
.page-home .ls-home-only { display: block; }
/* The core fallback body for an empty home ("HOME입니다…") is replaced by the theme blocks. */
.page-home .lp-content > .cms-hero,
.page-home .lp-content > .cms-card { display: none; }
/* A configured hero section replaces the static slider. */
.page-home .ls-main:has(.cms-section-hero) .ls-home-hero { display: none; }
/* Configured board_summary sections replace the static board shortcuts. */
.page-home .ls-main:has(.cms-section-board-summary) .ls-home-shortcuts { display: none; }

/* Slider: without JS the slides are simply stacked; with JS they share one
   grid cell and only .is-active is visible (theme.js sets inert/aria-hidden). */
.ls-js .ls-home-hero__track { display: grid; }
.ls-js .ls-home-hero__slide { grid-area: 1 / 1; transition: opacity .6s var(--ls-ease), visibility 0s linear .6s; }
.ls-js .ls-home-hero__slide:not(.is-active) { opacity: 0; visibility: hidden; }
.ls-js .ls-home-hero__slide.is-active { opacity: 1; visibility: visible; transition: opacity .6s var(--ls-ease), visibility 0s; }
.ls-home-hero__controls { display: flex; align-items: center; gap: var(--ls-space-2); }
.ls-home-hero__btn,
.ls-home-hero__dot {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: var(--ls-tap); min-height: var(--ls-tap); padding: 0;
  background: transparent; border: 0; color: inherit;
}
.ls-home-hero__dots { display: flex; align-items: center; }

/* ---- 13. Neutralise core front.css shell rules --------------------------- *
 * The theme shell does not use .site-header/.site-nav/.site-main/.site-footer,
 * but core partials may; keep them from imposing the core 1100px/blue look.  */
.theme--lampstand .site-main { max-width: none; padding: 0; }
.theme--lampstand .site-header,
.theme--lampstand .site-footer { background: var(--ls-c-bg); }
.theme--lampstand .site-header__inner,
.theme--lampstand .site-footer__inner { max-width: calc(var(--ls-container) + var(--ls-gutter) * 2); padding-inline: var(--ls-gutter); }
/* front.css .cms-popup__dismiss-btn / close: give them a touch-sized hit area. */
.theme--lampstand .cms-popup__close,
.theme--lampstand .cms-popup__dismiss-btn { min-height: var(--ls-tap); min-width: var(--ls-tap); }
.theme--lampstand .cms-popup { border-radius: var(--ls-radius); box-shadow: var(--ls-shadow); }

/* ---- 14. Reduced motion -------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .theme--lampstand *, .theme--lampstand *::before, .theme--lampstand *::after {
    transition-duration: 0s !important;
    transition-delay: 0s !important;
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
  }
}

/* ---- 15. Forced colours (Windows High Contrast) ---------------------------
 * Shadows and background-only states vanish there; give them real borders. */
@media (forced-colors: active) {
  .ls-header { border-bottom: 1px solid CanvasText; }
  .ls-nav > ul > li > a::after { background: LinkText; }
  .ls-nav a[aria-current="page"] { text-decoration: underline; }
  .ls-nav li > ul, .ls-js .ls-nav { border: 1px solid CanvasText; }
  .ls-nav-toggle, .ls-subnav-btn, .ls-btn, .ls-footer__top a { border: 1px solid ButtonText; }
  .ls-nav-toggle__icon span { background: ButtonText; }
  .theme--lampstand :focus-visible { outline-color: Highlight; }
}

/* ---- 16. Print ------------------------------------------------------------- */
@media print {
  .ls-header, .ls-nav-backdrop, .ls-home-hero__controls, .skip-link, .ls-footer__top { display: none !important; }
  .ls-footer { background: none; color: #000; }
  .ls-footer a, .ls-footer__name, .ls-footer__name span, .ls-footer__copy { color: #000; }
  .ls-footer__bottom { border-top-color: #000; }
}
