/* ============================================================
 * Customer Cloud — Components (Phase 1)
 * Header / Footer / Buttons
 * .ccv2 scoped — never bleeds into legacy /style.css
 * ============================================================ */

/* ============================================================
 * Header (cc-header) — Dual-state
 *
 * Default (top of page): transparent background + basic gray+black logo
 * Scrolled (.is-scrolled): black background + white logo
 *
 * Per brand guideline: the gray+black logo (CC_horizontal_full_color_RGB.svg)
 * is the canonical "basic" logo and should be the default state.
 * White logo is reserved for dark surfaces (the scrolled black header).
 *
 * Activated by header.js scroll listener which toggles `.is-scrolled`.
 * Position is fixed (not sticky) so content can scroll under it
 * while it remains transparent at the top.
 * ============================================================ */

/* Note: Body has no top padding. All hero sections (cc-fv, cc-page-hero,
   cc-detail-hero) have section-py (140px) >= header-h (100px), so the
   header overlays the upper hero whitespace without colliding with content. */

.ccv2 .cc-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
  /* Top state: glass-white (McKinsey/Apple style) — keeps nav readable
     even when underlying content is a dark hero image */
  background: rgba(255, 255, 255, 0.88);
  backdrop-filter: blur(20px) saturate(180%);
  -webkit-backdrop-filter: blur(20px) saturate(180%);
  color: var(--cc-text-primary);
  height: var(--cc-header-h);
  border-bottom: 1px solid rgba(0, 0, 0, 0.06);
  transition:
    background var(--cc-duration-base) var(--cc-ease-out),
    backdrop-filter var(--cc-duration-base) var(--cc-ease-out),
    border-color var(--cc-duration-base) var(--cc-ease-out),
    box-shadow var(--cc-duration-base) var(--cc-ease-out);
}

.ccv2 .cc-header.is-scrolled {
  background: var(--cc-black);
  color: var(--cc-white);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-bottom-color: rgba(255, 255, 255, 0.08);
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
}

.ccv2 .cc-header__inner {
  height: 100%;
  max-width: var(--cc-container-max);
  margin: 0 auto;
  padding: 0 var(--cc-container-px);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--cc-space-lg);
}

/* Logo — dual-image cross-fade */
.ccv2 .cc-header__logo {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  position: relative;
  height: 52px;
}

.ccv2 .cc-header__logo-img {
  height: 52px;
  width: auto;
  display: block;
  transition: opacity var(--cc-duration-base) var(--cc-ease-out);
}

.ccv2 .cc-header__logo-img--white {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  pointer-events: none;
}

/* Default state: basic gray+black logo visible, white hidden */
.ccv2 .cc-header__logo-img--basic { opacity: 1; }

/* Scrolled state: cross-fade to white logo */
.ccv2 .cc-header.is-scrolled .cc-header__logo-img--basic { opacity: 0; }
.ccv2 .cc-header.is-scrolled .cc-header__logo-img--white { opacity: 1; }

@media (max-width: 768px) {
  .ccv2 .cc-header__logo,
  .ccv2 .cc-header__logo-img {
    height: 36px;
  }

  .ccv2 .cc-header__inner {
    padding: 0 var(--cc-container-px);
    gap: var(--cc-space-md);
  }
}

@media (max-width: 480px) {
  .ccv2 .cc-header__logo,
  .ccv2 .cc-header__logo-img {
    height: 32px;
  }
}

/* Nav (desktop) */
.ccv2 .cc-header__nav {
  display: flex;
  align-items: center;
  gap: var(--cc-space-2xl);
}

.ccv2 .cc-header__nav-link {
  font-family: var(--cc-font-en);
  font-size: var(--cc-fs-small);
  font-weight: 400;
  letter-spacing: var(--cc-ls-wider);
  color: var(--cc-text-primary);
  text-transform: uppercase;
  position: relative;
  padding: 8px 0;
  transition:
    color var(--cc-duration-base) var(--cc-ease-out),
    opacity var(--cc-duration-fast) var(--cc-ease-out);
}

.ccv2 .cc-header.is-scrolled .cc-header__nav-link {
  color: var(--cc-white);
}

.ccv2 .cc-header__nav-link:hover {
  opacity: 0.7;
}

/* P0-2: Keyboard focus visibility (WCAG 2.4.7) */
.ccv2 .cc-header__nav-link:focus-visible,
.ccv2 .cc-header__mobile-nav a:focus-visible {
  outline: 2px solid var(--cc-text-primary);
  outline-offset: 4px;
}
.ccv2 .cc-header.is-scrolled .cc-header__nav-link:focus-visible {
  outline-color: var(--cc-white);
}
.ccv2 .cc-header__hamburger:focus-visible {
  outline: 2px solid var(--cc-text-primary);
  outline-offset: 2px;
}
.ccv2 .cc-header.is-scrolled .cc-header__hamburger:focus-visible {
  outline-color: var(--cc-white);
}

.ccv2 .cc-header__nav-link--cta {
  border: 1px solid rgba(0, 0, 0, 0.4);
  padding: 10px 20px;
  margin-left: var(--cc-space-md);
  transition:
    background var(--cc-duration-fast) var(--cc-ease-out),
    color var(--cc-duration-base) var(--cc-ease-out),
    border-color var(--cc-duration-base) var(--cc-ease-out);
}

.ccv2 .cc-header.is-scrolled .cc-header__nav-link--cta {
  border-color: rgba(255, 255, 255, 0.4);
}

.ccv2 .cc-header__nav-link--cta:hover {
  background: var(--cc-text-primary);
  color: var(--cc-white);
  border-color: var(--cc-text-primary);
  opacity: 1;
}

.ccv2 .cc-header.is-scrolled .cc-header__nav-link--cta:hover {
  background: var(--cc-white);
  color: var(--cc-black);
  border-color: var(--cc-white);
}

/* Hamburger (hidden on desktop) */
.ccv2 .cc-header__hamburger {
  display: none;
  width: 44px;
  height: 44px;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 6px;
  background: transparent;
  border: 0;
  cursor: pointer;
  padding: 10px;
}

.ccv2 .cc-header__hamburger span {
  display: block;
  width: 24px;
  height: 1px;
  background: var(--cc-text-primary);
  transition:
    background var(--cc-duration-base) var(--cc-ease-out),
    transform var(--cc-duration-base) var(--cc-ease-out);
}

.ccv2 .cc-header.is-scrolled .cc-header__hamburger span {
  background: var(--cc-white);
}

.ccv2 .cc-header__hamburger[aria-expanded="true"] span:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
.ccv2 .cc-header__hamburger[aria-expanded="true"] span:nth-child(2) {
  opacity: 0;
}
.ccv2 .cc-header__hamburger[aria-expanded="true"] span:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}

/* Mobile menu drawer — P1-7: Single source of truth via [hidden].
   Previously had both `display: none` base + `[hidden] { display: none }`
   override, which was redundant and masked intent. Now the element is
   visible by default; [hidden] attribute (applied on load + close)
   hides it natively. JS toggle removes/sets [hidden] cleanly. */
.ccv2 .cc-header__mobile {
  position: absolute;
  top: var(--cc-header-h);
  left: 0;
  right: 0;
  background: var(--cc-black);
  border-top: 1px solid rgba(255, 255, 255, 0.1);
}

.ccv2 .cc-header__mobile[hidden] {
  display: none;
}

.ccv2 .cc-header__mobile-nav {
  display: flex;
  flex-direction: column;
  padding: var(--cc-space-lg) var(--cc-container-px-sm);
}

.ccv2 .cc-header__mobile-nav a {
  font-family: var(--cc-font-en);
  font-size: var(--cc-fs-body-lg);
  font-weight: 400;
  letter-spacing: var(--cc-ls-wider);
  color: var(--cc-white);
  text-transform: uppercase;
  padding: 18px 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.ccv2 .cc-header__mobile-nav a:last-child {
  border-bottom: none;
}

/* Responsive: hide nav, show hamburger */
@media (max-width: 1024px) {
  .ccv2 .cc-header__nav {
    display: none;
  }

  .ccv2 .cc-header__hamburger {
    display: flex;
  }

  /* P1-NEW: `:not([hidden])` prevents `display: block` from overriding
     the [hidden] attribute's native `display: none`. This keeps the
     [hidden] single-source-of-truth intact while still showing the
     drawer on mobile when it's open. */
  .ccv2 .cc-header__mobile:not([hidden]) {
    display: block;
  }
}

/* ============================================================
 * Footer (cc-footer)
 * Dark navy background — second allowed dark zone
 * ============================================================ */

.ccv2 .cc-footer {
  background: var(--cc-dark-navy);
  color: var(--cc-white);
}

.ccv2 .cc-footer__inner {
  max-width: var(--cc-container-max);
  margin: 0 auto;
  padding: var(--cc-space-2xl) var(--cc-container-px) var(--cc-space-lg);
}

/* Top zone — brand + sitemap */
.ccv2 .cc-footer__top {
  display: flex;
  gap: var(--cc-space-2xl);
  padding-bottom: var(--cc-space-2xl);
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

/* Brand block */
.ccv2 .cc-footer__brand {
  flex-shrink: 0;
  width: 280px;
}

.ccv2 .cc-footer__logo {
  font-family: var(--cc-font-en);
  font-size: var(--cc-fs-body-lg);
  font-weight: 700;
  letter-spacing: var(--cc-ls-wider);
  color: var(--cc-white);
}

.ccv2 .cc-footer__sub {
  margin-top: var(--cc-space-sm);
  font-family: var(--cc-font-ja);
  font-size: var(--cc-fs-small);
  color: rgba(255, 255, 255, 0.5);
  letter-spacing: 0.05em;
}

.ccv2 .cc-footer__social {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-top: 20px;
}

.ccv2 .cc-footer__social-link {
  display: flex;
  width: 32px;
  height: 32px;
  opacity: 1;
  transition: opacity 0.2s;
}

.ccv2 .cc-footer__social-link:hover {
  opacity: 0.7;
}

.ccv2 .cc-footer__social-link img {
  width: 32px;
  height: 32px;
  object-fit: contain;
}

/* Sitemap (4 columns) */
.ccv2 .cc-footer__sitemap {
  flex: 1;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--cc-space-lg);
}

.ccv2 .cc-footer__col-title {
  font-family: var(--cc-font-en);
  font-size: var(--cc-fs-eyebrow);
  font-weight: 700;
  letter-spacing: var(--cc-ls-eyebrow-lg);
  color: rgba(255, 255, 255, 0.6);
  margin-bottom: var(--cc-space-md);
  text-transform: uppercase;
}

.ccv2 .cc-footer__col-list {
  display: flex;
  flex-direction: column;
  gap: var(--cc-space-sm);
}

.ccv2 .cc-footer__col-list a {
  font-family: var(--cc-font-ja);
  font-size: var(--cc-fs-small);
  color: var(--cc-white);
  letter-spacing: 0.04em;
  transition: opacity var(--cc-duration-fast) var(--cc-ease-out);
}

.ccv2 .cc-footer__col-list a:hover {
  opacity: 0.7;
}

/* Bottom zone — copy + motto */
.ccv2 .cc-footer__bottom {
  margin-top: var(--cc-space-lg);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: var(--cc-font-en);
  font-size: var(--cc-fs-eyebrow);
  letter-spacing: 0.1em;
  /* P1-9: bumped 0.35 → 0.55 for WCAG AA contrast */
  color: rgba(255, 255, 255, 0.55);
}

.ccv2 .cc-footer__motto {
  letter-spacing: 0.2em;
}

/* Responsive: footer */
@media (max-width: 1024px) {
  .ccv2 .cc-footer__top {
    flex-direction: column;
    gap: var(--cc-space-xl);
  }

  .ccv2 .cc-footer__brand {
    width: auto;
  }

  .ccv2 .cc-footer__sitemap {
    grid-template-columns: repeat(2, 1fr);
    gap: var(--cc-space-xl);
  }
}

@media (max-width: 768px) {
  .ccv2 .cc-footer__bottom {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--cc-space-sm);
  }

  .ccv2 .cc-footer__inner {
    padding: var(--cc-space-xl) var(--cc-container-px) var(--cc-space-md);
  }

  .ccv2 .cc-footer__motto {
    font-size: 10px;
    letter-spacing: 0.15em;
  }
}

@media (max-width: 480px) {
  .ccv2 .cc-footer__sitemap {
    grid-template-columns: 1fr;
    gap: var(--cc-space-lg);
  }

  .ccv2 .cc-footer__col-list {
    gap: var(--cc-space-xs);
  }

  .ccv2 .cc-header__mobile-nav {
    padding: var(--cc-space-md) var(--cc-container-px);
  }

  .ccv2 .cc-header__mobile-nav a {
    font-size: var(--cc-fs-body);
    padding: 16px 0;
  }
}
