/*
  HALIA App Shell — Phase C (concept implementation)
  Brand header (leaf symbol + wordmark + tagline), pill navigation with icons, global search with a
  keyboard hint, identity greeting, footer, mobile bottom navigation, route frames and state views.
  Lives in the components layer, after components.css; tokens only (no raw colors).
*/
@layer components {

  /* ---------- Route frames: decided in <head> by theme.js (data-route) ---------- */
  :root:not([data-route]) #community,
  :root[data-route="home"] #community { display: none; }
  :root[data-route]:not([data-route="home"]) #main { display: none; }

  body { background: var(--bg-primary); }
  /* Neutralise the pre-Phase-A mobile "nav drawer" rule (legacy style.css styled every <nav> as a dropdown). */
  :where(.js) nav { position: static; inset: auto; display: flex; flex-direction: row; align-items: center; gap: 0; padding: 0; border: 0; background: none; box-shadow: none; font: inherit; }
  .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
  .skip-link { background: var(--accent); color: var(--on-accent); border-radius: var(--radius-sm); }

  /* Shared page width: the concept frame is 1440px with a 24px gutter. */
  .community.container, .platform-home, .site-footer-inner {
    width: min(var(--content-max), calc(100% - 2 * var(--page-gutter)));
    max-width: var(--content-max);
    margin-inline: auto;
  }

  /* ---------- Header ---------- */
  .app-header {
    position: sticky;
    top: 0;
    z-index: var(--z-header);
    background: var(--header-surface);
    border-bottom: 1px solid transparent;
    -webkit-backdrop-filter: saturate(1.4) blur(10px);
    backdrop-filter: saturate(1.4) blur(10px);
    transition: border-color var(--dur-normal) var(--ease-standard);
  }
  .app-header[data-scrolled="true"] { border-bottom-color: var(--border-subtle); }
  .app-header-inner {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--space-4);
    width: min(var(--content-max), calc(100% - 2 * var(--page-gutter)));
    height: var(--header-height);
    margin-inline: auto;
  }

  /* Brand: flat leaf symbol + inline wordmark (letters follow the theme, the dot stays teal). */
  .app-logo, .footer-brand { flex: none; display: inline-flex; align-items: center; gap: 10px; color: var(--brand-ink); text-decoration: none; }
  .brand-symbol { display: block; width: 38px; height: auto; }
  .brand-wordmark { display: block; width: 112px; height: auto; overflow: visible; }
  .brand-wordmark .wm-letters { fill: var(--brand-ink); }
  .brand-wordmark .wm-dot { fill: var(--brand-dot); }
  .app-tagline { flex: none; margin: 0 0 0 var(--space-2); font: var(--text-body-sm); color: var(--text-muted); white-space: nowrap; }

  .app-nav {
    position: static;
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--space-1);
    margin: 0 0 0 var(--space-6);
    padding: 0;
    border: 0;
    background: none;
    box-shadow: none;
    font: var(--text-label);
    font-size: 15px;
  }
  .app-nav a {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    min-height: 44px;
    padding: 0 var(--space-4);
    border-radius: var(--radius-pill);
    color: var(--text-primary);
    text-decoration: none;
    white-space: nowrap;
    transition: background-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard);
  }
  .app-nav a .icon { color: var(--accent); }
  .app-nav a[aria-current="page"] {
    background: linear-gradient(135deg, var(--accent-strong-start), var(--accent-strong-end));
    color: var(--on-accent);
    box-shadow: var(--shadow-card);
  }
  .app-nav a[aria-current="page"] .icon { color: currentColor; }
  @media (hover: hover) {
    .app-nav a:not([aria-current="page"]):hover { background: var(--surface-hover); }
  }

  /* Search: a real GET form to /search, so it works without JavaScript. Ctrl/⌘K focuses it. */
  .app-search {
    position: relative;
    flex: 1 1 360px;
    min-width: 200px;
    max-width: 560px;
    margin-left: auto;
  }
  .app-search > .icon { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; }
  .app-search input {
    width: 100%;
    height: 48px;
    padding: 0 72px 0 46px;
    border: 1px solid transparent;
    border-radius: var(--radius-pill);
    background: var(--bg-secondary);
    color: var(--text-primary);
    font: var(--text-body-sm);
    font-size: 16px;
    transition: border-color var(--dur-fast) var(--ease-standard), background-color var(--dur-fast) var(--ease-standard);
  }
  .app-search input::placeholder { color: var(--text-muted); opacity: 1; }
  .app-search input:hover { border-color: var(--border-default); }
  .app-search input:focus { border-color: var(--accent); background: var(--surface); outline: var(--focus-width) solid var(--focus-ring); outline-offset: 1px; }
  .app-search input::-webkit-search-cancel-button { cursor: pointer; }
  .app-search-hint {
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    padding: 3px 8px;
    border-radius: var(--radius-sm);
    background: var(--surface);
    color: var(--text-secondary);
    font: var(--text-caption);
    font-family: var(--font-sans);
    box-shadow: var(--shadow-1);
    pointer-events: none;
  }
  .app-search input:focus ~ .app-search-hint { display: none; }

  .app-actions { display: flex; align-items: center; gap: var(--space-2); flex: none; }
  .app-actions > .notification-bell[hidden] { display: none; }
  .app-actions > .app-search-toggle { order: 0; }
  .app-actions > .app-messages { order: 1; }
  .app-actions > .notification-bell { order: 2; }
  .app-actions > .app-guest-action { order: 3; }
  .app-actions > .account-trigger { order: 4; }
  .app-icon-button,
  .app-actions .notification-bell {
    position: relative;
    display: inline-grid;
    place-items: center;
    flex: none;
    width: 44px;
    height: 44px;
    padding: 0;
    border: 0;
    border-radius: var(--radius-pill);
    background: transparent;
    color: var(--text-primary);
    cursor: pointer;
  }
  .app-icon-button .icon { width: 22px; height: 22px; }
  @media (hover: hover) {
    .app-icon-button:hover, .app-actions .notification-bell:hover { background: var(--surface-hover); }
  }
  .app-actions .notification-bell[aria-expanded="true"] { background: var(--accent-subtle); color: var(--accent); }
  .app-actions .notification-badge { position: absolute; top: 2px; right: 1px; min-width: 20px; height: 20px; padding: 0 5px; border: 2px solid var(--surface); border-radius: var(--radius-pill); background: var(--danger); color: var(--on-danger); font: var(--text-caption); font-size: 11px; line-height: 16px; text-align: center; }
  .app-search-toggle { display: none; }
  .app-header .notification-panel { top: calc(100% + var(--space-2)); right: 0; z-index: var(--z-dropdown); }

  /* Identity: photo, greeting and name; the member's own photo or initial. */
  .account-trigger {
    display: inline-flex;
    align-items: center;
    gap: var(--space-3);
    height: 52px;
    padding: 4px var(--space-2) 4px 4px;
    margin-left: var(--space-2);
    border: 0;
    border-radius: var(--radius-pill);
    background: transparent;
    color: var(--text-secondary);
    cursor: pointer;
    text-align: left;
    transition: background-color var(--dur-fast) var(--ease-standard);
  }
  :root[data-auth="member"] .account-trigger { padding-left: var(--space-4); border-left: 1px solid var(--border-subtle); border-radius: 0 var(--radius-pill) var(--radius-pill) 0; }
  @media (hover: hover) { .account-trigger:hover { background: var(--surface-hover); } }
  .account-trigger[aria-expanded="true"] { background: var(--accent-subtle); }
  .account-chevron { width: 18px; height: 18px; margin-left: var(--space-2); transition: transform var(--dur-fast) var(--ease-standard); }
  .account-trigger[aria-expanded="true"] .account-chevron { transform: rotate(180deg); }
  .account-greeting { display: none; min-width: 0; line-height: 1.25; }
  :root[data-auth="member"] .account-greeting { display: grid; }
  .account-greeting small { font: var(--text-caption); color: var(--text-muted); }
  .account-greeting strong { max-width: 9em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: var(--text-label); font-size: 15px; color: var(--text-primary); }
  .account-avatar, .bottom-avatar {
    position: relative;
    display: inline-grid;
    place-items: center;
    flex: none;
    width: 44px;
    height: 44px;
    overflow: hidden;
    border-radius: var(--radius-pill);
    background: var(--surface-mint);
    color: var(--accent);
  }
  .account-avatar .member-avatar, .bottom-avatar .member-avatar, .account-identity .member-avatar {
    width: 100%;
    height: 100%;
    margin: 0;
    font-size: 15px;
  }
  .bottom-avatar { width: 26px; height: 26px; }
  .bottom-avatar .icon { width: 20px; height: 20px; }
  :root[data-auth="member"] .app-guest-action { display: none; }
  /* Guests have no inbox: the messages shortcut appears once signed in (the bottom bar keeps it for discovery). */
  :root[data-auth="guest"] .app-actions .app-messages { display: none; }
  :root[data-auth="unknown"] .app-guest-action { visibility: hidden; }

  /* Account menu: identity card, destinations, theme, footer actions. */
  .account-menu {
    position: absolute;
    top: calc(100% + var(--space-2));
    right: 0;
    left: auto;
    z-index: var(--z-dropdown);
    width: 300px;
    max-height: calc(100dvh - 96px);
    overflow: auto;
    padding: var(--space-2);
    border-radius: var(--radius-xl);
    box-shadow: var(--shadow-float);
  }
  .account-identity {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-3);
    margin-bottom: var(--space-1);
    border-radius: var(--radius-md);
    background: var(--surface-mint);
  }
  .account-identity .identity-photo { position: relative; display: inline-grid; overflow: hidden; width: 44px; height: 44px; flex: none; border-radius: var(--radius-pill); }
  .account-identity .identity-photo .member-avatar { font-size: 17px; }
  .account-identity strong { display: block; font: var(--text-label); color: var(--text-primary); overflow-wrap: anywhere; }
  .account-identity .identity-text { min-width: 0; }
  .account-identity .identity-meta { display: block; font: var(--text-caption); color: var(--text-muted); overflow-wrap: anywhere; }
  .account-menu-section { padding: var(--space-2) var(--space-1); border-top: 1px solid var(--border-subtle); margin-top: var(--space-1); }
  .account-menu-label { margin: 0 0 var(--space-2); padding: 0 var(--space-2); font: var(--text-caption); color: var(--text-muted); }
  #account-menu-footer { border-top: 1px solid var(--border-subtle); padding-top: var(--space-1); margin-top: var(--space-1); }
  .account-menu a[aria-current="page"] { color: var(--accent); font-weight: 600; }

  /* Theme selector (inside the account menu). */
  .account-menu .theme-control {
    position: relative;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    width: 100%;
    margin: 0;
    padding: 3px;
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-md);
    background: var(--bg-secondary);
    top: auto;
    right: auto;
  }
  .account-menu .theme-control label {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    min-height: 52px;
    border-radius: var(--radius-sm);
    font: var(--text-caption);
    font-weight: 600;
    color: var(--text-secondary);
  }
  .account-menu .theme-control label:has(input:checked) { color: var(--accent); }
  .account-menu .theme-thumb { top: 3px; bottom: 3px; left: 3px; width: calc((100% - 6px) / 3); border-radius: var(--radius-sm); background: var(--surface); box-shadow: var(--shadow-1); }

  /* ---------- Footer ---------- */
  .site-footer { margin-top: var(--space-8); padding: var(--space-8) 0 var(--space-10); border-top: 1px solid var(--border-subtle); background: transparent; font: var(--text-body-sm); color: var(--text-muted); }
  .site-footer-inner { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-5) var(--space-10); }
  .footer-brand .brand-symbol { width: 30px; }
  .footer-brand .brand-wordmark { width: 96px; }
  .footer-motto { margin-left: var(--space-3); font: var(--text-caption); color: var(--text-secondary); line-height: 1.45; }
  .site-footer .footer-links { position: static; display: flex; flex-direction: row; flex-wrap: wrap; gap: var(--space-2) var(--space-8); margin: 0 auto; padding: 0; border: 0; background: none; box-shadow: none; font: var(--text-body-sm); }
  .site-footer .footer-links a { color: var(--text-secondary); text-decoration: none; }
  .site-footer .footer-links a:first-child { color: var(--text-primary); font-weight: 600; }
  @media (hover: hover) { .site-footer .footer-links a:hover { color: var(--accent); } }
  .footer-tools { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3) var(--space-4); }
  .footer-lang { display: inline-flex; align-items: center; gap: var(--space-2); min-height: 40px; padding: 0 var(--space-4); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--surface); color: var(--text-primary); font: var(--text-label); }
  .footer-lang .icon { width: 18px; height: 18px; color: var(--text-muted); }
  .footer-theme { display: flex; gap: var(--space-1); padding-right: var(--space-4); border-right: 1px solid var(--border-subtle); }
  .footer-theme .app-icon-button { width: 40px; height: 40px; color: var(--text-secondary); }
  .footer-theme .app-icon-button[aria-pressed="true"] { background: var(--accent-subtle); color: var(--accent); }
  .footer-copy { margin: 0; font: var(--text-body-sm); color: var(--text-muted); }

  /* ---------- Mobile bottom navigation ---------- */
  .bottom-nav { display: none; }

  @media (max-width: 1500px) {
    .app-tagline { display: none; }
  }
  @media (max-width: 1279px) {
    .app-search { min-width: 160px; }
  }
  /* Tablet guests: 로그인 / 회원가입 buttons carry the account entry; the theme stays in the footer. */
  @media (min-width: 768px) and (max-width: 1279px) {
    :root[data-auth="guest"] .account-trigger { display: none; }
  }
  @media (max-width: 1360px) {
    .app-nav { margin-left: var(--space-2); }
    .app-nav a { padding: 0 var(--space-3); }
  }
  @media (max-width: 1120px) {
    .account-greeting, :root[data-auth="member"] .account-greeting { display: none; }
    .account-chevron { display: none; }
    .app-search-hint { display: none; }
    .app-search input { padding-right: var(--space-4); }
  }
  @media (max-width: 1023px) {
    .app-nav { margin-left: 0; }
    .app-nav a { gap: 6px; padding: 0 10px; font-size: 14px; }
    .app-nav a .icon { display: none; }
    .brand-wordmark { width: 96px; }
    /* Tablet: search collapses into a toggle so the four destinations keep their room. */
    .app-search-toggle { display: inline-grid; }
    .app-search { display: none; }
    .app-actions { margin-left: auto; }
    .app-header[data-search-open="true"] .app-search {
      display: block;
      position: absolute;
      top: calc(100% + 1px);
      left: calc(-1 * var(--page-gutter));
      right: calc(-1 * var(--page-gutter));
      max-width: none;
      margin: 0;
      padding: var(--space-2) var(--page-gutter) var(--space-3);
      background: var(--surface);
      border-bottom: 1px solid var(--border-subtle);
      box-shadow: var(--shadow-1);
    }
    .app-header[data-search-open="true"] .app-search > .icon { left: calc(var(--page-gutter) + 14px); top: calc(50% - 2px); }
  }

  @media (max-width: 767px) {
    :root { --page-gutter: 16px; }
    .app-header-inner { height: 60px; gap: var(--space-2); }
    .brand-symbol { width: 30px; }
    .brand-wordmark { width: 88px; }
    .app-nav { display: none; }
    .app-guest-action { display: none; }
    .app-search input { height: 44px; }
    .app-actions { margin-left: auto; gap: 0; }
    .app-actions .app-messages { display: none; }
    .account-trigger, :root[data-auth="member"] .account-trigger { height: 44px; margin-left: var(--space-1); padding: 0; border: 0; border-radius: var(--radius-pill); }
    .account-avatar { width: 36px; height: 36px; }
    .account-menu { position: fixed; top: 68px; right: var(--space-2); left: var(--space-2); width: auto; max-height: calc(100dvh - 68px - 84px); }
    .notification-panel { position: fixed; top: 68px; right: var(--space-2); left: var(--space-2); width: auto; max-height: calc(100dvh - 68px - 84px); }

    .site-footer { margin-top: var(--space-4); padding: var(--space-6) 0; }
    .site-footer-inner { flex-direction: column; align-items: flex-start; gap: var(--space-4); }
    .site-footer .footer-links { margin: 0; gap: var(--space-2) var(--space-5); }
    .footer-theme { padding-right: var(--space-3); }

    .bottom-nav {
      position: fixed;
      z-index: var(--z-header);
      top: auto;
      right: 0;
      bottom: 0;
      left: 0;
      display: grid;
      grid-template-columns: repeat(5, 1fr);
      gap: 0;
      margin: 0;
      padding: 4px var(--space-2) calc(4px + env(safe-area-inset-bottom));
      border-top: 1px solid var(--border-subtle);
      border-bottom: 0;
      background: var(--header-surface);
      box-shadow: none;
      -webkit-backdrop-filter: saturate(1.4) blur(10px);
      backdrop-filter: saturate(1.4) blur(10px);
    }
    .bottom-nav a {
      position: relative;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 3px;
      min-height: 54px;
      padding: 0;
      border-radius: var(--radius-md);
      color: var(--text-muted);
      font: var(--text-caption);
      font-weight: 600;
      text-decoration: none;
    }
    .bottom-nav a .icon { width: 23px; height: 23px; }
    .bottom-nav .bottom-badge { position: absolute; top: 3px; right: auto; left: calc(50% + 4px); width: auto; min-width: 18px; height: 18px; padding: 0 5px; border: 2px solid var(--surface); border-radius: var(--radius-pill); background: var(--danger); color: var(--on-danger); font-size: 11px; line-height: 14px; text-align: center; }
    .bottom-nav a[aria-current="page"] { color: var(--accent); }
    .bottom-nav a[aria-current="page"] .bottom-avatar { box-shadow: 0 0 0 2px var(--accent); }
    body { padding-bottom: calc(66px + env(safe-area-inset-bottom)); }
    .toast-region { bottom: calc(78px + env(safe-area-inset-bottom)); }
  }

  /* ---------- Page frame ---------- */
  .community { padding-block: var(--space-6) var(--space-12); }
  .page-header {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--space-4) var(--space-6);
    margin: 0 0 var(--space-6);
  }
  .page-header-text { min-width: 0; flex: 1 1 320px; }
  .page-kicker { margin: 0 0 var(--space-2); font: var(--text-caption); font-weight: 700; letter-spacing: var(--tracking-overline); color: var(--accent); }
  .page-title, .community .page-title { margin: 0; font: var(--text-h1); letter-spacing: var(--tracking-h1); color: var(--text-primary); overflow-wrap: anywhere; }
  .page-subtitle { margin: var(--space-2) 0 0; max-width: 640px; font: var(--text-body); color: var(--text-secondary); }
  .page-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); }
  .account-head .page-header { justify-content: center; text-align: center; }
  .account-head .page-subtitle { margin-inline: auto; }
  :root[data-route="privacy"] .community.container, :root[data-route="account"] .community.container { max-width: 800px; }
  :root[data-route="board"] .community.container:has(.post-detail, .editor-form),
  :root[data-route="projects"] .community.container:has(.project-editor) { max-width: 960px; }
  @media (max-width: 767px) {
    .community { padding-block: var(--space-4) var(--space-10); }
    .page-title, .community .page-title { font-size: 24px; line-height: 32px; }
    .page-header { margin-bottom: var(--space-5); }
    .page-actions { width: 100%; }
  }

  /* ---------- Page loading (static in index.html, replaced by the route) ---------- */
  .page-skeleton { display: grid; gap: var(--space-2); max-width: 880px; }
  .page-skeleton .skeleton-overline { width: 120px; height: 12px; }
  .page-skeleton .skeleton-heading { width: 40%; min-width: 180px; height: 32px; margin-bottom: var(--space-4); }
  .page-skeleton .skeleton-text { width: 70%; }

  /* ---------- State views (error / not found / signed out) ---------- */
  .state-view {
    display: grid;
    justify-items: center;
    gap: var(--space-3);
    max-width: 520px;
    margin: var(--space-12) auto;
    padding: var(--space-10) var(--space-6);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-xl);
    background: var(--surface);
    box-shadow: var(--shadow-card);
    text-align: center;
  }
  .state-icon {
    display: grid;
    place-items: center;
    width: 56px;
    height: 56px;
    border-radius: var(--radius-pill);
    background: var(--accent-subtle);
    color: var(--accent);
  }
  .state-view[data-tone="danger"] .state-icon { background: var(--danger-subtle); color: var(--danger); }
  .state-view[data-tone="warning"] .state-icon { background: var(--warning-subtle); color: var(--warning); }
  .state-code { font: var(--text-caption); font-weight: 700; letter-spacing: var(--tracking-overline); color: var(--text-muted); }
  .state-title, .community .state-title { margin: 0; font: var(--text-h2); letter-spacing: var(--tracking-h2); color: var(--text-primary); }
  .state-text { margin: 0; font: var(--text-body); color: var(--text-secondary); overflow-wrap: anywhere; }
  .state-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-2); margin-top: var(--space-3); }

  /* Standalone status pages (404.html, offline.html) reuse the shell header look without the app scripts. */
  .status-page { min-height: 100dvh; display: flex; flex-direction: column; background: var(--bg-primary); }
  .status-page main { flex: 1; width: calc(100% - 2 * var(--space-4)); }

  /* Strong primary (concept: deep green gradient) for hero-level calls to action. */
  .btn-strong, .btn.btn-strong { background: linear-gradient(135deg, var(--accent-strong-start), var(--accent-strong-end)); border-color: transparent; color: var(--on-accent); box-shadow: var(--shadow-card); }
  .btn .icon { width: 18px; height: 18px; }
}
