@layer components{.gallery-section{padding:var(--s-xl) var(--s-md);max-width:1600px;margin:0 auto}.gallery-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--s-md);padding-bottom:var(--s-lg)}.gallery-header a.nav-link{font-size:var(--f-body)}.gallery-heading{font-family:var(--ff-heading);font-size:var(--f-hero);font-weight:700;text-transform:uppercase;line-height:.9}.gallery-heading .g{color:var(--c-green)}.gallery-heading .c{color:var(--c-cyan)}.gallery-count{font-family:var(--ff-body);font-size:var(--f-micro);color:var(--c-muted);letter-spacing:.1em}.tag-filter{display:flex;flex-wrap:wrap;gap:2px;padding-bottom:var(--s-lg)}.tag-btn{font-family:var(--ff-body);font-size:var(--f-small);letter-spacing:.06em;text-transform:uppercase;padding:7px 16px;border:1px solid var(--c-border);color:var(--c-dim);transition:all var(--t-fast);position:relative;overflow:hidden}.tag-btn:before{content:"";position:absolute;inset:0;background:var(--c-green);transform:scaleX(0);transform-origin:left;transition:transform .3s var(--ease-out);z-index:0}.tag-btn span{position:relative;z-index:1}.tag-btn:hover{border-color:var(--c-green);color:var(--c-text)}.tag-btn:hover:before{transform:scaleX(1)}.tag-btn.active{border-color:var(--c-green);color:var(--c-bg);background:var(--c-green)}.tag-btn.active:before{transform:scaleX(1)}.gallery-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:3px}.g-tile{position:relative;overflow:hidden;cursor:pointer;container-type:inline-size;container-name:gtile;background:var(--c-surface);border:1px solid transparent;transition:border-color var(--t-fast)}.g-tile:hover{border-color:var(--c-green)}.g-tile img{width:100%;height:100%;object-fit:cover;transition:transform var(--t-slow),filter var(--t-slow)}.g-tile:hover img{transform:scale(1.07);filter:brightness(.4) saturate(.6)}.g-tile.size-hero{grid-column:span 8;grid-row:span 2}.g-tile.size-tall{grid-column:span 4;grid-row:span 2}.g-tile.size-wide{grid-column:span 6}.g-tile.size-medium{grid-column:span 4}.g-tile.size-small{grid-column:span 3}.g-tile .tile-inner{height:100%;min-height:clamp(180px,20vw,400px)}.g-tile.size-hero .tile-inner,.g-tile.size-tall .tile-inner{min-height:clamp(350px,40vw,700px)}@media(max-width:900px){.g-tile.size-hero{grid-column:span 12;grid-row:span 1}.g-tile.size-tall{grid-column:span 6;grid-row:span 1}.g-tile.size-wide{grid-column:span 12}.g-tile.size-medium,.g-tile.size-small{grid-column:span 6}}@media(max-width:550px){.g-tile.size-hero,.g-tile.size-tall,.g-tile.size-wide,.g-tile.size-medium,.g-tile.size-small{grid-column:span 12}}.g-overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;padding:var(--s-md);opacity:0;transition:opacity var(--t-normal);pointer-events:none}.g-tile:hover .g-overlay{opacity:1}.g-overlay-top{display:flex;justify-content:space-between;align-items:flex-start}.g-number{font-family:var(--ff-heading);font-size:var(--f-display);font-weight:700;color:var(--c-green);line-height:1}.g-location{font-family:var(--ff-body);font-size:var(--f-micro);color:var(--c-hero-text);letter-spacing:.1em;text-transform:uppercase;text-align:right;opacity:.6}.g-title{font-family:var(--ff-heading);font-size:var(--f-title);font-weight:700;text-transform:uppercase;line-height:1;color:var(--c-hero-text);margin-bottom:var(--s-2xs)}.g-tags{font-family:var(--ff-body);font-size:var(--f-micro);color:var(--c-cyan);letter-spacing:.08em}.g-view-prompt{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.8);font-family:var(--ff-body);font-size:var(--f-small);letter-spacing:.2em;text-transform:uppercase;color:var(--c-hero-text);border:1px solid var(--c-green);padding:10px 28px;opacity:0;transition:all var(--t-normal);pointer-events:none}.g-tile:hover .g-view-prompt{opacity:1;transform:translate(-50%,-50%) scale(1)}@container gtile (max-width:250px){.g-number{font-size:var(--f-title)}.g-title{font-size:var(--f-small)}.g-view-prompt,.g-location{display:none}}.g-tile{opacity:0;transform:translateY(30px);transition:opacity .6s var(--ease-out),transform .6s var(--ease-out),border-color var(--t-fast)}.g-tile.visible{opacity:1;transform:translateY(0)}}
