/* The linked grid is the no-JS fallback; enhanced cards keep the same content. */
.portfolio-carousel{position:relative;isolation:isolate}
.portfolio-carousel .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.portfolio-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.portfolio-card{min-width:0;border:1px solid #94b9af55;border-radius:22px;background:#14211f;box-shadow:inset 0 1px 0 #e3fff333,0 18px 40px #0005;overflow:hidden}
.carousel-card-link{display:flex;flex-direction:column;height:100%;position:relative;color:var(--text);cursor:pointer;-webkit-user-drag:none}
/* The complete card is one link. Its decorative 3D layers never steal a hit. */
.carousel-card-link>*{pointer-events:none}
.carousel-card-link img{-webkit-user-drag:none}
.carousel-card-shade{display:none}
.is-enhanced .carousel-card-shade{display:block;position:absolute;inset:0;border-radius:inherit;z-index:4;background:#000;opacity:0;pointer-events:none}
.carousel-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:18px 21px;color:#c2d9cf;font-size:10px;line-height:1.5;letter-spacing:.075em;text-transform:uppercase}
.carousel-spark{display:grid;place-items:center;width:27px;height:27px;flex-shrink:0;border:1px solid #e8fff347;border-radius:50%;font-size:18px;line-height:1;font-weight:300;color:#e8fff3;transition:background .25s,border-color .25s,transform .25s}
.carousel-art{position:relative;background:radial-gradient(ellipse at 50% 0,#b5e5d230,transparent 70%),linear-gradient(140deg,#315347,#10271f);padding:22px 18px 26px;overflow:hidden;isolation:isolate}
.carousel-art-1{background:radial-gradient(ellipse at 50% 0,#c8e9e055,transparent 75%),linear-gradient(140deg,#4e6b66,#1b3430)}
.carousel-art-2{background:radial-gradient(ellipse at 50% 0,#badde944,transparent 70%),linear-gradient(140deg,#264453,#102331)}
.carousel-art-3{background:radial-gradient(ellipse at 50% 0,#cdc5ed44,transparent 70%),linear-gradient(140deg,#41415c,#1c2031)}
.carousel-art-4{background:radial-gradient(ellipse at 50% 0,#bcd2e944,transparent 70%),linear-gradient(140deg,#314455,#142430)}
.carousel-screen{position:relative;border:1px solid #e7fff480;border-radius:7px;overflow:hidden;box-shadow:0 20px 24px #0007,0 1px 0 #fff8;transform:perspective(800px) rotateY(-4deg) rotateX(3deg);z-index:1;aspect-ratio:1.55;background:#e9f1ee;transition:transform .4s cubic-bezier(.2,.7,.2,1)}
.carousel-screen img{width:100%;height:100%;object-fit:cover;object-position:top}
.carousel-art-light{position:absolute;inset:auto 15% 4px;height:18px;border-radius:50%;background:#c5fff133;filter:blur(12px)}
.carousel-card-copy{display:flex;flex-direction:column;flex:1;padding:24px 23px 20px;background:linear-gradient(145deg,#23332c44,#0a1315a6);border-top:1px solid #c8e6db24}
.carousel-category{font-size:10px;line-height:1.6;letter-spacing:.075em;text-transform:uppercase;color:#b6ccbf}
.carousel-card-copy :is(h2,h3){font-size:35px;line-height:1.15;margin:12px 0 14px;letter-spacing:-.045em;color:#f2f6f4}
.carousel-card-copy>p{font-size:14px;line-height:1.65;color:#c3cfc9;margin-bottom:20px}
.carousel-card-bottom{display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid #d8efdf38;border-radius:10px;padding:11px 13px;margin-top:auto;font-size:12px;line-height:1.4;color:#e0f2e8;background:linear-gradient(105deg,#b2e8cd14,#b2e8cd07);box-shadow:inset 0 1px 0 #fff1;transition:background .25s,border-color .25s,color .25s}
.carousel-card-bottom svg{width:20px;height:20px;transition:transform .25s}
.carousel-card-link:focus-visible{outline:2px solid var(--mint);outline-offset:-6px;border-radius:20px}
.carousel-light,.carousel-ground,.carousel-reflection{display:none}
.is-enhanced .carousel-stage{height:650px;position:relative;perspective:1500px;overflow:clip;border:0;border-radius:0;background:transparent;touch-action:pan-y;user-select:none;cursor:grab}
.is-enhanced .carousel-stage::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 50% 6% at 50% 89%,#8cecc51c,transparent),radial-gradient(ellipse 80% 22% at 50% 92%,#07171088,transparent);pointer-events:none}
.is-enhanced .carousel-light{display:block;position:absolute;inset:0 8%;background:radial-gradient(ellipse at 36% 25%,#a4f3d427,transparent 60%),radial-gradient(ellipse at 75% 55%,#e7c89b13,transparent 55%);filter:blur(32px);pointer-events:none}
.is-enhanced .carousel-track{position:absolute;inset:0;display:block;pointer-events:none;transform-style:preserve-3d;transform:rotateX(var(--view-y,0deg)) rotateY(var(--view-x,0deg));transition:transform .5s ease-out;--spread:230px;--card-width:320px;--card-height:500px}
.is-enhanced .portfolio-card{position:absolute;left:50%;top:46%;width:var(--card-width);height:var(--card-height);overflow:visible;transform:translate(-50%,-50%) translateX(calc(var(--slot,0)*var(--spread))) translateZ(var(--depth,0px)) rotateY(var(--yaw,0deg)) scale(var(--scale,1));opacity:1;transition:border-color .4s,box-shadow .4s;transform-origin:center;backface-visibility:hidden;z-index:1;border-radius:22px;background:transparent;box-shadow:none}
.is-enhanced .carousel-card-link{pointer-events:auto;overflow:hidden;border-radius:21px;background:linear-gradient(130deg,#30483d,#14231f 45%,#172e2b);box-shadow:inset 0 1px 0 #ecfff0aa,inset 2px 0 1px #e5ffed55,inset -2px 0 0 #080e0e,5px 6px 0 -2px #15352e,6px 6px 0 -2px #88bcaa5c,0 30px 40px #0008;animation:card-hover 13s ease-in-out infinite;animation-delay:var(--float-delay,0s);animation-play-state:paused;transform-origin:center;transition:box-shadow .3s}
.is-enhanced .carousel-card-link::after{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(118deg,#ffffff20,transparent 30%,transparent 62%,#ffffff0d);animation:card-sheen 13s ease-in-out infinite;animation-delay:var(--float-delay,0s);animation-play-state:paused;pointer-events:none;box-shadow:inset 1px 0 0 #e8fff24d,inset -1px 0 0 #e8fff230}
.is-enhanced .carousel-card-link::before{content:"";position:absolute;inset:0;z-index:3;border-radius:inherit;pointer-events:none;background:radial-gradient(ellipse 240px 300px at var(--card-light-x,50%) var(--card-light-y,25%),#ecfff526,transparent 70%);opacity:0;transition:opacity .3s}
.carousel-card-link:focus-visible .carousel-card-bottom{border-color:#b7f4d8b3;background:#c4f7dc;color:#0f2920}
@media(hover:hover){
.carousel-card-link:hover::before{opacity:1}
.carousel-card-link:hover .carousel-card-bottom{border-color:#b7f4d8b3;background:#c4f7dc;color:#0f2920}
.carousel-card-link:hover .carousel-card-bottom svg{transform:translateX(3px)}
.carousel-card-link:hover .carousel-spark{background:#c4f7dc;color:#0f2920;border-color:#c4f7dc;transform:rotate(5deg)}
.carousel-card-link:hover .carousel-screen{transform:perspective(800px) rotateY(0deg) rotateX(0deg) scale(1.012)}
.is-enhanced .carousel-card-link:hover{box-shadow:inset 0 1px 0 #f1fff2,inset 2px 0 1px #e5ffed88,inset -2px 0 0 #080e0e,5px 6px 0 -2px #15352e,6px 6px 0 -2px #b1e1ca99,0 28px 44px #0009,0 0 26px #b9e7cb17}
}
.is-enhanced .portfolio-card::after{content:"";position:absolute;left:10%;right:10%;top:calc(100% + 23px);height:46px;border-radius:50%;background:#020d0d55;filter:blur(18px);transform:scaleY(.7);pointer-events:none}
.is-enhanced .portfolio-card.is-current{border-color:#d6f5e5b5;box-shadow:0 0 26px #b7efcd17}
.is-enhanced .portfolio-card.is-current .carousel-card-top{color:#e0f6e7}
.is-enhanced .carousel-art{padding-top:24px;padding-bottom:25px}
.is-enhanced .carousel-card-copy{padding-top:20px}
.is-enhanced .carousel-card-copy>p{font-size:13px;line-height:1.65;margin-bottom:18px}
.is-enhanced .carousel-card-copy :is(h2,h3){font-size:34px}
.is-enhanced .carousel-ground{display:block;position:absolute;bottom:35px;left:12%;right:12%;height:35px;filter:blur(16px);background:radial-gradient(ellipse,#b3efc233,transparent 65%);box-shadow:none;pointer-events:none}
.is-enhanced .portfolio-card.is-lifted{opacity:0;transition:opacity .18s}
.is-enhanced .carousel-reflection{display:block;position:absolute;inset:calc(100% + 46px) 4% auto;height:90px;background:var(--case-image) center 65%/cover no-repeat;transform:scaleY(-1) skewX(-8deg);opacity:.055;filter:blur(5px) saturate(.4);mask-image:linear-gradient(transparent,#0008);pointer-events:none;border-radius:14px}
.is-visible .carousel-card-link{will-change:transform}
.is-visible .portfolio-card{will-change:transform}
.is-floating .carousel-card-link,.is-floating .carousel-card-link::after{animation-play-state:running}
.is-dragging .carousel-stage,.is-dragging .carousel-card-link{cursor:grabbing}
.is-dragging .carousel-track{transition:none}
@keyframes card-hover{0%,100%{transform:translate3d(0,0,0) rotateX(1deg) rotateY(-1.3deg) rotateZ(-.4deg)}50%{transform:translate3d(0,-12px,12px) rotateX(-1.4deg) rotateY(1.7deg) rotateZ(.35deg)}}
@keyframes card-sheen{0%,100%{opacity:.55;transform:translateX(-6%)}50%{opacity:1;transform:translateX(6%)}}
.motion-paused .carousel-card-link,.motion-paused .carousel-card-link::after{animation:none;transform:none}
.document-hidden .carousel-card-link,.document-hidden .carousel-card-link::after{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){.is-enhanced .carousel-card-link,.is-enhanced .carousel-card-link::after{animation:none;transform:none}}

/* Touch GPUs keep the same card stack/material with fewer filtered surfaces.
The central card retains its float and sheen; side cards keep their 3D pose. */
@media(pointer:coarse){
.is-enhanced .carousel-light{filter:none}
.is-enhanced .portfolio-card::after{filter:none;background:radial-gradient(ellipse,#020d0d66,transparent 70%)}
.is-enhanced .carousel-ground{filter:none}
.is-enhanced .carousel-art-light{filter:none;background:radial-gradient(ellipse,#c5fff133,transparent 70%)}
.is-enhanced .carousel-reflection{display:none}
.is-floating .portfolio-card:not(.is-current) .carousel-card-link,.is-floating .portfolio-card:not(.is-current) .carousel-card-link::after{animation-play-state:paused}
.is-visible .portfolio-card:not(.is-current) .carousel-card-link{will-change:auto}
}

.carousel-controls{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:24px;min-height:50px}
.carousel-arrow,.carousel-play{display:flex;align-items:center;justify-content:center;width:46px;height:46px;flex-shrink:0;border-radius:50%;border:1px solid #a4f3d440;background:#15221e;color:#d6f6e5;transition:background .2s,border-color .2s}
.carousel-arrow:hover,.carousel-play:hover{border-color:#a4f3d4aa;background:#203b2e}
.carousel-prev svg{transform:rotate(180deg)}
.carousel-position{display:flex;flex-direction:column;align-items:center;gap:3px;min-width:104px;font-size:14px;line-height:1.4}
.carousel-counter{color:var(--soft);font:10px/1.4 monospace;letter-spacing:.1em}
.carousel-dots{display:flex;gap:2px;margin-inline:12px}
.carousel-dots button{display:grid;place-items:center;width:32px;height:44px;border:0;border-radius:8px;background:transparent;padding:0;color:var(--mint)}
.carousel-dots span{height:4px;width:15px;border-radius:3px;background:#79988b66;transition:background .25s,transform .25s}
.carousel-dots button[aria-pressed=true] span{background:var(--mint);transform:scaleX(1.3)}
.carousel-play{font-size:15px;width:40px;height:40px;color:var(--muted)}
.carousel-hint{font-size:12px;line-height:1.6;color:var(--soft);text-align:center;margin-top:16px}
.case-modal-open{overflow:hidden;scrollbar-gutter:stable}
.case-modal{border:1px solid #b7dacc66;padding:0;border-radius:22px;width:min(1120px,calc(100vw - 64px));max-width:none;max-height:calc(100dvh - 64px);background:#111d1c;color:var(--text);box-shadow:0 45px 160px #000b;overflow:hidden;transform-origin:center}
.case-modal::backdrop{background:#030809ba;backdrop-filter:blur(12px)}
.case-modal-toolbar{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 22px;border-bottom:1px solid #bfd9ce33;background:#162622}
.case-modal-toolbar>span{font-size:11px;letter-spacing:.1em;color:#b7d0c2}
.case-modal-close{display:flex;align-items:center;justify-content:center;gap:10px;min-height:44px;padding:8px 13px;border:1px solid #accbbb55;border-radius:10px;background:#0d1915;color:#e1f4e8;font-size:13px}
.case-modal-close svg{width:21px;height:21px}
.case-modal-close:hover{background:#254638}
.case-modal-content{max-height:calc(100dvh - 148px);overflow:auto;overscroll-behavior:contain}
.case-modal-project{display:grid;grid-template-columns:1.05fr 1fr;gap:38px;padding:38px;align-items:start}
.case-modal-visual{position:sticky;top:0;background:radial-gradient(ellipse at 50% 0,#a4f3d424,transparent),#172d26;padding:28px 18px 20px;border:1px solid #b7dacc29;border-radius:15px}
.case-modal-visual img{width:100%;height:auto;border:1px solid #c7e0d777;border-radius:7px;box-shadow:0 16px 32px #0005}
.case-modal-visual figcaption{font-size:12px;line-height:1.6;color:var(--muted);padding-top:18px}
.case-modal-copy h2{font-size:48px;line-height:1.12;margin:13px 0 20px}
.case-modal-copy h2 span{color:var(--mint)}
.case-modal-copy .eyebrow{font-size:11px}
.case-modal-intro{font-size:16px;line-height:1.75;color:#c3d2cb}
.case-modal-copy h3{font-size:18px;margin:25px 0 16px}
.case-modal-copy ul{list-style:none;margin:0;padding:0;color:#c3d2cb;font-size:14px;line-height:1.6}
.case-modal-copy li{padding:10px 0 10px 20px;border-top:1px solid #b7dacc24;position:relative}
.case-modal-copy li::before{content:"";position:absolute;top:19px;left:0;width:4px;height:4px;border-radius:50%;background:var(--mint)}
.case-modal-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}
.case-modal-actions .button{font-size:13px;min-height:46px;padding:12px 16px;gap:12px}
.case-modal-actions .button svg{width:17px}
@media(min-width:1500px){.is-enhanced .carousel-track{--spread:250px;--card-width:340px;--card-height:510px}}
@media(max-width:1100px){.portfolio-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.is-enhanced .carousel-track{--spread:190px;--card-width:300px;--card-height:490px}.is-enhanced .carousel-stage{height:610px}.case-modal-project{gap:26px;padding:28px}.case-modal-copy h2{font-size:42px}.case-modal-actions{flex-direction:column;align-items:stretch}}
@media(max-width:700px){.portfolio-grid{grid-template-columns:1fr}.is-enhanced .carousel-stage{height:560px;border-radius:0}.is-enhanced .carousel-track{--spread:125px;--card-width:270px;--card-height:470px}.is-enhanced .portfolio-card{top:46%}.carousel-card-top{padding:17px;font-size:9px}.is-enhanced .carousel-art{padding:18px 15px 22px}.carousel-card-copy{padding:18px}.is-enhanced .carousel-card-copy{padding:18px}.is-enhanced .carousel-card-copy :is(h2,h3){font-size:31px}.is-enhanced .carousel-card-copy>p{font-size:12px;line-height:1.65}.carousel-category{font-size:9px}.carousel-card-bottom{font-size:10px;padding-top:14px}.carousel-controls{gap:10px;margin-top:18px;flex-wrap:wrap}.carousel-dots{order:6;width:100%;justify-content:center;margin:0}.carousel-play{margin-left:4px}.carousel-hint{font-size:11px;margin:4px 12px 0}.case-modal{width:calc(100vw - 24px);max-height:calc(100dvh - 24px);border-radius:18px}.case-modal-toolbar{padding:12px 14px;gap:10px}.case-modal-toolbar>span{font-size:9px;letter-spacing:.06em}.case-modal-close{padding:8px;gap:6px;font-size:11px}.case-modal-content{max-height:calc(100dvh - 94px)}.case-modal-project{grid-template-columns:1fr;gap:24px;padding:18px}.case-modal-visual{position:static;padding:16px 14px 12px}.case-modal-visual img{max-height:220px;object-fit:contain;object-position:center;background:#edf3f0}.case-modal-visual figcaption{font-size:11px;padding-top:12px}.case-modal-copy h2{font-size:39px}.case-modal-intro{font-size:15px}.case-modal-copy ul{font-size:13px}.case-modal-actions{gap:10px;margin-top:22px}.case-modal-actions .button{font-size:13px;justify-content:space-between}.is-enhanced .carousel-ground{bottom:25px;left:8%;right:8%}}
@media(max-width:370px){.is-enhanced .carousel-track{--card-width:240px;--card-height:460px;--spread:105px}.carousel-card-copy :is(h2,h3){font-size:29px}.carousel-card-top{font-size:8px}.carousel-position{min-width:90px}}
.motion-paused .portfolio-card,.motion-paused .carousel-dots span{transition:none}
.motion-paused :is(.carousel-card-link,.carousel-screen,.carousel-spark,.carousel-card-bottom,.carousel-card-bottom svg),.motion-paused .carousel-card-link::before{transition:none}
@media(prefers-reduced-motion:reduce){.portfolio-card,.carousel-dots span,.carousel-arrow,.carousel-play,.carousel-card-link,.carousel-card-link::before,.carousel-screen,.carousel-spark,.carousel-card-bottom,.carousel-card-bottom svg{transition:none}.carousel-card-link:hover .carousel-screen{transform:none}}
