:root{--bg: #0f172a;--surface: #1e293b;--surface-2: #273449;--border: #334155;--text: #f8fafc;--text-muted: #b6c2d4;--accent: #38bdf8;--accent-strong: #0ea5e9;--accent-ink: #04222f;--danger: #dc2626;--tap: 48px;--radius: 16px}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;line-height:1.45;font-size:18px}button{font-family:inherit;cursor:pointer}.app{max-width:1100px;margin:0 auto;padding:0 16px calc(48px + env(safe-area-inset-bottom))}.site-header{padding:20px 4px 8px}.site-title-btn{border:0;background:transparent;padding:0;color:var(--text);font-family:inherit;font-size:1.9rem;font-weight:800;line-height:1.15;letter-spacing:-.01em;cursor:pointer}.site-title-btn:hover,.site-title-btn:focus-visible{color:var(--accent);outline:none}.page-nav{display:grid;grid-template-columns:repeat(auto-fit,minmax(84px,1fr));gap:2px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:4px;margin:4px 4px 12px}.nav-btn{min-height:var(--tap);border:0;border-radius:10px;background:transparent;color:var(--text);font-size:.8rem;font-weight:800;padding:0 2px;white-space:nowrap}.nav-btn.is-active{background:var(--accent);color:var(--accent-ink)}.nav-link{display:flex;align-items:center;justify-content:center;text-decoration:none}.home-wedding-banner{display:flex;align-items:center;gap:14px;margin:28px 0 0;padding:16px 18px;border:1px solid var(--accent);border-radius:var(--radius);background:linear-gradient(135deg,#38bdf824,#1e293b99);color:var(--text);text-decoration:none}.home-wedding-banner:hover{background:linear-gradient(135deg,#38bdf838,#1e293bb3)}.home-wedding-text{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.home-wedding-kicker{color:var(--accent);font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.home-wedding-title{font-size:1.15rem;font-weight:800}.home-wedding-desc{color:var(--text-muted);font-size:.92rem;line-height:1.4}.home-wedding-chevron{color:var(--accent);font-size:1.5rem;font-weight:800;flex-shrink:0}.cta-block{margin:0 0 24px}.home{max-width:760px;margin:0 auto}.home-hero{display:flex;flex-direction:column;align-items:center;gap:18px;padding:4px 4px 0;text-align:center}.home-portrait{margin:0}.home-portrait img{display:block;width:220px;height:auto;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface)}.home-intro{display:flex;flex-direction:column}.home-kicker{margin:0;color:var(--accent);font-weight:800;font-size:.92rem;text-transform:uppercase;letter-spacing:.08em}.home-name{margin:4px 0 0;font-size:2.2rem;font-weight:900;line-height:1.05;letter-spacing:-.02em}.home-lead{margin:14px 0 0;font-size:1.05rem;line-height:1.55}.memories{max-width:900px;margin:0 auto}.memories-header{padding:4px 4px 8px}.memories-title{margin:4px 0 0;font-size:1.6rem;font-weight:800;line-height:1.2}.memories-subtitle{margin:8px 0 0;color:var(--text-muted);font-size:1rem;line-height:1.5}.memories-lead{margin:22px auto 0;max-width:520px}.memories-lead img{display:block;width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface)}.memories-lead figcaption{margin-top:10px;text-align:center;color:var(--text-muted);font-size:.95rem;font-style:italic}.memories-section{margin-top:28px}.memories-section-title{font-size:1.3rem;font-weight:800;margin:0 0 14px;padding-bottom:6px;border-bottom:2px solid var(--border)}.memories-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.memories-figure{margin:0}.memories-figure img{display:block;width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);object-fit:cover}.memories-span{grid-column:1 / -1}.memories-video-grid{display:flex;flex-direction:column;gap:16px;align-items:center}.memories-video{width:100%;max-width:520px;max-height:75vh;height:auto;border-radius:var(--radius);border:1px solid var(--border);background:#000}.memories-trigger{display:block;width:100%;padding:0;border:0;background:none;cursor:zoom-in}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#000000e0;display:flex;align-items:center;justify-content:center;padding:24px}.lightbox-img,.lightbox-video{max-width:95vw;max-height:90vh;width:auto;height:auto;border-radius:var(--radius);box-shadow:0 10px 40px #00000080;cursor:default}.lightbox-video{width:min(95vw,1100px);background:#000}.lightbox-close{position:fixed;top:12px;right:18px;font-size:2.4rem;line-height:1;color:#fff;background:none;border:0;cursor:pointer;padding:8px}.lightbox-nav{position:fixed;top:50%;transform:translateY(-50%);font-size:3rem;line-height:1;color:#fff;background:none;border:0;cursor:pointer;padding:8px 16px;opacity:.8}.lightbox-nav:hover{opacity:1}.lightbox-prev{left:4px}.lightbox-next{right:4px}.home-hub-title{font-size:.8rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-weight:800;margin:0 4px 12px;padding-top:28px;border-top:1px solid var(--border)}.home-hub{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.home-hub-link{width:100%;display:flex;align-items:center;gap:14px;text-align:left;padding:16px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;transition:border-color .12s ease,background .12s ease}.home-hub-link:hover{border-color:var(--accent)}.home-hub-link:active{background:var(--surface-2)}.home-hub-link-content{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.home-hub-link-title{font-size:1.15rem;font-weight:800}.home-hub-link-desc{color:var(--text-muted);font-size:.95rem;line-height:1.4}.home-hub-chevron{color:var(--accent);font-size:1.5rem;font-weight:800;flex-shrink:0}@media(min-width:700px){.home-hero{flex-direction:row;text-align:left;align-items:center;gap:32px}.home-portrait img{width:280px}.home-name{font-size:2.6rem}.home-hub{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.memories-grid{grid-template-columns:repeat(3,1fr);gap:14px}}.hale{max-width:720px;margin:0 auto}.hale-header{padding:4px 4px 8px}.hale-title{margin:4px 0 0;font-size:1.6rem;font-weight:800;line-height:1.2}.hale-subtitle{margin:8px 0 0;color:var(--text-muted);font-size:1rem;line-height:1.5}.hale-section{margin-top:26px}.hale-section-title{font-size:1.15rem;font-weight:800;margin:0 0 6px;padding-bottom:6px;border-bottom:2px solid var(--border)}.hale-section-intro{margin:0 0 12px;color:var(--text-muted);font-size:.95rem;line-height:1.5}.hale-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.hale-item{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.hale-item-text{display:flex;flex-direction:column;gap:4px}.hale-item-name{margin:0;font-size:1.1rem;font-weight:800;line-height:1.25}.hale-item-blurb{margin:0;color:var(--text);font-size:1rem;line-height:1.5}.hale-map-link{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;min-height:var(--tap);padding:0 16px;border-radius:12px;border:1px solid var(--accent);color:var(--accent);background:transparent;text-decoration:none;font-weight:800;font-size:.95rem}.hale-map-link:active{background:#38bdf81f}.hale-footnote{margin:28px 0 8px;color:var(--text-muted);font-size:.85rem;text-align:center}@media(min-width:700px){.hale-title{font-size:2rem}.hale-list{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.hale-item{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:16px}.hale-map-link{align-self:center;white-space:nowrap}}.costco{max-width:720px;margin:0 auto}.costco-header{padding:4px 4px 8px;text-align:center}.costco-kicker{margin:0;color:var(--accent);font-weight:800;font-size:.82rem;text-transform:uppercase;letter-spacing:.08em}.costco-title{margin:4px 0 0;font-size:2.2rem;font-weight:900;line-height:1.05;letter-spacing:-.02em}.costco-subtitle{margin:10px 0 0;color:var(--text-muted);font-size:1rem;line-height:1.5}.costco-banner{margin:18px 0 4px;padding:14px 16px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--accent);text-align:center}.costco-banner p{margin:0;font-size:1.05rem;font-weight:700;font-style:italic;color:var(--accent)}.costco-section{margin-top:26px}.costco-section-title{font-size:1.15rem;font-weight:800;margin:0 0 10px;padding-bottom:6px;border-bottom:2px solid var(--border)}.costco-section-skip .costco-section-title{border-bottom-color:var(--rating-poor)}.costco-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.costco-item{padding:14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.costco-section-skip .costco-item{border-color:#dc262673}.costco-item-name{margin:0;font-size:1.1rem;font-weight:800;line-height:1.25}.costco-item-blurb{margin:4px 0 0;font-size:1rem;line-height:1.5}.costco-rules{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.costco-rule{display:flex;gap:14px;align-items:baseline;padding:14px 16px;border-left:4px solid var(--accent);background:var(--surface);border-radius:0 12px 12px 0;font-size:1.05rem;line-height:1.5}.costco-rule-num{color:var(--accent);font-weight:900;font-size:1.2rem;flex-shrink:0;min-width:1.4em}.costco-rule-text{flex:1}.costco .cta-block{margin-top:28px}@media(min-width:700px){.costco-title{font-size:2.6rem}.costco-list{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.costco .cta-block{max-width:360px;margin-left:auto;margin-right:auto}}.bio{max-width:720px;margin:0 auto}.home .bio{margin-top:36px;padding-top:28px;border-top:1px solid var(--border)}.bio-header{text-align:center;padding:4px 4px 8px}.bio-kicker{margin:0;text-transform:uppercase;letter-spacing:.08em;font-size:.78rem;font-weight:800;color:var(--accent)}.bio-title{margin:6px 0 0;font-size:1.7rem;line-height:1.2;font-weight:800}.bio-byline{margin:8px 0 0;color:var(--text-muted);font-size:1rem;font-style:italic}.bio-figure{margin:18px 0}.bio-figure img{display:block;width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface)}.bio-figure figcaption{margin-top:8px;text-align:center;color:var(--text-muted);font-size:.9rem;font-style:italic}.bio-share{margin:4px 0 8px}.bio-section{margin-top:26px}.bio-section h3{font-size:1.3rem;font-weight:800;margin:0 0 10px;padding-bottom:6px;border-bottom:2px solid var(--border)}.bio-section p{font-size:1.08rem;line-height:1.65;margin:0 0 14px}.bio-list{margin:0 0 14px;padding-left:22px;display:flex;flex-direction:column;gap:12px}.bio-list li{font-size:1.08rem;line-height:1.6}.bio-quote{margin:18px 0;padding:14px 16px;border-left:4px solid var(--accent);background:var(--surface);border-radius:0 12px 12px 0;font-size:1.1rem;line-height:1.6;font-style:italic}.bio-gallery{margin:24px 0 8px;display:grid;grid-template-columns:1fr 1fr;gap:12px}.bio-gallery .bio-figure{margin:0}.bio-span-2{grid-column:1 / -1}.bio-gallery-caption{text-align:center;color:var(--text-muted);font-style:italic;font-size:.95rem;margin:4px 0 8px}@media(min-width:700px){.bio-title{font-size:2.1rem}.bio-inline-right{float:right;width:240px;margin:0 0 12px 20px}.bio-section:after{content:"";display:block;clear:both}}.wedding{max-width:1100px;margin:0 auto}.wedding-header{padding:4px 4px 8px}.wedding-kicker{margin:0;color:var(--accent);font-weight:800;font-size:.8rem;text-transform:uppercase;letter-spacing:.08em}.wedding-title{margin:6px 0 0;font-size:1.9rem;font-weight:800;line-height:1.15}.wedding-subtitle{margin:8px 0 0;color:var(--text-muted);font-size:1rem;line-height:1.55;max-width:640px}.wedding-drop{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;margin:18px 0 8px;padding:28px 18px;border:2px dashed var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text-muted);transition:border-color .12s ease,background .12s ease}.wedding-drop.is-empty{min-height:44vh;justify-content:center}.wedding-drop.is-compact{flex-direction:row;justify-content:space-between;align-items:center;text-align:left;padding:14px 16px}.wedding-drop.is-dragging{border-color:var(--accent);background:var(--surface-2);color:var(--text)}.wedding-drop-title{margin:0;color:var(--text);font-size:1.15rem;font-weight:800}.wedding-drop-hint{margin:8px 0 0;font-size:.95rem;line-height:1.5}.wedding-drop-btn{max-width:320px}.wedding-drop.is-compact .wedding-drop-btn{width:auto;min-width:180px;min-height:var(--tap)}.wedding-drop-input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.wedding-dragveil{position:fixed;top:12px;right:12px;bottom:12px;left:12px;z-index:900;display:flex;align-items:center;justify-content:center;background:#0f172ae0;border:3px dashed var(--accent);border-radius:var(--radius);color:var(--text);font-size:1.4rem;font-weight:800;pointer-events:none}.wedding-status{margin:10px 4px 0;min-height:1.2em;color:var(--text-muted);font-size:.92rem}.wedding-notice{margin:12px 0 0;padding:14px 16px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text-muted)}.wedding-errors{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.wedding-errors li{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--danger);border-radius:12px;background:var(--surface);font-size:.9rem}.wedding-error-name{font-weight:700;word-break:break-all}.wedding-error-msg{flex:1;color:var(--text-muted)}.wedding-error-btn{min-height:var(--tap);padding:0 14px;border:1px solid var(--border);border-radius:12px;background:transparent;color:var(--accent);font-weight:700}.wedding-rows{display:flex;flex-direction:column;margin-top:16px}.wedding-row{display:flex;content-visibility:auto}.wedding-row.is-partial{justify-content:center}.wedding-skeleton{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);margin-bottom:12px}.wedding-tile{position:relative;margin:0;min-width:0;overflow:hidden;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface)}.wedding-tile img{display:block;width:100%;height:100%;object-fit:cover}.wedding-tile.is-pending img{opacity:.55}.wedding-tile.is-failed{border-color:var(--danger)}.wedding-trigger{display:block;width:100%;height:100%;padding:0;border:0;background:none;cursor:zoom-in}.wedding-trigger:focus-visible{outline:3px solid var(--accent);outline-offset:-3px}.wedding-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:54px;height:54px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#0f172ab8;color:#fff;font-size:1.3rem;pointer-events:none}.wedding-tile-progress{position:absolute;left:0;right:0;bottom:0;height:4px;background:#ffffff38}.wedding-tile-progress>span{display:block;height:100%;background:var(--accent);transition:width .2s linear}.wedding-tile-note{position:absolute;left:8px;bottom:8px;padding:3px 8px;border-radius:999px;background:#0f172ac7;color:var(--text-muted);font-size:.72rem}.wedding-solo{margin:20px 0 0}.wedding-solo img{display:block;margin:0 auto;max-width:100%;max-height:78vh;width:auto;height:auto;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface)}.content{padding-top:16px}.cta.cta-secondary{background:transparent;border:1px solid var(--accent);color:var(--accent);min-height:52px}.cta.cta-secondary:active{background:#38bdf81f}.cta{display:flex;align-items:center;justify-content:center;min-height:56px;width:100%;border-radius:14px;background:var(--accent);color:var(--accent-ink);font-size:1.15rem;font-weight:800;text-decoration:none}.cta:active{background:var(--accent-strong)}@media(min-width:700px){body{font-size:17px}.site-title{font-size:2.4rem}.cta-block{max-width:360px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
