.gal-toolbar{display:flex;justify-content:space-between;align-items:center;gap:.75rem;flex-wrap:wrap;margin-bottom:1.5rem}
.year-chips{display:flex;gap:.4rem;flex-wrap:wrap}
.year-chips a{padding:.3rem .8rem;border-radius:999px;background:#fff;border:1px solid var(--line);text-decoration:none;font-weight:700;color:var(--navy)}
.year-chips a:hover{background:var(--gold);border-color:var(--gold)}
.year-head{border-bottom:2px solid var(--gold);padding-bottom:.3rem;margin:2rem 0 1.2rem}
.year-head:first-of-type{margin-top:0}
.albums{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:1.25rem}
.album-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;text-decoration:none;color:inherit;box-shadow:var(--shadow);transition:transform .15s,box-shadow .15s}
.album-card:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(14,31,58,.14);color:inherit}
.album-card .cv{position:relative;aspect-ratio:4/3;background:#dfe5ee;overflow:hidden}
.album-card .cv img{width:100%;height:100%;object-fit:cover}
.album-card .count{position:absolute;right:.5rem;bottom:.5rem;background:rgba(14,31,58,.85);color:#fff;font-size:.8rem;font-weight:700;padding:.15rem .55rem;border-radius:999px}
.album-card .bd{padding:.85rem 1rem 1rem}
.album-card h3{margin:0 0 .15rem;font-size:1.25rem}
.album-card .date{color:var(--muted);font-size:.92rem}

/* justified-ish grid using aspect ratios */
.photo-grid{display:flex;flex-wrap:wrap;gap:6px}
.photo-grid::after{content:"";flex-grow:999}
.ph-tile{flex-grow:calc(var(--ar)*100);flex-basis:calc(var(--ar)*220px);aspect-ratio:var(--ar);max-height:340px;max-width:calc(var(--ar)*340px);overflow:hidden;border-radius:6px;background:#dfe5ee;display:block}
.ph-tile img{width:100%;height:100%;object-fit:cover;transition:transform .3s}
.ph-tile:hover img{transform:scale(1.04)}
@media (max-width:600px){.ph-tile{flex-basis:calc(var(--ar)*140px)}}

.lb{position:fixed;inset:0;background:rgba(6,12,24,.95);z-index:1000;display:flex;align-items:center;justify-content:center}
.lb[hidden]{display:none}
.lb figure{margin:0;max-width:92vw;max-height:86vh;display:flex;flex-direction:column;align-items:center}
.lb img{max-width:92vw;max-height:80vh;object-fit:contain;border-radius:4px}
.lb figcaption{color:#e6ebf3;margin-top:.6rem;text-align:center;max-width:70ch}
.lb button{position:absolute;background:rgba(255,255,255,.12);color:#fff;border:0;border-radius:50%;width:48px;height:48px;font-size:2rem;line-height:1;cursor:pointer;display:grid;place-items:center}
.lb button:hover{background:rgba(255,255,255,.25)}
.lb-x{top:14px;right:14px}
.lb-prev{left:14px;top:50%;transform:translateY(-50%)}
.lb-next{right:14px;top:50%;transform:translateY(-50%)}
.lb-bar{position:absolute;left:0;right:0;bottom:12px;display:flex;justify-content:center;gap:1.5rem;color:#b9c3d6;font-size:.9rem}
.lb-bar a{color:#fff}
@media (max-width:600px){.lb-prev,.lb-next{top:auto;bottom:40px;transform:none}}

/* Upload */
.drop{border:2.5px dashed #9aa7bd;border-radius:12px;background:#fff;padding:2.2rem 1rem;text-align:center;cursor:pointer;transition:background .15s,border-color .15s}
.drop.over{background:#fff8e1;border-color:var(--gold)}
.drop strong{display:block;font-size:1.2rem;color:var(--navy)}
.queue{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:.6rem;margin-top:1rem}
.q{position:relative;border-radius:8px;overflow:hidden;background:#e9edf3;aspect-ratio:1}
.q img{width:100%;height:100%;object-fit:cover}
.q .st{position:absolute;left:0;right:0;bottom:0;font-size:.78rem;font-weight:700;padding:.25rem .4rem;background:rgba(14,31,58,.85);color:#fff}
.q.done .st{background:#166534}
.q.err .st{background:var(--red)}
.q .bar{position:absolute;left:0;top:0;height:4px;background:var(--gold);width:0;transition:width .2s}
.radio-row{display:flex;gap:1.25rem;flex-wrap:wrap;margin-bottom:.75rem}
.radio-row label{font-weight:600;display:flex;gap:.4rem;align-items:center;cursor:pointer}

/* Admin */
.tabs{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:1.5rem}
.tabs a{padding:.5rem 1rem;border-radius:8px;background:#fff;border:1px solid var(--line);text-decoration:none;font-weight:700;color:var(--navy)}
.tabs a.on{background:var(--navy);color:#fff;border-color:var(--navy)}
.badge-n{display:inline-block;min-width:1.4em;padding:0 .4em;border-radius:999px;background:var(--red);color:#fff;font-size:.8rem;text-align:center;margin-left:.3rem}
.pgroup{margin-bottom:2rem}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:.75rem}
.pitem{background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden;font-size:.85rem}
.pitem label{display:block;margin:0;cursor:pointer;font-weight:400;color:inherit}
.pitem .im{aspect-ratio:4/3;background:#e9edf3;position:relative}
.pitem .im img{width:100%;height:100%;object-fit:cover}
.pitem input[type=checkbox]{position:absolute;top:.5rem;left:.5rem;width:22px;height:22px;accent-color:var(--navy)}
.pitem .meta{padding:.45rem .6rem;color:var(--muted)}
.pitem.cover{outline:3px solid var(--gold)}
.sticky-actions{position:sticky;bottom:0;background:rgba(245,246,248,.96);backdrop-filter:blur(4px);border-top:1px solid var(--line);padding:.8rem 0;margin-top:1rem;display:flex;gap:.6rem;flex-wrap:wrap;align-items:center;z-index:5}
table.admin{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden}
table.admin th,table.admin td{padding:.6rem .75rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
table.admin th{background:#eef2f8;color:var(--navy);font-size:.9rem}
table.admin img{width:72px;height:54px;object-fit:cover;border-radius:4px}
.inline-form{display:inline}
code{background:#eef2f8;padding:.1rem .35rem;border-radius:4px}
