/* =====================================================================
   ASCEND – Design System
   Dark · glass · Apple-like · orange accent
   ===================================================================== */

:root{
  /* palette */
  --bg:            #07080c;
  --bg-2:          #0b0d13;
  --surface:       rgba(20, 22, 30, 0.55);
  --surface-2:     rgba(28, 31, 42, 0.7);
  --glass-border:  rgba(255, 255, 255, 0.08);
  --glass-border-2:rgba(255, 255, 255, 0.14);
  --text:          #f4f5f7;
  --text-dim:      #9aa0ad;
  --text-faint:    #646b78;

  /* accent */
  --accent:        #ff6a00;
  --accent-2:      #ff9233;
  --accent-soft:   rgba(255, 106, 0, 0.14);
  --accent-glow:   rgba(255, 106, 0, 0.45);

  --good:          #34d399;
  --warn:          #fbbf24;
  --bad:           #f87171;

  --radius:        20px;
  --radius-sm:     14px;
  --radius-lg:     28px;
  --blur:          22px;

  --shadow:        0 20px 60px -20px rgba(0,0,0,0.7);
  --shadow-accent: 0 14px 40px -10px var(--accent-glow);

  --font-display: 'Sora', system-ui, sans-serif;
  --font-body:    'Manrope', system-ui, sans-serif;
}

*{ box-sizing:border-box; margin:0; padding:0; }
html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; }

body{
  font-family:var(--font-body);
  background:var(--bg);
  color:var(--text);
  line-height:1.55;
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

/* ambient orange aurora background */
body::before{
  content:"";
  position:fixed; inset:0; z-index:-2;
  background:
    radial-gradient(60vw 60vw at 78% -10%, rgba(255,106,0,0.16), transparent 60%),
    radial-gradient(50vw 50vw at 8% 8%, rgba(255,146,51,0.08), transparent 55%),
    radial-gradient(70vw 70vw at 50% 120%, rgba(255,106,0,0.10), transparent 60%),
    linear-gradient(180deg, #07080c, #05060a);
}
body::after{
  content:"";
  position:fixed; inset:0; z-index:-1; opacity:0.035; pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

h1,h2,h3,h4,h5{ font-family:var(--font-display); font-weight:700; letter-spacing:-0.02em; line-height:1.1; }
a{ color:inherit; text-decoration:none; }
img{ max-width:100%; display:block; }
input,select,textarea,button{ font-family:inherit; font-size:1rem; color:inherit; }

::selection{ background:var(--accent); color:#fff; }
::-webkit-scrollbar{ width:10px; height:10px; }
::-webkit-scrollbar-thumb{ background:rgba(255,255,255,0.12); border-radius:8px; }
::-webkit-scrollbar-thumb:hover{ background:var(--accent); }

/* ---------------------------------------------------------------- glass */
.glass{
  background:var(--surface);
  backdrop-filter:blur(var(--blur)) saturate(140%);
  -webkit-backdrop-filter:blur(var(--blur)) saturate(140%);
  border:1px solid var(--glass-border);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
}
.card{ padding:1.4rem 1.5rem; }
.card .card{ box-shadow:none; }

/* --------------------------------------------------------------- layout */
.container{ width:min(1180px, 92vw); margin-inline:auto; }
.grid{ display:grid; gap:1.1rem; }
.grid-2{ grid-template-columns:repeat(2,1fr); }
.grid-3{ grid-template-columns:repeat(3,1fr); }
.grid-4{ grid-template-columns:repeat(4,1fr); }
.row{ display:flex; gap:1rem; align-items:center; }
.between{ justify-content:space-between; }
.wrap{ flex-wrap:wrap; }
.col{ display:flex; flex-direction:column; gap:.6rem; }
.mt{ margin-top:1rem; } .mt2{ margin-top:2rem; } .mb{ margin-bottom:1rem; }
.muted{ color:var(--text-dim); } .faint{ color:var(--text-faint); }
.center{ text-align:center; }
.small{ font-size:.85rem; }

/* --------------------------------------------------------------- buttons */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:.5rem;
  padding:.78rem 1.4rem; border-radius:999px; border:1px solid transparent;
  font-weight:600; font-size:.95rem; cursor:pointer; transition:.22s ease;
  background:rgba(255,255,255,0.06); color:var(--text); white-space:nowrap;
}
.btn:hover{ transform:translateY(-2px); background:rgba(255,255,255,0.12); }
.btn-primary{
  background:linear-gradient(135deg, var(--accent), var(--accent-2));
  color:#0a0a0a; font-weight:700; box-shadow:var(--shadow-accent);
}
.btn-primary:hover{ box-shadow:0 18px 50px -8px var(--accent-glow); filter:brightness(1.05); }
.btn-ghost{ background:transparent; border:1px solid var(--glass-border-2); }
.btn-ghost:hover{ border-color:var(--accent); color:var(--accent-2); }
.btn-block{ width:100%; }
.btn-sm{ padding:.5rem .9rem; font-size:.85rem; }
.btn-danger{ background:rgba(248,113,113,0.14); color:#fca5a5; }

/* ---------------------------------------------------------------- forms */
.field{ display:flex; flex-direction:column; gap:.4rem; margin-bottom:1rem; }
.field label{ font-size:.85rem; color:var(--text-dim); font-weight:600; }
.input, select, textarea{
  width:100%; padding:.8rem 1rem; border-radius:var(--radius-sm);
  background:rgba(255,255,255,0.04); border:1px solid var(--glass-border);
  color:var(--text); transition:.2s; outline:none;
}
.input:focus, select:focus, textarea:focus{
  border-color:var(--accent); background:rgba(255,255,255,0.06);
  box-shadow:0 0 0 4px var(--accent-soft);
}
/* iOS/mobile: date & time inputs otherwise keep an intrinsic width and overflow their column */
.input[type="date"], .input[type="time"], .input[type="datetime-local"], .input[type="month"], .input[type="number"]{
  -webkit-appearance:none; appearance:none; min-width:0; max-width:100%;
}
.input[type="date"]::-webkit-date-and-time-value{ text-align:left; }
select option{ background:#13151d; color:var(--text); }
textarea{ resize:vertical; min-height:90px; }

.choice-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:.7rem; }
.choice{
  padding:1rem; border-radius:var(--radius-sm); border:1px solid var(--glass-border);
  background:rgba(255,255,255,0.03); cursor:pointer; transition:.2s; text-align:center;
}
.choice:hover{ border-color:var(--glass-border-2); }
.choice.active{ border-color:var(--accent); background:var(--accent-soft); box-shadow:0 0 0 3px var(--accent-soft); }
.choice .t{ font-weight:700; display:block; }
.choice .d{ font-size:.8rem; color:var(--text-dim); }

/* range */
input[type=range]{ -webkit-appearance:none; width:100%; height:6px; border-radius:6px;
  background:linear-gradient(90deg,var(--accent),rgba(255,255,255,0.1)); }
input[type=range]::-webkit-slider-thumb{ -webkit-appearance:none; width:22px;height:22px;border-radius:50%;
  background:#fff; box-shadow:0 2px 10px var(--accent-glow); cursor:pointer; }

/* --------------------------------------------------------------- badges */
.badge{ display:inline-flex; align-items:center; gap:.35rem; padding:.28rem .7rem; border-radius:999px;
  font-size:.74rem; font-weight:700; background:rgba(255,255,255,0.07); }
.badge.accent{ background:var(--accent-soft); color:var(--accent-2); }
.badge.good{ background:rgba(52,211,153,0.15); color:var(--good); }
.badge.warn{ background:rgba(251,191,36,0.15); color:var(--warn); }
.badge.bad{ background:rgba(248,113,113,0.15); color:var(--bad); }
.tag{ font-size:.7rem; text-transform:uppercase; letter-spacing:.12em; color:var(--accent-2); font-weight:700; }

/* --------------------------------------------------------------- stats */
.stat .big{ font-family:var(--font-display); font-size:2.1rem; font-weight:800; line-height:1; }
.stat .lbl{ font-size:.78rem; color:var(--text-dim); text-transform:uppercase; letter-spacing:.08em; }
.ring{ --p:0; width:64px; height:64px; border-radius:50%;
  background:conic-gradient(var(--accent) calc(var(--p)*1%), rgba(255,255,255,0.08) 0);
  display:grid; place-items:center; }
.ring::after{ content:attr(data-v); width:48px;height:48px;border-radius:50%;background:#0c0e15;
  display:grid;place-items:center;font-weight:700;font-size:.85rem; }

/* progress bar */
.bar{ height:8px; border-radius:8px; background:rgba(255,255,255,0.08); overflow:hidden; }
.bar > i{ display:block; height:100%; border-radius:8px;
  background:linear-gradient(90deg,var(--accent),var(--accent-2)); }

/* --------------------------------------------------------------- tables */
table.tbl{ width:100%; border-collapse:collapse; font-size:.9rem; }
table.tbl th{ text-align:left; color:var(--text-dim); font-weight:600; font-size:.78rem;
  text-transform:uppercase; letter-spacing:.06em; padding:.7rem .6rem; border-bottom:1px solid var(--glass-border); }
table.tbl td{ padding:.8rem .6rem; border-bottom:1px solid rgba(255,255,255,0.05); }
table.tbl tr:hover td{ background:rgba(255,255,255,0.03); }

/* --------------------------------------------------------------- flash */
.flash{ padding:.9rem 1.1rem; border-radius:var(--radius-sm); margin-bottom:1rem; border:1px solid var(--glass-border);
  background:var(--surface-2); backdrop-filter:blur(10px); }
.flash.success{ border-color:rgba(52,211,153,0.4); }
.flash.error{ border-color:rgba(248,113,113,0.4); }

/* =====================================================================
   APP SHELL (sidebar + topbar)
   ===================================================================== */
.app{ display:grid; grid-template-columns:250px 1fr; min-height:100vh; }
.sidebar{
  position:sticky; top:0; height:100vh; padding:1.3rem 1rem;
  background:rgba(10,11,16,0.6); backdrop-filter:blur(var(--blur));
  border-right:1px solid var(--glass-border); display:flex; flex-direction:column; gap:.3rem;
  overflow-y:auto;
}
.brand{ display:flex; align-items:center; gap:.6rem; font-family:var(--font-display);
  font-weight:800; font-size:1.3rem; padding:.4rem .6rem 1.2rem; letter-spacing:-.03em; }
.brand .dot{ width:12px;height:12px;border-radius:4px;
  background:linear-gradient(135deg,var(--accent),var(--accent-2)); box-shadow:0 0 16px var(--accent-glow); }
.nav-link{ display:flex; align-items:center; gap:.8rem; padding:.7rem .8rem; border-radius:12px;
  color:var(--text-dim); font-weight:600; font-size:.92rem; transition:.18s; }
.nav-link svg{ width:20px;height:20px; flex:none; }
.nav-link:hover{ background:rgba(255,255,255,0.05); color:var(--text); }
.nav-link.active{ background:var(--accent-soft); color:var(--accent-2); }
.nav-sep{ font-size:.68rem; text-transform:uppercase; letter-spacing:.14em; color:var(--text-faint);
  padding:1rem .8rem .3rem; }

.main{ padding:1.6rem clamp(1rem,3vw,2.4rem); }
.topbar{ display:flex; align-items:center; justify-content:space-between; gap:1rem; margin-bottom:1.6rem; }
.topbar h1{ font-size:1.7rem; }
.avatar{ width:42px;height:42px;border-radius:50%; display:grid;place-items:center; font-weight:700;
  background:linear-gradient(135deg,var(--accent),var(--accent-2)); color:#0a0a0a; }

.page-title .sub{ color:var(--text-dim); font-size:.95rem; font-family:var(--font-body); font-weight:500; }

/* mobile nav toggle */
.menu-btn{ display:none; }
@media(max-width:920px){
  .app{ grid-template-columns:1fr; }
  .sidebar{ position:fixed; left:0; top:0; width:260px; z-index:60; transform:translateX(-105%); transition:.3s; }
  .sidebar.open{ transform:translateX(0); }
  .menu-btn{ display:inline-flex; }
  .grid-2,.grid-3,.grid-4{ grid-template-columns:1fr; }
  .scrim{ display:none; position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:50; }
  .scrim.show{ display:block; }
}
@media(min-width:921px){ .grid-3{ grid-template-columns:repeat(3,1fr);} }
@media(max-width:1100px){ .grid-4{ grid-template-columns:repeat(2,1fr);} }

/* =====================================================================
   ANIMATIONS
   ===================================================================== */
@keyframes rise{ from{ opacity:0; transform:translateY(18px);} to{ opacity:1; transform:none;} }
.rise{ animation:rise .6s cubic-bezier(.2,.8,.2,1) both; }
.rise-1{ animation-delay:.05s; } .rise-2{ animation-delay:.12s; }
.rise-3{ animation-delay:.2s; } .rise-4{ animation-delay:.28s; } .rise-5{ animation-delay:.36s; }
@keyframes pulse-glow{ 0%,100%{ box-shadow:0 0 0 0 var(--accent-soft);} 50%{ box-shadow:0 0 0 8px transparent;} }

/* ============ v2 additions ============ */

/* live clock in topbar */
.clock{
  display:flex; flex-direction:column; align-items:flex-end; line-height:1.1;
  padding:.35rem .7rem; border-radius:14px;
  background:rgba(255,255,255,.04);
  border:1px solid rgba(255,255,255,.07);
  backdrop-filter:blur(8px);
}
.clock-time{
  font-family:'Sora',sans-serif; font-weight:700; font-size:1rem;
  letter-spacing:.5px; color:#fff;
  font-variant-numeric:tabular-nums;
}
.clock-day{ font-size:.62rem; color:var(--muted,#8a8f9c); margin-top:1px; }

/* meal cards with quantities */
.meal-list{ display:flex; flex-direction:column; gap:.8rem; }
.meal{ padding:1rem 1.1rem; border-radius:16px; }
.meal table.tbl td{ padding:.32rem .4rem; border:none; }
.meal table.tbl tr{ border-bottom:1px solid rgba(255,255,255,.05); }
.meal table.tbl tr:last-child{ border-bottom:none; }

/* subtle entrance animation for cards */
@keyframes ascendIn{ from{opacity:0; transform:translateY(10px);} to{opacity:1; transform:none;} }
.card{ animation:ascendIn .42s cubic-bezier(.22,.61,.36,1) both; }
.grid > .card:nth-child(2){ animation-delay:.05s; }
.grid > .card:nth-child(3){ animation-delay:.1s; }
.grid > .card:nth-child(4){ animation-delay:.15s; }
@media (prefers-reduced-motion: reduce){ .card{ animation:none; } }

/* button press feedback */
.btn{ transition:transform .12s ease, filter .15s ease, background .2s ease; }
.btn:active{ transform:translateY(1px) scale(.985); }

/* responsive: let topbar wrap, shrink clock on phones */
@media (max-width:640px){
  .topbar{ flex-wrap:wrap; gap:.6rem; }
  .clock{ padding:.3rem .55rem; }
  .clock-time{ font-size:.9rem; }
  .clock-day{ font-size:.58rem; }
}

/* ============ pricing tiers (homepage + checkout) ============ */
.plan-grid{ display:grid; grid-template-columns:repeat(2,1fr); gap:1.2rem; max-width:760px; margin:0 auto; }
.plan-grid.home{ max-width:840px; }
.plan-option{ position:relative; padding:1.6rem 1.5rem; border-radius:20px; cursor:pointer;
  border:1px solid var(--glass-border,rgba(255,255,255,.08));
  transition:transform .18s ease, border-color .18s ease, box-shadow .25s ease; }
.plan-option:hover{ transform:translateY(-3px); }
.plan-option.pro{ border-color:rgba(255,106,0,.45); box-shadow:0 0 0 1px rgba(255,106,0,.15), 0 18px 50px -20px rgba(255,106,0,.4); }
.plan-option.sel{ border-color:var(--accent,#ff6a00); box-shadow:0 0 0 2px var(--accent,#ff6a00); }
.plan-option .amt2{ font-family:'Sora',sans-serif; font-size:2.6rem; font-weight:800; margin:.6rem 0 0; }
.plan-option .amt2 small{ font-size:.95rem; color:var(--text-dim,#8a8f9c); font-weight:500; }
.plan-option .plist{ list-style:none; margin:1.1rem 0 1.4rem; display:flex; flex-direction:column; gap:.55rem; padding:0; }
.plan-option .plist li{ display:flex; gap:.55rem; align-items:flex-start; color:var(--text-dim,#cfd3da); font-size:.92rem; }
.plan-option .plist li svg{ width:18px; height:18px; flex:none; margin-top:1px; }
.plan-option .plist li.off{ color:#6b7280; text-decoration:line-through; text-decoration-color:rgba(107,114,128,.5); }
.plan-option .ribbon{ position:absolute; top:-1px; right:1.2rem; transform:translateY(-50%);
  background:linear-gradient(135deg,var(--accent,#ff6a00),var(--accent-2,#ff9a3c));
  color:#0a0a0a; font-weight:800; font-size:.7rem; padding:.28rem .7rem; border-radius:999px; letter-spacing:.4px; }

/* hero stats strip */
.stats-strip{ display:flex; gap:2.2rem; justify-content:center; flex-wrap:wrap; margin-top:2.4rem; }
.stats-strip div{ display:flex; flex-direction:column; align-items:center; }
.stats-strip strong{ font-family:'Sora',sans-serif; font-size:1.7rem; background:linear-gradient(135deg,#fff,#9aa0ad);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
.stats-strip span{ font-size:.74rem; color:var(--text-faint,#6b7280); text-transform:uppercase; letter-spacing:1px; }

/* locked / AI-gated feature styling (nav + cards) */
.nav-link.locked{ opacity:.5; }
.nav-link.locked .lock{ margin-left:auto; width:13px; height:13px; opacity:.8; }
.ai-locked{ position:relative; }
.ai-lock-note{ display:inline-flex; gap:.4rem; align-items:center; font-size:.78rem; color:#ffb37a;
  background:rgba(255,106,0,.08); border:1px solid rgba(255,106,0,.25); padding:.35rem .7rem; border-radius:10px; }

@media (max-width:680px){ .plan-grid{ grid-template-columns:1fr; } }

/* ============ mobile app shell (bottom tab bar) ============ */
.tabbar{ display:none; }
@media (max-width:920px){
  .tabbar{
    display:flex; position:fixed; left:0; right:0; bottom:0; z-index:55;
    background:rgba(10,11,15,.82); backdrop-filter:blur(18px) saturate(140%);
    -webkit-backdrop-filter:blur(18px) saturate(140%);
    border-top:1px solid rgba(255,255,255,.08);
    padding:.4rem .3rem calc(.4rem + env(safe-area-inset-bottom,0px));
    justify-content:space-around;
  }
  .tabbar .tab{
    flex:1; display:flex; flex-direction:column; align-items:center; gap:3px;
    padding:.35rem 0; color:var(--text-faint,#7c828e); text-decoration:none;
    font-size:.62rem; letter-spacing:.02em; transition:color .15s ease, transform .12s ease;
  }
  .tabbar .tab svg{ width:23px; height:23px; }
  .tabbar .tab.on{ color:var(--accent,#ff6a00); }
  .tabbar .tab:active{ transform:scale(.9); }
  /* clear space so content isn't hidden behind the bar; no top gap */
  .main{ padding:0 1rem calc(80px + env(safe-area-inset-bottom,0px)); }
  /* clean app-style topbar, flush under the status bar */
  .topbar{ position:sticky; top:0; z-index:40;
    background:rgba(7,8,12,.72); backdrop-filter:blur(16px) saturate(140%); -webkit-backdrop-filter:blur(16px) saturate(140%);
    padding:calc(env(safe-area-inset-top,0px) + .7rem) 1rem .7rem;
    margin:0 -1rem 1rem; border-bottom:1px solid rgba(255,255,255,.06); }
  .topbar h1{ font-size:1.2rem; }
  .topbar .page-title .sub{ display:none; }
  .topbar .badge{ display:none; }
  .menu-btn{ width:42px; height:42px; padding:0; border-radius:12px; display:inline-flex !important;
    align-items:center; justify-content:center; color:var(--text,#e8eaed);
    background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.08); }
  .menu-btn:active{ transform:scale(.92); }
  /* bigger tap targets + comfier inputs on phones */
  .btn{ padding:.7rem 1rem; }
  .input{ font-size:16px; } /* prevents iOS zoom on focus */
  .clock{ display:none; } /* free up topbar space on phones */
}
/* tab-bar icons are always small, even if the responsive sheet fails to load */
.tabbar svg{ width:23px; height:23px; flex:none; }
.menu-btn{ display:none; cursor:pointer; }
.menu-btn svg{ width:26px; height:26px; }
@media (max-width:520px){
  .grid-2,.grid-3,.grid-4{ grid-template-columns:1fr; }
  .main{ padding-left:1rem; padding-right:1rem; }
  .card{ padding:1.1rem; }
}
/* avatar as link (topbar) keeps circle look */
a.avatar{ display:inline-flex; align-items:center; justify-content:center; text-decoration:none; overflow:hidden; }

/* ============ toggle switch (register coach) ============ */
.toggle-row{ display:flex; align-items:center; justify-content:space-between; gap:1rem;
  padding:.9rem 1rem; margin-bottom:.9rem; border-radius:14px; cursor:pointer;
  background:rgba(255,255,255,.03); border:1px solid var(--glass-border,rgba(255,255,255,.08)); }
.toggle-row .toggle-text{ display:flex; flex-direction:column; gap:2px; }
.switch{ position:relative; flex:none; width:48px; height:28px; }
.switch input{ position:absolute; opacity:0; width:100%; height:100%; margin:0; cursor:pointer; }
.switch .slider{ position:absolute; inset:0; border-radius:999px; background:rgba(255,255,255,.14); transition:.25s; }
.switch .slider:before{ content:""; position:absolute; left:3px; top:3px; width:22px; height:22px; border-radius:50%; background:#fff; transition:.25s; }
.switch input:checked + .slider{ background:linear-gradient(135deg,var(--accent,#ff6a00),var(--accent-2,#ff9a3c)); }
.switch input:checked + .slider:before{ transform:translateX(20px); }

/* ============ modal (AI plan creation) ============ */
.modal-backdrop{ display:none; position:fixed; inset:0; z-index:80; background:rgba(0,0,0,.6);
  backdrop-filter:blur(4px); align-items:center; justify-content:center; padding:1rem; }
.modal-backdrop.show{ display:flex; }
.modal{ width:min(560px,100%); max-height:88vh; display:flex; flex-direction:column;
  padding:1.4rem; border-radius:20px; animation:ascendIn .3s ease both; }
.msg-thread{ scrollbar-width:thin; }
@media (max-width:640px){ .modal{ padding:1.1rem; max-height:92vh; } }

/* ============ progress: file picker, gallery, how-to ============ */
.file-drop{ position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.4rem;
  padding:1.4rem 1rem; border:1.5px dashed rgba(255,255,255,.16); border-radius:14px; cursor:pointer;
  color:var(--text-dim,#9aa0aa); text-align:center; transition:border-color .15s ease, background .15s ease; background:rgba(255,255,255,.02); }
.file-drop:hover{ border-color:var(--accent,#ff6a00); color:var(--text,#e8eaed); }
.file-drop.has{ border-color:var(--accent,#ff6a00); border-style:solid; color:var(--text,#e8eaed); }
.file-drop input[type=file]{ position:absolute; inset:0; width:100%; height:100%; opacity:0; cursor:pointer; }
.file-drop .fd-text{ font-weight:600; font-size:.9rem; }
.file-drop .fd-name{ font-size:.78rem; color:var(--accent-2,#ff9a3c); word-break:break-all; }

.howto{ margin:0; padding-left:1.1rem; color:var(--text-dim,#9aa0aa); font-size:.85rem; line-height:1.55; }
.howto li{ margin:.15rem 0; }

.gallery{ display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:.9rem; }
.gtile{ margin:0; background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.07); border-radius:16px; overflow:hidden; display:flex; flex-direction:column; }
.gthumb{ position:relative; display:block; aspect-ratio:3/4; cursor:pointer; background:#0c0e15; }
.gthumb img{ width:100%; height:100%; object-fit:cover; display:block; }
.gthumb .gbroken{ display:none; position:absolute; inset:0; align-items:center; justify-content:center; text-align:center;
  color:var(--text-dim,#9aa0aa); font-size:.78rem; text-decoration:none; padding:1rem; border:1px dashed rgba(255,255,255,.15); }
.gthumb input.photo-check{ position:absolute; opacity:0; width:0; height:0; }
.gthumb .gcheck{ position:absolute; top:8px; left:8px; width:24px; height:24px; border-radius:7px; z-index:2;
  background:rgba(0,0,0,.45); border:2px solid #fff; backdrop-filter:blur(2px); transition:.12s; }
.gthumb .gcheck::after{ content:""; position:absolute; left:7px; top:3px; width:6px; height:11px; border:solid #0a0a0a; border-width:0 2.5px 2.5px 0; transform:rotate(45deg) scale(0); transition:transform .12s; }
.gthumb input.photo-check:checked + .gcheck{ background:linear-gradient(135deg,#ff6a00,#ff9a3c); border-color:#ff9a3c; }
.gthumb input.photo-check:checked + .gcheck::after{ transform:rotate(45deg) scale(1); }
.gthumb .gscore{ position:absolute; bottom:8px; right:8px; z-index:2; background:rgba(0,0,0,.6); color:#fff;
  font-size:.7rem; font-weight:700; padding:.2rem .5rem; border-radius:999px; backdrop-filter:blur(3px); }
.gmeta{ padding:.6rem .7rem .7rem; display:flex; flex-direction:column; gap:.3rem; }
.gfeed summary{ cursor:pointer; font-size:.76rem; color:var(--accent-2,#ff9a3c); }
.gfeed[open] summary{ margin-bottom:.2rem; }
.gdel{ align-self:flex-start; margin-top:.2rem; background:none; border:none; color:#8a8f99; font-size:.72rem; cursor:pointer; padding:.2rem 0; text-decoration:underline; }
.gdel:hover{ color:#ff6b6b; }
@media (max-width:520px){ .gallery{ grid-template-columns:repeat(2,1fr); gap:.6rem; } }
