*,:before,:after{box-sizing:border-box}ul[class],ol[class]{padding:0}body,h1,h2,h3,h4,p,ul[class],ol[class],li,figure,figcaption,blockquote,dl,dd{margin:0}body{scroll-behavior:smooth;text-rendering:optimizespeed;min-height:100vh;color:var(--text);background:radial-gradient(900px 480px at 85% -10%, #60a5fa1f, transparent 60%), radial-gradient(700px 420px at 8% -5%, #fbbf2412, transparent 55%), var(--bg);font-family:Inter,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.5}ul[class],ol[class]{list-style:none}a:not([class]){-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto}img{max-width:100%;display:block}article>*+*{margin-top:1em}input,button,textarea,select{font:inherit}.btn.primary:hover:not(:disabled),.btn.primary:focus-visible:not(:disabled){box-shadow:0 8px 24px #f59e0b66}.btn.secondary:hover:not(:disabled),.btn.secondary:focus-visible:not(:disabled){background:#94a3b829;border-color:#94a3b866}.btn.danger:hover:not(:disabled){box-shadow:0 10px 26px #dc262659}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.site-header{z-index:600;-webkit-backdrop-filter:blur(14px);background:#05070fd1;border-bottom:1px solid #94a3b81f;width:100%;position:sticky;top:0}.header-inner{justify-content:space-between;align-items:center;gap:1rem;max-width:1060px;margin:0 auto;padding:.75rem 1rem;display:flex}.header-left{align-items:center;gap:.9rem;min-width:0;display:flex}.brand{flex-shrink:0;align-items:center;gap:.65rem;text-decoration:none;display:flex}.brand-logo{filter:drop-shadow(0 2px 8px #fbbf2433);width:42px;height:42px;display:block}.brand-text{flex-direction:column;line-height:1;display:flex}.brand-name{letter-spacing:.02em;color:#f8fafc;font-family:Georgia,Times New Roman,serif;font-size:1.5rem;font-weight:700}.brand-tag{letter-spacing:.34em;text-transform:uppercase;color:#fbbf24;margin-top:.22rem;font-size:.55rem;font-weight:600}.btn{letter-spacing:.01em;cursor:pointer;white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:.4rem;padding:.6rem 1.15rem;font-size:.9rem;font-weight:600;transition:transform .18s,box-shadow .2s,background-color .2s,border-color .2s,color .2s,opacity .2s;display:inline-flex}.btn:hover:not(:disabled),.btn:focus-visible:not(:disabled){transform:translateY(-1px)}.btn:focus-visible{outline-offset:2px;outline:2px solid #fbbf24b3}.btn-icon{font-size:1.05rem;line-height:1}.btn-primary{color:#231703;background:linear-gradient(135deg,#fcd34d 0%,#f59e0b 100%);border:none;box-shadow:0 4px 16px #f59e0b47}.btn-primary:hover:not(:disabled),.btn-primary:focus-visible:not(:disabled){box-shadow:0 8px 24px #f59e0b66}.btn-ghost{color:#e2e8f0;background:#94a3b814;border:1px solid #94a3b838}.btn-ghost:hover:not(:disabled),.btn-ghost:focus-visible:not(:disabled){background:#94a3b829;border-color:#94a3b866}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-category{color:#fcd34d;background:#fbbf2414;border:1px solid #fbbf2459;min-width:0}.btn-category:hover:not(:disabled),.btn-category:focus-visible:not(:disabled){background:#fbbf2429;border-color:#fbbf2499}.btn-category-active{background:#fbbf242e;border-color:#fbbf24a6;box-shadow:0 0 0 3px #fbbf241f}.btn-category-badge{text-overflow:ellipsis;white-space:nowrap;color:#231703;background:linear-gradient(135deg,#fcd34d 0%,#f59e0b 100%);border-radius:999px;max-width:130px;padding:.12rem .55rem;font-size:.72rem;font-weight:700;overflow:hidden}.header-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.6rem;margin-left:auto;display:flex}.category-modal-overlay{z-index:500;-webkit-backdrop-filter:blur(5px);background:#03050fdb;place-items:center;padding:5.5rem 1rem 1rem;animation:.18s categoryFadeIn;display:grid;position:fixed;inset:0}.category-modal{background:#0b1120;border:1px solid #94a3b829;border-radius:1rem;flex-direction:column;width:min(420px,100%);max-height:86vh;padding:1.35rem 1.35rem 1.2rem;animation:.18s categoryPopIn;display:flex;overflow:hidden;box-shadow:0 24px 60px #0000008c}.category-modal-head{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.category-modal-head h2{color:#f8fafc;margin:0;font-size:1.25rem}.category-modal-close{color:#e2e8f0;cursor:pointer;background:#94a3b81a;border:none;border-radius:999px;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:1rem;transition:background-color .2s;display:grid}.category-modal-close:hover{background:#94a3b838}.category-modal-subtitle{color:#94a3b8;margin:.3rem 0 1rem;font-size:.9rem;line-height:1.4}.category-options{flex:auto;min-height:60px;padding-right:.15rem;overflow-y:auto}.category-tree,.category-tree-children{margin:0;padding:0;list-style:none}.category-tree{gap:.4rem;display:grid}.category-tree-children{gap:.4rem;margin-top:.4rem;display:grid;position:relative}.category-tree-children:before{content:"";background:#94a3b82e;width:1px;position:absolute;top:-.2rem;bottom:.35rem;left:.5rem}.category-toggle{color:#cbd5e1;cursor:pointer;background:#94a3b81f;border:none;border-radius:6px;flex-shrink:0;place-items:center;width:20px;height:20px;padding:0;transition:background-color .2s,color .2s,transform .2s;display:grid}.category-toggle svg{transition:transform .2s}.category-toggle[aria-expanded=true] svg{transform:rotate(90deg)}.category-toggle:hover{color:#fcd34d;background:#fbbf2440}.category-toggle-hidden{visibility:hidden}.category-option{cursor:pointer;background:#94a3b80a;border:1px solid #94a3b829;border-radius:.75rem;align-items:center;gap:.7rem;padding:.7rem .9rem;transition:border-color .2s,background-color .2s;display:flex}.category-option:hover{border-color:#fbbf2473}.category-option.selected{background:#fbbf2414;border-color:#fbbf24b3}.category-option input{opacity:0;pointer-events:none;position:absolute}.category-checkbox{border:2px solid #94a3b880;border-radius:5px;flex-shrink:0;place-items:center;width:18px;height:18px;transition:border-color .2s,background-color .2s;display:inline-grid;position:relative}.category-option.selected .category-checkbox,.category-option.partial .category-checkbox{border-color:#fbbf24}.category-option.selected .category-checkbox{background:linear-gradient(135deg,#fcd34d 0%,#f59e0b 100%)}.category-option.selected .category-checkbox:after{content:"";border-bottom:2.5px solid #231703;border-left:2.5px solid #231703;width:10px;height:6px;transform:rotate(-45deg)translateY(-1px)}.category-option.partial .category-checkbox:after{content:"";background:#fbbf24;border-radius:2px;width:9px;height:2.5px}.category-option-name{color:#e2e8f0;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;overflow:hidden}.category-option.selected .category-option-name{color:#fff;font-weight:600}.category-empty{color:#94a3b8;text-align:center;padding:1rem 0;font-size:.92rem}.category-modal-actions{flex-wrap:wrap;align-items:center;gap:.6rem;margin-top:1.15rem;display:flex}.category-modal-spacer{flex:1}@keyframes categoryFadeIn{0%{opacity:0}to{opacity:1}}@keyframes categoryPopIn{0%{opacity:0;transform:translateY(10px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@media (prefers-reduced-motion:reduce){.category-modal-overlay,.category-modal{animation:none!important}.btn{transition:none!important}}@media (width<=480px){.header-inner{gap:.6rem;padding:.65rem .85rem}.header-left{gap:.55rem}.brand-logo{width:36px;height:36px}.brand-name{font-size:1.25rem}.brand-tag{display:none}.btn{padding:.5rem .85rem;font-size:.82rem}.btn-category-badge{max-width:80px}.category-modal-actions .btn{padding:.5rem .85rem}}.auth-page{min-height:100vh;color:var(--text);justify-content:center;align-items:center;padding:2rem 1rem;display:flex}.auth-card{background:var(--bg-elevated);border:1px solid var(--border);width:min(440px,100%);box-shadow:var(--shadow);border-radius:1rem;padding:2rem 1.75rem 1.75rem;animation:.25s authFadeIn}@keyframes authFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.auth-brand{justify-content:center;margin-bottom:1.4rem;text-decoration:none;display:flex}.auth-brand-logo{filter:drop-shadow(0 2px 8px #fbbf2433);width:46px;height:46px}.auth-title{letter-spacing:.02em;color:#f8fafc;text-align:center;margin:0 0 .4rem;font-family:Georgia,Times New Roman,serif;font-size:1.55rem;font-weight:700}.auth-subtitle{color:var(--text-muted);text-align:center;margin:0 0 1.5rem;font-size:.95rem;line-height:1.45}.auth-form{gap:1rem;display:grid}.auth-field{color:#cbd5e1;gap:.55rem;font-size:.95rem;display:grid}.auth-field input{color:#f8fafc;background:#05070fd9;border:1px solid #94a3b840;border-radius:.85rem;width:100%;padding:.85rem 1rem;font-size:.97rem}.auth-field input::placeholder{color:#94a3b88c}.auth-field input:focus{border-color:#fbbf2499;outline:none;box-shadow:0 0 0 3px #fbbf241f}.auth-actions{margin-top:.4rem}.auth-actions .btn{width:100%}.auth-error,.auth-success{border-radius:.85rem;padding:.85rem 1rem;font-size:.92rem;font-weight:600}.auth-error{color:#fecaca;background:#f871711f}.auth-success{color:#bbf7d0;background:#22c55e1f}.auth-divider{color:var(--text-muted);letter-spacing:.14em;text-transform:uppercase;align-items:center;gap:.75rem;margin:1.4rem 0;font-size:.72rem;font-weight:600;display:flex}.auth-divider:before,.auth-divider:after{content:"";background:#94a3b82e;flex:1;height:1px}.auth-social{gap:.6rem;display:grid}.auth-alt{text-align:center;color:var(--text-muted);margin-top:1.4rem;font-size:.92rem}.auth-link{color:#fcd34d;cursor:pointer;text-underline-offset:3px;background:0 0;border:none;padding:0;font-size:.92rem;font-weight:600;text-decoration:underline;transition:color .2s}.auth-link:hover{color:#fde68a}:root{--bg:#05070f;--bg-elevated:#0b1120;--surface:#101828;--border:#94a3b824;--text:#f1f5f9;--text-muted:#94a3b8;--accent:#fbbf24;--accent-soft:#fbbf2429;--shadow:0 18px 50px #00000073}.home-page{color:var(--text);background:radial-gradient(900px 480px at 85% -10%, #60a5fa1f, transparent 60%), radial-gradient(700px 420px at 8% -5%, #fbbf2412, transparent 55%), var(--bg);min-height:100vh;font-family:Inter,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.gallery-section{max-width:1060px;margin:0 auto;padding:1.25rem 1rem 3rem}.masonry-grid{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:5px;width:100%;display:grid}.photo-card{aspect-ratio:1;background:var(--surface);cursor:pointer;width:100%;color:inherit;border:none;border-radius:4px;padding:0;display:block;position:relative;overflow:hidden}.photo-frame{display:block;position:absolute;inset:0}.photo-card img{object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .35s,transform .35s;display:block}.photo-card img.loaded{opacity:1}.photo-card:hover img,.photo-card:focus-visible img{transform:scale(1.04)}.photo-overlay{z-index:2;text-align:left;opacity:0;pointer-events:none;background:linear-gradient(#03060f00 30%,#03060f40 55%,#03060fe0 100%);flex-direction:column;justify-content:flex-end;gap:.15rem;padding:.9rem;transition:opacity .25s;display:flex;position:absolute;inset:0}.photo-card:hover .photo-overlay,.photo-card:focus-visible .photo-overlay{opacity:1}.photo-overlay-title{color:#fff;text-shadow:0 1px 6px #0009;text-overflow:ellipsis;white-space:nowrap;font-size:.98rem;font-weight:600;overflow:hidden}.photo-overlay-location{color:#cbd5e1;text-overflow:ellipsis;white-space:nowrap;font-size:.82rem;overflow:hidden}.photo-overlay-tags{flex-wrap:wrap;gap:.35rem;margin-top:.35rem;display:flex}.photo-tag{background:var(--accent-soft);color:#fcd34d;letter-spacing:.02em;border:1px solid #fbbf2459;border-radius:999px;padding:.18rem .6rem;font-size:.72rem;font-weight:600;display:inline-block}.empty-gallery{text-align:center;color:var(--text-muted);padding:4rem 1rem;font-size:1.05rem}.scroll-sentinel{text-align:center;color:var(--text-muted);letter-spacing:.04em;padding:1.5rem 0 .5rem;font-size:.85rem}.btn{cursor:pointer;white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:.4rem;padding:.6rem 1.15rem;font-size:.9rem;font-weight:600;transition:transform .18s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;display:inline-flex}.btn:hover,.btn:focus-visible{transform:translateY(-1px)}.btn.primary{color:#231703;background:linear-gradient(135deg,#fcd34d 0%,#f59e0b 100%);border:none;box-shadow:0 4px 16px #f59e0b47}.btn.secondary{color:#e2e8f0;background:#94a3b814;border:1px solid #94a3b838}.btn.danger{color:#fff;background:linear-gradient(135deg,#f43f5e 0%,#dc2626 100%);border:none}.btn.danger:hover{box-shadow:0 10px 26px #dc262659}.btn:disabled{opacity:.6;cursor:not-allowed;box-shadow:none;transform:none}.btn-edit{color:#f1f5f9;background:#94a3b81f;border:1px solid #94a3b847}.btn-delete{color:#fecaca;background:0 0;border:1px solid #f8717199}.btn-delete:hover{background:#f871711f}.lightbox{z-index:999;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#03050fe6;place-items:center;padding:1rem;animation:.2s fadeIn;display:grid;position:fixed;inset:0}.lightbox-content{background:var(--bg-elevated);border:1px solid var(--border);width:auto;max-width:94vw;min-height:0;max-height:94vh;box-shadow:var(--shadow);border-radius:.9rem;flex-direction:column;display:flex;position:relative;overflow:hidden}.lightbox-content>img{object-fit:contain;background:#000;width:100%;height:auto;max-height:calc(94vh - 90px);display:block}.lightbox-caption{border-top:1px solid var(--border);flex-shrink:0;padding:.85rem 1.1rem 1.1rem}.lightbox-caption h3{color:#fff;margin:0;font-size:1.1rem}.lightbox-tags{flex-wrap:wrap;gap:.4rem;margin-top:.45rem;display:flex}.lightbox-actions{flex-wrap:wrap;gap:.6rem;margin-top:.9rem;display:flex}.close-btn{z-index:10;color:#e2e8f0;cursor:pointer;background:#0b1120d9;border:none;border-radius:999px;place-items:center;width:34px;height:34px;font-size:1.1rem;transition:background-color .2s;display:grid;position:absolute;top:.5rem;right:.55rem}.close-btn:hover{background:#1e293bf2}.nav-btn{z-index:10;color:#e2e8f0;cursor:pointer;background:#0b1120d9;border:none;border-radius:999px;place-items:center;width:46px;height:46px;font-size:1.9rem;line-height:1;transition:background-color .2s,transform .1s;display:grid;position:absolute;top:50%;transform:translateY(-50%)}.nav-btn:hover{background:#1e293bf2;transform:translateY(-50%)scale(1.06)}.nav-prev{left:.75rem}.nav-next{right:.75rem}.modal-form input,.modal-form textarea{color:#f8fafc;background:#05070fd9;border:1px solid #94a3b840;border-radius:.85rem;width:100%;padding:.85rem 1rem;font-size:.97rem}.modal-form input:focus,.modal-form textarea:focus{border-color:#fbbf2499;outline:none;box-shadow:0 0 0 3px #fbbf241f}.modal-form textarea{resize:vertical;min-height:100px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.photo-card img,.photo-overlay,.btn,.chip{transition:none!important}}@media (width<=900px){.masonry-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}.photo-overlay{opacity:1;background:linear-gradient(#03060f00 58%,#03060fc7 100%)}}@media (width<=560px){.gallery-section{padding:.9rem .6rem 2.5rem}.masonry-grid{gap:3px}.photo-overlay-title{font-size:.85rem}.photo-tag{padding:.14rem .5rem;font-size:.64rem}.nav-btn{width:38px;height:38px;font-size:1.5rem}}.upload-page{color:var(--text);padding:2rem 1rem 3rem}.upload-card{background:var(--bg-elevated);border:1px solid var(--border);width:min(720px,100%);box-shadow:var(--shadow);border-radius:1rem;margin:0 auto;padding:2rem}.upload-card h1{letter-spacing:.02em;color:#f8fafc;margin:0 0 1rem;font-family:Georgia,Times New Roman,serif;font-size:1.6rem}.upload-card>p{color:var(--text-muted);margin:0 0 1.5rem;line-height:1.45}.upload-form{gap:1rem;display:grid}.upload-form label{color:#cbd5e1;gap:.55rem;font-size:.95rem;display:grid}.upload-form input,.upload-form textarea{color:#f8fafc;background:#05070fd9;border:1px solid #94a3b840;border-radius:.85rem;width:100%;padding:.95rem 1rem;font-size:.97rem}.upload-form input:focus,.upload-form textarea:focus{border-color:#fbbf2499;outline:none;box-shadow:0 0 0 3px #fbbf241f}.upload-form textarea{resize:vertical;min-height:120px}.upload-form input[type=file]{color:var(--text-muted);padding:.6rem .5rem}.upload-form input[type=file]::file-selector-button{color:#f1f5f9;cursor:pointer;background:#94a3b81f;border:none;border-radius:999px;margin-right:.85rem;padding:.45rem .9rem;font-weight:600;transition:background-color .2s}.upload-form input[type=file]::file-selector-button:hover{background:#94a3b838}.category-fieldset{border:1px solid #94a3b840;border-radius:.85rem;margin:0;padding:.9rem 1rem}.category-fieldset legend{color:#cbd5e1;padding:0 .35rem;font-size:.9rem}.category-empty{color:var(--text-muted);font-size:.9rem}.category-tree{flex-direction:column;gap:.15rem;max-height:260px;padding:.35rem .25rem;display:flex;overflow-y:auto}.category-tree-node{color:#e2e8f0;cursor:pointer;border-radius:.4rem;align-items:center;gap:.5rem;padding-top:.3rem;padding-bottom:.3rem;font-size:.92rem;transition:background-color .15s;display:flex}.category-tree-node:hover{background:#94a3b81a}.category-tree-node input{width:auto;accent-color:var(--accent);flex-shrink:0}.category-node-name.is-parent{color:#f8fafc;font-weight:600}.upload-message,.status{border-radius:.85rem;padding:.95rem 1rem;font-size:.92rem;font-weight:600}.upload-message.success,.status.success{color:#bbf7d0;background:#22c55e1f}.upload-message.error,.status.error{color:#fecaca;background:#f871711f}.uploaded-image{text-align:center;margin-top:1.5rem}.uploaded-image img{object-fit:contain;border:1px solid var(--border);border-radius:.85rem;max-width:100%;max-height:380px;margin:0 auto .75rem}.uploaded-image p{color:#bbf7d0;font-size:.92rem;font-weight:600}.upload-actions{flex-wrap:wrap;justify-content:flex-start;gap:.75rem;display:flex}.cat-admin-page{color:var(--text);padding:2rem 1rem 3rem}.cat-admin-card{background:var(--bg-elevated);border:1px solid var(--border);max-width:860px;box-shadow:var(--shadow);border-radius:1rem;margin:0 auto;padding:2rem}.cat-admin-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1.5rem;display:flex}.cat-admin-header h1{letter-spacing:.02em;color:#f8fafc;margin:0 0 .35rem;font-family:Georgia,Times New Roman,serif;font-size:1.6rem}.cat-admin-header p{color:var(--text-muted);margin:0}.cat-error{margin-bottom:1rem}.cat-loading{color:var(--text-muted);text-align:center;padding:1.5rem 0}.cat-tree{flex-direction:column;gap:.35rem;display:flex}.cat-node{flex-direction:column;display:flex}.cat-row{background:#94a3b80f;border:1px solid #94a3b824;border-radius:.6rem;justify-content:space-between;align-items:center;gap:.75rem;padding:.6rem .75rem;transition:border-color .2s,background-color .2s;display:flex}.cat-row:hover{border-color:#fbbf2459}.cat-name{color:#e2e8f0;font-weight:600}.cat-actions{gap:.4rem;display:flex}.btn-small{color:#e2e8f0;cursor:pointer;background:#94a3b81f;border:1px solid #94a3b847;border-radius:999px;padding:.35rem .75rem;font-size:.8rem;font-weight:600;transition:opacity .2s,background-color .2s,border-color .2s,transform .18s}.btn-small:hover{background:#94a3b838;border-color:#94a3b873;transform:translateY(-1px)}.btn-danger-text{color:#fecaca;border-color:#f8717180}.btn-danger-text:hover{background:#f8717124;border-color:#f87171b3}.cat-children{border-left:1px solid #94a3b833;flex-direction:column;gap:.35rem;margin-top:.35rem;margin-left:1.4rem;padding-left:.9rem;display:flex}.cat-depth-0 .cat-row{font-size:1rem}.modal-overlay{z-index:1000;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#03050fdb;place-items:center;padding:1rem;animation:.2s catFadeIn;display:grid;position:fixed;inset:0}.modal-content{background:var(--bg-elevated);border:1px solid var(--border);width:min(480px,100%);max-height:92vh;box-shadow:var(--shadow);border-radius:1rem;padding:1.6rem 1.5rem 1.4rem;overflow-y:auto}.modal-content h2{color:#f8fafc;margin:0 0 .35rem;font-size:1.35rem}.modal-subtitle{color:var(--text-muted);margin:0 0 1.2rem;font-size:.95rem;line-height:1.45}.modal-form{gap:1rem;display:grid}.modal-form label{color:#cbd5e1;gap:.55rem;font-size:.95rem;display:grid}.modal-form input,.modal-form select{color:#f8fafc;background:#05070fd9;border:1px solid #94a3b840;border-radius:.85rem;width:100%;padding:.85rem 1rem;font-size:.97rem}.modal-form input:focus,.modal-form select:focus{border-color:#fbbf2499;outline:none;box-shadow:0 0 0 3px #fbbf241f}.modal-form select option{background:var(--bg-elevated);color:#f8fafc}.modal-actions{flex-wrap:wrap;justify-content:flex-end;gap:.75rem;margin-top:.4rem;display:flex}.modal-message{border-radius:.85rem;padding:.85rem 1rem;font-size:.92rem;font-weight:600}.modal-message.error{color:#fecaca;background:#f871711f}@keyframes catFadeIn{0%{opacity:0}to{opacity:1}}
