@import url("https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,500..800&family=Geist+Mono:wght@400;500&family=Geist:wght@400..700&display=swap");
/* Roger Bacab · Bold — component styles. Colors, type families, spacing, radii and shadows come from tokens.css;
   only motion curves and the squircle multiplier live here. Lifted from the Bold v4 artifact. */

:root{
  --rb-ease:cubic-bezier(.2,.7,0,1);
  --rb-spring:cubic-bezier(.34,1.56,.64,1);
  --rb-morph:cubic-bezier(.2,.8,.1,1);
  --rb-sq:1;            /* radius multiplier; 1.45 where continuous corners are supported */
  --rb-sq-icon:1;
  --rb-gx:clamp(var(--gutter-min), 4vw, var(--gutter-max));
}
@supports (corner-shape: squircle){
  :root{--rb-sq:1.45; --rb-sq-icon:1.5}
  [class*="rb-"],[class*="rb-"]::before,[class*="rb-"]::after{corner-shape:squircle}
  .rb-round,.rb-round::after{corner-shape:round}
}

/* Base */
body{background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased}
.rb-wrap{max-width:var(--page-max);margin-inline:auto;padding-left:max(var(--rb-gx), env(safe-area-inset-left,0px));padding-right:max(var(--rb-gx), env(safe-area-inset-right,0px))}
.rb-eyebrow{font:500 12px/1.4 var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:0}
.rb-hl{font-style:normal;background:var(--accent);color:var(--on-accent);padding:0 .07em;border-radius:.14em;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.rb-app-icon{display:block;width:52px;height:52px;border-radius:calc(var(--radius-icon) * var(--rb-sq-icon));object-fit:cover;box-shadow:0 0 0 1px var(--line)}
:where([class*="rb-"]):focus-visible{outline:2px solid var(--accent-ink);outline-offset:3px}

/* Button */
.rb-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:54px;padding:0 24px;border-radius:calc(var(--radius-sm) * var(--rb-sq));
  font:600 16px/1 var(--font-body);text-decoration:none;border:1px solid transparent;cursor:pointer;
  transition:background-color .3s, color .3s, border-color .3s, translate .5s var(--rb-spring)}
.rb-btn svg{width:18px;height:18px;flex:none}
.rb-btn--primary{background:var(--fg);color:var(--bg)}
.rb-btn--primary:hover{background:var(--accent);color:var(--on-accent)}
.rb-btn--ghost{background:var(--surface);color:var(--fg)}
.rb-btn--ghost:hover{border-color:var(--fg)}

/* Store button */
.rb-store{display:inline-flex;align-items:center;gap:12px;min-height:58px;padding:0 22px 0 16px;border-radius:calc(var(--radius-sm) * var(--rb-sq));background:var(--fg);color:var(--bg);text-decoration:none;
  transition:background-color .3s, color .3s, translate .5s var(--rb-spring)}
.rb-store svg{width:26px;height:26px;flex:none}
.rb-store span{display:grid;gap:4px;line-height:1;text-align:left}
.rb-store small{font:500 11px/1 var(--font-body);opacity:.72}
.rb-store b{font:700 18px/1 var(--font-display);letter-spacing:-.02em}
.rb-store:hover{background:var(--accent);color:var(--on-accent)}

/* Icon button */
.rb-icon-btn{appearance:none;display:inline-grid;place-items:center;width:40px;height:40px;border:0;border-radius:calc(var(--radius-xs) * var(--rb-sq));background:var(--surface);color:var(--fg);cursor:pointer;transition:background-color .25s}
.rb-icon-btn:hover{background:var(--line)}
.rb-icon-btn svg{width:18px;height:18px}

/* Contact link */
.rb-contact{display:inline-flex;align-items:center;gap:10px;min-height:60px;padding:0 22px;border-radius:calc(var(--radius-sm) * var(--rb-sq));background:var(--surface);color:var(--fg);
  text-decoration:none;font:600 16px/1 var(--font-body);border:1px solid transparent;transition:border-color .3s, background-color .3s, color .3s, translate .5s var(--rb-spring)}
.rb-contact svg{width:19px;height:19px;flex:none}
.rb-contact .rb-arr{color:var(--muted);transition:transform .4s var(--rb-ease)}
.rb-contact:hover{border-color:var(--fg)}
.rb-contact:hover .rb-arr{transform:translate(2px,-2px)}
.rb-contact--primary{background:var(--fg);color:var(--bg)}
.rb-contact--primary .rb-arr{color:inherit}
.rb-contact--primary:hover{background:var(--accent);color:var(--on-accent);border-color:transparent}

/* Segmented control */
.rb-seg{position:relative;display:inline-grid;grid-auto-flow:column;grid-auto-columns:1fr;padding:3px;border-radius:calc(var(--radius-xs) * var(--rb-sq));background:var(--surface);isolation:isolate}
.rb-seg button{appearance:none;position:relative;z-index:1;border:0;background:none;color:var(--muted);min-width:36px;height:34px;padding:0 8px;border-radius:calc(var(--radius-xs) * var(--rb-sq) - 3px);
  font:600 12px/1 var(--font-mono);letter-spacing:.04em;cursor:pointer;display:grid;place-items:center;transition:color .3s}
.rb-seg button[aria-checked="true"]{color:var(--fg)}
.rb-seg button svg{width:16px;height:16px}
.rb-seg-thumb{position:absolute;z-index:0;top:3px;bottom:3px;left:3px;width:calc((100% - 6px) / var(--rb-seg-n, 2));border-radius:calc(var(--radius-xs) * var(--rb-sq) - 3px);background:var(--bg);box-shadow:var(--shadow-thumb);
  transform:translateX(calc(100% * var(--rb-seg-i, 0)));transition:transform .45s var(--rb-spring)}

/* Nav bar */
.rb-nav{position:sticky;top:calc(env(safe-area-inset-top,0px) + 10px);z-index:50;view-transition-name:rb-nav}
.rb-nav-bar{display:flex;align-items:center;gap:10px;height:var(--nav-height);padding:0 10px 0 18px;border-radius:calc(var(--radius-md) * var(--rb-sq));background:var(--glass);border:1px solid var(--line);
  -webkit-backdrop-filter:blur(18px) saturate(1.4);backdrop-filter:blur(18px) saturate(1.4);box-shadow:var(--shadow-nav);transition:box-shadow .3s}
.rb-nav.is-scrolled .rb-nav-bar{box-shadow:var(--shadow-nav-raised)}
.rb-brand{font:800 19px/1 var(--font-display);letter-spacing:-.03em;text-decoration:none;color:var(--fg);display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.rb-brand-dot{width:9px;height:9px;border-radius:3px;background:var(--accent);box-shadow:0 0 0 1px var(--line)}
.rb-nav-links{position:relative;display:flex;gap:2px;margin-inline:auto}
.rb-nav-links a{position:relative;z-index:1;padding:9px 14px;border-radius:calc(var(--radius-xs) * var(--rb-sq));font:600 14px/1 var(--font-body);color:var(--muted);text-decoration:none;transition:color .3s}
.rb-nav-links a:hover{color:var(--fg)}
.rb-nav-links a[aria-current="true"]{color:var(--on-accent)}
.rb-nav-ind{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:calc(var(--radius-xs) * var(--rb-sq));background:var(--accent);opacity:0;transition:transform .55s var(--rb-ease), width .55s var(--rb-ease), opacity .3s}
.rb-nav-ind.is-on{opacity:1}
.rb-nav-back{appearance:none;display:inline-flex;align-items:center;gap:6px;border:0;background:none;color:var(--fg);font:600 15px/1 var(--font-body);padding:10px 8px;border-radius:calc(var(--radius-xs) * var(--rb-sq));cursor:pointer}
.rb-nav-back:hover{background:var(--surface)}
.rb-nav-back svg{width:18px;height:18px}
.rb-nav-project{display:inline-flex;align-items:center;gap:6px;margin-inline:auto}
.rb-count{font:500 13px/1 var(--font-mono);color:var(--muted);min-width:46px;text-align:center;font-variant-numeric:tabular-nums}
.rb-nav-tools{display:flex;gap:6px;flex:none}

/* Footer */
.rb-footer-bar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;padding:22px 24px;border-radius:calc(var(--radius-md) * var(--rb-sq));background:var(--surface);
  font:500 12px/1.4 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.rb-footer-bar a{color:inherit;text-decoration:none;padding:6px 10px;border-radius:calc(var(--radius-xs) * var(--rb-sq))}
.rb-footer-bar a:hover{color:var(--fg);background:var(--bg)}

/* Hero headline */
.rb-hero-title{margin:0;font:800 clamp(52px,10.4vw,168px)/.88 var(--font-display);letter-spacing:-.055em;max-width:11.5ch;text-wrap:balance}
.rb-hero-title .rb-w{display:inline-block;overflow:hidden;vertical-align:top;padding:0 .04em .1em 0;margin:0 -.04em -.1em 0}
.rb-hero-title .rb-w > span{display:inline-block;animation:rb-word-up .95s var(--rb-ease) both;animation-delay:calc(var(--i) * 45ms + 100ms)}
.rb-hero-title .rb-hl::after{content:"";display:inline-block;width:.055em;height:.78em;margin-left:.05em;border-radius:.03em;background:var(--fg);vertical-align:-.04em;animation:rb-blink 1.1s steps(1) infinite}
.rb-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;font:500 12px/1.4 var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.rb-meta-sep{width:4px;height:4px;border-radius:1px;background:var(--line)}
.rb-status{display:inline-flex;align-items:center;gap:10px;color:var(--fg)}
.rb-pulse{position:relative;width:8px;height:8px;border-radius:50%;background:var(--accent-ink);flex:none}
.rb-pulse::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--accent-ink);animation:rb-pulse 2s var(--rb-ease) infinite}
@keyframes rb-word-up{from{transform:translateY(110%)}to{transform:none}}
@keyframes rb-blink{50%{opacity:0}}
@keyframes rb-pulse{from{transform:scale(1);opacity:.6}to{transform:scale(3.2);opacity:0}}

/* Notification card */
.rb-notif{width:228px;display:grid;grid-template-columns:34px minmax(0,1fr);gap:4px 10px;align-items:start;text-align:left;padding:11px 13px 12px;border-radius:calc(var(--radius-md) * var(--rb-sq));
  background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:blur(16px) saturate(1.5);backdrop-filter:blur(16px) saturate(1.5);box-shadow:var(--shadow-float);
  font:400 12.5px/1.35 var(--font-body);color:var(--fg)}
.rb-notif img{grid-row:span 2;width:34px;height:34px;border-radius:calc(var(--radius-icon) * var(--rb-sq-icon));display:block}
.rb-notif b{display:flex;justify-content:space-between;gap:8px;font-weight:600;font-size:13px}
.rb-notif b small{font:500 11px/1.4 var(--font-body);color:var(--muted)}
.rb-notif > span{color:var(--muted)}

/* Marquee */
.rb-marquee{overflow:hidden;border-radius:calc(var(--radius-xl) * var(--rb-sq));background:var(--band-bg);color:var(--band-fg);padding-block:24px}
.rb-marquee-track{display:flex;width:max-content;animation:rb-marquee 42s linear infinite}
.rb-marquee:hover .rb-marquee-track{animation-play-state:paused}
.rb-mq-group{display:flex;align-items:center;gap:32px;padding-right:32px;flex:none}
.rb-mq-item{font:800 clamp(34px,5.2vw,76px)/1.1 var(--font-display);letter-spacing:-.045em;white-space:nowrap}
.rb-mq-sep{width:.42em;height:.42em;font-size:clamp(34px,5.2vw,76px);border-radius:.12em;background:var(--band-mark);rotate:45deg;flex:none}
@keyframes rb-marquee{to{transform:translateX(-50%)}}

/* Media banner: three fanned phones */
.rb-media{display:block;position:relative;overflow:hidden;background:radial-gradient(75% 75% at 50% 118%,var(--accent),transparent 72%),var(--accent-soft)}
.rb-media img{position:absolute;left:50%;bottom:-8%;height:82%;width:auto;max-width:none;filter:drop-shadow(0 16px 24px var(--shadow-color));transition:transform .7s var(--rb-ease)}
.rb-media .rb-ph-a{transform:translateX(-118%) translateY(8%) rotate(-9deg)}
.rb-media .rb-ph-c{height:94%;z-index:2;transform:translateX(-50%)}
.rb-media .rb-ph-b{transform:translateX(18%) translateY(8%) rotate(9deg)}
.rb-fan:hover .rb-ph-a{transform:translateX(-128%) translateY(2%) rotate(-12deg)}
.rb-fan:hover .rb-ph-c{transform:translateX(-50%) translateY(-4%)}
.rb-fan:hover .rb-ph-b{transform:translateX(28%) translateY(2%) rotate(12deg)}

/* Work card */
.rb-card-wrap{perspective:1000px}
.rb-card{appearance:none;border:0;color:inherit;font:inherit;text-align:left;width:100%;padding:0;cursor:pointer;display:block;position:relative;background:var(--surface);
  border-radius:calc(var(--radius-lg) * var(--rb-sq));overflow:hidden;transform:rotateX(var(--ty,0deg)) rotateY(var(--tx,0deg));transition:transform .6s var(--rb-ease)}
.rb-card .rb-media{aspect-ratio:16/11}
.rb-card-row{display:grid;grid-template-columns:52px minmax(0,1fr) 44px;gap:4px 16px;align-items:center;padding:22px 22px 24px}
.rb-card-text{display:grid;gap:3px;min-width:0}
.rb-card-name{display:block;font:700 26px/1.1 var(--font-display);letter-spacing:-.035em}
.rb-card-desc{display:block;color:var(--muted);font-size:15px;line-height:1.45}
.rb-card-meta{grid-column:2 / -1;font-size:13px;color:var(--muted);margin-top:6px}
.rb-card-meta b{color:var(--fg);font-weight:600}
.rb-arrow{grid-column:3;grid-row:1;display:grid;place-items:center;width:44px;height:44px;border-radius:calc(var(--radius-sm) * var(--rb-sq));background:var(--bg);color:var(--fg);transition:background-color .3s, transform .5s var(--rb-ease)}
.rb-arrow svg{width:20px;height:20px}
.rb-card:hover .rb-arrow{background:var(--accent);color:var(--on-accent);transform:rotate(45deg)}

/* Services band */
.rb-band{background:var(--accent);color:var(--on-accent);border-radius:calc(var(--radius-xl) * var(--rb-sq));padding:clamp(40px,7vw,96px) clamp(20px,5vw,72px)}
.rb-band .rb-eyebrow{color:#03302cb3}
.rb-focus-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;list-style:none;margin:0;padding:0}
.rb-focus{display:grid;gap:14px;align-content:start;min-width:0;background:#03302c12;border-radius:calc(var(--radius-lg) * var(--rb-sq));padding:28px}
.rb-focus-icon{width:48px;height:48px;display:grid;place-items:center;border-radius:calc(var(--radius-sm) * var(--rb-sq));background:var(--on-accent);color:var(--accent)}
.rb-focus-icon svg{width:22px;height:22px}
.rb-focus h3{margin:0;font:800 24px/1.15 var(--font-display);letter-spacing:-.03em}
.rb-focus p{margin:0;color:#03302cdb;font-size:16px}

/* Grouped list (iOS inset grouped) */
.rb-group-title{font:600 13px/1 var(--font-body);color:var(--muted);padding:0 18px 8px;margin:0;text-transform:uppercase;letter-spacing:.04em}
.rb-group{list-style:none;margin:0;padding:0;background:var(--surface);border-radius:calc(var(--radius-md) * var(--rb-sq));overflow:hidden}
.rb-group li{display:grid;grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:12px;min-height:52px;padding:8px 16px;position:relative}
.rb-group li + li::before{content:"";position:absolute;top:0;left:60px;right:0;height:1px;background:var(--line)}
.rb-tile{width:32px;height:32px;border-radius:calc(var(--radius-icon) * var(--rb-sq-icon));display:grid;place-items:center;background:var(--bg);overflow:hidden;font:700 14px/1 var(--font-display);color:var(--fg)}
.rb-tile img{width:20px;height:20px;object-fit:contain}
.rb-tile svg{width:17px;height:17px}
.rb-row-label{font-weight:600;font-size:15px;min-width:0}
.rb-row-detail{font-size:14px;color:var(--muted);text-align:right}

/* Story beats */
.rb-story{list-style:none;margin:0;padding:0;display:grid}
.rb-beat{display:grid;grid-template-columns:44px minmax(0,1fr);gap:8px 18px;padding-block:26px;border-top:1px solid var(--line)}
.rb-beat:first-child{border-top:0;padding-top:4px}
.rb-beat-n{grid-row:span 2;width:44px;height:44px;border-radius:calc(var(--radius-sm) * var(--rb-sq));background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font:800 18px/1 var(--font-display)}
.rb-beat .rb-eyebrow{align-self:center;color:var(--accent-ink)}
.rb-beat p{margin:0;font-size:clamp(17px,1.35vw,19px);line-height:1.55;max-width:58ch}

/* GIF slot */
.rb-gif{margin:0;display:grid;gap:12px;justify-items:center}
.rb-gif-frame{width:min(320px,100%);aspect-ratio:540/1170;border-radius:calc(var(--radius-xl) * var(--rb-sq));border:2px dashed var(--accent-ink);background:var(--surface);
  display:grid;place-content:center;justify-items:center;gap:10px;text-align:center;padding:24px;overflow:hidden}
.rb-gif-frame.has-gif{padding:0;border-style:solid;border-color:var(--line);display:block}
.rb-gif-frame img{display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit}
.rb-gif-play{width:64px;height:64px;border-radius:calc(var(--radius-md) * var(--rb-sq));display:grid;place-items:center;background:var(--accent);color:var(--on-accent);margin-bottom:6px}
.rb-gif-play svg{width:26px;height:26px}
.rb-gif-frame strong{font:800 30px/1 var(--font-display);letter-spacing:-.03em}
.rb-gif-frame code{font:500 13px/1.3 var(--font-mono);color:var(--fg);word-break:break-all}
.rb-gif-frame small{font-size:13px;color:var(--muted)}
.rb-gif figcaption{font:500 12px/1.4 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}

/* Project header */
.rb-pj-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:20px 24px;align-items:center}
.rb-pj-head .rb-app-icon{width:clamp(64px,7vw,88px);height:clamp(64px,7vw,88px)}
.rb-pj-title{margin:0;font:800 clamp(40px,6.4vw,92px)/.95 var(--font-display);letter-spacing:-.045em;text-wrap:balance}
.rb-pj-kind{margin-bottom:8px}
.rb-pj-tag{margin:12px 0 0;color:var(--muted);font-size:clamp(17px,1.4vw,20px);max-width:52ch}
.rb-pj-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}
.rb-pj-hero{border-radius:calc(var(--radius-xl) * var(--rb-sq));height:clamp(340px,50vw,600px)}
.rb-pj-hero .rb-ph-a,.rb-pj-hero .rb-ph-b{height:80%}
.rb-pj-hero .rb-ph-c{height:92%}
@media (max-width:1000px){ .rb-pj-head{grid-template-columns:auto minmax(0,1fr)} .rb-pj-actions{grid-column:1 / -1;justify-content:flex-start} }

/* Next project card */
.rb-next{appearance:none;border:0;color:inherit;font:inherit;text-align:left;cursor:pointer;width:100%;padding:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:stretch;
  background:var(--surface);border-radius:calc(var(--radius-xl) * var(--rb-sq));overflow:hidden;transition:transform .5s var(--rb-ease)}
.rb-next:hover{transform:translateY(-4px)}
.rb-next-text{display:grid;align-content:center;gap:12px;padding:clamp(24px,4vw,48px)}
.rb-next-row{display:flex;align-items:center;gap:14px}
.rb-next-name{font:800 clamp(30px,4vw,56px)/1 var(--font-display);letter-spacing:-.045em}
.rb-next-tag{color:var(--muted)}
.rb-next .rb-media{min-height:260px}
.rb-next .rb-ph-a,.rb-next .rb-ph-b{height:88%;bottom:-24%}
.rb-next .rb-ph-c{height:100%;bottom:-24%}
@media (max-width:760px){ .rb-next{grid-template-columns:minmax(0,1fr)} .rb-next .rb-media{order:-1;min-height:220px} .rb-focus-list{grid-template-columns:minmax(0,1fr)} }

/* Grain */
.rb-grain{position:fixed;inset:0;width:100%;height:100%;z-index:45;pointer-events:none;mix-blend-mode:multiply;display:block}
[data-theme="dark"] .rb-grain{mix-blend-mode:screen}
.rb-grain--contained{position:absolute}

/* Reveals and morph */
@supports (animation-timeline: view()){
  :root:not([data-motion="off"]) .rb-reveal{animation:rb-reveal linear both;animation-timeline:view();animation-range:entry 0% cover 26%}
}
@keyframes rb-reveal{from{opacity:0;transform:translateY(36px)}to{opacity:1;transform:none}}
.rb-stagger > *{animation:rb-fade-up .7s var(--rb-ease) both;animation-delay:calc(var(--k,0) * 60ms + 220ms)}
@keyframes rb-fade-up{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}
::view-transition-group(pj-media),::view-transition-group(pj-title),::view-transition-group(pj-icon){animation-duration:.62s;animation-timing-function:var(--rb-morph)}
::view-transition-old(root),::view-transition-new(root){animation-duration:.32s}

/* Motion off */
:root[data-motion="off"] *,:root[data-motion="off"] *::before,:root[data-motion="off"] *::after{animation:none!important;transition-duration:0s!important}
@media (prefers-reduced-motion: reduce){ :root:not([data-motion="on"]) *,:root:not([data-motion="on"]) *::before,:root:not([data-motion="on"]) *::after{animation:none!important;transition-duration:0s!important} }
