/* ===== Theme palettes. Each page sets <body data-theme="..."> ===== */
body,body[data-theme="christmas"]{--side:310px;--pine:#0f3b2c;--cream:#fbf5ec;--paper:#fffdf8;--ink:#1d2b24;--ink-2:#33453b;--head:#0f2c21;--muted:#5f6f66;--line:#eadfca;--line-2:#efe4cf;--line-3:#dccfb3;
 --red:#b3141c;--red-d:#930f16;--accent:#b3141c;--btn-1:#c01a22;--btn-2:#a30f17;--btn-h1:#cf1f27;--green-1:#14503b;--green-2:#0d3427;--gold:#f3c969;--teal:#17657e;
 --side-glow:#1a6650;--side-1:#0f4833;--side-2:#0a3324;--side-3:#082a1e;--side-text:#eaf4ee;--av-1:#43a077;--av-2:#14583f;--av-a1:#1d6e50;--av-a2:#0b3b2a;--nav-1:#fff7ea;--nav-2:#f6e8d2;
 --bg-1:#fdf8ef;--bg-2:#f8efdf;--soft-1:#fffaf0;--soft-2:#faf1df;--soft-line:#e6d8bd;--soft-line-h:#cdb98f;--tint:#f7f0e0;--tint-2:#fff6e6;--ph-1:#f9efdb;--ph-2:#f1e1c2;--chip:#dce9d3;
 --q-1:#e7efdc;--q-2:#dbe6cd;--q-line:#c9d8bb;--q-sep:#b9ccab;--q-ink:#4a6054;--feat-1:#fbfff6;--feat-2:#f1f7e9;--particle:#cfd6cc;--focus:rgba(243,201,105,.55);--focus-line:#d9a441;--lights-h:58px}
body[data-theme="neutral"]{--pine:#26364f;--cream:#f6f5f1;--paper:#fffefb;--ink:#1f2a37;--ink-2:#3a4856;--head:#17263a;--muted:#6b7886;--line:#e6e2d8;--line-2:#ece8de;--line-3:#d9d3c4;
 --red:#e2583e;--red-d:#bf4129;--accent:#e2583e;--btn-1:#ea6a50;--btn-2:#d44a30;--btn-h1:#f07a62;--green-1:#2d4568;--green-2:#1f3250;--gold:#f5c26b;--teal:#2f7f9a;
 --side-glow:#3d5a82;--side-1:#26364f;--side-2:#1d2b40;--side-3:#162234;--side-text:#e8eef5;--av-1:#6786b0;--av-2:#2f4a73;--av-a1:#34507a;--av-a2:#1b2b45;--nav-1:#fffaf3;--nav-2:#f3ead9;
 --bg-1:#faf9f6;--bg-2:#f1efe9;--soft-1:#ffffff;--soft-2:#f7f5ef;--soft-line:#dfd9ca;--soft-line-h:#c4bca7;--tint:#f1eee5;--tint-2:#f6f4ee;--ph-1:#f3efe4;--ph-2:#e7e1d2;--chip:#dfe9f2;
 --q-1:#e6edf3;--q-2:#d9e3ec;--q-line:#c5d3e0;--q-sep:#b4c4d4;--q-ink:#3f5470;--feat-1:#f7fbff;--feat-2:#eaf2f9;--particle:#d5dbe3;--focus:rgba(245,194,107,.55);--focus-line:#e0a43e;--lights-h:18px}
body[data-theme="birthday"]{--pine:#3a1b66;--cream:#fff8f1;--paper:#fffdfb;--ink:#2a1d3d;--ink-2:#4a3b61;--head:#2e1456;--muted:#7b6f8f;--line:#f0e2ea;--line-2:#f4e6ee;--line-3:#e6d3df;
 --red:#e0338c;--red-d:#b82272;--accent:#e0338c;--btn-1:#ea4a9c;--btn-2:#cf2c80;--btn-h1:#f25fa9;--green-1:#5a35a5;--green-2:#3e2078;--gold:#ffd24a;--teal:#5b3fd0;
 --side-glow:#6b3fb5;--side-1:#3d1d6e;--side-2:#2e1456;--side-3:#240f45;--side-text:#f3ecfb;--av-1:#9b7bff;--av-2:#5b3aa8;--av-a1:#7b52d0;--av-a2:#3a1b66;--nav-1:#fff8f1;--nav-2:#fde9f2;
 --bg-1:#fff9f4;--bg-2:#fdeef4;--soft-1:#fffdfb;--soft-2:#fcf0f6;--soft-line:#ecd6e3;--soft-line-h:#d6b6ca;--tint:#f8eef5;--tint-2:#fdf2f8;--ph-1:#fdecf5;--ph-2:#f6d9ea;--chip:#ffe9a8;
 --q-1:#f1e6ff;--q-2:#e7d8ff;--q-line:#d6c2f5;--q-sep:#c4aaee;--q-ink:#5a3f88;--feat-1:#fffaf0;--feat-2:#fff0f6;--particle:#e7d1f0;--focus:rgba(255,210,74,.55);--focus-line:#e6b422;--lights-h:58px}
body[data-theme="halloween"]{--pine:#2a1646;--cream:#f9f1e4;--paper:#fffdf8;--ink:#2a1d33;--ink-2:#4a3a55;--head:#2a1646;--muted:#7a6d88;--line:#ecdfd0;--line-2:#f0e4d6;--line-3:#dccdb9;
 --red:#f26b1d;--red-d:#c9520f;--accent:#f26b1d;--btn-1:#f7822f;--btn-2:#e0600f;--btn-h1:#ff9244;--green-1:#4a2a7a;--green-2:#2f1a55;--gold:#ffb347;--teal:#6f3fc0;
 --side-glow:#4a2a7a;--side-1:#2c1650;--side-2:#1e0f38;--side-3:#150a28;--side-text:#efe8fa;--av-1:#7b4fc0;--av-2:#3f2370;--av-a1:#5a359a;--av-a2:#24113f;--nav-1:#fff3e3;--nav-2:#fbe3c4;
 --bg-1:#faf3e8;--bg-2:#f3e8dc;--soft-1:#fffaf2;--soft-2:#f8ecda;--soft-line:#e6d4bb;--soft-line-h:#c8ae8a;--tint:#f4eadb;--tint-2:#faf1e3;--ph-1:#f8ebd6;--ph-2:#efd9b8;--chip:#ffe0c2;
 --q-1:#ede3fa;--q-2:#e0d2f4;--q-line:#cdb9ea;--q-sep:#bba3df;--q-ink:#4f3a7a;--feat-1:#fffaf3;--feat-2:#fcefdb;--particle:#d8cde6;--focus:rgba(255,179,71,.55);--focus-line:#e8932a;--lights-h:58px}
body[data-theme="valentines"]{--pine:#6a1233;--cream:#fff4f5;--paper:#fffdfd;--ink:#3a1a24;--ink-2:#5b3340;--head:#5a0d2b;--muted:#8a6b75;--line:#f3dfe4;--line-2:#f6e4e8;--line-3:#e9cdd5;
 --red:#d6285a;--red-d:#a8173f;--accent:#d6285a;--btn-1:#e0386a;--btn-2:#c01f4f;--btn-h1:#ea4d7b;--green-1:#8e1f48;--green-2:#62122f;--gold:#ffb3c6;--teal:#b0245a;
 --side-glow:#a8244f;--side-1:#6e1236;--side-2:#54092a;--side-3:#3f061f;--side-text:#fdeef2;--av-1:#d65d86;--av-2:#8e1f48;--av-a1:#b83265;--av-a2:#5a0d2b;--nav-1:#fff5f6;--nav-2:#fde3ea;
 --bg-1:#fff7f7;--bg-2:#fdeaee;--soft-1:#fffafa;--soft-2:#fdeff2;--soft-line:#efd2da;--soft-line-h:#d9a9b8;--tint:#faeff2;--tint-2:#fdf3f5;--ph-1:#fdeef2;--ph-2:#f8d9e2;--chip:#ffd9e3;
 --q-1:#fde8ee;--q-2:#f9d7e1;--q-line:#efbccb;--q-sep:#e5a3b7;--q-ink:#7a2c47;--feat-1:#fffafa;--feat-2:#fdeef2;--particle:#f2cdd8;--focus:rgba(255,179,198,.6);--focus-line:#e0708f;--lights-h:58px}
body[data-theme="spring"]{--pine:#1f5d51;--cream:#fbf9ee;--paper:#fffffa;--ink:#22332e;--ink-2:#3d5049;--head:#1b4a40;--muted:#68796f;--line:#e5ebd6;--line-2:#ebf0dd;--line-3:#d3dcbf;
 --red:#7b57c8;--red-d:#5f3fa6;--accent:#7b57c8;--btn-1:#8a65d6;--btn-2:#6f4bbb;--btn-h1:#9a78e0;--green-1:#2f8a74;--green-2:#1f6454;--gold:#ffe08a;--teal:#2b7f9a;
 --side-glow:#3c9a86;--side-1:#2a7a6a;--side-2:#1f5d51;--side-3:#184a41;--side-text:#eefaf4;--av-1:#6fc4a8;--av-2:#2f8a74;--av-a1:#3f9f88;--av-a2:#1b5246;--nav-1:#fffdf2;--nav-2:#f1f7e6;
 --bg-1:#fcfaf0;--bg-2:#f1f6e8;--soft-1:#fffffa;--soft-2:#f4f8ea;--soft-line:#d9e2c5;--soft-line-h:#b3c39a;--tint:#eef3e0;--tint-2:#f5f8ec;--ph-1:#f1f6e4;--ph-2:#e2edcf;--chip:#e3dcf8;
 --q-1:#e9f4e1;--q-2:#daecd0;--q-line:#c3dcb4;--q-sep:#aecd9d;--q-ink:#3f6a4f;--feat-1:#fbfff6;--feat-2:#eef7e6;--particle:#d4e3cc;--focus:rgba(255,224,138,.6);--focus-line:#e0b83e;--lights-h:58px}
body[data-theme="thanksgiving"]{--pine:#5a2d12;--cream:#fbf3e4;--paper:#fffdf7;--ink:#2e2014;--ink-2:#4f3d2c;--head:#3b1d0b;--muted:#7d6a58;--line:#ecdcc0;--line-2:#f0e2c9;--line-3:#dcc8a4;
 --red:#c4571a;--red-d:#9f4311;--accent:#c4571a;--btn-1:#d4672a;--btn-2:#b04a14;--btn-h1:#e07a3c;--green-1:#7a3d17;--green-2:#54280e;--gold:#f0c060;--teal:#9a4a14;
 --side-glow:#8a4a1f;--side-1:#5e2f12;--side-2:#46220c;--side-3:#331808;--side-text:#fbeedd;--av-1:#c98550;--av-2:#8a4a1f;--av-a1:#a8602a;--av-a2:#4a230d;--nav-1:#fff7e8;--nav-2:#fbe8c9;
 --bg-1:#fcf5e8;--bg-2:#f6ead4;--soft-1:#fffaf0;--soft-2:#f9ecd2;--soft-line:#e8d3ac;--soft-line-h:#c9aa77;--tint:#f4e9d3;--tint-2:#faf1de;--ph-1:#f8ead0;--ph-2:#efd8ae;--chip:#fbe3b6;
 --q-1:#f6ead0;--q-2:#eedcb6;--q-line:#e0c795;--q-sep:#d2b277;--q-ink:#6a4520;--feat-1:#fffaf1;--feat-2:#fcecd2;--particle:#e6d3b0;--focus:rgba(240,192,96,.6);--focus-line:#d9a02e;--lights-h:58px}
*{box-sizing:border-box}
html,body{margin:0}
body{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--cream);color:var(--ink);line-height:1.5;
  display:grid;grid-template-columns:var(--side) minmax(0,1fr);min-height:100vh}
a{color:inherit}
h1,h2,h3{font-family:Fraunces,Georgia,serif;margin:0;letter-spacing:-.01em}
.ic{width:1.15em;height:1.15em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.art{display:block;flex:none}

/* ================= SIDEBAR ================= */
.sidebar{position:sticky;top:0;height:100vh;overflow-y:auto;overflow-x:hidden;color:var(--side-text);padding:0 18px 18px;display:flex;flex-direction:column;
  background:radial-gradient(120% 50% at 50% 0%,var(--side-glow) 0%,transparent 62%),linear-gradient(180deg,var(--side-1),var(--side-2) 55%,var(--side-3));scrollbar-width:none}
.sidebar::-webkit-scrollbar{display:none}
.lights-wrap{margin:0 -18px;height:var(--lights-h);pointer-events:none;flex:none}
.lights{width:100%;height:100%;display:block}
.brand{display:flex;gap:14px;align-items:center;text-decoration:none;color:#fff;padding:0 6px 18px}
.brand .tree{width:60px;height:82px;filter:drop-shadow(0 5px 8px rgba(0,0,0,.35))}
.brand b{display:block;font:700 25px/1.08 Fraunces,serif}
.brand small{display:block;margin-top:7px;color:var(--gold);font-size:12.5px;font-weight:500}
.sidebar nav{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.person-link{display:flex;align-items:center;gap:14px;padding:7px 12px 7px 8px;border-radius:99px;color:var(--side-text);text-decoration:none;font-size:17px;font-weight:500;transition:background .15s}
.person-link:hover{background:rgba(255,255,255,.08)}
.person-link.active{background:linear-gradient(180deg,var(--nav-1),var(--nav-2));color:var(--pine);font-weight:600;box-shadow:0 6px 16px rgba(0,0,0,.3)}
.pname{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.avatar{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;font-size:21px;flex:none;color:#fff;font-weight:600;
  background:radial-gradient(circle at 35% 28%,var(--av-1),var(--av-2) 72%);box-shadow:inset 0 0 0 2px rgba(255,255,255,.2)}
.person-link.active .avatar{background:radial-gradient(circle at 35% 28%,var(--av-a1),var(--av-a2) 72%)}
.avatar.lg{width:68px;height:68px;font-size:32px;background:radial-gradient(circle at 35% 28%,var(--av-a1),var(--av-a2) 72%)}
.avatar.xl{width:112px;height:112px;font-size:52px;background:radial-gradient(circle at 35% 28%,var(--av-a1),var(--av-a2) 72%);box-shadow:0 8px 22px rgba(15,59,44,.28),inset 0 0 0 3px rgba(255,255,255,.14)}
.avatar .ic{width:46px;height:46px;stroke-width:1.8}
.count{margin-left:auto;min-width:26px;height:26px;padding:0 7px;border-radius:99px;display:grid;place-items:center;font-size:13px;font-weight:700;background:rgba(0,0,0,.3);color:var(--side-text);flex:none}
.person-link.active .count{background:var(--red);color:#fff}
.add-person{align-self:center;display:inline-flex;align-items:center;gap:12px;margin-top:16px;padding:8px 28px 8px 9px;border-radius:99px;background:rgba(255,255,255,.07);
  border:1px solid rgba(255,255,255,.1);color:var(--side-text);text-decoration:none;font-size:16px;transition:.15s}
.add-person:hover{background:rgba(255,255,255,.13)}
.add-person .plus{width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.13);display:grid;place-items:center}
.side-art{margin:auto -18px 0;padding-top:12px;line-height:0;flex:none}
.side-art .pile{width:100%;height:auto;aspect-ratio:320/236}
.side-links{display:flex;flex-direction:column;gap:12px;margin-top:8px;flex:none}
.pill{display:flex;align-items:center;gap:14px;padding:12px 16px;border-radius:99px;border:1.5px solid rgba(255,255,255,.5);color:#fff;text-decoration:none;font-size:16.5px;font-weight:500;transition:.15s}
.pill:hover{background:rgba(255,255,255,.1)}
.pill .ic{width:24px;height:24px}
.pill.soft{border-color:rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:var(--side-text)}
.pill.active{background:var(--nav-1);color:var(--pine);border-color:var(--nav-1)}
.pill .count{background:rgba(0,0,0,.3)}
.pill.active .count{background:var(--red)}
@media (max-height:800px){.side-art .pile{display:none}}

/* ================= MAIN ================= */
main{position:relative;display:flex;flex-direction:column;min-height:100vh;overflow:hidden;
  background:radial-gradient(900px 420px at 88% -6%,#fff 0%,transparent 70%),linear-gradient(180deg,var(--bg-1),var(--bg-2))}
.snow{position:absolute;inset:0;pointer-events:none;color:var(--particle)}
.snow svg{position:absolute;fill:none}
.main-inner{position:relative;z-index:1;flex:1;width:100%;max-width:1200px;padding:34px clamp(18px,3.4vw,52px) 36px}
.flash{padding:12px 18px;border-radius:14px;margin-bottom:18px;background:#e6f3ea;color:#1d5c37;border:1px solid #c5e3d0;font-size:14.5px}
.flash.err{background:#fdeceb;color:#8e2b22;border-color:#f3c6c1}
.flash.warn{background:#fff4dc;color:#7a5a12;border-color:#f0dba5}

/* header */
.page-head{display:flex;justify-content:space-between;align-items:center;gap:18px;flex-wrap:wrap}
.page-head h1{font-weight:800;font-size:clamp(34px,4.6vw,58px);line-height:1.05;color:var(--head)}
.who{display:flex;gap:26px;align-items:center}
.avatar-hat{position:relative;width:112px;height:112px;flex:none;margin-left:14px}
.avatar-hat .hat{position:absolute;left:-30px;top:-34px;width:96px;height:auto;transform:rotate(-17deg);filter:drop-shadow(0 3px 4px rgba(0,0,0,.2))}
.avatar-hat.sm{width:68px;height:68px;margin:0 0 6px 8px}
.avatar-hat.sm .hat{width:56px;left:-18px;top:-20px}
.sub{color:var(--ink-2);margin:6px 0 0;font-size:17px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sub .dot{color:#9aa79f}
.editlink{display:inline-flex;align-items:center;gap:7px;color:var(--red);font-weight:500}
.cart-av{color:#fff}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:12px 22px;border-radius:99px;border:1.5px solid transparent;font:inherit;font-weight:600;font-size:15.5px;cursor:pointer;text-decoration:none;transition:.15s;white-space:nowrap}
.btn .ic{width:19px;height:19px}
.btn.green{background:linear-gradient(180deg,var(--green-1),var(--green-2));color:#fff;box-shadow:0 8px 20px rgba(15,59,44,.3)}
.btn.green:hover{filter:brightness(1.12)}
.btn.red{background:linear-gradient(180deg,var(--btn-1),var(--btn-2));color:#fff;box-shadow:0 6px 14px rgba(163,15,23,.28)}
.btn.red:hover{background:linear-gradient(180deg,var(--btn-h1),var(--red))}
.btn.cream{background:linear-gradient(180deg,var(--soft-1),var(--soft-2));color:var(--ink);border-color:var(--soft-line)}
.btn.cream:hover{border-color:var(--soft-line-h)}
.btn.danger{color:var(--red)}
.btn.small{padding:9px 16px;font-size:14px}
.add-btn{padding:15px 22px 15px 26px;font-size:17px}
.gift-mini{width:30px;height:30px;margin-left:2px;margin-right:-6px}
.icon-btn{background:none;border:0;cursor:pointer;padding:8px;border-radius:10px;color:var(--muted);display:inline-grid;place-items:center}
.icon-btn:hover{background:var(--tint);color:var(--red)}

/* ribbon banner */
.ribbon-banner{position:relative;height:112px;margin:12px 0 22px}
.ribbon-banner .swoosh{position:absolute;inset:0;width:100%;height:100%}
.ribbon-banner .bow{position:absolute;left:50%;top:6px;width:88px;height:62px;transform:translateX(-50%);filter:drop-shadow(0 3px 3px rgba(0,0,0,.18))}
.rtext{position:absolute;left:50%;top:66px;transform:translateX(-50%);display:flex;gap:12px;align-items:center;font:600 29px Caveat,cursive;white-space:nowrap;color:var(--ink)}
.rtext .holly{width:36px;height:28px}
.rtext .holly.flip{transform:scaleX(-1)}

/* ================= forms ================= */
.add-box{background:var(--paper);border:1px solid var(--line);border-radius:24px;padding:26px;margin-bottom:28px;display:none;box-shadow:0 10px 30px rgba(60,40,10,.06)}
.add-box.open,.add-box:target{display:block}
.add-box h2{font-size:23px;margin-bottom:14px}
.add-box p.sub{font-size:15px}
.item-form{display:grid;grid-template-columns:1fr 170px;gap:16px 18px}
.item-form label{display:flex;flex-direction:column;gap:6px;font-weight:600;font-size:14px}
.item-form label small{font-weight:400;color:var(--muted)}
.item-form .full,.img-preview,.form-actions{grid-column:1/-1}
input[type=text],input[type=url],input[type=password]{font:inherit;font-weight:400;padding:12px 15px;border:1.5px solid var(--soft-line);border-radius:14px;background:#fff;width:100%}
input:focus{outline:3px solid var(--focus);border-color:var(--focus-line)}
.hint{font-weight:400;color:var(--muted);font-size:12.5px}
.hint.ok{color:#1d7a46}.hint.err{color:#b0392c}
.img-preview{background:var(--tint);border-radius:14px;padding:10px;text-align:center}
.img-preview img{max-height:170px;max-width:100%;border-radius:10px}
.form-actions{display:flex;gap:12px;flex-wrap:wrap}
.danger-zone{margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}
hr.short{border:0;height:2px;width:34px;background:var(--line-3);margin:12px 0 14px;border-radius:2px}
code{background:var(--tint);padding:1px 6px;border-radius:6px;font-size:.9em}

/* ================= item cards ================= */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:28px}
.card{position:relative;background:var(--paper);border:1px solid var(--line-2);border-radius:26px;padding:12px;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(70,50,15,.08);transition:transform .18s,box-shadow .18s}
.card:hover{transform:translateY(-3px);box-shadow:0 16px 36px rgba(70,50,15,.13)}
.card-img{position:relative;aspect-ratio:4/3;border-radius:18px;overflow:hidden;background:var(--tint-2);display:grid;place-items:center}
.card-img::before{content:'';position:absolute;inset:-24px;background:var(--img) center/cover;filter:blur(24px) saturate(1.15);opacity:.55}
.card-img img{position:relative;width:100%;height:100%;object-fit:contain}
.card-img.noimg::before{display:none}
.ph,.bthumb .ph{display:grid;place-items:center;width:100%;height:100%;background:linear-gradient(135deg,var(--ph-1),var(--ph-2));position:relative}
.ph .art{width:64px;height:64px}
.fav-form{position:absolute;top:12px;right:12px;margin:0;z-index:2}
.heart{width:42px;height:42px;border-radius:50%;border:0;background:rgba(255,255,255,.22);backdrop-filter:blur(4px);color:#fff;cursor:pointer;display:grid;place-items:center;filter:drop-shadow(0 1px 3px rgba(0,0,0,.35));transition:.15s}
.heart .ic{width:26px;height:26px;stroke-width:2.2}
.heart:hover{transform:scale(1.1)}
.heart.on{background:#fff;color:var(--red);filter:none}
.heart.on .ic{fill:var(--red)}
.card-body{padding:16px 10px 6px;display:flex;flex-direction:column;gap:8px;flex:1}
.card h3{font-size:23px;font-weight:700;line-height:1.2;color:var(--head)}
.meta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font-size:14.5px}
.price{display:inline-flex;align-items:center;gap:8px;background:var(--chip);color:var(--pine);font-weight:700;padding:6px 15px 6px 12px;border-radius:99px}
.price .ic{width:18px;height:18px}
.host{display:inline-flex;align-items:center;gap:8px;color:var(--teal);text-decoration:none;font-weight:500}
.host:hover{text-decoration:underline}
.host .ic{width:18px;height:18px}
.notes{margin:0;font-size:15.5px;color:var(--ink-2)}
.card-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:stretch;margin-top:auto;padding-top:4px}
.card-actions .view{flex:1.3 1 0;min-width:0;padding:13px 14px}
.buy{flex:1 1 0;min-width:0;display:block}
.buy summary{list-style:none;cursor:pointer;width:100%;height:100%;padding:13px 14px}
.buy summary::-webkit-details-marker,.more summary::-webkit-details-marker{display:none}
.buy[open]{order:10;flex:1 1 100%;background:var(--tint);border-radius:18px;padding:12px;margin-top:2px}
.buy[open] summary{height:auto;margin-bottom:10px;background:#fff}
.buy-form{display:flex;flex-direction:column;gap:9px}
.buy-form label{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:600}
.buy-form input{padding:10px 13px;font-size:14.5px}
.more{position:relative;flex:none}
.more summary{list-style:none;cursor:pointer;width:48px;height:100%;min-height:48px;border-radius:16px;border:1.5px solid var(--soft-line);background:var(--soft-1);display:grid;place-items:center;color:var(--ink)}
.more summary:hover{border-color:var(--soft-line-h)}
.more summary .ic{width:22px;height:22px}
.more-menu{position:absolute;right:0;bottom:calc(100% + 8px);z-index:6;min-width:150px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:6px;box-shadow:0 14px 34px rgba(40,30,10,.18)}
.more-menu a,.more-menu button{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border-radius:10px;border:0;background:none;font:inherit;font-size:14.5px;color:var(--ink);text-decoration:none;cursor:pointer;text-align:left}
.more-menu a:hover,.more-menu button:hover{background:var(--tint)}
.more-menu .danger{color:var(--red)}
.more-menu form{margin:0}
.empty{background:rgba(255,253,248,.85);border:2px dashed var(--line-3);border-radius:24px;padding:46px 20px;text-align:center;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:10px;font-size:16.5px}
.empty p{margin:0}
.empty-gift{width:56px;height:56px}

/* ================= home: people cards ================= */
.people-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:24px}
.person-card{background:var(--paper);border:1px solid var(--line-2);border-radius:26px;padding:26px 24px 22px;text-decoration:none;display:flex;flex-direction:column;align-items:flex-start;gap:4px;box-shadow:0 10px 30px rgba(70,50,15,.08);transition:.18s}
.person-card:hover{transform:translateY(-3px);box-shadow:0 16px 36px rgba(70,50,15,.13)}
.person-card h2{font-size:26px;font-weight:700;margin-top:10px}
.person-card p{margin:0;color:var(--muted);font-size:15px}
.thumbs{display:flex;gap:8px;margin-top:10px}
.thumbs img{width:56px;height:56px;object-fit:cover;border-radius:12px;border:1px solid var(--line)}

/* ================= quick actions ================= */
.quick{position:relative;display:flex;align-items:center;flex-wrap:wrap;margin-top:38px;padding:16px 26px;border-radius:26px;overflow:hidden;
  background:linear-gradient(180deg,var(--q-1),var(--q-2));border:1px solid var(--q-line);box-shadow:0 8px 22px rgba(60,90,50,.1)}
.q-head{display:flex;align-items:center;gap:14px;padding-right:24px;margin-right:4px;border-right:1px solid var(--q-sep)}
.q-head .art{width:48px;height:48px}
.q-head h2{font-size:25px;font-weight:700}
.q-head p{margin:0;color:var(--q-ink);font-size:14px}
.q-item{display:flex;align-items:center;gap:12px;padding:12px 20px;color:var(--ink);text-decoration:none;font-size:15px;font-weight:500;border-right:1px solid var(--q-sep);transition:.15s}
.q-item:last-of-type{border-right:0}
.q-item:hover{color:var(--red)}
.q-item .ic{width:30px;height:30px;stroke-width:1.6}
.q-sprig{position:absolute;right:-56px;bottom:-26px;width:170px;height:85px;transform:rotate(-14deg);pointer-events:none;z-index:0}
.quick>*:not(.q-sprig){position:relative;z-index:1}
.quick{padding:16px 64px 16px 26px}

/* ================= footer scene ================= */
.scene{position:relative;height:150px;margin-top:6px;pointer-events:none;flex:none}
.scene .forest{position:absolute;left:0;bottom:0;width:100%;height:100%}
.toast-pill{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);background:var(--paper);border-radius:99px;padding:10px 24px 10px 12px;display:flex;gap:12px;align-items:center;
  box-shadow:0 8px 24px rgba(30,60,40,.16);font-size:14px;white-space:nowrap}
.toast-pill .ok{width:28px;height:28px;border-radius:50%;background:#1e7d4b;color:#fff;display:grid;place-items:center}
.toast-pill .ok .ic{width:16px;height:16px;stroke-width:3}
.copy-toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%);background:var(--pine);color:#fff;padding:12px 24px;border-radius:99px;font-weight:600;z-index:60;box-shadow:0 10px 26px rgba(0,0,0,.3)}

/* ================= bought list ================= */
.bought-list{display:flex;flex-direction:column;gap:16px}
.brow{display:grid;grid-template-columns:128px 1fr auto;gap:22px;align-items:center;background:var(--paper);border:1px solid var(--line-2);border-radius:24px;padding:12px 22px 12px 12px;box-shadow:0 8px 24px rgba(70,50,15,.07)}
.bthumb{position:relative;width:128px;height:96px;border-radius:16px;overflow:hidden;background:var(--tint-2);display:grid;place-items:center}
.bthumb::before{content:'';position:absolute;inset:-18px;background:var(--img) center/cover;filter:blur(18px);opacity:.55}
.bthumb img{position:relative;width:100%;height:100%;object-fit:contain}
.bthumb .ph .art{width:44px;height:44px}
.binfo h3{font-size:21px;margin-bottom:6px}
.binfo .meta{margin-bottom:8px;font-size:14px}
.for b{color:var(--pine)}
.when{color:var(--muted)}
.by{display:flex;align-items:center;gap:10px;font-size:14.5px}
.by-label{color:var(--muted)}
.by-hidden{letter-spacing:3px;color:#9aa69f}
.by-name{color:var(--red);font-size:16px}
.eye{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:50%;color:var(--muted);text-decoration:none;border:1.5px solid var(--soft-line);background:var(--soft-1);transition:.15s}
.eye:hover{color:var(--ink);border-color:var(--soft-line-h)}
.eye .ic{width:18px;height:18px}
.bactions{display:flex;gap:8px;align-items:center}
.bactions form{margin:0}

/* ================= login ================= */
.login-body{display:grid;place-items:center;grid-template-columns:1fr;min-height:100vh;position:relative;overflow:hidden;
  background:radial-gradient(90% 60% at 50% 0%,var(--side-glow),transparent 70%),linear-gradient(180deg,var(--side-1),var(--side-3))}
.login-lights{position:absolute;top:0;left:0;right:0;height:64px;pointer-events:none}
.login-lights .lights{width:100%;height:100%}
.login-card{background:var(--cream);padding:34px;border-radius:26px;width:min(390px,92vw);display:flex;flex-direction:column;gap:12px;text-align:center;align-items:stretch;box-shadow:0 24px 60px rgba(0,0,0,.4);position:relative}
.login-card .tree{width:56px;height:78px;margin:0 auto}
.login-card h1{font-size:28px;font-weight:800}
.login-card .sub{justify-content:center;margin:0 0 6px}

/* ================= mobile ================= */
.menu-btn,.backdrop{display:none}
@media (max-width:900px){
  .quick{padding:18px}
  .q-head{border-right:0;width:100%;padding-bottom:8px}
  .q-item{padding:10px 14px 10px 0;border-right:0}
  .q-sprig{display:none}
}
@media (max-width:820px){
  body{grid-template-columns:1fr}
  .sidebar{position:fixed;left:0;top:0;bottom:0;width:var(--side);max-width:86vw;z-index:30;transform:translateX(-100%);transition:transform .22s}
  body.menu-open .sidebar{transform:none}
  body.menu-open .backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:20}
  .menu-btn{display:grid;place-items:center;position:fixed;top:12px;left:12px;z-index:15;width:46px;height:46px;border-radius:14px;border:1px solid var(--line);background:var(--paper);font-size:21px;cursor:pointer;box-shadow:0 4px 12px rgba(0,0,0,.12)}
  .main-inner{padding-top:96px}
  .quick{padding-right:18px}
  .item-form{grid-template-columns:1fr}
  .who{gap:18px}
  .avatar-hat,.avatar.xl{width:84px;height:84px;font-size:40px}
  .avatar-hat .hat{width:72px;left:-22px;top:-26px}
  .rtext{font-size:21px;gap:8px;top:60px;white-space:normal;text-align:center;width:88%;justify-content:center}
  .rtext .holly{width:24px;height:20px}
  .ribbon-banner{height:112px}
  .ribbon-banner .bow{width:70px;height:50px}
  .rtext{top:46px}
  .brow{grid-template-columns:84px 1fr;gap:14px}
  .bthumb{width:84px;height:72px}
  .bactions{grid-column:1/-1}
  .scene{height:120px}
  .toast-pill{font-size:12.5px;padding:8px 16px 8px 10px}
}

@media (max-width:460px){
  .card-actions .view{flex:1 1 100%}
  .rtext .holly{display:none}
}

/* ================= import ================= */
.head-actions{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.import-btn{padding:15px 24px;font-size:16px}
.import-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:24px;align-items:start}
.import-card{position:relative;background:var(--paper);border:1px solid var(--line-2);border-radius:26px;padding:26px 24px 22px;box-shadow:0 10px 30px rgba(70,50,15,.08)}
.import-card.featured{border-color:var(--q-line);background:linear-gradient(180deg,var(--feat-1),var(--feat-2))}
.import-card h2{font-size:22px;margin:10px 0 8px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.import-card p{margin:0 0 14px;color:var(--ink-2);font-size:15px}
.import-card .fine{font-size:13px;color:var(--muted);margin:12px 0 0}
.step-no{width:34px;height:34px;border-radius:50%;background:var(--pine);color:#fff;display:grid;place-items:center;font-weight:700}
.tag{font:600 12px Inter,sans-serif;background:var(--chip);color:var(--pine);padding:3px 10px;border-radius:99px}
.stack{display:flex;flex-direction:column;gap:12px}
textarea{font:inherit;padding:12px 15px;border:1.5px solid var(--soft-line);border-radius:14px;background:#fff;width:100%;resize:vertical}
textarea:focus,select:focus{outline:3px solid var(--focus);border-color:var(--focus-line)}
select{font:inherit;padding:12px 15px;border:1.5px solid var(--soft-line);border-radius:14px;background:#fff;min-width:220px}
.how{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:12px;font-size:15px;color:var(--ink-2)}
.bm-link{display:inline-flex;align-items:center;gap:8px;margin-top:8px;padding:11px 18px;border-radius:99px;border:2px dashed var(--red);background:#fff;color:var(--red);font-weight:700;text-decoration:none;cursor:grab}
.bm-link .ic{width:18px;height:18px}
.review .add-box{margin-bottom:18px}
.who-pick{display:flex;flex-direction:column;gap:6px;font-weight:600;font-size:14px;margin-top:14px}
.irow{grid-template-columns:28px 112px 1fr;cursor:pointer}
.irow input[type=checkbox]{width:22px;height:22px;accent-color:var(--red)}
.irow .bthumb{width:112px;height:84px}
.name-edit{font-weight:600;font-size:16px;padding:9px 12px;margin-bottom:8px}
.sticky-actions{position:sticky;bottom:12px;z-index:5;margin-top:20px;padding:12px;background:rgba(255,253,248,.92);backdrop-filter:blur(6px);border:1px solid var(--line);border-radius:99px;width:fit-content;box-shadow:0 10px 26px rgba(40,30,10,.15)}
@media (max-width:820px){.irow{grid-template-columns:24px 76px 1fr}.irow .bthumb{width:76px;height:64px}.head-actions{width:100%}}

.sub.block{display:block}

/* ================= occasions, admin ================= */
.occ-pill{display:inline-flex;align-items:center;gap:7px;background:var(--chip);color:var(--pine);font-weight:600;font-size:14px;padding:4px 13px;border-radius:99px}
.occ-pill .ic{width:16px;height:16px}
.occ-tag{display:inline-flex;align-items:center;font-size:12.5px;font-weight:600;background:var(--tint);color:var(--ink-2);border:1px solid var(--line-2);padding:2px 10px;border-radius:99px}
.occ-chips{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 20px}
.chip-link{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;border-radius:99px;border:1.5px solid var(--soft-line);background:var(--soft-1);text-decoration:none;font-weight:600;font-size:14.5px;color:var(--ink);transition:.15s}
.chip-link span{background:var(--tint);border-radius:99px;padding:0 8px;font-size:12.5px;color:var(--muted)}
.chip-link:hover{border-color:var(--soft-line-h)}
.chip-link.on{background:var(--pine);border-color:var(--pine);color:#fff}
.chip-link.on span{background:rgba(255,255,255,.2);color:#fff}
.preview-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--pine);color:#fff;padding:10px 18px;border-radius:16px;margin-bottom:18px;font-size:14.5px}
.preview-bar .ic{width:18px;height:18px}
.preview-bar a{margin-left:auto;color:#fff;font-weight:700;background:rgba(255,255,255,.18);padding:5px 14px;border-radius:99px;text-decoration:none}

.admin-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 24px}
.admin-tabs a{display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:99px;border:1.5px solid var(--soft-line);background:var(--soft-1);text-decoration:none;font-weight:600;font-size:15px;color:var(--ink)}
.admin-tabs a .ic{width:18px;height:18px}
.admin-tabs a.on{background:var(--pine);border-color:var(--pine);color:#fff}
.panel{background:var(--paper);border:1px solid var(--line-2);border-radius:24px;padding:24px 26px;margin-bottom:22px;box-shadow:0 10px 30px rgba(70,50,15,.07)}
.panel h2{font-size:22px;margin-bottom:4px}
.panel .sub{font-size:15px;margin:2px 0 14px}
.panel-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;flex-wrap:wrap}
.now-card{display:flex;align-items:center;gap:16px;padding:16px 22px;border-radius:20px;margin-bottom:22px;background:linear-gradient(180deg,var(--q-1),var(--q-2));border:1px solid var(--q-line);color:var(--q-ink)}
.now-card .now-art{width:44px;height:44px}
.occ-list{display:flex;flex-direction:column;gap:12px;margin-top:6px}
.occ-row{display:grid;grid-template-columns:1fr auto auto;gap:20px;align-items:center;padding:14px 16px;border:1px solid var(--line-2);border-radius:18px;background:var(--soft-1)}
.occ-name{font:700 19px Fraunces,serif;color:var(--head);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.occ-sub{color:var(--muted);font-size:14px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:2px}
.occ-sub .ic{width:16px;height:16px}
.occ-theme{display:flex;align-items:center;gap:10px;font-weight:600;font-size:14.5px}
.occ-theme small{display:block;font-weight:400;color:var(--muted);font-size:12.5px}
.occ-actions{display:flex;align-items:center;gap:6px}
.occ-actions form{margin:0}
.swatches{display:inline-flex}
.swatches i{width:20px;height:20px;border-radius:50%;border:2px solid var(--paper);margin-left:-6px;display:block}
.swatches i:first-child{margin-left:0}
.check{flex-direction:row!important;align-items:center;gap:10px!important}
.check input{width:20px;height:20px;accent-color:var(--red)}
input[type=date],input[type=number],input[type=file]{font:inherit;padding:11px 14px;border:1.5px solid var(--soft-line);border-radius:14px;background:#fff;width:100%}
.preset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;margin:12px 0 18px}
.preset{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1.5px solid var(--soft-line);border-radius:16px;background:var(--soft-1);cursor:pointer}
.preset b{display:block;font-size:15px}.preset small{color:var(--muted);font-size:12.5px}
.preset input{accent-color:var(--red);width:18px;height:18px}
.preset.have{opacity:.55;cursor:default}
.mode-form{display:flex;flex-direction:column;gap:12px;max-width:640px}
.radio-card{display:flex;gap:14px;align-items:flex-start;padding:14px 16px;border:1.5px solid var(--soft-line);border-radius:16px;background:var(--soft-1);cursor:pointer}
.radio-card input{margin-top:4px;accent-color:var(--red);width:18px;height:18px}
.radio-card small{display:block;color:var(--muted);font-size:13.5px;margin-top:2px}
.radio-card:has(input:checked){border-color:var(--red);background:var(--tint-2)}
.force-pick{display:flex;align-items:center;gap:12px;font-weight:600;font-size:14.5px;flex-wrap:wrap}
.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:18px;margin-top:10px}
.theme-card{border:1.5px solid var(--line-2);border-radius:20px;padding:14px;background:var(--soft-1)}
.theme-card.current{border-color:var(--red)}
.theme-swatch{height:72px;border-radius:14px;margin-bottom:12px}
.theme-card h3{font-size:18px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.theme-card p{margin:4px 0 12px;font-size:14px;color:var(--ink-2)}
.theme-actions{display:flex;gap:8px;flex-wrap:wrap}
.theme-actions form{margin:0}
.narrow{max-width:460px}
.muted{color:var(--muted)}
.login-card .fine{font-size:13px;color:var(--muted);margin:4px 0 0}
.login-card .fine a{color:var(--red)}
.login-card code,.flash code{background:rgba(0,0,0,.07)}
@media (max-width:820px){.occ-row{grid-template-columns:1fr}.panel{padding:20px 18px}}
.rtext span{background:color-mix(in srgb,var(--bg-1) 88%,transparent);padding:2px 16px;border-radius:99px}
.rtext{top:70px}
.ribbon-banner{height:118px}
.occ-sub{display:block}
.occ-sub .ic{vertical-align:-3px;margin-right:6px}
@media (max-width:820px){.rtext{top:64px}.ribbon-banner{height:118px}}
.item-form select{min-width:0;width:100%}
