@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap');:root{--accent:#ff3f80;--accent2:#9d4edd;--bg:#100d14;--card:#1d1724;--text:#fff;--muted:#c4bacb;--border:#493c51;font-family:Manrope,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0}button,input,textarea{font:inherit}a{color:inherit;text-decoration:none}.eyebrow{font-size:10px;font-weight:800;letter-spacing:.22em;color:var(--accent);text-transform:uppercase}.muted{color:var(--muted);line-height:1.6}.btn{display:inline-flex;justify-content:center;align-items:center;gap:8px;padding:12px 17px;border-radius:12px;border:1px solid var(--border);font-weight:800;font-size:13px;cursor:pointer;color:var(--text);background:transparent}.btn.primary{border:0;background:linear-gradient(110deg,var(--accent),var(--accent2));box-shadow:0 8px 25px #ff3f802b}.btn.secondary{background:#ffffff08}.btn.full{width:100%}.flash{padding:12px 15px;border-radius:12px;margin:12px 0;font-size:13px}.flash.error{background:#ff4d6d1b;border:1px solid #ff4d6d66}.flash.success{background:#39d98a1b;border:1px solid #39d98a66}
/* guest upload */.guest-body{min-height:100dvh;background:radial-gradient(ellipse at 85% 0,#702b6044,transparent 42%),radial-gradient(ellipse at 5% 70%,#f36c3619,transparent 35%),var(--bg);color:var(--text);padding:28px 18px;display:grid;place-items:center}.guest-wrap{width:min(100%,520px);margin:auto}.guest-mark{margin-top:35px;width:52px;height:52px;border:1px solid #ff3f8066;border-radius:18px;display:grid;place-items:center;color:var(--accent);font-size:27px;box-shadow:0 0 45px #ff3f8020}.guest-wrap h1{font-size:clamp(31px,7vw,50px);line-height:1;letter-spacing:-.07em;margin:22px 0 12px}.guest-subtitle{font-size:18px;font-weight:700;line-height:1.4;max-width:440px}.guest-wrap>.muted{font-size:14px;margin:24px 0}.upload-card,.success-card{background:linear-gradient(145deg,#ffffff0c,#ffffff04);border:1px solid var(--border);border-radius:22px;padding:18px;box-shadow:0 24px 90px #0003}.file-drop{min-height:165px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px dashed #ff3f8077;background:#ff3f800a;border-radius:16px;position:relative;text-align:center;cursor:pointer;padding:18px}.file-drop input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.file-drop .plus{font-size:32px;color:var(--accent)}.file-drop strong{font-size:15px}.file-drop small{font-size:11px;color:var(--muted)}.consent{display:flex;gap:10px;align-items:flex-start;margin:18px 2px;font-size:11px;line-height:1.55;color:var(--muted)}.consent input{accent-color:var(--accent);margin-top:3px}.guest-footer{margin-top:26px;font-size:9px;letter-spacing:.18em;color:var(--muted);display:flex;align-items:center;gap:8px}.pulse,.status-pill i{width:7px;height:7px;border-radius:50%;background:#45e3a2;box-shadow:0 0 12px #45e3a2;display:inline-block}.success-card{margin-top:24px;text-align:center;padding:28px 20px}.success-icon{margin:auto;width:48px;height:48px;border-radius:50%;display:grid;place-items:center;background:#45e3a21c;color:#45e3a2;font-size:24px}.success-card h2{font-size:22px}.success-card p{color:var(--muted);font-size:13px;line-height:1.6}
/* admin */.admin-body{background:#0e0b12;color:#f8f3fb;min-height:100vh}.admin-shell{display:grid;grid-template-columns:245px minmax(0,1fr);min-height:100vh}.sidebar{border-right:1px solid #ffffff12;padding:23px 14px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;background:#100d15}.brand{display:flex;align-items:center;gap:12px;padding:0 10px 26px;border-bottom:1px solid #ffffff12}.brand-symbol{width:40px;height:40px;border-radius:13px;background:linear-gradient(140deg,var(--accent),var(--accent2));display:grid;place-items:center;font-size:24px}.brand b,.brand small{display:block}.brand b{font-size:13px;letter-spacing:.14em}.brand small{font-size:8px;color:var(--muted);letter-spacing:.16em;margin-top:3px}.sidebar nav{display:grid;gap:5px;margin-top:22px}.nav-item{display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:10px;color:#b9aebf;font-size:12px;font-weight:700}.nav-item>span{font-size:16px;width:18px}.nav-item.active{background:linear-gradient(90deg,#ff3f8020,#9d4edd17);color:white;border:1px solid #ff3f8028}.nav-item em{font-style:normal;margin-left:auto;font-size:10px;background:#ffffff12;padding:3px 7px;border-radius:8px}.sidebar-bottom{margin-top:auto;display:grid;gap:12px;padding:18px 10px 0;border-top:1px solid #ffffff12;font-size:11px;color:var(--muted)}.sidebar-bottom button{background:none;border:0;color:var(--muted);padding:0;text-align:left;cursor:pointer}.admin-main{min-width:0;padding:27px clamp(15px,3vw,42px) 18px;max-width:1700px;width:100%;margin:auto}.topbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:26px}.topbar h1{font-size:clamp(24px,3vw,34px);letter-spacing:-.06em;margin:8px 0 0}.status-pill{white-space:nowrap;border:1px solid #45e3a233;background:#45e3a20c;padding:8px 10px;border-radius:20px;font-size:9px;letter-spacing:.1em;color:#a6f5d2}.status-pill i{margin-right:6px}.stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-bottom:20px}.stat-card{border:1px solid var(--border);background:linear-gradient(145deg,#211929,#15111b);border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:8px;min-width:0}.stat-card span{color:var(--muted);font-size:12px}.stat-card b{font-size:36px;letter-spacing:-.06em}.stat-card small{font-size:10px;color:var(--accent)}.panel{background:#17121d;border:1px solid #ffffff12;border-radius:17px;padding:20px;margin-bottom:17px;min-width:0}.panel h2{font-size:17px;letter-spacing:-.03em;margin:0 0 8px}.panel h3{font-size:13px;margin:24px 0 12px}.panel p{font-size:12px}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:18px}.panel-head p{color:var(--muted);margin:0}.qr-row{display:flex;align-items:center;gap:20px}.admin-qr{width:120px;height:120px;background:white;border-radius:10px;padding:7px}.qr-row b{font-size:12px;overflow-wrap:anywhere}.qr-row a{font-size:12px;color:#ff80ad}.count-badge{font-size:11px;background:#ffffff0b;border:1px solid var(--border);border-radius:9px;padding:8px 10px;white-space:nowrap}.photo-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.photo-card{min-width:0;overflow:hidden;border:1px solid #ffffff14;border-radius:13px;background:#100d14}.photo-thumb{height:210px;background:#09070c;display:grid;place-items:center;overflow:hidden}.photo-thumb img{width:100%;height:100%;object-fit:cover}.photo-meta{padding:10px;display:grid;gap:5px}.photo-meta b{font-size:11px;overflow-wrap:anywhere}.photo-meta small{font-size:9px;color:var(--muted);overflow-wrap:anywhere}.photo-meta details{font-size:10px;color:var(--muted)}pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:10px;color:#e5cde8}.photo-actions{padding:0 9px 10px;display:flex;gap:5px;flex-wrap:wrap}.photo-actions form{margin:0}.mini{border:1px solid #ffffff1b;background:#ffffff08;color:#eee4f3;border-radius:7px;padding:6px 8px;font-size:9px;cursor:pointer}.mini.good{background:#45e3a219;border-color:#45e3a244}.mini.danger{color:#ff829b}.mini:disabled{opacity:.35}.empty-state{text-align:center;padding:38px;color:var(--muted);grid-column:1/-1}.empty-state span{font-size:34px;color:var(--accent)}.empty-state h3{color:white}.settings-form{display:grid;gap:17px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.form-grid label,.login-card label{display:grid;gap:7px;font-size:11px;color:#d9cddd;font-weight:700}.form-grid input:not([type=color]),.form-grid textarea,.login-card input{width:100%;border:1px solid var(--border);border-radius:9px;padding:11px;background:#0e0b12;color:white;outline:none}.form-grid input[type=color]{width:100%;height:40px;border:1px solid var(--border);border-radius:9px;background:#0e0b12;padding:4px}.form-grid textarea{resize:vertical}.toggle-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.toggle{display:flex;align-items:center;gap:10px;border:1px solid #ffffff13;border-radius:10px;padding:12px;background:#ffffff04;font-size:11px;color:#e7ddea}.toggle input{accent-color:var(--accent);width:16px;height:16px}.radio-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.radio-cards label{display:flex;flex-direction:column;gap:7px;border:1px solid var(--border);padding:13px;border-radius:11px;font-size:11px;cursor:pointer}.radio-cards input{accent-color:var(--accent)}.radio-cards small{color:var(--muted);line-height:1.5}.save-btn{justify-self:start;min-width:200px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:10px;min-width:650px}th,td{text-align:left;vertical-align:top;padding:11px;border-bottom:1px solid #ffffff10}th{color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.1em}td details summary{cursor:pointer;color:#ff8db5}.tech-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.tech-grid div{display:grid;gap:7px;background:#ffffff05;border:1px solid #ffffff12;border-radius:10px;padding:13px;min-width:0}.tech-grid span{font-size:10px;color:var(--muted)}.tech-grid b{font-size:11px;overflow-wrap:anywhere}.warning-box{padding:15px;border:1px solid #f3aa4b44;background:#f3aa4b0b;border-radius:11px;margin-top:15px}.warning-box b{font-size:12px}.warning-box p{color:#d3c7d7;line-height:1.7}.admin-drop{max-width:600px}.admin-footer{display:flex;justify-content:space-between;gap:12px;padding:20px 2px;color:#786b80;font-size:9px;letter-spacing:.12em}.login-card{width:min(420px,calc(100% - 32px));margin:10vh auto;background:#17121d;border:1px solid var(--border);border-radius:22px;padding:30px;box-shadow:0 25px 100px #0006}.login-card h1{font-size:42px;line-height:.9;letter-spacing:-.08em}.login-card h1 span{color:var(--accent)}.login-card p,.login-card small{font-size:12px;line-height:1.6;color:var(--muted)}.login-card form{display:grid;gap:18px;margin:24px 0}.login-card small{display:block}.guest-url{overflow-wrap:anywhere}
/* LED / OBS story stage */.screen-body{margin:0;width:100vw;height:100vh;overflow:hidden;background:#08070a;color:white;position:relative}.screen-body.transparent{background:transparent}.bg-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.screen-shade{position:absolute;inset:0;background:linear-gradient(90deg,#07050b30,transparent 30%,transparent 70%,#07050b30);pointer-events:none}.screen-shade.vignette{box-shadow:inset 0 0 100px 25px #08040d9c}.screen-grid{position:absolute;inset:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(22px,4vw,90px);padding:3.4vh 5.3vw;align-items:center}.story-panel{height:93%;min-width:0;display:flex;justify-content:center;align-items:center}.story-card{height:100%;aspect-ratio:9/16;max-width:100%;position:relative;border-radius:clamp(12px,1.3vw,25px);overflow:hidden;background:linear-gradient(150deg,#261a30,#100d14 70%);border:1px solid #ffffff27;box-shadow:0 20px 80px #0006;display:flex;flex-direction:column}.story-head{display:flex;align-items:center;gap:9px;padding:13px 12px 8px;position:absolute;z-index:3;top:0;left:0;right:0;background:linear-gradient(#07050bbd,transparent)}.avatar{width:27px;height:27px;border:1px solid #fff9;border-radius:50%;background:linear-gradient(135deg,#f8a34c,var(--accent),var(--accent2));display:grid;place-items:center;font-size:12px;font-weight:800;flex:none}.handle-wrap{display:flex;flex-direction:column;min-width:0;gap:2px}.handle-wrap b{font-size:clamp(7px,.65vw,12px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.handle-wrap .age{font-size:clamp(6px,.55vw,10px);color:#ffffffb8}.live-dot{margin-left:auto;width:5px;height:5px;border-radius:50%;background:#ff436e;box-shadow:0 0 10px #ff436e}.progress-bars{position:absolute;z-index:4;top:6px;left:7px;right:7px;display:flex;gap:3px;height:2px}.progress-seg{height:100%;flex:1;background:#ffffff54;border-radius:3px;overflow:hidden;position:relative}.progress-seg.done{background:#fff}.progress-seg.current:after{content:"";position:absolute;inset:0;background:#fff;transform-origin:left;animation:progress var(--seg-duration,7s) linear forwards}@keyframes progress{from{transform:scaleX(0)}to{transform:scaleX(1)}}.story-image-wrap{position:absolute;inset:0}.story-image{width:100%;height:100%;object-fit:cover;display:none}.story-image-wrap:after{content:"";position:absolute;inset:35% 0 0;background:linear-gradient(transparent,#08050b55)}.empty-story{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;font-weight:800;font-size:clamp(17px,2vw,38px);letter-spacing:.15em;background:radial-gradient(ellipse at 50% 40%,#9d4edd28,transparent 60%)}.empty-story small{font-size:.35em;letter-spacing:.3em;color:var(--accent);margin-top:9px}.story-bottom{position:absolute;z-index:4;bottom:9px;left:8px;right:8px;display:flex;align-items:center;gap:5px}.reply-pill{flex:1;min-width:0;border:1px solid #ffffff80;border-radius:30px;padding:7px 10px;font-size:clamp(6px,.52vw,10px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:#100d1433;backdrop-filter:blur(8px)}.reactions{width:26px;height:48px;position:relative;overflow:visible;flex:none}.flying-reaction{position:absolute;bottom:0;font-size:clamp(14px,1.3vw,24px);filter:drop-shadow(0 2px 5px #0007);animation:fly-up 3s ease-out forwards;pointer-events:none}@keyframes fly-up{0%{transform:translateY(0) scale(.5) rotate(-12deg);opacity:0}12%{opacity:1;transform:translateY(-10px) scale(1.15) rotate(8deg)}100%{transform:translateY(-140px) translateX(-20px) scale(.65) rotate(15deg);opacity:0}}.center-qr{position:absolute;z-index:5;top:5%;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:5px}.center-qr img{width:clamp(45px,5.3vw,90px);height:auto;padding:4px;background:white;border-radius:6px}.qr-label{font-size:clamp(5px,.45vw,9px);letter-spacing:.1em;text-shadow:0 2px 8px #000;white-space:nowrap}.top-qr{position:absolute;inset:4% 0 auto;display:flex;justify-content:space-around;pointer-events:none}.top-qr div{display:flex;flex-direction:column;align-items:center;gap:3px}.top-qr img{width:clamp(40px,4.5vw,72px);border:3px solid white;border-radius:5px}.top-qr span{font-size:clamp(5px,.45vw,9px);text-shadow:0 1px 4px #000;letter-spacing:.1em}.layout-top{padding-top:14vh}.layout-center{padding-top:15vh}.layout-none{padding-top:3.4vh}.qr-glow{box-shadow:0 0 20px #ff3f80a8,0 0 35px #9d4edda8}.sparkle{position:absolute;z-index:8;color:#fff;pointer-events:none;animation:sparkle 2.3s ease-out forwards;text-shadow:0 0 12px var(--accent);font-size:15px}@keyframes sparkle{0%{opacity:0;transform:scale(.2) rotate(0)}30%{opacity:.8}100%{opacity:0;transform:scale(1.5) rotate(100deg)}}
@media(max-width:900px){.admin-shell{grid-template-columns:1fr}.sidebar{position:relative;height:auto;padding:13px}.brand{padding-bottom:12px}.sidebar nav{display:flex;overflow:auto;margin-top:10px;padding-bottom:4px}.nav-item{white-space:nowrap;padding:9px 11px}.sidebar-bottom{display:flex;flex-wrap:wrap;margin-top:10px;padding-top:10px}.admin-main{padding-top:18px}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.photo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.photo-thumb{height:180px}}@media(max-width:560px){.topbar{align-items:flex-start;flex-direction:column;gap:12px}.stat-card{padding:14px}.stat-card b{font-size:29px}.panel{padding:14px}.photo-grid{grid-template-columns:1fr}.photo-thumb{height:260px}.form-grid,.toggle-grid,.radio-cards,.tech-grid{grid-template-columns:1fr}.qr-row{align-items:flex-start;flex-direction:column}.admin-qr{width:100px;height:100px}.admin-footer{flex-direction:column}.status-pill{font-size:8px}.screen-grid{gap:3vw;padding-left:2vw;padding-right:2vw}.story-panel{height:82%}.center-qr{top:2%}.layout-center{padding-top:12vh}}

/* 2.1 refinements */
[hidden]{display:none!important}
.avatar{object-fit:cover;padding:0;overflow:hidden;background:#050505}
.guest-editable-eyebrow{color:var(--guest-eyebrow)}
.guest-editable-mark{color:var(--guest-mark)}
.guest-editable-footer{color:var(--guest-footer)}
.admin-editable-eyebrow{color:var(--admin-eyebrow)}
.admin-editable-status{color:var(--admin-status)}
.admin-editable-footer{color:var(--admin-footer)}
.avatar-preview{width:74px;height:74px;flex:none;object-fit:cover;border-radius:50%;border:2px solid #d6a847;box-shadow:0 0 0 3px #d6a84733}
.avatar-settings form{display:grid;gap:12px}
.avatar-settings .file-drop{max-width:680px}
.admin-body .eyebrow{color:var(--admin-eyebrow)}
@media(max-width:760px){.avatar-preview{width:58px;height:58px}.avatar-settings .panel-head{align-items:center}}
/* Live theme variables for runtime editing */
.screen-body{background:var(--bg,#08070a);color:var(--text,#fff)}
.story-card{background:linear-gradient(150deg,var(--card,#261a30),var(--bg,#100d14) 70%);border-color:var(--border,#ffffff27);color:var(--text,#fff)}
.reply-pill{color:var(--text,#fff);border-color:var(--border,#ffffff80)}
.story-head .age,.muted{color:var(--muted,#c4bacb)}
.empty-story{color:var(--text,#fff)}
.empty-story small{color:var(--accent,#ff3f80)}

/* 2.2 guest, logs, reaction and administration refinements */
.guest-name-field{display:grid;gap:7px;margin-bottom:14px;color:var(--muted);font-size:12px;font-weight:700}
.guest-name-field input{width:100%;border:1px solid var(--border);border-radius:11px;padding:13px 14px;background:#0e0b12;color:var(--text);outline:none}
.guest-name-field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
.file-drop.file-selected{border-style:solid;border-color:var(--accent);background:#ff3f8014}
.upload-card button:disabled{opacity:.68;cursor:wait}
.toast-message{display:flex;align-items:center;justify-content:space-between;gap:16px;box-shadow:0 10px 30px #0004}
.toast-close{width:28px;height:28px;flex:none;border:0;border-radius:50%;background:#ffffff15;color:inherit;font-size:21px;line-height:1;cursor:pointer}
.toast-message{animation:toast-in .18s ease-out}@keyframes toast-in{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}
.log-details{min-width:180px}.log-thumb-button{display:flex;align-items:center;gap:9px;margin:10px 0;padding:7px;border:1px solid #ffffff1c;border-radius:10px;background:#ffffff08;color:#fff;cursor:pointer;text-align:left;font-size:10px}
.log-thumb{width:68px;height:68px;object-fit:cover;border-radius:7px}.log-photo-meta{display:grid;gap:4px;margin:7px 0;color:var(--muted)}.log-photo-meta small,.block{display:block;font-size:9px;color:var(--muted)}
.image-modal{position:fixed;z-index:1000;inset:0;background:#050407ed;display:grid;place-items:center;padding:30px}.image-modal[hidden]{display:none}.image-modal img{max-width:min(92vw,1300px);max-height:88vh;object-fit:contain;border-radius:12px;box-shadow:0 25px 100px #0009}.image-modal-close{position:absolute;top:18px;right:22px;width:44px;height:44px;border:1px solid #ffffff55;border-radius:50%;background:#18131dcc;color:white;font-size:30px;line-height:1;cursor:pointer}
/* Every animated reaction belongs to its own story frame and is clipped by that frame. */
.reaction-field{position:absolute;z-index:2;inset:0;overflow:hidden;pointer-events:none;clip-path:inset(0 round 0);}
.flying-reaction{position:absolute;bottom:13%;font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif;font-size:clamp(18px,2vw,36px);line-height:1;filter:drop-shadow(0 3px 7px #0009);animation:fly-up 3.5s cubic-bezier(.18,.72,.26,1) forwards;will-change:transform,opacity;pointer-events:none}
@keyframes fly-up{0%{transform:translate3d(0,0,0) scale(.55) rotate(-9deg);opacity:0}12%{opacity:1;transform:translate3d(0,-12px,0) scale(1.12) rotate(5deg)}65%{opacity:.95}100%{transform:translate3d(var(--drift,0),-220px,0) scale(.82) rotate(13deg);opacity:0}}
.center-qr img{width:var(--qr-size,110px);max-width:24vw;max-height:24vh;object-fit:contain}.top-qr img{width:var(--qr-size,110px);max-width:24vw;max-height:24vh;object-fit:contain}
.progress-seg.current:after{animation:progress var(--seg-duration,7s) linear forwards;will-change:transform}

.progress-seg.current:after{content:none!important}.progress-fill{display:block;width:100%;height:100%;background:#fff;border-radius:3px;transform:scaleX(0);transform-origin:left;animation:progressFill var(--seg-duration,7s) linear forwards;will-change:transform}@keyframes progressFill{from{transform:scaleX(0)}to{transform:scaleX(1)}}

.pagination{display:flex;align-items:center;justify-content:center;gap:14px;padding:18px 0 4px;color:var(--muted);font-size:11px}.pagination .btn{min-width:105px}
.center-qr img,.top-qr img{max-height:42vh}
.layout-top{padding-top:max(14vh,calc(var(--qr-size,110px) + 38px))}

.admin-qr{width:var(--qr-size,120px);height:var(--qr-size,120px);max-width:40vw;max-height:42vh;object-fit:contain}


/* 2.3 floating / flutter motion — independent of the timed story progress. */
.story-card.fluttering{animation:storyFlutter var(--story-float-duration,10s) ease-in-out infinite;transform-origin:50% 50%;will-change:transform}
@keyframes storyFlutter{0%,100%{transform:translate3d(0,0,0) rotate(0)}22%{transform:translate3d(var(--story-float-x-neg,-2px),var(--story-float-y-neg,-4px),0) rotate(var(--story-float-rot-neg,-.5deg))}52%{transform:translate3d(var(--story-float-x,2px),var(--story-float-y,4px),0) rotate(var(--story-float-rot,.5deg))}78%{transform:translate3d(var(--story-float-x-neg,-2px),var(--story-float-y-neg,-4px),0) rotate(var(--story-float-rot,.5deg))}}
.center-qr.fluttering{animation:qrCenterFlutter var(--qr-float-duration,11s) ease-in-out infinite;transform-origin:50% 0;will-change:transform}
@keyframes qrCenterFlutter{0%,100%{transform:translateX(-50%) translate3d(0,0,0) rotate(0)}25%{transform:translateX(-50%) translate3d(var(--qr-float-x-neg,-2px),var(--qr-float-y-neg,-4px),0) rotate(var(--qr-float-rot-neg,-.5deg))}55%{transform:translateX(-50%) translate3d(var(--qr-float-x,2px),var(--qr-float-y,4px),0) rotate(var(--qr-float-rot,.5deg))}80%{transform:translateX(-50%) translate3d(var(--qr-float-x-neg,-2px),var(--qr-float-y-neg,-4px),0) rotate(var(--qr-float-rot,.5deg))}}
.top-qr>div.fluttering{animation:qrFlutter var(--qr-float-duration,11s) ease-in-out infinite;transform-origin:50% 0;will-change:transform}
@keyframes qrFlutter{0%,100%{transform:translate3d(0,0,0) rotate(0)}25%{transform:translate3d(var(--qr-float-x-neg,-2px),var(--qr-float-y-neg,-4px),0) rotate(var(--qr-float-rot-neg,-.5deg))}55%{transform:translate3d(var(--qr-float-x,2px),var(--qr-float-y,4px),0) rotate(var(--qr-float-rot,.5deg))}80%{transform:translate3d(var(--qr-float-x-neg,-2px),var(--qr-float-y-neg,-4px),0) rotate(var(--qr-float-rot,.5deg))}}
.flutter-settings .range-field{display:grid;gap:8px;background:#ffffff06;border:1px solid #ffffff12;border-radius:12px;padding:13px}.flutter-settings .range-field b{font-size:11px;color:var(--accent)}.flutter-settings .range-field input[type=range]{width:100%;padding:0;border:0;background:transparent;accent-color:var(--accent);cursor:pointer}.flutter-settings .range-field small{font-size:10px;color:var(--muted);font-weight:500}
@media(prefers-reduced-motion:reduce){.story-card.fluttering,.center-qr.fluttering,.top-qr>div.fluttering{animation:none!important}}

/* 2.4 guest upload: keep file picker and submit action visually separate. */
.upload-card .file-drop{margin-bottom:18px}.upload-card .upload-submit{margin-top:2px}.file-drop #photoSelectedText{font-size:11px;color:var(--muted)}

/* 2.5: clear selected state for guest upload */
.file-drop.file-selected{border:1px solid #35c982!important;background:linear-gradient(145deg,#35c98224,#35c9820d)!important;box-shadow:inset 0 0 0 1px #35c98222,0 8px 28px #35c98212}
.file-drop.file-selected .plus{color:#48df99!important;text-shadow:0 0 18px #35c98255;font-size:34px}
.file-drop.file-selected strong{color:#baf7d7}
.file-drop.file-selected small{color:#8de9b8}
/* OBS overlay must not paint a page background or tint the source underneath. */
html.overlay-document,html.overlay-document body,body.screen-body.transparent{background:transparent!important;background-color:transparent!important}
body.screen-body.transparent .screen-shade{display:none!important}
body.screen-body.transparent .bg-video{display:none!important}

/* 2.5.1: minimalist thin check matching the plus icon */
.file-drop.file-selected .plus{display:grid;place-items:center;color:#35c982!important;font-size:32px;text-shadow:none!important}
.file-drop .plus .minimal-check{width:30px;height:30px;display:block;overflow:visible}
.file-drop .plus .minimal-check path{fill:none;stroke:#35c982;stroke-width:2.15;stroke-linecap:round;stroke-linejoin:round}
