@keyframes pf-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.85)}}.portfolio-hero{background:var(--cream);padding:130px 24px 56px;text-align:center;border-bottom:1px solid var(--border)}.portfolio-hero .eyebrow.center{display:inline-flex;color:var(--brand)}.portfolio-hero h1{font-family:var(--font-display);font-style:italic;font-weight:500;font-size:clamp(48px,6.5vw,96px);line-height:.9;letter-spacing:-.042em;color:var(--fg-1);margin:14px auto 18px}.portfolio-hero h1 em{color:var(--brand);font-style:italic}.portfolio-hero .tagline{font-family:var(--font-display);font-style:italic;font-weight:500;font-size:clamp(18px,1.7vw,24px);color:var(--fg-2);max-width:680px;margin:0 auto;line-height:1.4}.portfolio-hero .rule{width:44px;height:1.5px;background:var(--brand);margin:28px auto 0}.pf-nav{position:sticky;top:0;z-index:20;background:var(--bone);border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:18px 24px}.pf-nav .row{width:min(1440px,100%);margin:0 auto;display:flex;gap:32px;align-items:center;justify-content:center;flex-wrap:wrap}.pf-nav .link{font-family:var(--font-sans);font-size:13px;letter-spacing:.04em;color:var(--fg-3);background:none;border:0;cursor:pointer;padding:6px 0;position:relative;transition:color .24s ease;font-weight:500}.pf-nav .link:after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:1.5px;background:var(--brand);transform:scaleX(0);transform-origin:center;transition:transform .32s var(--ease-out)}.pf-nav .link:hover{color:var(--fg-1)}.pf-nav .link.active{color:var(--fg-1);font-weight:600}.pf-nav .link.active:after{transform:scaleX(1)}.pf-nav .sep{color:var(--stone-300);font-size:10px}.portfolio{padding:clamp(56px,6vw,88px) 24px;background:var(--cream)}.portfolio .shell-wide{width:min(1440px,100%);margin:0 auto}.pf-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-flow:dense;gap:36px 24px;align-items:start}.pf-card{display:flex;flex-direction:column;text-decoration:none;color:inherit;cursor:pointer}.pf-card .frame{position:relative;aspect-ratio:3 / 2;overflow:hidden;background:var(--charcoal);transition:transform .35s var(--ease-out)}.pf-card:hover .frame{transform:translateY(-3px)}.pf-card .img{position:absolute;inset:0;background-size:cover;background-position:center;transition:transform .9s var(--ease-out)}.pf-card:hover .img{transform:scale(1.04)}.pf-card .caption{padding:16px 2px 0}.pf-card .city{font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--brand);font-weight:800;margin-bottom:6px}.pf-card .type-line{font-family:var(--font-display);font-style:italic;font-weight:500;font-size:18px;line-height:1.2;color:var(--fg-1);margin:0;transition:color .24s ease}.pf-card:hover .type-line{color:var(--brand)}.pf-card.is-large{grid-column:span 2;grid-row:span 2}.pf-card.is-large .type-line{font-size:26px;line-height:1.1}.pf-card.is-large .caption{padding-top:20px}.pf-card .badge{position:absolute;top:14px;right:14px;z-index:3;display:inline-flex;align-items:center;gap:7px;background:#0f0c0a9e;color:#fff;font-size:10px;letter-spacing:.18em;text-transform:uppercase;font-weight:800;padding:7px 11px 6px;backdrop-filter:blur(8px)}.pf-card .badge.video{background:#a8131aeb}.pf-card .badge.ba{background:#0f0c0abf}.pf-card .badge .dot{width:6px;height:6px;border-radius:50%;background:#fff}.pf-card .badge.video .dot{background:#fff;animation:pf-pulse 2s ease-in-out infinite}.pf-card.is-video .play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:64px;height:64px;border-radius:50%;background:#fffaf2eb;display:flex;align-items:center;justify-content:center;z-index:2;box-shadow:0 4px 16px #0f0c0a66;transition:transform .3s,background .3s;pointer-events:none}.pf-card.is-video:hover .play{background:var(--brand);transform:translate(-50%,-50%) scale(1.08)}.pf-card.is-video .play:before{content:"";width:0;height:0;border-style:solid;border-width:10px 0 10px 16px;border-color:transparent transparent transparent var(--fg-1);margin-left:4px;transition:border-color .3s}.pf-card.is-video:hover .play:before{border-left-color:#fff}.pf-card.is-large.is-video .play{width:92px;height:92px}.pf-card.is-large.is-video .play:before{border-width:14px 0 14px 22px}.pf-card .frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;z-index:5}.pf-card.is-ba .img{display:none}.pf-card.is-ba .ba-split{position:absolute;inset:0;display:grid;grid-template-columns:1fr 1fr}.pf-card.is-ba .ba-split .half{position:relative;overflow:hidden}.pf-card.is-ba .ba-split .half .img-bg{position:absolute;inset:0;background-size:cover;background-position:center}.pf-card.is-ba .ba-split .half.before .img-bg{filter:grayscale(.55) brightness(.78) contrast(.95)}.pf-card.is-ba .ba-split:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;background:var(--cream);z-index:4;box-shadow:0 0 12px #0006}.pf-card.is-ba .ba-label{position:absolute;top:14px;z-index:3;font-size:10px;letter-spacing:.22em;text-transform:uppercase;font-weight:800;color:#fff;background:#0f0c0a8c;padding:6px 10px 5px;backdrop-filter:blur(8px)}.pf-card.is-ba .ba-label.l{left:14px}.pf-card.is-ba .ba-label.r{right:14px;background:#a8131ae0}.pf-card.is-hidden{display:none}.pf-empty{grid-column:1 / -1;text-align:center;padding:64px 0;color:var(--fg-3);font-family:var(--font-display);font-style:italic;font-size:20px}.pf-empty[hidden]{display:none}.pf-more{display:flex;flex-direction:column;align-items:center;gap:18px;margin-top:72px}.pf-more .btn{min-width:220px;justify-content:center}.pf-more .hint{font-family:var(--font-display);font-style:italic;font-weight:500;font-size:16px;color:var(--fg-3)}.pf-more .hint em{color:var(--brand)}.pf-more[hidden]{display:none}@media(max-width:1100px){.pf-grid{grid-template-columns:repeat(3,1fr)}}@media(max-width:720px){.pf-nav .row{gap:18px;justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap;padding:0 4px}.pf-nav .sep{display:none}.pf-grid{grid-template-columns:repeat(2,1fr);gap:28px 14px}.pf-card.is-large{grid-column:span 2;grid-row:auto}.pf-card.is-large .type-line{font-size:20px}}@media(max-width:480px){.pf-grid{grid-template-columns:1fr}.pf-card.is-large{grid-column:span 1}}
