*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;background:#f5f7fb;color:#172033}header{position:sticky;top:0;z-index:5;background:rgba(255,255,255,.92);backdrop-filter:blur(10px);display:flex;justify-content:space-between;align-items:center;padding:18px 5vw;border-bottom:1px solid #e5e7eb}h1{margin:0;font-size:26px}h2{margin:28px 5vw 14px}.upload,section{margin:0 0 20px}.upload{margin:24px 5vw;padding:22px;background:#fff;border-radius:20px;box-shadow:0 8px 30px rgba(15,23,42,.08)}input[type=file],input[type=password]{width:100%;padding:14px;border:1px solid #d1d5db;border-radius:12px;background:#fff}button{border:0;background:#2563eb;color:#fff;padding:12px 18px;border-radius:12px;font-weight:700;margin-top:12px;cursor:pointer}.ghost{background:#e5e7eb;color:#111827;margin:0}.danger{background:#ef4444;padding:7px 10px;font-size:12px;margin:0}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:16px;margin:0 5vw 30px}.grid article{background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 8px 24px rgba(15,23,42,.08)}img,video{width:100%;display:block;aspect-ratio:4/3;object-fit:cover;background:#111}.videos video{aspect-ratio:16/9}.meta{display:flex;justify-content:space-between;gap:8px;align-items:center;padding:10px;font-size:12px;color:#4b5563}.meta span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(420px,100%);background:#fff;border-radius:24px;padding:32px;box-shadow:0 20px 70px rgba(15,23,42,.14)}.err{background:#fee2e2;color:#991b1b;padding:10px;border-radius:10px;margin-bottom:12px}@media(max-width:640px){header{padding:14px 16px}.grid{grid-template-columns:repeat(2,1fr);margin-left:16px;margin-right:16px;gap:10px}.upload,h2{margin-left:16px;margin-right:16px}h1{font-size:20px}}

/* Poster login page */
.poster-login{min-height:100vh;margin:0;background:#071827;display:flex;align-items:center;justify-content:center;padding:18px;overflow-x:hidden;background-image:radial-gradient(circle at 18% 12%,rgba(56,189,248,.22),transparent 28%),radial-gradient(circle at 88% 10%,rgba(34,197,94,.16),transparent 26%),linear-gradient(135deg,#06111f,#0b2a3a 48%,#071827)}
.poster-shell{position:relative;width:min(560px,100%);filter:drop-shadow(0 28px 70px rgba(0,0,0,.42))}.poster-img{display:block;width:100%;height:auto;border-radius:24px;box-shadow:0 0 0 1px rgba(255,255,255,.12),0 24px 80px rgba(0,0,0,.42)}
.poster-password-card{position:absolute;left:50%;bottom:clamp(18px,4.1%,44px);transform:translateX(-50%);width:min(86%,430px);padding:14px;border-radius:22px;background:rgba(7,24,39,.48);border:1px solid rgba(255,255,255,.34);box-shadow:0 18px 46px rgba(0,0,0,.34),inset 0 1px 0 rgba(255,255,255,.18);backdrop-filter:blur(16px) saturate(1.25);-webkit-backdrop-filter:blur(16px) saturate(1.25)}
.poster-form label{display:block;margin:0 0 8px 4px;color:rgba(255,255,255,.92);font-size:13px;font-weight:800;letter-spacing:.08em;text-shadow:0 1px 8px rgba(0,0,0,.38)}.poster-input-row{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}.poster-input-row input{width:100%;height:48px;border:1px solid rgba(255,255,255,.42);border-radius:15px;background:rgba(255,255,255,.92);color:#0f172a;padding:0 15px;font-size:16px;outline:none;box-shadow:inset 0 1px 2px rgba(15,23,42,.08)}.poster-input-row input:focus{border-color:#fde047;box-shadow:0 0 0 4px rgba(250,204,21,.28),inset 0 1px 2px rgba(15,23,42,.08)}.poster-input-row button{height:48px;margin:0;border:0;border-radius:15px;padding:0 18px;background:linear-gradient(135deg,#facc15,#fb923c);color:#1f1300;font-weight:900;letter-spacing:.02em;box-shadow:0 10px 22px rgba(251,146,60,.34);white-space:nowrap}.poster-input-row button:active{transform:translateY(1px)}.poster-error{margin:0 0 10px;padding:9px 12px;border-radius:13px;background:rgba(254,226,226,.94);color:#991b1b;font-size:13px;font-weight:700;text-align:center}
@media(max-width:560px){.poster-login{align-items:flex-start;padding:10px;background:#071827}.poster-shell{width:100%;max-width:430px}.poster-img{border-radius:18px}.poster-password-card{position:sticky;left:auto;bottom:auto;transform:none;width:calc(100% - 18px);margin:-112px auto 0;padding:12px;border-radius:18px}.poster-input-row{grid-template-columns:1fr}.poster-input-row button{width:100%}}

/* Full poster login override: poster fills the whole screen */
.poster-login-full{margin:0;min-height:100vh;min-height:100svh;overflow:hidden;background:#071827 url('/static/login-poster.png') center center / cover no-repeat;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.poster-full-stage{position:relative;width:100vw;height:100vh;height:100svh}.poster-full-stage::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(to bottom,rgba(0,0,0,.02) 0%,rgba(0,0,0,.04) 52%,rgba(0,0,0,.38) 100%)}.poster-full-password{position:absolute;z-index:2;left:50%;bottom:clamp(26px,6.5vh,76px);transform:translateX(-50%);width:min(520px,calc(100vw - 36px));padding:12px;border-radius:999px;background:rgba(255,255,255,.22);border:1px solid rgba(255,255,255,.45);box-shadow:0 18px 44px rgba(0,0,0,.28);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2)}.poster-full-password .poster-input-row{display:grid;grid-template-columns:1fr 92px;gap:8px;align-items:center}.poster-full-password input{height:48px;width:100%;border:0;border-radius:999px;background:rgba(255,255,255,.94);color:#111827;padding:0 18px;font-size:16px;outline:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.08)}.poster-full-password input:focus{box-shadow:0 0 0 4px rgba(250,204,21,.35),inset 0 1px 2px rgba(0,0,0,.08)}.poster-full-password button{height:48px;margin:0;border:0;border-radius:999px;background:#facc15;color:#1f1300;font-size:16px;font-weight:900;box-shadow:none;padding:0 18px}.poster-full-password .poster-error{position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%);white-space:nowrap;margin:0;padding:8px 14px;border-radius:999px;background:rgba(254,226,226,.96);color:#991b1b;font-size:13px;font-weight:800;box-shadow:0 8px 22px rgba(0,0,0,.18)}@media(max-width:560px){.poster-login-full{background-position:center top}.poster-full-password{bottom:calc(env(safe-area-inset-bottom) + 18px);width:calc(100vw - 24px);padding:9px}.poster-full-password .poster-input-row{grid-template-columns:1fr 76px}.poster-full-password input,.poster-full-password button{height:46px;font-size:15px}.poster-full-stage::after{background:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgba(0,0,0,.03) 55%,rgba(0,0,0,.42) 100%)}}

/* Login v3: complete poster visible, no cropping */
.poster-login-contain{margin:0;min-height:100vh;min-height:100svh;overflow:hidden;background:#071827;position:relative;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.poster-login-contain::before{content:"";position:fixed;inset:-28px;background:url('/static/login-poster.png') center center / cover no-repeat;filter:blur(22px) saturate(1.08);transform:scale(1.06);opacity:.62}.poster-login-contain::after{content:"";position:fixed;inset:0;background:linear-gradient(90deg,rgba(3,7,18,.56),rgba(3,7,18,.08) 28%,rgba(3,7,18,.08) 72%,rgba(3,7,18,.56)),linear-gradient(to bottom,rgba(3,7,18,.10),rgba(3,7,18,.32));pointer-events:none}.poster-contain-stage{position:relative;z-index:1;width:100vw;height:100vh;height:100svh;display:flex;align-items:center;justify-content:center;padding:0}.poster-contain-img{display:block;width:100vw;height:100vh;height:100svh;object-fit:contain;object-position:center center;filter:drop-shadow(0 18px 42px rgba(0,0,0,.36))}.poster-contain-password{position:absolute;z-index:3;left:50%;bottom:clamp(16px,3vh,38px);transform:translateX(-50%);width:min(500px,calc(100vw - 36px));padding:10px;border-radius:999px;background:rgba(7,24,39,.46);border:1px solid rgba(255,255,255,.42);box-shadow:0 14px 34px rgba(0,0,0,.28);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2)}.poster-contain-password .poster-input-row{display:grid;grid-template-columns:1fr 86px;gap:8px;align-items:center}.poster-contain-password input{height:46px;width:100%;border:0;border-radius:999px;background:rgba(255,255,255,.95);color:#111827;padding:0 17px;font-size:16px;outline:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.08)}.poster-contain-password input:focus{box-shadow:0 0 0 4px rgba(250,204,21,.32),inset 0 1px 2px rgba(0,0,0,.08)}.poster-contain-password button{height:46px;margin:0;border:0;border-radius:999px;background:#facc15;color:#1f1300;font-size:16px;font-weight:900;padding:0 16px}.poster-contain-password .poster-error{position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%);white-space:nowrap;margin:0;padding:8px 14px;border-radius:999px;background:rgba(254,226,226,.96);color:#991b1b;font-size:13px;font-weight:800;box-shadow:0 8px 22px rgba(0,0,0,.18)}@media(max-width:560px){.poster-contain-stage{align-items:center}.poster-contain-img{width:100vw;height:100svh;object-fit:contain}.poster-contain-password{bottom:calc(env(safe-area-inset-bottom) + 12px);width:calc(100vw - 22px);padding:8px}.poster-contain-password .poster-input-row{grid-template-columns:1fr 74px}.poster-contain-password input,.poster-contain-password button{height:44px;font-size:15px}}

/* Login v4: desktop/mobile poster auto switch */
.login-responsive-poster{--poster:url('/static/login-poster.png');--fit:contain;--pos:center center;--input-bottom:clamp(12px,2.4vh,30px);margin:0;min-height:100vh;min-height:100svh;overflow:hidden;background:#071827;position:relative;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.login-responsive-poster::before{content:"";position:fixed;inset:-30px;background-image:var(--poster);background-size:cover;background-position:var(--pos);background-repeat:no-repeat;filter:blur(24px) saturate(1.08);transform:scale(1.07);opacity:.58}.login-responsive-poster::after{content:"";position:fixed;inset:0;background-image:var(--poster);background-size:var(--fit);background-position:var(--pos);background-repeat:no-repeat;z-index:1;filter:drop-shadow(0 14px 36px rgba(0,0,0,.28))}.login-responsive-stage{position:relative;z-index:2;width:100vw;height:100vh;height:100svh}.login-responsive-password{position:absolute;z-index:4;left:50%;bottom:var(--input-bottom);transform:translateX(-50%);width:min(500px,calc(100vw - 36px));padding:10px;border-radius:999px;background:rgba(7,24,39,.48);border:1px solid rgba(255,255,255,.44);box-shadow:0 14px 34px rgba(0,0,0,.28);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2)}.login-responsive-row{display:grid;grid-template-columns:1fr 86px;gap:8px;align-items:center}.login-responsive-row input{height:46px;width:100%;border:0;border-radius:999px;background:rgba(255,255,255,.95);color:#111827;padding:0 17px;font-size:16px;outline:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.08)}.login-responsive-row input:focus{box-shadow:0 0 0 4px rgba(250,204,21,.32),inset 0 1px 2px rgba(0,0,0,.08)}.login-responsive-row button{height:46px;margin:0;border:0;border-radius:999px;background:#facc15;color:#1f1300;font-size:16px;font-weight:900;padding:0 16px}.login-responsive-password .poster-error{position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%);white-space:nowrap;margin:0;padding:8px 14px;border-radius:999px;background:rgba(254,226,226,.96);color:#991b1b;font-size:13px;font-weight:800;box-shadow:0 8px 22px rgba(0,0,0,.18)}
@media (min-aspect-ratio: 4/3) and (min-width: 760px){.login-responsive-poster{--poster:url('/static/login-poster-desktop.png');--fit:cover;--pos:center center;--input-bottom:clamp(28px,7.2vh,82px)}.login-responsive-poster::before{opacity:.28;filter:blur(18px) saturate(1.04)}.login-responsive-password{width:min(470px,34vw);left:72%;bottom:clamp(30px,7vh,76px);transform:translateX(-50%);background:rgba(7,24,39,.42)}}
@media(max-width:560px){.login-responsive-poster{--poster:url('/static/login-poster.png');--fit:contain;--pos:center center;--input-bottom:calc(env(safe-area-inset-bottom) + 12px)}.login-responsive-password{width:calc(100vw - 22px);padding:8px}.login-responsive-row{grid-template-columns:1fr 74px}.login-responsive-row input,.login-responsive-row button{height:44px;font-size:15px}}

/* Gallery v2: better family browsing + in-page lightbox */
.gallery-page{background:#f3f6fb;color:#172033}.gallery-header{background:rgba(255,255,255,.9);backdrop-filter:blur(12px);box-shadow:0 6px 22px rgba(15,23,42,.06)}.admin-panel{border:1px solid #e5e7eb}.empty-tip{margin:0 5vw 20px;color:#64748b}.gallery-grid{align-items:start}.media-card{transition:transform .18s ease,box-shadow .18s ease}.media-card:hover{transform:translateY(-2px);box-shadow:0 14px 34px rgba(15,23,42,.12)}.photo-open{position:relative;display:block;width:100%;padding:0;margin:0;border:0;border-radius:0;background:#111;cursor:pointer;overflow:hidden}.photo-open img{transition:transform .24s ease,filter .24s ease}.photo-open:hover img{transform:scale(1.035);filter:saturate(1.04)}.view-badge{position:absolute;right:10px;bottom:10px;padding:7px 12px;border-radius:999px;background:rgba(15,23,42,.72);color:#fff;font-size:13px;font-weight:800;backdrop-filter:blur(8px);box-shadow:0 8px 18px rgba(0,0,0,.22)}.no-scroll{overflow:hidden}.lightbox{position:fixed;inset:0;z-index:1000;display:none}.lightbox.open{display:block}.lightbox-backdrop{position:absolute;inset:0;background:rgba(2,6,23,.88);backdrop-filter:blur(10px)}.lightbox-panel{position:absolute;inset:0;display:grid;place-items:center;padding:clamp(14px,3vw,36px)}.lightbox figure{position:relative;margin:0;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}.lightbox img{max-width:min(100%,1280px);max-height:calc(100vh - 110px);object-fit:contain;border-radius:16px;background:#0f172a;box-shadow:0 30px 90px rgba(0,0,0,.48)}.lightbox figcaption{min-height:28px;max-width:min(100%,980px);display:flex;gap:14px;justify-content:center;align-items:center;color:#e5e7eb;font-size:14px;text-align:center}.lightbox-count{color:#94a3b8;white-space:nowrap}.lightbox-close,.lightbox-nav{position:absolute;z-index:2;border:0;margin:0;display:grid;place-items:center;color:#fff;background:rgba(255,255,255,.16);backdrop-filter:blur(10px);box-shadow:0 12px 30px rgba(0,0,0,.22);cursor:pointer}.lightbox-close{top:18px;right:18px;width:46px;height:46px;border-radius:999px;font-size:32px;line-height:1}.lightbox-nav{top:50%;transform:translateY(-50%);width:54px;height:74px;border-radius:18px;font-size:54px;font-family:Georgia,serif}.lightbox-nav.prev{left:18px}.lightbox-nav.next{right:18px}.lightbox-close:hover,.lightbox-nav:hover{background:rgba(255,255,255,.25)}@media(max-width:720px){.grid.gallery-grid{grid-template-columns:repeat(2,1fr)}.view-badge{font-size:12px;padding:6px 10px}.lightbox-panel{padding:10px}.lightbox img{max-height:calc(100svh - 94px);border-radius:10px}.lightbox-nav{width:44px;height:58px;font-size:42px;background:rgba(15,23,42,.38)}.lightbox-nav.prev{left:8px}.lightbox-nav.next{right:8px}.lightbox-close{top:10px;right:10px;width:42px;height:42px}.lightbox figcaption{font-size:12px;padding:0 48px}}

/* Queue uploader */
.queue-uploader input[type=file]{display:block;width:100%;padding:16px;border:1px dashed #93c5fd;border-radius:16px;background:#eff6ff}.upload-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}.overall-progress{height:10px;background:#e5e7eb;border-radius:999px;overflow:hidden;margin:14px 0}.overall-progress div{height:100%;width:0;background:linear-gradient(90deg,#2563eb,#22c55e);transition:width .2s}.queue-list{display:grid;gap:8px}.queue-item{padding:10px 12px;background:#f8fafc;border:1px solid #e5e7eb;border-radius:14px}.queue-info{display:flex;justify-content:space-between;gap:12px;font-size:13px}.queue-info strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.queue-info span{color:#64748b;white-space:nowrap}.queue-progress{height:8px;background:#e5e7eb;border-radius:999px;overflow:hidden;margin-top:8px}.queue-progress div{height:100%;width:0;background:#2563eb;transition:width .15s}.queue-item.done .queue-progress div{background:#22c55e}.queue-item.error .queue-progress div,.queue-item.oversize .queue-progress div{background:#ef4444}.queue-item.error,.queue-item.oversize{border-color:#fecaca;background:#fff1f2}.queue-item.done{border-color:#bbf7d0;background:#f0fdf4}@media(max-width:640px){.queue-info{display:block}.upload-actions button{width:100%}}

/* Preview optimization */
#lightbox-download{display:inline-flex;align-items:center;justify-content:center;height:28px;padding:0 12px;border-radius:999px;background:#facc15;color:#1f1300;text-decoration:none;font-weight:900;font-size:13px}.lightbox img{image-orientation:from-image}.lightbox.open img{transition:opacity .15s ease}@media(max-width:720px){.lightbox figcaption{gap:8px;flex-wrap:wrap}.lightbox img{max-width:100vw;max-height:calc(100svh - 120px);border-radius:8px}.lightbox-nav{opacity:.72}.lightbox-nav:active{background:rgba(250,204,21,.38)}}

/* Lightbox zoom and pan */
.lightbox-tools{position:absolute;z-index:3;top:18px;left:50%;transform:translateX(-50%);display:flex;gap:8px;padding:7px;border-radius:999px;background:rgba(255,255,255,.14);backdrop-filter:blur(10px)}.lightbox-tools button{margin:0;border:0;height:34px;min-width:42px;border-radius:999px;background:rgba(255,255,255,.18);color:#fff;font-weight:900;padding:0 12px}.lightbox-tools button:hover{background:rgba(255,255,255,.28)}#lightbox-img{transform-origin:center center;touch-action:none;user-select:none;-webkit-user-drag:none;cursor:zoom-in}.lightbox img.zoomed{cursor:grab}.lightbox img.zoomed:active{cursor:grabbing}.lightbox-nav{transition:opacity .15s}.lightbox:has(img.zoomed) .lightbox-nav{opacity:.28}@media(max-width:720px){.lightbox-tools{top:auto;bottom:54px}.lightbox-tools button{height:32px;min-width:38px;font-size:13px}.lightbox:has(img.zoomed) .lightbox-nav{opacity:.18}}
