:root{--bg:#0c0f14;--panel:#121822;--panel-soft:#1a2230;--line:#243244;--text:#f3f7ff;--muted:#8ea0b8;--accent:#6bd6ff;--shadow:0 18px 40px rgba(0,0,0,.35)}*{box-sizing:border-box}body,html{margin:0;min-height:100%;background:radial-gradient(1200px 600px at 80% -10%,#1b2940 0,transparent 55%),var(--bg);color:var(--text);font-family:Sora,Segoe UI,sans-serif}button,input{font:inherit}.login-shell{min-height:100vh;display:grid;place-items:center;padding:2rem}.login-panel{width:min(420px,100%);background:rgba(18,24,34,.88);border:1px solid var(--line);border-radius:18px;padding:1.6rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:var(--shadow);animation:rise .4s ease-out}.login-panel h1{margin:0;font-size:1.4rem}.login-panel p{margin:.5rem 0 1.2rem;color:var(--muted)}.login-form{display:grid;grid-gap:.7rem;gap:.7rem}.login-form label{color:var(--muted);font-size:.9rem}.login-form input{border:1px solid var(--line);background:#0d121b;color:var(--text);border-radius:10px;padding:.72rem .85rem;outline:none;transition:border-color .2s ease}.login-form input:focus{border-color:var(--accent)}.login-form button{margin-top:.8rem;border:1px solid #3b7f99;background:linear-gradient(180deg,#58d1ff,#2da9d9);color:#04111a;border-radius:10px;padding:.72rem;cursor:pointer;transition:transform .2s ease,filter .2s ease}.login-form button:hover{transform:translateY(-1px);filter:brightness(1.06)}.login-form button:disabled{opacity:.7;cursor:not-allowed}.login-error{color:#ff7f96;font-size:.92rem;padding-top:.3rem}.gallery-shell{min-height:100vh;padding:1.3rem clamp(1rem,3vw,2.6rem) 2rem}.topbar{position:-webkit-sticky;position:sticky;top:.85rem;z-index:5;display:flex;align-items:center;gap:.7rem;background:rgba(12,15,20,.75);border:1px solid rgba(43,58,78,.85);border-radius:14px;padding:.7rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:var(--shadow)}.search-input{flex:1 1 auto;min-width:0;border:1px solid var(--line);border-radius:10px;background:#101722;color:var(--text);padding:.74rem .92rem;outline:none;transition:border-color .2s ease,box-shadow .2s ease,flex-basis .3s ease}.search-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(107,214,255,.2)}.topbar-actions .search-input{flex-basis:100%}.topbar-actions .action-pill{width:46px;min-width:46px;height:46px}.topbar-actions .action-pill:focus-visible,.topbar-actions .action-pill:hover{width:116px}.topbar-actions .action-pill.action-static,.topbar-actions .action-pill.action-static:focus-visible,.topbar-actions .action-pill.action-static:hover{width:46px;min-width:46px;padding:0;justify-content:center}.topbar-actions .action-pill:focus-visible .action-pill-label,.topbar-actions .action-pill:hover .action-pill-label{opacity:1;max-width:90px}.topbar-actions .action-pill:focus-visible+.action-pill,.topbar-actions .action-pill:hover+.action-pill{margin-left:0}.action-pill{border:1px solid rgba(109,193,242,.55);background:rgba(11,27,40,.86);color:#e9f6ff;border-radius:999px;display:inline-flex;justify-content:center;align-items:center;gap:0;padding:0;cursor:pointer;overflow:hidden;transition:width .3s ease,background .25s ease,border-color .25s ease,opacity .2s ease}.action-pill:focus-visible,.action-pill:hover{background:rgba(16,40,58,.96);border-color:rgba(153,224,255,.95);justify-content:flex-end;gap:.32rem;padding:0 .3rem 0 .62rem;outline:none}.action-pill:disabled{opacity:.45;cursor:not-allowed}.action-pill-label{font-size:.85rem;font-weight:600;letter-spacing:.02em;opacity:0;max-width:0;white-space:nowrap;transition:opacity .22s ease,max-width .28s ease}.action-pill-icon{width:38px;height:38px;display:grid;place-items:center}.action-icon{width:30px;height:30px;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;fill:none}.action-icon circle{display:none}.action-upload{color:#b5e6ff}.action-logout{color:#d4e6f7}.action-delete{border-color:hsla(0,87%,70%,.72);color:#ffb2b2}.action-delete:focus-visible,.action-delete:hover{background:rgba(68,18,20,.92);border-color:hsla(0,100%,78%,.98)}.action-back{color:#bfe2ff}.gallery-content{display:grid;grid-gap:1.6rem;gap:1.6rem;margin-top:1.2rem}.category-block h2{margin:0 0 .8rem;font-size:1rem;font-weight:600;color:#d3deed;letter-spacing:.04em}.panorama-block{display:grid;grid-gap:.65rem;gap:.65rem}.panorama-switcher{display:flex;flex-wrap:wrap;gap:.5rem}.panorama-pill{border:1px solid #314359;background:#121c29;color:#d9e7f8;border-radius:999px;padding:.35rem .75rem;cursor:pointer}.panorama-pill.active{border-color:#66c9ff;background:#17344a}.panorama-pill.selected{border-color:hsla(0,100%,76%,.95);background:rgba(82,20,24,.9);color:#ffd7d7}.panorama-viewer-shell{border:1px solid rgba(87,165,219,.45);border-radius:14px;overflow:hidden;background:#0d141f;min-height:440px;box-shadow:inset 0 0 0 1px rgba(166,230,255,.06),0 10px 28px rgba(2,10,20,.4)}.panorama-viewer{width:100%;min-height:440px}.room-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:clamp(.6rem,1.7vw,1rem);gap:clamp(.6rem,1.7vw,1rem)}.room-card{position:relative;padding:0;border:1px solid rgba(87,165,219,.45);border-radius:14px;overflow:hidden;background:linear-gradient(155deg,#122334,#1e3345);cursor:pointer;min-height:160px;box-shadow:inset 0 0 0 1px rgba(166,230,255,.08),0 10px 24px rgba(2,10,20,.35);transition:transform .28s ease,border-color .28s ease,box-shadow .28s ease}.room-thumb{width:100%;height:100%;object-fit:cover;object-position:center center;display:block;transition:transform .45s ease,filter .35s ease}.room-card:hover .room-thumb{transform:scale(1.07);filter:brightness(.52) saturate(.9)}.room-card:hover{border-color:rgba(118,210,255,.9);transform:translateY(-2px);box-shadow:inset 0 0 0 1px rgba(166,230,255,.22),0 14px 30px rgba(2,10,20,.45)}.room-card-overlay{position:absolute;inset:0;display:grid;place-items:center;opacity:0;pointer-events:none;transition:opacity .3s ease}.room-card:hover .room-card-overlay{opacity:1}.room-card-label{font-size:clamp(1.1rem,2.3vw,1.6rem);font-weight:600;letter-spacing:.08em;color:#eaf6ff;text-shadow:0 4px 14px rgba(2,10,20,.9);font-family:Sora,Segoe UI,sans-serif}.room-image-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.room-image-card{min-height:0;aspect-ratio:1}.room-image-open{border:0;padding:0;width:100%;height:100%;display:block;cursor:pointer;background:transparent}.room-image-thumb{width:100%;height:100%;object-fit:cover;object-position:center center}.room-image-card.selected{border-color:hsla(0,100%,79%,.95);box-shadow:inset 0 0 0 1px hsla(0,100%,87%,.35),0 14px 30px rgba(2,10,20,.45)}.room-select-chip{position:absolute;top:.45rem;left:.45rem;z-index:2;border:1px solid rgba(164,220,255,.85);background:rgba(10,28,44,.8);color:#ddf2ff;border-radius:999px;padding:.2rem .55rem;font-size:.72rem;cursor:pointer}.room-image-card.selected .room-select-chip{border-color:hsla(0,100%,76%,.95);background:rgba(82,20,24,.9);color:#ffd7d7}.empty-state{color:var(--muted);padding:2rem 0;text-align:center}.modal-overlay{position:fixed;inset:0;display:grid;place-items:center;background:rgba(1,6,12,0);-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0);pointer-events:none;transition:background .25s ease,-webkit-backdrop-filter .25s ease;transition:background .25s ease,backdrop-filter .25s ease;transition:background .25s ease,backdrop-filter .25s ease,-webkit-backdrop-filter .25s ease;z-index:50}.modal-overlay.open{background:rgba(1,6,12,.7);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto}.modal-panel{position:relative;width:min(92vw,1200px);height:min(84vh,850px);display:grid;place-items:center;transform:scale(.95);opacity:0;transition:transform .25s ease,opacity .25s ease}.modal-overlay.open .modal-panel{transform:scale(1);opacity:1}.modal-image{max-width:100%;max-height:100%;object-fit:contain;border-radius:10px;border:1px solid rgba(107,214,255,.4);box-shadow:0 18px 36px rgba(0,0,0,.45)}.modal-arrow,.modal-close{position:absolute;border:1px solid rgba(114,198,243,.6);background:rgba(8,22,34,.82);color:#9edfff;border-radius:999px;width:52px;height:52px;cursor:pointer;display:grid;place-items:center;padding:0;transition:transform .2s ease,background .2s ease,border-color .2s ease}.modal-arrow:hover,.modal-close:hover{transform:translateY(-1px);background:rgba(10,28,44,.95);border-color:rgba(152,224,255,.95)}.modal-arrow.left{left:1rem}.modal-arrow.right{right:1rem}.modal-close{top:1rem;right:1rem}.modal-icon{width:26px;height:26px;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;fill:none}.upload-overlay{position:fixed;inset:0;display:grid;place-items:center;background:rgba(1,6,12,0);-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0);pointer-events:none;transition:background .25s ease,-webkit-backdrop-filter .25s ease;transition:background .25s ease,backdrop-filter .25s ease;transition:background .25s ease,backdrop-filter .25s ease,-webkit-backdrop-filter .25s ease;z-index:60}.upload-overlay.open{background:rgba(1,6,12,.72);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto}.upload-panel{position:relative;width:min(780px,94vw);max-height:min(86vh,860px);overflow:auto;background:rgba(17,24,34,.94);border:1px solid rgba(64,84,112,.8);border-radius:16px;padding:1.2rem;box-shadow:var(--shadow);transform:scale(.95);opacity:0;transition:transform .25s ease,opacity .25s ease}.upload-overlay.open .upload-panel{transform:scale(1);opacity:1}.upload-close{position:absolute;top:.6rem;right:.6rem;border:1px solid rgba(80,102,130,.95);background:rgba(10,20,32,.72);color:var(--text);border-radius:999px;width:38px;height:38px;cursor:pointer}.upload-panel h3{margin:0;font-size:1.2rem}.upload-subtitle{margin:.35rem 0 1rem;color:var(--muted)}.upload-form{display:grid;grid-gap:.75rem;gap:.75rem}.upload-form label{color:#c4d4ea;font-size:.95rem}.upload-input{border:1px solid var(--line);border-radius:10px;background:#101722;color:var(--text);padding:.72rem .85rem;outline:none}.upload-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(107,214,255,.2)}.room-suggestions{display:flex;flex-wrap:wrap;gap:.45rem}.room-suggestion{border:1px solid #314359;background:#121c29;color:#d9e7f8;border-radius:999px;padding:.35rem .7rem;cursor:pointer}.room-suggestion.active{border-color:#66c9ff;background:#17344a}.suggestion-empty{color:var(--muted);font-size:.9rem}.existing-preview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:.55rem;gap:.55rem;margin-top:.2rem}.preview-add-tile,.preview-tile{aspect-ratio:1;border-radius:12px;border:1px solid #46576d;overflow:hidden;background:#2f3b49}.preview-tile img{width:100%;height:100%;object-fit:cover;display:block}.preview-add-tile{color:#d9e8f9;font-size:1.8rem;display:grid;place-items:center;cursor:pointer}.new-room-note{border:1px dashed #46576d;border-radius:12px;color:var(--muted);padding:.9rem;grid-column:1/-1}.picked-files{display:grid;grid-gap:.45rem;gap:.45rem;max-height:150px;overflow:auto}.picked-file{display:flex;justify-content:space-between;gap:.7rem;border:1px solid #2f4158;border-radius:8px;padding:.45rem .6rem;background:#131f2e}.picked-file span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picked-file button{border:0;background:transparent;color:#9ac3e8;cursor:pointer}.upload-actions{display:flex;justify-content:space-between;gap:.7rem;margin-top:.2rem}.ghost-button,.primary-upload{border-radius:10px;padding:.68rem .95rem;cursor:pointer}.ghost-button{border:1px solid #3c4d64;background:#111b28;color:#d8e7f8}.primary-upload{border:1px solid #4aaeff;background:linear-gradient(180deg,#8ed6ff,#3caeff);color:#04101a;font-weight:600}.primary-upload:disabled{opacity:.7;cursor:not-allowed}.upload-error{color:#ff8fa1;margin:0}.confirm-overlay{position:fixed;inset:0;display:grid;place-items:center;background:rgba(1,6,12,0);-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0);pointer-events:none;transition:background .25s ease,-webkit-backdrop-filter .25s ease;transition:background .25s ease,backdrop-filter .25s ease;transition:background .25s ease,backdrop-filter .25s ease,-webkit-backdrop-filter .25s ease;z-index:80}.confirm-overlay.open{background:rgba(1,6,12,.72);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto}.confirm-panel{width:min(460px,92vw);background:rgba(17,24,34,.96);border:1px solid rgba(89,108,132,.9);border-radius:14px;padding:1rem;box-shadow:var(--shadow);transform:scale(.95);opacity:0;transition:transform .24s ease,opacity .24s ease}.confirm-overlay.open .confirm-panel{transform:scale(1);opacity:1}.confirm-panel h3{margin:0 0 .45rem}.confirm-panel p{margin:0;color:var(--muted)}.confirm-actions{margin-top:1rem;display:flex;justify-content:flex-end;gap:.65rem}.confirm-delete{border:1px solid hsla(0,100%,78%,.98);background:rgba(85,20,22,.92);color:#ffd8d8;border-radius:10px;padding:.68rem .95rem;cursor:pointer}.confirm-delete:disabled{opacity:.65;cursor:not-allowed}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (max-width:900px){.room-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.existing-preview,.room-image-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width:640px){.topbar{flex-wrap:wrap}.room-grid{grid-template-columns:1fr}.room-image-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.topbar-actions .search-input{flex-basis:100%;width:100%}.modal-arrow{width:46px;height:46px}.modal-icon{width:22px;height:22px}.upload-actions{flex-direction:column}.existing-preview{grid-template-columns:repeat(2,minmax(0,1fr))}.panorama-viewer,.panorama-viewer-shell{min-height:280px}}