:root{--bg:#f5f3ed;--surface:#fffdf9;--surface-elevated:#fff;--text:#20231f;--muted:#697068;--border:#deded4;--accent:#264836;--accent-hover:#183628;--danger:#a34740;--radius-sm:12px;--radius-md:18px;--radius-lg:28px;--shadow-sm:0 8px 24px #24301e0d;--shadow-md:0 22px 60px #24301e1a;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0;min-width:320px;background:radial-gradient(circle at 85% 10%,#e9e5d6 0,transparent 28rem),radial-gradient(circle at 5% 90%,#e2ece2 0,transparent 30rem),var(--bg)}body:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.22;background-image:radial-gradient(#273428 0.5px,transparent .5px);background-size:7px 7px}.shell{position:relative;max-width:1320px;min-height:100vh;margin:auto;padding:28px 42px 56px}.public-nav,.gallery-nav{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:44px;color:var(--muted);font-size:.84rem}.wordmark{display:inline-flex;align-items:center;gap:10px;color:var(--text);font-weight:700;letter-spacing:-.03em;text-decoration:none}.mark{display:grid;place-items:center;width:28px;height:28px;border-radius:9px;background:var(--accent);color:#f5f2e8;font-family:Georgia,serif;font-style:italic;font-size:1.1rem}.hero{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(420px,.95fr);align-items:center;gap:72px;min-height:calc(100vh - 128px);padding:52px 6vw}.hero-copy{max-width:580px}.eyebrow{margin:0 0 14px;color:#687967;font-size:.72rem;font-weight:750;letter-spacing:.13em;text-transform:uppercase}.hero h1,.journey-card h1,.page-intro h1{margin:0;max-width:680px;font-family:Georgia,"Times New Roman",serif;font-size:clamp(3rem,5.7vw,5.4rem);font-weight:400;letter-spacing:-.065em;line-height:.94}.hero h1 em{color:#587053;font-weight:400}.lede{max-width:520px;margin:25px 0;color:var(--muted);font-size:1.05rem;line-height:1.65}.access-form{max-width:490px;margin-top:34px}.access-form label,.camera-form>label{display:block;margin:0 0 8px;font-size:.82rem;font-weight:700}.input-wrap{display:flex;align-items:center;gap:10px;height:58px;padding:0 16px;background:#fbfaf5;border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:inset 0 1px #fff}.input-wrap span{font-size:1.35rem;color:#74826d}input,select{width:100%;min-height:52px;padding:0 15px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fbfaf5;color:var(--text);font:inherit;outline:0;transition:border .2s,box-shadow .2s}input:focus,select:focus,.input-wrap:focus-within{border-color:#607d65;box-shadow:0 0 0 4px #7891752b}.input-wrap input{min-height:0;padding:0;border:0;background:transparent;box-shadow:none}.primary,.secondary,.text-button{min-height:52px;border:0;border-radius:var(--radius-sm);font:inherit;font-weight:700;text-decoration:none;cursor:pointer;transition:transform .2s,background .2s,box-shadow .2s}.primary{display:inline-flex;align-items:center;justify-content:center;gap:16px;padding:0 20px;background:var(--accent);color:#fffdf8;box-shadow:0 10px 20px #2648362e}.primary:hover{background:var(--accent-hover);transform:translateY(-1px)}.access-form .primary,.camera-form .primary{width:100%;margin-top:14px}.secondary{width:100%;padding:0 18px;background:#e9eee6;color:var(--accent)}.text-button{min-height:auto;padding:8px 0;background:transparent;color:var(--muted)}.text-button:hover{color:var(--text)}.trust-row{display:flex;flex-wrap:wrap;gap:10px 20px;margin:24px 0 0;padding:0;list-style:none;color:var(--muted);font-size:.78rem}.trust-row li:before{content:"";display:inline-block;width:6px;height:6px;margin:0 7px 1px 0;border-radius:50%;background:#7d9578}.memory-art{position:relative;width:min(100%,500px);height:530px;margin:auto}.memory-frame{position:absolute;width:240px;height:310px;padding:11px;border:1px solid #dedbd0;border-radius:6px;background:#fffdf8;box-shadow:var(--shadow-md);transform:rotate(var(--rotation))}.memory-frame i{display:block;width:100%;height:100%;border-radius:2px;background:linear-gradient(145deg,#b9b19b,#5d7465 55%,#263f34)}.frame-one{top:30px;left:28px;--rotation:-8deg}.frame-one i{background:linear-gradient(155deg,#d5c49e 0 25%,#788f75 25% 54%,#3d5949 54%)}.frame-two{right:12px;bottom:55px;--rotation:9deg}.frame-two i{background:linear-gradient(140deg,#d0ad82,#b7c1a1 42%,#566e5b 43% 66%,#e0c2a0 67%)}.frame-three{top:122px;right:96px;width:176px;height:220px;--rotation:3deg}.frame-three i{background:linear-gradient(130deg,#787560,#b9a181 48%,#526b5a 49%)}.memory-note{position:absolute;left:45px;bottom:28px;z-index:2;padding:16px 20px;border-radius:2px;background:#f0e4c8;box-shadow:var(--shadow-sm);font-family:Georgia,serif;font-size:1.25rem;line-height:1.1;transform:rotate(-3deg)}.journey-card{width:min(100%,610px);margin:9vh auto;padding:clamp(30px,6vw,62px);border:1px solid #e2e0d6;border-radius:var(--radius-lg);background:#fffdf9;box-shadow:var(--shadow-md)}.journey-card h1{font-size:clamp(2.8rem,5vw,4.4rem)}.pin-card{position:relative}.lock-icon{display:grid;place-items:center;width:44px;height:44px;margin-bottom:28px;border-radius:50%;background:#e6eee3;color:var(--accent);font-size:1.4rem}.quiet-copy{margin:20px 0 0;color:var(--muted);font-size:.8rem}.page-intro{max-width:680px;margin:11vh auto 46px;text-align:center}.page-intro .lede{margin-inline:auto}.member-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px;max-width:960px;margin:auto}.member-card{display:flex;flex-direction:column;align-items:flex-start;min-height:210px;padding:24px;border:1px solid #e1e1d7;border-radius:var(--radius-md);background:#fffdf9;color:var(--text);text-decoration:none;box-shadow:var(--shadow-sm);transition:transform .2s,box-shadow .2s}.member-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}.initial{display:grid;place-items:center;width:54px;height:54px;margin-bottom:auto;border-radius:50%;background:#dfe8dc;color:var(--accent);font-family:Georgia,serif;font-size:1.7rem}.member-card strong{margin-top:22px;font-size:1.05rem}.member-card small{margin-top:10px;color:var(--muted)}.member-card small span{color:var(--accent);font-size:1.1rem}.verify-card{margin-top:5vh}.verify-card>form:not(.camera-form){margin-top:10px}.or{margin:24px 0;color:var(--muted);font-size:.84rem;text-align:center}.camera-panel,.capture-preview{margin:18px 0}.camera-guide{position:relative;overflow:hidden;border-radius:var(--radius-md);background:#1c251f}.camera-guide video,.capture-preview img{display:block;width:100%;max-height:56vh;object-fit:cover}.camera-guide span{position:absolute;top:50%;left:50%;width:45%;height:65%;border:2px solid #f7f3e8b5;border-radius:48%;transform:translate(-50%,-50%);box-shadow:0 0 0 999px #18231a26}.button-row{display:flex;gap:10px}.button-row>*{flex:1}.upload{display:flex!important;align-items:center;justify-content:space-between;min-height:58px;padding:0 16px;border:1px dashed #afbaac;border-radius:var(--radius-sm);background:#f8faf5;color:var(--accent);cursor:pointer}.upload input{display:none}.error{color:var(--danger);font-size:.86rem}.camera-error{margin:12px 0}.handoff{text-align:center}.handoff .lede{margin-inline:auto}.qr-wrap{display:grid;place-items:center;width:230px;height:230px;margin:32px auto 20px;border-radius:22px;background:#fff;box-shadow:0 12px 28px #30352b13}.qr{width:195px;height:195px}.handoff-status{display:flex;align-items:center;justify-content:center;gap:8px;font-weight:700}.pulse{width:8px;height:8px;border-radius:50%;background:#789275;box-shadow:0 0 0 0 #78927580;animation:pulse 1.8s infinite}.mobile-verify{width:min(100%,540px);margin:7vh auto}.mobile-verify .wordmark{margin-bottom:56px}.success-state,.error-state{text-align:center}.success-check,.status{display:grid;place-items:center;width:58px;height:58px;margin:0 auto 22px;border-radius:50%;font-size:1.65rem}.success-check{background:#dcebd9;color:var(--accent)}.status.bad{background:#f4dfdc;color:var(--danger)}.gallery-nav{margin-bottom:66px}.gallery-head{display:flex;justify-content:space-between;align-items:end;gap:28px;margin-bottom:36px}.gallery-head h1{margin:0;font-family:Georgia,serif;font-size:clamp(3rem,5vw,4.8rem);font-weight:400;letter-spacing:-.06em}.gallery-head .lede{margin:8px 0 0}.download-all{white-space:nowrap}.photo-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.photo-card{position:relative;overflow:hidden;border-radius:var(--radius-md);background:#deded5}.photo-open{position:relative;display:block;width:100%;padding:0;border:0;background:none;cursor:pointer}.photo-open img{display:block;width:100%;aspect-ratio:.92;object-fit:cover;transition:transform .4s}.photo-open span{position:absolute;inset:auto 12px 12px auto;padding:7px 10px;border-radius:9px;background:#1e281fba;color:#fff;font-size:.75rem;opacity:0;transform:translateY(4px);transition:.2s}.photo-card:hover img{transform:scale(1.04)}.photo-card:hover .photo-open span{opacity:1;transform:none}.photo-card>a{position:absolute;right:12px;top:12px;padding:7px 10px;border-radius:9px;background:#fffdfaeb;color:var(--accent);font-size:.75rem;text-decoration:none;opacity:0;transition:.2s}.photo-card:hover>a{opacity:1}.empty-state{max-width:520px;margin:12vh auto;text-align:center;color:var(--muted)}.empty-state div{font-family:Georgia,serif;font-size:4rem;color:#7c967a}.empty-state h2{color:var(--text)}dialog{width:min(960px,94vw);padding:16px;border:0;border-radius:var(--radius-md);background:#1d251e;box-shadow:var(--shadow-md)}dialog::backdrop{background:#172017cc}dialog img{display:block;width:auto;max-width:100%;max-height:76vh;margin:auto}.close{float:right;width:38px;height:38px;border:0;border-radius:50%;background:#fff;color:var(--text);font-size:1.5rem;cursor:pointer}.admin-shell{display:grid;grid-template-columns:210px 1fr;min-height:80vh;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;background:var(--surface)}.admin-shell aside{display:flex;flex-direction:column;gap:8px;padding:24px;background:#eef1e9}.admin-shell aside a{padding:10px;color:var(--text);text-decoration:none}.admin-shell .brand{margin-bottom:16px;font-weight:800}.admin-content{padding:34px;overflow:auto}.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-top:28px}.metric{padding:20px;border:1px solid var(--border);border-radius:var(--radius-sm)}.metric strong{display:block;font-size:1.8rem}table{width:100%;border-collapse:collapse;margin:18px 0;text-align:left}th,td{padding:12px 8px;border-bottom:1px solid var(--border);font-size:.92rem}th{color:var(--muted)}.filter{display:flex;gap:8px;align-items:center}.filter input{max-width:300px}@keyframes pulse{70%{box-shadow:0 0 0 9px #78927500}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}@media(max-width:900px){.shell{padding:22px 24px 42px}.hero{grid-template-columns:1fr;gap:18px;min-height:auto;padding:72px 2vw 35px}.hero-copy{max-width:640px}.memory-art{height:385px;width:420px;max-width:100%;transform:scale(.82);transform-origin:top center;margin-bottom:-65px}.gallery-nav{margin-bottom:40px}.photo-grid{grid-template-columns:repeat(3,1fr)}.admin-shell{grid-template-columns:1fr}.admin-shell aside{flex-direction:row;flex-wrap:wrap}.admin-shell .brand{width:100%;margin-bottom:0}}@media(max-width:560px){.shell{padding:18px 18px 34px}.public-nav,.gallery-nav{font-size:.74rem}.public-nav>span:not(.mark),.secure-note{display:none}.hero{padding-top:62px}.hero h1,.journey-card h1,.page-intro h1{font-size:clamp(2.85rem,14vw,4.25rem)}.lede{font-size:1rem}.memory-art{height:315px;transform:scale(.67);margin:-6px auto -100px}.journey-card{margin:5vh auto;padding:30px 24px;border-radius:22px}.member-grid{grid-template-columns:repeat(2,1fr);gap:11px}.member-card{min-height:180px;padding:18px}.gallery-head{display:block;margin-bottom:24px}.download-all{width:100%;margin-top:20px}.photo-grid{grid-template-columns:repeat(2,1fr);gap:9px}.photo-open span,.photo-card>a{opacity:1;transform:none}.photo-card>a{position:static;display:block;background:#fffdf9;text-align:center}.button-row{flex-direction:column}.admin-content{padding:24px 16px}.filter{display:block}.filter input,.filter select{margin-bottom:8px;max-width:none}}
