/* ============================================================================
   Giftella web app · design system (Sep 2026 overhaul)
   "Warm Luxury": cream ground, plum ink, gold accents, Georgia serif display.
   Every signed-in surface is built from these tokens and primitives; the
   landing page keeps its own editorial stylesheet in index.html.
   Prefix: ga- (Giftella app). Dark mode: <html data-theme="dark">.
   ========================================================================== */

:root {
  --ga-ink: #1E1913;
  --ga-plum-deep: #2A2219; /* legacy name: deep warm ink */
  --ga-gold-ink: #7A5C16;
  --ga-cream: #FBFAF7;
  --ga-glass: rgba(251,250,247,.78);
  --ga-r-sm: 12px;
  --ga-r: 18px;
  --ga-r-lg: 24px;
  --ga-r-xl: 30px;
  --ga-ease: cubic-bezier(.22,.9,.3,1);
  --ga-shadow-sm: 0 1px 2px rgba(30,25,19,.05), 0 6px 18px -8px rgba(30,25,19,.14);
  --ga-shadow: 0 10px 30px -14px rgba(30,25,19,.22);
  --ga-shadow-lg: 0 24px 60px -24px rgba(30,25,19,.34);
  --ga-gold-grad: linear-gradient(120deg, #EFD79A 0%, #D9B45C 48%, #C9A24A 100%);
  --ga-plum-grad: linear-gradient(135deg, #2A2219, #1E1913); /* legacy name: warm ink gradient */
  --ga-ink-grad: radial-gradient(120% 140% at 50% -20%, #2E261C 0%, #1B1712 48%, #0F0D0A 100%);
  --ga-serif: Georgia, "Times New Roman", "Iowan Old Style", serif;
  --ga-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, "Helvetica Neue", sans-serif;
  --ga-mono: ui-monospace, SFMono-Regular, Menlo, monospace;
  --ga-tabbar-h: 62px;
}
:root[data-theme="dark"] {
  --ga-glass: rgba(16,14,11,.72);
  --ga-shadow-sm: 0 1px 2px rgba(0,0,0,.4), 0 8px 22px -10px rgba(0,0,0,.6);
  --ga-shadow: 0 12px 34px -14px rgba(0,0,0,.7);
  --ga-shadow-lg: 0 28px 70px -26px rgba(0,0,0,.85);
}

/* ---------- app frame ---------- */
#main-app [hidden], .ga-sheet-back [hidden], .ga-pop [hidden] { display: none !important; }
#main-app { display: none; min-height: 100vh; }
#main-app.active { display: block; }
.ga-page { max-width: 1180px; margin: 0 auto; padding: 22px 22px calc(48px + env(safe-area-inset-bottom)); }
@media (max-width: 899px) { .ga-page { padding: 14px 16px calc(var(--ga-tabbar-h) + 34px + env(safe-area-inset-bottom)); } }
@media (max-width: 430px) { .ga-page { padding-left: 14px; padding-right: 14px; } }
.ga-screen { display: none; }
.ga-screen.active { display: block; animation: gaFade .22s var(--ga-ease); }
@keyframes gaFade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.ga-in { animation: gaUp .42s var(--ga-ease) both; animation-delay: calc(var(--i, 0) * 40ms); }
@keyframes gaUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .ga-in, .ga-screen.active { animation: none; } }

/* ---------- topbar ---------- */
.ga-topbar {
  position: sticky; top: 0; z-index: 40;
  background: var(--ga-glass); backdrop-filter: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%);
  border-bottom: 1px solid var(--border2);
  padding: calc(env(safe-area-inset-top) + 8px) 22px 8px;
}
.ga-topbar-inner { max-width: 1180px; margin: 0 auto; display: flex; align-items: center; gap: 14px; position: relative; }
.ga-brand { display: inline-flex; align-items: center; gap: 9px; cursor: pointer; user-select: none; text-decoration: none; flex: none; }
.ga-brand img { width: 30px; height: 30px; border-radius: 9px; }
.ga-brand .wordmark { font-size: 22px; }
.ga-nav { display: flex; align-items: center; gap: 4px; margin-left: auto; }
.ga-navlink { padding: 8px 13px; border-radius: 999px; font-size: 14px; font-weight: 600; color: var(--muted); transition: background .15s ease, color .15s ease; }
.ga-navlink:hover { color: var(--text); background: var(--surface-2); }
.ga-navlink.active { color: var(--text); background: var(--surface-2); }
.ga-navlink.plus { color: var(--ga-gold-ink); }
:root[data-theme="dark"] .ga-navlink.plus { color: var(--gold2); }
.ga-navlink.plus.member { background: linear-gradient(120deg, rgba(201,162,74,.22), rgba(201,162,74,.08)); color: var(--text); }
.ga-iconbtn { width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center; font-size: 17px; color: var(--text);
  border: 1px solid var(--border); background: var(--card); transition: transform .12s ease, border-color .15s ease; }
.ga-iconbtn:hover { border-color: var(--gold); }
.ga-iconbtn:active { transform: scale(.94); }
.ga-avatar { width: 38px; height: 38px; border-radius: 50%; display: inline-grid; place-items: center; font-size: 18px; overflow: hidden; flex: none;
  background: linear-gradient(145deg, rgba(201,162,74,.22), rgba(201,162,74,.08)); border: 1.5px solid var(--border); }
.ga-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ga-avatar.xs { width: 26px; height: 26px; font-size: 13px; }
.ga-avatar.sm { width: 44px; height: 44px; font-size: 21px; }
.ga-avatar.md { width: 56px; height: 56px; font-size: 26px; }
.ga-avatar.lg { width: 84px; height: 84px; font-size: 40px; border-width: 2px; }
.ga-avatar.xl { width: 112px; height: 112px; font-size: 52px; border-width: 3px; }
.ga-menu-wrap { position: relative; }
.ga-menu { position: absolute; right: 0; top: calc(100% + 8px); min-width: 230px; background: var(--card); border: 1px solid var(--border);
  border-radius: 16px; box-shadow: var(--ga-shadow-lg); padding: 8px; display: none; z-index: 60; }
.ga-menu.open { display: block; animation: gaFade .16s var(--ga-ease); }
.ga-menu .mh { padding: 10px 12px 8px; border-bottom: 1px solid var(--border2); margin-bottom: 6px; }
.ga-menu .mh b { display: block; font-size: 14.5px; }
.ga-menu .mh span { color: var(--muted); font-size: 12.5px; }
.ga-menu .mi { display: flex; width: 100%; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 10px; font-size: 14px; font-weight: 600; text-align: left; }
.ga-menu .mi:hover { background: var(--surface-2); }
.ga-menu .mi.gold { color: var(--ga-gold-ink); }
:root[data-theme="dark"] .ga-menu .mi.gold { color: var(--gold2); }
@media (max-width: 899px) {
  .ga-topbar { padding: calc(env(safe-area-inset-top) + 8px) 14px 8px; }
  .ga-nav .ga-navlink { display: none; }
}

/* ---------- topbar search (command palette) ----------
   A SEARCH, not a second gift generator. It finds what already exists (wishlist,
   circle, partner brands, pages) and the last row hands ideas to the one finder
   on You. Tokens only, so it reads the same in light and dark. */
.ga-search { position: relative; flex: 1 1 320px; min-width: 0; max-width: 430px; margin-left: 4px; }
.ga-search-box { display: flex; align-items: center; gap: 9px; height: 38px; padding: 0 6px 0 13px;
  border: 1px solid var(--border); border-radius: 999px; background: var(--card);
  transition: border-color .15s ease, box-shadow .2s var(--ga-ease); }
.ga-search-box:hover { border-color: var(--gold); }
.ga-search-box:focus-within { border-color: var(--gold); box-shadow: 0 0 0 3px rgba(201,162,74,.16); }
.ga-search-ico { flex: none; font-size: 13px; line-height: 1; opacity: .7; }
.ga-search-input { flex: 1 1 auto; min-width: 0; border: 0; outline: 0; background: transparent; padding: 0;
  font: 500 14px/1.2 var(--ga-sans); color: var(--text); letter-spacing: -.1px; }
.ga-search-input::placeholder { color: var(--muted); }
.ga-search-kbd { flex: none; font: 700 10px/1 var(--ga-mono); letter-spacing: .6px; color: var(--muted);
  border: 1px solid var(--border); border-radius: 7px; padding: 4px 6px 3px; background: var(--surface-2); }
.ga-search-box:focus-within .ga-search-kbd { display: none; }
.ga-search-x { flex: none; width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center;
  font-size: 10px; color: var(--muted); background: var(--surface-2); }
.ga-search-x:hover { color: var(--text); background: var(--border2); }

.ga-search-panel { position: absolute; z-index: 70; top: calc(100% + 10px); left: 0; right: 0;
  background: var(--card); border: 1px solid var(--border); border-radius: var(--ga-r);
  box-shadow: var(--ga-shadow-lg); padding: 6px; max-height: min(70vh, 520px); overflow-y: auto;
  overscroll-behavior: contain; animation: gaFade .16s var(--ga-ease); }
.ga-search-grp { font: 700 10px/1 var(--ga-mono); letter-spacing: 2px; text-transform: uppercase;
  color: var(--ga-gold-ink); padding: 12px 12px 7px; }
:root[data-theme="dark"] .ga-search-grp { color: var(--gold2); }
.ga-search-panel > .ga-search-grp:first-child { padding-top: 8px; }
.ga-search-sep { height: 1px; background: var(--border2); margin: 7px 10px 5px; }
.ga-search-empty { padding: 15px 13px 17px; color: var(--muted); font-size: 13px; line-height: 1.5; }

.ga-sr { display: flex; align-items: center; gap: 11px; width: 100%; padding: 9px 11px; border-radius: 13px;
  text-align: left; cursor: pointer; transition: background .12s ease; }
.ga-sr .ico { position: relative; flex: none; width: 32px; height: 32px; border-radius: 10px; display: grid; place-items: center;
  font-size: 16px; background: var(--surface-2); border: 1px solid var(--border2); overflow: hidden; }
.ga-sr .ico img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.ga-sr .t { flex: 1 1 auto; min-width: 0; }
.ga-sr .t b { display: block; font-size: 14px; font-weight: 650; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ga-sr .t span { display: block; margin-top: 1px; font-size: 12px; color: var(--muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ga-sr .k { flex: none; font: 700 9.5px/1 var(--ga-mono); letter-spacing: 1.3px; text-transform: uppercase; color: var(--muted); }
.ga-sr:hover, .ga-sr[aria-selected="true"] { background: var(--surface-2); }
.ga-sr[aria-selected="true"] .k { color: var(--text); }
.ga-sr.gift .ico { background: var(--ga-gold-grad); border-color: transparent; color: var(--ga-ink); }
.ga-sr.gift .k { color: var(--ga-gold-ink); }
:root[data-theme="dark"] .ga-sr.gift .k { color: var(--gold2); }

/* the row a search jumped to, so the eye lands on it */
.ga-flash { animation: gaFlash 1.7s var(--ga-ease) both; }
@keyframes gaFlash { 0%, 55% { box-shadow: 0 0 0 2px var(--gold), var(--ga-shadow); } 100% { box-shadow: 0 0 0 2px rgba(201,162,74,0), var(--ga-shadow); } }

/* phones: the bar becomes an icon that opens over the topbar */
.ga-search-toggle { display: none; }
@media (max-width: 899px) {
  .ga-search-toggle { display: grid; }
  .ga-search { display: none; }
  .ga-search-kbd { display: none; }
  .ga-topbar.searching .ga-brand, .ga-topbar.searching .ga-nav { visibility: hidden; }
  .ga-topbar.searching .ga-search { display: flex; align-items: center; position: absolute; inset: 0; z-index: 3;
    max-width: none; margin: 0; flex: 1 1 auto; }
  .ga-topbar.searching .ga-search-box { width: 100%; height: 40px; }
  .ga-topbar.searching .ga-search-panel { top: calc(100% + 9px); max-height: calc(100vh - 148px); }
}

/* ---------- bottom tab bar (mobile) ---------- */
.ga-tabbar { display: none; position: fixed; left: 0; right: 0; bottom: 0; z-index: 45; height: calc(var(--ga-tabbar-h) + env(safe-area-inset-bottom));
  padding-bottom: env(safe-area-inset-bottom); background: var(--ga-glass); backdrop-filter: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%);
  border-top: 1px solid var(--border2); }
.ga-tabbar .tabs { display: grid; grid-template-columns: repeat(5, 1fr); height: var(--ga-tabbar-h); }
.ga-tab { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; font-size: 10.5px; font-weight: 700; color: var(--muted); letter-spacing: .2px; position: relative; }
.ga-tab .ico { font-size: 21px; line-height: 1; transition: transform .18s var(--ga-ease); }
.ga-tab.active { color: var(--text); }
.ga-tab.active .ico { transform: translateY(-2px) scale(1.08); }
.ga-tab.active::after { content: ""; position: absolute; bottom: 6px; width: 18px; height: 3px; border-radius: 3px; background: var(--ga-gold-grad); }
.ga-tab .dot { position: absolute; top: 8px; right: calc(50% - 16px); width: 8px; height: 8px; border-radius: 50%; background: var(--rose); border: 2px solid var(--bg); }
@media (max-width: 899px) { .ga-tabbar { display: block; } }

/* ---------- typography ---------- */
.ga-eyebrow { font: 700 11px/1 var(--ga-mono); letter-spacing: 2.4px; text-transform: uppercase; color: var(--ga-gold-ink); margin: 0 0 10px; }
:root[data-theme="dark"] .ga-eyebrow { color: var(--gold2); }
.ga-h1 { font-family: var(--ga-serif); font-weight: 400; font-size: clamp(28px, 3.6vw, 40px); line-height: 1.06; letter-spacing: -.5px; margin: 0; color: var(--text); }
.ga-h1 .accent { background: linear-gradient(120deg, var(--ga-gold-ink), var(--gold)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.ga-h2 { font-family: var(--ga-serif); font-weight: 400; font-size: clamp(22px, 2.6vw, 28px); line-height: 1.12; letter-spacing: -.3px; margin: 0; }
.ga-h3 { font-size: 16px; font-weight: 700; margin: 0; letter-spacing: -.1px; }
.ga-lead { color: var(--muted); font-size: 15.5px; line-height: 1.55; margin: 8px 0 0; max-width: 62ch; }
.ga-sec { margin-top: 30px; }
.ga-sec-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; margin: 0 0 14px; }
.ga-sec-head .ga-h2 { flex: 1; min-width: 0; }
.ga-sec-head .sub { color: var(--muted); font-size: 13.5px; margin-top: 4px; }
.ga-sec-link { font-size: 13.5px; font-weight: 700; color: var(--ga-gold-ink); white-space: nowrap; }
:root[data-theme="dark"] .ga-sec-link { color: var(--gold2); }
.ga-sec-link:hover { text-decoration: underline; }
.muted { color: var(--muted); }
.ga-small { font-size: 12.5px; }
.ga-center { text-align: center; }
.ga-hide { display: none !important; }
.ga-row { display: flex; align-items: center; gap: 10px; }
.ga-row.wrap { flex-wrap: wrap; }
.ga-grow { flex: 1; min-width: 0; }
.ga-kicker { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 800; letter-spacing: .6px; text-transform: uppercase;
  color: var(--ga-gold-ink); background: rgba(201,162,74,.14); padding: 5px 11px; border-radius: 999px; }

/* ---------- buttons ---------- */
.ga-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 12px 20px; border-radius: 999px; font-size: 14.5px; font-weight: 700;
  border: 1px solid var(--border); background: var(--card); color: var(--text); white-space: nowrap;
  transition: transform .12s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease, filter .15s ease; text-decoration: none; }
.ga-btn:hover { border-color: var(--gold); box-shadow: var(--ga-shadow-sm); }
.ga-btn:active { transform: scale(.97); }
.ga-btn:disabled { opacity: .55; cursor: not-allowed; transform: none; }
.ga-btn.primary { background: var(--ga-gold-grad); color: var(--ga-ink); border-color: transparent; box-shadow: inset 0 0 0 1px rgba(168,132,47,.55), 0 10px 24px -10px rgba(201,162,74,.6); }
.ga-btn.primary:hover { filter: brightness(1.04); box-shadow: inset 0 0 0 1px rgba(168,132,47,.55), 0 14px 30px -10px rgba(201,162,74,.75); }
.ga-btn.plum { background: var(--text); color: var(--bg); border-color: transparent; }
.ga-btn.ink { background: var(--text); color: var(--bg); border-color: transparent; }
.ga-btn.ghost { background: transparent; }
.ga-btn.soft { background: var(--surface-2); border-color: transparent; }
.ga-btn.danger { color: var(--danger); }
.ga-btn.sm { padding: 8px 14px; font-size: 13px; }
.ga-btn.xs { padding: 6px 11px; font-size: 12px; gap: 5px; }
.ga-btn.lg { padding: 15px 26px; font-size: 16px; }
.ga-btn.block { width: 100%; }
.ga-btn .spin { width: 15px; height: 15px; border: 2px solid rgba(0,0,0,.18); border-top-color: currentColor; border-radius: 50%; animation: gaSpin .7s linear infinite; }
@keyframes gaSpin { to { transform: rotate(360deg); } }
.ga-link { background: none; color: var(--ga-gold-ink); font-weight: 700; font-size: 13.5px; padding: 0; }
:root[data-theme="dark"] .ga-link { color: var(--gold2); }
.ga-link:hover { text-decoration: underline; }
.ga-iconpill { display: inline-grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: var(--card); border: 1px solid var(--border); font-size: 16px; color: var(--text);
  transition: transform .12s ease, border-color .15s ease, background .15s ease; }
.ga-iconpill:hover { border-color: var(--gold); }
.ga-iconpill:active { transform: scale(.92); }
.ga-iconpill.on { background: rgba(199,109,82,.12); border-color: rgba(199,109,82,.5); color: var(--rose); }

/* ---------- chips ---------- */
.ga-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.ga-chips.scroll { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 6px; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.ga-chips.scroll::-webkit-scrollbar { display: none; }
.ga-chip { display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border-radius: 999px; font-size: 13.5px; font-weight: 600; white-space: nowrap;
  background: var(--card); border: 1px solid var(--border); color: var(--text); transition: all .15s ease; cursor: pointer; }
.ga-chip:hover { border-color: var(--gold); }
.ga-chip.on { background: var(--ga-gold-grad); color: var(--ga-ink); border-color: transparent; box-shadow: 0 6px 16px -8px rgba(201,162,74,.9); }
.ga-chip.plum.on { background: var(--text); color: var(--bg); }
.ga-chip .e { font-size: 15px; }
.ga-chip.sm { padding: 6px 11px; font-size: 12.5px; }
.ga-tag { display: inline-flex; align-items: center; gap: 5px; padding: 4px 9px; border-radius: 999px; font-size: 11px; font-weight: 800; letter-spacing: .3px;
  background: rgba(201,162,74,.14); color: var(--ga-gold-ink); }
:root[data-theme="dark"] .ga-tag { color: var(--gold2); }
.ga-tag.gold { background: rgba(201,162,74,.16); color: var(--ga-gold-ink); }
:root[data-theme="dark"] .ga-tag.gold { color: var(--gold2); }
.ga-tag.sage { background: rgba(62,142,110,.14); color: var(--sage); }
.ga-tag.rose { background: rgba(199,109,82,.13); color: var(--rose); }
.ga-tag.ink { background: var(--text); color: var(--bg); }

/* ---------- inputs ---------- */
.ga-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.ga-label { font-size: 11.5px; font-weight: 800; letter-spacing: .7px; text-transform: uppercase; color: var(--muted); }
.ga-label i { font-style: normal; text-transform: none; letter-spacing: 0; font-weight: 500; }
.ga-input, .ga-textarea, .ga-select { width: 100%; font-family: inherit; font-size: 15px; color: var(--text); background: var(--card); border: 1px solid var(--border);
  border-radius: var(--ga-r-sm); padding: 12px 14px; outline: none; transition: border-color .15s ease, box-shadow .15s ease; }
.ga-input:focus, .ga-textarea:focus, .ga-select:focus { border-color: var(--gold); box-shadow: 0 0 0 4px rgba(201,162,74,.14); }
.ga-textarea { min-height: 88px; resize: vertical; }
.ga-input.lg { padding: 15px 18px; font-size: 16.5px; border-radius: 16px; }
.ga-inputwrap { position: relative; }
.ga-inputwrap .lead { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); font-size: 17px; pointer-events: none; }
.ga-inputwrap .lead + .ga-input { padding-left: 42px; }
.ga-msg { min-height: 18px; font-size: 13px; color: var(--muted); margin-top: 6px; }
.ga-msg.err { color: var(--danger); }
.ga-msg.ok { color: var(--sage); }
.ga-slider { -webkit-appearance: none; appearance: none; width: 100%; height: 6px; border-radius: 6px; background: linear-gradient(90deg, var(--gold) var(--pct, 50%), var(--surface-2) var(--pct, 50%)); outline: none; border: none; padding: 0; }
.ga-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%; background: #fff; border: 2px solid var(--gold); box-shadow: var(--ga-shadow-sm); cursor: pointer; }
.ga-slider::-moz-range-thumb { width: 22px; height: 22px; border-radius: 50%; background: #fff; border: 2px solid var(--gold); cursor: pointer; }

/* ---------- cards ---------- */
.ga-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--ga-r); box-shadow: var(--ga-shadow-sm); }
.ga-card.pad { padding: 18px; }
.ga-card.pad-lg { padding: 24px; }
.ga-card.soft { background: var(--panel-bg); }
.ga-card.hover { transition: transform .2s var(--ga-ease), box-shadow .2s ease, border-color .2s ease; cursor: pointer; }
.ga-card.hover:hover { transform: translateY(-3px); box-shadow: var(--ga-shadow); border-color: rgba(201,162,74,.5); }
.ga-panel { background: var(--panel-bg); border: 1px solid var(--border); border-radius: var(--ga-r-lg); padding: 22px; box-shadow: var(--ga-shadow-sm); }
:root[data-theme="dark"] .ga-panel { background: linear-gradient(145deg, #201B15, #16120E); }
@media (max-width: 640px) { .ga-panel { padding: 16px; border-radius: 20px; } .ga-card.pad-lg { padding: 18px; } }
.ga-hero { position: relative; overflow: hidden; border-radius: var(--ga-r-xl); padding: 30px 30px; border: 1px solid rgba(201,162,74,.28);
  background: radial-gradient(900px 400px at 90% -30%, rgba(201,162,74,.24), transparent 60%),
              radial-gradient(600px 380px at -10% 120%, rgba(201,162,74,.08), transparent 60%), var(--panel-bg); box-shadow: var(--ga-shadow-sm); }
/* One theme everywhere (founder, Sep 10): the "ink" hero used to be a dark
   plum panel. It is now the same warm cream hero as every other block, with
   a slightly stronger gold glow so it still reads as the page's headline. */
.ga-hero.ink { color: var(--text); background: radial-gradient(900px 420px at 88% -30%, rgba(201,162,74,.30), transparent 60%),
              radial-gradient(600px 380px at -10% 120%, rgba(201,162,74,.10), transparent 60%), var(--panel-bg); border-color: rgba(201,162,74,.34); }
.ga-hero.ink .ga-h1, .ga-hero.ink .ga-h2 { color: var(--text); }
.ga-hero.ink .ga-lead { color: var(--muted); }
:root[data-theme="dark"] .ga-hero, :root[data-theme="dark"] .ga-hero.ink { background: radial-gradient(900px 420px at 88% -30%, rgba(201,162,74,.16), transparent 60%), linear-gradient(145deg, #201B15, #16120E); }
@media (max-width: 640px) { .ga-hero { padding: 22px 18px; border-radius: 24px; } }

/* ---------- gift cards ---------- */
.gc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); gap: 16px; }
.gc-grid.compact { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 12px; }
@media (max-width: 640px) { .gc-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; } .gc-grid.compact { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } }
@media (max-width: 360px) { .gc-grid, .gc-grid.compact { grid-template-columns: 1fr; } }
.gc { position: relative; display: flex; flex-direction: column; background: var(--card); border: 1px solid var(--border); border-radius: 20px; overflow: hidden;
  box-shadow: var(--ga-shadow-sm); transition: transform .22s var(--ga-ease), box-shadow .22s ease, border-color .22s ease; }
.gc:hover { transform: translateY(-4px); box-shadow: var(--ga-shadow); border-color: rgba(201,162,74,.55); }
.gc-media { position: relative; aspect-ratio: 1 / 1; background: linear-gradient(145deg, rgba(201,162,74,.14), rgba(201,162,74,.06)); display: grid; place-items: center; overflow: hidden; }
.gc-media .fb { font-size: 44px; opacity: .9; transition: opacity .3s ease; }
.gc-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; padding: 12px; background: #fff; opacity: 0; transition: opacity .35s ease; }
.gc-media img.loaded { opacity: 1; }
.gc-media.has-img .fb { opacity: 0; }
.gc-media .sk { position: absolute; inset: 0; }
.gc-media .rank { position: absolute; top: 10px; left: 10px; z-index: 2; }
.gc-media .save { position: absolute; top: 8px; right: 8px; z-index: 3; width: 34px; height: 34px; border-radius: 50%; background: rgba(255,255,255,.92); color: var(--rose);
  display: grid; place-items: center; font-size: 17px; box-shadow: var(--ga-shadow-sm); transition: transform .14s ease; }
.gc-media .save:active { transform: scale(.88); }
.gc-media .save.saved { background: var(--rose); color: #fff; }
.gc-body { padding: 12px 13px 13px; display: flex; flex-direction: column; gap: 6px; flex: 1; }
.gc-name { font-size: 14.5px; font-weight: 700; line-height: 1.28; letter-spacing: -.1px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.gc-why { font-size: 12.5px; color: var(--muted); line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.gc-meta { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: auto; padding-top: 4px; }
.gc-price { font-size: 13px; font-weight: 800; color: var(--ga-gold-ink); }
:root[data-theme="dark"] .gc-price { color: var(--gold2); }
.gc-src { font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 48%; }
.gc-actions { display: flex; gap: 6px; margin-top: 4px; }
.gc-actions .shop { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 9px 10px; border-radius: 999px; font-size: 13px; font-weight: 800;
  background: var(--text); color: var(--bg); text-decoration: none; transition: filter .15s ease, transform .12s ease; }
.gc-actions .shop:hover { filter: brightness(1.12); }
.gc-actions .shop:active { transform: scale(.97); }
.gc-actions .more { width: 36px; height: 36px; border-radius: 50%; border: 1px solid var(--border); background: var(--card); color: var(--text); display: grid; place-items: center; font-size: 15px; }
.gc-actions .more:hover { border-color: var(--gold); }
.gc.compact .gc-body { padding: 10px 11px 11px; }
.gc.compact .gc-why { display: none; }
.gc.compact .gc-name { font-size: 13.5px; }
.gc.top { border-color: rgba(201,162,74,.6); box-shadow: 0 14px 34px -18px rgba(201,162,74,.7); }

/* shop options popover */
.ga-pop { position: absolute; z-index: 170; min-width: 210px; background: var(--card); border: 1px solid var(--border); border-radius: 14px; box-shadow: var(--ga-shadow-lg); padding: 6px; }
.ga-pop a, .ga-pop button { display: flex; width: 100%; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 10px; font-size: 13.5px; font-weight: 600; text-decoration: none; color: var(--text); text-align: left; }
.ga-pop a:hover, .ga-pop button:hover { background: var(--surface-2); }
.ga-pop .sub { display: block; font-size: 11.5px; color: var(--muted); font-weight: 500; }

/* ---------- skeletons ---------- */
.sk { position: relative; overflow: hidden; background: var(--surface-2); border-radius: 10px; }
.sk::after { content: ""; position: absolute; inset: 0; transform: translateX(-100%);
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.55), transparent); animation: gaShimmer 1.3s infinite; }
:root[data-theme="dark"] .sk::after { background: linear-gradient(90deg, transparent, rgba(255,255,255,.08), transparent); }
@keyframes gaShimmer { to { transform: translateX(100%); } }
.sk-card { border-radius: 20px; border: 1px solid var(--border); background: var(--card); overflow: hidden; }
.sk-card .sk-media { aspect-ratio: 1/1; border-radius: 0; }
.sk-card .sk-line { height: 11px; margin: 10px 12px 0; }
.sk-card .sk-line:last-child { margin-bottom: 14px; }

/* ---------- lists ---------- */
.ga-list { display: flex; flex-direction: column; gap: 10px; }
.ga-item { display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--card); border: 1px solid var(--border); border-radius: 16px; box-shadow: var(--ga-shadow-sm);
  transition: transform .18s var(--ga-ease), border-color .18s ease; }
.ga-item.hover { cursor: pointer; }
.ga-item.hover:hover { transform: translateY(-2px); border-color: rgba(201,162,74,.5); }
.ga-thumb { width: 60px; height: 60px; border-radius: 14px; overflow: hidden; flex: none; display: grid; place-items: center; font-size: 26px; background: linear-gradient(145deg, rgba(201,162,74,.14), rgba(201,162,74,.06)); border: 1px solid var(--border2); position: relative; }
.ga-thumb img { width: 100%; height: 100%; object-fit: contain; padding: 5px; background: #fff; opacity: 0; transition: opacity .3s ease; }
.ga-thumb img.loaded { opacity: 1; }
.ga-thumb.has-img .fb { display: none; }
.ga-thumb.lg { width: 84px; height: 84px; font-size: 34px; border-radius: 18px; }
.ga-item-body { flex: 1; min-width: 0; }
.ga-item-title { font-size: 14.5px; font-weight: 700; line-height: 1.3; }
.ga-item-sub { font-size: 12.5px; color: var(--muted); margin-top: 2px; }
.ga-item-actions { display: flex; align-items: center; gap: 6px; flex: none; }
.ga-x { width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; color: var(--muted); font-size: 13px; background: var(--surface-2); }
.ga-x:hover { color: var(--danger); }
.ga-chevron { color: var(--muted); font-size: 22px; line-height: 1; }

/* ---------- empty states ---------- */
.ga-empty { text-align: center; padding: 34px 20px; border: 1px dashed var(--border); border-radius: var(--ga-r-lg); color: var(--muted); font-size: 14px; background: var(--surface-2); }
.ga-empty .e { font-size: 34px; margin-bottom: 8px; }
.ga-empty b { display: block; color: var(--text); font-size: 15.5px; margin-bottom: 4px; }
.ga-empty .ga-btn { margin-top: 14px; }
.ga-err { padding: 14px 16px; border-radius: 14px; background: rgba(192,57,43,.08); color: var(--danger); font-size: 13.5px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }

/* ---------- stories ring (Circle) ---------- */
.ga-stories { display: flex; gap: 16px; overflow-x: auto; padding: 6px 2px 10px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.ga-stories::-webkit-scrollbar { display: none; }
.ga-story { flex: none; width: 74px; text-align: center; cursor: pointer; }
.ga-story .ring { width: 70px; height: 70px; border-radius: 50%; padding: 3px; margin: 0 auto; background: linear-gradient(135deg, var(--gold2), var(--gold) 60%, var(--ga-gold-ink)); transition: transform .18s var(--ga-ease); }
.ga-story:hover .ring { transform: scale(1.05); }
.ga-story .ring.soon { animation: gaPulse 2.2s ease-in-out infinite; }
.ga-story .ring.soft { background: var(--border); }
.ga-story .ring .in { width: 100%; height: 100%; border-radius: 50%; background: var(--card); border: 2.5px solid var(--bg); display: grid; place-items: center; font-size: 28px; overflow: hidden; }
.ga-story .ring .in img { width: 100%; height: 100%; object-fit: cover; }
.ga-story .nm { font-size: 12px; font-weight: 700; margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ga-story .bd { font-size: 10.5px; color: var(--rose); font-weight: 700; }
.ga-story.add .ring { background: none; border: 2px dashed var(--border); padding: 0; }
.ga-story.add .ring .in { border: none; background: var(--surface-2); font-size: 24px; color: var(--ga-gold-ink); }
@keyframes gaPulse { 0%,100% { box-shadow: 0 0 0 0 rgba(201,162,74,.45); } 50% { box-shadow: 0 0 0 8px rgba(201,162,74,0); } }

/* ---------- sheet / modal ---------- */
.ga-sheet-back { position: fixed; inset: 0; z-index: 100; background: rgba(8,17,22,.58); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
  display: none; align-items: flex-end; justify-content: center; opacity: 0; transition: opacity .22s ease; }
.ga-sheet-back.open { display: flex; }
.ga-sheet-back.in { opacity: 1; }
.ga-sheet { position: relative; width: 100%; max-width: 680px; max-height: 92vh; background: var(--bg); border: 1px solid var(--border); border-radius: 26px 26px 0 0; overflow: hidden;
  display: flex; flex-direction: column; transform: translateY(24px); transition: transform .26s var(--ga-ease); box-shadow: var(--ga-shadow-lg); }
.ga-sheet-back.in .ga-sheet { transform: none; }
.ga-sheet.wide { max-width: 920px; }
.ga-sheet.full { max-width: 1040px; }
.ga-sheet-head { display: flex; align-items: center; gap: 12px; padding: 16px 18px 12px; border-bottom: 1px solid var(--border2); position: sticky; top: 0; background: var(--bg); z-index: 2; }
.ga-sheet-head .t { flex: 1; min-width: 0; font-family: var(--ga-serif); font-size: 21px; line-height: 1.1; }
.ga-sheet-head .s { color: var(--muted); font-size: 13px; }
.ga-sheet-body { padding: 16px 18px calc(24px + env(safe-area-inset-bottom)); overflow-y: auto; -webkit-overflow-scrolling: touch; flex: 1; }
.ga-sheet .grab { width: 40px; height: 4px; border-radius: 4px; background: var(--border); margin: 10px auto 0; }
@media (min-width: 700px) {
  .ga-sheet-back { align-items: center; padding: 20px; }
  .ga-sheet { border-radius: 26px; max-height: 88vh; }
  .ga-sheet .grab { display: none; }
}

/* ---------- toast ---------- */
.ga-toast { position: fixed; left: 50%; bottom: calc(var(--ga-tabbar-h) + 26px + env(safe-area-inset-bottom)); transform: translateX(-50%) translateY(16px);
  background: var(--text); color: var(--bg); padding: 12px 18px; border-radius: 999px; font-size: 14px; font-weight: 600; box-shadow: var(--ga-shadow-lg);
  opacity: 0; pointer-events: none; transition: opacity .22s ease, transform .22s var(--ga-ease); z-index: 160; max-width: min(92vw, 520px); text-align: center; display: flex; align-items: center; gap: 10px; }
.ga-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); pointer-events: auto; }
.ga-toast.ok { background: var(--sage); color: #fff; }
.ga-toast.err { background: var(--danger); color: #fff; }
.ga-toast.gold { background: var(--ga-gold-grad); color: var(--ga-ink); }
.ga-toast button { color: inherit; font-weight: 800; text-decoration: underline; padding: 0; }
@media (min-width: 900px) { .ga-toast { bottom: 28px; } }

/* ---------- misc ---------- */
.ga-divider { height: 1px; background: var(--border2); margin: 22px 0; }
.ga-stat { display: flex; flex-direction: column; line-height: 1.1; }
.ga-stat b { font-size: 20px; font-weight: 800; }
.ga-stat span { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .5px; margin-top: 3px; }
.ga-progress { height: 6px; border-radius: 6px; background: var(--surface-2); overflow: hidden; }
.ga-progress > i { display: block; height: 100%; background: var(--ga-gold-grad); border-radius: 6px; transition: width .4s var(--ga-ease); }
.ga-scroll-x { display: flex; gap: 12px; overflow-x: auto; padding: 4px 2px 10px; scrollbar-width: none; -webkit-overflow-scrolling: touch; scroll-snap-type: x proximity; }
.ga-scroll-x::-webkit-scrollbar { display: none; }
.ga-scroll-x > * { flex: none; scroll-snap-align: start; }
.ga-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.ga-grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.ga-grid-auto { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px; }
@media (max-width: 760px) { .ga-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 520px) { .ga-grid-2, .ga-grid-3 { grid-template-columns: 1fr; } }
.ga-lockable { position: relative; }
.ga-lock { position: absolute; inset: 0; border-radius: inherit; display: grid; place-items: center; background: linear-gradient(180deg, rgba(251,250,247,.2), rgba(251,250,247,.92)); z-index: 3; text-align: center; padding: 20px; }
:root[data-theme="dark"] .ga-lock { background: linear-gradient(180deg, rgba(10,19,24,.25), rgba(10,19,24,.94)); }
.ga-plus-chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 999px; font-size: 12px; font-weight: 800; letter-spacing: .4px;
  background: linear-gradient(120deg, rgba(201,162,74,.18), rgba(201,162,74,.08)); color: var(--ga-gold-ink); border: 1px solid rgba(201,162,74,.4); }
:root[data-theme="dark"] .ga-plus-chip { color: var(--gold2); }
.ga-plus-chip.member { background: var(--ga-gold-grad); color: var(--ga-ink); border-color: transparent; }
.ga-meter { font-size: 12px; color: var(--muted); }
.ga-meter b { color: var(--text); }
.ga-badge-count { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: var(--rose); color: #fff; font-size: 10.5px; font-weight: 800; }
.ga-blur { filter: blur(6px); pointer-events: none; user-select: none; }
.ga-kbd { font: 600 11px var(--ga-mono); padding: 2px 6px; border-radius: 6px; border: 1px solid var(--border); background: var(--surface-2); color: var(--muted); }

/* ---------- dev-only demo banner ---------- */
.ga-demo-banner { position: fixed; top: 6px; left: 50%; transform: translateX(-50%); z-index: 500; background: var(--rose); color: #fff; font: 700 11px var(--ga-mono); padding: 4px 10px; border-radius: 999px; letter-spacing: 1px; }
