/* ========================================================================
   Softheart Games · Global Styles
   Includes: reset, base layout, heart pattern background, top nav, footer
   ======================================================================== */


/* ========================================================================
   1. Reset & Base
   ======================================================================== */

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}

body {
  background: var(--bg-base);
  color: var(--cream-100);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  min-height: 100vh;
  overflow-x: hidden;
}

/* Language-specific font defaults — set on <html lang="en"> or <html lang="zh"> */
html[lang="en"] body {
  font-family: var(--font-en);
}

html[lang="zh"] body {
  font-family: var(--font-zh-body);
}

a {
  color: inherit;
  text-decoration: none;
}

img,
svg {
  display: block;
  max-width: 100%;
}

button {
  font-family: inherit;
  background: none;
  border: none;
  cursor: pointer;
  color: inherit;
}

input,
textarea {
  font-family: inherit;
}

/* Screen-reader-only utility */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}


/* ========================================================================
   2. Heart Pattern Background — Brand DNA
   Used on bg-base sections. Subtle, never competes with content.
   ======================================================================== */

.heart-pattern-bg {
  position: relative;
}

.heart-pattern-bg::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='72' height='72' viewBox='0 0 72 72'><g transform='rotate(15 36 36)' fill='%23F5E9D0' opacity='0.08'><path d='M16 26 C10 21, 6 17, 6 12 C6 9, 8 7, 11 7 C13 7, 15 8, 16 11 C17 8, 19 7, 21 7 C24 7, 26 9, 26 12 C26 17, 22 21, 16 26 Z'/><path d='M52 58 C46 53, 42 49, 42 44 C42 41, 44 39, 47 39 C49 39, 51 40, 52 43 C53 40, 55 39, 57 39 C60 39, 62 41, 62 44 C62 49, 58 53, 52 58 Z'/></g></svg>");
  background-repeat: repeat;
  pointer-events: none;
  z-index: var(--z-base);
}

.heart-pattern-bg > * {
  position: relative;
  z-index: var(--z-content);
}

/* Reduced opacity for nav background (when scrolled) */
.heart-pattern-bg--subtle::before {
  opacity: 0.6;
}


/* ========================================================================
   3. Top Navigation Bar
   ======================================================================== */

.site-nav {
  position: sticky;
  top: 0;
  left: 0;
  right: 0;
  height: var(--nav-height);
  z-index: var(--z-nav);
  background: transparent;
  transition: background var(--ease-out), backdrop-filter var(--ease-out);
}

.site-nav.scrolled {
  background: rgba(31, 26, 23, 0.95);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-bottom: 0.5px solid var(--border-subtle);
}

.site-nav__inner {
  height: 100%;
  padding: 0 42px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  max-width: 100%;
}


/* --- Nav Left: Logo + Studio Name --- */

.site-nav__brand {
  display: flex;
  align-items: center;
  gap: 18px;
  flex-shrink: 0;
}

.site-nav__logo {
  width: 54px;
  height: 54px;
  border-radius: var(--radius-sm);
  flex-shrink: 0;
}

.site-nav__name {
  font-weight: 700;
  font-size: 26px;
  letter-spacing: -0.01em;
  color: white;
  text-shadow: var(--shadow-text-soft);
  transition: color var(--ease-out), text-shadow var(--ease-out);
  white-space: nowrap;
}

html[lang="zh"] .site-nav__name {
  font-family: var(--font-zh-display);
  font-weight: 400;
  letter-spacing: 0.02em;
}

.site-nav.scrolled .site-nav__name {
  color: var(--cream-300);
  text-shadow: none;
}


/* --- Nav Center: 4 navigation links --- */

.site-nav__menu {
  display: flex;
  align-items: center;
  gap: 42px;
  list-style: none;
}

.site-nav__link {
  font-size: 21px;
  font-weight: 500;
  color: rgba(255, 255, 255, 0.85);
  text-shadow: var(--shadow-text-soft);
  padding: 9px 0;
  position: relative;
  transition: color var(--ease-out-quick);
  cursor: pointer;
}

html[lang="zh"] .site-nav__link {
  font-family: var(--font-zh-body);
}

.site-nav.scrolled .site-nav__link {
  color: var(--cream-500);
  text-shadow: none;
}

.site-nav__link:hover {
  color: var(--red-500);
}

.site-nav__link[aria-current="page"] {
  color: white;
  font-weight: 700;
}

.site-nav.scrolled .site-nav__link[aria-current="page"] {
  color: var(--cream-300);
}

.site-nav__link[aria-current="page"]::after {
  content: '';
  display: block;
  height: 3px;
  background: var(--red-500);
  border-radius: 2px;
  margin-top: 6px;
}


/* --- Nav Right: Language dropdown --- */

.lang-switcher {
  position: relative;
  flex-shrink: 0;
}

.lang-switcher__trigger {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  padding: 9px 18px;
  border-radius: var(--radius-md);
  background: var(--overlay-light);
  border: none;
  color: white;
  text-shadow: var(--shadow-text-soft);
  font-size: 20px;
  font-weight: 500;
  transition: background var(--ease-out), color var(--ease-out);
  cursor: pointer;
}

html[lang="zh"] .lang-switcher__trigger {
  font-family: var(--font-zh-body);
}

.site-nav.scrolled .lang-switcher__trigger {
  background: var(--overlay-cream);
  border: 0.5px solid var(--border-default);
  color: var(--cream-300);
  text-shadow: none;
}

.lang-switcher__trigger:hover {
  background: rgba(255, 255, 255, 0.2);
}

.site-nav.scrolled .lang-switcher__trigger:hover {
  background: var(--overlay-cream-hover);
}

.lang-switcher__arrow {
  font-size: 14px;
  opacity: 0.8;
  transition: transform var(--ease-out-quick);
}

.lang-switcher.open .lang-switcher__arrow {
  transform: rotate(180deg);
}


/* --- Dropdown Menu --- */

.lang-switcher__menu {
  position: absolute;
  top: calc(100% + 12px);
  right: 0;
  min-width: 300px;
  /* Prevent overflow on narrow viewports (high zoom, small mobile) */
  max-width: calc(100vw - 48px);
  /* Cap height only as extreme fallback; natural height otherwise */
  max-height: calc(100vh - var(--nav-height) - 36px);
  overflow-y: auto;
  overscroll-behavior: contain;
  /* Hide the scrollbar visually — scroll still works if truly needed */
  scrollbar-width: none;             /* Firefox */
  -ms-overflow-style: none;          /* Edge legacy */
  background: var(--bg-deepest);
  border: 0.5px solid var(--border-default);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card);
  padding: 12px 0;
  z-index: var(--z-dropdown);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-4px);
  transition: opacity var(--ease-out-quick), transform var(--ease-out-quick), visibility var(--ease-out-quick);
}

.lang-switcher__menu::-webkit-scrollbar {
  display: none;                     /* Chrome, Safari, newer Edge */
}

.lang-switcher.open .lang-switcher__menu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.lang-switcher__item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 60px;
  padding: 0 24px;
  font-size: 21px;
  font-weight: 500;
  color: var(--cream-300);
  cursor: pointer;
  transition: background var(--ease-out-quick), color var(--ease-out-quick);
}

.lang-switcher__item:hover:not(.is-current):not(.is-disabled) {
  background: var(--overlay-cream-hover);
  color: var(--red-500);
}

.lang-switcher__item.is-current {
  color: var(--cream-100);
  cursor: default;
}

.lang-switcher__item.is-current::after {
  content: '✓';
  color: var(--red-500);
  font-size: 18px;
  margin-left: 18px;
}

.lang-switcher__item.is-disabled {
  color: rgba(245, 233, 208, 0.32);
  cursor: not-allowed;
}

.lang-switcher__item-hint {
  font-size: 15px;
  opacity: 0.6;
  font-weight: 400;
}

/* --- Dropdown compact mode ---
   When the viewport height is tight (e.g. user zoomed to 300–500%),
   items shrink so all 4 language options fit naturally in the menu
   without needing to scroll. Triggers at either short viewport
   (height ≤ 480px) or narrow viewport (width ≤ 480px). */
@media (max-height: 480px), (max-width: 480px) {
  .lang-switcher__menu {
    min-width: 255px;
    padding: 6px 0;
  }
  .lang-switcher__item {
    height: 48px;
    padding: 0 21px;
    font-size: 20px;
  }
  .lang-switcher__item-hint {
    font-size: 14px;
  }
  .lang-switcher__item.is-current::after {
    font-size: 16px;
    margin-left: 12px;
  }
}

/* Extra-tight mode for extreme zoom or tiny viewports */
@media (max-height: 320px) {
  .lang-switcher__item {
    height: 42px;
    font-size: 18px;
  }
}


/* --- Mobile: hamburger menu --- */

.site-nav__hamburger {
  display: none;
  width: 54px;
  height: 54px;
  border-radius: var(--radius-sm);
  align-items: center;
  justify-content: center;
  background: var(--overlay-light);
  cursor: pointer;
}

.site-nav.scrolled .site-nav__hamburger {
  background: var(--overlay-cream);
}

.site-nav__hamburger-icon,
.site-nav__hamburger-icon::before,
.site-nav__hamburger-icon::after {
  display: block;
  width: 27px;
  height: 3px;
  background: white;
  border-radius: 2px;
  transition: transform var(--ease-out);
}

.site-nav.scrolled .site-nav__hamburger-icon,
.site-nav.scrolled .site-nav__hamburger-icon::before,
.site-nav.scrolled .site-nav__hamburger-icon::after {
  background: var(--cream-100);
}

.site-nav__hamburger-icon::before {
  content: '';
  transform: translateY(-6px);
}

.site-nav__hamburger-icon::after {
  content: '';
  transform: translateY(4px);
}

.mobile-menu {
  display: none;
}

/* --- Responsive: progressive compression --- */

/* Medium screens (640–900px) — tighten spacing & font sizes */
@media (max-width: 900px) {
  .site-nav__inner {
    padding: 0 30px;
  }
  .site-nav__menu {
    gap: 30px;
  }
  .site-nav__link {
    font-size: 20px;
  }
  .site-nav__name {
    font-size: 22px;
  }
}

/* Narrow screens (480–640px) — shrink brand name instead of hiding, tighten gaps */
@media (max-width: 640px) {
  .site-nav__name {
    font-size: 20px;
  }
  .site-nav__brand {
    gap: 12px;
  }
  .site-nav__menu {
    gap: 24px;
  }
  .site-nav__link {
    font-size: 18px;
  }
  .lang-switcher__trigger {
    padding: 8px 14px;
    font-size: 18px;
  }
}

/* Mobile (≤ 480px) — collapse to hamburger menu */
@media (max-width: 480px) {
  .site-nav__inner {
    padding: 0 24px;
  }
  .site-nav {
    height: var(--nav-height-mobile);
  }
  .site-nav__menu {
    display: none;
  }
  .site-nav__hamburger {
    display: flex;
  }
  .site-nav__name {
    /* Menu is hidden in hamburger mode, so we have more room — relax a bit */
    font-size: 21px;
  }
  .lang-switcher__trigger {
    padding: 8px 15px;
    font-size: 17px;
  }

  /* Mobile dropdown
     Uses max-height + visibility for reliable hide/show. Avoids transform
     translateY(-100%) which produces layout leaks at extreme browser zoom
     (400%+). Always allows inner scroll so all nav items stay reachable
     even when viewport height is smaller than the menu content height. */
  .mobile-menu {
    display: block;
    position: fixed;
    top: var(--nav-height-mobile);
    left: 0;
    right: 0;
    background: var(--bg-deepest);
    border-bottom: 0.5px solid var(--border-default);
    z-index: calc(var(--z-nav) - 1);

    /* Closed state: zero height, no padding, hidden, non-interactive */
    max-height: 0;
    padding: 0 24px;
    overflow: hidden;
    visibility: hidden;
    transition:
      max-height var(--ease-out),
      padding var(--ease-out),
      visibility 0s linear var(--ease-out);
  }

  .mobile-menu.open {
    /* Open: limit to remaining viewport height, allow scroll if truly needed */
    max-height: calc(100vh - var(--nav-height-mobile));
    padding: 30px 24px;
    visibility: visible;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    /* Hide the scrollbar visually — scroll still works as extreme fallback */
    scrollbar-width: none;
    -ms-overflow-style: none;
    transition:
      max-height var(--ease-out),
      padding var(--ease-out),
      visibility 0s linear 0s;
  }

  .mobile-menu.open::-webkit-scrollbar {
    display: none;
  }

  .mobile-menu__list {
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 6px;
  }

  .mobile-menu__link {
    display: block;
    padding: 18px 24px;
    border-radius: var(--radius-md);
    color: var(--cream-300);
    font-size: 24px;
    font-weight: 500;
  }

  html[lang="zh"] .mobile-menu__link {
    font-family: var(--font-zh-body);
  }

  .mobile-menu__link[aria-current="page"] {
    color: var(--cream-100);
    background: var(--overlay-cream);
  }
}

/* Mobile menu compact mode — when viewport is both narrow AND short
   (e.g. user zoomed to 400%+ on a desktop display). Nav links shrink
   so all 4 fit naturally inside the mobile drawer without scrolling. */
@media (max-width: 480px) and (max-height: 520px) {
  .mobile-menu.open {
    padding: 18px 18px;
  }
  .mobile-menu__list {
    gap: 3px;
  }
  .mobile-menu__link {
    padding: 12px 21px;
    font-size: 20px;
  }
}

@media (max-width: 480px) and (max-height: 360px) {
  .mobile-menu.open {
    padding: 12px 15px;
  }
  .mobile-menu__link {
    padding: 9px 18px;
    font-size: 20px;
  }
}

/* Ultra-narrow (≤ 380px) — typically 4×–5× browser zoom.
   Brand name shrinks further to stay on one line alongside logo + lang +
   hamburger. The name never disappears regardless of zoom level. */
@media (max-width: 380px) {
  .site-nav__inner {
    padding: 0 18px;
  }
  .site-nav__name {
    font-size: 18px;
    letter-spacing: 0;
  }
  .site-nav__brand {
    gap: 9px;
  }
  .site-nav__logo {
    width: 48px;
    height: 48px;
  }
  .lang-switcher__trigger {
    padding: 6px 12px;
    font-size: 16px;
  }
  .site-nav__hamburger {
    width: 48px;
    height: 48px;
  }
}


/* ========================================================================
   4. Footer
   --------------------------------------------------------------------
   Intentionally removed. Contact info, navigation links, and legal info
   are all handled on the About page (single source of truth).
   The site has no global footer by design — keeps every page lean.
   ======================================================================== */


/* ========================================================================
   5. Utility Classes
   ======================================================================== */

.container {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 35px;
}

.container--narrow {
  max-width: var(--content-max);
}

@media (max-width: 768px) {
  .container,
  .container--narrow {
    padding: 0 20px;
  }
}

/* Reduced motion respect */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
