/* Public site design: homepage and /portfolio pages share this file. */

:root {
   --accent: #0fbe4a;
   --accent-hover: #16d457;
   --display: 'Manrope', 'Inter', system-ui, sans-serif;
   --gutter: clamp(16px, 4vw, 64px);
   --max: 1440px;
   --radius: 10px;
   --ease: cubic-bezier(.2, .8, .2, 1);
}

[data-theme="dark"] {
   color-scheme: dark;
   --bg: #0a0a0a;
   --surface: #141414;
   --surface-2: #1d1d1d;
   --soft: rgba(255, 255, 255, .03);
   --line: rgba(255, 255, 255, .09);
   --line-strong: rgba(255, 255, 255, .2);
   --text: #f5f5f5;
   --text-2: #bdbdbd;
   --muted: #9a9a9a;
   --accent-text: #0fbe4a;
   --accent-soft: rgba(15, 190, 74, .12);
   --glow: rgba(15, 190, 74, .06);
   --contact-bg: radial-gradient(90% 110% at 0% 0%, rgba(15, 190, 74, .16), transparent 60%), linear-gradient(160deg, #111612, #0c0d0c);
   --shimmer: rgba(255, 255, 255, .06);
   --field-bg: rgba(255, 255, 255, .04);
   --header-bg: rgba(10, 10, 10, .8);
   --photo-base: linear-gradient(180deg, #ffffff 0%, #fcfefd 10%, #f5fcf8 20%, #ebf8f0 30%, #dff4e7 40%, #d1f0dd 50%, #c3ebd2 60%, #b7e7c9 70%, #ade3c1 80%, #a6e1bc 90%, #a3e0ba 100%);
   --photo-fade: rgba(0, 0, 0, .82);
   --overlay: rgba(5, 5, 5, .96);
}

[data-theme="light"] {
   color-scheme: light;
   --bg: #f7f7f5;
   --surface: #ffffff;
   --surface-2: #efefec;
   --soft: rgba(0, 0, 0, .025);
   --line: rgba(0, 0, 0, .09);
   --line-strong: rgba(0, 0, 0, .2);
   --text: #111111;
   --text-2: #444444;
   --muted: #5e5e5e;
   --accent-text: #0a8a35;
   --accent-soft: rgba(15, 190, 74, .12);
   --glow: rgba(15, 190, 74, .07);
   --contact-bg: radial-gradient(90% 110% at 0% 0%, rgba(15, 190, 74, .14), transparent 60%), #ffffff;
   --shimmer: rgba(0, 0, 0, .05);
   --field-bg: rgba(0, 0, 0, .03);
   --header-bg: rgba(247, 247, 245, .82);
   --photo-base: linear-gradient(180deg, #ffffff 0%, #fcfefd 10%, #f5fcf8 20%, #ebf8f0 30%, #dff4e7 40%, #d1f0dd 50%, #c3ebd2 60%, #b7e7c9 70%, #ade3c1 80%, #a6e1bc 90%, #a3e0ba 100%);
   --photo-fade: rgba(4, 40, 18, .78);
   --overlay: rgba(247, 247, 245, .98);
}

* {
   box-sizing: border-box;
   margin: 0;
   padding: 0;
}

/* clip (not hidden) stops sideways scrolling without breaking the sticky header */
html {
   scroll-behavior: smooth;
   scroll-padding-top: 90px;
   overflow-x: clip;
}

body {
   background: var(--bg);
   color: var(--text);
   font: 16.5px/1.7 'Inter', system-ui, sans-serif;
   -webkit-font-smoothing: antialiased;
   -webkit-tap-highlight-color: transparent;
   overflow-x: hidden;
   overflow-x: clip;
   transition: background .4s, color .4s;
}

body.no-scroll {
   overflow: hidden;
}

a {
   color: inherit;
   text-decoration: none;
}

img {
   display: block;
   max-width: 100%;
}

button {
   font: inherit;
   color: inherit;
   cursor: pointer;
}

/* One container for every section, so all edges line up */
.container {
   width: 100%;
   max-width: calc(var(--max) + var(--gutter) * 2);
   margin: 0 auto;
   padding-left: var(--gutter);
   padding-right: var(--gutter);
}

.eyebrow {
   display: inline-block;
   margin-bottom: 14px;
   font-size: 12px;
   font-weight: 500;
   letter-spacing: .16em;
   text-transform: uppercase;
   color: var(--muted);
}

/* Show the logo that matches the current theme */
[data-theme="dark"] .logo-light,
[data-theme="light"] .logo-dark {
   display: none;
}

/* ---------- Buttons ---------- */
.btn {
   display: inline-flex;
   align-items: center;
   justify-content: center;
   gap: 10px;
   height: 50px;
   padding: 0 26px;
   border-radius: 999px;
   border: 1px solid transparent;
   background: var(--accent);
   color: #03140a;
   font-weight: 600;
   font-size: 15px;
   white-space: nowrap;
   transition: transform .25s var(--ease), background .25s, border-color .25s;
}

.btn:hover {
   transform: translateY(-2px);
   background: var(--accent-hover);
}

.btn-ghost {
   background: transparent;
   color: var(--text);
   border-color: var(--line-strong);
}

.btn-ghost:hover {
   background: var(--surface-2);
}

.btn-sm {
   height: 42px;
   padding: 0 20px;
   font-size: 14px;
}

.icon-btn {
   display: grid;
   place-items: center;
   flex: 0 0 auto;
   width: 42px;
   height: 42px;
   border-radius: 50%;
   border: 1px solid var(--line-strong);
   background: transparent;
   color: var(--text);
   font-size: 16px;
   transition: background .2s, transform .4s var(--ease);
}

.icon-btn:hover {
   background: var(--surface-2);
}

/* ---------- Header ---------- */
.header {
   position: sticky;
   top: 0;
   z-index: 50;
   border-bottom: 1px solid transparent;
   transition: background .3s, border-color .3s;
}

.header.is-scrolled {
   background: var(--header-bg);
   backdrop-filter: blur(14px);
   -webkit-backdrop-filter: blur(14px);
   border-color: var(--line);
}

.header .container {
   display: flex;
   align-items: center;
   justify-content: space-between;
   height: 80px;
   gap: 16px;
}

.logo img {
   height: 42px;
   width: auto;
}

.header-right {
   display: flex;
   align-items: center;
   gap: 10px;
}

.theme-toggle .fa-sun,
[data-theme="light"] .theme-toggle .fa-moon {
   display: none;
}

[data-theme="light"] .theme-toggle .fa-sun {
   display: block;
}

.theme-toggle:active {
   transform: rotate(40deg);
}

/* ---------- Hero ---------- */
.hero {
   position: relative;
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
   text-align: center;
   min-height: calc(100svh - 80px - clamp(110px, 12vw, 150px));
   padding-top: clamp(48px, 7vw, 88px);
   padding-bottom: clamp(48px, 6vw, 80px);
}

/* Soft green glow behind the headline */
.hero::before {
   content: '';
   position: absolute;
   z-index: -1;
   top: 0;
   left: 50%;
   width: min(900px, 100%);
   height: 65%;
   transform: translateX(-50%);
   background: radial-gradient(closest-side, var(--glow), transparent);
   pointer-events: none;
}

.badge {
   display: inline-flex;
   align-items: center;
   gap: 10px;
   padding: 8px 16px 8px 14px;
   border-radius: 999px;
   border: 1px solid var(--line);
   background: var(--soft);
   font-size: 14px;
   color: var(--text-2);
   opacity: 0;
   animation: fade .8s var(--ease) forwards;
}

.dot {
   width: 8px;
   height: 8px;
   border-radius: 50%;
   background: var(--accent);
   animation: pulse 2s infinite;
}

@keyframes pulse {
   0% {
      box-shadow: 0 0 0 0 rgba(15, 190, 74, .55);
   }

   70%,
   100% {
      box-shadow: 0 0 0 9px rgba(15, 190, 74, 0);
   }
}

.hero h1 {
   margin-top: clamp(28px, 3.5vw, 40px);
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(38px, 7.2vw, 112px);
   line-height: 1.04;
   letter-spacing: -.045em;
   text-wrap: balance;
}

.hero h1 em {
   font-style: normal;
   color: var(--accent);
}

/* Vehicle wraps is the main service, so it leads in green */
.hero h1 .hero-focus {
   color: var(--accent);
}

/* Each line slides up from behind a mask on load */
.line {
   display: block;
   overflow: hidden;
   padding-bottom: .1em;
   margin-bottom: -.1em;
}

.line>span {
   display: inline-block;
   transform: translateY(110%);
   animation: rise 1.1s var(--ease) forwards;
   animation-delay: calc(var(--i) * .12s + .15s);
}

@keyframes rise {
   to {
      transform: none;
   }
}

.hero-lead {
   max-width: 560px;
   margin-top: clamp(14px, 1.6vw, 22px);
   color: var(--text-2);
   font-size: clamp(16px, 1.4vw, 19px);
   line-height: 1.65;
   opacity: 0;
   animation: fade 1s var(--ease) .55s forwards;
}

.hero-lead b {
   color: var(--text);
   font-weight: 500;
}

.hero-actions {
   display: flex;
   flex-wrap: wrap;
   justify-content: center;
   gap: 12px;
   margin-top: 36px;
   opacity: 0;
   animation: fade 1s var(--ease) .7s forwards;
}

.hero-stats {
   display: flex;
   flex-wrap: wrap;
   justify-content: center;
   gap: 10px 28px;
   margin-top: 40px;
   font-size: 14px;
   color: var(--muted);
   opacity: 0;
   animation: fade 1s var(--ease) .85s forwards;
}

.hero-stats span {
   display: inline-flex;
   align-items: center;
   gap: 8px;
}

.hero-stats i {
   color: var(--accent);
   font-size: 13px;
}

@keyframes fade {
   from {
      opacity: 0;
      transform: translateY(16px);
   }

   to {
      opacity: 1;
      transform: none;
   }
}

/* ---------- Showcase: one standout project + smaller picks ---------- */
.showcase {
   display: grid;
   grid-template-columns: 1.55fr 1fr;
   gap: 14px;
   padding-bottom: clamp(68px, 8.5vw, 120px);
   opacity: 0;
   animation: fade 1.2s var(--ease) 1s forwards;
}

/* Every project card (showcase + grid) shares the same frame and hover */
.feature,
.thumb,
.work {
   position: relative;
   display: block;
   overflow: hidden;
   border-radius: var(--radius);
   border: 1px solid var(--line);
   background: var(--surface-2);
   isolation: isolate;
   transition: transform .5s var(--ease), box-shadow .5s var(--ease), border-color .4s;
}

.feature:hover,
.thumb:hover,
.work:hover {
   transform: translateY(-4px);
   border-color: rgba(15, 190, 74, .6);
   box-shadow: 0 24px 50px -24px rgba(0, 0, 0, .55);
}

.feature {
   aspect-ratio: 16 / 10;
}

.feature img,
.thumb img {
   position: absolute;
   inset: 0;
   z-index: -2;
   width: 100%;
   height: 100%;
   object-fit: cover;
   transition: transform 1.1s var(--ease);
}

.feature::after,
.thumb::after {
   content: '';
   position: absolute;
   inset: 0;
   z-index: -1;
   background: linear-gradient(180deg, transparent 40%, rgba(0, 0, 0, .78));
   transition: opacity .4s;
}

.thumb::after {
   opacity: 0;
}

.feature:hover img,
.thumb:hover img {
   transform: scale(1.05);
}

.thumb:hover::after {
   opacity: 1;
}

.feature-meta {
   position: absolute;
   left: clamp(18px, 2.5vw, 32px);
   right: 200px;
   bottom: clamp(18px, 2.5vw, 32px);
   display: grid;
   gap: 8px;
   color: #fff;
}

.feature-label {
   display: inline-flex;
   align-items: center;
   gap: 8px;
   width: fit-content;
   padding: 6px 12px;
   border-radius: 999px;
   background: rgba(0, 0, 0, .45);
   backdrop-filter: blur(8px);
   -webkit-backdrop-filter: blur(8px);
   font-size: 12px;
   font-weight: 600;
   letter-spacing: .08em;
   text-transform: uppercase;
}

.feature-label i {
   color: var(--accent);
}

.feature-title {
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(22px, 2.6vw, 38px);
   line-height: 1.1;
   letter-spacing: -.03em;
}

.feature-cat {
   font-size: 14px;
   opacity: .8;
}

.feature-cta {
   position: absolute;
   right: clamp(18px, 2.5vw, 32px);
   bottom: clamp(18px, 2.5vw, 32px);
   display: inline-flex;
   align-items: center;
   gap: 10px;
   height: 46px;
   padding: 0 20px;
   border-radius: 999px;
   background: var(--accent);
   color: #03140a;
   font-weight: 600;
   font-size: 14px;
   transition: gap .35s var(--ease);
}

.feature-cta i {
   transition: transform .4s var(--ease);
}

.feature:hover .feature-cta {
   gap: 14px;
}

.feature:hover .feature-cta i {
   transform: translateX(3px) rotate(-45deg);
}

.thumbs {
   display: grid;
   grid-template-columns: 1fr 1fr;
   grid-template-rows: 1fr 1fr;
   gap: 14px;
}

.thumb-meta {
   position: absolute;
   left: 14px;
   right: 14px;
   bottom: 12px;
   color: #fff;
   font-family: var(--display);
   font-weight: 700;
   font-size: 15px;
   line-height: 1.25;
   opacity: 0;
   transform: translateY(8px);
   transition: opacity .35s, transform .35s var(--ease);
}

.thumb:hover .thumb-meta {
   opacity: 1;
   transform: none;
}

/* Last tile invites people down to the full portfolio */
.thumb.more-tile::after {
   opacity: 1;
   background: rgba(0, 0, 0, .74);
}

.more-label {
   position: absolute;
   inset: 0;
   display: grid;
   place-content: center;
   gap: 4px;
   text-align: center;
   color: #fff;
}

.more-label b {
   font-family: var(--display);
   font-size: clamp(26px, 2.6vw, 36px);
   font-weight: 800;
   letter-spacing: -.03em;
   line-height: 1;
}

.more-label span {
   font-size: 13px;
   opacity: .85;
}

/* ---------- Section heading ---------- */
.section-head {
   display: flex;
   flex-wrap: wrap;
   align-items: flex-end;
   justify-content: space-between;
   gap: 24px;
   margin-bottom: 36px;
}

.section-head h2 {
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(34px, 4.8vw, 68px);
   line-height: 1.04;
   letter-spacing: -.04em;
}

.section-head h2 em,
.contact h2 em {
   font-style: normal;
   color: var(--accent);
}

/* ---------- Work grid ---------- */
.filters {
   display: flex;
   gap: 8px;
   overflow-x: auto;
   scrollbar-width: none;
   max-width: 100%;
}

.filters::-webkit-scrollbar {
   display: none;
}

.filters button {
   flex: 0 0 auto;
   height: 40px;
   padding: 0 18px;
   border-radius: 999px;
   border: 1px solid var(--line);
   background: transparent;
   color: var(--muted);
   font-size: 14px;
   transition: all .2s;
}

.filters button:hover {
   color: var(--text);
   border-color: var(--line-strong);
}

.filters button.is-active {
   background: var(--text);
   border-color: var(--text);
   color: var(--bg);
}

.grid {
   columns: 3 340px;
   column-gap: 14px;
   transition: opacity .25s;
}

.grid.is-busy {
   opacity: .3;
}

.work {
   margin-bottom: 14px;
   break-inside: avoid;
   cursor: zoom-in;
}

.work img {
   width: 100%;
   opacity: 0;
   transition: opacity .6s, transform 1.1s var(--ease);
}

.work img.is-loaded {
   opacity: 1;
}

.work:hover img {
   transform: scale(1.05);
}

/* Long screenshots: fixed card shape cropped from the top, with a fade and a tag */
/* As tall as two regular 3:2 cards plus the gap between them,
   so long screenshots line up with the cards beside them */
.work.is-tall img {
   aspect-ratio: 3 / 4.1;
   object-fit: cover;
   object-position: top;
}

.work.is-tall::after {
   content: '';
   position: absolute;
   left: 0;
   right: 0;
   bottom: 0;
   height: 28%;
   background: linear-gradient(transparent, rgba(0, 0, 0, .5));
   pointer-events: none;
}

.work-meta {
   z-index: 1;
}

.work-long {
   position: absolute;
   z-index: 1;
   right: 12px;
   bottom: 12px;
   display: inline-flex;
   align-items: center;
   gap: 6px;
   padding: 5px 11px;
   border-radius: 999px;
   background: rgba(0, 0, 0, .55);
   backdrop-filter: blur(8px);
   -webkit-backdrop-filter: blur(8px);
   color: #fff;
   font-size: 12px;
   font-weight: 600;
   transition: opacity .3s;
}

.work:hover .work-long {
   opacity: 0;
}

/* Marks the showcase project when it shows up again in the grid */
.work-badge {
   position: absolute;
   top: 12px;
   left: 12px;
   display: inline-flex;
   align-items: center;
   gap: 6px;
   padding: 5px 11px;
   border-radius: 999px;
   background: rgba(0, 0, 0, .5);
   backdrop-filter: blur(8px);
   -webkit-backdrop-filter: blur(8px);
   color: #fff;
   font-size: 12px;
   font-weight: 600;
}

.work-badge i {
   color: var(--accent);
}

/* Sits on the photo, so it stays light in both themes */
.work-meta {
   position: absolute;
   inset: auto 0 0 0;
   display: flex;
   align-items: flex-end;
   justify-content: space-between;
   gap: 16px;
   padding: 60px 20px 18px;
   background: linear-gradient(transparent, rgba(0, 0, 0, .88));
   color: #fff;
   opacity: 0;
   transform: translateY(10px);
   transition: opacity .35s, transform .35s var(--ease);
}

.work:hover .work-meta,
.work:focus-visible .work-meta {
   opacity: 1;
   transform: none;
}

.work-cat {
   display: block;
   font-size: 11px;
   font-weight: 500;
   letter-spacing: .12em;
   text-transform: uppercase;
   color: var(--accent);
}

.work-title {
   display: block;
   font-family: var(--display);
   font-weight: 700;
   font-size: 18px;
   letter-spacing: -.02em;
   line-height: 1.3;
}

.work-arrow {
   flex: 0 0 auto;
   display: grid;
   place-items: center;
   width: 40px;
   height: 40px;
   border-radius: 50%;
   background: var(--accent);
   color: #03140a;
   transform: rotate(-45deg);
}

.more {
   display: flex;
   justify-content: center;
   padding-top: 40px;
}

.more[hidden] {
   display: none;
}

/* ---------- Contact ---------- */
.contact {
   margin-top: clamp(100px, 13vw, 180px);
   padding-bottom: clamp(64px, 8vw, 110px);
}

.contact-card {
   display: grid;
   grid-template-columns: .9fr 1.1fr;
   gap: clamp(40px, 6vw, 96px);
   align-items: start;
   padding: clamp(24px, 5vw, 72px);
   border: 1px solid rgba(15, 190, 74, .2);
   border-radius: 20px;
   background: var(--contact-bg);
}

.pill-label {
   display: inline-flex;
   margin-bottom: 22px;
   padding: 6px 16px;
   border-radius: 999px;
   border: 1px solid rgba(15, 190, 74, .5);
   color: var(--accent-text);
   font-size: 14px;
   font-weight: 500;
}

.contact h2 {
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(38px, 4.6vw, 68px);
   line-height: 1.04;
   letter-spacing: -.04em;
}

.checklist {
   display: grid;
   gap: 14px;
   margin-top: 30px;
   list-style: none;
   color: var(--text-2);
}

.checklist li {
   display: flex;
   align-items: flex-start;
   gap: 12px;
}

.checklist i {
   margin-top: 4px;
   color: var(--accent);
}

.contact-links {
   display: grid;
   gap: 10px;
   margin-top: 36px;
   max-width: 400px;
}

.contact-link {
   display: flex;
   align-items: center;
   gap: 14px;
   padding: 16px 18px;
   border: 1px solid var(--line);
   border-radius: var(--radius);
   background: var(--field-bg);
   transition: border-color .2s, background .2s;
}

.contact-link:hover {
   border-color: rgba(15, 190, 74, .5);
}

.contact-link i,
.skill i {
   flex: 0 0 auto;
   display: grid;
   place-items: center;
   width: 40px;
   height: 40px;
   border-radius: 50%;
   background: var(--accent-soft);
   color: var(--accent-text);
}

.contact-link small {
   display: block;
   font-size: 12px;
   color: var(--muted);
}

.contact-social {
   display: flex;
   align-items: center;
   gap: 10px;
   margin-top: 20px;
}

.contact-social span {
   margin-right: 4px;
   font-size: 14px;
   color: var(--muted);
}

.contact-social a {
   display: grid;
   place-items: center;
   width: 44px;
   height: 44px;
   border: 1px solid var(--line);
   border-radius: 50%;
   background: var(--field-bg);
   color: var(--text);
   transition: border-color .2s, background .2s, color .2s;
}

.contact-social a:hover {
   border-color: var(--accent);
   background: var(--accent-soft);
   color: var(--accent-text);
}

/* Underline-style fields */
.form {
   display: grid;
   grid-template-columns: 1fr 1fr;
   gap: 30px 24px;
}

.field {
   position: relative;
   display: grid;
   gap: 6px;
}

.field.full {
   grid-column: 1 / -1;
}

.field>label,
.field-label {
   font-family: var(--display);
   font-weight: 700;
   font-size: 16px;
   color: var(--text);
}

.field>label span,
.field-label span {
   color: var(--accent);
}

/* Service / budget: big tappable choice buttons instead of dropdowns */
.choices {
   display: flex;
   flex-wrap: wrap;
   gap: 10px;
   margin-top: 8px;
}

.choices label {
   position: relative;
   cursor: pointer;
}

.choices input {
   position: absolute;
   opacity: 0;
   width: 1px;
   height: 1px;
   pointer-events: none;
}

.choices label span {
   display: inline-flex;
   align-items: center;
   gap: 9px;
   padding: 12px 18px;
   border: 1px solid var(--line-strong);
   border-radius: 999px;
   background: var(--field-bg);
   color: var(--text-2);
   font-size: 15px;
   font-weight: 500;
   line-height: 1.2;
   transition: background .2s, border-color .2s, color .2s;
}

.choices label span i {
   color: var(--accent-text);
   transition: color .2s;
}

.choices label:hover span {
   border-color: rgba(15, 190, 74, .6);
}

.choices input:checked+span {
   background: var(--accent);
   border-color: var(--accent);
   color: #03140a;
   font-weight: 600;
}

.choices input:checked+span i {
   color: #03140a;
}

.choices input:focus-visible+span {
   outline: 2px solid var(--accent);
   outline-offset: 2px;
}

.field .optional {
   font-family: 'Inter', system-ui, sans-serif;
   font-weight: 400;
   font-size: 13px;
   color: var(--muted);
}

.form[hidden],
.form-success[hidden] {
   display: none;
}

.form-success {
   display: grid;
   justify-items: start;
   gap: 16px;
   padding: 12px 0;
   animation: fade .6s var(--ease);
}

.success-icon {
   display: grid;
   place-items: center;
   width: 64px;
   height: 64px;
   border-radius: 50%;
   background: var(--accent);
   color: #03140a;
   font-size: 26px;
}

.form-success h3 {
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(28px, 3vw, 40px);
   line-height: 1.1;
   letter-spacing: -.03em;
}

.form-success p {
   max-width: 440px;
   color: var(--text-2);
}

.field>input,
.field>textarea {
   width: 100%;
   padding: 14px 0 16px;
   border: 0;
   border-bottom: 1px solid var(--line-strong);
   border-radius: 0;
   background: transparent;
   color: var(--text);
   font: inherit;
   font-size: 16px;
   transition: border-color .25s;
   resize: vertical;
   -webkit-appearance: none;
   appearance: none;
}

.field ::placeholder {
   color: var(--muted);
   opacity: .75;
}

.field>input:focus,
.field>textarea:focus {
   outline: none;
   border-bottom-color: var(--accent);
}

.form-foot {
   grid-column: 1 / -1;
   display: flex;
   flex-wrap: wrap;
   align-items: center;
   justify-content: space-between;
   gap: 16px;
}

.form-status {
   grid-column: 1 / -1;
   font-size: 14px;
}

.form-status.ok {
   color: var(--accent-text);
}

.form-status.err {
   color: #e5484d;
}

footer {
   border-top: 1px solid var(--line);
}

footer .container {
   display: flex;
   flex-wrap: wrap;
   justify-content: space-between;
   gap: 12px;
   padding-top: 28px;
   padding-bottom: 36px;
   color: var(--muted);
   font-size: 14px;
}

footer a:hover {
   color: var(--text);
}

.footer-links {
   display: flex;
   flex-wrap: wrap;
   gap: 8px 20px;
}

/* ---------- About panel ---------- */
.backdrop {
   position: fixed;
   inset: 0;
   z-index: 90;
   background: rgba(0, 0, 0, .55);
   backdrop-filter: blur(6px);
   -webkit-backdrop-filter: blur(6px);
   opacity: 0;
   visibility: hidden;
   transition: opacity .45s, visibility .45s;
}

/* Floating wide card that slides in from the right */
.about {
   position: fixed;
   z-index: 95;
   top: 12px;
   right: 12px;
   bottom: 12px;
   width: min(1040px, calc(100% - 24px));
   display: grid;
   grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr);
   border-radius: 20px;
   overflow: hidden;
   background: var(--surface);
   border: 1px solid var(--line);
   box-shadow: 0 40px 120px -20px rgba(0, 0, 0, .6);
   overscroll-behavior: contain;
   transform: translateX(calc(100% + 24px));
   visibility: hidden;
   transition: transform .65s var(--ease), visibility 0s .65s;
}

.about-open .backdrop {
   opacity: 1;
   visibility: visible;
}

.about-open .about {
   transform: none;
   visibility: visible;
   transition: transform .65s var(--ease), visibility 0s;
}

/* Photo card: inset frame with a top-to-bottom green shade behind the transparent
   portrait. Colours come from --photo-* so it suits both themes. */
.about-media {
   position: relative;
   margin: 12px 0 12px 12px;
   border-radius: 16px;
   overflow: hidden;
   background: var(--photo-base);
   isolation: isolate;
}

.about-media img {
   position: relative;
   z-index: 1;
   width: 100%;
   height: 100%;
   object-fit: cover;
   object-position: center top;
}

.about-media::after {
   content: '';
   position: absolute;
   inset: 0;
   z-index: 2;
   background: linear-gradient(180deg, transparent 60%, var(--photo-fade));
   pointer-events: none;
}

.about-tag small i {
   margin-right: 6px;
   color: var(--accent);
}

.about-tag {
   position: absolute;
   z-index: 3;
   left: 24px;
   right: 24px;
   bottom: 24px;
   display: flex;
   align-items: center;
   justify-content: space-between;
   gap: 12px;
   color: #fff;
}

.about-tag b {
   display: block;
   font-family: var(--display);
   font-size: 22px;
   font-weight: 700;
   letter-spacing: -.02em;
}

.about-tag small {
   font-size: 13px;
   opacity: .8;
}

.about-tag .badge {
   opacity: 1;
   animation: none;
   color: #fff;
   border-color: rgba(255, 255, 255, .2);
   background: rgba(0, 0, 0, .35);
   backdrop-filter: blur(8px);
   -webkit-backdrop-filter: blur(8px);
   font-size: 13px;
}

.about-content {
   overflow-y: auto;
   padding: clamp(24px, 3.5vw, 48px);
}

.about-top {
   display: flex;
   align-items: center;
   justify-content: space-between;
   gap: 12px;
}

.about h2 {
   margin-top: 24px;
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(32px, 3.8vw, 50px);
   line-height: 1.04;
   letter-spacing: -.04em;
}

.about h2 em {
   font-style: normal;
   color: var(--accent);
}

.about-text {
   display: grid;
   gap: 14px;
   margin-top: 22px;
   color: var(--text-2);
   line-height: 1.75;
}

.about-stats {
   display: grid;
   grid-template-columns: repeat(3, 1fr);
   gap: 10px;
   margin-top: 30px;
}

.stat {
   padding: 18px;
   border: 1px solid var(--line);
   border-radius: 12px;
   background: var(--soft);
}

.stat b {
   display: block;
   font-family: var(--display);
   font-size: clamp(28px, 3vw, 38px);
   font-weight: 800;
   line-height: 1;
   letter-spacing: -.03em;
}

.stat span {
   display: block;
   margin-top: 8px;
   font-size: 13px;
   color: var(--muted);
}

/* Four services sit in a 2 x 2 grid, one column on narrow screens */
.about-skills {
   display: grid;
   grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
   gap: 10px;
   margin-top: 30px;
}

.skill {
   display: flex;
   flex-direction: column;
   align-items: flex-start;
   gap: 14px;
   padding: 18px;
   border: 1px solid var(--line);
   border-radius: 12px;
   transition: border-color .2s, transform .3s var(--ease);
}

.skill:hover {
   border-color: var(--line-strong);
   transform: translateY(-3px);
}

/* Vehicle wraps is the main service, so it spans the full row */
.skill.featured {
   grid-column: 1 / -1;
   flex-direction: row;
   align-items: center;
   gap: 18px;
   border-color: rgba(15, 190, 74, .35);
   background: var(--accent-soft);
}

.skill.featured>i {
   width: 52px;
   height: 52px;
   font-size: 20px;
   background: var(--accent);
   color: #03140a;
}

.skill.featured b {
   font-size: 18px;
}

.chips {
   display: flex !important;
   flex-wrap: wrap;
   gap: 6px;
   margin-top: 10px;
}

.chips small {
   padding: 3px 10px;
   border-radius: 999px;
   border: 1px solid rgba(15, 190, 74, .35);
   color: var(--accent-text);
   font-size: 12px;
   font-weight: 500;
}

.stat b i {
   font-size: .8em;
   color: var(--accent);
}

.skill b {
   display: block;
   font-weight: 600;
}

.skill span {
   font-size: 14px;
   color: var(--muted);
}

.about-info {
   display: flex;
   flex-wrap: wrap;
   gap: 10px 24px;
   margin-top: 26px;
   font-size: 14px;
   color: var(--muted);
}

.about-info i {
   color: var(--accent-text);
   margin-right: 6px;
}

.about-actions {
   display: flex;
   flex-wrap: wrap;
   gap: 10px;
   margin-top: 28px;
}

/* ---------- Project viewer ---------- */
.viewer {
   position: fixed;
   inset: 0;
   z-index: 100;
   background: var(--overlay);
   overflow-y: auto;
   opacity: 0;
   visibility: hidden;
   transition: opacity .3s, visibility .3s;
}

.viewer.is-open {
   opacity: 1;
   visibility: visible;
}

.viewer-bar {
   position: sticky;
   top: 0;
   z-index: 2;
   background: var(--header-bg);
   backdrop-filter: blur(12px);
   -webkit-backdrop-filter: blur(12px);
   border-bottom: 1px solid var(--line);
}

.viewer-bar .container {
   display: flex;
   align-items: center;
   justify-content: space-between;
   gap: 16px;
   height: 84px;
}

.viewer-heading {
   min-width: 0;
   display: grid;
   gap: 5px;
}

.viewer-meta {
   display: flex;
   align-items: center;
   gap: 10px;
   min-height: 22px;
}

.viewer-chip {
   display: inline-flex;
   padding: 3px 10px;
   border-radius: 999px;
   background: var(--accent-soft);
   color: var(--accent-text);
   font-size: 11px;
   font-weight: 600;
   letter-spacing: .1em;
   text-transform: uppercase;
}

.viewer-chip:empty {
   display: none;
}

.viewer-count {
   font-size: 13px;
   color: var(--muted);
}

.viewer-bar h3 {
   font-family: var(--display);
   font-size: 21px;
   font-weight: 800;
   letter-spacing: -.02em;
   line-height: 1.2;
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
}

/* Thin bar along the bottom of the header that fills as images load */
.viewer-progress {
   position: absolute;
   left: 0;
   bottom: -1px;
   height: 2px;
   width: 0;
   background: var(--accent);
   transition: width .4s var(--ease), opacity .4s .3s;
}

.viewer-progress.is-done {
   opacity: 0;
}

.viewer-actions {
   display: flex;
   gap: 10px;
   flex: 0 0 auto;
}

.viewer-body {
   display: grid;
   gap: 16px;
   max-width: 1240px;
   padding-top: 28px;
   padding-bottom: 80px;
}

.viewer.is-open .viewer-body {
   animation: fade .5s var(--ease);
}

/* Each image sits in a frame with a shimmer until it has loaded */
.shot {
   position: relative;
   margin: 0;
   overflow: hidden;
   border-radius: 14px;
   border: 1px solid var(--line);
   background: var(--surface-2);
}

.shot img {
   display: block;
   width: 100%;
   height: auto;
   opacity: 0;
   transform: scale(1.015);
   transition: opacity .6s, transform .9s var(--ease);
}

.shot.is-loaded img {
   opacity: 1;
   transform: none;
}

.shot.is-loading {
   min-height: min(62vh, 560px);
}

.shot.is-loading::before {
   content: '';
   position: absolute;
   inset: 0;
   background: linear-gradient(100deg, transparent 25%, var(--shimmer) 45%, transparent 65%);
   background-size: 220% 100%;
   animation: shimmer 1.4s linear infinite;
}

.shot.is-loading::after {
   content: '';
   position: absolute;
   top: 50%;
   left: 50%;
   width: 34px;
   height: 34px;
   margin: -17px 0 0 -17px;
   border: 3px solid var(--line-strong);
   border-top-color: var(--accent);
   border-radius: 50%;
   animation: spin .8s linear infinite;
}

@keyframes shimmer {
   from {
      background-position: 160% 0;
   }

   to {
      background-position: -60% 0;
   }
}

.viewer-info,
.viewer-cta {
   padding: clamp(20px, 3vw, 36px);
   border: 1px solid var(--line);
   border-radius: 14px;
   background: var(--surface);
}

.viewer-info h4 {
   margin-bottom: 12px;
   font-size: 12px;
   font-weight: 600;
   letter-spacing: .14em;
   text-transform: uppercase;
   color: var(--muted);
}

.viewer-desc {
   max-width: 760px;
   color: var(--text-2);
   line-height: 1.75;
}

.viewer-cta {
   display: flex;
   flex-wrap: wrap;
   align-items: center;
   justify-content: space-between;
   gap: 20px;
   border-color: rgba(15, 190, 74, .25);
   background: var(--contact-bg);
}

.viewer-cta h4 {
   font-family: var(--display);
   font-size: clamp(22px, 2.4vw, 30px);
   font-weight: 800;
   letter-spacing: -.03em;
   line-height: 1.15;
}

.viewer-cta p {
   margin-top: 4px;
   color: var(--text-2);
}

.viewer-cta-actions {
   display: flex;
   flex-wrap: wrap;
   gap: 10px;
}

/* Previous / next project */
.viewer-nav {
   display: grid;
   grid-template-columns: 1fr 1fr;
   gap: 16px;
}

.viewer-nav a {
   display: grid;
   gap: 4px;
   min-width: 0;
   padding: 18px 22px;
   border: 1px solid var(--line);
   border-radius: 14px;
   transition: border-color .25s, background .25s;
}

.viewer-nav a:hover {
   border-color: rgba(15, 190, 74, .6);
   background: var(--surface);
}

.viewer-nav .next {
   grid-column: 2;
   text-align: right;
}

.viewer-nav small {
   font-size: 13px;
   color: var(--muted);
}

.viewer-nav b {
   font-family: var(--display);
   font-size: 17px;
   font-weight: 700;
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
}

.viewer-error {
   padding: 26vh 0;
   text-align: center;
   color: var(--muted);
}

.spinner {
   width: 38px;
   height: 38px;
   margin: 28vh auto;
   border: 3px solid var(--surface-2);
   border-top-color: var(--accent);
   border-radius: 50%;
   animation: spin .8s linear infinite;
}

@keyframes spin {
   to {
      transform: rotate(360deg);
   }
}

/* ---------- Responsive ---------- */
@media (max-width: 900px) {
   .contact-card {
      grid-template-columns: 1fr;
   }

   .showcase {
      grid-template-columns: 1fr;
   }

   .thumb {
      aspect-ratio: 4 / 3;
   }

   /* About becomes a single scrolling column */
   .about {
      display: block;
      overflow-y: auto;
   }

   /* Show the whole photo; only very tall screens crop the bottom, never the face */
   .about-media {
      height: auto;
      margin: 10px 10px 0;
   }

   .about-media img {
      height: auto;
      max-height: 75svh;
   }

   .about-content {
      overflow: visible;
   }
}

@media (max-width: 760px) {
   .header .btn-ghost {
      display: none;
   }

   .logo img {
      height: 36px;
   }

   .hero {
      min-height: 0;
   }

   .btn {
      height: 46px;
      padding: 0 20px;
      font-size: 14.5px;
   }

   .btn-sm {
      height: 40px;
      padding: 0 16px;
   }

   .hero-actions .btn {
      flex: 1 1 140px;
   }

   .hero-stats {
      gap: 8px 18px;
      margin-top: 28px;
      font-size: 13px;
   }

   .section-head {
      margin-bottom: 24px;
   }

   /* Filters scroll sideways edge to edge */
   .filters {
      width: calc(100% + var(--gutter) * 2);
      max-width: none;
      margin: 0 calc(var(--gutter) * -1);
      padding: 0 var(--gutter);
   }

   .filters button {
      height: 38px;
      padding: 0 15px;
      font-size: 13.5px;
   }

   .contact-card {
      padding: 24px 20px 28px;
      border-radius: 16px;
   }

   .contact h2 {
      font-size: 34px;
   }

   .form {
      gap: 24px;
   }

   .form-foot .btn {
      width: 100%;
   }

   .grid {
      columns: 2;
      column-gap: 10px;
   }

   .work {
      margin-bottom: 10px;
   }

   .work-meta {
      display: none;
   }

   .form {
      grid-template-columns: 1fr;
   }

   .showcase {
      gap: 10px;
   }

   .thumbs {
      gap: 10px;
   }

   /* Featured card: caption sits under the photo instead of on top of it */
   .feature {
      aspect-ratio: auto;
      background: var(--surface);
   }

   .feature img {
      position: relative;
      z-index: auto;
      height: auto;
      aspect-ratio: 4 / 3;
   }

   .feature::after {
      display: none;
   }

   .feature-meta {
      position: static;
      gap: 4px;
      padding: 14px 16px 16px;
      color: var(--text);
   }

   .feature-label {
      position: absolute;
      top: 12px;
      left: 12px;
      padding: 5px 11px;
      font-size: 11px;
      color: #fff;
   }

   .feature-title {
      font-size: 19px;
      line-height: 1.25;
      letter-spacing: -.02em;
   }

   .feature-cat {
      font-size: 13px;
      color: var(--muted);
      opacity: 1;
   }

   .feature-cta {
      display: none;
   }

   .contact-link {
      padding: 14px 16px;
   }

   .choices label span {
      padding: 11px 16px;
      font-size: 14.5px;
   }

   /* About slides up from the bottom on phones */
   .about {
      top: auto;
      right: 0;
      bottom: 0;
      width: 100%;
      max-height: 92svh;
      border-radius: 20px 20px 0 0;
      transform: translateY(100%);
   }

   .about-stats {
      gap: 8px;
   }

   .stat {
      padding: 14px 12px;
   }

   .viewer-actions .btn {
      display: none;
   }

   .viewer-bar .container {
      height: 68px;
      gap: 10px;
   }

   .viewer-bar h3 {
      font-size: 16px;
   }

   .viewer-count {
      display: none;
   }

   .viewer-actions {
      gap: 8px;
   }

   .viewer-actions .icon-btn {
      width: 38px;
      height: 38px;
   }

   .viewer-body {
      gap: 10px;
      padding-top: 14px;
      padding-bottom: 48px;
   }

   .shot {
      border-radius: 10px;
   }

   .shot.is-loading {
      min-height: 46vh;
   }

   .viewer-cta {
      flex-direction: column;
      align-items: stretch;
   }

   .viewer-cta-actions .btn {
      flex: 1;
   }

   .viewer-nav {
      gap: 10px;
   }

   .viewer-nav a {
      padding: 14px 16px;
   }

   .viewer-nav b {
      font-size: 15px;
   }
}

/* Touch screens: no sticky hover lifts, and skip costly blur while scrolling */
@media (hover: none) {

   .feature:hover,
   .thumb:hover,
   .work:hover {
      transform: none;
      box-shadow: none;
      border-color: var(--line);
   }

   .feature:hover img,
   .thumb:hover img,
   .work:hover img {
      transform: none;
   }

   .btn:hover {
      transform: none;
   }

   .header.is-scrolled,
   .viewer-bar {
      backdrop-filter: none;
      -webkit-backdrop-filter: none;
      background: var(--bg);
   }

   .viewer {
      overscroll-behavior: contain;
   }
}

@media (prefers-reduced-motion: reduce) {

   .dot {
      animation: none;
   }

   .line>span,
   .badge,
   .hero-lead,
   .hero-actions,
   .hero-stats,
   .showcase {
      animation: none;
      transform: none;
      opacity: 1;
   }
}

/* ---------- Portfolio pages ---------- */
.port-page {
   padding-top: clamp(24px, 4vw, 56px);
   padding-bottom: clamp(56px, 7vw, 96px);
}

.section-head h1 {
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(38px, 5.6vw, 80px);
   line-height: 1.04;
   letter-spacing: -.04em;
}

.section-head h1 em,
.port-missing h1 em {
   font-style: normal;
   color: var(--accent);
}

.port-lead {
   max-width: 560px;
   margin-top: 14px;
   color: var(--text-2);
   font-size: clamp(16px, 1.4vw, 19px);
   line-height: 1.65;
}

/* Cards open the project page here, not an overlay */
.port-page .work {
   cursor: pointer;
}

.port-cta {
   margin-top: clamp(48px, 6vw, 80px);
}

.port-page .viewer-cta h2 {
   font-family: var(--display);
   font-size: clamp(22px, 2.4vw, 30px);
   font-weight: 800;
   letter-spacing: -.03em;
   line-height: 1.15;
}

.port-page .viewer-info h2 {
   margin-bottom: 12px;
   font-size: 12px;
   font-weight: 600;
   letter-spacing: .14em;
   text-transform: uppercase;
   color: var(--muted);
}

.port-back {
   display: inline-flex;
   align-items: center;
   gap: 8px;
   font-size: 14px;
   color: var(--muted);
   transition: color .2s;
}

.port-back:hover {
   color: var(--text);
}

.port-head {
   display: flex;
   align-items: flex-end;
   justify-content: space-between;
   gap: 20px;
   margin-top: 18px;
}

.port-head>div {
   min-width: 0;
}

.port-head h1,
.port-missing h1 {
   margin-top: 10px;
   font-family: var(--display);
   font-weight: 800;
   font-size: clamp(30px, 4.6vw, 64px);
   line-height: 1.06;
   letter-spacing: -.04em;
   text-wrap: balance;
}

.port-page .port-body {
   max-width: none;
   margin-top: clamp(20px, 3vw, 32px);
   padding: 0;
}

.port-missing {
   display: grid;
   justify-items: center;
   min-height: 50vh;
   align-content: center;
   text-align: center;
}

.port-missing .eyebrow {
   margin-bottom: 0;
}

.port-missing .btn {
   margin-top: 28px;
}