
/* Self-hosted. No third-party font origin: no visitor IP leaves this site to load type. */
/* The serif was a 119.5 KB variable font whose weight and optical-size axes accounted for
   most of its bytes. It is now two static instances at the only weights the site renders,
   optical size pinned at 32. Same typeface, 32.4 KB instead of 119.5 KB.
   No unicode-range: the files are already subset, so a range would only add a second
   filter that has to be kept in sync with subset_fonts.py. */
@font-face{font-family:"Source Serif 4";src:url("fonts/source-serif-4-400.woff2") format("woff2");
  font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Source Serif 4";src:url("fonts/source-serif-4-600.woff2") format("woff2");
  font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Source Serif 4";src:url("fonts/source-serif-4-700.woff2") format("woff2");
  font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Inter";src:url("fonts/inter-latin-400-normal.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Inter";src:url("fonts/inter-latin-500-normal.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Inter";src:url("fonts/inter-latin-600-normal.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Inter";src:url("fonts/inter-latin-700-normal.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
:root{--bg:#FBF8F4;--surface:#F3EDE4;--card:#FFFFFF;--ink:#22201D;--muted:#6B635A;--accent:#1A4548;--accent2:#9B3F1C;--line:#E3DACD;--r:14px;--pink:#DD5C86;--gelfill:#EAF3F1;--gelline:#1F4A48;--green:#43A047;--blue:#1F6F8B;--display:"Source Serif 4", Georgia, serif;--body:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--wrap:1160px;--measure:70ch}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--body);
  font-size:17px;line-height:1.62;-webkit-font-smoothing:antialiased}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 24px}
a{color:var(--accent2)}
p a,li a,td a,figcaption a,.legal a{text-decoration:underline;text-underline-offset:2px}
h1,h2,h3{font-family:var(--display);line-height:1.18;margin:0 0 .6em}
h1{font-size:clamp(2.1rem,4.6vw,3.4rem);font-weight:600;letter-spacing:-0.01em}
h2{font-size:clamp(1.5rem,2.6vw,2.1rem);font-weight:600}
h3{font-size:1.16rem;font-weight:700;font-family:var(--body)}
p{max-width:none}
.lead{font-size:1.16rem;color:var(--muted);max-width:none}
.eyebrow{font-family:var(--body);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;
  font-weight:700;color:var(--accent);display:block;margin-bottom:1rem}
section{padding:clamp(2rem,4.2vw,3.6rem) 0;border-top:1px solid var(--line)}
section.flush{border-top:none}
:target{scroll-margin-top:96px}
.skip{position:absolute;left:-9999px;top:0;background:var(--accent);color:#fff;padding:.7rem 1.1rem;z-index:99;font-weight:700}
.skip:focus{left:8px;top:8px}
a:focus-visible,button:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.staging{background:var(--ink);color:#fff;font-family:var(--body);font-size:.76rem;letter-spacing:.03em;
  padding:.4rem 24px;text-align:center}
.masthead{background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;box-shadow:0 2px 10px rgba(34,32,29,.05)}
.masthead .inner{display:flex;align-items:center;gap:20px;justify-content:space-between;
  padding:9px 28px;max-width:1300px;margin:0 auto;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:9px;text-decoration:none;color:var(--ink)}
.brand img{width:46px;height:30px;object-fit:contain;display:block}
.brand .bname{font-weight:700;font-size:1.3rem;letter-spacing:-.005em;line-height:1}
.brand .bsub{font-weight:600;font-size:.8rem;color:var(--muted);letter-spacing:.09em;text-transform:uppercase;
  padding-left:9px;border-left:1px solid var(--line);line-height:1}
nav.primary ul{display:flex;gap:16px;list-style:none;margin:0;padding:0;flex-wrap:wrap;align-items:center}
nav.primary a{position:relative;color:var(--ink);text-decoration:none;font-size:.88rem;letter-spacing:.005em;padding:5px 1px;display:inline-block}
nav.primary a:not(.navcta)::after{content:"";position:absolute;left:1px;right:1px;bottom:-1px;height:2px;
  background:var(--accent);border-radius:2px;transform:scaleX(0);transform-origin:left;transition:transform .22s ease}
nav.primary a:not(.navcta):hover{color:var(--accent)}
nav.primary a:not(.navcta):hover::after,nav.primary a:not(.navcta)[aria-current=page]::after{transform:scaleX(1)}
nav.primary a:not(.navcta)[aria-current=page]{font-weight:600;color:var(--accent)}
nav.primary a.navcta{border-radius:7px;padding:5px 10px;font-weight:600;font-size:.88rem;letter-spacing:.005em;
  border:1px solid transparent;line-height:1.5;transition:background .18s ease}
nav.primary a.navcta.gpact{color:var(--accent);background:rgba(26,69,72,.10);border-color:rgba(26,69,72,.16)}
/* VA and DoD: the flag's three colours, in the flag's own values rather than approximations.
   Old Glory Red fill, white text, Old Glory Blue border, matching the hero graphic on that page.
   Measured contrast: white on #B22234 is 6.62:1 and on the hover fill 8.53:1, both clear of the
   4.5:1 AA threshold for text this size. The blue border carries 1.55:1 against the red, which is
   fine because it is decoration: it is never the only thing marking the control, since the fill
   already separates the button from the header at 6.25:1. Border is 2px so the third colour is
   actually visible at nav scale; at 1px it disappeared. */
nav.primary a.navcta.fed{color:#fff;background:#B22234;border:2px solid #3C3B6E;padding:4px 9px}
nav.primary a.navcta.gpact:hover{background:rgba(26,69,72,.17)}
nav.primary a.navcta.fed:hover{background:#96182A}
nav.primary a.navcta.gpact[aria-current=page]{background:rgba(26,69,72,.18);font-weight:700}
nav.primary a.navcta.fed[aria-current=page]{background:#96182A;font-weight:700}
.btn{display:inline-block;padding:.78rem 1.4rem;border-radius:var(--r);text-decoration:none;
  font-weight:600;font-size:.97rem;font-family:var(--body);min-height:44px;line-height:1.6}
.btn--primary{background:var(--accent);color:#fff}
.btn--ghost{border:1.5px solid var(--line);color:var(--ink)}
.btn--ghost:hover{border-color:var(--accent)}
.actions{display:flex;gap:12px;flex-wrap:wrap;margin:1.6rem 0 0}
.isi{border-left:4px solid var(--accent);background:var(--surface);padding:1rem 1.2rem;
  margin:1.6rem 0 0;font-size:.94rem;border-radius:0 var(--r) var(--r) 0}
.isi p,.isi{max-width:none}
.isi > b{display:block;margin-bottom:.25rem;font-size:.76rem;letter-spacing:.13em;text-transform:uppercase;color:var(--accent)}
.isi ol,.isi ul{margin:.2rem 0 0;padding-left:1.2rem;line-height:1.6}
.isi li{margin-bottom:.5rem}
.isi li b{color:var(--ink)}
.grid{display:grid;gap:22px}
/* minmax() with a bare pixel floor is a hard minimum: at a 320px viewport the wrap's content
   box is 272px, so a 300px column still rendered 300px wide and pushed the page 4px past the
   viewport. That is a WCAG 2.2 SC 1.4.10 Reflow failure, and axe does not detect it because it
   is a layout measurement rather than a DOM property. min(<floor>, 100%) lets the column
   collapse below its floor when the container is narrower, which is the documented fix.
   Verified 2026-08-27 at 320px across all 17 pages: zero horizontal overflow. */
.g2{grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(min(215px,100%),1fr))}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:1.5rem}
.card h3{margin-bottom:.4rem}
.card p{margin:0;font-size:.96rem;color:var(--muted)}
/* A whole card as one link. The entire tile is the hit area, which is why there is no
   inline link inside it: a link within a link is invalid and a second target inside the
   first confuses both pointer and keyboard users. */
a.cardlink{display:block;text-decoration:none;color:inherit;transition:border-color .15s ease,box-shadow .15s ease}
a.cardlink:hover{border-color:var(--accent);box-shadow:0 10px 26px rgba(34,32,29,.08)}
a.cardlink:hover h3{color:var(--accent)}
a.cardlink:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
a.cardlink .cardgo{display:block;margin-top:.9rem;font-family:var(--body);font-size:.86rem;
  font-weight:600;color:var(--accent)}
.tag{font-size:.68rem;letter-spacing:.13em;text-transform:uppercase;font-weight:700;
  color:var(--accent);display:block;margin-bottom:.5rem;font-family:var(--body)}
figure{margin:0}
figure img{width:100%;height:auto;display:block;border-radius:var(--r);border:1px solid var(--line);background:var(--surface)}
figcaption{font-size:.86rem;color:var(--muted);margin-top:.7rem;max-width:none}
/* Figure zoom. The button wrapper is inserted by site.js, so a reader without
   JavaScript sees the figure exactly as before and nothing is announced that
   cannot be operated. Hit area is the whole image, which clears SC 2.5.8. */
.zoombtn{display:block;width:100%;padding:0;margin:0;border:0;background:none;cursor:zoom-in;
  font:inherit;color:inherit;position:relative}
.zoombtn:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:var(--r)}
.zoomhint{position:absolute;right:10px;bottom:10px;width:30px;height:30px;border-radius:50%;
  background:rgba(26,69,72,.82);color:#fff;display:grid;place-items:center;font-size:15px;
  line-height:1;opacity:0;transition:opacity .15s ease;pointer-events:none}
.zoombtn:hover .zoomhint,.zoombtn:focus-visible .zoomhint{opacity:1}
.lb{position:fixed;inset:0;z-index:120;background:rgba(18,17,15,.94);display:flex;flex-direction:column}
.lb[hidden]{display:none}
.lbstage{flex:1;min-height:0;overflow:hidden;display:flex;align-items:center;justify-content:center;
  touch-action:none;padding:12px}
.lbstage img{max-width:100%;max-height:100%;width:auto;height:auto;display:block;border-radius:6px;
  background:#fff;transform-origin:center center;cursor:zoom-in;-webkit-user-select:none;user-select:none}
.lbstage img.zoomed{cursor:grab}
.lbstage img.grabbing{cursor:grabbing}
.lbbar{display:flex;gap:8px;align-items:center;justify-content:center;flex-wrap:wrap;
  padding:10px 12px;background:rgba(0,0,0,.4)}
.lbbar button{min-height:44px;min-width:44px;padding:0 14px;border-radius:10px;cursor:pointer;
  font-family:var(--body);font-size:.9rem;font-weight:600;color:#fff;
  background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.28)}
.lbbar button:hover{background:rgba(255,255,255,.24)}
.lbbar button:focus-visible{outline:3px solid #fff;outline-offset:2px}
.lbzoom{font-variant-numeric:tabular-nums;color:#EDE7DE;font-family:var(--body);font-size:.85rem;
  min-width:4.5ch;text-align:center}
.lbcap{color:#EDE7DE;font-family:var(--body);font-size:.86rem;line-height:1.5;max-width:78ch;
  margin:0 auto;padding:0 16px 14px;text-align:center}
@media(max-width:560px){.lbcap{display:none}}
table{width:100%;border-collapse:collapse;font-size:.94rem;margin-top:1.2rem}
th,td{text-align:left;padding:.72rem .8rem;border-bottom:1px solid var(--line);vertical-align:top}
th{font-family:var(--body);font-size:.74rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
tbody tr:last-child td{border-bottom:none}
.rowhi td{background:var(--surface);font-weight:600}
sup.cite{font-size:.68em;line-height:0}
sup.cite a{color:var(--accent2);padding:0 .08em;font-weight:700;text-decoration:underline}
ol.refs{font-size:.87rem;color:var(--muted);padding-left:1.4rem;column-gap:44px}
@media(min-width:760px){ol.refs{column-count:2}}
ol.refs li{margin-bottom:.7rem;max-width:none;break-inside:avoid}
ol.refs li:target{background:var(--surface);outline:3px solid var(--accent);outline-offset:4px}
.stat{font-family:var(--display);font-size:2.2rem;font-weight:700;color:var(--accent);display:block;line-height:1.1}
.statlabel{font-size:.9rem;color:var(--muted)}
.steps{counter-reset:s;list-style:none;padding:0;margin:1.6rem 0 0;display:grid;gap:14px}
.steps li{counter-increment:s;position:relative;padding-left:3.1rem;max-width:none}
.steps li::before{content:counter(s);position:absolute;left:0;top:0;width:2.2rem;height:2.2rem;
  border-radius:50%;background:var(--accent);color:#fff;display:grid;place-items:center;font-weight:700;font-family:var(--body);font-size:.95rem}
.pathcard{display:block;text-decoration:none;color:inherit;background:var(--card);
  border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:var(--r);padding:1.4rem}
.pathcard:hover{border-left-color:var(--accent2)}
.pathcard span.tag{color:var(--accent)}
.pathcard strong{display:block;font-size:1.08rem;margin-bottom:.3rem;font-family:var(--display)}
.pathcard p{margin:0;font-size:.93rem;color:var(--muted)}
.pdfthumb{display:inline-block;border:0;background:none;padding:0;cursor:pointer;max-width:190px;
  border-radius:var(--r);box-shadow:0 6px 24px rgba(34,32,29,.18);overflow:hidden}
.pdfthumb img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:var(--r)}
.pdfthumb:hover,.pdfthumb:focus-visible{box-shadow:0 10px 30px rgba(34,32,29,.30)}
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(20,18,16,.72);z-index:200;
  padding:24px;align-items:center;justify-content:center}
.modal-overlay.open{display:flex}
.modal{background:var(--card);border-radius:var(--r);width:min(920px,100%);height:min(90vh,100%);
  display:flex;flex-direction:column;overflow:hidden}
.modal-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:.7rem 1rem;
  border-bottom:1px solid var(--line)}
.modal-bar .title{font-weight:700;font-size:.95rem;font-family:var(--body)}
.modal-bar .mactions{display:flex;gap:12px;align-items:center}
.modal-bar a{font-size:.85rem}
.modal-close{border:1px solid var(--line);background:var(--card);border-radius:8px;min-width:40px;
  min-height:36px;font-size:1.2rem;line-height:1;cursor:pointer;color:var(--ink)}
.modal-close:hover{border-color:var(--accent)}
.modal-body{flex:1 1 auto;min-height:0}
.modal-body iframe{width:100%;height:100%;border:0;display:block}
form.contact label{display:block;font-size:.85rem;font-weight:600;margin:1rem 0 .3rem}
form.contact input,form.contact textarea{width:100%;max-width:var(--measure);padding:.7rem;
  border:1px solid var(--line);border-radius:var(--r);font:inherit;background:var(--card)}
footer.site{background:var(--surface);border-top:1px solid var(--line);padding:3rem 0 2rem;font-size:.9rem}
footer.site h3{font-size:.72rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);margin:0 0 .8rem}
footer.site ul{list-style:none;padding:0;margin:0}
footer.site li{margin-bottom:.45rem}
footer.site li a{color:var(--ink);text-decoration:none}
footer.site li a:hover{text-decoration:underline}
.helpbtn{margin-top:1rem;font-size:.88rem;padding:.66rem 1.1rem;background:var(--card)}
/* Ordering box, footer column one. Deliberately inside the first column rather than
   placed with explicit grid coordinates: .g4 is auto-fit, so the column count changes
   with viewport and any hard-coded grid-column would break at some width. */
.ordbox{margin-top:1.7rem;background:var(--card);border:1px solid var(--line);
  border-radius:var(--r);padding:1rem 1.05rem}
/* On a multi-column footer the box is pushed to the foot of its column so its bottom
   edge lines up with the Contact column's last element, the help button. Grid items
   stretch to the row height, so margin-top:auto inside a flex column does it without
   hard-coded offsets. Below 900px the footer stacks and the fixed 1.7rem gap applies. */
@media(min-width:900px){
  footer.site .fcol1{display:flex;flex-direction:column;height:100%}
  footer.site .fcol1 .ordbox{margin-top:auto;margin-bottom:0}
}
.ordbox h3{font-size:.72rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);
  margin:0 0 .7rem}
.ordbox dl{margin:0}
.ordbox dt{font-size:.78rem;letter-spacing:.04em;text-transform:uppercase;font-weight:700;
  color:var(--accent);margin-top:.6rem}
.ordbox dt:first-of-type{margin-top:0}
.ordbox dd{margin:.15rem 0 0;font-size:.9rem}
.ordbox dd a{color:var(--ink)}
.legal a{color:var(--ink);text-decoration:underline;text-underline-offset:2px}
.legal{border-top:1px solid var(--line);margin-top:2.4rem;padding-top:1.4rem;color:var(--muted);font-size:.83rem}
.legal p{max-width:none}
.measure{max-width:none}
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:1rem 0}
.tablewrap table{margin:0;min-width:34rem}
@media (max-width:620px){.tablewrap{box-shadow:inset -10px 0 8px -10px rgba(34,32,29,.25)}}
.smsnote{margin-top:.9rem;padding-top:.8rem;border-top:1px solid var(--line);
  font-size:.78rem;line-height:1.5;color:var(--muted)}
.smsnote b{display:block;color:var(--ink);font-size:.83rem;margin-bottom:.15rem}
.smsnote i{display:block;font-style:normal;margin-bottom:.4rem}
.smsnote a{color:var(--muted);text-decoration:underline;text-underline-offset:2px}
@media (max-width:1240px){.brand .bsub{display:none}}
@media (max-width:820px){
  .masthead{position:static;box-shadow:none}
  .masthead .inner{gap:12px}
  nav.primary ul{gap:12px}
  nav.primary a{font-size:.86rem}
  body{font-size:16px}
}
/* homepage animated GutPrint hero */
.gphero{background:radial-gradient(120% 90% at 82% 12%, #FFFFFF 0%, var(--bg) 58%, var(--surface) 100%)}
.gphero .gpgrid{display:grid;grid-template-columns:1.05fr 1fr;gap:40px;align-items:end;padding:clamp(1.6rem,3.6vw,3rem) 0}
.gpstage{position:relative;aspect-ratio:5/4;width:100%;border-radius:var(--r);
  background:linear-gradient(180deg,#FFFFFF 0%,#FDFBF7 100%);border:1px solid var(--line);
  box-shadow:0 18px 50px rgba(34,32,29,.10);overflow:hidden}
.gpstage canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.gpstage .gptag,.gpstage .gplive{position:absolute;top:12px;z-index:4;font-family:var(--body);
  font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;font-weight:700;
  background:rgba(255,255,255,.82);padding:.28rem .6rem;border-radius:999px;border:1px solid var(--line)}
.gpstage .gptag{left:14px;color:var(--accent)}
.gpstage .gplive{right:14px;color:var(--muted);display:flex;align-items:center;gap:.4rem}
.gpdot{width:8px;height:8px;border-radius:50%;background:var(--accent2)}
@keyframes gppulse{0%{box-shadow:0 0 0 0 rgba(155,63,28,.45)}70%{box-shadow:0 0 0 9px rgba(155,63,28,0)}100%{box-shadow:0 0 0 0 rgba(155,63,28,0)}}
.gpdot.pulse{animation:gppulse 1.8s ease-out infinite}
.gpctrls{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:14px}
.gpctrls button{font-family:var(--body);font-size:.84rem;font-weight:600;color:var(--ink);
  background:var(--card);border:1.5px solid var(--line);border-radius:999px;padding:.42rem 1rem;min-height:40px;cursor:pointer}
.gpctrls button:hover{border-color:var(--accent)}
.gpctrls label{font-size:.84rem;color:var(--muted);display:flex;align-items:center;gap:.5rem;cursor:pointer}
@media(max-width:860px){.gphero .gpgrid{grid-template-columns:1fr;gap:24px}}
@media (prefers-reduced-motion:reduce){.gpdot.pulse{animation:none}}
/* in-page sub navigation (Evidence: summary + publications) */
.subnav{position:sticky;top:43px;z-index:15;background:var(--bg);border-bottom:1px solid var(--line);padding:.5rem 0}
.subnav .wrap{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.subnav .lbl{font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;font-weight:700;color:var(--muted);margin-right:.2rem}
.subnav a{font-family:var(--body);font-size:.86rem;font-weight:600;color:var(--ink);text-decoration:none;
  padding:.38rem .9rem;border-radius:999px;border:1px solid var(--line);background:var(--card);min-height:36px;display:inline-flex;align-items:center}
.subnav a:hover{border-color:var(--accent);color:var(--accent)}
@media(max-width:820px){.subnav{position:static}}
/* Gut Insight platform chip: solid fill for a bit more emphasis, still flat and calm */
nav.primary a.navcta.gi{color:#fff;background:var(--accent);border-color:var(--accent)}
nav.primary a.navcta.gi:hover{background:#153c3f}
nav.primary a.navcta.gi[aria-current=page]{box-shadow:0 0 0 2px var(--bg),0 0 0 3px var(--accent)}
/* gel-walker "how a study works" scene (homepage) */
.gwscene{position:relative;background:var(--card);border:1px solid var(--line);border-radius:20px;
  box-shadow:0 14px 40px rgba(34,32,29,.08);overflow:hidden;margin-top:1.8rem}
.gwscene svg{display:block;width:100%;height:auto}
.gwscene .figure{transform-box:view-box;transform-origin:300px 436px;animation:gwbob 1.4s cubic-bezier(.37,0,.63,1) infinite}
@keyframes gwbob{0%,50%,100%{transform:translateY(2px) scale(1.03,.95) rotate(2.8deg)}
  12%,62%{transform:translateY(-14px) scale(1,1.01) rotate(0deg)}
  25%,75%{transform:translateY(-22px) scale(.98,1.05) rotate(-2.4deg)}
  38%,88%{transform:translateY(-10px) scale(1,1) rotate(1deg)}}
.gwscene .thigh{transform-box:view-box;transform-origin:300px 330px;animation:gwthigh 1.4s cubic-bezier(.45,.05,.55,.95) infinite}
.gwscene .thigh.alt{animation-delay:-.7s}
@keyframes gwthigh{0%{transform:rotate(-32deg)}50%{transform:rotate(26deg)}100%{transform:rotate(-32deg)}}
.gwscene .calf{transform-box:view-box;transform-origin:298px 390px;animation:gwcalf 1.4s ease-in-out infinite}
.gwscene .calf.alt{animation-delay:-.7s}
@keyframes gwcalf{0%{transform:rotate(-2deg)}35%{transform:rotate(6deg)}55%{transform:rotate(48deg)}75%{transform:rotate(68deg)}92%{transform:rotate(8deg)}100%{transform:rotate(-2deg)}}
.gwscene .armFree{transform-box:view-box;transform-origin:302px 248px;animation:gwarmF 1.4s ease-in-out infinite}
@keyframes gwarmF{0%{transform:rotate(-29deg)}50%{transform:rotate(25deg)}100%{transform:rotate(-29deg)}}
.gwscene .armPhone{transform-box:view-box;transform-origin:304px 250px;animation:gwarmP 1.4s ease-in-out infinite}
@keyframes gwarmP{0%{transform:rotate(25deg)}50%{transform:rotate(-29deg)}100%{transform:rotate(25deg)}}
.gwscene .wifi{transform-box:fill-box;transform-origin:center;animation:gwwifi 1.8s ease-out infinite}
.gwscene .wifi.b{animation-delay:.6s}.gwscene .wifi.c{animation-delay:1.2s}
@keyframes gwwifi{0%{transform:scale(.55);opacity:.7}70%{opacity:0}100%{transform:scale(1.25);opacity:0}}
.gwscene .pink{offset-rotate:0deg;animation:gwflow 2.6s linear infinite}
.gwscene .pink.b{animation-delay:.65s}.gwscene .pink.c{animation-delay:1.3s}.gwscene .pink.d{animation-delay:1.95s}
@keyframes gwflow{0%{offset-distance:0%;opacity:0}10%{opacity:1}90%{opacity:1}100%{offset-distance:100%;opacity:0}}
.gwscene .cloud{transform-box:view-box;transform-origin:170px 105px;animation:gwcloud 7s ease-in-out infinite}
@keyframes gwcloud{0%{transform:translate(0,0) rotate(0deg)}18%{transform:translate(20px,-12px) rotate(1.4deg)}40%{transform:translate(6px,4px) rotate(-.8deg)}62%{transform:translate(-18px,-14px) rotate(-1.6deg)}84%{transform:translate(-6px,2px) rotate(.8deg)}100%{transform:translate(0,0) rotate(0deg)}}
.gwscene .bgscroll{animation:gwbgs 16s linear infinite}
@keyframes gwbgs{0%{transform:translateX(0)}100%{transform:translateX(-500px)}}
.gwscene .barfill{transition:width .5s ease}
@media (prefers-reduced-motion:reduce){
  .gwscene .figure,.gwscene .thigh,.gwscene .calf,.gwscene .armFree,.gwscene .armPhone,
  .gwscene .wifi,.gwscene .pink,.gwscene .cloud,.gwscene .bgscroll{animation:none}
  .gwscene .pink{display:none}
}
/* Gut Insight platform page hero */
.gihero{background:radial-gradient(120% 90% at 80% -10%, #FFFFFF 0%, var(--bg) 55%, var(--surface) 100%)}

.giwordmark{font-weight:700;background:linear-gradient(100deg,#1A4548,#2F9B90,#1A4548);
  -webkit-background-clip:text;background-clip:text;color:var(--accent)}
figure.shot img{border:1px solid var(--line);border-radius:var(--r);box-shadow:0 12px 34px rgba(34,32,29,.12)}
.paperstrip{display:flex;gap:26px;align-items:center;flex-wrap:wrap;margin-top:2.4rem;padding-top:1.8rem;border-top:1px solid var(--line)}
.paperstrip .pdfthumb{max-width:130px;flex:0 0 auto}
.paperstrip>div{flex:1 1 320px}
.figpair figure img{height:clamp(230px,25vw,330px);width:100%;object-fit:contain;background:var(--card)}
/* figure rides with the adjacent list, then releases at the end of the grid row */
@media(min-width:861px){.stickyfig{position:sticky;top:92px;align-self:start}}
