/* =====================================================
   HATT DIGITAL — Projects / Case Studies
   Editorial, restrained, premium local-studio portfolio.
   Charcoal-navy base · sparing blue accents · real screenshots.
===================================================== */

/* ---- page shell: make the whole projects page dark & refined ---- */
body.pf{background:#071426;color:#e9eef7}
body.pf .wrap{max-width:1180px}

/* clean WHITE header on this page — matches the rest of the site */
body.pf header{background:#FFFFFF;backdrop-filter:none;border-bottom:1px solid #DDE7F3;
  box-shadow:0 10px 30px -22px rgba(7,20,38,.18)}
body.pf header.scrolled{border-color:#DDE7F3;box-shadow:0 14px 34px -22px rgba(7,20,38,.28)}
body.pf .brand .name{color:#071426}
body.pf .brand .name span{color:#5E6E8C;font-weight:500}
body.pf .nav-links a{color:#071426;opacity:.82}
body.pf .nav-links a:hover{opacity:1}
body.pf .nav-links a.active{color:#1267FF;opacity:1}
body.pf .nav-links a.active:after{background:linear-gradient(150deg,#14B8FF,#1267FF)}
body.pf .menu-btn span{background:#071426}
@media(max-width:900px){
  body.pf .nav-links{background:#FFFFFF;border-bottom:1px solid #DDE7F3}
  body.pf .nav-links a{border-bottom:1px solid #DDE7F3}
}

.pf-accent{--blue:#1267FF;--blue-soft:#14B8FF;--ink2:#0B1D35;--panel:#10233E;
  --bd:rgba(255,255,255,.09);--bd-2:rgba(255,255,255,.14);
  --tx:#e9eef7;--mut:#9aa8c4;--faint:#74829f}

/* =====================================================
   HERO
===================================================== */
.pf-hero{position:relative;padding:122px 0 66px;overflow:hidden}
.pf-hero:before{content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(780px 420px at 82% -12%,rgba(36,196,255,.16),transparent 66%),
    radial-gradient(680px 420px at 8% 0%,rgba(24,120,255,.12),transparent 62%)}
/* brand specks echoing the logo, top-right of the hero */
.pf-hero:after{content:"";position:absolute;top:120px;right:7%;width:12px;height:12px;border-radius:3px;
  background:#36c4ff;opacity:.7;pointer-events:none;filter:drop-shadow(0 0 8px rgba(36,196,255,.4));
  box-shadow:-24px 16px 0 -1px rgba(24,120,255,.7),22px -10px 0 -2px rgba(36,196,255,.5),
    42px -26px 0 -4px rgba(36,196,255,.3),-44px -12px 0 -3px rgba(24,120,255,.4)}
@media(max-width:760px){.pf-hero:after{display:none}}
.pf-hero .wrap{position:relative;z-index:1;max-width:920px}
.pf-eyebrow{display:inline-flex;align-items:center;gap:10px;font-family:'JetBrains Mono',monospace;
  font-size:11.5px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:#36c4ff;margin-bottom:20px}
.pf-eyebrow:before{content:"";width:22px;height:1px;background:linear-gradient(90deg,#36c4ff,#1f7bff)}
.pf-hero h1{font-family:'Inter Tight',sans-serif;font-weight:700;color:#f3f6fc;
  font-size:clamp(40px,6vw,68px);line-height:1.04;letter-spacing:-.032em;max-width:16ch}
.pf-hero h1 .u{background:linear-gradient(120deg,#3fd0ff,#1f7bff);-webkit-background-clip:text;background-clip:text;color:transparent}
.pf-hero p.lede{color:#b4c2da;font-size:clamp(16.5px,1.6vw,19px);line-height:1.6;max-width:54ch;margin-top:20px}
.pf-cta-row{display:flex;gap:14px;flex-wrap:wrap;margin-top:34px}
.pf-note{display:inline-flex;align-items:center;gap:9px;margin-top:26px;
  font-family:'JetBrains Mono',monospace;font-size:12.5px;color:#8493b0;letter-spacing:.02em}
.pf-note svg{color:#14B8FF}
.pf-rule{height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.12),transparent);max-width:1180px;margin:0 auto}

/* =====================================================
   CASE-STUDY GRID
===================================================== */
.cases-band{padding:74px 0 90px;background:#071426}
.cases-intro{max-width:680px;margin-bottom:46px}
.cases-intro h2{font-family:'Inter Tight',sans-serif;font-weight:700;font-size:clamp(26px,3.4vw,38px);
  letter-spacing:-.02em;color:#f3f6fc}
.cases-intro p{color:#9aa8c4;font-size:17px;line-height:1.6;margin-top:14px}

.cases{display:grid;grid-template-columns:1fr 1fr;gap:30px}
.cases.trio{grid-template-columns:repeat(3,1fr);gap:26px}
@media(max-width:1000px){.cases.trio{grid-template-columns:1fr 1fr}}
@media(max-width:820px){.cases,.cases.trio{grid-template-columns:1fr;gap:26px}}

/* card */
.case{position:relative;display:flex;flex-direction:column;background:linear-gradient(180deg,#0e2440 0%,#0a1c34 100%);
  border:1px solid rgba(255,255,255,.09);border-radius:18px;overflow:hidden;
  box-shadow:0 1px 0 rgba(255,255,255,.04) inset;
  transition:transform .35s cubic-bezier(.2,.7,.2,1),box-shadow .35s}
.case:hover{transform:translateY(-6px);
  box-shadow:0 34px 66px -34px rgba(0,0,0,.85),0 22px 50px -30px rgba(36,196,255,.32)}
/* gradient border (cyan -> royal) that reveals on hover — 1px ring via mask
   compositing, the same technique used on .cta-band / .ptier.feature */
.case:before{content:"";position:absolute;inset:0;z-index:4;border-radius:inherit;padding:1px;pointer-events:none;
  background:linear-gradient(140deg,var(--cyan),var(--royal));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
  opacity:0;transition:opacity .4s}
.case:hover:before{opacity:1}
/* soft cursor spotlight — tracked in JS via --mx/--my (same as .spot) */
.case:after{content:"";position:absolute;inset:0;z-index:3;border-radius:inherit;pointer-events:none;
  opacity:0;transition:opacity .35s;
  background:radial-gradient(300px circle at var(--mx,50%) var(--my,0%),rgba(24,182,242,.12),transparent 60%)}
.case:hover:after{opacity:1}

/* browser mockup — traffic-light dots + address bar, reusing the chrome
   language already used across the hero / editor / project shells */
.case-shot{position:relative;display:block;background:#06111f;border-bottom:1px solid rgba(255,255,255,.07)}
.case-chrome{display:flex;align-items:center;gap:10px;padding:9px 13px;background:#0b1a30;
  border-bottom:1px solid rgba(255,255,255,.06)}
.case-dots{display:inline-flex;gap:6px;flex:none}
.case-dots i{width:9px;height:9px;border-radius:50%;background:#33406b;display:block}
.case-dots i:nth-child(1){background:#ff6058}.case-dots i:nth-child(2){background:#ffbd2e}.case-dots i:nth-child(3){background:#28ca42}
.case-url{flex:1;min-width:0;display:inline-flex;align-items:center;justify-content:center;gap:7px;
  max-width:76%;margin:0 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.01em;color:#8ea0c2;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);border-radius:7px;padding:4px 12px}
.case-url svg{width:11px;height:11px;flex:none;color:#3a78d6}
/* small logo-spec accent tucked into the toolbar, brightens on hover */
.case-spk{display:grid;grid-template-columns:repeat(3,4px);gap:3px;flex:none;opacity:.5;transition:opacity .35s}
.case-spk i{width:4px;height:4px;border-radius:1px;background:var(--cyan);display:block}
.case-spk i:nth-child(2){background:var(--royal);opacity:.6}
.case-spk i:nth-child(3){opacity:.35}
.case-spk i:nth-child(5){background:var(--royal);opacity:.5}
.case-spk i:nth-child(6){opacity:.3}
.case:hover .case-spk{opacity:.95}
/* the screenshot itself — clipped 16:9 canvas under the chrome */
.case-canvas{position:relative;display:block;aspect-ratio:16/9;overflow:hidden;background:#06111f}
.case-canvas img{width:100%;height:100%;object-fit:cover;object-position:top center;display:block;
  transition:transform .55s cubic-bezier(.2,.7,.2,1)}
.case:hover .case-canvas img{transform:scale(1.035)}
/* gentle sheen so screenshots sit on the dark card nicely */
.case-canvas:after{content:"";position:absolute;inset:0;pointer-events:none;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.05),inset 0 -40px 60px -40px rgba(7,20,38,.8)}

/* body — compact preview, not a full case study */
.case-body{display:flex;flex-direction:column;flex:1;padding:22px 24px 20px}
.case-type{font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.13em;text-transform:uppercase;
  color:#7f8eac;display:flex;align-items:center;gap:9px}
.case-type:before{content:"";width:6px;height:6px;border-radius:50%;background:#1267FF;flex:none}
.case h3{font-family:'Inter Tight',sans-serif;font-size:20px;font-weight:700;letter-spacing:-.01em;
  color:#f1f5fc;margin-top:11px;line-height:1.18}
.case-desc{color:#9fadc8;font-size:14.5px;line-height:1.55;margin-top:9px}
/* who the demo is aimed at — honest targeting, not a client claim */
.case-bestfor{display:inline-flex;align-items:center;margin-top:12px;width:max-content;max-width:100%;
  font-family:'Inter Tight',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.02em;color:#9db9e8;
  border:1px solid rgba(120,170,255,.28);border-radius:999px;padding:5px 13px;background:rgba(24,182,242,.07)}

/* three quick, scannable proof points */
.case-improve{margin-top:15px;margin-bottom:2px}
.imp-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.imp-list li{display:flex;align-items:flex-start;gap:10px;color:#c4cee0;font-size:14px;line-height:1.4}
.imp-list li svg{flex:none;margin-top:2px;color:#14B8FF}

/* footer: status + cta — pushed to the bottom so buttons align across cards */
.case-foot{margin-top:auto;padding-top:15px;border-top:1px solid rgba(255,255,255,.08);
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.case-status{display:inline-flex;align-items:center;gap:8px;font-family:'JetBrains Mono',monospace;
  font-size:11.5px;letter-spacing:.02em;color:#8c9bb8}
.case-status .dot{width:7px;height:7px;border-radius:50%;background:#3a78d6;flex:none;
  box-shadow:0 0 0 3px rgba(58,120,214,.16)}
.case-btn{display:inline-flex;align-items:center;gap:8px;font-family:'Inter Tight',sans-serif;
  font-weight:600;font-size:14px;color:#eaf0fa;background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.14);padding:10px 18px;border-radius:10px;
  transition:background .25s,border-color .25s,transform .2s}
.case-btn .arr{transition:transform .2s}
.case-btn:hover{background:#1267FF;border-color:#1267FF;transform:translateY(-1px)}
.case-btn:hover .arr{transform:translateX(3px)}

/* =====================================================
   PORTFOLIO CAROUSEL — rotating "coverflow" of demo cards
   One large centre card, two darker side cards peeking behind.
   Pure CSS transforms; positions applied by assets/main.js.
===================================================== */
.pf-carousel{position:relative;max-width:1000px;margin:6px auto 0;padding:8px 0 4px;outline:none}
.pf-carousel:focus-visible{outline:2px solid var(--cyan);outline-offset:8px;border-radius:22px}

/* stage clips the peeking side cards at the carousel edges */
.pfc-stage{position:relative;overflow:hidden;height:520px;
  transition:height .5s cubic-bezier(.2,.7,.2,1)}

/* every card is absolutely stacked and centred; JS toggles the state class.
   Selector is scoped to .pfc-stage so it beats the .case:hover transform. */
.pfc-stage .pfc-card{position:absolute;top:0;left:50%;width:min(560px,86%);
  transform:translateX(-50%) scale(.78);opacity:0;z-index:1;pointer-events:none;
  transition:transform .6s cubic-bezier(.2,.7,.2,1),opacity .55s ease,filter .55s ease;
  will-change:transform,opacity}

/* centre — large, bright, in front */
.pfc-stage .pfc-card.is-active{transform:translateX(-50%) scale(1);opacity:1;z-index:3;
  pointer-events:auto;filter:none}

/* sides — smaller, darker, behind, clickable to bring forward */
.pfc-stage .pfc-card.is-prev,
.pfc-stage .pfc-card.is-next{opacity:.9;z-index:2;pointer-events:auto;cursor:pointer;
  filter:brightness(.5) saturate(.92)}
.pfc-stage .pfc-card.is-prev{transform:translateX(-104%) scale(.82)}
.pfc-stage .pfc-card.is-next{transform:translateX(4%) scale(.82)}
.pfc-stage .pfc-card.is-prev:hover,
.pfc-stage .pfc-card.is-next:hover{filter:brightness(.66) saturate(.95)}

/* any extra cards (4+) rest hidden in the centre until rotated in */
.pfc-stage .pfc-card.is-hidden{opacity:0;transform:translateX(-50%) scale(.7);z-index:1;pointer-events:none}

/* prev / next controls */
.pfc-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:6;
  width:48px;height:48px;flex:none;display:flex;align-items:center;justify-content:center;
  border-radius:50%;background:rgba(11,29,53,.72);border:1px solid rgba(255,255,255,.16);
  color:#eaf0fa;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  box-shadow:0 10px 26px -14px rgba(0,0,0,.7);
  transition:background .25s,border-color .25s,color .25s,transform .2s}
.pfc-prev{left:-4px}
.pfc-next{right:-4px}
.pfc-nav:hover{background:#1267FF;border-color:#1267FF;color:#fff;transform:translateY(-50%) scale(1.07)}
.pfc-nav:active{transform:translateY(-50%) scale(.96)}
.pfc-nav:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}

/* dot indicators (built in JS) */
.pfc-dots{display:flex;justify-content:center;align-items:center;gap:10px;margin-top:30px}
.pfc-dot{width:9px;height:9px;padding:0;border:0;border-radius:999px;cursor:pointer;
  background:rgba(255,255,255,.22);transition:background .3s,width .3s}
.pfc-dot:hover{background:rgba(255,255,255,.45)}
.pfc-dot.is-active{width:28px;background:linear-gradient(120deg,#3fd0ff,#1f7bff)}
.pfc-dot:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}

/* screen-reader-only live region */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* progressive enhancement: if JS never runs, show the cards as a simple stack
   so the content is never hidden (no .is-* classes get added). */
.pf-carousel:not(.is-ready) .pfc-stage{height:auto;overflow:visible}
.pf-carousel:not(.is-ready) .pfc-stage .pfc-card{position:relative;left:auto;top:auto;
  width:100%;max-width:560px;margin:0 auto 26px;transform:none;opacity:1;filter:none;pointer-events:auto}
.pf-carousel:not(.is-ready) .pfc-nav,
.pf-carousel:not(.is-ready) .pfc-dots{display:none}

/* mobile fallback: drop the 3D overlap — one full-width card at a time,
   nav + dots + swipe still drive it. */
@media(max-width:820px){
  .pfc-stage .pfc-card{width:100%}
  .pfc-stage .pfc-card.is-prev,
  .pfc-stage .pfc-card.is-next{opacity:0;transform:translateX(-50%) scale(.92);pointer-events:none;filter:none}
  .pfc-nav{width:42px;height:42px}
  .pfc-prev{left:-2px}
  .pfc-next{right:-2px}
}

@media(prefers-reduced-motion:reduce){
  .pfc-stage,.pfc-stage .pfc-card{transition:none}
}

/* =====================================================
   APPROACH — "How I approach each build"
===================================================== */
.approach{background:#0B1D35;border-top:1px solid rgba(255,255,255,.07);border-bottom:1px solid rgba(255,255,255,.07);padding:90px 0}
.approach-head{max-width:760px}
.approach-head .pf-eyebrow{margin-bottom:18px}
.approach-head h2{font-family:'Inter Tight',sans-serif;font-weight:700;font-size:clamp(26px,3.4vw,40px);
  letter-spacing:-.02em;color:#f3f6fc}
.approach-head p{color:#a6b4ce;font-size:17px;line-height:1.65;margin-top:16px}
.approach-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;margin-top:52px}
@media(max-width:820px){.approach-grid{grid-template-columns:1fr;gap:22px}}
.appr{position:relative;background:#10233E;border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:30px 28px;
  transition:transform .3s cubic-bezier(.2,.7,.2,1),border-color .3s}
.appr:hover{transform:translateY(-4px);border-color:rgba(90,140,230,.35)}
/* soft cursor spotlight (matches the demo cards / .spot) */
.appr:after{content:"";position:absolute;inset:0;z-index:2;border-radius:inherit;pointer-events:none;
  opacity:0;transition:opacity .35s;
  background:radial-gradient(300px circle at var(--mx,50%) var(--my,0%),rgba(24,182,242,.10),transparent 60%)}
.appr:hover:after{opacity:1}
.appr .n{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:#14B8FF;letter-spacing:.05em}
.appr h3{font-family:'Inter Tight',sans-serif;font-size:20px;font-weight:700;color:#f1f5fc;margin-top:16px;letter-spacing:-.01em}
.appr p{color:#9fadc8;font-size:14.5px;line-height:1.62;margin-top:10px}

/* =====================================================
   FINAL CTA
===================================================== */
.pf-final{padding:96px 0}
.pf-final .panel{position:relative;overflow:hidden;text-align:center;border-radius:22px;
  background:linear-gradient(160deg,#10233E,#06111f);border:1px solid rgba(255,255,255,.1);
  padding:clamp(40px,6vw,72px)}
.pf-final .panel:before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(620px 280px at 50% -20%,rgba(47,127,240,.16),transparent 70%)}
.pf-final h2{position:relative;font-family:'Inter Tight',sans-serif;font-weight:700;
  font-size:clamp(27px,3.8vw,42px);letter-spacing:-.02em;color:#f4f7fd}
.pf-final p{position:relative;color:#a6b4ce;font-size:17px;line-height:1.6;max-width:54ch;margin:16px auto 30px}
.pf-final .btn{position:relative}

/* =====================================================
   HOMEPAGE FEATURE (reuses .case in the dark band)
===================================================== */
.feat-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:42px}
.feat-head .btn{flex:none}
.feat-viewall{display:flex;justify-content:center;margin-top:44px}

/* =====================================================
   HOMEPAGE PORTFOLIO PREVIEW — a single example card,
   centred as one intentional feature (the full set lives
   on the portfolio page). Keeps the dark-navy band + glow.
===================================================== */
/* Centre the intro so it sits directly above the card on the same axis —
   no more left-hugging text with a big empty right side. */
.band-proj .band-head{max-width:680px;margin-left:auto;margin-right:auto;text-align:center}
.band-proj .band-head p{max-width:600px;margin-left:auto;margin-right:auto}

/* The single example card: a restrained, centred preview (not a hero),
   with real breathing room above it. */
.feat-solo{max-width:580px;margin:56px auto 0}

@media(max-width:600px){
  .feat-solo{margin-top:44px}
}

/* reveal */
.rv{opacity:0;transform:translateY(20px)}
.rv.in{opacity:1;transform:none;transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0s)}

@media(max-width:560px){
  .pf-hero{padding:96px 0 54px}
  .case-body{padding:18px 18px 16px}
  .case h3{font-size:19px}
  .feat-head{align-items:flex-start}
  .feat-head .btn{width:100%;justify-content:center}
}
@media(prefers-reduced-motion:reduce){
  .case:hover .case-canvas img{transform:none}
  .rv{opacity:1;transform:none}
}
