/* ============================================================
   isarar.com
   light + dark, system default with manual override
   ============================================================ */

:root{
  --paper:#f8f6f3;
  --raise:#fffefc;
  --ink:#0b0c0e;
  --ink-2:#3e434b;
  --ink-3:#767c88;
  --line:#e0dcd6;
  --zap:#2a2fff;
  --zap-soft:#eceeff;
  --lime:#c6f24e;
  --shadow:0 1px 2px rgba(16,18,22,.05),0 14px 34px -18px rgba(16,18,22,.18);
  --ease:cubic-bezier(.19,1,.22,1);
  --pad:clamp(1.15rem,4.5vw,3.2rem);
  --col:min(74rem,100%);
}

@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --paper:#0a0b0d; --raise:#111318; --ink:#f4f3f1; --ink-2:#b5bac4;
    --ink-3:#787f8c; --line:#1f2229; --zap:#8f93ff; --zap-soft:#151834;
    --shadow:0 1px 2px rgba(0,0,0,.5),0 14px 34px -18px rgba(0,0,0,.8);
  }
}
:root[data-theme="dark"]{
  --paper:#0a0b0d; --raise:#111318; --ink:#f4f3f1; --ink-2:#b5bac4;
  --ink-3:#787f8c; --line:#1f2229; --zap:#8f93ff; --zap-soft:#151834;
  --shadow:0 1px 2px rgba(0,0,0,.5),0 14px 34px -18px rgba(0,0,0,.8);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}

body{
  margin:0;background:var(--paper);color:var(--ink);
  font:400 17px/1.62 ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
  transition:background .35s var(--ease),color .35s var(--ease);
}
::selection{background:var(--lime);color:#0b0c0e}
img{max-width:100%;height:auto}

#bar{position:fixed;top:0;left:0;height:2px;width:0;background:var(--zap);z-index:90;transition:width .1s linear}
#dot{
  position:fixed;top:0;left:0;width:9px;height:9px;border-radius:50%;
  background:var(--zap);pointer-events:none;z-index:95;transform:translate(-50%,-50%);
  transition:width .28s var(--ease),height .28s var(--ease),background .28s var(--ease);
  mix-blend-mode:difference;
}
#dot.big{width:50px;height:50px;background:var(--lime)}
@media (hover:none),(prefers-reduced-motion:reduce){#dot{display:none}}

.shell{width:var(--col);margin:0 auto;padding:0 var(--pad)}
.skip{position:absolute;left:-9999px;top:.5rem;z-index:99;background:var(--zap);
  color:#fff;padding:.7rem 1.1rem;border-radius:4px;text-decoration:none;font-weight:600}
.skip:focus{left:.75rem}
a{color:inherit}
a:focus-visible,button:focus-visible{outline:3px solid var(--zap);outline-offset:4px}

/* ---------- top ---------- */
.top{position:fixed;top:0;left:0;right:0;z-index:80;padding:.95rem 0;
  background:color-mix(in srgb,var(--paper) 82%,transparent);
  backdrop-filter:saturate(160%) blur(10px);
  border-bottom:1px solid transparent;transition:border-color .3s}
.top.stuck{border-bottom-color:var(--line)}
.top .shell{display:flex;align-items:center;gap:1.1rem}
.top .who{font-weight:700;letter-spacing:-.02em;text-decoration:none;font-size:.96rem;margin-right:auto}
.top nav{display:flex;gap:1.25rem}
.top nav a{text-decoration:none;font-size:.79rem;font-weight:650;text-transform:uppercase;
  letter-spacing:.09em;color:var(--ink-3);position:relative;white-space:nowrap}
.top nav a::after{content:"";position:absolute;left:0;bottom:-4px;width:100%;height:2px;
  background:var(--ink);transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease)}
.top nav a:hover{color:var(--ink)}
.top nav a:hover::after{transform:scaleX(1)}

#theme{
  flex:0 0 auto;width:34px;height:34px;border-radius:50%;
  border:1px solid var(--line);background:var(--raise);color:var(--ink);
  cursor:pointer;display:grid;place-items:center;padding:0;
  transition:transform .3s var(--ease),border-color .3s}
#theme:hover{transform:rotate(20deg) scale(1.06);border-color:var(--zap)}
#theme svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}
#theme .moon{display:none}
:root[data-theme="dark"] #theme .sun{display:none}
:root[data-theme="dark"] #theme .moon{display:block}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) #theme .sun{display:none}
  :root:not([data-theme="light"]) #theme .moon{display:block}
}
@media (max-width:760px){
  .top nav{gap:.85rem}
  .top nav a{font-size:.72rem;letter-spacing:.06em}
  .top nav a[data-min]{display:none}
}

/* ---------- hero ---------- */
.hero{padding:7.5rem 0 2.5rem}
.hero-grid{display:grid;grid-template-columns:1.35fr .65fr;gap:clamp(1.5rem,4vw,3.5rem);align-items:center}
@media (max-width:860px){
  .hero{padding:6.5rem 0 2rem}
  .hero-grid{grid-template-columns:1fr;gap:2rem}
  .portrait{order:-1;max-width:230px}
}

.tagline{display:inline-flex;align-items:center;gap:.55rem;font-size:.74rem;font-weight:700;
  text-transform:uppercase;letter-spacing:.13em;color:var(--ink-3);margin:0 0 1.6rem}
.tagline .blip{width:7px;height:7px;border-radius:50%;background:var(--lime);animation:blip 2.4s infinite}
@keyframes blip{0%{box-shadow:0 0 0 0 rgba(198,242,78,.9)}70%{box-shadow:0 0 0 12px rgba(198,242,78,0)}100%{box-shadow:0 0 0 0 rgba(198,242,78,0)}}

h1.big{font-size:clamp(2.3rem,6.6vw,4.6rem);line-height:.98;letter-spacing:-.042em;
  font-weight:800;margin:0 0 1.5rem}
.rl{display:inline-block;overflow:hidden;vertical-align:top}
.rl > span{display:inline-block;transform:translateY(105%)}
@media (prefers-reduced-motion:reduce){.rl > span{transform:none}}

.hero-said{font-size:clamp(1rem,1.9vw,1.2rem);line-height:1.58;color:var(--ink-2);
  max-width:46ch;margin:0 0 2rem}
.hero-said b{color:var(--ink);font-weight:650}

/* portrait: photo is on white, so keep its plate light in both themes */
.portrait{
  position:relative;border-radius:18px;overflow:hidden;background:#fff;
  box-shadow:var(--shadow);border:1px solid var(--line);
  aspect-ratio:1/1;width:100%;
}
.portrait img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform 1.1s var(--ease)}
.portrait:hover img{transform:scale(1.035)}
.portrait::after{
  content:"";position:absolute;inset:auto 0 0 0;height:36%;
  background:linear-gradient(to top,rgba(10,11,13,.10),transparent);pointer-events:none}

.hero-row{display:flex;align-items:center;gap:1.3rem;flex-wrap:wrap}
.cta{display:inline-flex;align-items:center;gap:.6rem;background:var(--ink);color:var(--paper);
  text-decoration:none;font-weight:650;font-size:.93rem;padding:.8rem 1.4rem;border-radius:99px;
  transition:transform .35s var(--ease)}
.cta:hover{transform:translateY(-3px)}
.cta .go{transition:transform .35s var(--ease)}
.cta:hover .go{transform:translateX(4px)}
.plain-links{display:flex;gap:1rem;flex-wrap:wrap;list-style:none;margin:0;padding:0}
.plain-links a{text-decoration:none;font-size:.88rem;font-weight:600;color:var(--ink-3);
  border-bottom:1.5px solid transparent;transition:color .3s,border-color .3s}
.plain-links a:hover{color:var(--ink);border-bottom-color:var(--zap)}

/* ---------- marquee ---------- */
.strip{border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  padding:.95rem 0;margin:3.5rem 0 0;overflow:hidden;background:var(--raise)}
.track{display:flex;width:max-content}
@media (prefers-reduced-motion:no-preference){
  .track{animation:roll 36s linear infinite}
  .strip:hover .track{animation-play-state:paused}
}
@keyframes roll{to{transform:translateX(-50%)}}
.track span{display:inline-flex;align-items:center;gap:1.5rem;padding:0 1.5rem;white-space:nowrap;
  font-size:.82rem;font-weight:700;text-transform:uppercase;letter-spacing:.11em;color:var(--ink-2)}
.track span::after{content:"";width:5px;height:5px;border-radius:50%;background:var(--zap)}

/* ---------- numbers ---------- */
.nums{display:grid;grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:1.8rem 1.4rem;padding:3.8rem 0}
.nums div{border-top:2px solid var(--ink);padding-top:.85rem}
.nums .k{font-size:clamp(1.9rem,4.6vw,3rem);font-weight:800;letter-spacing:-.04em;line-height:1;display:block}
.nums .v{font-size:.75rem;font-weight:650;text-transform:uppercase;letter-spacing:.1em;
  color:var(--ink-3);margin-top:.45rem;display:block}

/* ---------- bands ---------- */
.band{padding:4.5rem 0}
.band-head{margin:0 0 2.6rem}
.kicker{font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.14em;color:var(--ink-3);margin:0}
h2.mid{font-size:clamp(1.7rem,4.2vw,2.9rem);font-weight:800;letter-spacing:-.035em;
  line-height:1.03;margin:.5rem 0 0;max-width:26ch}

/* ---------- job ---------- */
.job{display:grid;grid-template-columns:4rem 1fr;gap:0 1.4rem;padding:2.6rem 0;border-top:1px solid var(--line)}
.job:last-of-type{border-bottom:1px solid var(--line)}
@media (max-width:620px){
  .job{grid-template-columns:1fr}
  .idx{margin-bottom:.5rem}
}
.idx{font-size:.88rem;font-weight:800;color:var(--ink-3);padding-top:.4rem}
.job h3{font-size:clamp(1.35rem,3.1vw,1.95rem);font-weight:750;letter-spacing:-.028em;
  line-height:1.06;margin:0 0 .45rem}
.job h3 a{text-decoration:none;background:linear-gradient(var(--zap),var(--zap));
  background-size:0% 2px;background-repeat:no-repeat;background-position:0 100%;
  transition:background-size .45s var(--ease)}
.job h3 a:hover{background-size:100% 2px;color:var(--zap)}
.role{font-size:.81rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;
  color:var(--zap);margin:0 0 .95rem}
.job p{margin:0 0 1rem;color:var(--ink-2);max-width:64ch}
.job p:last-of-type{margin-bottom:0}
.job b{color:var(--ink);font-weight:650}
.chips{display:flex;flex-wrap:wrap;gap:.38rem;list-style:none;margin:1.2rem 0 0;padding:0}
.chips li{font-size:.73rem;font-weight:600;color:var(--ink-3);border:1px solid var(--line);
  border-radius:99px;padding:.22rem .66rem}
.flag{display:inline-block;font-size:.66rem;font-weight:800;text-transform:uppercase;
  letter-spacing:.08em;padding:.2rem .48rem;border-radius:3px;vertical-align:3px;margin-left:.45rem}
.flag.on{background:var(--lime);color:#0b0c0e}
.flag.trial{background:var(--zap);color:#fff}
.flag.shut{background:var(--line);color:var(--ink-2)}
.flag.soon{background:transparent;color:var(--ink-3);border:1px solid var(--line)}

/* ---------- figures ---------- */
.fig{margin:1.5rem 0 .4rem;border:1px solid var(--line);border-radius:14px;
  background:var(--raise);padding:1.1rem 1rem .9rem;overflow:hidden}
.fig svg{display:block;width:100%;height:auto;overflow:visible}
.fig figcaption{margin-top:.8rem;font-size:.82rem;color:var(--ink-3);line-height:1.55}
.fig .sv-box{fill:var(--paper);stroke:var(--line);stroke-width:1.2}
.fig .sv-box-a{fill:var(--zap-soft);stroke:var(--zap);stroke-width:1.3}
.fig .sv-box-x{fill:none;stroke:var(--ink-3);stroke-width:1.2;stroke-dasharray:4 3}
.fig .sv-t{fill:var(--ink);font:650 10.5px ui-sans-serif,system-ui,sans-serif}
.fig .sv-s{fill:var(--ink-3);font:9px ui-sans-serif,system-ui,sans-serif}
.fig .sv-ta{fill:var(--zap);font:650 10.5px ui-sans-serif,system-ui,sans-serif}
.fig .sv-line{stroke:var(--line);stroke-width:1.4;fill:none}
.fig .sv-arrow{stroke:var(--ink-3);stroke-width:1.4;fill:none;marker-end:url(#ah)}
.fig .sv-cell{fill:none;stroke:var(--zap);stroke-width:1;opacity:.5}
.fig .sv-cell-b{fill:var(--zap-soft);stroke:var(--zap);stroke-width:1.4}
@media (prefers-reduced-motion:no-preference){
  .fig.in .sv-arrow,.fig.in .sv-line{stroke-dasharray:140;stroke-dashoffset:140;
    animation:draw 1.2s var(--ease) forwards}
  @keyframes draw{to{stroke-dashoffset:0}}
}

/* ---------- prose ---------- */
.say{max-width:58ch}
.say p{margin:0 0 1.25rem;color:var(--ink-2);font-size:1.04rem;line-height:1.66}
.say p:last-child{margin-bottom:0}
.say b{color:var(--ink);font-weight:650}
.say .punch{font-size:clamp(1.25rem,2.8vw,1.7rem);font-weight:700;letter-spacing:-.025em;
  line-height:1.26;color:var(--ink);margin:1.9rem 0}

/* ---------- repo grid ---------- */
.repo-group{margin:0 0 2.6rem}
.repo-group > h3{font-size:.76rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.13em;color:var(--ink-3);margin:0 0 1rem}
.repos{display:grid;grid-template-columns:repeat(auto-fill,minmax(15.5rem,1fr));gap:.7rem}
.repo{
  display:block;text-decoration:none;color:inherit;background:var(--raise);
  border:1px solid var(--line);border-radius:11px;padding:.9rem 1rem;
  transition:transform .28s var(--ease),box-shadow .28s var(--ease),border-color .28s}
a.repo:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:var(--zap)}
.repo .rn{display:flex;align-items:center;gap:.4rem;font-weight:680;font-size:.93rem;
  letter-spacing:-.012em;margin-bottom:.3rem;word-break:break-word}
.repo .rd{font-size:.85rem;color:var(--ink-2);line-height:1.5;margin:0}
.repo .rm{display:flex;gap:.4rem;align-items:center;margin-top:.55rem;flex-wrap:wrap}
.lang{font-size:.7rem;font-weight:650;color:var(--ink-3)}
.lang::before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;
  background:var(--zap);margin-right:.32rem;vertical-align:-1px}
.vis{font-size:.64rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;
  padding:.1rem .36rem;border-radius:3px;border:1px solid var(--line);color:var(--ink-3)}
.vis.pub{color:var(--zap);border-color:color-mix(in srgb,var(--zap) 40%,transparent);background:var(--zap-soft)}

/* ---------- rows ---------- */
.rows{list-style:none;margin:0;padding:0}
.rows li{display:flex;gap:.75rem;align-items:baseline;flex-wrap:wrap;padding:1rem 0;border-bottom:1px solid var(--line)}
.rows li:first-child{border-top:1px solid var(--line)}
.rows .n{font-weight:700;letter-spacing:-.015em}
.rows .m{color:var(--ink-2);font-size:.94rem}
.rows a.n{text-decoration:none;border-bottom:1.5px solid var(--zap)}

/* ---------- reveal ---------- */
.up{opacity:0;transform:translateY(24px)}
.up.in{opacity:1;transform:none;transition:opacity .8s var(--ease),transform .8s var(--ease)}
.up.d1.in{transition-delay:.08s}
.up.d2.in{transition-delay:.16s}
.up.d3.in{transition-delay:.24s}
@media (prefers-reduced-motion:reduce){.up{opacity:1;transform:none}}

/* ---------- outro ---------- */
.outro{padding:5rem 0 3.5rem;border-top:1px solid var(--line)}
.outro h2{font-size:clamp(1.85rem,5.8vw,4rem);font-weight:800;letter-spacing:-.045em;
  line-height:1;margin:0 0 1.4rem;max-width:18ch}
.mailto{font-size:clamp(.98rem,2.2vw,1.35rem);font-weight:650;text-decoration:none;
  border-bottom:2px solid var(--zap);word-break:break-all}
.mailto:hover{color:var(--zap)}
footer{padding:2.2rem 0 3.5rem;color:var(--ink-3);font-size:.85rem}
footer .shell{display:flex;justify-content:space-between;gap:.8rem;flex-wrap:wrap}
footer a{text-decoration:none;border-bottom:1px solid var(--line)}

/* ============ blog ============ */
.b-hero{padding:7.5rem 0 2.5rem}
.b-hero h1{font-size:clamp(2.1rem,6.4vw,3.8rem);font-weight:800;letter-spacing:-.042em;
  line-height:1;margin:0 0 1rem}
.b-hero p{color:var(--ink-2);font-size:clamp(1rem,1.9vw,1.15rem);max-width:48ch;margin:0}

.feed{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.feed li{border-bottom:1px solid var(--line)}
.feed a{display:grid;grid-template-columns:6.5rem 1fr;gap:0 1.4rem;
  padding:1.7rem 0;text-decoration:none;color:inherit;
  transition:padding-left .35s var(--ease)}
.feed a:hover{padding-left:.7rem}
@media (max-width:620px){
  .feed a{grid-template-columns:1fr;gap:.4rem}
}
.feed .when{font-size:.78rem;font-weight:650;text-transform:uppercase;letter-spacing:.08em;
  color:var(--ink-3);padding-top:.35rem}
.feed .ft{font-size:clamp(1.12rem,2.6vw,1.45rem);font-weight:720;letter-spacing:-.025em;
  line-height:1.2;margin:0 0 .4rem;transition:color .3s}
.feed a:hover .ft{color:var(--zap)}
.feed .fx{margin:0;color:var(--ink-2);font-size:.95rem;line-height:1.55;max-width:60ch}
.feed .read{display:inline-block;margin-top:.6rem;font-size:.76rem;font-weight:700;
  text-transform:uppercase;letter-spacing:.09em;color:var(--ink-3)}

/* ---------- article ---------- */
.post{padding:7.5rem 0 3rem}
.post-wrap{max-width:40rem;margin:0 auto}
.crumb{font-size:.76rem;font-weight:650;text-transform:uppercase;letter-spacing:.1em;
  color:var(--ink-3);margin:0 0 1.6rem}
.crumb a{text-decoration:none}
.crumb a:hover{color:var(--ink)}
.post h1{font-size:clamp(1.85rem,5.2vw,2.9rem);font-weight:800;letter-spacing:-.038em;
  line-height:1.05;margin:0 0 .8rem}
.post .by{color:var(--ink-3);font-size:.88rem;margin:0 0 2.6rem;
  padding-bottom:1.6rem;border-bottom:1px solid var(--line)}
.post h2{font-size:1.3rem;font-weight:750;letter-spacing:-.02em;margin:2.6rem 0 .75rem}
.post p{margin:0 0 1.25rem;color:var(--ink-2);line-height:1.72;font-size:1.05rem}
.post ul,.post ol{margin:0 0 1.25rem;padding-left:1.35rem;color:var(--ink-2)}
.post li{margin:.4rem 0;line-height:1.65}
.post blockquote{margin:2rem 0;padding:.1rem 0 .1rem 1.25rem;border-left:3px solid var(--lime);
  font-size:1.14rem;font-weight:600;color:var(--ink);line-height:1.45}
.post a{border-bottom:1.5px solid var(--zap);text-decoration:none}
.post a:hover{color:var(--zap)}
.post b,.post strong{color:var(--ink);font-weight:650}
.post hr{border:0;border-top:1px solid var(--line);margin:2.6rem 0 1.6rem}
.post .end{color:var(--ink-3);font-size:.94rem}
.back{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;
  color:var(--ink-3);text-decoration:none}
.back:hover{color:var(--ink)}

@media print{
  #bar,#dot,.top,.strip,footer,#theme{display:none}
  .up{opacity:1;transform:none}
  body{background:#fff;color:#000}
}

/* ---------- post cover image ---------- */
.cover{margin:0 0 2.4rem}
.cover img{
  display:block;width:100%;height:auto;border-radius:12px;
  border:1px solid var(--line);background:var(--raise);
}
.cover figcaption{
  margin-top:.65rem;font-size:.82rem;color:var(--ink-3);line-height:1.5;
}
