:root{color:#1d2522;background:#111614;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;--mixtape-bg: #111614;--mixtape-bg-soft: #18201d;--mixtape-panel: #1c2724;--mixtape-panel-strong: #23312d;--mixtape-border: #344741;--mixtape-text: #f7f3ea;--mixtape-muted: #bec9c2;--mixtape-subtle: #8fa19a;--mixtape-primary: #1f8b78;--mixtape-primary-hover: #27a58e;--mixtape-cyan: #53f3ff;--mixtape-cream: #f4ead4;--mixtape-yellow: #f0d573;--mixtape-blue: #8fc8e6;--mixtape-coral: #e79284;--mixtape-green: #9fc7a7}@font-face{font-family:Wedding Autography;src:url(/assets/Autography-v1ynM3C8.otf) format("opentype");font-weight:400}@font-face{font-family:Wedding Montserrat;src:url(/assets/Montserrat-Bold-D4JCkd3k.ttf) format("truetype");font-weight:700}@font-face{font-family:Wedding Montserrat;src:url(/assets/Montserrat-Italic-BClKdKAZ.ttf) format("truetype");font-style:italic}@font-face{font-family:Wedding Playfair;src:url(/assets/PlayfairDisplay-Regular-cAkczocX.ttf) format("truetype");font-weight:400}*{box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}body{margin:0;min-width:320px;min-height:100vh;background:radial-gradient(circle at 18% 0%,rgba(83,243,255,.12),transparent 26rem),linear-gradient(135deg,#111614,#171d1b 48%,#101413)}button,input,textarea,select{font:inherit}button,.icon-link{min-height:44px;border:0;border-radius:8px;background:var(--mixtape-primary);color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 14px;text-decoration:none;white-space:nowrap;transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease,transform .12s ease}button:hover,.icon-link:hover{background:var(--mixtape-primary-hover)}button:active,.icon-link:active{transform:translateY(1px)}button:focus-visible,.icon-link:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible,.bottom-nav a:focus-visible,.bottom-nav button:focus-visible{outline:3px solid rgba(83,243,255,.72);outline-offset:3px}button:disabled{cursor:wait;opacity:.65}button svg,.icon-link svg{width:18px;height:18px;flex:0 0 auto}input,textarea,select{width:100%;border:1px solid #c7cec9;border-radius:8px;background:#fff;color:#18211e;padding:12px}textarea{min-height:96px;resize:vertical}label{display:grid;gap:6px;color:#4a5752;font-size:.92rem}h1,h2,h3,p{margin-top:0}.shell{width:min(100%,520px);min-height:100vh;margin:0 auto;padding:18px;display:grid;align-items:center}.shell-public{width:min(100%,760px);align-content:start;align-items:start;color:var(--mixtape-text);gap:16px;padding-bottom:calc(88px + env(safe-area-inset-bottom))}.shell-main{width:100%;display:grid;align-items:center;min-height:calc(100vh - 158px - env(safe-area-inset-bottom))}.shell-compact{width:min(100%,520px);gap:6px;padding:12px 10px 10px;padding-bottom:calc(76px + env(safe-area-inset-bottom))}.shell-minimal{padding-bottom:18px}.shell-minimal .shell-main{min-height:calc(100vh - 86px);place-items:center}.shell-wide{width:min(100%,1180px);align-items:start;color:var(--mixtape-text);gap:20px}.public-header{width:100%;position:relative;z-index:4;display:flex;align-items:center;justify-content:center;gap:12px;min-height:54px;padding:8px 0}.wordmark-link{color:inherit;text-decoration:none}.wedding-wordmark{display:inline-block;color:#fff;font-family:Wedding Autography,Wedding Playfair,Georgia,serif;font-size:clamp(2.6rem,10vw,4.4rem);font-weight:400;line-height:.8;letter-spacing:0;text-shadow:0 0 2px var(--mixtape-cyan),0 0 12px rgba(83,243,255,.74),0 4px 16px rgba(0,0,0,.58);transform:rotate(-2deg);-webkit-text-stroke:.6px var(--mixtape-cyan)}.header-action{position:absolute;right:0;width:34px;min-width:34px;min-height:34px;border:1px solid rgba(83,243,255,.18);border-radius:999px;background:#1c272499;color:var(--mixtape-muted);display:inline-flex;justify-content:center;gap:0;padding:0;font-size:.78rem;font-weight:800}.header-action:hover{background:#53f3ff1a;color:var(--mixtape-text);border-color:#53f3ff52}.header-action svg{width:16px;height:16px}.header-action span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.bottom-nav{position:fixed;z-index:20;left:50%;bottom:0;width:min(100%,560px);transform:translate(-50%);display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px;padding:8px 10px calc(8px + env(safe-area-inset-bottom));border-top:1px solid rgba(83,243,255,.18);background:#101615f5;box-shadow:0 -18px 34px #00000047;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.bottom-nav-item{min-width:0;min-height:52px;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--mixtape-subtle);display:grid;gap:3px;justify-items:center;align-content:center;padding:5px 4px;text-align:center;text-decoration:none;white-space:normal;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.bottom-nav-item:hover{background:#53f3ff14;color:var(--mixtape-text)}.bottom-nav-item svg{width:20px;height:20px}.bottom-nav-item span{font-size:.72rem;font-weight:800;line-height:1}.bottom-nav-active{background:#1f8b7838;border-color:#53f3ff3d;color:var(--mixtape-text);box-shadow:inset 0 0 0 1px #53f3ff14}.bottom-nav-active svg{color:var(--mixtape-cyan)}.auth-panel,.editor-panel,.list-panel,.import-panel{background:#fff;border:1px solid #dde2df;border-radius:8px;color:#1d2522;padding:18px;box-shadow:0 10px 30px #222d2814}.shell-public .auth-panel,.home-panel{background:linear-gradient(180deg,#23312df0,#192320fa),var(--mixtape-panel);border:1px solid var(--mixtape-border);color:var(--mixtape-text);box-shadow:0 18px 48px #00000047,inset 0 1px #ffffff0a}.shell-public label{color:var(--mixtape-muted)}.shell-public input,.shell-public textarea,.shell-public select{border-color:var(--mixtape-border);background:#101615;color:var(--mixtape-text)}.auth-panel{display:grid;gap:18px;text-align:center}.auth-panel>svg{width:42px;height:42px;color:var(--mixtape-cyan);justify-self:center}.auth-panel h1{margin-bottom:0;font-size:2rem;letter-spacing:0}.auth-panel form,.card-form{display:grid;gap:14px}.password-field{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.password-toggle{min-height:0;padding:0 12px;background:#43514d;color:var(--mixtape-text)}.password-toggle:hover{background:#53645f}.home-panel{display:grid;gap:18px;padding:22px 18px;border-radius:8px;text-align:center;align-self:center}.home-panel>svg{width:46px;height:46px;color:var(--mixtape-cyan);justify-self:center}.home-copy{display:grid;gap:8px}.home-copy h1{margin-bottom:0;font-size:2.1rem;letter-spacing:0;color:var(--mixtape-text)}.home-copy p,.home-status{margin-bottom:0;color:var(--mixtape-muted);line-height:1.45}.home-status{padding:12px;border:1px solid rgba(83,243,255,.24);border-radius:8px;background:#53f3ff14;font-weight:700}.home-actions{display:grid;gap:10px}.instructions-panel{text-align:left}.instructions-panel>svg,.instructions-panel .home-copy{justify-self:center;text-align:center}.instructions-actions{width:100%}.instructions-overview{display:grid;gap:8px;padding:14px;border:1px solid var(--mixtape-border);border-radius:8px;background:#1016159e}.instructions-overview p,.instructions-overview ul,.instructions-section-content p,.instructions-section-content ul,.troubleshooting-item p{margin-bottom:0}.instructions-overview p{font-weight:800}.instructions-overview ul,.instructions-section-content ul{padding-left:20px}.instructions-overview li,.instructions-section-content li{margin:6px 0}.instructions-sections{display:grid;gap:10px}.instructions-section{border:1px solid var(--mixtape-border);border-radius:8px;background:#101615b3;overflow:hidden}.instructions-section summary{cursor:pointer;padding:14px;color:var(--mixtape-text);font-weight:800;list-style-position:inside}.instructions-section summary:hover{background:#53f3ff14}.instructions-section[open] summary{border-bottom:1px solid var(--mixtape-border);background:#53f3ff14}.instructions-section-content{display:grid;gap:14px;padding:14px;color:var(--mixtape-muted);line-height:1.45}.instructions-section-content h2{margin-bottom:-4px;color:var(--mixtape-text);font-size:1rem}.instructions-note{margin-bottom:0;padding:12px;border:1px solid var(--mixtape-border);border-radius:8px;background:#f4ead414;color:var(--mixtape-muted);line-height:1.45}.troubleshooting-item{display:grid;gap:6px}code{border-radius:4px;background:#8fc8e629;color:var(--mixtape-cream);padding:1px 4px}.scanner-layout{display:grid;gap:10px}.scanner-frame{width:100%;aspect-ratio:3 / 4;border-radius:8px;overflow:hidden;background:#101816;border:1px solid var(--mixtape-border);box-shadow:0 12px 30px #00000052}.scanner-frame video{width:100%;height:100%;object-fit:cover}.status{min-height:56px;border-radius:8px;background:linear-gradient(180deg,#23312deb,#1a2421fa),var(--mixtape-panel);border:1px solid var(--mixtape-border);color:var(--mixtape-text);display:grid;gap:10px;justify-items:center;align-content:center;padding:14px;text-align:center;font-weight:700;box-shadow:inset 0 1px #ffffff0a}.spotify-action-row{width:100%;display:grid;grid-template-columns:1fr;gap:10px}.chip-button{min-height:40px;border:1px solid rgba(83,243,255,.2);border-radius:999px;background:#43514db3;color:var(--mixtape-muted);padding:8px 11px;font-size:.84rem;font-weight:800}.chip-button:hover{background:#53f3ff1f;color:var(--mixtape-text);border-color:#53f3ff52}.scanner-actions{display:grid;gap:8px}.scanner-action-row{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.scanner-action-button{flex:1 1 150px;min-width:0}.scanner-action-button[aria-expanded=true]{border-color:#53f3ff57;color:var(--mixtape-text)}.scanner-action-secondary{flex-basis:auto;font-size:.8rem}.manual-code-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.manual-code-row label{min-width:0}.manual-code-row input{min-height:42px;padding:9px 10px}.manual-code-row button{min-height:42px;padding:8px 12px}.button-secondary{background:#43514d}.button-secondary:hover{background:#53645f}.button-primary{background:var(--mixtape-primary)}.button-primary:hover{background:var(--mixtape-primary-hover)}.camera-hint{margin:0;color:var(--mixtape-muted);font-size:.9rem;line-height:1.45}.scanner-debug{margin:0;display:grid;gap:6px;border:1px solid var(--mixtape-border);border-radius:8px;background:var(--mixtape-panel);padding:12px;color:var(--mixtape-muted);font-size:.78rem}.scanner-debug div{display:grid;grid-template-columns:82px minmax(0,1fr);gap:8px}.scanner-debug dt{font-weight:800;color:var(--mixtape-text)}.scanner-debug dd{margin:0;min-width:0;overflow-wrap:anywhere}.shell-compact .public-header{min-height:44px;padding:4px 0 0}.shell-compact .wedding-wordmark{font-size:clamp(2.1rem,9vw,3rem)}.shell-compact .status{min-height:48px;padding:10px}.shell-compact .camera-hint{font-size:.82rem}@media(min-width:761px){.shell-public{width:min(100%,860px)}.shell-compact{width:min(100%,560px)}.bottom-nav{width:min(100%,620px)}.home-actions{grid-template-columns:repeat(2,minmax(0,auto));justify-content:center}.home-actions button,.home-actions .icon-link{width:auto}}.admin-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:10px}.admin-header-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.admin-header h1{margin-bottom:0}.eyebrow{margin-bottom:4px;color:#8a4f34;font-size:.78rem;font-weight:800;letter-spacing:0;text-transform:uppercase}.admin-grid{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);gap:16px;align-items:start}.import-panel{grid-column:1 / -1;display:grid;gap:12px}.toolbar{display:flex;align-items:end;gap:10px;justify-content:flex-end;margin-bottom:12px}.qr-target-switch{width:min(100%,260px)}.admin-filters{display:grid;grid-template-columns:minmax(180px,1fr) repeat(3,minmax(130px,180px));gap:10px;margin-bottom:12px}.admin-table-shell{border:1px solid #dde2df;border-radius:8px;overflow:hidden}.admin-table-scrollbar{overflow-x:auto;overflow-y:hidden;background:#fff;border-bottom:1px solid #dde2df}.admin-table-wrap{height:clamp(320px,calc(100vh - 285px),680px);overflow-x:hidden;overflow-y:auto}.admin-card-table{width:100%;border-collapse:separate;border-spacing:0;min-width:1060px}.admin-card-table th,.admin-card-table td{border-bottom:1px solid #dde2df;padding:10px;text-align:left;vertical-align:middle}.admin-card-table th{position:sticky;top:0;z-index:2;background:#fff;color:#4a5752;font-size:.78rem;text-transform:uppercase}.admin-card-table th:first-child,.admin-card-table td:first-child{position:sticky;left:0;width:104px;min-width:104px;max-width:104px;background:#fff;box-shadow:1px 0 #dde2df}.admin-card-table th:first-child{z-index:4}.admin-card-table td:first-child{z-index:1}.admin-card-table td.empty-table{position:static;width:auto;min-width:0;max-width:none;box-shadow:none}.admin-card-table tr.inactive-card-row td{background:#f3f5f2;color:#7a847f}.admin-card-table tr.inactive-card-row td:first-child{background:#f3f5f2}.admin-card-table tr.inactive-card-row .code{color:#679085}.admin-card-table tr.inactive-card-row .card-thumbnail{filter:grayscale(1);opacity:.55}.table-actions{display:grid;grid-template-columns:repeat(2,36px);gap:6px;width:max-content}.table-action-button{width:36px;min-width:36px;min-height:36px;height:36px;padding:0}.table-action-button.toggle-active{background:#1f6f5c}.table-action-button.toggle-active:hover{background:#185849}.table-action-button.toggle-inactive{background:#7b8580}.table-action-button.toggle-inactive:hover{background:#606a65}.empty-table{color:#68746f;text-align:center}.card-list{display:grid;gap:10px}.card-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;border:1px solid #dde2df;border-radius:8px;padding:12px;background:#fbfcfb}.card-item h3{margin-bottom:4px;line-height:1.25}.card-item h3 span{color:#68746f;font-size:.92rem;font-weight:600}.card-item p{margin-bottom:0;color:#596660}.code{margin-bottom:5px;color:#1f6f5c;font-size:.78rem;font-weight:800;letter-spacing:0}.actions{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:8px}.actions button,.actions .icon-link{min-width:44px}.danger{background:#a0443f}.danger:hover{background:#7d332f}.qr-preview{width:88px;height:88px;border-radius:4px;border:1px solid #dde2df}.switch{grid-template-columns:auto 1fr;align-items:center}.switch input{width:22px;height:22px}.notice{margin:10px 0 0;color:#1f6f5c;font-weight:700}.warning{color:#a0443f}.card-render{position:relative;flex:0 0 auto;overflow:hidden;background:#fff;color:#000;transform-origin:top left}.card-background{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;-webkit-user-select:none;user-select:none}.card-safe-area{position:absolute;left:70px;top:70px;width:628px;height:1006px}.card-song-block,.card-dedication-block{position:absolute;left:0;width:100%;display:grid;align-content:center}.card-song-block{top:0;height:503px;text-align:center}.card-song-block-dedicated{height:452px}.card-dedication-block{bottom:0;height:503px;align-content:center;gap:1.5em}.card-artist{height:90px;font-family:Wedding Montserrat,sans-serif;font-weight:700;overflow:hidden}.card-year{height:250px;font-family:Wedding Playfair,serif;font-feature-settings:"lnum";overflow:visible;text-shadow:5px 7px 2px rgba(0,0,0,.36),5px 7px 8px rgba(0,0,0,.65)}.card-title{height:85px;font-family:Wedding Montserrat,sans-serif;font-style:italic;overflow:hidden}.card-dedication-text,.card-dedicated-by{font-family:Wedding Montserrat,sans-serif;font-style:italic;overflow:hidden}.card-dedication-text{max-height:360px;text-align:left;white-space:pre-wrap}.card-dedicated-by{max-height:70px;text-align:right}.card-back-qr{position:absolute;object-fit:contain}.card-back-code{position:absolute;left:370px;width:90px;bottom:70px;font-family:Wedding Montserrat,sans-serif;font-size:18px;font-weight:700;color:#f2eee6;letter-spacing:0;text-align:center;text-shadow:0 1px 3px rgba(0,0,0,.55)}.card-thumbnail{width:77px;height:115px;overflow:hidden;border:1px solid #dde2df;border-radius:4px;background:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;padding:18px;background:#121c188f}.preview-modal{width:min(100%,860px);max-height:calc(100vh - 36px);overflow:auto;border-radius:8px;border:1px solid #dde2df;background:#fff;color:#1d2522;padding:18px}.confirm-modal{width:min(100%,420px);border-radius:8px;border:1px solid #dde2df;background:#fff;padding:18px;box-shadow:0 18px 50px #121c182e}.confirm-modal h2{margin-bottom:8px}.confirm-modal p{color:#4a5752}.delete-card-summary{display:grid;gap:4px;margin:14px 0;border:1px solid #dde2df;border-radius:8px;background:#f7f5ef;padding:12px}.delete-card-summary strong{color:#1f6f5c}.confirm-modal-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.preview-modal-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.preview-actions{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 16px}.preview-modal-grid{display:grid;grid-template-columns:repeat(2,323px);gap:16px}.preview-card-frame{width:323px;height:482px;overflow:hidden;border:1px solid #dde2df;border-radius:6px;background:#f7f5ef}.export-host,.draft-measure-host{position:fixed;left:-10000px;top:0;width:768px;height:1146px;overflow:hidden;pointer-events:none;opacity:0}.export-host{opacity:1}@media(max-width:760px){.shell{padding:14px}.shell-public{gap:10px;padding-bottom:calc(84px + env(safe-area-inset-bottom))}.shell-minimal{padding-bottom:14px}.shell-compact{padding:10px 8px calc(74px + env(safe-area-inset-bottom));gap:4px}.shell-compact .scanner-layout{gap:7px}.shell-compact .public-header{min-height:40px;padding:3px 0 0}.shell-compact .header-action{min-height:32px;padding:5px 8px}.shell-compact .scanner-frame{max-height:min(52svh,430px)}.shell-compact .spotify-action-row{gap:8px}.shell-compact .spotify-action-row button{min-height:42px;padding:8px 10px}.shell-compact .manual-code-row button{min-height:42px}.home-actions{justify-items:center}.home-actions .icon-link,.home-actions button{width:min(100%,320px)}.manual-code-row{grid-template-columns:minmax(0,1fr) auto;min-width:0;width:100%}.scanner-action-button{flex-basis:138px}.admin-header{align-items:flex-start;flex-direction:column}.admin-header-actions,.admin-header-actions button{width:100%}.admin-grid,.admin-filters,.card-item{grid-template-columns:1fr}.qr-preview{width:112px;height:112px}.preview-modal-grid{grid-template-columns:1fr}}
