@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,600;0,9..144,700;1,9..144,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--bg:#faf5ec;--bg2:#f3ebdd;--bg3:#efe5d3;--card:#fffdf9;--tx:#211b14;--tx2:#6f655a;--tx3:#9a8f7f;--tx4:#c4b9a6;--clay:#b8472b;--clay-dark:#8f3520;--clay-light:#fbe9d6;--teal:var(--clay);--teal-light:var(--clay-light);--teal-dark:var(--clay-dark);--marigold:#e3a008;--hblue:#1c5d83;--pine:#2f6b4f;--orange:var(--clay);--orange-light:var(--clay-light);--rose:#b4322f;--rose-light:#fbeae6;--br:#e6dcc9;--br2:#d8cdb8;--nav-inactive:#6f655a;--shadow:0 1px 3px rgba(60,40,20,.07),0 1px 2px rgba(60,40,20,.05);--shadow2:0 6px 18px rgba(60,40,20,.10);--shadow3:0 16px 48px rgba(60,40,20,.16);--ease:cubic-bezier(.32,.72,0,1);--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--s8:64px;--r:8px;--r2:12px;--r3:999px;--f-display:'Fraunces',serif;--f-body:'DM Sans',sans-serif;--f-mono:'IBM Plex Mono',monospace}
html{scroll-behavior:smooth}body{background:var(--bg);color:var(--tx);font-family:var(--f-body);font-weight:400;font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:hidden}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}button{font-family:var(--f-body)}
.gd-nav{position:sticky;top:0;z-index:900;display:flex;align-items:center;gap:10px;padding:env(safe-area-inset-top) clamp(12px,3vw,40px) 0;height:calc(56px + env(safe-area-inset-top));background:rgba(255,253,249,.92);backdrop-filter:blur(16px);border-bottom:1px solid var(--br)}
/* three zones: logo | center (mobile: contextual / desktop: links) | utility.
   Scoped to navs rebuilt by normalizeTopBar() — marketing/immersive pages keep
   their natural DOM order (justify via the legacy space-between fallback below). */
.gd-nav:not([data-gd-normalized]){justify-content:space-between}
.gd-nav[data-gd-normalized] .gd-logo{order:1}
.gd-nav[data-gd-normalized] .gd-nav-center{order:2;margin:0 auto;display:flex;align-items:center;min-width:0}
.gd-nav[data-gd-normalized] .gd-nav-links{order:2;margin:0 auto;display:none}
.gd-nav[data-gd-normalized] .gd-nav-actions{order:4;margin-left:0}
.gd-nav[data-gd-normalized]:not(:has(.gd-nav-center)) .gd-nav-actions,.gd-nav[data-gd-normalized] .gd-nav-center:empty~.gd-nav-actions{margin-left:auto}
.gd-nav[data-gd-normalized] .gd-nav-center:empty{display:none}
@media(min-width:1024px){
  .gd-nav[data-gd-normalized] .gd-nav-links{display:flex}
  .gd-nav[data-gd-normalized] .gd-nav-center{order:3;margin:0 12px 0 0}
}
.gd-logo{display:flex;align-items:center;gap:8px;text-decoration:none;flex-shrink:0}.gd-logo-mark{width:30px;height:30px;border-radius:8px;background:var(--teal);display:flex;align-items:center;justify-content:center;font-family:var(--f-display);font-weight:700;font-size:15px;color:#fff}.gd-logo-text{font-family:var(--f-display);font-size:1.15rem;font-weight:700;color:var(--tx)}.gd-logo-text b{color:var(--teal)}
.gd-nav-links{display:flex;align-items:center;gap:4px}.gd-nav-link{padding:7px 14px;border-radius:var(--r3);font-size:.82rem;font-weight:500;color:var(--tx3);transition:all .15s;display:flex;align-items:center;gap:6px}.gd-nav-link:hover{color:var(--tx);background:var(--bg2)}.gd-nav-link.active{color:var(--teal);background:var(--teal-light)}.gd-nav-link svg{width:16px;height:16px}
.gd-nav-actions{display:flex;align-items:center;gap:8px}
.gd-nav-ic{position:relative;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;color:var(--tx2);transition:background .12s ease}
.gd-nav-ic:hover{background:var(--bg2)}
.gd-nav-ic svg{width:20px;height:20px}
.gd-navbadge{position:absolute;top:2px;right:0;min-width:15px;height:15px;padding:0 3px;border-radius:8px;background:var(--rose);color:#fff;font-size:9px;font-weight:700;line-height:15px;text-align:center;font-family:var(--f-body)}
.gd-avatar--nav{width:30px;height:30px;text-decoration:none}
.gd-avatar--nav.active,.gd-avatar--nav:hover{border-color:var(--clay)}
.gd-btn{display:inline-flex;align-items:center;gap:7px;padding:8px 18px;border-radius:var(--r3);font-family:var(--f-body);font-size:.82rem;font-weight:600;border:none;cursor:pointer;transition:all .15s}.gd-btn-teal{background:var(--teal);color:#fff}.gd-btn-teal:hover{background:var(--teal-dark);box-shadow:var(--shadow2)}.gd-btn-outline{background:#fff;color:var(--tx);border:1px solid var(--br)}.gd-btn-outline:hover{border-color:var(--br2);background:var(--bg2)}.gd-btn-sm{padding:6px 14px;font-size:.78rem}.gd-btn-lg{padding:11px 26px;font-size:.88rem}.gd-btn:disabled{opacity:.4;cursor:not-allowed}
.gd-pills{display:flex;gap:2px;background:var(--bg2);border-radius:var(--r3);padding:3px}.gd-pill{padding:6px 16px;border-radius:var(--r3);font-size:.78rem;font-weight:500;color:var(--tx3);background:none;border:none;cursor:pointer;transition:all .15s}.gd-pill.active{background:#fff;color:var(--teal);box-shadow:var(--shadow);font-weight:600}
.gd-avatar{width:32px;height:32px;border-radius:50%;background:var(--teal-light);border:2px solid var(--br);display:flex;align-items:center;justify-content:center;font-family:var(--f-display);font-size:.85rem;font-weight:700;color:var(--teal);cursor:pointer;overflow:hidden;flex-shrink:0;transition:border-color .15s}.gd-avatar:hover{border-color:var(--teal)}.gd-avatar img{width:100%;height:100%;object-fit:cover}
.gd-input,.gd-textarea{width:100%;background:#fff;border:1px solid var(--br);border-radius:var(--r);padding:10px 14px;font-family:var(--f-body);font-size:.88rem;color:var(--tx);outline:none;transition:border-color .15s}.gd-input::placeholder,.gd-textarea::placeholder{color:var(--tx4)}.gd-input:focus,.gd-textarea:focus{border-color:var(--teal);box-shadow:0 0 0 3px rgba(184,71,43,.12)}.gd-textarea{resize:none}.gd-label{display:block;font-size:.72rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--tx3);margin-bottom:5px}
/* ── Mobile bottom tab bar v2 + More sheet (injected by shared.js; per 2026-06-08 nav brief) ── */
.gd-bottomnav{display:none}
@media(max-width:600px){
  body.gd-has-bottomnav{padding-bottom:calc(68px + env(safe-area-inset-bottom))}
  .gd-bottomnav{display:flex;position:fixed;bottom:0;left:0;right:0;z-index:880;height:calc(58px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:rgba(255,253,249,.96);backdrop-filter:blur(12px);border-top:1px solid var(--br);box-shadow:0 -2px 12px rgba(60,40,20,.06)}
  .gd-bottomnav a,.gd-bottomnav button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--nav-inactive);font-size:11px;font-weight:600;font-family:var(--f-body);text-decoration:none;background:none;border:none;cursor:pointer;position:relative;transition:color .12s ease,transform .08s,opacity .08s}
  .gd-bottomnav a svg,.gd-bottomnav button svg{width:22px;height:22px;color:var(--tx3);transition:color .12s ease}
  .gd-bottomnav a:active,.gd-bottomnav button:active{transform:scale(.92);opacity:.65}
  .gd-bottomnav .active,.gd-bottomnav .active svg,.gd-bottomnav button[aria-expanded="true"],.gd-bottomnav button[aria-expanded="true"] svg{color:var(--clay)}
  .gd-bottomnav .gd-bn-create{flex:1;display:flex;align-items:center;justify-content:center;padding:8px}
  .gd-bottomnav .gd-bn-create .gd-bn-plus{width:48px;height:48px;border-radius:50%;background:var(--clay);display:flex;align-items:center;justify-content:center;transform:translateY(-10px);box-shadow:0 4px 14px rgba(184,71,43,.40);transition:transform .08s,box-shadow .08s,background .08s}
  .gd-bottomnav .gd-bn-create:active .gd-bn-plus{background:var(--clay-dark);transform:translateY(-10px) scale(.94);box-shadow:0 2px 6px rgba(184,71,43,.30)}
  .gd-bottomnav .gd-bn-create svg{width:20px;height:20px}
  .gd-bn-badge{position:absolute;top:6px;right:calc(50% - 19px);min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--rose);color:#fff;font-family:var(--f-body);font-weight:700;font-size:9px;line-height:16px;text-align:center}
}
/* More sheet (all widths ≤600 via bottom bar; harmless if opened elsewhere) */
.gd-sheet-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.28);backdrop-filter:blur(3px);z-index:940;opacity:0;pointer-events:none;transition:opacity .18s var(--ease)}
.gd-sheet-backdrop.open{opacity:1;pointer-events:auto}
.gd-sheet{position:fixed;left:0;right:0;bottom:0;z-index:945;background:var(--card);border-radius:16px 16px 0 0;max-height:72dvh;overflow-y:auto;padding:10px 16px calc(16px + env(safe-area-inset-bottom));transform:translateY(100%);transition:transform .24s var(--ease);box-shadow:var(--shadow3)}
.gd-sheet.open{transform:translateY(0)}
.gd-sheet-handle{width:36px;height:4px;border-radius:2px;background:var(--br2);margin:0 auto 14px}
.gd-sheet-head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:6px}
.gd-sheet a.gd-sheet-row{display:flex;align-items:center;gap:14px;height:52px;padding:0 10px;border-radius:var(--r);font-size:.92rem;font-weight:500;color:var(--tx)}
.gd-sheet a.gd-sheet-row svg{width:20px;height:20px;color:var(--tx2);flex-shrink:0}
.gd-sheet a.gd-sheet-row:active{background:var(--bg2)}
.gd-sheet a.gd-sheet-row.active{background:var(--clay-light);color:var(--clay)}
.gd-sheet a.gd-sheet-row.active svg{color:var(--clay)}
.gd-sheet a.gd-sheet-row.gd-sheet-danger,.gd-sheet a.gd-sheet-row.gd-sheet-danger svg{color:var(--rose)}
.gd-sheet-row .gd-sheet-chev{margin-left:auto;color:var(--tx4)!important;width:16px!important;height:16px!important}
.gd-sheet-row .gd-sheet-count{background:var(--rose-light);color:var(--rose);font-family:var(--f-mono);font-size:10px;padding:2px 8px;border-radius:var(--r3)}
.gd-sheet-row .gd-sheet-count:not([hidden]){margin-left:auto}
.gd-sheet-row .gd-sheet-count:not([hidden])+.gd-sheet-chev{margin-left:8px}
.gd-sheet .gd-ticket{margin:8px 0}
.gd-stamp--sm{width:68px;height:68px}
.gd-stamp--sm .s2{font-size:11px}
.gd-overlay{position:fixed;inset:0;background:rgba(0,0,0,.3);backdrop-filter:blur(4px);z-index:950;display:none;align-items:center;justify-content:center;padding:20px}.gd-overlay.open{display:flex}.gd-modal{background:#fff;border-radius:var(--r2);box-shadow:0 20px 60px rgba(0,0,0,.15);width:100%;overflow-y:auto}
.gd-tag{font-size:.7rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--teal);margin-bottom:10px;display:flex;align-items:center;gap:8px}.gd-tag::before{content:'';width:18px;height:2px;background:var(--teal);border-radius:1px}
.gd-title{font-family:var(--f-display);font-size:clamp(2rem,4vw,3.4rem);font-weight:700;line-height:1.12;letter-spacing:-.02em;color:var(--tx);margin-bottom:10px}.gd-title .hl{color:var(--teal)}
.gd-error{font-size:.82rem;color:var(--rose);background:var(--rose-light);border:1px solid rgba(225,29,72,.12);border-radius:var(--r);padding:10px 14px;margin-bottom:12px;display:none}.gd-error.show{display:block}
.gd-empty{padding:60px 24px;text-align:center}.gd-empty h3{font-family:var(--f-display);font-size:1.5rem;font-weight:600;margin-bottom:4px}.gd-empty .hl{color:var(--teal)}.gd-empty p{color:var(--tx2)}
.gd-spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:gd-spin .6s linear infinite;display:none}
@keyframes gd-up{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes gd-in{from{opacity:0}to{opacity:1}}@keyframes gd-spin{to{transform:rotate(360deg)}}
.gd-reveal{opacity:0;transform:translateY(16px);transition:opacity .5s ease,transform .5s ease}.gd-reveal.visible{opacity:1;transform:translateY(0)}
.gd-footer{border-top:1px solid var(--br);padding:32px clamp(16px,4vw,60px);display:flex;justify-content:space-between;align-items:center;background:#fff}.gd-footer-text{font-size:.72rem;color:var(--tx3)}.gd-footer-links{display:flex;gap:20px}.gd-footer-links a{font-size:.72rem;color:var(--tx3);transition:color .15s}.gd-footer-links a:hover{color:var(--tx)}
/* ── Vintage-travel motifs (Phase 2) ── */
.gd-kicker{font-family:var(--f-mono);font-size:.68rem;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--clay)}
.gd-pagehead{padding:clamp(18px,4vw,34px) clamp(16px,3vw,40px) 8px;display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.gd-pagehead h1{font-family:var(--f-display);font-size:clamp(1.7rem,3vw,2.4rem);font-weight:700;letter-spacing:-.02em;line-height:1.1;margin-top:6px;color:var(--tx)}
.gd-pagehead p{font-size:.86rem;color:var(--tx2);margin-top:4px;max-width:520px}
.gd-stamp{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;width:82px;height:82px;border:2px dashed var(--clay);border-radius:50%;transform:rotate(-8deg);color:var(--clay);text-align:center;font-family:var(--f-mono);background:var(--clay-light);flex-shrink:0}
.gd-stamp .s1{font-size:7px;letter-spacing:.1em}.gd-stamp .s2{font-family:var(--f-display);font-weight:700;font-size:13px;margin:1px 0}.gd-stamp .s3{font-size:7px;letter-spacing:.14em}
.gd-ticket{display:flex;align-items:center;gap:12px;color:var(--tx3);font-family:var(--f-mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase}
.gd-ticket::before,.gd-ticket::after{content:'';flex:1;height:1px;background:repeating-linear-gradient(90deg,var(--br2) 0 6px,transparent 6px 11px)}
/* ── Tablet ── */
@media(max-width:768px){
  .gd-nav-links .gd-nav-link span{display:none}
  .gd-nav-link{padding:7px 10px}
  .gd-modal{max-height:90dvh}
  /* iOS Safari auto-zooms when a focused field is <16px — force 16px on ALL inputs (not just .gd-input). */
  input,textarea,select{font-size:16px!important}
}
/* ── Mobile ── */
@media(max-width:600px){
  html{font-size:14px}
  .gd-nav{padding:0 12px;height:52px}
  .gd-logo-text{display:none}
  .gd-footer{flex-direction:column;gap:10px;text-align:center}
  .gd-btn{padding:9px 16px;font-size:.82rem;min-height:44px}
  .gd-btn-sm{padding:8px 12px;font-size:.78rem;min-height:40px}
  .gd-input,.gd-textarea{font-size:16px;padding:12px 14px;min-height:44px} /* 16px prevents iOS zoom */
  .gd-overlay{padding:0;align-items:flex-end}
  .gd-modal{border-radius:var(--r2) var(--r2) 0 0;max-height:92dvh}
  .gd-empty{padding:40px 16px}
  .gd-pills{overflow-x:auto;-webkit-overflow-scrolling:touch}
}
/* ── Small phones (iPhone SE, Galaxy A) ── */
@media(max-width:390px){
  .gd-nav-link{padding:6px 8px}
  .gd-nav-links{gap:2px}
  .gd-logo-text{display:none}
}

/* ════ v2: execution layer (2026-06-11 overhaul) ════ */

/* Skeletons — async surfaces shimmer, never blank paper */
.gd-skel{background:linear-gradient(90deg,var(--bg2) 25%,#f8f1e4 37%,var(--bg2) 63%);background-size:400% 100%;animation:gd-shimmer 1.2s ease infinite;border-radius:var(--r)}
@keyframes gd-shimmer{0%{background-position:100% 0}100%{background-position:0 0}}
.gd-skel-media{aspect-ratio:4/5;border-radius:var(--r2)}
.gd-skel-row{height:56px;border-radius:var(--r)}
.gd-skel-card{height:120px;border-radius:var(--r2)}
.gd-skel-line{height:14px;border-radius:7px}

/* Image frames — controlled aspect, warm placeholder, fade-in */
.gd-img{position:relative;display:block;background:var(--bg2);overflow:hidden;border-radius:var(--r2)}
.gd-img img{width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .35s var(--ease)}
.gd-img img.loaded{opacity:1}
.gd-img--1x1{aspect-ratio:1/1}.gd-img--4x3{aspect-ratio:4/3}.gd-img--16x9{aspect-ratio:16/9}.gd-img--4x5{aspect-ratio:4/5}
.gd-img--stamped{display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,var(--bg2),var(--clay-light))}

/* Chips — filled rest state, unmistakable selected state */
.gd-chip{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--r3);background:var(--bg2);border:1px solid var(--br);color:var(--tx2);font-size:.8rem;font-weight:500;cursor:pointer;transition:all .12s ease}
.gd-chip:hover{border-color:var(--br2);color:var(--tx)}
.gd-chip.selected,.gd-chip.active{background:var(--clay-light);border-color:var(--clay);color:var(--clay);font-weight:600}
.gd-pills{background:var(--bg3)}

/* Empty states — designed moments: icon, title, one line, one action */
.gd-empty{padding:48px 24px;max-width:380px;margin:0 auto;text-align:center}
.gd-empty .gd-empty-ic{width:30px;height:30px;color:var(--tx3);margin:0 auto 12px;display:block}
.gd-empty h3{font-family:var(--f-display);font-size:1.35rem;font-weight:600;margin-bottom:6px}
.gd-empty p{color:var(--tx2);font-size:.88rem;margin-bottom:18px}

/* Engagement row — visible, touchable, alive */
.gd-eng{display:flex;align-items:center;gap:2px}
.gd-eng button{display:inline-flex;align-items:center;gap:6px;min-width:44px;min-height:44px;padding:0 8px;background:none;border:none;cursor:pointer;color:var(--tx2);border-radius:var(--r);transition:color .12s ease,transform .08s}
.gd-eng button svg{width:22px;height:22px}
.gd-eng button:active{transform:scale(.9)}
.gd-eng button .ct{font-family:var(--f-mono);font-size:.78rem}
.gd-eng button.liked{color:var(--clay)}
.gd-eng button.liked svg{fill:var(--clay)}
.gd-eng button.saved{color:var(--clay)}
.gd-eng button.saved svg{fill:var(--clay)}

/* Interactive discipline */
:focus-visible{outline:2px solid var(--clay);outline-offset:2px;border-radius:4px}
.gd-btn:active{transform:scale(.97)}
.gd-btn .gd-spinner{display:none}.gd-btn.loading .gd-spinner{display:inline-block}

/* Desktop canvas primitives — no more mobile column in a void */
.gd-shell{max-width:1100px;margin:0 auto;padding:0 16px;width:100%}
.gd-cols{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:start}
.gd-grid-2{display:grid;grid-template-columns:1fr;gap:16px}
.gd-grid-3{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:700px){
  .gd-grid-2{grid-template-columns:repeat(2,1fr)}
  .gd-grid-3{grid-template-columns:repeat(2,1fr)}
}
@media(min-width:1024px){
  .gd-shell{padding:0 40px}
  .gd-cols{grid-template-columns:minmax(0,1fr) 340px;gap:32px}
  .gd-grid-3{grid-template-columns:repeat(3,1fr)}
  .gd-card-hover{transition:transform .18s var(--ease),box-shadow .18s var(--ease)}
  .gd-card-hover:hover{transform:translateY(-2px);box-shadow:var(--shadow2)}
}
.gd-rail{display:none}
@media(min-width:1024px){.gd-rail{display:block;position:sticky;top:76px}}

/* Post owner menu (⋯) + popover + edited marker */
.gd-postmenu-btn{background:none;border:none;cursor:pointer;color:var(--tx3);font-size:1.15rem;line-height:1;padding:2px 8px;border-radius:var(--r);min-width:32px;min-height:32px}
.gd-postmenu-btn:hover{background:var(--bg2);color:var(--tx)}
.gd-popover{position:fixed;z-index:1300;background:var(--card);border:1px solid var(--br);border-radius:var(--r2);box-shadow:var(--shadow3);min-width:160px;overflow:hidden;padding:4px}
.gd-popover button{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:none;border:none;cursor:pointer;padding:10px 12px;font-family:var(--f-body);font-size:.85rem;color:var(--tx);border-radius:var(--r)}
.gd-popover button:hover{background:var(--bg2)}
.gd-popover button.danger{color:var(--rose)}
.gd-edited{color:var(--tx4);font-style:italic}
.gd-seen{font-size:.7rem;color:var(--tx3);font-family:var(--f-mono);padding:0 16px 8px}
.gd-discovered{display:inline-flex;align-items:center;gap:5px;font-family:var(--f-mono);font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;color:var(--clay);background:var(--clay-light);border:1px dashed var(--clay);border-radius:99px;padding:3px 10px;margin-top:8px}

/* Maps: trap map controls + attribution inside the map's own stacking
   context (z-index:0) so they can't paint over the nav / More sheet / modals
   (map-library controls default high; our chrome sits at 880–950). */
.maplibregl-map{z-index:0}

/* Motion: respect the user, always */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}
