/*
Theme Name: KKsarkar
Theme URI: https://example.com/
Author: Kanchan Kumar Sarkar
Author URI: https://example.com/
Description: A dark-first, peacock-inspired block theme for a personal brand offering SEO, local search, video editing, graphic design and social media promotion. Built for speed, accessibility and multilingual use (English, Bangla, Hindi). No page builder required.
Version: 1.12.1
Requires at least: 6.5
Tested up to: 6.7
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: kksarkar
Tags: blog, portfolio, one-column, block-patterns, full-site-editing, translation-ready, accessibility-ready
*/

/* -------------------------------------------------------------
   Everything below is the design system. Colours, spacing and
   type all come from the custom properties in :root — change a
   value there and it updates everywhere on the site.
   ------------------------------------------------------------- */

:root{
  --pk-950:#04131A; --pk-900:#072129; --pk-800:#0A3A43; --pk-700:#0A4A55;
  --pk-600:#0C6B73; --pk-500:#128C93; --pk-400:#2FB3B3; --pk-300:#7FD9D2;
  --vi-600:#5A48C0; --vi-500:#6D5BD0; --vi-300:#A79BEA;
  --em-500:#1E9E6A; --gd-500:#C9A227; --gd-700:#7A5F14;
  --n-0:#FFFFFF; --n-50:#F4F7F7; --n-100:#E6EDED; --n-600:#55686B; --n-900:#121C1F;

  --bg:var(--pk-950);
  --bg-raised:#0A1C24;
  --bg-sunken:#020B10;
  --line:#12343C;
  --line-soft:#0D262D;
  --text:#EAF2F2;
  --text-muted:#8FA9AC;
  --brand:var(--pk-400);
  --brand-deep:var(--pk-600);
  --accent:var(--vi-300);
  --gold:var(--gd-500);

  --t-xs:.75rem; --t-sm:.875rem; --t-base:1rem; --t-md:1.125rem;
  /* The smallest type on the site. It used to run down to .6rem —
     9.6px — which is below what anyone should have to read and below
     what Google counts as legible on a phone. Nothing goes under 12px
     now; the letter-spacing on these mono labels does the work of
     making them look small instead. */
  --t-micro:.75rem;
  --t-lg:1.375rem; --t-xl:1.75rem;
  --t-2xl:clamp(1.9rem,4.2vw,2.7rem);
  --t-3xl:clamp(2.4rem,6vw,3.6rem);
  --t-4xl:clamp(2.7rem,8vw,5rem);

  --max:1120px;
  --r-sm:8px; --r-md:14px; --r-lg:22px;
  --ease-out:cubic-bezier(.22,1,.36,1);

  --elev-1:0 12px 26px -16px rgba(0,0,0,.8), 0 3px 8px -4px rgba(0,0,0,.55);
  --elev-2:0 26px 50px -20px rgba(0,0,0,.9), 0 6px 16px -6px rgba(0,0,0,.6);
  --trail-blend:screen;
  --trail-alpha:.16;
  --lit-blend:screen;
  --lit-mix:58%;
  --btn-sh:0 6px 14px -8px rgba(0,0,0,.9), 0 2px 5px -3px rgba(0,0,0,.75),
           inset 0 1px 0 rgba(255,255,255,.07);
  --btn-sh-hi:0 14px 26px -10px color-mix(in srgb,var(--brand) 60%,transparent),
              0 5px 12px -6px rgba(0,0,0,.8), inset 0 1px 0 rgba(255,255,255,.10);
  --btn-sh-in:0 2px 5px -3px rgba(0,0,0,.85), inset 0 2px 5px -2px rgba(0,0,0,.5);

  color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:var(--n-50); --bg-raised:var(--n-0); --bg-sunken:var(--n-100);
  --line:#CBD8D9; --line-soft:#E0E9E9;
  --text:var(--n-900); --text-muted:var(--n-600);
  --brand:var(--pk-600); --brand-deep:var(--pk-700);
  --accent:var(--vi-600); --gold:var(--gd-700);
  --elev-1:0 12px 26px -16px rgba(10,74,85,.38), 0 3px 8px -5px rgba(10,74,85,.22);
  --elev-2:0 28px 50px -22px rgba(10,74,85,.48), 0 6px 16px -7px rgba(10,74,85,.3);
  --trail-blend:multiply;
  --trail-alpha:.22;
  --lit-blend:normal;
  --lit-mix:17%;
  --btn-sh:0 6px 14px -8px rgba(10,74,85,.5), 0 2px 5px -3px rgba(10,74,85,.3);
  --btn-sh-hi:0 15px 28px -10px color-mix(in srgb,var(--brand) 55%,transparent),
              0 5px 12px -6px rgba(10,74,85,.32);
  --btn-sh-in:0 2px 5px -3px rgba(10,74,85,.4), inset 0 2px 5px -2px rgba(10,74,85,.22);
  color-scheme:light;
}

*{box-sizing:border-box}
html,body{overflow-x:clip}
/* The page colour lives on <html>, not on <body>, so that the pointer trail
   can be slipped in between the two: the trail is a fixed layer at z-index -1,
   which paints above the root's background and below everything in the
   document. That is the only place it can sit and still be visible without
   ever covering a word, a button, an image or the menu bar. If <body> kept an
   opaque background it would hide the trail completely. */
html{
  background:var(--bg);
  transition:background .3s ease;
}
body{
  margin:0; background:transparent; color:var(--text);
  font-family:"Anek Latin","Segoe UI",system-ui,sans-serif;
  font-size:var(--t-base); line-height:1.7;
  -webkit-font-smoothing:antialiased;
  transition:color .3s ease;
}
h1,h2,h3,h4{
  font-family:"Archivo","Anek Latin",sans-serif;
  font-variation-settings:"wdth" 112;
  font-weight:700; line-height:1.06; letter-spacing:-.025em;
  text-wrap:balance; margin:0;
}
p{margin:0 0 1em} p:last-child{margin-bottom:0}
a{color:var(--brand)}
img{max-width:100%}

.wrap{width:100%;max-width:var(--max);margin-inline:auto;padding-inline:24px}
.mono{font-family:"JetBrains Mono",ui-monospace,monospace}
.eyebrow{
  font-family:"JetBrains Mono",monospace; font-size:var(--t-xs);
  letter-spacing:.18em; text-transform:uppercase; color:var(--brand); margin:0 0 14px;
}
.eyebrow::before{content:"◆ ";color:var(--gold);font-size:.7em;vertical-align:1px}
.lede{color:var(--text-muted);max-width:62ch;font-size:var(--t-md)}

.btn{
  display:inline-flex;align-items:center;gap:9px;
  font-family:"Anek Latin",sans-serif;font-weight:600;font-size:var(--t-sm);
  text-decoration:none;border-radius:999px;padding:13px 24px;
  border:1px solid transparent;cursor:pointer;
  transition:transform .18s var(--ease-out),background .2s,border-color .2s,color .2s;
}
.btn-1{background:var(--brand);color:var(--pk-950)}
:root[data-theme="light"] .btn-1{color:var(--n-0)}
.btn-1:hover{transform:translateY(-2px)}
.btn-2{border-color:var(--line);color:var(--text);background:transparent}
.btn-2:hover{border-color:var(--brand)}
.btn-sm{padding:10px 18px;font-size:var(--t-xs)}

/* ---------- floating header ---------- */
.hdr{
  position:fixed;
  top:calc(env(safe-area-inset-top,0px) + 14px);
  left:0;right:0;z-index:70;
  pointer-events:none;
}
.hdr-in{
  position:relative;
  pointer-events:auto;
  width:min(1300px,calc(100% - 32px));
  margin-inline:auto;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:8px 8px 8px 20px;
  /* Opaque enough that the trail behind it never reads through the menu.
     This used to be frosted glass (backdrop-filter). A backdrop blur forces
     the browser to re-read and re-blur whatever is behind the bar on every
     frame, and the hero canvas behind it changes every frame — so the cost
     was paid continuously, and it showed as lag when the pointer moved along
     the menu. Solid it is. */
  background:color-mix(in srgb,var(--bg-raised) 99%,transparent);
  border:1px solid var(--line);
  border-radius:999px;
  box-shadow:0 14px 34px -16px rgba(0,0,0,.8), 0 3px 10px -4px rgba(0,0,0,.5);
  transition:box-shadow .35s ease,padding .3s var(--ease-out),background .3s ease;
}
:root[data-theme="light"] .hdr-in{
  box-shadow:0 16px 34px -18px rgba(10,74,85,.45), 0 3px 10px -5px rgba(10,74,85,.25);
}
.hdr[data-scrolled="true"] .hdr-in{
  box-shadow:0 20px 46px -18px rgba(0,0,0,.9), 0 4px 14px -5px rgba(0,0,0,.55);
  background:color-mix(in srgb,var(--bg-raised) 99%,transparent);
}
:root[data-theme="light"] .hdr[data-scrolled="true"] .hdr-in{
  box-shadow:0 22px 44px -20px rgba(10,74,85,.5), 0 4px 14px -6px rgba(10,74,85,.3);
}
@media (max-width:920px){.hdr-in{border-radius:26px;padding:8px 8px 8px 16px}}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--text);
  font-family:"Archivo",sans-serif;font-variation-settings:"wdth" 118;font-weight:800;
  font-size:1.05rem;letter-spacing:-.01em}
.feather{width:24px;height:24px;flex:none}
.nav{display:flex;align-items:center;gap:8px}
.nav ul{display:flex;gap:4px;list-style:none;margin:0;padding:0}
/* Two steps up from where it was (0.875rem → 1.125rem) and bold. The menu is
   the one piece of text on the page everybody reads, so it is no longer the
   smallest. Everything below widens to match: the bar, the gaps and the
   breakpoints all had to move with it or the eight links would wrap. */
.nav a{
  display:block;text-decoration:none;color:var(--text-muted);
  font-size:var(--t-md);font-weight:700;letter-spacing:-.01em;
  padding:8px 13px;border-radius:999px;position:relative;
  background:transparent;border:1px solid transparent;
  transition:color .2s,transform .22s var(--ease-out),background .22s,border-color .22s,box-shadow .22s;
}
.nav a:hover{
  color:var(--text);
  transform:translateY(-3px);
  background:color-mix(in srgb,var(--bg-sunken) 70%,transparent);
  border-color:var(--line);
  box-shadow:0 8px 16px -8px rgba(0,0,0,.7);
}
:root[data-theme="light"] .nav a:hover{box-shadow:0 8px 16px -9px rgba(10,74,85,.45)}
/* the header CTA is a pill, not a nav link — .nav a would otherwise strip it */
.nav a.btn-1{background:var(--brand);color:var(--pk-950);border-color:transparent;padding:10px 18px}
:root[data-theme="light"] .nav a.btn-1{color:#fff}
.nav a.btn-1:hover{background:#45c7c7;color:var(--pk-950);transform:translateY(-2px);
  box-shadow:0 10px 20px -10px rgba(0,0,0,.8)}
:root[data-theme="light"] .nav a.btn-1:hover{background:var(--pk-700);color:#fff}
.nav li[aria-current] a{
  color:var(--text);
  background:color-mix(in srgb,var(--bg-sunken) 85%,transparent);
  border-color:var(--line);
}
.iconbtn{
  display:grid;place-items:center;width:38px;height:38px;flex:none;
  border:1px solid var(--line);border-radius:999px;background:transparent;
  color:var(--text-muted);cursor:pointer;padding:0;
  transition:color .2s,border-color .2s,transform .22s var(--ease-out),box-shadow .22s;
}
.iconbtn:hover{color:var(--text);border-color:var(--brand);transform:translateY(-2px);
  box-shadow:0 8px 16px -8px rgba(0,0,0,.7)}
.iconbtn .moon{display:none}
:root[data-theme="light"] .iconbtn .sun{display:none}
:root[data-theme="light"] .iconbtn .moon{display:block}
@media (max-width:920px){.iconbtn{order:2}}

.burger{display:none;background:none;border:1px solid var(--line);border-radius:999px;
  width:38px;height:38px;cursor:pointer;color:var(--text);padding:0;flex:none;
  transition:border-color .2s,transform .22s var(--ease-out)}
.burger:hover{border-color:var(--brand);transform:translateY(-2px)}
.burger span{display:block;width:17px;height:1.5px;background:currentColor;margin:3.5px auto;border-radius:2px;transition:transform .2s,opacity .2s}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(5px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}
/* Eight bold links at 1.125rem need more bar than the 1120px content column,
   so the header alone runs wider than the text under it. Below that it gives
   things up in the order that costs least: first the spacing, then the CTA
   (which is repeated in the hero and the contact section anyway), then a
   step of type, and only then the hamburger. Better a visible menu than one
   the visitor has to discover. */
@media (max-width:1300px){
  .nav ul{gap:0}
  .nav a{padding:8px 10px}
  .hdr-in{padding-left:14px;gap:12px}
}
@media (max-width:1150px){
  .nav a.btn-1{display:none}
}
@media (max-width:980px){
  .nav a{padding:7px 8px;font-size:var(--t-base)}
  .brandmark{height:34px}
  .themebtn{padding:0;width:38px;justify-content:center;gap:0}
  .themebtn .th-txt{display:none}
}

@media (max-width:860px){
  .burger{display:block;order:3}
  .nav{
    position:absolute;top:calc(100% + 10px);left:0;right:0;
    padding:14px;border-radius:26px;
    background:var(--bg-raised);
    border:1px solid var(--line);
    box-shadow:0 20px 44px -18px rgba(0,0,0,.85);
    flex-direction:column;align-items:stretch;gap:6px;
    opacity:0;transform:translateY(-10px) scale(.97);pointer-events:none;
    transform-origin:top center;
    transition:opacity .24s ease,transform .28s var(--ease-out);
  }
  :root[data-theme="light"] .nav{box-shadow:0 20px 44px -20px rgba(10,74,85,.5)}
  .nav[data-open="true"]{opacity:1;transform:none;pointer-events:auto}
  .nav ul{flex-direction:column;gap:2px}
  .nav a{padding:12px 14px;font-size:var(--t-md)}
  .nav a:hover{transform:none}
  .nav a.btn-1{display:flex;justify-content:center;margin-top:10px;font-size:var(--t-sm)}
}

/* ---------- right-edge section rail ----------
   A visible bar, not a row of loose dots: the pill, the little menu glyph at
   its head and the hairline under it are what tell a first-time visitor this
   is navigation rather than decoration. */
.railnav{
  position:fixed;right:14px;top:50%;transform:translateY(-50%);z-index:62;
  display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:12px 8px 14px;
  background:color-mix(in srgb,var(--bg-raised) 99%,transparent);
  border:1px solid var(--line);
  border-radius:999px;
  box-shadow:var(--elev-2);
}
.rail-cap{
  display:grid;place-items:center;width:24px;height:24px;flex:none;
  color:var(--text-muted);margin-bottom:2px;
  background:transparent;border:0;padding:0;cursor:default;border-radius:50%;
  transition:color .2s ease,background .2s ease;
}
.rail-cap svg{width:14px;height:14px;display:block;transition:transform .25s var(--ease-out)}
.rail-rule{
  width:14px;height:1px;background:var(--line);flex:none;margin:4px 0 6px;
}
.rail-dots{display:flex;flex-direction:column;align-items:center;gap:2px}
.railnav a{
  display:flex;align-items:center;justify-content:center;
  width:22px;height:22px;flex:none;
  text-decoration:none;color:var(--text-muted);position:relative;
  border-radius:50%;
}
.railnav .lbl{
  position:absolute;right:calc(100% + 12px);top:50%;transform:translateY(-50%) translateX(8px);
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.12em;
  text-transform:uppercase;white-space:nowrap;
  background:var(--bg-raised);
  border:1px solid var(--line);border-radius:999px;padding:5px 11px;
  box-shadow:var(--elev-1);
  opacity:0;pointer-events:none;
  transition:opacity .2s ease,transform .24s var(--ease-out),color .2s ease;
}
/* Each section carries its own colour, and the colour is on the dot at rest —
   not only on hover — so the bar reads as eight distinct destinations. The
   eight run down the peacock-feather spectrum rather than being random. */
.railnav .dot{
  width:9px;height:9px;flex:none;border-radius:50%;
  background:var(--c);
  border:1px solid color-mix(in srgb,var(--c) 70%,transparent);
  opacity:.62;
  transition:opacity .22s ease,transform .22s var(--ease-out),box-shadow .22s ease;
}
.railnav a:hover .dot,.railnav a:focus-visible .dot{opacity:1;transform:scale(1.18)}
.railnav a[aria-current="true"]{background:color-mix(in srgb,var(--c) 15%,transparent)}
.railnav a[aria-current="true"] .dot{
  opacity:1;transform:scale(1.28);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 28%,transparent);
}
.railnav .lbl{border-color:color-mix(in srgb,var(--c) 45%,var(--line))}
.railnav a:hover .lbl,.railnav a:focus-visible .lbl{
  opacity:1;transform:translateY(-50%) translateX(0);color:var(--c);
}
:root[data-theme="light"] .railnav a:hover .lbl{color:color-mix(in srgb,var(--c) 78%,#000)}

/* Below 1240px there is no empty margin beside the content, so the rail
   collapses to just its glyph — a 34px button sitting in the gutter. Tapping
   it opens the coloured dots; tapping a dot jumps and closes it again. That
   keeps the menu present on tablets and phones instead of hiding it. */
@media (max-width:1239px){
  .railnav{right:6px;padding:6px 5px}
  /* The names stay. They were hidden here, which meant that on any window
     narrower than 1240px — most laptops that are not full screen — hovering a
     dot told you nothing. They sit to the left of the rail, so there is room
     for them at any width worth showing a rail at. */
  .rail-rule,.rail-dots{display:none}
  .rail-cap{cursor:pointer;width:26px;height:26px}
  .rail-cap:hover,.rail-cap:focus-visible{color:var(--text);background:var(--bg-sunken)}
  .railnav[data-open="true"]{padding:8px 5px 10px}
  .railnav[data-open="true"] .rail-rule{display:block}
  .railnav[data-open="true"] .rail-dots{display:flex}
  .railnav[data-open="true"] .rail-cap svg{transform:rotate(90deg)}
  .railnav[data-open="true"] .rail-cap{color:var(--brand)}
  .railnav a{width:26px;height:26px}
  .railnav .dot{width:10px;height:10px}
}

/* ---------- language dock, bottom right ---------- */
.langdock{
  position:fixed;right:18px;z-index:78;
  bottom:calc(18px + env(safe-area-inset-bottom,0px));
  display:flex;gap:2px;padding:5px;
  background:color-mix(in srgb,var(--bg-raised) 99%,transparent);
  border:1px solid var(--line);border-radius:999px;
  box-shadow:var(--elev-2);
}
.langdock button{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.06em;
  background:transparent;border:0;border-radius:999px;padding:8px 13px;
  color:var(--text-muted);cursor:pointer;
  transition:background .2s ease,color .2s ease;
}
.langdock button:hover{color:var(--text)}
.langdock button[aria-pressed="true"]{background:var(--brand-deep);color:#fff}
.langdock .bn{font-family:"Anek Bangla","Hind Siliguri",sans-serif}
.langdock .hi{font-family:"Anek Devanagari","Noto Sans Devanagari",sans-serif}
@media (max-width:520px){.langdock{right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px))}
  .langdock button{padding:7px 10px;font-size:var(--t-micro)}}

/* the note that appears when a demo translation is switched on */
.langnote{
  position:fixed;right:18px;z-index:77;
  bottom:calc(74px + env(safe-area-inset-bottom,0px));
  max-width:min(320px,calc(100vw - 36px));
  background:var(--bg-raised);border:1px solid var(--line);
  border-left:2px solid var(--gold);border-radius:var(--r-sm);
  padding:12px 15px;font-size:var(--t-xs);line-height:1.6;color:var(--text-muted);
  box-shadow:var(--elev-2);
  opacity:0;transform:translateY(8px);pointer-events:none;
  transition:opacity .3s ease,transform .3s var(--ease-out);
}
.langnote.show{opacity:1;transform:none}

/* ---------- page tabs, above the footer ---------- */
.pagetabs{border-top:1px solid var(--line-soft);background:var(--bg-sunken)}
.pagetabs-in{padding-block:clamp(48px,6vw,80px)}
.tabgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:32px}
@media (min-width:900px){.tabgrid{grid-template-columns:repeat(3,1fr)}}
.ptab{
  display:flex;flex-direction:column;gap:3px;
  border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--bg-raised);padding:16px 18px 18px;text-decoration:none;
  box-shadow:var(--elev-1);
  transition:box-shadow .26s var(--ease-out),transform .26s var(--ease-out),border-color .26s ease;
}
.ptab:hover{box-shadow:var(--elev-2);transform:translateY(-4px);border-color:var(--brand-deep)}
.ptab i{font-style:normal;font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);
  letter-spacing:.14em;color:var(--gold)}
.ptab b{font-family:"Archivo",sans-serif;font-variation-settings:"wdth" 110;
  font-size:var(--t-md);font-weight:600;letter-spacing:-.02em;color:var(--text);
  transition:color .22s ease}
.ptab:hover b{color:var(--brand)}
.ptab span{font-size:var(--t-xs);color:var(--text-muted);line-height:1.5}
@media (prefers-reduced-motion:reduce){.ptab:hover{transform:none}}

/* ---------- hero ---------- */
.hero{position:relative;overflow:hidden;border-bottom:1px solid var(--line-soft)}
#iridescence{position:absolute;inset:0;width:100%;height:100%;display:block;opacity:.9;z-index:1}

/* Hero video.
   The source has a white studio background, so it is inverted and hue-rotated
   back — that turns the white into black, which `screen` then drops out
   entirely. What is left is the artwork glowing over the peacock field, which
   is what "transparent video" actually means on the web. */
.herovid{
  position:absolute;inset:0;z-index:2;
  width:100%;height:100%;object-fit:cover;
  pointer-events:none;
  /* The invert / hue-rotate / saturate / blur chain and the radial mask used
     to run here, on every frame of a moving video. On a Windows laptop with
     no GPU compositing for filtered video that alone cost more than half the
     frame budget. The same chain is now baked into the video file itself, so
     the browser only has to draw pixels. */
  mix-blend-mode:screen;
  opacity:.55;
}
/* Where the browser can play the alpha version there is nothing to blend:
   the clip is simply drawn where it is opaque and skipped where it is not,
   which is both cheaper and truer to the artwork's own colours. */
:root.vid-alpha .herovid{
  mix-blend-mode:normal;
  opacity:.85;
}
/* The clip is pre-inverted for the dark hero, so screening it over a light
   background washes out to nothing. Light mode drops it and keeps the colour
   field on its own. */
:root[data-theme="light"] .herovid{display:none}
/* Unless the alpha version is playing, in which case the artwork can simply
   be turned the right way up again — inverting RGB leaves the alpha channel
   alone, so the shape stays and only the colours flip back. Measured at the
   same frame rate as no video at all. */
:root.vid-alpha[data-theme="light"] .herovid{
  display:block;
  mix-blend-mode:normal;
  opacity:.42;
  filter:invert(1) hue-rotate(180deg);
}
@media (max-width:760px){.herovid{opacity:.34}}
@media (prefers-reduced-motion:reduce){.herovid{display:none}}

/* Two veils: one down the page, one across it, so the headline always sits
   on a dark field no matter what the video is showing behind it. */
.veil{position:absolute;inset:0;z-index:3;background:
  linear-gradient(95deg,
    color-mix(in srgb,var(--bg) 92%,transparent) 0%,
    color-mix(in srgb,var(--bg) 72%,transparent) 32%,
    color-mix(in srgb,var(--bg) 22%,transparent) 64%,
    transparent 100%),
  linear-gradient(180deg,
    color-mix(in srgb,var(--bg) 22%,transparent) 0%,
    color-mix(in srgb,var(--bg) 34%,transparent) 58%, var(--bg) 100%)}

/* Logo lockup */
.brandmark{
  height:42px;width:auto;flex:none;display:block;
  filter:drop-shadow(0 2px 7px rgba(0,0,0,.5));
}
.foot-brand .brandmark{height:54px}

/* The mark is a touch taller than it was, because the menu beside it grew
   two sizes and a logo that no longer holds its own against the links reads
   as an afterthought. */
.brandmark{height:48px}
.foot-brand .brandmark{height:58px}
@media (max-width:980px){.brandmark{height:38px}}

/* The mark is an animated WebP, so the <picture> around it has to be told to
   behave like the block the <img> used to be. */
.brandwrap picture{display:block;line-height:0}
.sr-brand{
  position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;
}
@media (max-width:420px){.brandmark{height:34px}}
.hero-in{position:relative;z-index:4;padding-block:clamp(128px,15vw,186px) clamp(58px,9vw,104px)}
.hero h1{font-size:var(--t-4xl);font-weight:800;font-variation-settings:"wdth" 104;
  letter-spacing:-.04em;max-width:15ch}
.hero h1 .em{color:transparent;
  background:linear-gradient(100deg,var(--pk-300),var(--vi-300) 58%,var(--gd-500));
  -webkit-background-clip:text;background-clip:text}
:root[data-theme="light"] .hero h1 .em{
  background:linear-gradient(100deg,var(--pk-600),var(--vi-600) 56%,var(--gd-700));
  -webkit-background-clip:text;background-clip:text}
/* ---------- clickable text shifts colour on hover, everywhere ---------- */
a,button,.cat,.svc-link,.nav a,.foot-grid a{transition:color .22s ease}

a:not(.btn):not(.skip):not(.logo):hover,
a:not(.btn):not(.skip):not(.logo):focus-visible{color:var(--brand)}

.logo:hover{color:var(--brand)}
.cat:hover{color:var(--brand)}
.btn-2:hover{color:var(--brand)}
.svc-link:hover{color:var(--pk-300)}
:root[data-theme="light"] .svc-link:hover{color:var(--pk-700)}

/* the language rail keeps white on its teal pill */
.langrail a[aria-current="true"]:hover{color:#fff}

/* a card lighting up carries its heading with it */
.svc-lead:hover h3,.svc-card:hover h3,.duo > div:hover h3{color:var(--brand);transition:color .22s ease}
.svc-lead h3,.svc-card h3,.duo > div h3{transition:color .22s ease}
.slot:hover .slot-no{color:var(--brand)}
.slot .slot-no{transition:color .22s ease}

/* ---------- script-aware typography ----------
   One family across all three scripts, so a Bangla or Hindi page still
   looks like the same brand instead of falling back to a system font. */
:root[lang="bn"] body{font-family:"Anek Bangla","Anek Latin",sans-serif;line-height:1.85}
:root[lang="hi"] body{font-family:"Anek Devanagari","Anek Latin",sans-serif;line-height:1.85}
:root[lang="bn"] h1,:root[lang="bn"] h2,:root[lang="bn"] h3,:root[lang="bn"] h4{
  font-family:"Anek Bangla","Archivo",sans-serif;font-variation-settings:normal;
  font-weight:600;letter-spacing:0;line-height:1.35}
:root[lang="hi"] h1,:root[lang="hi"] h2,:root[lang="hi"] h3,:root[lang="hi"] h4{
  font-family:"Anek Devanagari","Archivo",sans-serif;font-variation-settings:normal;
  font-weight:600;letter-spacing:0;line-height:1.35}
/* Bangla and Devanagari do not take Latin letter-spacing or uppercasing */
:root[lang="bn"] .eyebrow,:root[lang="hi"] .eyebrow,
:root[lang="bn"] .hero-strip,:root[lang="hi"] .hero-strip,
:root[lang="bn"] .hero-strip span,:root[lang="hi"] .hero-strip span,
:root[lang="bn"] .ptab i,:root[lang="hi"] .ptab i,
:root[lang="bn"] .ptab span,:root[lang="hi"] .ptab span,
:root[lang="bn"] .railnav .lbl,:root[lang="hi"] .railnav .lbl,
:root[lang="bn"] .foot-grid h4,:root[lang="hi"] .foot-grid h4{
  letter-spacing:normal;text-transform:none;
}
:root[lang="bn"] .eyebrow,:root[lang="bn"] .hero-strip,:root[lang="bn"] .railnav .lbl,
:root[lang="bn"] .ptab span,:root[lang="bn"] .foot-grid h4{font-family:"Anek Bangla",sans-serif}
:root[lang="hi"] .eyebrow,:root[lang="hi"] .hero-strip,:root[lang="hi"] .railnav .lbl,
:root[lang="hi"] .ptab span,:root[lang="hi"] .foot-grid h4{font-family:"Anek Devanagari",sans-serif}
:root[lang="bn"] .ptab b{font-family:"Anek Bangla",sans-serif;font-variation-settings:normal;letter-spacing:normal}
:root[lang="hi"] .ptab b{font-family:"Anek Devanagari",sans-serif;font-variation-settings:normal;letter-spacing:normal}

section[id],header[id]{scroll-margin-top:96px}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}
.hero .lede{margin-top:22px}
.hero-ctas{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}
.hero-strip{
  display:flex;flex-wrap:wrap;gap:10px 26px;margin-top:38px;padding-top:22px;
  border-top:1px solid var(--line);
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);
}
.hero-strip span::before{content:"— ";color:var(--brand)}

/* ---------- sections ---------- */
.sec{border-bottom:1px solid var(--line-soft);padding-block:clamp(56px,7vw,92px)}
.sec h2{font-size:var(--t-2xl);max-width:19ch}
.sec .lede{margin-top:16px}
.tight{padding-block:clamp(44px,5vw,64px)}

/* ---------- shared card elevation ---------- */
.duo > div,.svc-lead,.svc-card,.slot,.photo,.honest,.plug{
  box-shadow:var(--elev-1);
  transition:box-shadow .28s var(--ease-out),transform .28s var(--ease-out),border-color .28s ease;
}
.duo > div:hover,.svc-lead:hover,.svc-card:hover,.slot:hover,.plug:hover{
  box-shadow:var(--elev-2);
  transform:translateY(-4px);
}
@media (prefers-reduced-motion:reduce){
  .duo > div:hover,.svc-lead:hover,.svc-card:hover,.slot:hover,.plug:hover{transform:none}
}

/* ---------- the problem, a line that keeps turning ----------
   A carousel with the two arrows sitting on the middle of the card, one each
   side, rather than in a bar underneath. The left one sends the line forwards
   — 01, 02, 03 — and the right one sends it back. Neither ever stops: the row
   is doubled in the markup and the position wraps, so ten comes round to one
   without the line ever appearing to jump.

   The section is only a little taller than one card. Ten problems used to be
   ten screens of scrolling. */
#why{padding-block:clamp(44px,5vw,66px)}
#why h2{max-width:22ch}
#why .lede{margin-top:14px}

.probs{
  position:relative;
  margin-top:34px;
  padding-inline:62px;          /* the gutters the arrows stand in */
}

.probs-stage{ overflow:hidden; padding-block:6px }
/* The edge a half-shown card runs off fades rather than cuts. */
.probs-stage{
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent);
}
.probs-track{
  display:flex; gap:20px;
  transition:transform .62s var(--ease-out);
  will-change:transform;
}
.probs-track[data-jump]{transition:none}

.prob{
  flex:0 0 clamp(270px,30%,370px);
  background:var(--bg-raised);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:24px 26px 26px;
  box-shadow:var(--elev-1);
  min-height:250px;
  display:flex; flex-direction:column;
  opacity:.34; transform:scale(.95);
  transition:opacity .45s ease,transform .5s var(--ease-out),
             box-shadow .28s var(--ease-out),border-color .28s ease;
}
.prob.is-here{
  opacity:1; transform:none;
  border-color:var(--brand-deep);
  box-shadow:var(--elev-2);
}
.prob.is-near{opacity:.62;transform:scale(.975)}
.prob .num{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  color:var(--gold);letter-spacing:.14em;display:block;margin:0 0 15px;
}
.prob h3{font-size:var(--t-lg);margin-bottom:10px;transition:color .22s ease}
.prob p{color:var(--text-muted);font-size:var(--t-sm);margin:0}
.prob.is-here:hover h3{color:var(--brand)}

/* ---- the two arrows, on the middle of the card ---- */
.probs-arrow{
  position:absolute;top:50%;z-index:4;
  transform:translateY(-50%);
  display:grid;place-items:center;width:50px;height:50px;
  border:1px solid var(--line);border-radius:999px;
  background:var(--bg-raised);color:var(--text);cursor:pointer;padding:0;
  box-shadow:var(--elev-2);
  transition:color .2s,border-color .2s,background .22s,
             box-shadow .22s var(--ease-out),scale .22s var(--ease-out);
}
/* top:50% is measured against .probs, which is the card row plus the pips —
   so the middle is nudged up by half the pip row to land on the card. */
.probs-arrow{margin-top:-19px}
.probs-fwd{left:0}
.probs-back{right:0}
.probs-arrow svg{width:21px;height:21px;display:block}
.probs-arrow:hover{
  background:var(--brand);color:var(--pk-950);border-color:transparent;
  scale:1.08;
}
:root[data-theme="light"] .probs-arrow:hover{color:#fff}
.probs-arrow:active{scale:.96;box-shadow:var(--btn-sh-in)}
/* the one that is driving the line right now */
.probs-arrow[data-live="true"]{
  background:var(--brand);color:var(--pk-950);border-color:transparent;
  box-shadow:0 0 0 4px color-mix(in srgb,var(--brand) 24%,transparent), var(--elev-2);
}
:root[data-theme="light"] .probs-arrow[data-live="true"]{color:#fff}

.probs-pips{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:22px}
.probs-pip{
  width:9px;height:9px;padding:0;flex:none;cursor:pointer;
  border-radius:999px;border:1px solid var(--line);
  background:color-mix(in srgb,var(--text-muted) 40%,transparent);
  transition:background .22s ease,transform .22s var(--ease-out),width .28s var(--ease-out);
}
.probs-pip:hover{background:var(--text-muted);transform:scale(1.2)}
.probs-pip[aria-selected="true"]{
  width:26px;background:var(--brand);border-color:transparent;transform:none;
}

@media (max-width:900px){
  .probs{padding-inline:54px}
  .prob{flex-basis:clamp(250px,68%,330px)}
  .probs-arrow{width:44px;height:44px}
  .probs-pips{gap:6px}
  .probs-pip{width:7px;height:7px}
  .probs-pip[aria-selected="true"]{width:20px}
}
@media (max-width:560px){
  /* The arrows stay where they belong — on the middle of the card, one each
     side — so the gutter they stand in is taken out of the card's width
     rather than laid over its text. One card, fully readable, arrows clear
     of every word. */
  .probs{padding-inline:46px}
  .prob{flex-basis:100%;padding:20px 20px 22px;min-height:236px}
  .probs-stage{-webkit-mask-image:none;mask-image:none}
  .probs-fwd{left:-2px}
  .probs-back{right:-2px}
  .probs-arrow{width:40px;height:40px}
  .probs-arrow svg{width:18px;height:18px}
  .probs-pips{margin-top:18px}
}
@media (prefers-reduced-motion:reduce){
  .probs-track{transition:none}
  .prob{transition:none}
  .probs-arrow:hover{scale:1}
}

/* ---------- the two problems ---------- */
.duo{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:42px}
.duo > div{background:var(--bg-raised);padding:30px 30px 34px;
  border:1px solid var(--line);border-radius:var(--r-lg)}
.duo h3{font-size:var(--t-lg);margin-bottom:10px}
.duo p{color:var(--text-muted);font-size:var(--t-sm);margin:0}
.duo .num{font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  color:var(--gold);letter-spacing:.14em;display:block;margin-bottom:16px}
@media (max-width:760px){.duo{grid-template-columns:1fr}}

/* ---------- services ---------- */
.svc{display:grid;grid-template-columns:1.35fr 1fr;gap:20px;margin-top:44px}
.svc-lead,.svc-card{
  border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--bg-raised);padding:28px 28px 30px;
  display:flex;flex-direction:column;
}
.svc-lead{
  background:linear-gradient(155deg,var(--pk-800),var(--bg-raised) 58%);
  border-color:var(--pk-700);
  grid-row:span 3;
}
:root[data-theme="light"] .svc-lead{
  background:linear-gradient(155deg,#DCEAEA,var(--n-0) 62%);border-color:#B7CFD1;
}
.svc h3{font-size:var(--t-xl);margin-bottom:8px}
.svc-lead h3{font-size:var(--t-2xl)}
.svc p{color:var(--text-muted);font-size:var(--t-sm)}
.svc ul{list-style:none;margin:18px 0 0;padding:0;display:grid;gap:7px}
.svc li{font-size:var(--t-sm);padding-left:18px;position:relative;color:var(--text-muted)}
.svc li::before{content:"";position:absolute;left:0;top:.72em;width:7px;height:1px;background:var(--brand)}
.svc-foot{margin-top:auto;padding-top:22px}
.svc-link{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);letter-spacing:.1em;
  text-transform:uppercase;text-decoration:none;color:var(--brand);
  display:inline-block;position:relative;
}
.svc-link::after{content:"";position:absolute;left:0;right:0;bottom:-3px;height:1px;
  background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .2s var(--ease-out)}
.svc-lead:hover .svc-link::after,.svc-card:hover .svc-link::after,.svc-link:hover::after{transform:scaleX(1)}

/* The whole card is the link, not just the line of text at the bottom of it.
   A one-line "Explore video editing" is a small target to hit and an easy one
   to miss — the card is four hundred pixels of the same destination, so the
   click is taken anywhere on it. The underlined text stays, because it is
   what tells you the card leads somewhere. */
.svc-lead,.svc-card{position:relative}
.svc-go{
  position:absolute;inset:0;z-index:3;
  border-radius:inherit;
  text-indent:-9999px;overflow:hidden;white-space:nowrap;
}
.svc-lead:hover,.svc-card:hover{cursor:pointer}
.svc-go:focus-visible{outline:2px solid var(--brand);outline-offset:3px}
/* The glow and the card's own content are lifted above the background but
   kept below the stretched link. The link itself has to be left out of that
   rule, or it is given position:relative and stops stretching at all. */
.svc-lead::after,.svc-card::after{z-index:1}
.svc-lead > *:not(.svc-go),
.svc-card > *:not(.svc-go){position:relative;z-index:2}
@media (max-width:860px){.svc{grid-template-columns:1fr}.svc-lead{grid-row:auto}}

/* ---------- work placeholders ---------- */
.work{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:42px}
.slot{
  border:1px dashed var(--line);border-radius:var(--r-lg);
  background:var(--bg-raised);padding:24px;min-height:262px;
  display:flex;flex-direction:column;gap:14px;
}
.slot-no{font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.14em;color:var(--gold)}
.slot-fields{display:grid;gap:9px;margin-top:2px}
.slot-fields div{border-bottom:1px solid var(--line-soft);padding-bottom:8px}
.slot-fields b{display:block;font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);
  letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);font-weight:500}
.slot-fields span{font-size:var(--t-sm);color:var(--text-muted);opacity:.55}
@media (max-width:880px){.work{grid-template-columns:1fr}}

.honest{
  margin-top:30px;border-left:2px solid var(--gold);background:var(--bg-raised);
  border-radius:0 var(--r-sm) var(--r-sm) 0;padding:18px 22px;
  font-size:var(--t-sm);color:var(--text-muted);
}
.honest b{color:var(--text)}

/* ---------- approach ---------- */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin-top:44px;
  border-top:1px solid var(--line)}
.step{padding:26px 22px 26px 0;border-right:1px solid var(--line-soft)}
.step:last-child{border-right:0}
.step b{font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);color:var(--gold);
  letter-spacing:.14em;display:block;margin-bottom:12px}
.step h3{font-size:var(--t-md);margin-bottom:7px}
.step p{font-size:var(--t-sm);color:var(--text-muted);margin:0}
@media (max-width:820px){.steps{grid-template-columns:1fr 1fr}.step{padding-right:20px}
  .step:nth-child(2){border-right:0}}
@media (max-width:520px){.steps{grid-template-columns:1fr}.step{border-right:0;border-bottom:1px solid var(--line-soft)}
  .step:last-child{border-bottom:0}}

/* ---------- about ---------- */
/* Text left, portrait right — the photo fills the space the copy leaves. */
.about{display:grid;grid-template-columns:1.12fr .88fr;gap:52px;align-items:start;margin-top:42px}
.portrait{position:relative;margin:0;max-width:100%}
.portrait::before{
  content:"";position:absolute;inset:22px -20px -22px 20px;
  border-radius:var(--r-lg);
  background:linear-gradient(150deg,var(--pk-500),var(--vi-500) 55%,var(--gd-500));
  opacity:.22;filter:blur(26px);
}
.portrait img{
  position:relative;display:block;width:100%;
  aspect-ratio:4/5;object-fit:cover;object-position:50% 18%;
  border-radius:var(--r-lg);border:1px solid var(--line);
  box-shadow:var(--elev-2);
}
.portrait figcaption{
  position:relative;margin-top:14px;
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);
}
.portrait figcaption b{color:var(--brand);font-weight:500}
.about h2{max-width:none}
.about .lede{margin-top:0}
.signature{
  display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:26px;padding-top:20px;
  border-top:1px solid var(--line);font-family:"JetBrains Mono",monospace;
  font-size:var(--t-xs);letter-spacing:.06em;color:var(--text-muted)
}
.signature b{color:var(--text);font-weight:500}
@media (max-width:860px){
  .about{grid-template-columns:1fr;gap:34px}
  .portrait{order:-1;max-width:340px}
  .portrait::before{inset:16px -12px -16px 12px}
}

/* ---------- blog ---------- */
.cats{display:flex;flex-wrap:wrap;gap:8px;margin-top:34px}
.cat{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);letter-spacing:.06em;
  border:1px solid var(--line);border-radius:999px;padding:7px 14px;
  color:var(--text-muted);text-decoration:none;transition:border-color .2s,color .2s;
}
.cat:hover{border-color:var(--brand);color:var(--text)}

/* ---------- cta band ---------- */
.band{
  background:linear-gradient(120deg,var(--pk-800),var(--pk-950) 55%,#160F3A);
  border-block:1px solid var(--line);
}
:root[data-theme="light"] .band{background:linear-gradient(120deg,#DDEBEB,#F4F7F7 55%,#E8E4F6)}
.band-in{padding-block:clamp(52px,7vw,78px);display:grid;grid-template-columns:1.2fr .8fr;gap:40px;align-items:center}
.band h2{font-size:var(--t-3xl);max-width:16ch}
.band p{color:var(--text-muted);margin-top:14px;max-width:44ch}
.band-actions{display:flex;flex-direction:column;gap:12px;align-items:flex-start}
@media (max-width:820px){.band-in{grid-template-columns:1fr;gap:26px}}

/* ---------- contact ---------- */
.contact{display:grid;grid-template-columns:.9fr 1.1fr;gap:48px;margin-top:42px;align-items:start}
/* Contact CTAs — one button per channel, each in that channel's own colour so
   it is recognised before it is read. Big enough to be a comfortable tap
   target on a phone (48px minimum). */
.channels{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:24px}
.channel{
  --c:var(--brand);
  display:flex;align-items:center;gap:11px;
  min-height:52px;padding:12px 16px;
  border:1px solid color-mix(in srgb,var(--c) 38%,var(--line));
  border-radius:var(--r-md);
  background:color-mix(in srgb,var(--c) 9%,var(--bg-raised));
  text-decoration:none;color:var(--text);
  box-shadow:var(--elev-1);
  transition:transform .22s var(--ease-out),box-shadow .22s var(--ease-out),
             background .22s ease,border-color .22s ease;
}
.channel:hover,.channel:focus-visible{
  transform:translateY(-3px);
  box-shadow:var(--elev-2);
  background:color-mix(in srgb,var(--c) 17%,var(--bg-raised));
  border-color:var(--c);
  color:var(--text);
}
.channel svg{width:20px;height:20px;flex:none;color:var(--c)}
.channel .ch-txt{display:flex;flex-direction:column;min-width:0}
.channel b{font-weight:600;font-size:var(--t-sm);line-height:1.3}
.channel span{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.04em;
  color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
@media (max-width:560px){.channels{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){.channel:hover{transform:none}}
form{display:grid;gap:14px}
.f{display:grid;gap:6px}
.f2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width:620px){.f2{grid-template-columns:1fr}}
label{font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.12em;
  text-transform:uppercase;color:var(--text-muted)}
input,select,textarea{
  width:100%;background:var(--bg-raised);border:1px solid var(--line);
  border-radius:10px;padding:12px 14px;color:var(--text);font:inherit;font-size:var(--t-sm);
}
textarea{min-height:118px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid var(--brand);outline-offset:1px;border-color:transparent}
.hint{font-size:var(--t-xs);color:var(--text-muted);margin:0}
@media (max-width:860px){.contact{grid-template-columns:1fr;gap:30px}}

/* ---------- footer ---------- */
footer{background:var(--bg-sunken);border-top:1px solid var(--line)}
.foot-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:34px;padding-block:52px 34px}
.foot-grid h4{font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.14em;
  text-transform:uppercase;color:var(--text-muted);font-weight:500;margin:0 0 14px;letter-spacing:.14em}
.foot-grid ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.foot-grid a{color:var(--text-muted);text-decoration:none;font-size:var(--t-sm)}
.foot-grid a:hover{color:var(--brand)}
.foot-brand p{color:var(--text-muted);font-size:var(--t-sm);max-width:34ch;margin-top:12px}
.foot-bar{display:flex;flex-wrap:wrap;justify-content:space-between;gap:14px;
  padding-block:20px;border-top:1px solid var(--line);font-size:var(--t-xs);color:var(--text-muted)}
.foot-bar .mono{letter-spacing:.04em}
.foot-toggles{display:flex;gap:8px}
.tbtn{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.08em;
  text-transform:uppercase;background:transparent;color:var(--text-muted);
  border:1px solid var(--line);border-radius:999px;padding:6px 12px;cursor:pointer;
  transition:color .2s,border-color .2s;
}
.tbtn:hover{color:var(--text);border-color:var(--brand)}
.tbtn[aria-pressed="true"]{color:var(--pk-950);background:var(--brand);border-color:var(--brand)}
:root[data-theme="light"] .tbtn[aria-pressed="true"]{color:var(--n-0)}
@media (max-width:820px){.foot-grid{grid-template-columns:1fr 1fr;gap:28px}}
@media (max-width:520px){.foot-grid{grid-template-columns:1fr}}

/* ---------- cursor: the visitor's own arrow, eyes over clickable things --- */
#ceyes{
  position:fixed;left:0;top:0;pointer-events:none;
  will-change:transform;opacity:0;
  z-index:101;width:44px;height:26px;margin:-13px 0 0 -22px;
  /* Fast enough that the eyes feel attached to the pointer rather than
     catching up with it. */
  transition:opacity .09s linear;
  filter:drop-shadow(0 3px 6px rgba(0,0,0,.45));
}

/* peacock dye — colour dropped into a flow field and carried away by it.
   No mix-blend-mode. It used to screen over the page, which looks the same
   on a dark background but makes the compositor read the whole viewport back
   for every frame — measured, it cost a quarter of the frame budget. The dye
   is composited normally inside the canvas now, so it carries its own colour
   and does not need the blend to glow. */
#ctrail{
  position:fixed;inset:0;width:100%;height:100%;
  /* Behind the whole document. A negative z-index on a fixed element paints
     above the root background and below in-flow content, so text, buttons,
     images, cards and the header all sit on top of the smoke and stay exactly
     as readable as they were without it. */
  z-index:-1;pointer-events:none;display:block;
  /* No CSS blur here any more. A filter on a full-viewport element makes the
     browser re-blur the entire screen every single frame, and it was costing
     more than half the frame budget on its own — measured, the page ran at
     19fps with it and 40fps without. The softness now comes from the canvas
     being drawn at roughly half resolution and scaled up, which the browser
     does on the GPU for free, plus sprites that were already edge-fades
     rather than discs. */
  opacity:0;transition:opacity .6s ease;
}
/* 30% lighter, applied once to the whole canvas. Thinning each speck
   instead drains the colour long before it dims the dense spots, because
   those are already far past saturation — this keeps the balance that
   works and simply turns the whole thing down. */
body.cursor-on #ctrail{opacity:.35}
@media (hover:none),(pointer:coarse){#ctrail{display:none!important}}
@media (prefers-reduced-motion:reduce){#ctrail{display:none!important}}
body.cursor-on.cursor-click #ceyes{opacity:1}
/* The arrow is hidden only while the eyes are standing in for it. Everywhere
   else the visitor keeps their own cursor, including the I-beam over text and
   the pointer over a link — which is information, not decoration. */
body.cursor-on.cursor-click,
body.cursor-on.cursor-click a,
body.cursor-on.cursor-click button,
body.cursor-on.cursor-click input,
body.cursor-on.cursor-click select,
body.cursor-on.cursor-click textarea,
body.cursor-on.cursor-click label,
body.cursor-on.cursor-click summary{cursor:none}
@media (hover:none),(pointer:coarse){
  #ceyes{display:none!important}
  body.cursor-on.cursor-click,body.cursor-on.cursor-click a,
  body.cursor-on.cursor-click button{cursor:auto}
}


/* ---------- the logo, always moving ----------
   The mark animates by itself now — it is an animated WebP, the whole reveal
   on a loop. The sheen that used to sweep across the old still logo has gone
   with it: a highlight masked to a fixed silhouette drifts off the artwork
   the moment the artwork starts moving. The two-pixel bob stays, because it
   is the bar the logo sits in that it belongs to, not the logo. */
.brandwrap{position:relative;display:block;flex:none;animation:kks-bob 7s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){
  .brandwrap{animation:none}
}

/* A star at the top of the mark, blinking on and off for good.
   78% / 16% is measured from the mark's own ink box, so it sits among the
   rays above the bulb and stays there at any logo size — the header's 48px
   and the footer's 58px both scale it from the same two numbers. */
.brandwrap::before{
  content:"";position:absolute;left:78%;top:16%;
  height:30%;aspect-ratio:1;translate:-50% -50%;
  pointer-events:none;z-index:2;
  background:radial-gradient(circle at 50% 50%,
    #fff 0%, #FFF3C4 28%, var(--gd-500) 58%, color-mix(in srgb,var(--gd-500) 0%,transparent) 100%);
  clip-path:polygon(50% 0%,58% 42%,100% 50%,58% 58%,50% 100%,42% 58%,0% 50%,42% 42%);
  filter:drop-shadow(0 0 3px color-mix(in srgb,var(--gd-500) 75%,transparent));
  animation:kks-twinkle 2.3s ease-in-out infinite;
}
@keyframes kks-twinkle{
  0%,100%{opacity:0;transform:scale(.35) rotate(0deg)}
  10%{opacity:1;transform:scale(1) rotate(18deg)}
  26%{opacity:.14;transform:scale(.52) rotate(34deg)}
  42%{opacity:.92;transform:scale(.88) rotate(52deg)}
  64%,99%{opacity:0;transform:scale(.35) rotate(74deg)}
}
@media (prefers-reduced-motion:reduce){
  .brandwrap::before{animation:none;opacity:.85;transform:scale(.9)}
}


/* ---------- lighting focus on anything you can click ----------
   A soft light under the pointer, inside the element's own shape. One
   delegated listener in site.js writes --mx / --my; everything else is CSS,
   so an element that never gets hovered costs nothing at all. */
.btn,.nav a,.iconbtn,.themebtn,.tbtn,.cat,.channel,.ptab,.railnav a,.langdock button,
.foot-grid a,.svc-lead,.svc-card,.duo > div,.step{position:relative}
.btn::after,.nav a::after,.iconbtn::after,.themebtn::after,.tbtn::after,.cat::after,
.channel::after,.ptab::after,.railnav a::after,.langdock button::after,
.foot-grid a::after,.svc-lead::after,.svc-card::after,.duo > div::after,
.step::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(11rem circle at var(--mx,50%) var(--my,50%),
    color-mix(in srgb,var(--brand) var(--lit-mix),transparent) 0%,
    transparent 62%);
  mix-blend-mode:var(--lit-blend);
  opacity:0;transition:opacity .26s var(--ease-out);
}
.btn:hover::after,.nav a:hover::after,.iconbtn:hover::after,.themebtn:hover::after,.tbtn:hover::after,
.cat:hover::after,.channel:hover::after,.ptab:hover::after,.railnav a:hover::after,
.langdock button:hover::after,.foot-grid a:hover::after,.svc-lead:hover::after,
.svc-card:hover::after,.duo > div:hover::after,.step:hover::after,
.btn:focus-visible::after,.nav a:focus-visible::after,.cat:focus-visible::after,
.channel:focus-visible::after,.ptab:focus-visible::after{opacity:1}
@media (hover:none),(pointer:coarse){
  .btn::after,.nav a::after,.iconbtn::after,.themebtn::after,.tbtn::after,.cat::after,
  .channel::after,.ptab::after,.railnav a::after,.langdock button::after,
  .foot-grid a::after,.svc-lead::after,.svc-card::after,.duo > div::after,
  .step::after{display:none}
}

/* a channel button lights in its own colour, not the brand's */
.channel::after{
  background:radial-gradient(11rem circle at var(--mx,50%) var(--my,50%),
    color-mix(in srgb,var(--c) var(--lit-mix),transparent) 0%, transparent 62%);
}
.railnav a::after{
  background:radial-gradient(3rem circle at var(--mx,50%) var(--my,50%),
    color-mix(in srgb,var(--c) var(--lit-mix),transparent) 0%, transparent 70%);
}

/* ---------- clickable things answer the pointer ---------- */
.cat{display:inline-block;
  transition:color .2s,border-color .2s,transform .22s var(--ease-out),box-shadow .22s var(--ease-out)}
.cat:hover{transform:translateY(-2px);border-color:var(--brand);box-shadow:var(--elev-1)}
.foot-grid a{display:inline-block;
  transition:color .2s,transform .22s var(--ease-out)}
.foot-grid a:hover{transform:translateX(3px)}
.btn:active,.ptab:active,.channel:active,.cat:active,.iconbtn:active,
.tbtn:active,.nav a:active{transform:translateY(0) scale(.985)}
@media (prefers-reduced-motion:reduce){
  .cat:hover,.foot-grid a:hover,.btn:active,.ptab:active,.channel:active{transform:none}
}


/* ---------- the theme button: symbol and word ---------- */
.themebtn{
  display:inline-flex;align-items:center;gap:7px;flex:none;
  height:38px;padding:0 14px 0 12px;
  border:1px solid var(--line);border-radius:999px;background:transparent;
  color:var(--text-muted);cursor:pointer;
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.1em;
  text-transform:uppercase;
  box-shadow:var(--btn-sh);
  transition:color .2s,border-color .2s,background .22s,
             transform .22s var(--ease-out),box-shadow .22s var(--ease-out);
}
.themebtn svg{flex:none;display:block}
/* The button wears the opposite of the mode you are in — pale on the dark
   site, near-black on the light one. A control that matches its surroundings
   has to be read; one that contradicts them is understood at a glance. */
.themebtn{background:var(--text);color:var(--bg);border-color:transparent}
.themebtn:hover{
  background:var(--brand);color:var(--pk-950);border-color:transparent;
  transform:translateY(-2px);box-shadow:var(--btn-sh-hi);
}
:root[data-theme="light"] .themebtn:hover{color:#fff}
.themebtn .moon,.themebtn .th-d{display:none}
.themebtn .th-l{display:inline;font-style:normal}
:root[data-theme="light"] .themebtn .sun,
:root[data-theme="light"] .themebtn .th-l{display:none}
:root[data-theme="light"] .themebtn .moon{display:block}
:root[data-theme="light"] .themebtn .th-d{display:inline;font-style:normal}
:root[lang="bn"] .themebtn,:root[lang="hi"] .themebtn{
  font-family:inherit;letter-spacing:normal;text-transform:none;font-size:var(--t-xs);
}
@media (max-width:920px){.themebtn{order:2}}
@media (max-width:520px){
  .themebtn{padding:0;width:38px;justify-content:center;gap:0}
  .themebtn .th-txt{display:none}
}

/* ---------- every button sits on a shadow, in both themes ----------
   A black shadow on a near-black page is invisible, which is why dark
   interfaces so often look flat. These are tinted: the resting shadow is
   black for depth plus a one-pixel light rim along the top edge to catch
   the eye, and the hover shadow is the brand colour, so the button reads as
   lit from within rather than merely raised. */
.btn,.cat,.channel,.ptab,.iconbtn,.tbtn,.langdock button,.nav a.btn-1{
  box-shadow:var(--btn-sh);
}
.btn:hover,.cat:hover,.channel:hover,.ptab:hover,.iconbtn:hover,.tbtn:hover,
.langdock button:hover,.nav a.btn-1:hover{
  box-shadow:var(--btn-sh-hi);
}
.btn:active,.cat:active,.channel:active,.ptab:active,.iconbtn:active,
.themebtn:active{box-shadow:var(--btn-sh-in)}

/* ---------- and every button changes colour under the pointer ---------- */
.btn-1:hover{background:var(--pk-300);color:var(--pk-950)}
:root[data-theme="light"] .btn-1:hover{background:var(--pk-700);color:#fff}
.btn-2:hover{
  background:color-mix(in srgb,var(--brand) 14%,transparent);
  border-color:var(--brand);color:var(--brand);
}
.iconbtn:hover{background:color-mix(in srgb,var(--brand) 15%,transparent)}
.cat:hover{background:color-mix(in srgb,var(--brand) 13%,transparent);color:var(--text)}
.ptab:hover{background:color-mix(in srgb,var(--brand) 9%,var(--bg-raised))}
.tbtn:hover{background:color-mix(in srgb,var(--brand) 14%,transparent)}
.langdock button:hover{background:color-mix(in srgb,var(--brand) 16%,transparent)}
.nav a.btn-1:hover{background:var(--pk-300);color:var(--pk-950)}
:root[data-theme="light"] .nav a.btn-1:hover{background:var(--pk-700);color:#fff}
@media (prefers-reduced-motion:reduce){
  .themebtn:hover{transform:none}
}


/* ---------- FAQ ----------
   Built on details/summary, so it opens without JavaScript and the answers
   stay in the page source whether or not they are expanded. The marker is drawn rather than
   inherited, because the browser default differs on every platform. */
.faq{display:grid;gap:10px;margin-top:38px;max-width:76ch}
.qa{
  border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--bg-raised);
  box-shadow:var(--elev-1);
  transition:box-shadow .26s var(--ease-out),border-color .26s ease;
}
.qa:hover{box-shadow:var(--elev-2);border-color:var(--brand-deep)}
.qa[open]{border-color:var(--brand-deep)}
.qa summary{
  display:flex;align-items:flex-start;gap:12px;
  padding:16px 18px;cursor:pointer;list-style:none;
  font-family:"Archivo","Anek Latin",sans-serif;
  font-variation-settings:"wdth" 110;font-weight:600;
  font-size:var(--t-md);letter-spacing:-.015em;color:var(--text);
  transition:color .2s ease;
}
.qa summary::-webkit-details-marker{display:none}
.qa summary::marker{content:""}
.qa summary:hover{color:var(--brand)}
.qa summary::before{
  content:"";flex:none;width:11px;height:11px;margin-top:.42em;
  border-right:2px solid var(--brand);border-bottom:2px solid var(--brand);
  transform:rotate(45deg);transform-origin:60% 60%;
  transition:transform .26s var(--ease-out);
}
.qa[open] summary::before{transform:rotate(225deg)}
.qa-a{padding:0 18px 18px 41px}
.qa-a p{color:var(--text-muted);font-size:var(--t-sm);margin:0}
:root[lang="bn"] .qa summary,:root[lang="hi"] .qa summary{
  font-variation-settings:normal;letter-spacing:0;line-height:1.5;
}
@media (max-width:560px){
  .qa summary{padding:14px 15px;font-size:var(--t-base)}
  .qa-a{padding:0 15px 15px 38px}
}
@media (prefers-reduced-motion:reduce){.qa summary::before{transition:none}}


/* ---------- Gallery ----------
   Two columns that stay two columns: pictures on the left, video on the
   right. They only stack when there is genuinely no room, because the split
   is the point of the page. */
.gal{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:40px;align-items:start}
.gal-col{min-width:0}
.gal-h{
  font-size:var(--t-xl);margin:0 0 4px;
  padding-bottom:14px;border-bottom:1px solid var(--line);
}
.gal-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:22px}
.gal-cell{
  display:flex;flex-direction:column;gap:7px;margin:0;
  text-decoration:none;color:var(--text);
  position:relative;
}
.gal-frame{
  position:relative;display:block;overflow:hidden;
  border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--bg-raised);
  aspect-ratio:4/3;
  box-shadow:var(--elev-1);
  transition:box-shadow .26s var(--ease-out),transform .26s var(--ease-out),border-color .26s ease;
}
.gal-cell:hover .gal-frame{box-shadow:var(--elev-2);transform:translateY(-3px);border-color:var(--brand-deep)}
.gal-frame img,.gal-frame video{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;display:block;
  transition:transform .4s var(--ease-out);
}
.gal-cell:hover .gal-frame img{transform:scale(1.04)}
.gal-cell b{
  font-family:"Archivo","Anek Latin",sans-serif;font-variation-settings:"wdth" 110;
  font-weight:600;font-size:var(--t-sm);letter-spacing:-.01em;line-height:1.35;
  transition:color .22s ease;
}
.gal-cell:hover b{color:var(--brand)}
.gal-cap{font-size:var(--t-xs);color:var(--text-muted);line-height:1.5}
/* a figcaption's children are inline by default, so the title and the caption
   would run together on one line the way they do not in the picture cells */
.gal-cell figcaption{display:flex;flex-direction:column;gap:6px;min-width:0}

/* the video tiles */
.gal-vid .gal-frame video{pointer-events:none}
.gal-play{
  position:absolute;inset:0;width:100%;height:100%;
  display:grid;place-items:center;
  background:color-mix(in srgb,#000 34%,transparent);
  border:0;cursor:pointer;color:#fff;padding:0;
  transition:background .24s ease,opacity .24s ease;
}
.gal-play svg{
  width:20px;height:20px;
  padding:12px;box-sizing:content-box;
  border-radius:50%;
  background:color-mix(in srgb,var(--brand) 88%,#000);
  box-shadow:0 8px 20px -8px rgba(0,0,0,.9);
  transition:transform .24s var(--ease-out),background .24s ease;
}
.gal-play:hover svg{transform:scale(1.09);background:var(--brand)}
.gal-vid.is-playing .gal-play{background:transparent;opacity:0}
.gal-vid.is-playing:hover .gal-play{opacity:1;background:color-mix(in srgb,#000 22%,transparent)}
.gal-vid.is-playing .gal-play svg{
  /* a stop square, drawn by squashing the triangle behind a rounded box */
  background:color-mix(in srgb,#000 62%,transparent);
}
/* how far into the five seconds it is */
.gal-bar{
  position:absolute;left:0;right:0;bottom:0;height:3px;
  background:color-mix(in srgb,#000 45%,transparent);
  opacity:0;transition:opacity .2s ease;
}
.gal-vid.is-playing .gal-bar{opacity:1}
.gal-bar i{
  display:block;height:100%;width:0;
  background:var(--brand);
  transition:width .12s linear;
}
.gal-note,.gal-empty{
  font-size:var(--t-sm);color:var(--text-muted);margin-top:18px;
}
.gal-empty{
  border-left:2px solid var(--gold);background:var(--bg-raised);
  border-radius:0 var(--r-sm) var(--r-sm) 0;padding:16px 18px;margin-top:22px;
}
.gal-empty b{color:var(--text)}

@media (max-width:1000px){.gal{gap:30px}.gal-grid{gap:11px}}
@media (max-width:760px){
  .gal{grid-template-columns:1fr;gap:44px}
  .gal-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:380px){.gal-grid{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){
  .gal-cell:hover .gal-frame,.gal-cell:hover .gal-frame img,.gal-play:hover svg{transform:none}
}


/* ---------- the service pages: a wall of boxes ----------
   The boxes you have not filled yet are part of the design rather than a gap
   in it: dashed, numbered, and saying what goes in them. A page that is short
   because the work is not up yet should look like a page waiting for work,
   not like a page that is broken. */
.wall-h{font-size:var(--t-3xl);margin:0 0 14px;max-width:18ch}
.wall-note{
  margin-top:18px;font-size:var(--t-sm);color:var(--text-muted);
  border-left:2px solid var(--gold);background:var(--bg-raised);
  border-radius:0 var(--r-sm) var(--r-sm) 0;padding:13px 17px;
}
.wall-note b{color:var(--text);font-weight:600}

.wall{
  display:grid;grid-template-columns:repeat(5,1fr);gap:16px;margin-top:38px;
}
@media (max-width:1100px){.wall{grid-template-columns:repeat(4,1fr)}}
@media (max-width:860px){.wall{grid-template-columns:repeat(3,1fr)}}
@media (max-width:620px){.wall{grid-template-columns:repeat(2,1fr)}}

.wall-cell{
  display:flex;flex-direction:column;gap:8px;margin:0;
  text-decoration:none;color:var(--text);position:relative;
}
.wall-frame{
  position:relative;display:block;overflow:hidden;
  border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--bg-raised);aspect-ratio:4/3;
  box-shadow:var(--elev-1);
  transition:box-shadow .28s var(--ease-out),transform .34s var(--ease-out),border-color .28s ease;
}
.wall-cell.is-empty .wall-frame{
  border-style:dashed;background:transparent;box-shadow:none;
}
.wall-frame img,.wall-frame video{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;display:block;
  transition:transform .45s var(--ease-out);
}
.wall-slot{
  position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:7px;color:var(--text-muted);
  opacity:.45;transition:opacity .28s ease,color .28s ease;
}
.wall-slot svg{width:26px;height:26px}
.wall-slot b{font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.16em}
.wall-cell:hover .wall-slot{opacity:.9;color:var(--brand)}
.wall-cell.is-empty:hover .wall-frame{border-color:var(--brand-deep)}

.wall-cell b{
  font-family:"Archivo","Anek Latin",sans-serif;font-variation-settings:"wdth" 110;
  font-weight:600;font-size:var(--t-sm);letter-spacing:-.01em;line-height:1.35;
  transition:color .22s ease;
}
.wall-cell b.wall-empty{color:var(--text-muted);font-weight:500}
.wall-cap{font-size:var(--t-xs);color:var(--text-muted);line-height:1.5}
.wall-cell figcaption,.wall-txt{display:flex;flex-direction:column;gap:5px;min-width:0}
.wall-cell:hover b:not(.wall-empty){color:var(--brand)}
.wall-missing{
  position:absolute;left:8px;bottom:8px;right:8px;
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.08em;
  background:color-mix(in srgb,#000 62%,transparent);color:#fff;
  padding:5px 8px;border-radius:999px;text-align:center;
}

/* Video Editing: the pointer is the play button. No click, no controls —
   arrive and it runs, leave and it goes back to the first frame. */
.wall-vid .wall-frame::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:color-mix(in srgb,#000 22%,transparent);
  opacity:0;transition:opacity .3s ease;
}
.wall-vid.is-playing .wall-frame{border-color:var(--brand)}
.wall-bar{
  position:absolute;left:0;right:0;bottom:0;height:3px;z-index:2;
  background:color-mix(in srgb,#000 45%,transparent);
  opacity:0;transition:opacity .2s ease;
}
.wall-vid.is-playing .wall-bar{opacity:1}
.wall-bar i{display:block;height:100%;width:0;background:var(--brand);transition:width .12s linear}

/* Graphic Design: the picture lifts off the page under the pointer. */
.wall-lift .wall-cell:hover .wall-frame{
  transform:translateY(-10px) scale(1.015);
  box-shadow:var(--elev-2);
  border-color:var(--brand-deep);
}
.wall-lift .wall-cell:hover .wall-frame img{transform:scale(1.05)}
@media (prefers-reduced-motion:reduce){
  .wall-lift .wall-cell:hover .wall-frame,
  .wall-lift .wall-cell:hover .wall-frame img{transform:none}
}

/* ---------- Social Media Promotion: six buttons ---------- */
.socgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:38px}
@media (max-width:900px){.socgrid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:540px){.socgrid{grid-template-columns:1fr}}
.socbtn{
  --c:var(--brand);
  display:flex;align-items:center;gap:14px;
  min-height:78px;padding:16px 20px;
  border:1px solid color-mix(in srgb,var(--c) 38%,var(--line));
  border-radius:var(--r-md);
  background:color-mix(in srgb,var(--c) 9%,var(--bg-raised));
  text-decoration:none;color:var(--text);
  box-shadow:var(--elev-1);
  transition:transform .22s var(--ease-out),box-shadow .22s var(--ease-out),
             background .22s ease,border-color .22s ease;
}
.socbtn .soc-ico{display:grid;place-items:center;width:34px;height:34px;flex:none;color:var(--c)}
.socbtn svg{width:28px;height:28px;display:block}
.soc-txt{display:flex;flex-direction:column;min-width:0}
.soc-txt b{font-weight:600;font-size:var(--t-md);line-height:1.3}
.soc-txt span{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.04em;
  color:var(--text-muted);
}
a.socbtn:hover,a.socbtn:focus-visible{
  transform:translateY(-4px);box-shadow:var(--elev-2);
  background:color-mix(in srgb,var(--c) 18%,var(--bg-raised));
  border-color:var(--c);color:var(--text);
}
/* a platform with no link yet is visibly not a link */
.socbtn.is-waiting{
  border-style:dashed;background:transparent;box-shadow:none;opacity:.6;cursor:default;
}
.socbtn.is-waiting .soc-ico{color:var(--text-muted)}
@media (prefers-reduced-motion:reduce){a.socbtn:hover{transform:none}}

/* ---------- SEO & Local Work: twelve cards ---------- */
.seogrid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:38px}
@media (max-width:980px){.seogrid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:620px){.seogrid{grid-template-columns:1fr}}
.seocard{
  border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--bg-raised);padding:22px 22px 24px;
  box-shadow:var(--elev-1);
  transition:box-shadow .28s var(--ease-out),transform .28s var(--ease-out),border-color .28s ease;
}
.seocard:hover{box-shadow:var(--elev-2);transform:translateY(-4px);border-color:var(--brand-deep)}
.seocard i{
  font-style:normal;font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);
  letter-spacing:.16em;color:var(--gold);display:block;margin-bottom:12px;
}
.seocard h2{font-size:var(--t-md);margin-bottom:8px;transition:color .22s ease}
.seocard:hover h2{color:var(--brand)}
.seocard p{font-size:var(--t-sm);color:var(--text-muted);margin:0;line-height:1.6}
@media (prefers-reduced-motion:reduce){.seocard:hover{transform:none}}

/* ---------- the two buttons that follow you down the page ----------
   Call above Chat, stacked at the bottom right. They step out of the way
   while the contact section is on screen, because offering a shortcut to
   somewhere you are already standing is only clutter. The language buttons
   have moved to the left-hand corner so the two are never fighting over the
   same thumb. */
.floatcta{
  position:fixed;right:18px;z-index:79;
  bottom:calc(18px + env(safe-area-inset-bottom,0px));
  display:flex;flex-direction:column;align-items:flex-end;gap:10px;
  transition:opacity .3s ease,transform .3s var(--ease-out);
}
.fcta{
  position:relative;
  display:grid;place-items:center;
  width:58px;height:58px;border-radius:999px;
  text-decoration:none;border:1px solid transparent;
  box-shadow:0 16px 32px -14px rgba(0,0,0,.9), 0 4px 12px -6px rgba(0,0,0,.7);
  transition:transform .26s var(--ease-out),box-shadow .26s var(--ease-out),
             background .22s ease,color .22s ease;
}
.fcta svg{width:27px;height:27px;display:block}
/* Only the marks show. The words are still in the markup for a screen
   reader, and they slide out of the button when the pointer arrives —
   an icon on its own is quick to recognise but slow to learn, and this
   way it teaches itself the first time anybody hovers it. */
.fcta .fcta-ico{display:grid;place-items:center;width:100%;height:100%}
.fcta-txt{
  position:absolute;right:calc(100% + 10px);top:50%;
  transform:translateY(-50%) translateX(8px);
  font-family:"Anek Latin",sans-serif;font-weight:700;font-size:var(--t-sm);
  white-space:nowrap;padding:8px 14px;border-radius:999px;
  background:var(--bg-raised);color:var(--text);
  border:1px solid var(--line);box-shadow:var(--elev-1);
  opacity:0;pointer-events:none;
  transition:opacity .2s ease,transform .24s var(--ease-out);
}
.fcta:hover .fcta-txt,.fcta:focus-visible .fcta-txt{
  opacity:1;transform:translateY(-50%) translateX(0);
}
/* Call is the green every phone uses for a call button, Chat is WhatsApp's
   own — both recognised before either is read. */
.fcta-call{background:var(--em-500);color:#04131A}
.fcta-chat{background:#25D366;color:#04131A}
:root[data-theme="light"] .fcta-call,
:root[data-theme="light"] .fcta-chat{color:#06210F}
:root[data-theme="light"] .floatcta .fcta{
  box-shadow:0 16px 32px -14px rgba(10,74,85,.5), 0 4px 12px -6px rgba(10,74,85,.32);
}
.fcta:hover,.fcta:focus-visible{
  transform:translateY(-3px);
  box-shadow:0 22px 40px -16px color-mix(in srgb,currentColor 25%,transparent),
             0 6px 16px -8px rgba(0,0,0,.8);
}
.fcta-call:hover{background:#2ABE83}
.fcta-chat:hover{background:#41E27E}
.fcta:active{transform:translateY(0) scale(.96)}

.floatcta[data-hide="true"]{
  opacity:0;pointer-events:none;transform:translateY(12px) scale(.96);
}
@media (max-width:520px){
  .floatcta{right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));gap:10px}
  /* 52px still clears the 44px minimum a thumb needs */
  .fcta{width:52px;height:52px}
  .fcta svg{width:24px;height:24px}
  /* there is no hover on a phone, so the label would never appear */
  .fcta-txt{display:none}
}
@media (prefers-reduced-motion:reduce){.fcta:hover{transform:none}}

/* the language buttons now live in the left-hand corner */
.langdock{right:auto;left:18px}
.langnote{
  right:auto;left:18px;
  bottom:calc(74px + env(safe-area-inset-bottom,0px));
}
@media (max-width:520px){
  .langdock{right:auto;left:12px}
  .langnote{right:auto;left:12px;bottom:calc(66px + env(safe-area-inset-bottom,0px))}
}

/* ---------- back to the homepage, from a page that has no rail ---------- */
.backhome{
  display:inline-flex;align-items:center;gap:9px;
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.1em;text-transform:uppercase;text-decoration:none;
  color:var(--text-muted);
  border:1px solid var(--line);border-radius:999px;padding:9px 16px 9px 12px;
  background:transparent;box-shadow:var(--btn-sh);
  margin-bottom:26px;
  transition:color .2s,border-color .2s,background .22s,
             transform .22s var(--ease-out),box-shadow .22s var(--ease-out);
}
.backhome svg{width:14px;height:14px;flex:none;transition:transform .22s var(--ease-out)}
.backhome:hover{
  color:var(--text);border-color:var(--brand);
  background:color-mix(in srgb,var(--brand) 14%,transparent);
  transform:translateY(-2px);box-shadow:var(--btn-sh-hi);
}
.backhome:hover svg{transform:translateX(-3px)}
:root[lang="bn"] .backhome,:root[lang="hi"] .backhome{
  font-family:inherit;letter-spacing:normal;text-transform:none;font-size:var(--t-sm);
}
@media (prefers-reduced-motion:reduce){.backhome:hover,.backhome:hover svg{transform:none}}

:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:4px}
.skip{position:absolute;left:-9999px;top:0;background:var(--brand);color:var(--pk-950);
  padding:10px 16px;border-radius:0 0 8px 0;z-index:200;font-weight:600}
.skip:focus{left:0}

@supports (animation-timeline: view()){
  @media (prefers-reduced-motion:no-preference){
    .sec > .wrap > *, .band-in > *{
      animation:reveal linear both;animation-timeline:view();
      animation-range:entry 0% entry 40%;
    }
  }
}
@keyframes reveal{from{opacity:.3;transform:translateY(13px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* =============================================================
   WordPress-specific glue
   ============================================================= */
.wp-site-blocks{}
.alignwide{width:min(1280px,calc(100% - 48px));margin-inline:auto}
.alignfull{width:100%;margin-inline:0}
.screen-reader-text{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}
.admin-bar .hdr{top:calc(env(safe-area-inset-top,0px) + 46px)}
@media screen and (min-width:783px){.admin-bar .hdr{top:calc(env(safe-area-inset-top,0px) + 46px)}}

/* editor + post content */
.entry-content{max-width:68ch;margin-inline:auto}
.entry-content > *{margin-block:0 1.15em}
.entry-content h2{font-size:var(--t-xl);margin-block:1.8em .5em}
.entry-content h3{font-size:var(--t-lg);margin-block:1.5em .4em}
.entry-content a{text-decoration:underline;text-underline-offset:3px}
.entry-content blockquote{
  border-left:2px solid var(--gold);padding-left:20px;margin-inline:0;
  color:var(--text-muted);font-style:normal;
}
.entry-content img,.entry-content figure img{border-radius:var(--r-md)}
.entry-content code{
  font-family:"JetBrains Mono",monospace;font-size:.88em;
  background:var(--bg-raised);border:1px solid var(--line);
  border-radius:5px;padding:2px 6px;
}
.entry-content pre{
  background:var(--bg-sunken);border:1px solid var(--line);
  border-radius:var(--r-md);padding:18px 20px;overflow-x:auto;
}
.entry-content ul,.entry-content ol{padding-left:1.2em}
.entry-content li{margin-block:.35em}

/* post + archive cards */
.post-card{
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-raised);
  padding:24px;box-shadow:var(--elev-1);
  transition:box-shadow .28s var(--ease-out),transform .28s var(--ease-out);
}
.post-card:hover{box-shadow:var(--elev-2);transform:translateY(-4px)}
.post-card h2,.post-card h3{font-size:var(--t-lg);margin-bottom:8px}
.post-card .meta{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.08em;color:var(--text-muted);text-transform:uppercase;
}
.post-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:20px;margin-top:40px}

/* single post header */
.entry-header{padding-block:clamp(128px,15vw,180px) 0;text-align:left}
.entry-header h1{font-size:var(--t-3xl);max-width:20ch}
.entry-meta{
  display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:22px;
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);
}
.entry-meta span::before{content:"— ";color:var(--brand)}

/* breadcrumbs */
.breadcrumbs{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.06em;color:var(--text-muted);margin-bottom:18px;
}
.breadcrumbs a{text-decoration:none}
.breadcrumbs span[aria-hidden]{opacity:.5;padding-inline:6px}

/* pagination */
.pagination{display:flex;flex-wrap:wrap;gap:8px;margin-top:44px;justify-content:center}
.pagination .page-numbers{
  display:inline-grid;place-items:center;min-width:40px;height:40px;padding-inline:12px;
  border:1px solid var(--line);border-radius:999px;text-decoration:none;
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);color:var(--text-muted);
}
.pagination .page-numbers:hover{border-color:var(--brand)}
.pagination .page-numbers.current{background:var(--brand-deep);color:#fff;border-color:var(--brand-deep)}

/* 404 + search empty state */
.state{padding-block:clamp(140px,18vw,200px) clamp(70px,9vw,110px);text-align:left}
.state h1{font-size:var(--t-3xl)}
.state p{margin-top:18px}

/* comments */
.comments{margin-top:56px;padding-top:36px;border-top:1px solid var(--line)}
.comments h2{font-size:var(--t-xl);margin-bottom:22px}
.comment-list{list-style:none;margin:0;padding:0;display:grid;gap:18px}
.comment-list li{
  border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--bg-raised);padding:18px 20px;
}
.comment-form{display:grid;gap:14px;margin-top:28px}
.comment-form input[type=submit]{
  justify-self:start;background:var(--brand);color:var(--pk-950);
  border:0;border-radius:999px;padding:13px 24px;font-weight:600;cursor:pointer;width:auto;
}

/* work archive filters */
.work-filters{display:flex;flex-wrap:wrap;gap:8px;margin-top:30px}

/* ---- core-block wrappers that need to inherit our card styles ---- */
.svc > .wp-block-group.svc-lead,
.svc > .wp-block-group.svc-card{display:flex;flex-direction:column}
.svc-lead > .wp-block-list,.svc-card > .wp-block-list{list-style:none;margin:18px 0 0;padding:0;display:grid;gap:7px}
.svc-lead > .wp-block-list li,.svc-card > .wp-block-list li{
  font-size:var(--t-sm);padding-left:18px;position:relative;color:var(--text-muted);margin:0;
}
.svc-lead > .wp-block-list li::before,.svc-card > .wp-block-list li::before{
  content:"";position:absolute;left:0;top:.72em;width:7px;height:1px;background:var(--brand);
}
.svc-foot{margin-top:auto;padding-top:22px;margin-bottom:0}

.duo > .wp-block-group{background:var(--bg-raised);padding:30px 30px 34px;
  border:1px solid var(--line);border-radius:var(--r-lg)}
.duo .num{font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  color:var(--gold);letter-spacing:.14em;margin-bottom:16px}

/* buttons rendered by core/button keep our pill shapes */
.wp-block-button.btn-1 .wp-block-button__link{background:var(--brand);color:var(--pk-950);border-radius:999px;padding:13px 24px;font-weight:600;font-size:var(--t-sm)}
:root[data-theme="light"] .wp-block-button.btn-1 .wp-block-button__link{color:#fff}
.wp-block-button.btn-2 .wp-block-button__link{background:transparent;border:1px solid var(--line);color:var(--text);border-radius:999px;padding:13px 24px;font-weight:600;font-size:var(--t-sm)}
.wp-block-button.btn-2 .wp-block-button__link:hover{border-color:var(--brand);color:var(--brand)}
.wp-block-buttons{gap:12px}

/* core/image rendered as the About portrait */
.about > .wp-block-image.portrait{margin:0}
.about .wp-block-image.portrait .wp-element-caption{
  position:relative;margin-top:14px;
  font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);text-align:left;
}
.about .wp-block-image.portrait .wp-element-caption b{color:var(--brand);font-weight:500}

/* core/categories rendered as our chip row */
.wp-block-categories.cats{list-style:none;margin:34px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.wp-block-categories.cats li{margin:0}
.wp-block-categories.cats a{
  display:inline-block;font-family:"JetBrains Mono",monospace;font-size:var(--t-xs);
  letter-spacing:.06em;border:1px solid var(--line);border-radius:999px;padding:7px 14px;
  color:var(--text-muted);text-decoration:none;transition:border-color .2s,color .2s;
}
.wp-block-categories.cats a:hover{border-color:var(--brand);color:var(--brand)}

/* the header's custom logo image */
.logo .custom-logo{max-height:30px;width:auto}

/* menus rendered by wp_nav_menu */
.nav ul{display:flex;gap:4px;list-style:none;margin:0;padding:0}
.foot-grid ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.foot-grid li{margin:0}

/* search + form fields from core blocks */
.wp-block-search__input{background:var(--bg-raised);border:1px solid var(--line);
  border-radius:10px;padding:12px 14px;color:var(--text);font:inherit}
.wp-block-search__button{background:var(--brand);color:var(--pk-950);border:0;
  border-radius:999px;padding:12px 22px;font-weight:600;cursor:pointer}

/* the language dock renders as links in WordPress, buttons in the design demo */
.langdock a{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.06em;
  border-radius:999px;padding:8px 13px;color:var(--text-muted);text-decoration:none;
  transition:background .2s ease,color .2s ease;
}
.langdock a:hover{color:var(--text)}
.langdock a[aria-pressed="true"]{background:var(--brand-deep);color:#fff}

/* language switcher waiting for its URLs — admins only, never visitors */
.langdock.is-setup{outline:1px dashed var(--gold);outline-offset:3px}
.langdock a.todo{opacity:.45}
.langdock a.todo:hover{opacity:.8}

/* a language that has no URL yet: present, obviously inactive, not clickable */
.langdock .todo{
  font-family:"JetBrains Mono",monospace;font-size:var(--t-micro);letter-spacing:.06em;
  border-radius:999px;padding:8px 13px;color:var(--text-muted);
  opacity:.42;cursor:default;user-select:none;
}
.langdock.is-setup{outline:1px dashed color-mix(in srgb,var(--gold) 55%,transparent);outline-offset:3px}
.langdock .bn,.langdock span.bn{font-family:"Anek Bangla","Hind Siliguri",sans-serif}
.langdock .hi,.langdock span.hi{font-family:"Anek Devanagari","Noto Sans Devanagari",sans-serif}
@media (max-width:520px){.langdock .todo{padding:7px 10px;font-size:var(--t-micro)}}

/* ---- contact buttons that are not filled in yet (visible to admins only) ---- */
.channel.is-empty{
  border-style:dashed;
  background:color-mix(in srgb,var(--c) 5%,var(--bg-raised));
  box-shadow:none;
}
.channel.is-empty:hover{box-shadow:var(--elev-1)}
.channel.is-empty .ch-txt span{color:var(--gold)}

/* ---- built-in contact form ---- */
.kks-hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-note{
  border-radius:var(--r-md);padding:13px 17px;margin:0 0 18px;
  font-size:var(--t-sm);border:1px solid var(--line);background:var(--bg-raised);
}
.form-note.is-good{border-color:color-mix(in srgb,var(--em-500) 55%,var(--line));
  background:color-mix(in srgb,var(--em-500) 12%,var(--bg-raised));color:var(--text)}
.form-note.is-bad{border-color:color-mix(in srgb,var(--gd-500) 55%,var(--line));
  background:color-mix(in srgb,var(--gd-500) 12%,var(--bg-raised));color:var(--text)}
.form .hint{margin-top:2px}


/* ---------- anything a finger has to hit ----------
   A pointer can land on a nine-pixel dot. A thumb cannot. On a touch screen
   every control here is given at least the 44 pixels the platform guidelines
   ask for — mostly as padding or an invisible pad around it, so nothing
   changes visually and everything gets easier to hit. */
@media (hover:none),(pointer:coarse){
  .langdock button{min-height:44px;padding:11px 15px}
  .rail-cap{width:44px!important;height:44px!important}
  .railnav a{width:40px!important;height:40px!important}
  .tbtn{min-height:42px;padding:11px 16px}
  .foot-grid a{padding-block:9px}
  .foot-grid ul{gap:2px}
  .svc-link{padding-block:10px}
  .cat{padding:11px 16px}

  /* the carousel pips keep their size but grow an invisible pad */
  .probs-pip{position:relative}
  .probs-pip::before{
    content:"";position:absolute;left:50%;top:50%;
    width:34px;height:40px;transform:translate(-50%,-50%);
  }
  .probs-pips{gap:10px}

  .logo{min-height:44px;align-items:center}
  .gal-play{min-height:44px}
  .backhome{padding:12px 18px 12px 14px}
  .probs-arrow{width:46px!important;height:46px!important}
}

/* The same on a narrow window even with a mouse, because a phone-sized
   layout on a laptop is nearly always a phone being emulated. */
@media (max-width:560px){
  .langdock button{min-height:44px}
  .foot-grid a{padding-block:8px}
}
