:root{--ink:#2f2b26;--ink-soft:#6b6459;--ink-faint:#938b7e;--paper:#faf7f2;--card:#fff;--line:#e4ddd1;--accent:#5c5347;--accent-ink:#fff;--ok:#3f6b4f;--warn:#8a5a2b;--err:#93372e;--radius:12px;--shadow:0 1px 2px #2f2b260f, 0 8px 24px #2f2b260f;--serif:Georgia, "Iowan Old Style", "Palatino Linotype", "Times New Roman", serif;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font:16px/1.6 var(--sans);margin:0}h1,h2,h3{font-family:var(--serif);letter-spacing:.01em;font-weight:400}a{color:var(--accent)}.wrap{max-width:640px;margin:0 auto;padding:28px 20px 80px}.wrap-wide{max-width:900px}.memorial{text-align:center;border-bottom:1px solid var(--line);margin-bottom:32px;padding-bottom:28px}.portrait{object-fit:cover;border:5px solid var(--card);width:150px;height:150px;box-shadow:var(--shadow);background:#e8e1d6;border-radius:50%}.memorial h1{margin:20px 0 4px;font-size:2rem;line-height:1.2}.dates{color:var(--ink-faint);font-family:var(--serif);margin:0;font-style:italic}.invitation{max-width:47ch;color:var(--ink-soft);font-family:var(--serif);margin:22px auto 0;font-size:1.05rem}.privacy-note{text-align:center;max-width:52ch;color:var(--ink-faint);margin:-8px auto 32px;font-size:.9rem;line-height:1.6}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:28px 26px}.field{margin-bottom:24px}.field:last-of-type{margin-bottom:8px}label.lbl{margin-bottom:6px;font-size:.95rem;font-weight:600;display:block}.optional{color:var(--ink-faint);font-size:.85rem;font-weight:400}.hint{color:var(--ink-faint);margin:6px 0 0;font-size:.85rem}input[type=text],input[type=email],input[type=password],textarea{width:100%;font:inherit;color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:8px;padding:11px 12px}textarea{resize:vertical;min-height:170px;font-family:var(--serif);font-size:1.02rem}textarea.short{min-height:5.4rem}input[type=text]:focus-visible,input[type=email]:focus-visible,input[type=password]:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible,input[type=file]:focus-visible,input[type=checkbox]:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.picker{border:1px dashed var(--line);background:#fcfaf7;border-radius:8px;padding:16px}.picker .visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}button.pick{color:var(--ink);background:#efefef;border:1px solid #767676;border-radius:4px;padding:5px 12px;font-size:.92rem}button.pick:hover:not(:disabled){filter:none;background:#e2e2e2}.picker .visually-hidden:focus-visible+button{outline:2px solid var(--accent);outline-offset:2px}.filelist{margin:14px 0 0;padding:0;list-style:none}.filelist li{border-top:1px solid var(--line);align-items:center;gap:10px;padding:8px 0;font-size:.9rem;display:flex}.fname{overflow-wrap:anywhere;flex:1;min-width:0}.fsize{color:var(--ink-faint);white-space:nowrap}.bar{background:var(--line);border-radius:3px;flex:0 0 90px;height:6px;overflow:hidden}.bar>span{background:var(--accent);height:100%;transition:width .2s;display:block}.state-done{color:var(--ok)}.state-error{color:var(--err)}.consent{border:1px solid var(--line);background:#fcfaf7;border-radius:8px;margin-top:26px;padding:14px 16px}.consent-line{cursor:pointer;align-items:flex-start;gap:10px;font-size:.93rem;display:flex}.consent-line input{width:18px;height:18px;accent-color:var(--accent);flex:none;margin:2px 0 0}.consent .hint{margin-left:28px}button{font:inherit;cursor:pointer;background:var(--accent);color:var(--accent-ink);border:1px solid #0000;border-radius:8px;padding:11px 20px}button:hover:not(:disabled){filter:brightness(1.1)}button:disabled{opacity:.55;cursor:default}button.ghost{color:var(--accent);border-color:var(--line);background:0 0}button.link{color:var(--accent);background:0 0;border:none;padding:4px 0;text-decoration:underline}button.tiny{padding:4px 10px;font-size:.82rem}.actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;margin-top:26px;display:flex}.notice{border-radius:8px;margin-bottom:20px;padding:12px 14px;font-size:.92rem}.notice-err{color:var(--err);background:#fbeeec}.notice-warn{color:var(--warn);background:#fdf3e6}.notice-info{color:var(--ink-soft);background:#f1f3ef}.center{text-align:center}.thanks h2{margin:0 0 10px;font-size:1.6rem}.thanks p{color:var(--ink-soft);max-width:44ch;margin:0 auto 14px}.footnote{text-align:center;color:var(--ink-faint);margin-top:28px;font-size:.82rem}.review-body{background:#f4f2ee}.review-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 20px;margin-bottom:20px;display:flex}.review-head h1{margin:0;font-size:1.6rem}.counts{color:var(--ink-soft);font-size:.92rem}.warn-count{color:var(--warn)}.head-actions{flex-wrap:wrap;gap:8px;display:flex}.filters{flex-wrap:wrap;gap:8px;margin-bottom:22px;display:flex}.filters button.on,.head-actions button.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.publish-link{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:22px;padding:16px 18px}.publish-link.is-on{border-color:var(--warn)}.publish-link-head{align-items:center;gap:10px;display:flex}.publish-link-head .badge{margin-left:0}.publish-link-note{color:var(--ink-soft);margin:6px 0 12px;font-size:.92rem}.publish-link .notice{margin-bottom:12px}.publish-link-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.publish-link-row input[type=text]{flex:18em;min-width:0}.publish-link button.link.tiny{margin-top:8px}.order-panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:18px;padding:20px 22px 22px}.order-head{margin-bottom:14px}.order-head h2{margin:0;font-size:1.25rem}.order-head .hint{min-height:1.4em}.order-list{counter-reset:none;margin:0;padding:0;list-style:none}.order-row{border:1px solid var(--line);cursor:grab;background:#fcfaf7;border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-bottom:8px;padding:10px 12px;display:flex}.order-row.dragging{opacity:.4}.order-row.over{border-color:var(--accent);box-shadow:inset 0 2px 0 var(--accent)}.grip{color:var(--ink-faint);letter-spacing:-.1em;font-size:1.1rem}.order-num{text-align:right;width:26px;font-family:var(--serif);color:var(--ink-soft);flex:none;font-size:1.05rem}.order-who{min-width:140px;font-family:var(--serif);flex:1;font-size:1.05rem}.order-detail{font-family:var(--sans);color:var(--ink-faint);font-size:.78rem;display:block}.order-moves{gap:6px;margin-left:auto;display:flex}.order-moves button{cursor:pointer}.sub-pos{background:var(--ok);color:#fff;text-align:center;vertical-align:middle;border-radius:20px;min-width:24px;margin-right:8px;padding:1px 6px;font-size:.8rem;display:inline-block}.sub{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:18px;padding:20px 22px}.sub.included{border-left-color:var(--ok)}.collection-head{text-align:center;max-width:52ch;margin:0 auto 28px}.collection-head h2{text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);margin:0 0 8px;font-size:1.05rem}.collection-scope{color:var(--ink-faint);margin:0;font-size:.92rem;line-height:1.6}.collection-scope .badge{margin-left:0}.keepsake{border-left-color:var(--line);padding-bottom:24px}.keepsake .sub-top{margin-bottom:4px}.keepsake .media{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.keepsake .media img,.keepsake .media video{max-height:260px}.sub-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;display:flex}.sub-who{font-family:var(--serif);font-size:1.2rem}.sub-when{color:var(--ink-faint);font-size:.82rem}.badge{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);vertical-align:middle;background:#f1efea;border-radius:20px;margin-left:8px;padding:2px 8px;font-size:.72rem;display:inline-block}.badge-warn{color:var(--warn);background:#fdf3e6}.badge-ok{color:var(--ok);background:#eaf1ec}.toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:.92rem;font-weight:600;display:inline-flex}.toggle input{width:18px;height:18px;accent-color:var(--ok)}.sub-toggles{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.toggle-family input{accent-color:var(--accent)}.sub-msg{font-family:var(--serif);white-space:pre-wrap;overflow-wrap:anywhere;margin:14px 0;font-size:1.05rem}.sub-contact{color:var(--ink-soft);overflow-wrap:anywhere;background:#f7f5f1;border-radius:8px;padding:10px 12px;font-size:.9rem}.media{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;margin:16px 0 0;padding:0;list-style:none;display:grid}.media li{border:1px solid var(--line);background:#fcfaf7;border-radius:8px;padding:10px}.media li.out{opacity:.45}.media img,.media video{object-fit:cover;background:#eee9e0;border-radius:6px;width:100%;max-height:190px;display:block}.media audio{width:100%}.media .doc{height:120px;color:var(--ink-soft);font-family:var(--serif);background:#eee9e0;border-radius:6px;flex-direction:column;justify-content:center;align-items:center;gap:6px;text-decoration:none;display:flex}.media .doc:hover{background:#e6dfd3}.media .doc-kind{font-size:1.05rem}.media .doc-open{font-family:var(--sans);font-size:.8rem;text-decoration:underline}.media .meta{color:var(--ink-faint);overflow-wrap:anywhere;margin-top:8px;font-size:.78rem}.media .save{width:100%;margin-top:8px;padding:5px 10px;font-size:.8rem}.media .toggle{margin-top:6px;font-size:.84rem;font-weight:500}.media .tile{width:100%;color:inherit;cursor:zoom-in;background:0 0;border:none;border-radius:6px;padding:0;display:block;position:relative;overflow:hidden}.media .tile:hover:not(:disabled){filter:none}.media .tile:hover img,.media .tile:hover video{opacity:.88}.media .tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tile-badge{color:#fff;text-shadow:0 1px 6px #0009;pointer-events:none;justify-content:center;align-items:center;font-size:1.6rem;display:flex;position:absolute;inset:0}dialog.viewer{border-radius:var(--radius);color:#f4f0e9;background:#1c1a17;border:none;width:min(1100px,96vw);max-width:none;height:min(860px,92vh);max-height:none;padding:0;overflow:hidden}dialog.viewer::backdrop{background:#14120fd1}dialog.viewer[open]{flex-direction:column;display:flex}.viewer-bar{border-bottom:1px solid #ffffff1f;align-items:center;gap:14px;padding:12px 14px;display:flex}.viewer-name{min-width:0;font-family:var(--serif);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:1rem;overflow:hidden}.viewer-count{color:#f4f0e999;flex:none;font-size:.8rem}.viewer-bar button.ghost{color:#f4f0e9;border-color:#ffffff4d;flex:none}.viewer-stage{flex:1;justify-content:center;align-items:center;min-height:0;padding:14px 56px;display:flex;position:relative}.viewer-media{border-radius:6px;max-width:100%;max-height:100%;display:block}img.viewer-media,video.viewer-media{object-fit:contain}.viewer-frame{background:#fff;border:none;width:100%;height:100%}.viewer-audio{text-align:center;width:min(420px,100%)}.viewer-audio audio{width:100%;margin-top:12px}.viewer-text{width:100%;max-height:100%;color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere;background:#fffdf9;border-radius:6px;margin:0;padding:18px 20px;font-size:.9rem;line-height:1.6;overflow:auto}.viewer-note{text-align:center;color:#f4f0e9bf;max-width:40ch}.viewer-kind{font-family:var(--serif);color:#f4f0e9;margin:0 0 8px;font-size:1.15rem}.viewer-step{color:#f4f0e9;background:#1c1a17b3;border:1px solid #ffffff40;border-radius:50%;width:40px;height:40px;padding:0;font-size:1.6rem;line-height:1;position:absolute;top:50%;transform:translateY(-50%)}.viewer-step.prev{left:8px}.viewer-step.next{right:8px}.note{width:100%;min-height:60px;font-family:var(--sans);margin-top:14px;font-size:.9rem}.unlock{text-align:center;max-width:460px;margin:8vh auto}.unlock .card h2{margin:0 0 10px;font-size:1.5rem}.unlock .card p{color:var(--ink-soft);margin:0 0 14px}site-menu{z-index:50;background:var(--paper);display:block;position:sticky;top:0}.site-menu{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px 14px;min-height:56px;padding:14px 18px;display:flex}.menu-links,.menu-account{flex-wrap:wrap;align-items:center;gap:6px 14px;font-size:.9rem;display:flex}.menu-links a,.menu-account a{color:var(--ink-soft);border-bottom:1px solid #0000;padding:2px 0;text-decoration:none}.menu-links a:hover,.menu-account a:hover{color:var(--accent);border-bottom-color:var(--line)}.menu-links a.on{color:var(--ink);border-bottom-color:var(--accent);font-weight:600}.menu-who{color:var(--ink-faint);text-overflow:ellipsis;white-space:nowrap;max-width:20ch;overflow:hidden}.menu-note{color:var(--warn)}a.menu-login{background:var(--accent);color:var(--accent-ink);box-shadow:var(--shadow);border-bottom:none;border-radius:999px;padding:9px 18px}a.menu-login:hover{color:var(--accent-ink);filter:brightness(1.1);border-bottom-color:#0000}.site-menu button.ghost{background:var(--card);box-shadow:var(--shadow)}.auth-modes{border-bottom:1px solid var(--line);margin-bottom:24px;display:flex;position:relative}button.auth-tab{color:var(--ink-soft);letter-spacing:.02em;background:0 0;border:none;border-radius:0;flex:1;padding:12px 8px 14px;font-size:.95rem;transition:color .18s}button.auth-tab:hover:not(:disabled){filter:none;color:var(--ink)}button.auth-tab.on{color:var(--accent);font-weight:600}button.auth-tab:focus-visible{border-radius:8px 8px 0 0}.auth-tab-ink{background:var(--accent);width:50%;height:2px;transition:transform .22s;position:absolute;bottom:-1px;left:0}.auth-tab-ink.right{transform:translate(100%)}@media (prefers-reduced-motion:reduce){button.auth-tab,.auth-tab-ink{transition:none}}button.google{width:100%;color:var(--ink);border:1px solid var(--line);background:#fff;justify-content:center;align-items:center;gap:10px;font-weight:500;display:flex}button.google:hover:not(:disabled){filter:none;background:#f6f3ee}.google-mark{flex:none}.auth-or{color:var(--ink-faint);align-items:center;gap:12px;margin:18px 0;font-size:.82rem;display:flex}.auth-or:before,.auth-or:after{content:"";background:var(--line);flex:1;height:1px}a.button-link{background:var(--accent);color:var(--accent-ink);border-radius:8px;padding:11px 18px;font-size:.95rem;text-decoration:none;display:inline-block}.roster{border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);width:100%;font-size:.92rem;overflow:hidden}.roster th,.roster td{text-align:left;border-bottom:1px solid var(--line);vertical-align:middle;padding:12px 14px}.roster th{font-family:var(--sans);text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint);background:#faf8f4;font-size:.78rem;font-weight:600}.roster tr:last-child td{border-bottom:none}.roster tr.is-pending td{background:#fdfaf4}.roster-email{color:var(--ink-soft);overflow-wrap:anywhere}.roster td .hint{margin:2px 0 0}.roster select{font:inherit;color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:8px;max-width:100%;padding:7px 9px}.roster select:disabled{opacity:.6}.you{color:var(--ink-faint);text-transform:uppercase;letter-spacing:.04em;background:#f1efe9;border-radius:999px;margin-left:6px;padding:1px 7px;font-size:.72rem;display:inline-block}@media (width<=620px){.site-menu{gap:6px 10px;min-height:44px;padding:10px 12px}.menu-who{display:none}.menu-links,.menu-account{gap:6px 10px;font-size:.85rem}a.menu-login{padding:8px 14px}.roster,.roster tbody,.roster tr,.roster td{width:100%;display:block}.roster thead{display:none}.roster tr{border-bottom:1px solid var(--line);padding:6px 0}.roster tr:last-child{border-bottom:none}.roster td{border-bottom:none;padding:4px 14px}.roster td:first-child{font-family:var(--serif);padding-top:12px;font-size:1.05rem}.roster td:last-child{padding-bottom:12px}}@media (width<=520px){dialog.viewer{border-radius:0;width:100vw;height:100vh}.viewer-stage{padding:8px 8px 56px}.viewer-step{top:auto;bottom:8px;transform:none}.viewer-step.prev{left:25%}.viewer-step.next{right:25%}.order-row{cursor:default}.order-moves{margin-left:34px}.wrap{padding:28px 16px 60px}.card{padding:22px 18px}.memorial h1{font-size:1.7rem}}
