/* ================= Base ================= */
:root{
  --bg:#05060b;
  --cell:#080b12;
  --cell2:#0b1019;
  --line:rgba(221,234,236,.115);
  --line2:rgba(231,240,241,.2);
  --hair:rgba(216,230,233,.064);
  --text:#edf1f2;
  --muted:#9da7b1;
  /* 2026-08: raised from #5d6975. Against --bg that was 3.61:1, and --dim is not
     decoration — it carries the breadcrumbs, the figure captions, BACK TO TOP,
     the footer tagline, the CTA note and the definition-list labels, all at
     13-16px where the 3:1 large-text exemption does not apply. #6d7b8a is the smallest
     hue-preserving lift that clears AA on --bg (4.68:1) AND on the lightest panel
     any --dim text actually lands on, rgb(8,11,15) behind the /news/ datelines
     (4.55:1). Solved against the measured worst case, not against --bg alone.
     Contrast against --bg for the rest of the ramp, for whoever changes these
     next: --text 17.80, --muted 8.29, --mint 11.55, --cyan 12.43. */
  --dim:#6d7b8a;
  --cyan:#b4d0d2;
  --violet:#aaa7b5;
  --mint:#a7cbc4;
  --amber:#e2c28b;
  --navy:#111a26;
  --navy2:#182b3a;
  --teal-soft:#b7cfd0;
  --ice:#e3ebec;
  --aperture:#e4c58d;
  --surface:#090d12;
  --surface2:#0d131a;
  --cool-glow:rgba(196,222,224,.2);
  --warm-glow:rgba(228,197,141,.22);
  --grad:linear-gradient(112deg,#f1f4f4 0%,#c8dddd 48%,#b9b5c0 78%,#dfcfad 100%);
  --mobius-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 480 480'%3E%3Cpath d='M397,478C380,477,359,475,346,472C345,472,342,471,341,471C339,471,335,470,332,469C325,468,325,467,319,466C317,465,315,465,314,464C310,463,304,461,301,460C298,459,295,458,294,458L291,457L289,458C283,461,268,466,262,468C256,469,251,471,249,471C248,471,246,472,245,472C244,472,240,473,238,473C233,474,230,475,219,476C212,477,189,476,181,476C173,475,163,473,158,472C157,472,155,471,154,471C152,471,147,469,141,468C136,466,124,462,120,460C119,460,117,459,115,459C111,457,100,451,97,450C96,449,95,448,95,448C95,448,82,441,79,438C71,433,62,425,56,419C54,417,52,416,52,415C51,415,52,412,53,410C54,409,55,407,57,406C63,400,72,391,83,377C93,366,107,347,114,334C120,324,122,321,126,313C135,294,140,281,145,263C146,260,148,251,149,248C149,246,149,244,150,243C151,233,152,207,151,198C148,180,143,166,134,153C127,143,113,134,94,126C83,122,64,117,55,116C52,115,51,114,51,113C51,112,52,110,56,107C89,77,127,59,170,52C182,50,206,50,217,50C243,53,262,58,287,68C293,70,303,76,312,81L313,82L315,80C316,79,318,77,320,75C322,73,325,71,327,70C328,68,332,65,335,63C340,58,345,54,352,49C355,47,358,45,359,43C370,35,397,17,411,9C414,7,419,4,421,3C424,1,426,0,426,0C429,4,430,3,414,19C406,27,398,35,397,37C395,38,394,39,394,40C394,40,392,42,390,44C388,46,387,48,386,48C382,52,357,84,346,99L343,104L351,112C359,119,363,124,366,128C366,128,367,129,367,129C367,129,369,132,372,136C373,137,374,139,375,139C375,140,382,150,385,155C388,160,393,170,396,175C396,177,397,179,398,180C403,193,409,211,411,227C416,257,415,290,407,318C407,319,407,321,406,322C403,337,394,357,384,373C381,378,372,391,371,392C371,392,370,394,368,395C361,405,349,418,339,426C334,430,327,436,325,437C324,437,324,438,324,438C324,440,344,450,356,455C361,457,367,460,370,460C377,463,383,465,389,466C392,467,396,468,397,468C397,468,400,469,403,470C414,472,416,472,421,473C426,474,427,474,428,475C428,476,428,478,427,479C426,479,409,479,397,478ZM216,472C218,472,223,472,225,472C230,471,238,470,243,469C244,469,246,468,248,468C259,465,285,457,285,455C286,454,285,454,285,454C285,454,283,453,275,449C251,439,229,421,216,401C208,389,201,373,197,355C195,347,193,329,193,319C193,309,195,288,197,278C200,263,204,248,209,236C210,233,211,230,212,228C212,226,214,222,215,219C217,216,218,213,219,211C220,207,229,190,232,186C233,184,234,182,234,182C234,181,246,161,251,154C252,153,255,149,257,145C263,137,274,123,280,116C283,113,286,110,287,109C288,107,297,98,305,90C308,87,310,85,310,84C310,83,296,76,288,72C287,72,285,71,283,70C276,67,256,61,248,59C247,59,245,58,244,58C214,52,179,52,149,60C141,62,141,62,135,64C112,72,90,84,71,99C65,104,64,105,60,109C56,112,56,112,63,112C73,112,90,114,103,116C115,119,132,123,140,127C140,127,141,128,143,128C159,134,175,147,184,160C194,174,199,191,199,214C199,234,196,248,189,268C174,309,139,354,98,385C96,387,94,388,94,388C92,390,68,406,58,411C57,412,56,413,56,413C55,414,69,426,80,434C98,447,122,459,142,464C157,469,167,471,185,472C191,473,211,473,216,472ZM325,433C353,413,378,382,392,352C395,343,396,342,398,337C402,327,404,318,406,307C408,298,408,296,410,286C410,280,410,248,410,241C407,222,402,199,397,188C397,187,396,185,395,183C387,163,373,141,359,125C356,121,342,107,341,107C341,107,329,125,324,134C321,139,319,142,319,142C319,142,319,143,318,144C314,150,304,171,299,182C297,188,295,193,290,204C288,209,285,218,283,224C282,227,281,230,281,231C278,240,273,265,271,278C265,327,271,372,290,403C291,405,292,407,292,407C292,407,298,417,300,418C305,425,319,437,320,436C321,436,323,434,325,433ZM271,411C270,409,269,408,269,407C269,407,268,406,267,404C266,401,259,389,258,385C254,373,250,361,249,351C248,350,248,347,248,345C244,321,246,289,252,261C252,259,253,258,253,256C253,255,254,252,255,249C255,247,256,244,256,243C257,241,257,239,259,234C260,232,260,230,261,229C261,227,265,216,265,215C265,215,266,214,266,214C266,213,266,213,266,212C267,210,268,207,268,207C268,207,267,207,267,208C267,208,267,210,266,211C265,213,265,214,265,214C265,214,265,215,264,215C264,217,261,225,259,231C258,234,257,236,257,237C257,237,256,239,256,240C254,246,253,249,253,252C252,253,252,255,252,256C251,259,250,265,248,272C248,273,248,276,247,277C247,279,246,284,245,291C243,316,244,344,249,364C252,372,252,374,252,375C253,376,253,378,254,380C255,382,256,385,257,386C258,388,258,390,258,390C258,392,269,410,272,413C273,415,273,414,271,411ZM250,407C249,406,249,404,249,404C249,404,248,403,248,403C247,402,246,399,245,397C229,368,223,331,228,291C229,280,232,263,235,255C235,253,236,250,237,248C238,244,242,232,244,224C247,217,253,203,256,197C257,193,258,192,256,194C256,195,255,196,255,196C255,197,255,197,255,197C255,197,254,197,254,198C254,198,253,200,252,203C251,206,249,209,249,209C249,210,248,211,248,212C247,214,246,216,246,218C244,221,244,222,243,224C243,225,242,227,242,228C241,229,241,230,241,230C240,231,240,231,240,232C240,232,240,233,240,233C238,237,231,263,229,273C229,275,228,277,228,278C225,290,223,319,225,333C225,340,227,352,228,355C228,357,229,359,229,360C232,376,242,399,250,408C252,411,252,410,250,407ZM232,406C220,389,211,366,208,343C206,323,207,301,210,281C212,272,213,267,217,252C220,242,228,218,233,207C235,203,238,197,240,194C240,192,241,190,241,190C241,189,236,199,236,200C236,200,236,200,236,200C235,201,231,209,231,210C231,210,230,211,230,213C229,214,228,217,227,218C227,220,226,221,226,221C226,221,226,222,225,223C225,224,224,227,223,230C222,233,220,236,220,238C219,240,217,246,216,251C216,251,215,254,214,257C211,267,209,275,208,281C208,283,207,286,207,288C204,306,204,332,207,349C211,370,218,389,228,402C229,403,231,405,231,406C232,407,232,407,232,407C233,407,232,407,232,406ZM281,397C279,393,277,389,277,389C277,388,277,388,277,387C276,384,273,376,271,370C271,369,270,366,269,364C269,362,268,359,268,358C268,356,267,354,267,353C265,342,263,320,264,307C264,301,264,299,263,300C263,300,263,304,263,314C263,334,264,348,268,364C268,365,269,366,269,367C269,369,271,374,272,377C275,386,277,391,282,400C282,401,283,401,283,401C283,400,282,399,281,397ZM256,395C255,393,254,391,253,390C253,390,253,388,252,387C241,362,237,327,241,291C241,285,243,276,243,274C243,272,244,270,244,269C245,263,247,253,248,249C249,249,249,245,250,242C252,235,253,233,253,231C254,231,254,228,255,226C256,224,257,222,257,221C257,221,257,221,257,220C257,220,257,219,258,218C258,218,259,216,260,213C260,212,261,211,260,211C260,211,260,211,260,212C259,212,259,213,258,216C258,216,257,218,257,219C257,220,256,221,256,221C256,222,255,222,255,223C255,223,255,224,255,224C255,225,254,226,254,228C253,229,253,230,253,231C252,232,250,239,249,241C249,243,248,244,248,246C248,247,247,249,246,252C246,254,245,257,245,258C244,262,244,263,243,264C243,265,243,267,242,270C241,274,241,276,240,284C237,303,237,334,240,349C240,350,240,352,241,354C241,357,244,366,244,368C245,372,248,380,248,381C248,381,249,383,250,384C250,385,251,386,251,386C251,387,255,397,256,397C256,397,256,398,256,398C257,399,257,399,257,399C257,399,257,397,256,395ZM274,393C273,391,271,388,270,386C270,383,269,381,269,381C268,380,266,372,264,367C263,363,262,357,261,354C261,352,261,349,260,348C258,332,257,307,260,287C261,276,263,263,264,257C264,257,265,255,265,253C266,251,266,248,267,245C269,238,269,236,270,235C270,234,270,233,270,232C271,230,272,226,272,226C272,225,272,226,272,226C270,232,269,235,268,236C268,237,268,238,268,238C268,239,268,239,268,240C267,240,267,243,266,246C265,248,265,251,264,252C259,274,255,307,257,326C258,342,259,352,261,359C261,360,262,362,262,364C263,366,263,368,263,368C264,369,264,370,264,372C266,377,268,384,270,388C274,396,275,398,275,397C275,397,274,395,274,393ZM248,393C248,391,247,391,247,391C247,392,249,397,250,396C250,396,249,395,248,393ZM268,396C268,395,267,394,266,392C266,390,264,387,264,386C264,385,263,382,262,381C261,379,261,376,260,376C260,375,260,372,259,370C258,368,257,365,257,363C257,362,256,360,256,359C253,344,251,318,253,301C253,293,254,282,255,278C255,277,256,274,256,273C256,270,259,256,260,254C260,253,260,251,260,250C261,248,263,242,264,237C264,236,265,235,265,234C265,233,266,230,267,228C268,223,268,222,268,222C267,222,267,223,267,224C267,224,267,225,267,225C266,225,266,228,265,230C264,232,263,235,263,237C262,240,258,254,257,260C256,261,256,263,256,264C256,265,255,268,255,270C254,273,254,276,253,277C253,279,253,282,253,284C252,286,252,289,252,291C250,299,250,316,251,327C251,336,251,340,253,350C253,354,255,362,256,365C257,367,257,369,257,369C258,372,262,384,263,386C264,388,265,390,265,391C266,392,266,394,267,395C267,396,268,397,268,396ZM228,391C226,387,224,382,224,382C224,381,223,379,223,377C221,373,218,362,217,359C217,358,217,357,217,355C208,313,217,258,240,206C241,205,242,203,242,202C242,201,244,197,247,192C249,188,251,184,251,183C251,183,250,183,250,184C241,201,232,220,224,243C223,246,223,249,220,257C218,266,218,265,216,275C212,292,211,318,212,333C213,346,214,353,217,363C218,366,219,370,219,370C219,371,219,372,220,372C220,372,220,372,220,373C220,374,220,374,220,375C221,375,222,378,224,383C224,384,225,386,228,391C229,394,230,394,228,391ZM236,393C236,393,235,391,235,390C218,355,216,310,227,262C231,247,238,223,243,213C244,212,244,210,245,209C247,203,257,182,259,179C260,178,260,176,260,176C260,176,260,176,260,177C260,177,259,178,259,178C259,178,259,178,258,179C258,179,258,181,257,182C254,187,246,204,243,211C242,212,241,214,241,215C240,216,240,216,238,221C237,223,237,225,236,226C236,226,235,229,234,232C233,235,232,237,232,238C231,240,227,254,225,262C225,265,224,268,224,269C223,273,221,286,219,297C218,305,219,334,220,341C220,344,221,348,221,350C221,353,223,361,224,363C224,364,224,365,225,366C225,369,227,375,228,377C228,377,229,378,229,379C231,385,236,395,236,393ZM215,389C214,388,214,386,213,385C213,384,212,383,212,382C211,381,211,380,211,380C211,380,211,379,210,378C209,376,207,368,206,364C204,359,202,348,201,340C200,334,200,305,201,298C204,274,208,256,217,232C218,228,220,224,220,223C220,223,221,221,222,220C222,218,223,216,224,214C227,207,236,189,239,183C240,182,240,181,240,181C240,181,240,181,239,182C239,182,239,183,239,183C238,183,236,187,234,191C233,193,232,195,232,195C232,195,221,217,221,218C221,218,220,219,220,221C217,227,211,245,209,252C204,269,202,278,200,290C200,292,199,295,199,296C198,302,198,317,198,325C198,335,199,343,202,355C202,359,206,371,208,375C208,376,208,377,209,377C209,378,210,380,211,382C211,384,212,385,212,386C213,387,215,390,215,390C216,390,215,390,215,389ZM245,385C241,376,238,365,236,357C236,355,236,353,235,352C231,331,232,298,237,272C237,271,238,268,238,267C238,265,239,263,239,260C240,256,240,256,240,256C240,256,239,256,239,257C239,260,238,263,237,266C237,268,236,270,236,272C234,281,234,285,233,289C233,291,232,295,232,297C232,299,232,307,232,318C232,334,232,337,233,347C234,354,236,363,238,369C239,371,239,372,239,373C239,374,240,375,240,375C240,375,240,375,240,376C240,376,240,377,241,378C241,378,242,380,242,382C244,386,246,390,246,389C246,389,246,387,245,385ZM265,290C265,289,265,289,264,289C264,289,264,290,264,291C264,293,264,293,264,292C265,292,265,291,265,290ZM158,280C158,280,158,279,158,279C158,279,159,278,159,278C160,275,161,271,162,270C162,269,164,263,165,260C165,259,166,258,166,257C166,255,168,246,169,244C170,238,170,237,171,231C172,220,172,200,170,191C168,184,166,175,164,172C164,171,163,170,163,169C163,169,159,161,159,161C159,161,159,161,159,161C159,160,158,160,158,160C158,160,158,161,159,163C160,164,161,166,161,167C163,172,164,175,164,175C164,176,165,176,165,177C166,179,168,187,169,192C172,212,170,232,165,255C164,257,163,263,162,265C162,267,161,269,160,270C159,274,157,281,156,282C156,283,156,283,156,284C156,285,158,281,158,280ZM173,279C174,278,174,277,174,277C175,274,176,272,177,271C177,271,177,270,177,269C177,269,177,268,178,268C178,267,181,259,181,257C185,243,185,241,187,230C188,222,188,206,187,200C186,192,186,191,186,189C185,188,185,186,184,185C184,183,183,182,183,181L183,179L183,181C183,182,183,183,183,183C183,183,184,184,184,184C184,185,184,186,184,187C185,188,185,193,186,199C187,204,187,222,186,227C185,238,182,249,181,255C181,255,180,257,180,258C179,261,175,272,174,274C174,275,174,276,173,277C172,279,172,281,171,282C171,282,171,283,171,283C171,284,172,282,173,279ZM147,280C148,280,148,278,148,277C149,276,149,274,150,274C150,273,151,271,151,269C152,266,153,264,153,263C153,262,155,255,156,249C158,241,159,232,160,220C160,214,159,200,158,194C157,188,157,186,155,182C155,180,154,178,154,177C154,177,153,175,153,174C151,170,148,163,147,163C147,163,148,164,149,167C149,168,150,169,151,171C151,172,152,174,152,175C153,177,155,185,156,189C160,210,159,233,153,257C153,257,153,259,153,260C153,260,152,263,151,266C150,269,149,272,149,273C149,273,149,275,148,275C148,276,148,277,148,277C148,277,147,278,147,278C147,279,147,280,147,280C147,280,146,281,146,281L147,283L147,281C147,281,147,280,147,280ZM183,276C184,273,185,271,185,271C185,271,185,270,185,270C186,267,191,252,192,248C192,247,193,245,193,244C197,226,198,205,194,190C194,189,193,188,193,187C193,184,191,179,190,178C190,178,190,177,190,177C190,176,189,174,187,172C187,171,187,170,187,170C186,169,186,169,186,169C186,169,185,168,185,167C184,165,184,165,184,166C184,166,184,167,184,167C184,167,185,168,185,169C185,169,186,170,186,171C187,171,187,173,188,174C188,176,189,178,190,180C190,181,191,183,191,184C192,185,192,187,192,188C196,204,196,222,192,242C191,248,190,249,188,256C187,262,182,275,181,278C180,279,180,280,181,280C181,280,182,278,183,276ZM172,260C173,259,173,257,173,257C174,256,174,253,175,249C177,241,177,242,178,232C179,226,180,214,179,206C179,201,179,198,178,198C178,198,178,204,178,212C178,221,178,228,178,231C177,233,177,236,177,238C176,240,176,242,176,243C173,253,173,256,172,257C172,258,172,259,172,260C172,260,172,261,171,261C171,261,171,262,171,263C171,264,171,264,171,264C171,263,172,262,172,260ZM162,256C162,255,162,255,161,255C161,256,161,258,161,257C162,257,162,256,162,256ZM241,253C241,252,241,252,241,252C240,253,240,255,241,254C241,254,241,254,241,253ZM163,251C163,250,163,249,163,249C164,248,165,244,164,244C164,244,163,245,163,246C163,247,163,248,163,249C162,250,162,253,162,253C163,253,163,252,163,251ZM161,240C165,218,164,197,158,178C158,175,156,172,156,171C154,166,151,160,151,160C150,160,151,161,151,163C153,166,156,173,157,176C157,177,157,178,158,179C159,183,160,189,161,192C161,193,161,196,162,198C162,199,162,204,162,210C163,222,162,232,160,243C159,250,159,251,160,247C161,245,161,242,161,240ZM188,247C188,245,189,243,189,242C189,240,190,234,191,229C193,219,192,199,190,191C190,190,190,188,189,187C188,182,188,181,187,178C185,174,180,164,180,164C179,163,179,165,181,167C182,169,183,172,184,173C184,175,185,177,185,177C191,193,192,217,188,242C187,247,187,249,187,249C187,249,187,248,188,247ZM165,240C165,238,165,238,165,238C165,239,164,240,164,241C164,243,164,243,165,243C165,242,165,241,165,240ZM181,239C181,238,181,238,181,238C181,239,180,240,180,240C180,243,181,241,181,239ZM166,233C166,232,166,230,167,229C168,224,167,202,165,191C165,188,163,179,162,179C162,179,162,178,162,177C162,177,162,176,161,176C161,176,161,175,161,175C161,175,161,173,160,172C159,171,158,169,158,168C157,167,157,166,157,166C157,167,157,168,158,169C159,170,159,172,159,172C159,173,159,173,160,173C160,173,160,174,160,175C160,175,160,176,160,176C161,176,161,178,161,179C162,180,162,181,163,182C163,184,163,185,164,190C166,201,167,215,166,225C165,236,165,237,166,237C166,236,166,235,166,233ZM182,233C183,232,183,228,183,226C184,221,184,199,183,195C181,186,181,185,179,180C178,175,178,175,174,168C173,165,171,162,171,162C171,162,170,162,170,161C170,161,170,161,170,161C170,161,170,162,171,163C171,164,172,165,172,166C172,166,173,168,174,169C176,175,179,183,180,189C181,192,181,195,182,197C183,204,183,222,181,234C181,235,181,236,182,236C182,236,182,235,182,233ZM175,227C174,227,174,227,174,229C174,230,174,231,175,230C175,229,175,228,175,227ZM273,223C273,222,273,222,273,223C272,223,272,225,273,225C273,225,273,224,273,223ZM175,212C175,195,173,182,169,175C169,174,169,174,169,174C169,173,165,165,164,165C164,165,165,166,165,167C167,171,168,175,169,176C169,177,170,179,170,181C171,184,172,186,172,187C174,199,175,206,175,214C175,218,175,221,175,221C176,220,176,216,175,212ZM155,202C155,201,155,202,155,203C155,205,155,206,155,205C155,204,155,203,155,202ZM154,192C154,192,154,193,154,195L154,196L154,195C154,194,154,193,154,192ZM178,192C177,191,177,193,177,195C178,196,178,196,178,194C178,193,178,192,178,192ZM153,188C153,187,153,187,153,188C153,190,153,190,153,189C153,188,153,188,153,188ZM254,178C254,178,254,177,255,176C256,174,256,174,256,174C256,174,255,174,255,175C254,176,254,177,254,177C253,178,253,179,253,179C254,179,254,178,254,178Z' fill='black'/%3E%3C/svg%3E");
  --font-d:"Space Grotesk",sans-serif;
  --font-b:"Inter",sans-serif;
  --font-m:"IBM Plex Mono",monospace;
  --font-s:"Instrument Serif",serif;
  --ease:cubic-bezier(.16,1,.3,1);
  --nav-h:74px;

  /* ---- Type scale : 最小フォントサイズの定義 ----
     可読性の下限は --fs-nano(13px)。これより小さい指定は作らない。
     --fs-nano  極小モノラベル（インデックス番号・座標・SVG注記）
     --fs-micro ラベル / タグ / ナビゲーション
     --fs-meta  メタ情報 / ボタン / UI テキスト
     --fs-sm    キャプション・補助本文
     --fs-body  本文
     2026-08: 全体を一段上げた。--fs-nano が 103 箇所、--fs-micro が 42 箇所で
     使われている一方 --fs-body は 1 箇所しかなく、巨大な見出しと 11px の
     ラベルの海という構成になっていた。ここを上げると同時に、末尾の
     「Readable type」ブロックで、ラベルではなく実質は本文である要素
     （役職・所属・会社概要の値・誌名・日付・絞り込みボタン・但し書き）を
     このトークン群の外へ出している。site-nav.js の TYPE_FLOOR も
     この値に合わせること。 */
  --fs-nano:13px;
  --fs-micro:14px;
  --fs-meta:15px;
  --fs-sm:16px;
  --fs-body:18px;
}
*{margin:0;padding:0;box-sizing:border-box}
/* rem は :root の font-size に紐づくので --fs-body では動かない。本文 rem 指定
   （.lead 1.05rem など）と clamp() の見出しをまとめて一段上げるのはここ。 */
html{font-size:17px;scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 20px)}
body{
  background:var(--bg);color:var(--text);
  font-family:var(--font-b);font-size:var(--fs-body);line-height:1.6;
  overflow-x:hidden;-webkit-font-smoothing:antialiased;
}
::selection{background:rgba(56,225,255,.28);color:#fff}
::-webkit-scrollbar{width:9px}
::-webkit-scrollbar-thumb{background:#1a1e2e;border:2px solid var(--bg)}
::-webkit-scrollbar-track{background:var(--bg)}
a{color:inherit;text-decoration:none}
img,svg{display:block}
/* em 継承で下限を割らないための保険 */
small,sub,sup{font-size:max(var(--fs-nano),.83em)}
button,input{font:inherit;color:inherit}
:focus-visible{outline:1px solid var(--cyan);outline-offset:3px}

/* film grain */
body::after{
  content:"";position:fixed;inset:-50%;z-index:95;pointer-events:none;opacity:.05;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
/* column guides */
#guides{position:fixed;inset:0;z-index:0;pointer-events:none}
#guides::before,#guides::after{content:"";position:absolute;top:0;bottom:0;width:1px;background:var(--hair)}
#guides::before{left:max(24px,calc((100% - 1180px)/2))}
#guides::after{right:max(24px,calc((100% - 1180px)/2))}

/* fixed edge metadata */
.edge{position:fixed;z-index:3;font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.32em;color:var(--dim);opacity:.55;pointer-events:none;white-space:nowrap}
.edge-l{left:14px;bottom:120px;transform:rotate(180deg);writing-mode:vertical-rl}
.edge-r{right:14px;top:140px;writing-mode:vertical-rl}
@media (max-width:1280px){.edge{display:none}}

.container{width:min(1180px,calc(100% - 48px));margin:0 auto}
section{position:relative;padding:130px 0}

/* ================= Type ================= */
h1,h2{font-family:var(--font-d);font-weight:600;letter-spacing:-.03em}
h2{font-size:clamp(2.2rem,4.2vw,3.6rem);line-height:1.04;margin:34px 0 22px}
.acc{font-family:var(--font-s);font-style:italic;font-weight:400;letter-spacing:0;font-size:1.06em}
.acc-grad{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.lead{color:var(--muted);max-width:54ch;font-size:1.05rem}
.mono{font-family:var(--font-m)}

/* line-mask reveal */
.lm{display:block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}
.js .lmi{display:inline-block;transform:translateY(120%) rotate(2deg);transform-origin:0 100%;
  transition:transform 1.1s var(--ease);transition-delay:var(--d,0s)}
.js .reveal-lines.in .lmi,.js body.loaded #hero .lmi{transform:none}

/* section top rule */
.sec-top{position:relative;display:flex;align-items:baseline;gap:22px;padding-top:20px;
  font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.22em;color:var(--dim)}
.sec-top::before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:var(--line2);
  transform:scaleX(0);transform-origin:left;transition:transform 1.3s var(--ease)}
.js .sec-top.in::before{transform:scaleX(1)}
.sec-top .s-idx{color:var(--cyan)}
.sec-top .s-lbl{color:var(--muted);font-size:var(--fs-body);letter-spacing:.16em}
.sec-top .s-meta{margin-left:auto;color:var(--dim)}
.cross{position:absolute;top:-7px;font-family:var(--font-m);font-size:var(--fs-meta);line-height:1;color:#3a4158}
.cross.c-l{left:-4px}.cross.c-r{right:-4px}

/* Möbius micro-mark — a shared visual grammar derived from the hero field */
.sec-top::after{content:"";position:absolute;left:8px;top:-15px;width:30px;height:30px;background:linear-gradient(135deg,var(--ice),var(--cyan) 50%,#dfb87a);-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;opacity:.72;filter:drop-shadow(0 0 8px rgba(227,235,236,.2));transform:scale(0) rotate(-22deg);transform-origin:center;transition:transform 1s .22s var(--ease),opacity .35s}
.js .sec-top.in::after{transform:scale(1) rotate(0)}
.sec-top .cross.c-l{display:none}

/* generic reveal */
.js .reveal{opacity:0;transform:translateY(28px)}
.js .reveal.in{opacity:1;transform:none;
  transition:opacity .95s var(--ease),transform .95s var(--ease);transition-delay:var(--d,0s)}
.js .sec-top{opacity:1}

/* ================= Buttons ================= */
.btn{
  position:relative;display:inline-flex;align-items:center;gap:12px;cursor:pointer;
  font-family:var(--font-m);font-size:var(--fs-meta);font-weight:500;letter-spacing:.18em;text-transform:uppercase;
  padding:17px 28px;border:1px solid var(--line2);background:transparent;color:var(--text);
  transition:background .3s,color .3s,border-color .3s;white-space:nowrap;will-change:transform;
}
.btn .ar{display:inline-block;transition:transform .3s var(--ease)}
.btn:hover .ar{transform:translateX(6px)}
.btn-primary{background:var(--text);border-color:var(--text);color:#05060b;
  clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%)}
.btn-primary:hover{background:var(--cyan);border-color:var(--cyan)}
.btn-ghost:hover{border-color:var(--text)}
.btn-sm{padding:12px 20px;font-size:var(--fs-micro)}

/* ================= Nav ================= */
nav{position:fixed;top:0;left:0;right:0;z-index:100;transition:background .35s,backdrop-filter .35s;border-bottom:1px solid transparent}
nav.scrolled{background:rgba(5,6,11,.78);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-color:var(--line)}
.nav-in{height:var(--nav-h);display:flex;align-items:center;gap:30px}
.logo{display:flex;align-items:center;gap:12px;font-family:var(--font-d);font-weight:700;letter-spacing:.26em;font-size:14px}
.logo svg{width:24px;height:24px}
.nav-links{display:flex;gap:30px;margin-left:auto;font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.2em;color:var(--dim)}
.nav-links a{transition:color .25s;padding:4px 0}
.nav-links a:hover{color:var(--cyan)}
#burger{display:none;background:none;border:1px solid var(--line2);width:44px;height:40px;cursor:pointer;position:relative;margin-left:auto}
#burger span{position:absolute;left:12px;right:12px;height:1.4px;background:var(--text);transition:.3s}
#burger span:nth-child(1){top:14px}#burger span:nth-child(2){top:20px}#burger span:nth-child(3){top:26px}
nav.open #burger span:nth-child(1){top:20px;transform:rotate(45deg)}
nav.open #burger span:nth-child(2){opacity:0}
nav.open #burger span:nth-child(3){top:20px;transform:rotate(-45deg)}
#mobile-menu{display:none;flex-direction:column;background:rgba(5,6,11,.97);border-bottom:1px solid var(--line);padding:12px 24px 30px}
#mobile-menu a{display:flex;align-items:baseline;padding:15px 2px;border-bottom:1px solid var(--hair);
  font-family:var(--font-d);font-size:22px;letter-spacing:.02em}
nav.open #mobile-menu{display:flex}

/* progress */
#progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:200;background:var(--cyan);
  transform:scaleX(0);transform-origin:left}

/* cursor glow */
#glow{position:fixed;top:0;left:0;width:620px;height:620px;z-index:1;pointer-events:none;
  background:radial-gradient(circle,rgba(90,150,255,.08) 0%,rgba(90,150,255,0) 62%);
  mix-blend-mode:screen;display:none}
@media (pointer:fine){#glow{display:block}}

/* ================= Hero ================= */
#hero{position:relative;min-height:100svh;display:flex;align-items:center;padding:calc(var(--nav-h) + 30px) 0 90px;overflow:hidden}
#field{position:absolute;inset:0;z-index:0;width:100%;height:100%}
#hero::before{content:"";position:absolute;inset:0;z-index:0;
  background:
    radial-gradient(50% 40% at 22% 16%, rgba(56,225,255,.08), transparent 70%),
    radial-gradient(44% 40% at 84% 70%, rgba(139,123,255,.09), transparent 70%);
}
#hero::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(100deg,rgba(5,6,11,.62) 0%,rgba(5,6,11,.26) 34%,transparent 58%),
             linear-gradient(180deg,transparent calc(100% - 140px),var(--bg))}
.hero-grid{position:relative;z-index:2;display:grid;grid-template-columns:1fr;align-items:center}
.hero-copy{max-width:660px}
.badge{display:inline-block;font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.16em;color:var(--muted);margin-bottom:34px}
.badge b{color:var(--mint);font-weight:400}
h1{font-size:clamp(2.9rem,6.6vw,5.6rem);line-height:.99;margin-bottom:30px}
.hero-sub{color:var(--muted);font-size:1.12rem;max-width:50ch;margin-bottom:40px}
.hero-cta{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:34px}
/* お問い合わせページでは .hero-cta が .lead-stack の最後の子で、後ろに .hero-note が
   続かない。34px は主導線ボタンの下に残る死んだ余白なので、当該ページだけ落とす。 */
.contact-page .hero-cta{margin-bottom:0}
/* 2026-08: var(--dim)（#6d7b8a・対 --bg 4.68:1）から --muted へ。設立年などを
   載せるヒーロー下のメタ行は小さな等幅字で、暗背景では読みづらいとの指摘
   （もう少し見やすく）。同じヒーローのメタ行である .badge が既に --muted
   （#9da7b1・8.29:1）なので、それに合わせる。 */
.hero-note{font-family:var(--font-m);font-size:var(--fs-micro);color:var(--muted);letter-spacing:.14em;margin-bottom:56px}
.hero-note em{font-style:normal;color:#3a4158;padding:0 10px}
/* 2026-08: トップページ（/ と /jp/ のみ、body.home-page）では #6d7b8a の文字を
   すべて #9da7b1（= --muted の値）へ、との指摘。トークン --dim を body 配下で
   再定義する。レンダリング済み DOM を全要素監査した結果、トップページの --dim は
   ナビ・フッター見出し・言語切替・edge ラベル・news 矢印などの文字色のみで、
   ボーダー・背景・SVG 図形には使われていないため一括再定義で安全。カスタム
   プロパティの継承なのでメディアクエリの詳細度問題も生じない。他ページは
   :root の --dim(#6d7b8a) のまま。 */
body.home-page{--dim:#9da7b1}

.js .fx{opacity:0;transform:translateY(18px);filter:blur(6px)}
.js body.loaded .fx{opacity:1;transform:none;filter:blur(0);
  transition:opacity 1s var(--ease),transform 1s var(--ease),filter 1s ease;transition-delay:var(--d,0s)}

@keyframes pulse{0%,100%{opacity:1}50%{opacity:.25}}
.scroll-cue{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);z-index:2;
  font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.4em;color:var(--dim);
  display:flex;flex-direction:column;align-items:center;gap:10px}
.scroll-cue::after{content:"";width:1px;height:46px;background:linear-gradient(180deg,var(--cyan),transparent);
  animation:cue 2.4s ease-in-out infinite}
@keyframes cue{0%{transform:scaleY(0);transform-origin:top}45%{transform:scaleY(1);transform-origin:top}55%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

@keyframes dash{to{stroke-dashoffset:-56}}

/* ================= Technology ================= */

/* ================= Footer ================= */
footer{border-top:1px solid var(--line);padding:0}
.foot-brand p{color:var(--dim);font-size:var(--fs-sm);margin-top:16px;max-width:26ch}
.foot-bottom{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;
  border-top:1px solid var(--hair);padding:26px 0;color:var(--dim);font-size:var(--fs-sm)}

/* ================= Responsive ================= */
@media (max-width:1020px){
  .hero-grid{grid-template-columns:1fr;gap:48px}
                        .foot-brand{grid-column:span 2;border-bottom:1px solid var(--hair)}
    }
@media (max-width:680px){
  section{padding:88px 0}
  .nav-links{display:none}
  #burger{display:block}
                    .scroll-cue{display:none}
  }

/* ================= Reduced motion ================= */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
  html{scroll-behavior:auto}
  .js .fx,.js .reveal{opacity:1 !important;transform:none !important;filter:none !important}
  .js .lmi{transform:none !important}
  .js .sec-top::before{transform:scaleX(1) !important}
  }

/* ================= xFOREST Edition ================= */
/* 和文の書体。body（下）は Noto Sans JP を指しているのに、見出しは h1,h2 の
   var(--font-d)（104）と h3 級を捕まえる 13 本の font: 一括指定に上書きされて
   いた。Space Grotesk / Inter / IBM Plex Mono / Instrument Serif はいずれも
   CJK と仮名の unicode-range を 1 つも持たない（Google Fonts の @font-face
   419 面を機械確認：CJK/仮名を宣言するのは Noto Sans JP の 372 面のみ）。
   つまり和文見出しは今まで OS 依存のフォールバックで出ていて、macOS と
   Windows で別の書体だった。

   フォールバックは 1 文字ずつ効くので、各変数の «末尾» に Noto Sans JP を
   足すだけでよい。こうすると欧文は今までどおり Space Grotesk / Inter /
   IBM Plex Mono のまま、和文だけが Noto Sans JP に落ちる。Noto Sans JP に
   先頭を譲ると欧文字幅まで変わり、"RNA" を含む見出しの折り返しが動く
   （実測：「RNA生物学を貫く」＋「3つの経路」が 3 行に割れた）ので順序は重要。
   変数を差し替える形にしたので、font: 一括指定 13 本と詳細度を争わずに済み、
   ボタンやナビなど見出し以外の和文にも同じ書体が行き渡る。
   --font-s（Instrument Serif）も同じ形で末尾に Noto Sans JP を足した。ここは
   font-style:italic が掛かる唯一の場所で、和文に本物の斜体が無いため今までは
   フォールバック書体の «合成斜体» が出ていた。誰も選んでいない見た目なので
   止める。和文に斜体が無いのは Noto Sans JP に限らず、Google Fonts の和文
   書体すべて：Noto Sans JP / Noto Serif JP / IBM Plex Sans JP / Zen Old Mincho /
   Shippori Mincho / Klee One / Zen Kaku Gothic New の 7 ファミリで ital@1 が
   HTTP 400 を返す（css2 API に機械確認）。つまり «明朝を足せば斜体が直る» と
   いう道は無い。

   止め方は font-style:normal ではなく font-synthesis-style:none。/jp/news/ の
   「archive」は和文を含まない Latin の .acc で、Instrument Serif は本物の
   italic 面を持つ（この link は ital@0;1 を読み込んでいる）。normal にすると
   その Latin まで立ってしまうが、合成を切るだけなら «本物の斜体を持つ書体は
   そのまま、持たない書体だけが立つ» と字ごとに分かれる。実測：archive の幅は
   156.55px で変更前と同一・Instrument Serif の 7 グリフのまま、和文は傾き
   （左端のずれの傾き）が -0.276 から -0.026 になった。

   明朝（Noto Serif JP）を足す案は測って見送った。斜体は上のとおり直らない
   まま、.acc の文字を覆う subset 面を新たに引くので /jp/news/ で 2 リクエスト
   65,228 バイト、/jp/technology/moa/ で 9 リクエスト 147,956 バイト増える。
   28 か所の短い添え字にその代償は見合わない。強調は残る字送りと
   ウェイト差（見出し 600 に対して .acc は 400）と .acc-grad の階調で付く。 */
/* 和文書体は游ゴシックを第一候補にする（リポジトリ所有者の指定）。webfont は
   増やさない：游ゴシックは OS 標準で、在る機械では取得ゼロで使える。

   ファミリ名は OS ごとに違い、ここが唯一の落とし穴なので順に理由を書く。
   1. "Yu Gothic Medium" を先頭に置く。Windows は游ゴシックの Medium 面を
      «独立したファミリ名» で見せる。Windows の Regular は画面で細く見えるので、
      Medium を先に名指しするのが通例。
   2. "游ゴシック Medium" は 1 と同じ面の和文名。欧文名が引けない古い Windows と
      ロケール依存の実装のための別名で、在庫が無ければ読み飛ばされる。
   3. YuGothic（空白なし）が macOS のファミリ名。必ず "Yu Gothic"（空白あり）より
      «前»。macOS の YuGothic は normal でも W3/Medium 相当なので細くならない。
   4. "游ゴシック体" は 3 の和文名。
   5. "Yu Gothic"（空白あり）は Windows の Regular ファミリで、游ゴシック名の
      最後の受け皿。Medium 系を先に置いたので、ここへ来るのは Medium が
      引けない場合だけ。
   "Yu Gothic UI" は «入れない»。UI 用に字送りを詰めた別ファミリで、本文や
   見出し向きではない。Windows がこの名前も見せるので混同しやすい。

   游ゴシックの後ろは実在する和文書体で埋める。iOS と旧 macOS に游ゴシックは
   無いので Hiragino、Windows 8.1 より前は Meiryo。最後の砦として
   "Noto Sans JP"（webfont）を残す：Android と Linux はここに落ちる。これを
   外すと OS 任せに戻って本 PR が買った決定性を失うので、link も含めて触らない。
   総称（sans-serif / monospace / serif）は必ず最後。途中に置くと以降の和文名が
   到達不能になる。

   欧文書体は今までどおり先頭のまま（Space Grotesk / Inter / IBM Plex Mono /
   Instrument Serif）。上の «欧文の字幅を動かさない» 方針は変えていないので、
   和文名を何本足しても欧文の 1 文字も動かない。実測でも英語ページ・和文見出し
   中の Latin ともに完全一致（下の計測を参照）。

   届く範囲。var(--font-d) を使う見出し（h1,h2 と font: 一括指定 13 本）、
   var(--font-m) のナビ・ボタン・ラベル、var(--font-s) の .acc は游ゴシックに
   なる。«本文» は下の html[lang="ja"] body が Noto Sans JP を先頭に持つため
   Noto Sans JP のまま。この規則は main 由来（242c107）で、和文ページの本文中の
   Latin まで Noto Sans JP で組んでいる（実測 396.42px 対 Inter 404.47px）。
   ここに游ゴシックを差すと «Latin を動かさない» に反するので今回は触らない。
   本文まで游ゴシックにするなら 1 行の追加で足りるが、和文ページの本文の Latin
   の見た目が変わる判断を含むので所有者の確認待ちとする。

   検証の限界を明記する。この計測コンテナに游ゴシック / Hiragino / Meiryo は
   1 つも無い（和文は IPAGothic と WenQuanYi Zen Hei だけ）。CDP の
   CSS.getPlatformFontsForNode で確認できたのは «在らない名前は読み飛ばされ、
   fontconfig の代替（DejaVu Sans）に化けることなく Noto Sans JP まで落ちる»
   ことと «並びが参照されている» ことまで。Windows と macOS で実際にどう見えるか、
   1 の Medium 指定が効いて細さが直るかは «未検証»。 */
html[lang="ja"]{
  --font-d:"Space Grotesk","Yu Gothic Medium","游ゴシック Medium",YuGothic,"游ゴシック体","Yu Gothic","Hiragino Sans","Hiragino Kaku Gothic ProN",Meiryo,"Noto Sans JP",sans-serif;
  --font-b:"Inter","Yu Gothic Medium","游ゴシック Medium",YuGothic,"游ゴシック体","Yu Gothic","Hiragino Sans","Hiragino Kaku Gothic ProN",Meiryo,"Noto Sans JP",sans-serif;
  --font-m:"IBM Plex Mono","Yu Gothic Medium","游ゴシック Medium",YuGothic,"游ゴシック体","Yu Gothic","Hiragino Sans","Hiragino Kaku Gothic ProN",Meiryo,"Noto Sans JP",monospace;
  --font-s:"Instrument Serif","Yu Gothic Medium","游ゴシック Medium",YuGothic,"游ゴシック体","Yu Gothic","Hiragino Sans","Hiragino Kaku Gothic ProN",Meiryo,"Noto Sans JP",serif}
html[lang="ja"] .acc{font-synthesis-style:none}
html[lang="ja"] body{font-family:"Noto Sans JP",var(--font-b)}

/* 英語ページに置かれた和文の受け皿。英語ページは Noto Sans JP を読み込んで
   おらず html[lang="ja"] も当たらないので、和文の指定が 1 つも無い。言語の
   手がかりが無いまま西欧ロケールのブラウザに渡ると簡体字の書体が選ばれる。
   実測：about/company/ の <span lang="ja">株式会社イクスフォレスト
   セラピューティクス</span>（.company-facts dd が --font-b＝Inter で組む。
   同じ詳細度の 536 行より後に来る側が勝つ）の 21 文字が WenQuanYi Zen Hei、
   つまり中文書体で出ていた。サイト全体でここだけ。

   21 文字のために webfont を 1 ファミリ増やすのは見合わないので、OS に必ず
   ある和文書体を並べる。ダウンロードは増えず、link にも手を入れない。
   Inter を先頭に残すのは «欧文の字幅を動かさない» という上の方針と同じで、
   この span に混じる半角空白と将来の欧文は Inter のまま出る。総称は必ず
   最後：途中に置くと以降の和文名が到達不能になる。

   html:not([lang="ja"]) で英語ページに閉じている。詳細度 (0,2,1) は
   .company-facts dd の (0,2,0) より強いので、記述順に関係なく勝つ。
   和文ページ側は上のブロックがそのまま効き、この規則は当たらない。

   並べたのは各 OS に標準で載っている名前：macOS は Hiragino Sans、
   Windows 8.1 以降は Yu Gothic、それ以前は Meiryo、Linux と Android は
   Noto Sans CJK JP。webfont ではないので link は増えない。

   検証の限界も書いておく。この計測コンテナには上のどれも入っていない
   （和文書体は IPAGothic と WenQuanYi Zen Hei だけ）ため、コンテナ上では
   規則の «前» と «後» が同じ WenQuanYi Zen Hei のままで、効いていることを
   直接は示せない。そこで実機で Hiragino が座る位置にコンテナに実在する
   IPAGothic を差し込んで測ると、21 文字は IPAGothic×21 に移り、
   欧文は Inter×1 のまま、他の dd の幅も 310.16 / 76.41 / 557.53 / 273.3 /
   302.81px と 1 つも動かなかった。つまり «並びは参照されていて、和文名が
   在れば中文書体より先に勝つ» ところまでは実測できている。実機で
   どの面が出るかは OS 側の在庫次第。

   なお同じ掃き出しで見つかった英語ページ上の和文はもう 11 か所あるが、
   1 か所（CBI 講演会のニュースの和文タイトル。生成元は
   content/news/2023-05-26-cbi-lecture.md の 15 行目）を除く 10 か所は
   英文中の全角括弧「（）」で、書体ではなく原稿の誤りなので別途直す。
   いずれも lang を持たず .article-body の lang="en" を継ぐため、
   lang による選択子では届かない。 */
html:not([lang="ja"]) [lang="ja"]{
  font-family:"Inter","Hiragino Sans","Hiragino Kaku Gothic ProN","Yu Gothic Medium","Yu Gothic",Meiryo,"Noto Sans CJK JP","Noto Sans JP",sans-serif}
.skip-link{position:fixed;left:18px;top:12px;z-index:999;transform:translateY(-150%);background:var(--text);color:var(--bg);
  padding:10px 14px;font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.08em;transition:transform .2s}
.skip-link:focus{transform:none}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;
  clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.eyebrow{display:block;font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.28em;color:var(--mint);text-transform:uppercase}

/* brand */
.logo span{display:inline-flex;align-items:baseline}
.logo b{color:var(--mint);font-size:1.22em;font-weight:600;margin-right:1px}
.logo .brand-mark{width:27px;height:27px;overflow:visible;background:linear-gradient(135deg,var(--ice),var(--cyan) 50%,#dfb87a);-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;filter:drop-shadow(0 0 7px rgba(227,235,236,.18))}
.brand-mark path,.brand-mark circle{opacity:0}

/* navigation additions */
.lang-switch{display:flex;align-items:center;gap:5px;margin-left:4px;color:var(--dim);font-family:var(--font-m);font-size:var(--fs-micro)}
.lang-switch button,.mobile-lang button{appearance:none;border:0;background:none;color:var(--dim);font-family:var(--font-m);font-size:var(--fs-micro);
  letter-spacing:.14em;cursor:pointer;padding:7px 3px;transition:color .25s}
.lang-switch button:hover,.lang-switch button[aria-pressed="true"],.mobile-lang button[aria-pressed="true"]{color:var(--mint)}
.nav-contact{margin-left:4px}
#mobile-menu>a:last-of-type{color:var(--mint)}
.mobile-lang{display:flex;gap:18px;padding-top:18px}
.mobile-lang button{border:1px solid var(--line);padding:10px 14px}
/* The drawer no longer carries a language block: EN / JP is in the header at
   every width, so a second copy behind the burger is a duplicate control.
   Hidden rather than deleted from the markup — site-nav.js uses .mobile-lang as
   the insertion anchor for the drawer's type switch, so the node has to stay.
   The #id keeps this ahead of the .detail-page .mobile-lang rule further down. */
#mobile-menu .mobile-lang{display:none}

/* hero copy only — canvas and its 3D rendering remain unchanged */
.hero-copy{max-width:760px}
#hero h1{font-size:clamp(2.8rem,5.75vw,5.2rem)}
#hero .badge{color:#aab2c6}
#hero .badge::before{content:"";display:inline-block;width:6px;height:6px;background:var(--mint);border-radius:50%;margin-right:12px;
  box-shadow:0 0 18px rgba(92,242,192,.75);animation:pulse 2.5s infinite}

/* shared section framing */
#science,#technology,#pipeline,#advantage,#validation,#about,#join{isolation:isolate;overflow:clip}
.section-heading{display:grid;grid-template-columns:minmax(0,1fr);margin-bottom:56px}
.section-heading.split{grid-template-columns:minmax(0,1.2fr) minmax(280px,.65fr);gap:70px;align-items:end}
.section-heading.split .lead{margin-bottom:8px}
.section-heading h2{max-width:900px}
.section-orbit{position:absolute;z-index:-1;width:760px;height:456px;pointer-events:none;background:linear-gradient(100deg,var(--cyan),var(--mint) 48%,var(--violet));-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;opacity:.038;filter:drop-shadow(0 0 22px rgba(81,212,214,.22))}
.section-orbit::before,.section-orbit::after{display:none}
.orbit-a{right:-310px;top:160px;transform:rotate(-11deg)}
.orbit-b{width:900px;height:540px;left:-490px;top:310px;transform:rotate(14deg)}
.orbit-c{width:680px;height:408px;right:-310px;bottom:120px;transform:rotate(-18deg)}

/* proof strip */
#proof{padding:0;border-top:1px solid var(--hair);border-bottom:1px solid var(--hair);background:rgba(7,9,15,.7)}
.proof-grid{display:grid;grid-template-columns:1.55fr repeat(3,1fr);border-left:1px solid var(--hair);border-right:1px solid var(--hair)}
.proof-metric{min-height:175px;padding:34px 30px;display:flex;flex-direction:column;justify-content:center}
.proof-metric{border-left:1px solid var(--hair);gap:14px}
.proof-metric>span:last-child{font-family:var(--font-m);font-size:var(--fs-micro);line-height:1.5;letter-spacing:.15em;color:var(--dim);text-transform:uppercase}
/* #proof has no padding of its own and .proof-signal is pinned to its bottom edge,
   so the source line has to carry the clearance itself. */
.proof-source{padding-bottom:28px}

/* science */
.science-stage{display:grid;grid-template-columns:360px minmax(0,1fr);min-height:560px;border:1px solid var(--line);background:rgba(7,9,15,.78)}
.science-copy{border-right:1px solid var(--line);display:flex;flex-direction:column}
.science-step{flex:1;display:grid;grid-template-columns:44px 1fr;gap:16px;padding:34px 30px;border-bottom:1px solid var(--hair);
  position:relative;transition:background .35s}
.science-step:last-child{border-bottom:0}
.science-step.active{background:linear-gradient(110deg,rgba(92,242,192,.08),transparent)}
.science-step.active::after{content:"";position:absolute;right:-1px;top:20%;bottom:20%;width:1px;background:var(--mint);
  box-shadow:0 0 22px rgba(92,242,192,.8)}
.step-no{font-family:var(--font-m);font-size:var(--fs-micro);color:var(--mint);letter-spacing:.16em;padding-top:5px}
.science-step h3{font-family:var(--font-d);font-size:1.16rem;margin-bottom:8px}
.science-step p{color:var(--muted);font-size:var(--fs-sm);line-height:1.65}
.rna-universe{position:relative;display:grid;place-items:center;overflow:hidden;padding:20px}
.rna-universe::before{content:"";position:absolute;inset:0;background-image:linear-gradient(var(--hair) 1px,transparent 1px),
  linear-gradient(90deg,var(--hair) 1px,transparent 1px);background-size:40px 40px;-webkit-mask-image:radial-gradient(circle,#000 0,transparent 76%);mask-image:radial-gradient(circle,#000 0,transparent 76%);opacity:.55}
.rna-universe svg{width:100%;height:auto;position:relative;z-index:1}
.genome-ring circle,.genome-ring path,.motif-loop path,.protein-target path,.protein-target circle,.molecule circle,.molecule path{
  fill:none;stroke:rgba(174,212,225,.7);stroke-width:1.4}
.genome-ring path{stroke:rgba(56,225,255,.55)}
.flow-line{fill:none;stroke:url(#rnaFlow);stroke-width:2;stroke-dasharray:8 9;animation:dash 4s linear infinite}
.flow-line.ghost{opacity:.35;stroke-width:1}
.rna-node circle{fill:#091510;stroke:var(--mint);stroke-width:1}
.rna-node text{fill:#c6ffe8;text-anchor:middle;font:var(--fs-nano) var(--font-m)}
.motif-loop path{stroke:rgba(139,123,255,.65)}
.molecule circle,.molecule path{stroke:var(--amber)}
.molecule{filter:drop-shadow(0 0 10px rgba(255,209,102,.26))}
.protein-target{opacity:.58}
.measure{stroke:var(--hair)}
.fig-label,.coord-label{font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.14em;fill:var(--dim)}
.fig-label.hot{fill:var(--mint)}
/* 861〜1080pxでは2カラムに挟まれて図が最も縮む。下限まで拡大した右端の
   ラベルが viewBox を越えるので、この帯だけ右寄せにして内側へ逃がす */
@media (min-width:861px) and (max-width:1080px){.fig-label.hot+.fig-label{text-anchor:end}}
.coord-label{font-size:var(--fs-nano)}
.science-principles{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);border-top:0}
.principle{padding:34px 30px;min-height:220px}
.principle+.principle{border-left:1px solid var(--hair)}
.principle>span{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.2em;color:var(--mint)}
.principle h3{font-family:var(--font-d);font-size:1.22rem;line-height:1.25;margin:34px 0 12px}
.principle p{font-size:.9rem;color:var(--muted)}

/* matrix system */
.matrix-system{border:1px solid var(--line);background:rgba(6,8,14,.9);position:relative;overflow:hidden}
.matrix-system::before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 38%,rgba(92,242,192,.08),transparent 38%)}
.matrix-header{min-height:110px;padding:26px 30px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:relative;z-index:1}
.system-tag,.panel-index{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.2em;color:var(--mint)}
.matrix-header h3{font:600 1.8rem var(--font-d);margin-top:4px}
.system-status{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.18em;color:var(--dim);display:flex;align-items:center;gap:10px}
.system-status i,.pipeline-note i{width:6px;height:6px;background:var(--mint);border-radius:50%;box-shadow:0 0 12px rgba(92,242,192,.7)}
.matrix-flow{min-height:440px;display:grid;grid-template-columns:1fr 1.45fr 1fr;position:relative;z-index:1}
.library-panel{padding:34px 30px;border-right:1px solid var(--line);position:relative;overflow:hidden}
.library-panel:last-child{border-right:0;border-left:1px solid var(--line)}
.library-panel h4{font:600 1.25rem var(--font-d);margin:24px 0 10px}
.library-panel p{color:var(--muted);font-size:var(--fs-sm);max-width:27ch}
.rna-bars{height:150px;position:absolute;left:30px;right:30px;bottom:32px;display:flex;align-items:flex-end;gap:8px}
.rna-bars span{height:var(--h);flex:1;border-top:1px solid var(--cyan);background:linear-gradient(180deg,rgba(56,225,255,.3),rgba(56,225,255,.02));
  animation:barSense 3s ease-in-out infinite alternate}
.rna-bars span:nth-child(2n){animation-delay:-.8s}.rna-bars span:nth-child(3n){animation-delay:-1.6s}
@keyframes barSense{to{transform:scaleY(.72);opacity:.55}}
.compound-cluster{position:absolute;width:190px;height:150px;bottom:24px;left:50%;transform:translateX(-50%)}
.atom{position:absolute;width:30px;height:30px;border:1px solid var(--amber);border-radius:50%;background:rgba(255,209,102,.04);z-index:2}
.a1{left:12px;top:54px}.a2{left:65px;top:16px}.a3{left:119px;top:48px}.a4{left:95px;top:104px}.a5{left:39px;top:105px}
.bond{position:absolute;height:1px;background:rgba(255,209,102,.55);transform-origin:left;z-index:1}
.b1{width:61px;left:34px;top:66px;transform:rotate(-36deg)}.b2{width:59px;left:89px;top:34px;transform:rotate(31deg)}
.b3{width:59px;left:133px;top:74px;transform:rotate(114deg)}.b4{width:60px;left:111px;top:118px;transform:rotate(180deg)}
.matrix-panel{position:relative;padding:34px 40px 34px 58px;display:grid;place-items:center}
.matrix-grid{display:grid;grid-template-columns:repeat(12,1fr);grid-template-rows:repeat(8,1fr);gap:4px;width:min(100%,420px);aspect-ratio:1.5}
.matrix-cell{background:#0d1220;border:1px solid rgba(255,255,255,.03);transition:background .4s,box-shadow .4s}
.matrix-cell.low{background:rgba(56,225,255,.12)}.matrix-cell.mid{background:rgba(92,242,192,.34)}
.matrix-cell.high{background:var(--mint);box-shadow:0 0 13px rgba(92,242,192,.6)}
.matrix-cell.violet{background:rgba(139,123,255,.45)}
.matrix-scan{position:absolute;left:40px;right:40px;height:1px;top:22%;background:linear-gradient(90deg,transparent,var(--mint),transparent);
  box-shadow:0 0 14px rgba(92,242,192,.7);animation:matrixScan 4.6s ease-in-out infinite}
@keyframes matrixScan{0%,100%{top:20%;opacity:0}10%,90%{opacity:1}50%{top:79%}}
.axis{position:absolute;z-index:3;font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.18em;color:var(--muted)}
.axis-y{left:14px;top:50%;writing-mode:vertical-rl;transform:translateY(-50%) rotate(180deg);transform-origin:center}.axis-x{bottom:10px;left:50%;transform:translateX(-50%)}
.matrix-readout{position:absolute;top:16px;right:20px;display:flex;gap:10px;align-items:baseline;font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.12em;color:var(--dim)}
.matrix-readout strong{color:var(--mint);font-size:var(--fs-nano);font-weight:500}
.discovery-output{display:grid;grid-template-columns:repeat(4,1fr);position:relative;border-top:1px solid var(--line);min-height:122px}
.output-line{position:absolute;left:12.5%;right:12.5%;top:37px;height:1px;background:linear-gradient(90deg,var(--cyan),var(--mint),var(--violet));opacity:.38}
.output-node{padding:28px 24px 24px;text-align:center;position:relative}
.output-node::before{content:"";display:block;width:9px;height:9px;background:var(--cell);border:1px solid var(--dim);border-radius:50%;margin:4px auto 20px;position:relative;z-index:1}
.output-node.hot::before{background:var(--mint);border-color:var(--mint);box-shadow:0 0 18px rgba(92,242,192,.85)}
.output-node b{display:block;font:500 var(--fs-sm) var(--font-d);margin-top:6px}
.tech-portfolio{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);border-top:0;background:var(--line);gap:1px}
.tech-card{min-height:290px;padding:30px 26px;background:var(--cell);position:relative}
.tech-no,.tech-state{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.18em;color:var(--dim)}
.tech-state{float:right;color:var(--mint)}
.tech-card h3{font:600 1.3rem var(--font-d);margin:70px 0 16px}
.tech-card p{color:var(--muted);font-size:var(--fs-sm)}

/* pipeline */
.pipeline-wrap{border:1px solid var(--line);background:rgba(7,9,15,.74)}
.pipeline-note{min-height:62px;padding:0 24px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;
  font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.16em;color:var(--dim)}
.pipeline-note>span:first-child{display:flex;align-items:center;gap:10px;color:var(--muted)}
.pipeline-table{overflow-x:auto}
.pipeline-head,.pipeline-row{display:grid}
.pipeline-head{background:rgba(255,255,255,.015);border-bottom:1px solid var(--line)}
.pipeline-head span{padding:18px 14px;font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.1em;color:#8c9bb0;text-align:center;border-right:1px solid var(--hair)}
.pipeline-head span:first-child,.pipeline-head span:nth-child(2){text-align:left}
.pipeline-group{height:39px;padding:0 14px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--hair);font:600 var(--fs-nano) var(--font-m);letter-spacing:.13em;text-transform:uppercase;color:var(--mint);background:rgba(92,242,192,.025)}
.pipeline-group i{width:5px;height:18px;border-radius:2px;background:currentColor}.pipeline-group.violet{color:var(--violet);background:rgba(139,123,255,.025)}.pipeline-group.blue{color:#4b9cff;background:rgba(75,156,255,.025)}.pipeline-group.indigo{color:#6575ff;background:rgba(101,117,255,.025)}
.pipeline-row{min-height:78px;border-bottom:1px solid var(--hair);--pipeline:var(--mint)}
.pipeline-row.violet{--pipeline:var(--violet)}.pipeline-row.blue{--pipeline:#4b9cff}.pipeline-row.indigo{--pipeline:#6575ff}
.pipeline-row:last-child{border-bottom:0}
.pipeline-cell{padding:15px 12px;display:flex;align-items:center;border-right:1px solid var(--hair);position:relative}
.pipeline-cell.program{font:500 1rem var(--font-d);letter-spacing:.02em;color:var(--text)}
.pipeline-cell.target-class{font:500 var(--fs-micro)/1.4 var(--font-m);letter-spacing:.045em;color:var(--muted)}
.stage-cell{justify-content:center;overflow:hidden}
.stage-cell::after{content:"";position:absolute;left:0;right:0;top:50%;height:5px;background:var(--hair)}
.stage-cell:nth-child(3)::after{left:50%}.stage-cell.active::after{background:var(--pipeline)}
/* --stage-pct (from PR #139 / Issue #135: "その段のどこまで来たか" — how far
   through the current stage a program is, not just which stage) is written
   inline on the .current cell by detail.js's stagePctStyle(), sourced from
   programs[].stagePct in site-data.js. Every position below that used to
   hard-code 50% (the stage's midpoint) now reads var(--stage-pct,50%)
   instead, so a row without stagePct keeps sitting at dead centre exactly as
   before, and one with it moves its cutoff, ring and (further down, where
   the animated variant of these rules lives) sweep endpoint together.
   The ring's ::before left is clamp()ed (2026-08, Hiroki: chemoresistance's
   ring at stagePct 2 rendered as a half-circle) because .stage-cell has
   overflow:hidden — a raw `pct - radius` can go negative (or past the
   right edge near 100%) and get sliced by the cell's own boundary. The
   clamp keeps the ring's full box inside its own cell — 2px of breathing
   room off either edge — for ANY stagePct, not just this row's, so a
   future value near 0% or 100% can't reproduce the same clip. */
.stage-cell.current::after{right:calc(100% - var(--stage-pct,50%))}
.stage-cell.current::before{content:"";position:absolute;left:clamp(2px,calc(var(--stage-pct,50%) - 9px),calc(100% - 18px));top:calc(50% - 9px);width:16px;height:16px;border:2px solid var(--pipeline);border-radius:50%;background:#090b12;z-index:2;box-shadow:0 0 14px color-mix(in srgb,var(--pipeline) 38%,transparent)}
.pipeline-target{position:relative;z-index:3;color:var(--pipeline);font:500 var(--fs-micro)/1.3 var(--font-m);letter-spacing:.05em;text-align:center;background:#090b12;padding:5px}
.program-status{align-items:flex-start;justify-content:center;flex-direction:column;gap:5px;border-right:0}.program-status strong,.program-status small{font:500 var(--fs-micro)/1.4 var(--font-m);letter-spacing:.025em;color:var(--text)}.program-status small{color:var(--dim)}
.pipeline-disclaimer{border-top:1px solid var(--line);padding:18px 24px;color:var(--dim);font-size:var(--fs-sm)}
.pipeline-cards{display:none}

.advantage-copy>span,.advantage-metric>span,.advantage-metric small,.advantage-detail{font:500 var(--fs-nano)/1.45 var(--font-m);letter-spacing:.15em;color:var(--mint)}
.advantage-proofbar{display:grid;grid-template-columns:repeat(3,1fr);margin-bottom:28px;border:1px solid rgba(101,194,194,.18);background:linear-gradient(90deg,rgba(11,27,61,.78),rgba(11,55,102,.62),rgba(8,21,42,.84))}.advantage-proofbar article{display:grid;grid-template-columns:110px 1fr;align-items:baseline;gap:18px;padding:20px 24px;border-right:1px solid rgba(101,194,194,.14)}.advantage-proofbar article:last-child{border-right:0}.advantage-proofbar span{font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.16em;color:#51d4d6;text-transform:uppercase}.advantage-proofbar strong{font:600 clamp(1.05rem,1.8vw,1.45rem)/1.2 var(--font-d);letter-spacing:-.02em}.advantage-proofbar small{font:500 var(--fs-nano) var(--font-m);letter-spacing:.08em;color:#91a1b8}
.advantage-stack{border:1px solid var(--line)}
.advantage-row{display:grid;grid-template-columns:285px 1fr;min-height:360px;border-bottom:1px solid var(--hair);background:rgba(7,9,15,.76)}.advantage-row:last-child{border-bottom:0}
.advantage-metric{padding:34px 30px;border-right:1px solid var(--line);display:flex;flex-direction:column;justify-content:center;background:radial-gradient(circle at 50% 55%,rgba(92,242,192,.1),transparent 54%)}
.advantage-metric strong{font:600 clamp(3.6rem,7vw,6.2rem)/.85 var(--font-d);letter-spacing:-.06em;margin:30px 0 18px}.advantage-metric sup{font-size:max(var(--fs-nano),.42em);color:var(--mint)}.advantage-metric small{color:var(--dim)}
.advantage-copy{padding:42px 44px;position:relative;overflow:hidden}.advantage-copy h3{font:500 clamp(1.8rem,3.3vw,3rem)/1.05 var(--font-d);margin:32px 0 16px}.advantage-copy>p{color:var(--muted);max-width:70ch}
.advantage-compare{margin-top:34px;display:grid;grid-template-columns:125px 1fr;border-top:1px solid var(--hair);border-bottom:1px solid var(--hair)}.advantage-compare b,.advantage-compare span{padding:13px 12px;font:500 var(--fs-nano)/1.45 var(--font-m);letter-spacing:.08em}.advantage-compare b{color:var(--mint);border-right:1px solid var(--hair)}.advantage-compare b:nth-of-type(2){color:var(--dim);border-top:1px solid var(--hair)}.advantage-compare span:nth-of-type(2){color:var(--dim);border-top:1px solid var(--hair)}
.scale-rail{height:72px;margin-top:30px;display:grid;grid-template-columns:repeat(12,1fr);gap:6px;align-items:end;border-bottom:1px solid var(--hair)}.scale-rail i{height:var(--h,35%);background:linear-gradient(180deg,rgba(92,242,192,.62),rgba(92,242,192,.05));border-top:1px solid var(--mint)}.scale-rail i:nth-child(2n){--h:58%}.scale-rail i:nth-child(3n){--h:82%}.scale-rail i:nth-child(5n){--h:100%}.advantage-detail{display:block;margin-top:12px;color:var(--dim)}
.chemical-glyphs{height:92px;margin-top:28px;position:relative}.chemical-glyphs::before{content:"";position:absolute;left:0;right:0;top:45px;height:1px;background:linear-gradient(90deg,var(--cyan),var(--mint),var(--violet),transparent)}.chemical-glyphs i{position:absolute;top:28px;left:var(--x);width:34px;height:34px;border:1px solid var(--mint);border-radius:50%;background:#090b12}.chemical-glyphs i:nth-child(1){--x:4%}.chemical-glyphs i:nth-child(2){--x:18%;border-radius:8px;transform:rotate(45deg);border-color:var(--cyan)}.chemical-glyphs i:nth-child(3){--x:33%;width:25px;height:25px;top:33px}.chemical-glyphs i:nth-child(4){--x:48%;border-color:var(--violet)}.chemical-glyphs i:nth-child(5){--x:63%;border-radius:5px}.chemical-glyphs i:nth-child(6){--x:78%;width:24px;height:24px;top:33px;border-color:var(--cyan)}.chemical-glyphs i:nth-child(7){--x:91%;border-color:var(--violet)}
.advantage-source{margin-top:18px}
html[lang="ja"] #advantage h2 .acc{white-space:nowrap}

/* validation */
#validation{padding-bottom:0}
.partner-band{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:rgba(255,255,255,.012)}
.partner-grid{display:grid;grid-template-columns:repeat(7,1fr)}
.partner-grid span{min-height:92px;display:grid;place-items:center;border-right:1px solid var(--hair);font:500 var(--fs-micro) var(--font-d);letter-spacing:.08em;color:#727b91;text-align:center;padding:12px}
.partner-grid span:first-child{border-left:1px solid var(--hair)}
.validation-grid{display:grid;grid-template-columns:1.1fr .9fr;border-left:1px solid var(--line);border-right:1px solid var(--line)}
.validation-feature{padding:54px 50px;border-right:1px solid var(--line);min-height:510px;display:flex;flex-direction:column}
.article-meta{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.18em;color:var(--mint)}
.validation-feature h3{font:500 clamp(1.75rem,3vw,2.65rem)/1.12 var(--font-d);letter-spacing:-.025em;margin:48px 0 20px;max-width:18ch}
.validation-feature p{color:var(--muted);max-width:56ch}
.text-link{font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.16em;color:var(--text);display:inline-flex;gap:10px;align-items:center;transition:color .25s}
.text-link:hover{color:var(--mint)}
.validation-feature .text-link{margin-top:28px;align-self:flex-start}
.validation-signal{display:flex;align-items:center;margin-top:auto;padding-top:48px;color:var(--dim);font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.1em}
.validation-signal i{height:1px;flex:1;margin:0 9px;background:linear-gradient(90deg,var(--hair),rgba(92,242,192,.45),var(--hair))}
.news-stack{display:flex;flex-direction:column}
.news-item{min-height:142px;padding:26px 28px;display:grid;grid-template-columns:110px 1fr auto;grid-template-rows:auto 1fr;gap:14px 18px;border-bottom:1px solid var(--hair);transition:background .3s}
.news-item:hover{background:rgba(92,242,192,.025)}
.news-date,.news-type{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.14em;color:var(--dim)}
.news-type{color:var(--mint)}
.news-item strong{grid-column:1/3;font:500 1rem/1.4 var(--font-d);max-width:none}
.news-arrow{grid-column:3;grid-row:1/3;align-self:center;color:var(--dim)}
.all-news{margin:auto 28px 28px}

/* company */
.company-vision{display:grid;grid-template-columns:1.2fr .7fr;gap:80px;align-items:end;margin-bottom:58px}
.company-grid{display:grid;grid-template-columns:1.2fr .8fr;border:1px solid var(--line)}
.leadership{display:flex;flex-direction:column}
/* The 65px lead track held a decorative 01/02/03 that has been removed. */
.leader{min-height:140px;padding:30px 34px;display:grid;grid-template-columns:1fr;align-items:center;border-bottom:1px solid var(--hair)}
.leader:last-child{border-bottom:0}
.leader-index{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.15em;color:var(--mint)}
.leader h3,.advisor h3{font:500 1.3rem var(--font-d);margin-bottom:6px}
.leader p,.advisor p{color:var(--dim);font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.12em;text-transform:uppercase}
/* advisers — same typographic system as .leader, laid out five across */
.advisor-block{margin-top:46px}
.advisor-block>h3{font:500 clamp(1.35rem,2.2vw,1.8rem)/1.16 var(--font-d);letter-spacing:-.025em;margin:14px 0 26px}
.advisor-grid{display:grid;grid-template-columns:repeat(5,1fr);border:1px solid var(--line)}
.advisor{min-height:152px;padding:28px 24px;display:flex;flex-direction:column;justify-content:center;gap:8px;border-left:1px solid var(--hair)}
.advisor:first-child{border-left:0}
.advisor h3{font-size:1.06rem;line-height:1.3;margin-bottom:0}
.advisor p{line-height:1.6}
.company-facts{border-left:1px solid var(--line);padding:38px;background:
  radial-gradient(circle at 80% 20%,rgba(92,242,192,.08),transparent 30%),linear-gradient(135deg,rgba(255,255,255,.015),transparent)}
.fact-coord{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.18em;color:var(--mint)}
.company-facts h3{font:500 1.65rem/1.18 var(--font-d);margin:64px 0 44px}
.company-facts dl div{display:flex;justify-content:space-between;gap:20px;padding:15px 0;border-top:1px solid var(--hair)}
.company-facts dt,.company-facts dd{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.1em;color:var(--dim)}
.company-facts dd{color:var(--muted);text-align:right}
.company-facts .fact-address{align-items:flex-start}
.company-facts .fact-address dd{max-width:30ch;line-height:1.55}
.company-facts address{font:inherit;font-style:normal}

/* 採用情報ページとお問い合わせページの facts リスト（.careers-page /
   .contact-page 限定。about/company/ 側は住所と
   長い肩書きが入るので 620 行の flex のままにする）。
   flex + space-between では dt も収縮対象の flex item なので、dd の内容量が
   多い行では dt が content 幅より狭められる。実測（1280px, main 06d919e）:
   「領域」は natural 28.1px に対して 22.8px に潰れて 2 行に折り返し、その行
   だけ高さが 56.6→82.2px になっていた。文面の長さの問題ではなく、ラベル列に
   固有幅が無いこと自体が原因。
   そこで dt を固定幅トラックに移し、dd も左揃えの 1 列にして、全行でラベルと
   値の開始位置を揃える。
   --facts-label-w は最長ラベルの実測幅（13px / letter-spacing .08em）の切り上げ：
   EN "EMPLOYMENT TYPE" 133.0px → 144px、和文「待遇・福利厚生」98.3px → 112px。
   和文は全角なので 7 字 ×(13+1.04)=98.3px と書体に依らず決まる。
   言語差は変数の差し替えだけで表現する。grid-template-columns 自体を
   html[lang="ja"] で上書きすると (0,3,2) が @media 内の (0,2,2) に勝ち、
   スマートフォン幅の縦積みが和文だけ効かなくなる（[[jp-scoped-rule-media-query-trap]]）。
   お問い合わせページも同じ facts リストを使うので、ブロックを複製せずセレクタ列に
   .contact-page を足して同一のラベル列を共有する。最長ラベルは EN "HEAD OFFICE"
   79.2px・和文「対応言語」56.2px で、いずれも既存の 144px / 112px に収まる。 */
.careers-page .company-facts dl div,
.contact-page .company-facts dl div{--facts-label-w:144px;
  display:grid;grid-template-columns:var(--facts-label-w) 1fr;align-items:baseline}
html[lang="ja"] .careers-page .company-facts dl div,
html[lang="ja"] .contact-page .company-facts dl div{--facts-label-w:112px}
.careers-page .company-facts dt,.contact-page .company-facts dt{white-space:nowrap}
.careers-page .company-facts dd,.contact-page .company-facts dd{text-align:left}
/* 座標行を外したぶん、見出しを箱の天に寄せる（38px の padding だけ残す）。 */
.careers-page .company-facts h3{margin-top:0}

.company-info-grid{display:grid;grid-template-columns:.72fr 1.28fr;border:1px solid var(--line)}
.company-info-intro{padding:54px 48px;border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:flex-start}
.company-info-intro h2{font-size:clamp(2.5rem,4.5vw,4.8rem);margin:46px 0 24px}
.company-info-intro p{max-width:36ch;color:var(--muted);line-height:1.7}
.company-info-intro .text-link{margin-top:auto;padding-top:46px}
.company-information-page .company-facts{border-left:0;padding:48px}
.company-information-page .company-facts dl{margin-bottom:42px}
@media(max-width:800px){
  .company-info-grid{grid-template-columns:1fr}
  .company-info-intro{padding:38px 28px;border-right:0;border-bottom:1px solid var(--line)}
  .company-info-intro .text-link{margin-top:28px;padding-top:0}
  .company-information-page .company-facts{padding:32px 28px}
}
.careers-link{margin-top:42px}
/* the officer list grew from three rows to five, so the facts aside is ~300px taller
   than its own content: anchor the careers link to the foot of the column, the way
   .funding-card and .publication-action already do, instead of leaving a dead tail. */
#about .company-facts{display:flex;flex-direction:column}
#about .company-facts dl{margin-bottom:42px}
#about .company-facts>.text-link{margin-top:auto}

/* Job postings on careers/ + jp/careers/ (2026-08 migration off Google Sites).
   The prose (headings, bullet requirements, treatment/conditions) is plain
   .article-body — see 1100. What lives here is what .article-body does not
   cover: the diversity pie-chart row, the apply button, and the OPEN POSITIONS
   carousel both hubs carry. */
.job-apply{margin-top:36px}
/* position:static is load-bearing, not tidying: styles.css:156 is a bare
   `nav{position:fixed;top:0;left:0;right:0;z-index:100}` written for the site
   header, so this in-page link row — a <nav> for the right reasons — was being
   torn out of the flow and stacked onto the header at x=0 with no container
   padding, where it also stayed on scroll. Reset it on the element's own
   class, exactly as .breadcrumb does at 925; do NOT re-scope line 156, whose
   companion nav.scrolled rules are tuned to its specificity. */
.career-toc{position:static;display:flex;flex-wrap:wrap;gap:10px 28px;margin-top:10px}

/* OPEN POSITIONS carousel (markup generated by tools/build-positions.js).
   The old .job-openings grid was repeat(2,1fr) and left a hole on an odd
   count; this is a native scroll-snap scroller instead, so any number of
   postings lays out for free and the arrows only nudge the scroller. The 1px
   flex gap over the frame's own background is the same seam treatment the grid
   had. The card order is title first, then the mono division eyebrow, then the
   muted summary, the facts line, and the link pinned to the floor: the eyebrow
   is optional, so above the title it pushed the h3 of a card that has one down
   past the h3 of a card that does not, and the titles across a row stopped
   lining up. Below the title, every card starts with its h3. The type
   treatments are still .publication-card's (see 999). */
.positions-carousel{position:relative;border:1px solid var(--line);background:var(--line);margin-top:8px}
/* The nav and footer "Open roles" row jumps to #openings, which on /careers/ is
   this carousel (the enclosing section is #intro and has to stay that way; on
   /jp/careers/ the id sits on a plain <section>, which needs none of this).
   At the moment the browser performs the fragment scroll the carousel is still
   a hidden .reveal, translated 28px down, and html{scroll-padding-top} aligns
   on that translated box. The reveal then drops the transform and the carousel
   rises 28px, ending under the fixed header. Adding the same 28px back here
   makes it settle 94px from the top, the same as the Japanese page.
   Scoped to .js because the transform is too: with scripting off .reveal never
   moves, so neither should this. Reduced motion cancels the transform as well
   and is reset in the prefers-reduced-motion block further down this family. */
.js #openings.positions-carousel{scroll-margin-top:28px}
.positions-viewport{overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;
  /* vertical page scrolling has to survive a finger that starts on a card */
  touch-action:pan-y pinch-zoom;scrollbar-width:none;-ms-overflow-style:none}
.positions-viewport::-webkit-scrollbar{display:none}
.positions-viewport:focus-visible{outline:1px solid var(--mint);outline-offset:-2px}
.positions-track{display:flex;gap:1px;align-items:stretch}
/* Three up, two under 1080px, one under 680px — the gaps come out of the card,
   so calc() keeps the snap edges on the seams. The basis is the row of three;
   flex-grow:1 is what stops a count that is not a multiple of it from leaving
   the frame's own var(--line) background showing as a bare grey panel (two
   postings used to paint two thirds of the frame and leave the last third
   empty). Growth only happens when there is free space, so from the fourth
   card on the basis governs again, the row stays one row, and the viewport
   overflows and scrolls exactly as before. */
.job-opening-card{flex:1 0 calc((100% - 2px) / 3);scroll-snap-align:start;background:var(--bg);
  padding:32px 34px;display:flex;flex-direction:column;gap:14px}
.job-opening-card h3{margin:0;font:500 1.3rem/1.3 var(--font-d)}
/* The division eyebrow, now under the h3 — see the block comment above. */
.job-opening-meta{margin:0;font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.13em;color:var(--dim)}
.job-opening-summary{margin:0;color:var(--muted);font-size:.9rem}
.job-opening-facts{margin:0;font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.1em;color:var(--dim)}
.job-opening-card .text-link{margin-top:auto;padding-top:10px}
.positions-ctl{display:flex;align-items:center;gap:16px;padding:14px 18px;border-top:1px solid var(--line);background:var(--bg)}
/* detail.js hides the controls when every card already fits, and .positions-ctl
   is a flex box, so [hidden] needs saying out loud */
.positions-ctl[hidden]{display:none}
.positions-status{margin:0 auto;font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em;color:var(--dim);font-feature-settings:"tnum" 1}
.positions-arrow{display:inline-flex;align-items:center;gap:10px;padding:10px 15px;border:1px solid var(--line);
  background:transparent;color:var(--text);font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em;
  cursor:pointer;transition:color .25s,border-color .25s}
.positions-arrow:hover:not(:disabled){color:var(--mint);border-color:var(--mint)}
.positions-arrow:disabled{opacity:.26;cursor:default}
/* No JS: the viewport is still a scroller and every card is reachable, so the
   arrows and the readout — which only JS can keep true — go away. */
html:not(.js) .positions-ctl{display:none}
@media(max-width:1080px){
  /* flex-basis alone: the grow and the shrink above stay in force at every width */
  .job-opening-card{flex-basis:calc((100% - 1px) / 2)}
}
@media(max-width:680px){
  .job-opening-card{flex-basis:100%;padding:28px 24px}
  .positions-ctl{gap:10px;padding:12px 14px}
  /* `Position 1 / 2` needs about 149px at 13px mono, and the two labelled
     arrows left it about 122px, so the English readout wrapped to two lines
     (Japanese, being shorter, never did). Nothing here shrinks below the 13px
     floor: the PREV / NEXT words step aside at this width and the arrow glyph
     carries the button, with the meaning already in each button's aria-label.
     That frees enough room for the readout to hold one line in both
     languages. */
  .positions-arrow{gap:0;padding:10px 13px}
  .positions-arrow small{display:none}
  .positions-status{white-space:nowrap}
}
@media(prefers-reduced-motion:reduce){
  .positions-viewport{scroll-behavior:auto}
  .positions-arrow{transition:none}
  /* No .reveal transform here (see the reduced-motion block near the top of
     this file), so the 28px compensation above would overshoot by exactly that
     much. Same specificity as the rule it undoes and later in the file, which
     is what lets it win: a media query adds none of its own. */
  .js #openings.positions-carousel{scroll-margin-top:0}
}

/* Footer */
.foot-top{display:grid;grid-template-columns:1fr 1.25fr;padding:70px 0 60px}
.foot-brand p{color:var(--dim);font-size:.9rem;margin-top:18px}
.foot-links{display:grid;grid-template-columns:repeat(3,1fr);gap:34px}
.foot-links h3{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.2em;color:var(--dim);margin-bottom:18px}
.foot-links a{display:block;color:var(--muted);font-size:var(--fs-sm);padding:5px 0;transition:color .25s}
.foot-links a:hover{color:var(--mint)}
.back-top{appearance:none;background:none;border:0;color:var(--dim);font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.15em;cursor:pointer}
.back-top:hover{color:var(--mint)}

/* responsive xFOREST */
@media (max-width:1100px){
  .nav-links{gap:18px}.nav-contact{display:none}
  .proof-grid{grid-template-columns:1.25fr repeat(3,1fr)}
  .science-stage{grid-template-columns:300px minmax(0,1fr)}
  .matrix-flow{grid-template-columns:1fr 1.3fr 1fr}
  .library-panel{padding:30px 22px}
  .tech-portfolio{grid-template-columns:1fr 1fr}.tech-card:nth-child(3){border-top:1px solid var(--line)}
  /* 7 partners / 3 columns: rows start at 1,4,7 — the last one is alone, so it takes the whole row */
  .partner-grid{grid-template-columns:repeat(3,1fr)}.partner-grid span:nth-child(n+4){border-top:1px solid var(--hair)}
  .partner-grid span:nth-child(3n+1){border-left:1px solid var(--hair)}
  .partner-grid span:last-child:nth-child(3n+1){grid-column:1/-1}
  .advisor-grid{grid-template-columns:repeat(3,1fr)}
  .advisor-grid .advisor{border-left:1px solid var(--hair)}
  .advisor:nth-child(3n+1){border-left:0}
  .advisor:nth-child(n+4){border-top:1px solid var(--hair)}
}
@media (max-width:860px){
  .nav-links,.nav-contact{display:none}
  /* EN / JP is not part of the hand-over: the language of the page is the one
     thing a visitor must be able to change without opening the drawer first, so
     .lang-switch stays in the header at every width. It is the only visible
     sibling left before the burger, which is why the auto margin that used to
     push the burger to the right edge moves onto the switcher instead — with the
     margin still on #burger the free space would split between the two and the
     switcher would drift towards the middle of the bar. The burger keeps the
     .nav-in gap as its fixed inset: at 390px the bar is 356px wide and the logo
     ends at 149px, so 47px of EN / JP and a 44px burger leave ~90px of slack —
     the 30px gap is spent on separating two adjacent tap targets, not squeezed. */
  .lang-switch{margin-left:auto}
  #burger{display:block;margin-left:0}
  .section-heading.split,.company-vision{grid-template-columns:1fr;gap:14px}
  .proof-grid{grid-template-columns:1fr 1fr}  .proof-metric:nth-child(3){border-left:0;border-top:1px solid var(--hair)}.proof-metric:nth-child(4){border-top:1px solid var(--hair)}
    .advantage-row{grid-template-columns:230px 1fr}.advantage-copy{padding:38px 32px}
  .science-stage{grid-template-columns:1fr}.science-copy{border-right:0;border-bottom:1px solid var(--line)}.science-step{min-height:145px}
  .rna-universe{min-height:480px}
  .matrix-flow{grid-template-columns:1fr 1fr}.matrix-panel{grid-column:1/-1;grid-row:2;min-height:390px;border-top:1px solid var(--line)}
  .library-panel{min-height:300px}.library-panel.compound-library{border-left:0}
  .validation-grid,.company-grid{grid-template-columns:1fr}.validation-feature{border-right:0;border-bottom:1px solid var(--line)}
  .company-facts{border-left:0;border-top:1px solid var(--line)}
  .advisor-grid{grid-template-columns:1fr 1fr}
  .advisor-grid .advisor{border-left:1px solid var(--hair)}
  .advisor:nth-child(odd){border-left:0}
  .advisor:nth-child(n+3){border-top:1px solid var(--hair)}
  .advisor:last-child:nth-child(odd){grid-column:1/-1}
  .foot-top{grid-template-columns:1fr;gap:60px}
}
@media (max-width:680px){
  .container{width:min(100% - 34px,1180px)}
  #hero h1{font-size:clamp(2.6rem,12.5vw,4.2rem)}
  #hero .hero-sub{font-size:1rem}
  #hero .hero-note{line-height:2}
  .proof-metric{min-height:145px;padding:26px 20px}
  .section-heading{margin-bottom:38px}
  .pipeline-note{min-height:86px;padding:16px 18px}.pipeline-head,.pipeline-row{grid-template-columns:100px 170px 120px repeat(4,105px)}
  .advantage-row{grid-template-columns:1fr}.advantage-metric{min-height:260px;border-right:0;border-bottom:1px solid var(--line)}.advantage-copy{padding:34px 22px}.advantage-compare{grid-template-columns:1fr}.advantage-compare b{border-right:0}.advantage-compare span{border-top:1px solid var(--hair)}.advantage-compare b:nth-of-type(2){border-top:1px solid var(--hair)}
  .science-principles{grid-template-columns:1fr}.principle+.principle{border-left:0;border-top:1px solid var(--hair)}
  .rna-universe{min-height:360px;padding:0}.rna-universe svg{width:125%}
  /* 図を125%にトリミングしているぶん、拡大した注記を内側へ逃がす */
  .coord-label{letter-spacing:.02em;transform:translateX(-60px)}
  .fig-label.hot+.fig-label{text-anchor:end}
  .matrix-header{align-items:flex-start;gap:20px}.system-status{max-width:160px;min-width:0;overflow-wrap:anywhere;letter-spacing:.08em;text-align:right}
  .matrix-flow{grid-template-columns:1fr}.library-panel{min-height:265px;border-right:0;border-bottom:1px solid var(--line)}
  .library-panel.compound-library{border-bottom:0}.matrix-panel{grid-row:auto;grid-column:auto;min-height:340px}
  .discovery-output{grid-template-columns:1fr 1fr}.output-line{display:none}.output-node:nth-child(n+4){border-top:1px solid var(--hair)}
  .tech-portfolio{grid-template-columns:1fr}.tech-card{min-height:245px;border-top:1px solid var(--line)}.tech-card:first-child{border-top:0}
  .pipeline-note{align-items:flex-start;flex-direction:column;justify-content:center;gap:5px}
  /* 7 partners / 2 columns: rows start at 1,3,5,7 — reset the 3-column left edges first */
  .partner-grid{grid-template-columns:1fr 1fr}.partner-grid span{min-height:72px}.partner-grid span:nth-child(n+3){border-top:1px solid var(--hair)}
  .partner-grid span:nth-child(3n+1){border-left:0}.partner-grid span:nth-child(odd){border-left:1px solid var(--hair)}
  .partner-grid span:last-child:nth-child(odd){grid-column:1/-1}
  .validation-feature{padding:40px 25px;min-height:500px}.news-item{grid-template-columns:1fr auto;padding:24px 20px}
  .news-type{grid-column:2}.news-item strong{grid-column:1/3}.news-arrow{display:none}
  .leader{padding:25px 20px;grid-template-columns:1fr}.leader h3{font-size:1.05rem}
  .advisor-block{margin-top:34px}.advisor-block>h3{margin-bottom:20px}
  .advisor-grid{grid-template-columns:1fr}
  .advisor-grid .advisor{border-left:0}
  .advisor{min-height:0;padding:24px 20px}.advisor:nth-child(n+2){border-top:1px solid var(--hair)}
  .company-facts{padding:28px 22px}.company-facts h3{margin:46px 0 34px}
  /* 採用情報・お問い合わせページの facts は、この幅ではラベル上・値下の縦積みにする。
     固定ラベル列 144px は 390px 幅では値に 200px 前後しか残らない。
     620 行の flex を上書きした grid と同じ (0,2,2) なので、必ず後方に置く。 */
  .careers-page .company-facts dl div,
  .contact-page .company-facts dl div{grid-template-columns:1fr;gap:7px}
  .foot-links{grid-template-columns:1fr 1fr}.foot-links>div:last-child{grid-column:1/-1}
}
@media (prefers-reduced-motion:reduce){
  .flow-line,.rna-bars span,.matrix-scan,#hero .badge::before{animation:none!important}
}

/* ================= Investor proof layer ================= */
.proof-nav{grid-template-columns:repeat(4,1fr)}
.proof-nav .proof-metric{border-left:1px solid var(--hair);transition:background .3s,border-color .3s;position:relative}
.proof-nav .proof-metric:first-child{border-left:0}
.proof-nav .proof-metric::after{content:"↗";position:absolute;right:22px;top:22px;font-family:var(--font-m);font-size:var(--fs-micro);color:var(--dim);transition:color .25s,transform .25s}
.proof-nav .proof-metric[href^="#"]::after{content:"↓"}
.proof-nav .proof-metric:hover{background:rgba(92,242,192,.035)}
.proof-nav .proof-metric:hover::after{color:var(--mint);transform:translate(2px,-2px)}
/* The letter-spacing !important came off in 2026-08: it was the only one of its
   kind in the file and it blocked the narrow-screen tracking override at the end,
   where "04 / COLLABORATIONS" does not fit a 170px card at .18em. font-size and
   color keep theirs — 1316 answers the colour with another !important. */
.proof-kicker{font-family:var(--font-m);font-size:var(--fs-nano)!important;letter-spacing:.18em;color:var(--mint)!important}
.proof-value{font:600 clamp(1.15rem,1.8vw,1.55rem)/1.1 var(--font-d);letter-spacing:-.02em;min-height:38px;display:flex;align-items:center;gap:8px}
.proof-value small{font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em;color:var(--dim)}
.section-deep-link{min-height:76px;border:1px solid var(--line);border-top:0;padding:0 28px;display:flex;align-items:center;justify-content:space-between;font:500 var(--fs-micro) var(--font-m);letter-spacing:.18em;color:var(--muted);transition:background .3s,color .3s}
.section-deep-link:hover{background:rgba(92,242,192,.035);color:var(--mint)}
.section-deep-link>span:last-child{font-size:18px}
.evidence-grid{display:grid;grid-template-columns:.85fr 1.15fr;border:1px solid var(--line);border-top:0;background:rgba(7,9,15,.76)}
.funding-card{padding:48px 44px;border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:480px}
.funding-card h3,.milestone-head h3{font:500 clamp(1.8rem,3vw,2.5rem)/1.08 var(--font-d);letter-spacing:-.025em;margin:46px 0 20px;max-width:14ch}
.funding-card p{color:var(--muted);font-size:.92rem;max-width:52ch}
.investor-list{display:flex;flex-wrap:wrap;gap:8px;margin:34px 0 28px}
.investor-list span{border:1px solid var(--line);padding:10px 12px;font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em;color:var(--muted)}
.funding-card .text-link{margin-top:auto;align-self:flex-start}
.milestone-panel{padding:42px 44px}
.milestone-head{display:flex;justify-content:space-between;align-items:start;gap:30px;border-bottom:1px solid var(--hair);padding-bottom:24px}
.milestone-head h3{font-size:1.45rem;margin:0;max-width:none;text-align:right}
.milestone-list{display:flex;flex-direction:column}
.milestone-item{display:grid;grid-template-columns:88px 1fr 1.25fr auto;gap:18px;align-items:center;min-height:76px;border-bottom:1px solid var(--hair);transition:background .25s;padding:8px 10px}
.milestone-item:hover{background:rgba(92,242,192,.025)}
.milestone-date{font:500 var(--fs-nano) var(--font-m);letter-spacing:.12em;color:var(--mint)}
.milestone-item strong{font:500 .94rem var(--font-d)}
.milestone-item>span:nth-child(3){font-size:var(--fs-sm);color:var(--muted)}
.milestone-item i{font-style:normal;color:var(--dim)}

/* ================= Detail pages ================= */
.detail-page{background:#05060b}
.detail-page .nav-links a[aria-current="page"]{color:var(--mint)}
.lang-switch a{color:var(--dim);transition:color .2s}
.lang-switch a:hover,.lang-switch a[aria-current="page"]{color:var(--mint)}
/* Below the burger hand-over EN / JP is a thumb target, and "EN" set at 13px is
   a 24x16px one. The area is grown with an overlay rather than with padding on
   the anchor: the current-page marker further down draws its underline on the
   bottom edge of this box and sets its own padding-bottom, so padding here would
   both push that line away from the text and leave EN and JP on two different
   baselines. The overlay is a child, so taps on it still reach the link. */
@media (max-width:1100px){
  .lang-switch a{position:relative}
  .lang-switch a::after{content:"";position:absolute;inset:-11px -8px}
}
.detail-page .mobile-lang{display:flex;gap:10px}
.detail-page .mobile-lang a{border:1px solid var(--line);padding:10px 14px;font:500 var(--fs-nano) var(--font-m);letter-spacing:.12em;color:var(--dim)}
.detail-page .mobile-lang a[aria-current="page"]{border-color:rgba(92,242,192,.35);color:var(--mint)}
.detail-hero{min-height:760px;display:flex;align-items:end;padding:calc(var(--nav-h) + 120px) 0 105px;position:relative;overflow:hidden;border-bottom:1px solid var(--line)}
.detail-hero::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 75% 42%,rgba(92,242,192,.1),transparent 23%),radial-gradient(circle at 18% 20%,rgba(56,225,255,.08),transparent 30%),linear-gradient(var(--hair) 1px,transparent 1px),linear-gradient(90deg,var(--hair) 1px,transparent 1px);background-size:auto,auto,80px 80px,80px 80px;-webkit-mask-image:linear-gradient(180deg,#000,rgba(0,0,0,.72),transparent 96%);mask-image:linear-gradient(180deg,#000,rgba(0,0,0,.72),transparent 96%)}
.detail-hero-grid{display:grid;grid-template-columns:1.35fr .65fr;gap:90px;align-items:end;position:relative;z-index:2}
/* Hubs that carry no hero copy (technology / pipeline / about): the headline
   cell takes the full band instead of being squeezed into the 1.35fr column. */
.detail-hero-grid.detail-hero-grid-single{grid-template-columns:1fr;gap:0}
/* The breadcrumb is a <nav>, so the bare `nav{position:fixed}` header rule
   above would otherwise rip it out of flow and pin it to the viewport corner.
   A class beats an element selector, so reset what that rule imposes. */
.breadcrumb{position:static;border-bottom:0;display:flex;gap:12px;color:var(--dim);font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em;margin-bottom:34px}
.breadcrumb a:hover{color:var(--mint)}
/* The last segment is where you are, not somewhere you can go. Mint against the
   --dim ancestors is the same "current" signal the nav uses for aria-current. */
.breadcrumb .crumb-current{color:var(--mint)}
.detail-hero h1{font-size:clamp(3.7rem,7.7vw,7rem);line-height:.9;margin:0;max-width:820px}
/* 和文の見出しは全角ぶん幅を食うので、EN と同じ級数だと「パートナーシップ。」が
   左カラム（1180px コンテナで約736px）に収まらず、balance が長音符の前で割って
   「パートナ／ーシップ。」になる。JP だけ級数を落とし、禁則と pretty を効かせる。
   .detail-hero-compact（/jp/pipeline/）は元から収まっているので対象外。 */
html[lang="ja"] .detail-hero:not(.detail-hero-compact) h1{
  font-size:clamp(2.8rem,5.6vw,4.8rem);max-width:none;text-wrap:pretty}
.detail-hero-copy{padding:30px 0 10px;border-top:1px solid var(--line)}
.detail-hero-copy p{font-size:1.02rem;color:var(--muted);margin:24px 0 30px;max-width:46ch}
.detail-hero-field{position:absolute;inset:0;z-index:1;pointer-events:none}
.detail-hero-field>span{position:absolute;font:600 clamp(5rem,15vw,13rem) var(--font-d);color:rgba(255,255,255,.018);line-height:1}
.detail-hero-field>span:nth-child(1){right:32%;top:17%}.detail-hero-field>span:nth-child(2){right:16%;top:31%}.detail-hero-field>span:nth-child(3){right:28%;top:54%}.detail-hero-field>span:nth-child(4){right:7%;top:61%}
.detail-hero-field i{position:absolute;border:1px solid rgba(92,242,192,.11);border-radius:50%;right:8%;top:4%;width:520px;height:520px}
/* --- Compact variant (/pipeline/): that page's only content is the table, so the
   hero shrinks to a signature band and the table's head clears the fold. Same
   grammar — breadcrumb, headline, one line of copy — at half the height. */
.detail-hero-compact{min-height:0;padding:calc(var(--nav-h) + 62px) 0 50px}
.detail-hero-compact h1{font-size:clamp(2.5rem,4.6vw,3.9rem);line-height:.95}
.detail-hero-compact .breadcrumb{margin-bottom:20px}
.detail-hero-compact .detail-hero-copy{padding:16px 0 4px}
.detail-hero-compact .detail-hero-copy p{margin:14px 0 18px}
/* The field's letters and orbits were placed for a 760px stage; in the band they
   shrink and ride up so what survives the overflow crop still reads as texture. */
.detail-hero-compact .detail-hero-field>span{font-size:clamp(3.2rem,8vw,6.2rem)}
.detail-hero-compact .detail-hero-field i{width:340px;height:340px;top:-30%}
/* The band exists so the table clears the fold — so the section it hands over to
   gives up its long top breath as well. */
.detail-hero-compact+main #pipeline{padding-top:64px}
/* Three numerals, not four: the third used to be the paper count, dropped in
   2026-08 along with every other count on the site. The RNA word-mark keeps its
   own smaller, tinted treatment, so its rule moves up to :nth-child(3) with it. */
.publication-field>span:nth-child(1){right:42%;top:21%}.publication-field>span:nth-child(2){right:16%;top:20%}.publication-field>span:nth-child(3){right:4%;top:58%;font-size:clamp(3rem,9vw,7rem);color:rgba(92,242,192,.035)}
.detail-section{padding:125px 0;border-bottom:1px solid var(--hair)}
.detail-split-heading,.publications-intro{display:grid;grid-template-columns:1.15fr .85fr;gap:90px;align-items:start;margin:64px 0 62px}
.detail-split-heading h2,.publications-intro h2{font-size:clamp(2.8rem,5.6vw,5.1rem);margin:0}
/* 同じ理由で、和文は <br> で切った各ブロックがさらに折り返して4行になる
   （「配列が情報を担い、／構造が機能する。」「創薬を、／パートナーとともに。」）。
   左カラムを少し広げ、級数を落として <br> どおりの2行に収める。 */
/* この左右比は2カラムで組んでいる間だけの話なので、段組みが 1fr に落ちる 860px
   以下には持ち込まない。メディアクエリは詳細度を上げないため、素のままの
   html[lang="ja"] .publications-intro（0,2,1）は @media (max-width:860px) 側の
   .publications-intro（0,1,0）に順序に関係なく必ず勝ってしまい、和文だけが
   スマートフォンでも2カラムのまま残っていた（320px で本文カラム 144px）。 */
@media (min-width:861px){
  html[lang="ja"] .detail-split-heading,
  html[lang="ja"] .publications-intro{grid-template-columns:1.3fr .7fr;gap:64px}
}
html[lang="ja"] .detail-split-heading h2,
html[lang="ja"] .publications-intro h2{font-size:clamp(2.2rem,3.8vw,3.4rem);line-height:1.18;text-wrap:pretty}
.lead-stack{display:flex;flex-direction:column;gap:20px;padding-top:8px}
.lead-stack p{color:var(--muted);font-size:1rem;max-width:55ch}
.lead-stack .text-link{margin-top:14px;align-self:flex-start}
.structure-figure,.workflow-figure{border:1px solid var(--line);background:rgba(8,10,17,.84);position:relative;overflow-x:auto}
.structure-figure svg,.workflow-figure svg{width:100%;height:auto;min-width:800px}
.workflow-figure svg{min-width:1120px}
.structure-figure figcaption,.workflow-figure figcaption{padding:16px 20px;border-top:1px solid var(--hair);font:400 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.11em;color:var(--dim);text-transform:uppercase}
.diagram-grid path{stroke:var(--hair);stroke-width:1}
/* 16px を基本にしつつ、図が縮んだときは下限トークン（実測補正済み）を採用する */
.sequence-line text{font-weight:500;font-family:var(--font-m);font-size:max(16px,var(--fs-meta));letter-spacing:.18em;fill:var(--muted)}
.sequence-line path{fill:none;stroke:rgba(56,225,255,.45);stroke-width:2;stroke-dasharray:7 8}
.rna-fold path{fill:none;stroke:url(#structureStroke);stroke-width:3}
.rna-fold circle{fill:#08120f;stroke:var(--mint);stroke-width:2}
.binding-pocket path,.binding-pocket circle{fill:rgba(255,209,102,.025);stroke:var(--amber);stroke-width:2}
.diagram-callout path{stroke:var(--line2);stroke-width:1;fill:none}.diagram-callout circle{fill:var(--mint)}
/* 下限に合わせて拡大した分、字間を詰めて注釈が図の外に出ないようにする */
.diagram-callout text,.diagram-label text{font:500 var(--fs-micro) var(--font-m);letter-spacing:.06em;fill:var(--dim)}
.diagram-label text{fill:var(--muted)}
.science-metrics{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);margin-top:24px}
.science-metrics span{padding:18px 14px;font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.12em;color:var(--dim)}
.science-metrics span+span{border-left:1px solid var(--hair)}
.science-metrics strong{display:block;font:600 1.35rem var(--font-d);color:var(--text);letter-spacing:-.03em;margin-bottom:6px}
.science-metrics sup{color:var(--mint);font-size:max(var(--fs-nano),.5em)}
.workflow-line path{fill:none;stroke:url(#flowStroke);stroke-width:2}
.workflow-node>rect{fill:#080a11;stroke:rgba(255,255,255,.12)}
.workflow-node .node-index{font:500 var(--fs-micro) var(--font-m);letter-spacing:.15em;fill:var(--mint)}
.workflow-node .node-title{font:600 20px var(--font-d);fill:var(--text)}
.workflow-node .node-sub{font:500 var(--fs-nano) var(--font-m);letter-spacing:.1em;fill:var(--dim)}
.input-node>path{fill:none;stroke:var(--cyan);stroke-width:2}.node-plus{font:400 32px var(--font-m);fill:var(--dim)}
.mini-matrix rect{fill:#101522;stroke:rgba(255,255,255,.04)}.mini-matrix rect.mid{fill:rgba(92,242,192,.36)}.mini-matrix rect.hit{fill:var(--mint)}
.selectivity-axis,.readout-track{fill:none;stroke:var(--line2)}.selectivity-plot{fill:none;stroke:var(--mint);stroke-width:2}.plot-hit{fill:var(--mint);filter:drop-shadow(0 0 8px rgba(92,242,192,.8))}
.sequence-readout{font:500 var(--fs-micro) var(--font-m);letter-spacing:.1em;fill:var(--muted)}.readout-signal{stroke:var(--violet);stroke-width:3}
.validation-node>circle,.validation-node>path{fill:none;stroke:var(--line2)}.validation-node .validation-core{fill:var(--mint);stroke:var(--mint);filter:drop-shadow(0 0 12px rgba(92,242,192,.7))}
.resolution-grid{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--line);margin-top:64px}
.resolution-card{padding:48px 44px;min-height:570px;display:flex;flex-direction:column}.resolution-card+.resolution-card{border-left:1px solid var(--line)}
.resolution-card h2{font-size:clamp(2rem,3.4vw,3.2rem);margin:50px 0 22px}.resolution-card p{color:var(--muted);max-width:52ch}
.selectivity-visual{height:150px;margin-top:auto;display:flex;align-items:end;gap:10px;border-bottom:1px solid var(--line)}
.selectivity-visual span{height:var(--v);flex:1;background:linear-gradient(180deg,rgba(56,225,255,.55),rgba(56,225,255,.05));border-top:1px solid var(--cyan)}
.selectivity-visual span.hot{background:linear-gradient(180deg,rgba(92,242,192,.85),rgba(92,242,192,.06));border-color:var(--mint);box-shadow:0 -8px 30px rgba(92,242,192,.16)}
.base-visual{display:grid;grid-template-columns:repeat(8,1fr);gap:7px;position:relative;margin-top:auto;padding-bottom:58px}
.base-visual span{aspect-ratio:1;display:grid;place-items:center;border:1px solid var(--line);font:500 var(--fs-meta) var(--font-m);color:var(--dim);background:#080a11}
.base-visual span.hot{color:#06100d;background:var(--mint);border-color:var(--mint);box-shadow:0 0 18px rgba(92,242,192,.35)}
.base-visual i{position:absolute;bottom:24px;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--mint),transparent)}
.platform-detail-grid{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);background:var(--line);gap:1px}
.platform-detail-card{background:var(--cell);padding:34px 28px;min-height:390px;display:flex;flex-direction:column}
.platform-detail-card>span,.platform-detail-card small,.platform-detail-card a{font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em;color:var(--mint)}
.platform-detail-card h3{font:600 1.35rem var(--font-d);margin:76px 0 18px}.platform-detail-card p{color:var(--muted);font-size:var(--fs-sm)}
.platform-detail-card small,.platform-detail-card a{margin-top:auto;padding-top:30px;color:var(--dim);line-height:1.7}.platform-detail-card a:hover{color:var(--mint)}
.science-reference-list{border:1px solid var(--line)}
.science-reference{display:grid;grid-template-columns:110px 1fr 220px;gap:24px;align-items:center;min-height:112px;padding:24px 28px;border-bottom:1px solid var(--hair);transition:background .25s}
.science-reference:last-child{border-bottom:0}.science-reference:hover{background:rgba(92,242,192,.025)}
/* filtered lists: the last *visible* row closes on the container border, never on two rules */
.science-reference:not(:has(~ .science-reference:not([hidden]))){border-bottom:0}
.science-reference span,.science-reference i{font:500 var(--fs-nano) var(--font-m);letter-spacing:.12em;color:var(--mint);font-style:normal}.science-reference strong{font:500 1rem/1.35 var(--font-d)}.science-reference i{text-align:right;color:var(--dim)}
.detail-footer{border-top:1px solid var(--hair)}

/* publications */
.publication-list,.partnerships-page .milestone-list{border:1px solid var(--line);background:rgba(8,10,17,.7)}
.publication-card,.partner-card{display:grid;grid-template-columns:150px 1fr 230px;gap:38px;min-height:310px;padding:44px 38px;border-bottom:1px solid var(--hair)}
.publication-card:last-child,.partner-card:last-child{border-bottom:0}.publication-card:hover,.partner-card:hover{background:rgba(92,242,192,.018)}
.publication-index,.partner-index{display:flex;flex-direction:column;justify-content:space-between;font:500 var(--fs-nano) var(--font-m);letter-spacing:.13em;color:var(--dim)}
.publication-index>span:first-child,.partner-index>span:first-child{font-size:1.2rem;color:var(--mint)}
/* News and publication cards dropped their /01, so the date is now the first
   child and would inherit the big mint number treatment above. It is a dateline,
   not an index: hand it back the container's own type. Also stops space-between
   from being the only thing positioning a single child. */
.publication-index.date-only{justify-content:flex-start}
.publication-index.date-only>span:first-child{font-size:inherit;color:inherit}
.publication-main h2{font:500 clamp(1.45rem,2.5vw,2.2rem)/1.15 var(--font-d);letter-spacing:-.025em;margin:24px 0 20px;max-width:29ch}
.publication-summary{color:var(--muted);max-width:67ch;font-size:.9rem}
.publication-action{border-left:1px solid var(--hair);padding-left:30px;display:flex;flex-direction:column;align-items:flex-start}
.publication-action>span{font:500 var(--fs-nano) var(--font-m);letter-spacing:.13em;color:var(--dim)}
.publication-action strong{font:500 .9rem/1.4 var(--font-d);margin:16px 0;color:var(--muted)}
/* The 16px above is the gap under an eyebrow span, kept for any future
   .publication-action that pairs one with a strong value — neither the
   publications cards (RELATED TECHNOLOGY removed 2026-08) nor the news
   cards print one today, so .publication-action currently holds just the
   .text-link below. */
.publication-action .text-link{margin-top:auto}

/* partnerships — the card reuses .publication-* wholesale; only the differences live here.
   A collaboration entry is shorter than a paper abstract, and its status column is wider. */
.partnership-field>span:nth-child(1){right:39%;top:22%}.partnership-field>span:nth-child(2){right:14%;top:18%}.partnership-field>span:nth-child(3){right:32%;top:57%}.partnership-field>span:nth-child(4){right:6%;top:62%;font-size:clamp(3rem,9vw,7rem);color:rgba(92,242,192,.035)}
.partner-card{grid-template-columns:150px 1fr 250px;min-height:246px}
.partner-index{gap:18px}
.partner-index b{font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.14em;color:var(--cyan);text-transform:uppercase}
.partner-card .publication-main h2{max-width:26ch;margin:22px 0 18px}
.partner-card .publication-summary{max-width:62ch}
/* the milestone timeline is a bare list here, not the boxed .milestone-panel of the
   home page: it takes the same frame as the cards above it and lines its columns up
   with theirs (38px gutter), instead of floating loose in the container. */
.partnerships-page .milestone-item{min-height:88px;padding:20px 38px}
.partnerships-page .milestone-item:last-child{border-bottom:0}

/* news */
.news-field>span:nth-child(1){right:40%;top:19%}.news-field>span:nth-child(2){right:15%;top:23%}.news-field>span:nth-child(3){right:31%;top:56%}.news-field>span:nth-child(4){right:5%;top:59%;font-size:clamp(3rem,9vw,7rem);color:rgba(92,242,192,.035)}
.news-card{min-height:250px}
/* LATEST dropped its .publications-intro paragraph (2026-08); .sec-top is the
   only thing left above the list now. Same fix, same value, as the
   .publications-page .publication-list rule below, which hit this exact
   gap when /publications/ lost its own intro heading. */
.news-section .publication-list{margin-top:32px}
.news-list{margin-top:52px}
/* .lead-stack p (0-1-1) would otherwise win over a bare .news-count-line (0-1-0) */
.news-count-line,.lead-stack .news-count-line{margin:18px 0 0;font:500 var(--fs-nano) var(--font-m);letter-spacing:.13em;color:var(--mint)}
.news-filter{display:flex;flex-direction:column;gap:10px;margin-bottom:34px}
.news-chips{display:flex;flex-wrap:wrap;gap:8px}
/* Each chip group opens with an ALL chip, so the groups need their own
   heading to stay apart: a micro label with a hairline running to the right,
   on its own line above the chips. */
.news-chips-label{flex-basis:100%;display:flex;align-items:center;gap:14px;margin-top:8px;font:500 var(--fs-micro) var(--font-m);letter-spacing:.22em;color:var(--muted)}
.news-chips-label::after{content:"";flex:1;height:1px;background:rgba(227,235,236,.16)}
.news-chips:first-child .news-chips-label{margin-top:0}
/* chips are controls, not micro-labels: text and border carry their own contrast, --dim stays as is */
.news-chip{background:none;border:1px solid rgba(227,235,236,.4);padding:9px 15px;font:500 var(--fs-nano) var(--font-m);letter-spacing:.13em;color:var(--muted);cursor:pointer;transition:color .25s,border-color .25s,background .25s}
.news-chip:hover{color:var(--ice);border-color:rgba(227,235,236,.62);background:rgba(227,235,236,.03)}
.news-chip.is-on{color:var(--mint);border-color:rgba(167,203,196,.55);background:rgba(167,203,196,.07)}
.news-row[hidden]{display:none}
/* tag links on the featured news cards; the anchors themselves reuse .ticker-tag */
.news-card-tags{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:12px}
/* --- partner logos (tools/build-news.js, `partner:` in content/news/*.md) ---
   Each logo is the organization's own file, so the set has nothing in common:
   wordmarks 13:1 wide, a portrait crest, white-on-transparent art, one JPG with
   its background already baked in. So none of them size the box — the chip does,
   and object-fit does the fitting. The chip is a plate rather than a bare image
   because this site's surfaces are near-black and most of these marks are drawn
   in dark ink for white paper. Two sizes only, set by the wrapper: the archive
   row and the article header.
   Not a link: the logo says who the release is about, and the row it sits in is
   already one link to that release. */
.news-row-partners{--partner-h:17px;--partner-w:96px}
.article-partners{--partner-h:25px;--partner-w:142px;margin-top:22px}
.news-row-partners,.article-partners{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.partner-logo{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;
  padding:4px 7px;border-radius:3px;background:#f2f5f6;box-shadow:inset 0 0 0 1px rgba(11,27,61,.14)}
.partner-logo img{display:block;height:var(--partner-h);width:auto;max-width:var(--partner-w);object-fit:contain}
/* white-ink art (a logo published for dark headers) would vanish on the plate:
   it gets the dark plate and the hairline that keeps the plate visible.
   Unused by the current PARTNERS registry (every logo taken from xFOREST's own
   site happens to be dark ink on its own white/light background already), kept
   for the next partner whose own art is white-on-transparent. */
.partner-logo-light{background:#0c1118;box-shadow:inset 0 0 0 1px rgba(227,235,236,.2)}
/* a portrait crest held to the wordmarks' height is a speck: give it the height
   back and let it match them by area, which is what the eye reads anyway.
   Unused by the current PARTNERS registry; kept for the next portrait crest. */
.partner-logo-tall img{height:calc(var(--partner-h) * 1.9)}
/* For a logo file that is itself a wide share-card image — the wordmark
   occupying only the middle of the frame, the rest its own light background —
   fitting the whole file would print the margin, not the logo. This class
   turns the chip into a window onto the middle of the image instead: cover
   fills it, the scale zooms past the baked margin, and the file's own light
   background stands in for the plate. Unused by the current PARTNERS registry
   (no logo sourced from xFOREST's own site needs it); kept for the next asset
   shaped like one. */
.partner-logo-inset{padding:0}
.partner-logo-inset img{height:calc(var(--partner-h) + 8px);width:calc(var(--partner-w) * .58);
  max-width:none;object-fit:cover;transform:scale(1.9)}
/* The rows keep their three columns and gain a fixed fourth for the chips, so
   the titles of every logo-bearing row still end on the same line. Two chips
   stack inside it — the row is 112px tall before they arrive. */
.news-row:has(.news-row-partners){grid-template-columns:110px 1fr 116px 220px}
/* --- generated news article pages (tools/build-news.js) ---
   One release, one page. The hero is the compact cousin of .detail-hero:
   a release title is a sentence, not a display word, so it sizes down. */
.article-hero{min-height:0;padding:calc(var(--nav-h) + 96px) 0 54px}
/* .detail-hero::before paints over the whole header; the grid pages lift
   their content with z-index:2 and this container needs the same. */
.article-hero .container{position:relative;z-index:2}
/* .detail-hero h1 (0-1-1) would otherwise win with its display-size clamp:
   a release title is a sentence, not a display word, so it sizes down. */
/* overflow-wrap:anywhere（break-word ではなく）。和文の見出しに混じる
   "Communications" や "Therapeutics" は分割不能な一語で、狭い幅では 1 行に
   入らず箱の外へ出る。実測：390px で /jp/news/2021-07-01-mrna-degradation-paper/
   の見出しが 20.5px、320px では 90.5px はみ出す。break-word では min-content が
   縮まないので箱の外へ出るのは止まらない。anywhere は min-content にも効く
   （.publication-cite cite と同じ理由・同じ書き方）。
   実測の範囲：11 の和文ニュースページ × 390/360/320px の 12 セルではみ出しが
   0 になり、悪化したセルは 0、article-title 以外の見出しは 1 つも動かず、
   英語ニュースページは全幅で無変更。1440 / 768 / 430px では何も変わらない。
   代償として欧文語が途中で割れる（390px で "Communication"＋"s"）。誰かが
   見直したくなる見た目だが、箱の外へ出るよりはましと判断した。 */
.detail-hero .article-title{font-size:clamp(1.9rem,3.6vw,3.2rem);line-height:1.16;letter-spacing:-.01em;margin:20px 0 0;max-width:21em;overflow-wrap:anywhere}
.article-meta-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 24px;margin-top:28px}
.article-meta-row .news-card-tags{margin-top:0}
.article-date{font:500 var(--fs-nano) var(--font-m);letter-spacing:.13em;color:var(--muted)}
/* .article-container stays the standard .container width so the body column
   left-aligns with the hero title; the ch caps below keep lines readable. */
.article-lead{font:500 1.14rem/1.8 var(--font-b);color:var(--ice);max-width:58ch;margin:0 0 30px}
.article-body p{font-family:var(--font-b);font-size:1.02rem;line-height:1.9;color:var(--muted);max-width:64ch;margin:0 0 20px}
.article-body a{color:var(--teal-soft);text-decoration:underline;text-underline-offset:3px}
.article-body ul{margin:0 0 20px;padding-left:1.25em}
.article-body li{font-family:var(--font-b);font-size:1.02rem;line-height:1.8;color:var(--muted);margin-bottom:8px}
.article-body h3{font-size:1.14rem;margin:34px 0 14px}
.article-pending{font:400 var(--fs-meta)/1.85 var(--font-b);color:var(--muted);border:1px solid var(--line);padding:18px 22px;max-width:64ch;margin:0 0 30px}
.article-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px 34px;margin-top:46px;padding-top:26px;border-top:1px solid var(--line)}
/* empty filter result: one centred line that still holds the list's border box open */
.news-empty{display:grid;place-items:center;min-height:186px;padding:34px 24px;text-align:center;font:500 var(--fs-nano)/1.7 var(--font-m);letter-spacing:.16em;color:var(--muted);text-transform:uppercase}
.news-empty[hidden]{display:none}

@media (max-width:1100px){
  /* .detail-page hands over to the burger 240px earlier than / and /jp/ do.
     .lang-switch is left out of the hide list for the same reason as in the
     860px rule above — it stays in the header at every width — and gets the
     same right-edge treatment, which has to be repeated here because this band
     starts above 860px. */
  .detail-page .nav-links,.detail-page .nav-contact{display:none}
  .detail-page .lang-switch{margin-left:auto}
  .detail-page #burger{display:block;margin-left:0}
  .detail-hero-grid{grid-template-columns:1.15fr .7fr;gap:54px}
  .platform-detail-grid{grid-template-columns:1fr 1fr}
  .platform-detail-card{min-height:330px}
  .publication-card,.partner-card{grid-template-columns:100px 1fr 200px;gap:26px;padding:38px 28px}
  .partnerships-page .milestone-item{padding:20px 28px}
}
@media (max-width:860px){
  .proof-nav{grid-template-columns:1fr 1fr}.proof-nav .proof-metric:nth-child(3){border-left:0}.proof-nav .proof-metric:nth-child(n+3){border-top:1px solid var(--hair)}
  .evidence-grid{grid-template-columns:1fr}.funding-card{border-right:0;border-bottom:1px solid var(--line);min-height:420px}
  .detail-hero{min-height:700px}.detail-hero-grid{grid-template-columns:1fr;gap:58px}.detail-hero-copy{max-width:560px}
  .detail-hero-compact{min-height:0}.detail-hero-compact .detail-hero-grid{gap:34px}
  .detail-split-heading,.publications-intro{grid-template-columns:1fr;gap:32px}
  .resolution-grid{grid-template-columns:1fr}.resolution-card+.resolution-card{border-left:0;border-top:1px solid var(--line)}
  .science-reference{grid-template-columns:80px 1fr}.science-reference i{grid-column:2;text-align:left}
  /* the chips lose their own column and fall in under the title, above the CTA */
  .news-row:has(.news-row-partners){grid-template-columns:80px 1fr}
  .news-row-partners{grid-column:2;margin-top:2px}
  .publication-card,.partner-card{grid-template-columns:80px 1fr}.publication-action{grid-column:2;border-left:0;border-top:1px solid var(--hair);padding:24px 0 0}.publication-action .text-link{margin-top:20px}
}
@media (max-width:680px){
  .proof-nav{grid-template-columns:1fr}.proof-nav .proof-metric{border-left:0!important;border-top:1px solid var(--hair)}.proof-nav .proof-metric:first-child{border-top:0}
  .funding-card,.milestone-panel{padding:36px 24px}.milestone-head{flex-direction:column;gap:16px}.milestone-head h3{text-align:left}
  .milestone-item{gap:12px}
  .detail-hero{padding:calc(var(--nav-h) + 80px) 0 80px;min-height:680px}.detail-hero h1{font-size:clamp(3rem,15vw,4.5rem)}
  .detail-hero-compact{min-height:0;padding:calc(var(--nav-h) + 42px) 0 42px}.detail-hero-compact h1{font-size:clamp(2.3rem,10.5vw,3.1rem)}
  .detail-hero-compact+main #pipeline{padding-top:52px}
  .detail-hero-field i{right:-60%;opacity:.7}.detail-hero-field>span{opacity:.7}
  .detail-section{padding:90px 0}.detail-split-heading,.publications-intro{margin:48px 0 40px}.detail-split-heading h2,.publications-intro h2{font-size:clamp(2.4rem,12vw,3.6rem)}
  .science-metrics{grid-template-columns:1fr}.science-metrics span+span{border-left:0;border-top:1px solid var(--hair)}
  .resolution-card{padding:38px 24px;min-height:520px}.platform-detail-grid{grid-template-columns:1fr}.platform-detail-card{min-height:300px}
  .science-reference{grid-template-columns:1fr;gap:10px;padding:22px 20px}.science-reference i{grid-column:1}.science-reference strong{font-size:.95rem}
  .news-row:has(.news-row-partners){grid-template-columns:1fr}.news-row-partners{grid-column:1;margin-top:0}
  .article-partners{margin-top:18px}
  .publication-card,.partner-card{grid-template-columns:1fr;gap:24px;padding:32px 22px}.publication-index,.partner-index{flex-direction:row}.publication-action{grid-column:1}.publication-main h2{font-size:1.45rem}
  .partner-card{min-height:0}.partner-index{flex-wrap:wrap;gap:8px 18px}
  .partnerships-page .milestone-item{min-height:0;padding:18px 22px}
  /* the two chip rows are the tallest thing on a phone: tighten, never scroll
     sideways. The per-chip padding that used to sit here was dead — the
     append-only .news-chip rule further down the file overrides it — so the
     tightening is the gaps only. */
  .news-section .publication-list{margin-top:24px}
  .news-list{margin-top:34px}.news-filter{gap:7px;margin-bottom:26px}.news-chips{gap:6px}
  .news-count-line,.lead-stack .news-count-line{margin-top:14px}
  .news-card{min-height:0}
  .news-empty{min-height:142px;padding:28px 20px;letter-spacing:.12em}
}
@media (prefers-reduced-motion:reduce){
  .detail-hero-field>*{animation:none!important}
}

/* ================= Cinematic science visuals ================= */
.cinematic-surface{
  --cinema-x:0px;--cinema-y:0px;--cinema-tilt-x:0deg;--cinema-tilt-y:0deg;
  position:relative;isolation:isolate;overflow:hidden
}
.cinematic-surface>:not(.cinematic-particles):not(.cinematic-overlay){position:relative;z-index:2}
.cinematic-particles,.cinematic-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.cinematic-particles{z-index:0;opacity:0;mix-blend-mode:screen;transition:opacity .9s var(--ease)}
.cinematic-overlay{z-index:1;opacity:0;mix-blend-mode:screen;transform-origin:50% 50%;transform:perspective(900px) translate3d(var(--cinema-x),var(--cinema-y),0) rotateX(var(--cinema-tilt-x)) rotateY(var(--cinema-tilt-y));transition:opacity .9s var(--ease),transform .9s var(--ease)}
.cinematic-overlay svg{display:block;width:100%;height:100%;min-width:0!important;overflow:visible}
.cinematic-surface.is-cinematic-active .cinematic-particles{opacity:.76}
.cinematic-surface.is-cinematic-active .cinematic-overlay,.cinematic-static .cinematic-overlay{opacity:.92}
.cinematic-static .cinematic-overlay{transform:none}

.cinema-depth-back ellipse,.cinema-depth-back path,.cinema-perspective-grid path{
  fill:none;stroke:rgba(95,226,225,.16);stroke-width:1;vector-effect:non-scaling-stroke
}
.cinema-depth-back ellipse:nth-child(even),.cinema-depth-back path:nth-child(even){stroke:rgba(139,123,255,.18)}
.cinema-core{transform-box:fill-box;transform-origin:center;filter:drop-shadow(0 0 15px rgba(92,242,192,.42))}
.advantage-row .cinema-core{opacity:.3}
.advantage-row.cinematic-surface.is-cinematic-active .cinematic-overlay{opacity:.7}
.cinema-rna-ribbon>path,.cinema-rna-stream>path,.cinema-fold-trace,.cinema-dock-path,.cinema-workflow-current,.cinema-base-wave,
.cinema-branch>path,.cinema-matrix-beams>path,.cinema-output-pulse{
  fill:none;stroke:rgba(83,238,222,.68);stroke-width:1.5;stroke-linecap:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 5px rgba(56,225,255,.28))
}
.cinema-rna-ribbon>path:nth-child(2),.cinema-rna-stream>path:nth-child(2),.cinema-fold-trace{stroke:rgba(148,124,255,.7)}
.cinema-rna-ribbon .cinema-rungs{stroke:rgba(232,255,252,.25);stroke-dasharray:2 8}
.cinema-branch>path,.cinema-matrix-beams>path,.cinema-output-pulse,.cinema-workflow-current,.cinema-dock-path{stroke-dasharray:5 12}
.cinema-branch circle,.cinema-data-cluster circle,.cinema-molecule-network circle,.cinema-matrix-hits circle,.cinema-docking-molecule,.cinema-workflow-pulse{
  fill:#eafffa;stroke:#5cf2c0;stroke-width:1;transform-box:fill-box;transform-origin:center;filter:drop-shadow(0 0 8px rgba(92,242,192,.66))
}
.cinema-branch circle:nth-of-type(even),.cinema-molecule-network circle:nth-of-type(3n){fill:#a995ff;stroke:#c4b8ff;filter:drop-shadow(0 0 8px rgba(139,123,255,.58))}
.cinema-hit,.cinema-molecule-network .selected,.cinema-matrix-hits circle:first-child,.cinema-docking-molecule{
  fill:#ffd98e!important;stroke:#fff0cd!important;filter:drop-shadow(0 0 12px rgba(255,190,83,.78))!important
}
.cinema-hit-ring,.cinema-orbit{fill:none;stroke:rgba(255,209,102,.5);stroke-width:1;stroke-dasharray:3 8;vector-effect:non-scaling-stroke}
.cinema-perspective-grid path,.cinema-matrix-plane path{fill:none;stroke:rgba(95,223,219,.17);stroke-width:1;vector-effect:non-scaling-stroke}
.cinema-data-cluster circle{fill:rgba(116,235,230,.58);stroke:none}
.cinema-scan-plane,.cinema-matrix-sweep{opacity:.13}
.cinema-molecule-network path{fill:none;stroke:rgba(110,229,224,.26);stroke-width:1;vector-effect:non-scaling-stroke}
.cinema-pocket>path:first-child{fill:rgba(92,242,192,.04);stroke:rgba(96,244,220,.74);stroke-width:1.4;filter:drop-shadow(0 0 8px rgba(65,239,215,.44))}
.cinema-pocket>circle{fill:rgba(236,255,250,.88);filter:drop-shadow(0 0 10px rgba(92,242,192,.75))}
.cinema-matrix-plane>path:first-child{fill:rgba(8,52,67,.13);stroke:rgba(96,235,223,.32)}
.cinema-matrix-hits circle{fill:#5cf2c0}
.cinema-workflow-gates circle{fill:rgba(8,38,56,.23);stroke:rgba(103,233,224,.3);stroke-width:1;vector-effect:non-scaling-stroke}

.cinematic-surface.is-cinematic-active .cinema-depth-back{transform-box:fill-box;transform-origin:center;animation:cinemaOrbit 22s linear infinite}
.cinematic-surface.is-cinematic-active .cinema-rna-ribbon,.cinematic-surface.is-cinematic-active .cinema-rna-stream,.cinematic-surface.is-cinematic-active .cinema-molecule-network,.cinematic-surface.is-cinematic-active .cinema-fold-trace{transform-box:fill-box;transform-origin:center;animation:cinemaDrift 18s ease-in-out infinite}
.cinematic-surface.is-cinematic-active .cinema-branch>path,.cinematic-surface.is-cinematic-active .cinema-matrix-beams>path,.cinematic-surface.is-cinematic-active .cinema-output-pulse,.cinematic-surface.is-cinematic-active .cinema-workflow-current,.cinematic-surface.is-cinematic-active .cinema-dock-path{animation:cinemaFlow 16s linear infinite}
.cinematic-surface.is-cinematic-active .cinema-core,.cinematic-surface.is-cinematic-active .cinema-hit,.cinematic-surface.is-cinematic-active .cinema-matrix-hits circle,.cinematic-surface.is-cinematic-active .cinema-workflow-pulse{animation:cinemaPulse 14s ease-in-out infinite}
.cinematic-surface.is-cinematic-active .cinema-scan-plane,.cinematic-surface.is-cinematic-active .cinema-matrix-sweep{animation:cinemaSweep 16s ease-in-out infinite}
.cinematic-surface.is-cinematic-active .cinema-docking-molecule{animation:cinemaDock 18s ease-in-out infinite}

.advantage-row.cinematic-surface{background:radial-gradient(circle at 76% 20%,rgba(96,76,210,.09),transparent 35%),radial-gradient(circle at 8% 82%,rgba(40,218,207,.055),transparent 34%),rgba(7,9,15,.76)}
.rna-universe.cinematic-surface,.structure-figure.cinematic-surface,.workflow-figure.cinematic-surface{background:radial-gradient(circle at 68% 42%,rgba(69,226,219,.085),transparent 25%),radial-gradient(circle at 22% 78%,rgba(114,81,230,.1),transparent 36%),linear-gradient(145deg,rgba(7,16,34,.98),rgba(5,24,42,.95))}
.matrix-system.cinematic-surface{background:radial-gradient(ellipse at 50% 50%,rgba(40,221,210,.1),transparent 26%),radial-gradient(ellipse at 12% 70%,rgba(111,78,232,.09),transparent 31%),linear-gradient(150deg,rgba(7,18,38,.99),rgba(4,28,45,.96))}
.matrix-grid{transition:transform 1.1s var(--ease),box-shadow 1.1s var(--ease)}
.matrix-system.is-cinematic-active .matrix-grid{transform:perspective(760px) rotateX(1.5deg) translateZ(8px);box-shadow:0 26px 70px rgba(0,0,0,.34),0 0 48px rgba(61,226,215,.08)}
.rna-universe.is-cinematic-active .flow-line{animation:cinemaFlow 15s linear infinite}
.resolution-card.cinematic-surface{background:radial-gradient(circle at 75% 20%,rgba(92,75,211,.1),transparent 34%),linear-gradient(145deg,rgba(8,23,43,.96),rgba(7,31,49,.92))}

/* Pipeline palette: deep spectral color with restrained, luminous endpoints. */
.pipeline-wrap{position:relative;isolation:isolate;background:linear-gradient(135deg,rgba(7,13,24,.96),rgba(5,17,25,.92) 52%,rgba(8,12,25,.96));box-shadow:inset 0 1px rgba(255,255,255,.025),0 28px 90px rgba(0,0,0,.24)}
.pipeline-wrap::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse at 62% 28%,rgba(52,220,207,.055),transparent 38%),radial-gradient(ellipse at 28% 70%,rgba(104,79,221,.055),transparent 42%)}
.pipeline-note{background:linear-gradient(90deg,rgba(11,29,40,.7),rgba(8,13,25,.35) 48%,rgba(16,20,39,.62))}
.pipeline-head{background:linear-gradient(90deg,rgba(11,22,35,.94),rgba(12,20,37,.9) 56%,rgba(14,19,38,.94))}
.pipeline-table::-webkit-scrollbar{height:7px}.pipeline-table::-webkit-scrollbar-thumb{background:linear-gradient(90deg,#276f72,#5e4ca6);border:2px solid #070d17}
.pipeline-group{color:#73f2d3;background:linear-gradient(90deg,rgba(37,157,137,.105),rgba(15,64,72,.045) 46%,transparent)}
.pipeline-group.violet{color:#b6a5ff;background:linear-gradient(90deg,rgba(111,80,206,.12),rgba(58,40,111,.045) 46%,transparent)}
.pipeline-group.blue{color:#6bc9ff;background:linear-gradient(90deg,rgba(33,130,196,.12),rgba(19,68,112,.045) 46%,transparent)}
.pipeline-group.indigo{color:#8f9eff;background:linear-gradient(90deg,rgba(69,82,190,.12),rgba(38,43,105,.045) 46%,transparent)}
.pipeline-group i{background:linear-gradient(180deg,#ecfffa,currentColor 55%,color-mix(in srgb,currentColor 45%,#05060b));box-shadow:0 0 14px color-mix(in srgb,currentColor 35%,transparent)}
.pipeline-row{position:relative;--pipeline-deep:#166f67;--pipeline-mid:#2dbca9;--pipeline-hot:#73f2d3;--pipeline-glow:rgba(78,237,205,.3);background:linear-gradient(90deg,rgba(11,30,34,.11),transparent 22%,rgba(9,25,33,.08) 80%,transparent)}
.pipeline-row.violet{--pipeline-deep:#49327d;--pipeline-mid:#7c63d9;--pipeline-hot:#b7a6ff;--pipeline-glow:rgba(153,126,255,.3);background:linear-gradient(90deg,rgba(55,39,92,.11),transparent 24%,rgba(34,27,72,.08) 82%,transparent)}
.pipeline-row.blue{--pipeline-deep:#145080;--pipeline-mid:#278fd1;--pipeline-hot:#68c9ff;--pipeline-glow:rgba(68,173,240,.3);background:linear-gradient(90deg,rgba(20,69,107,.11),transparent 24%,rgba(14,48,83,.08) 82%,transparent)}
.pipeline-row.indigo{--pipeline-deep:#2c377e;--pipeline-mid:#5263cf;--pipeline-hot:#91a0ff;--pipeline-glow:rgba(103,120,247,.3);background:linear-gradient(90deg,rgba(44,53,119,.11),transparent 24%,rgba(31,36,87,.08) 82%,transparent)}
.stage-cell::after{height:4px;background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.018));box-shadow:inset 0 1px rgba(255,255,255,.025)}
.stage-cell.active::after{background:linear-gradient(90deg,var(--pipeline-deep),var(--pipeline-mid) 58%,var(--pipeline-hot));box-shadow:0 0 9px var(--pipeline-glow),inset 0 1px rgba(255,255,255,.28)}
.stage-cell.current::before{width:18px;height:18px;left:clamp(2px,calc(var(--stage-pct,50%) - 10px),calc(100% - 20px));top:calc(50% - 10px);border:1px solid var(--pipeline-hot);background:radial-gradient(circle,rgba(234,255,250,.16),#071019 60%);box-shadow:0 0 0 3px color-mix(in srgb,var(--pipeline-hot) 8%,transparent),0 0 18px var(--pipeline-glow),inset 0 0 9px var(--pipeline-glow)}
.pipeline-target{color:var(--pipeline-hot);background:linear-gradient(90deg,transparent,#08121d 18% 82%,transparent);text-shadow:0 0 10px var(--pipeline-glow)}
.pipeline-row:hover{background-color:rgba(255,255,255,.012)}

@media (min-width:1101px){
}

.workflow-mobile{display:none}

@keyframes cinemaOrbit{0%{transform:rotate(0) scale(.985);opacity:.58}50%{transform:rotate(180deg) scale(1.015);opacity:.9}100%{transform:rotate(360deg) scale(.985);opacity:.58}}
@keyframes cinemaDrift{0%,100%{transform:translate3d(-2px,1px,0) rotate(-.25deg)}50%{transform:translate3d(4px,-4px,0) rotate(.35deg)}}
@keyframes cinemaFlow{to{stroke-dashoffset:-96}}
@keyframes cinemaPulse{0%,100%{opacity:.56;transform:scale(.84)}42%{opacity:1;transform:scale(1.16)}66%{opacity:.72;transform:scale(.96)}}
@keyframes cinemaSweep{0%,16%{transform:translateX(-38%);opacity:0}32%{opacity:.2}65%{transform:translateX(38%);opacity:.14}82%,100%{transform:translateX(44%);opacity:0}}
@keyframes cinemaDock{0%,12%,100%{transform:translate3d(-18px,-9px,0) rotate(-8deg);opacity:.58}45%,72%{transform:translate3d(0,0,0) rotate(0);opacity:1}}

@media (max-width:860px){
  .workflow-desktop-svg{display:none!important}
  .workflow-figure{min-height:0;padding:16px;overflow:hidden}
  .workflow-mobile{display:grid;gap:12px}
  .workflow-mobile-stage{position:relative;display:grid;grid-template-columns:86px minmax(0,1fr) 44px;align-items:center;gap:14px;min-height:84px;padding:16px 14px;border:1px solid rgba(116,224,216,.14);border-radius:14px;background:linear-gradient(115deg,rgba(9,34,54,.86),rgba(12,27,51,.72))}
  .workflow-mobile-stage:not(:last-child)::after{content:"";position:absolute;right:35px;bottom:-13px;width:1px;height:14px;background:linear-gradient(rgba(83,238,219,.75),rgba(120,91,235,.42));box-shadow:0 0 7px rgba(65,237,214,.5)}
  .workflow-mobile-stage i{position:relative;display:block;width:44px;height:44px;border:1px solid rgba(92,239,222,.34);border-radius:50%;background:radial-gradient(circle,rgba(72,229,216,.17),rgba(94,74,210,.06) 56%,transparent 58%)}
  .workflow-mobile-stage i::before,.workflow-mobile-stage i::after{content:"";position:absolute;inset:12px;border:1px solid rgba(203,255,246,.65);border-radius:50%}
  .workflow-mobile-stage.map i::before{inset:10px;border-radius:3px;background:repeating-linear-gradient(90deg,transparent 0 5px,rgba(90,234,221,.42) 5px 6px),repeating-linear-gradient(0deg,transparent 0 5px,rgba(90,234,221,.34) 5px 6px)}
  .workflow-mobile-stage.map i::after,.workflow-mobile-stage.hit i::after{inset:17px;background:#ffd18a;border-color:#fff0ce;box-shadow:0 0 7px rgba(255,184,75,.75)}
  .workflow-mobile-stage.site i::before{inset:11px 8px;border:0;border-radius:0;background:repeating-linear-gradient(90deg,rgba(89,234,221,.7) 0 2px,transparent 2px 6px)}
  .workflow-mobile-stage.validate i::before{inset:9px;border-style:dashed}.workflow-mobile-stage.validate i::after{inset:17px;background:#8b7bff}
  .workflow-mobile-stage b{display:block;margin-bottom:4px;color:var(--text);font-size:.94rem}.workflow-mobile-stage small{display:block;color:var(--muted);font-size:var(--fs-sm);line-height:1.48}.workflow-mobile-stage>span{color:rgba(112,233,221,.58);font:600 var(--fs-sm)/1.35 var(--font-m);letter-spacing:.08em}
}
@media (max-width:680px){
  .cinematic-surface.is-cinematic-active .cinematic-particles{opacity:.56}.cinematic-surface.is-cinematic-active .cinematic-overlay,.cinematic-static .cinematic-overlay{opacity:.72}
  .workflow-figure{padding:11px}.workflow-mobile-stage{grid-template-columns:64px minmax(0,1fr) 38px;gap:10px;padding:14px 10px}.workflow-mobile-stage i{width:38px;height:38px}.workflow-mobile-stage:not(:last-child)::after{right:28px}
}
@media (prefers-reduced-motion:reduce){
  .cinematic-overlay,.cinematic-particles,.cinematic-surface *{animation:none!important;transition-duration:.01ms!important}.cinematic-overlay{opacity:.82;transform:none}.cinematic-particles{display:none}
}

/* ================= Refined hero presentation ================= */
#hero[data-hero-ui]{background:#05060b}
#hero[data-hero-ui]::before{z-index:1;background:radial-gradient(42% 48% at 64% 49%,rgba(86,226,218,.07),transparent 58%),radial-gradient(34% 42% at 67% 48%,rgba(136,105,255,.07),transparent 72%),radial-gradient(40% 42% at 14% 18%,rgba(45,175,205,.05),transparent 70%)}
#hero[data-hero-ui]::after{z-index:2;background:linear-gradient(90deg,rgba(5,6,11,.94) 0%,rgba(5,6,11,.72) 30%,rgba(5,6,11,.16) 52%,rgba(5,6,11,.03) 76%),linear-gradient(180deg,rgba(5,6,11,.2),transparent 24%,transparent calc(100% - 150px),var(--bg))}
#hero[data-hero-ui] #field{z-index:0;filter:saturate(.92) contrast(1.05)}
#hero[data-hero-ui] .hero-grid{z-index:4}
#hero[data-hero-ui] .hero-copy{position:relative;max-width:640px;padding-top:18px}
#hero[data-hero-ui] .hero-copy::before{content:"";position:absolute;left:-24px;top:18px;width:1px;height:74px;background:linear-gradient(var(--mint),rgba(92,242,192,0));opacity:.42}
#hero[data-hero-ui] h1{font-size:clamp(3.25rem,5.75vw,5.45rem);line-height:.96;letter-spacing:-.042em;text-shadow:0 8px 36px rgba(0,0,0,.58)}
#hero[data-hero-ui] .hero-sub{max-width:46ch;color:#9aa4b7;text-shadow:0 3px 18px rgba(0,0,0,.8)}
#hero[data-hero-ui] .hero-note{display:flex;align-items:center;gap:0;width:max-content;max-width:100%;padding:12px 0;border-top:1px solid rgba(149,191,204,.13);border-bottom:1px solid rgba(149,191,204,.08)}
#hero[data-hero-ui] .hero-note em{color:rgba(115,242,211,.28)}
.hero-cinema{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.hero-grid-plane{position:absolute;inset:8% 5% 8% 46%;opacity:.24;background:repeating-linear-gradient(90deg,rgba(120,202,218,.07) 0 1px,transparent 1px 82px),repeating-linear-gradient(0deg,rgba(120,202,218,.055) 0 1px,transparent 1px 82px);-webkit-mask-image:radial-gradient(circle at 48% 50%,#000,transparent 72%);mask-image:radial-gradient(circle at 48% 50%,#000,transparent 72%);transform:perspective(900px) rotateY(-7deg)}
.hero-aperture,.hero-vector{position:absolute;left:63%;top:50%;width:min(49vw,690px);aspect-ratio:1;transform:translate(-50%,-50%);opacity:.38}
.hero-aperture i,.hero-aperture b{position:absolute;border:1px solid rgba(109,229,218,.19);border-radius:50%;inset:2%;animation:heroAperture 26s cubic-bezier(.65,0,.35,1) infinite}
.hero-aperture i:nth-child(2){inset:16%;border-color:rgba(148,124,255,.2);animation-delay:-.15s}.hero-aperture i:nth-child(3){inset:31%;border-style:dashed;border-color:rgba(213,243,239,.15);animation-direction:reverse}.hero-aperture b{inset:43%;border-color:rgba(255,213,139,.24);box-shadow:0 0 34px rgba(255,201,112,.08)}
.hero-vector{overflow:visible;opacity:.32}.hero-vector circle,.hero-vector path{fill:none;stroke:rgba(111,224,218,.28);stroke-width:1;vector-effect:non-scaling-stroke}.hero-vector circle:nth-child(2){stroke:rgba(154,132,255,.24);stroke-dasharray:2 11}.hero-vector path{stroke-dasharray:2 8}.hero-vector-pulse{stroke:rgba(255,211,139,.4)!important;stroke-dasharray:6 18!important;animation:heroVectorFlow 12s linear infinite}
.hero-readout{position:absolute;right:6.5%;top:18%;display:grid;justify-items:end;gap:7px;color:#59677a;font-family:var(--font-m);text-align:right}.hero-readout span{font-size:var(--fs-nano);letter-spacing:.22em;color:rgba(115,242,211,.56)}.hero-readout b{font-size:1.05rem;letter-spacing:.44em;color:rgba(229,244,244,.58);font-weight:500}.hero-readout small{font-size:var(--fs-nano);letter-spacing:.16em}
.hero-phase-track{position:absolute;right:6.5%;bottom:11%;display:flex;align-items:center;gap:12px;color:rgba(109,124,145,.56);font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.16em}.hero-phase-track i{width:38px;height:1px;background:linear-gradient(90deg,rgba(115,242,211,.12),rgba(115,242,211,.62),rgba(115,242,211,.12));animation:heroPhase 8s ease-in-out infinite}
@keyframes heroAperture{0%,36%,100%{transform:scale(1);opacity:.65}60%{transform:scale(.76);opacity:1}65%{transform:scale(1.04);opacity:.9}74%{transform:scale(1);opacity:.65}}
@keyframes heroApertureSurge{0%,44%,100%{transform:scale(1);opacity:.62}45%{transform:scale(1.015);opacity:.96}49%{transform:scale(1.025);opacity:.82}58%{transform:scale(1);opacity:.62}}
#hero[data-hero-mode="surge"] .hero-aperture i,#hero[data-hero-mode="surge"] .hero-aperture b{animation-name:heroApertureSurge}
@keyframes heroPhaseSurge{0%,44%,60%,100%{opacity:.24;transform:scaleX(.7)}45%,49%{opacity:1;transform:scaleX(1)}}
#hero[data-hero-mode="surge"] .hero-phase-track i{animation:heroPhaseSurge 26s linear infinite}
@keyframes heroVectorFlow{to{stroke-dashoffset:-96}}
@keyframes heroPhase{0%,100%{opacity:.24;transform:scaleX(.7)}50%{opacity:1;transform:scaleX(1)}}
@media(max-width:1020px){#hero[data-hero-ui]::after{background:linear-gradient(90deg,rgba(5,6,11,.92),rgba(5,6,11,.42) 58%,rgba(5,6,11,.12)),linear-gradient(180deg,transparent calc(100% - 140px),var(--bg))}.hero-readout{top:14%;right:4%}.hero-phase-track{display:none}.hero-aperture,.hero-vector{left:58%;width:min(68vw,620px);opacity:.27}.hero-grid-plane{inset:10% 2% 10% 32%}}
@media(max-width:680px){#hero[data-hero-ui]{align-items:flex-end;padding-bottom:88px}#hero[data-hero-ui] .hero-copy{padding-top:0}#hero[data-hero-ui] .hero-copy::before,.hero-readout,.hero-phase-track{display:none}#hero[data-hero-ui] h1{font-size:clamp(2.65rem,12vw,4rem)}#hero[data-hero-ui]::after{background:linear-gradient(180deg,rgba(5,6,11,.08),rgba(5,6,11,.34) 34%,rgba(5,6,11,.96) 68%,var(--bg))}.hero-aperture,.hero-vector{left:50%;top:36%;width:92vw;opacity:.2}.hero-grid-plane{inset:5% -20% 42%;opacity:.18}#hero[data-hero-ui] .hero-note{width:100%;font-size:var(--fs-nano);letter-spacing:.08em;overflow:visible;white-space:normal;flex-wrap:wrap;line-height:1.7}}
@media(max-width:680px){html[lang="ja"] #hero[data-hero-ui] h1{font-size:clamp(2.5rem,11.4vw,3.7rem)}html[lang="ja"] #hero[data-hero-ui] h1 .acc-grad{display:block;width:max-content;white-space:nowrap;margin-top:3px}}
@media(prefers-reduced-motion:reduce){.hero-aperture *,.hero-vector-pulse,.hero-phase-track i{animation:none!important}}

/* ================= Opening sequence: evidence to pipeline ================= */
#proof{position:relative;isolation:isolate;overflow:hidden;background:linear-gradient(180deg,rgba(7,11,18,.96),rgba(6,9,15,.9))}
#proof::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse at 16% 20%,rgba(87,225,211,.045),transparent 28%),radial-gradient(ellipse at 70% 110%,rgba(126,93,222,.05),transparent 34%)}
.proof-signal{position:absolute;z-index:4;left:50%;bottom:0;width:min(1180px,calc(100% - 48px));height:1px;transform:translateX(-50%);background:rgba(131,182,193,.1);pointer-events:none}
.proof-signal span{position:absolute;top:-3px;width:7px;height:7px;border:1px solid rgba(115,242,211,.36);border-radius:50%;background:#071018;box-shadow:0 0 10px rgba(115,242,211,.14)}.proof-signal span:nth-of-type(1){left:0}.proof-signal span:nth-of-type(2){left:25%}.proof-signal span:nth-of-type(3){left:50%}.proof-signal span:nth-of-type(4){left:75%}.proof-signal span:nth-of-type(5){right:0}
.proof-signal i{position:absolute;top:-1px;left:-18%;width:18%;height:2px;background:linear-gradient(90deg,transparent,rgba(115,242,211,.88),rgba(95,202,255,.56),transparent);filter:drop-shadow(0 0 6px rgba(115,242,211,.62));animation:proofSignal 12s cubic-bezier(.6,0,.4,1) infinite}
.proof-nav .proof-metric{overflow:hidden;background:linear-gradient(145deg,rgba(11,19,29,.38),rgba(7,10,17,.1));transition:background .45s,border-color .35s,transform .45s var(--ease)}
.proof-nav .proof-metric::before{content:"";position:absolute;inset:0;opacity:0;pointer-events:none;background:radial-gradient(circle at 72% 12%,rgba(115,242,211,.085),transparent 33%),linear-gradient(120deg,transparent 48%,rgba(115,242,211,.035),transparent 64%);transform:translateX(-12%);transition:opacity .45s,transform .7s var(--ease)}
.proof-nav .proof-metric:hover{transform:translateY(-3px);background:linear-gradient(145deg,rgba(18,35,43,.64),rgba(9,13,22,.42));border-color:rgba(115,242,211,.2)}.proof-nav .proof-metric:hover::before{opacity:1;transform:none}.proof-nav .proof-value{transition:color .35s,transform .45s var(--ease)}.proof-nav .proof-metric:hover .proof-value{color:#f5fffc;transform:translateX(4px)}
.pipeline-wrap::after{content:"";position:absolute;z-index:5;top:0;bottom:0;left:-18%;width:14%;pointer-events:none;opacity:0;background:linear-gradient(90deg,transparent,rgba(95,236,221,.065),rgba(153,127,255,.045),transparent);transform:skewX(-9deg);mix-blend-mode:screen}
.pipeline-wrap.in::after{animation:pipelineScanIn 2.8s .25s var(--ease) both}
.js .pipeline-wrap .stage-cell.active::after{transform:scaleX(0);transform-origin:left}.pipeline-wrap.in .stage-cell.active::after{animation:stageIgnition .8s var(--ease) both}.pipeline-wrap.in .pipeline-row .stage-cell:nth-child(3)::after{animation-delay:.24s}.pipeline-wrap.in .pipeline-row .stage-cell:nth-child(4)::after{animation-delay:.34s}.pipeline-wrap.in .pipeline-row .stage-cell:nth-child(5)::after{animation-delay:.44s}.pipeline-wrap.in .pipeline-row .stage-cell:nth-child(6)::after{animation-delay:.54s}.pipeline-wrap.in .pipeline-row .stage-cell:nth-child(7)::after{animation-delay:.64s}
.js .pipeline-wrap .stage-cell.current::before{opacity:0;transform:scale(.45)}.pipeline-wrap.in .stage-cell.current::before{animation:pipelineCurrentIn .9s .92s var(--ease) both,pipelineTipPulse 5.6s 1.9s var(--ease) infinite}
/* Per-row stagger for the tip-ring breathing, same ~.26s cadence the bar
   ignition above staggers by stage column. Rows are .pipeline-row children of
   #pipeline-rows, so nth-child counts the row itself, not the stage column. */
.pipeline-wrap.in .pipeline-row:nth-child(2) .stage-cell.current::before{animation-delay:.92s,2.16s}
.pipeline-wrap.in .pipeline-row:nth-child(3) .stage-cell.current::before{animation-delay:.92s,2.42s}
.pipeline-wrap.in .pipeline-row:nth-child(4) .stage-cell.current::before{animation-delay:.92s,2.68s}
.pipeline-wrap.in .pipeline-row:nth-child(5) .stage-cell.current::before{animation-delay:.92s,2.94s}
.pipeline-wrap.in .pipeline-row:nth-child(6) .stage-cell.current::before{animation-delay:.92s,3.2s}
.pipeline-wrap.in .pipeline-row:nth-child(7) .stage-cell.current::before{animation-delay:.92s,3.46s}
.pipeline-wrap.in .pipeline-row:nth-child(8) .stage-cell.current::before{animation-delay:.92s,3.72s}
/* Amplified variant of the old currentSignal breathing: same gesture (a slow
   glow pulse on the tip ring) with a visible scale swing added and a wider
   glow swing, still built only from --pipeline-hot/--pipeline-glow so a row's
   colour never changes, only its motion. This is variant A, from PR #142 —
   Hiroki's 2026-08 follow-up keeps it running ("Aも保持しつつ、Bね") and
   layers variant B's traveling highlight on top rather than replacing it. */
@keyframes pipelineTipPulse{0%,100%{transform:scale(1);box-shadow:0 0 0 3px color-mix(in srgb,var(--pipeline-hot) 8%,transparent),0 0 14px var(--pipeline-glow),inset 0 0 8px var(--pipeline-glow)}50%{transform:scale(1.07);box-shadow:0 0 0 6px color-mix(in srgb,var(--pipeline-hot) 12%,transparent),0 0 30px var(--pipeline-glow),inset 0 0 15px var(--pipeline-glow)}}
/* Variant B, added alongside A above rather than replacing it (Hiroki's
   2026-08 follow-up: 「Bにして、今のハイライトを太くしたものを左から右に
   流して、先端リングまで行くようにしてください。それを繰り返すことで脈打つ
   ような表現ができるはず」, then revised to keep A running too: 「Aも保持
   しつつ、Bね」) — a thick highlight that travels the bar and feeds the tip
   ring, repeating as its own pulse independent of the ring's breathing.
   .stage-sweep is a real element (detail.js), not a pseudo-element — .after
   is already the bar fill and .before is already the ring, so a third layer
   needs its own box; it only exists on .stage-cell.current (same cell as the
   ring).
   It is itself just the clipping box for the travel path: left:0 to
   var(--stage-pct,50%), the same variable-progress endpoint (from PR #139 /
   Issue #135, see the .current::after/::before comment above) that the bar
   cutoff and the ring already use, so the sweep always ends exactly at the
   ring regardless of how far into its stage a row is. .stage-sweep::after is
   the actual moving band, sized as a fraction (50%) of that box rather than
   a fixed px/%-of-cell width, so it scales with the path instead of
   overshooting a short one or looking tiny in a long one; translateX(100%)
   moves it by exactly its own width, landing its trailing edge on the box's
   right edge — i.e. the ring — every time. Both boxes share the bar's
   top:50%/height:4px so the sweep can never read taller than the bar.
   Colour is the row's existing --pipeline-hot only, screen-blended so it
   brightens the stage-boundary tick it starts from instead of flattening
   it. */
.stage-sweep{position:absolute;left:0;top:50%;width:var(--stage-pct,50%);height:4px;overflow:hidden;pointer-events:none}
.stage-sweep::after{content:"";position:absolute;left:0;top:0;width:50%;height:100%;z-index:1;opacity:0;mix-blend-mode:screen;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--pipeline-hot) 55%,transparent),var(--pipeline-hot))}
.pipeline-wrap.in .stage-cell.current .stage-sweep::after{animation:pipelineSweep 4.6s 2.2s var(--ease) infinite}
/* Per-row stagger, same idea as the bar-ignition stagger above: rows are
   .pipeline-row children of #pipeline-rows, so nth-child counts the row
   itself, not the stage column. Kept independent of the ring's own timing so
   the sweep, not the ring, is what reads as this row's pulse. */
.pipeline-wrap.in .pipeline-row:nth-child(2) .stage-cell.current .stage-sweep::after{animation-delay:2.5s}
.pipeline-wrap.in .pipeline-row:nth-child(3) .stage-cell.current .stage-sweep::after{animation-delay:2.8s}
.pipeline-wrap.in .pipeline-row:nth-child(4) .stage-cell.current .stage-sweep::after{animation-delay:3.1s}
.pipeline-wrap.in .pipeline-row:nth-child(5) .stage-cell.current .stage-sweep::after{animation-delay:3.4s}
.pipeline-wrap.in .pipeline-row:nth-child(6) .stage-cell.current .stage-sweep::after{animation-delay:3.7s}
.pipeline-wrap.in .pipeline-row:nth-child(7) .stage-cell.current .stage-sweep::after{animation-delay:4s}
.pipeline-wrap.in .pipeline-row:nth-child(8) .stage-cell.current .stage-sweep::after{animation-delay:4.3s}
@keyframes proofSignal{0%,8%{left:-18%;opacity:0}18%{opacity:1}72%{opacity:.9}92%,100%{left:100%;opacity:0}}
@keyframes pipelineScanIn{0%{left:-18%;opacity:0}18%{opacity:1}75%{opacity:.7}100%{left:108%;opacity:0}}
@keyframes stageIgnition{from{transform:scaleX(0);filter:brightness(1.8)}to{transform:scaleX(1);filter:brightness(1)}}
@keyframes pipelineCurrentIn{from{opacity:0;transform:scale(.45)}to{opacity:1;transform:scale(1)}}
/* Travel only, in transform + opacity (never background-position — too many
   rows animate in parallel for that to stay cheap). 0%→45% is the sweep
   itself (fade in fast, arrive at the ring at 45%, i.e. ~2.1s of the 4.6s
   cycle), 45%→54% is a quick fade once it has "fed" the ring, and the
   remaining ~46% of the cycle is a held, invisible pause before the next
   pass — the pause is what reads as a heartbeat rather than a scan line. */
@keyframes pipelineSweep{0%{transform:translateX(0%);opacity:0}5%{opacity:1}45%{transform:translateX(100%);opacity:1}54%{opacity:0}100%{transform:translateX(100%);opacity:0}}
@media(max-width:680px){.proof-signal{width:min(1180px,calc(100% - 34px))}.proof-signal span:nth-of-type(2){left:50%}.proof-signal span:nth-of-type(3){left:100%}.proof-signal span:nth-of-type(n+4){display:none}.proof-signal i{width:32%;animation-duration:9s}.proof-nav .proof-metric:hover{transform:none}}
/* .js .pipeline-wrap .stage-cell.active::after and .current::before above sit
   at (0,4,1) specificity (their leading .js class), so the plain
   .pipeline-wrap … reset below — (0,3,1) — needs !important to actually win
   under reduced motion, same as the other .js-prefixed resets in this file
   (see .js .fx,.js .reveal and .js .lmi above). Without it a reduced-motion
   visitor was left with the animation's start state forever: bar at
   scaleX(0), ring at opacity:0 — i.e. an empty stage-progress column.
   .stage-sweep::after's own base rule already sets opacity:0, so stopping
   its animation is enough to leave reduced-motion visitors with no sweep and
   no leftover mid-travel frame. */
@media(prefers-reduced-motion:reduce){.proof-signal i,.pipeline-wrap::after,.pipeline-wrap .stage-cell.active::after,.pipeline-wrap .stage-cell.current::before,.pipeline-wrap .stage-cell.current .stage-sweep::after{animation:none!important}.proof-signal i{display:none}.pipeline-wrap .stage-cell.active::after{transform:none!important}.pipeline-wrap .stage-cell.current::before{opacity:1!important;transform:none!important}.pipeline-wrap .stage-cell.current .stage-sweep::after{opacity:0!important}}

/* ================= Pitch-derived brand system ================= */
body{background:radial-gradient(circle at 50% -14%,rgba(81,212,214,.05),transparent 30%),linear-gradient(180deg,#05060b 0%,#06080d 46%,#05060b 100%)}
nav.scrolled{background:rgba(5,6,11,.86)}
#hero[data-hero-ui],#hero{background:#05060b}
#hero::before{background:radial-gradient(50% 42% at 22% 16%,rgba(81,212,214,.06),transparent 70%),radial-gradient(46% 42% at 84% 70%,rgba(127,120,242,.045),transparent 70%)}
#hero::after{background:linear-gradient(100deg,rgba(5,6,11,.7) 0%,rgba(5,6,11,.28) 36%,transparent 60%),linear-gradient(180deg,transparent calc(100% - 140px),var(--bg))}
#proof{background:linear-gradient(108deg,#06090e 0%,#091017 58%,#0a1d1d 118%)}
.proof-nav .proof-metric{background:linear-gradient(145deg,rgba(14,21,29,.54),rgba(5,8,13,.18))}
.proof-value small{font-size:max(var(--fs-nano),.55em);letter-spacing:.08em;color:var(--teal-soft)}
#pipeline{background:radial-gradient(circle at 85% 36%,rgba(81,212,214,.035),transparent 26%),linear-gradient(180deg,#05060b,#070a10 55%,#05060b)}
.pipeline-wrap{background:linear-gradient(132deg,rgba(7,16,39,.98),rgba(11,27,61,.95) 54%,rgba(8,47,63,.93))}
.pipeline-note{background:linear-gradient(90deg,rgba(11,55,102,.48),rgba(11,27,61,.45) 52%,rgba(15,181,168,.12))}
.pipeline-head{background:linear-gradient(90deg,#0b1b3d,#0b3766 62%,#0b6670)}
.pipeline-group{color:#51d4d6;background:linear-gradient(90deg,rgba(15,181,168,.13),rgba(11,55,102,.05) 48%,transparent)}
.pipeline-group.violet{color:#a9a4ff;background:linear-gradient(90deg,rgba(127,120,242,.12),rgba(11,55,102,.045) 48%,transparent)}
.pipeline-group.blue{color:#75b6ff;background:linear-gradient(90deg,rgba(59,130,246,.12),rgba(11,55,102,.045) 48%,transparent)}
.pipeline-group.indigo{color:#8f9cff;background:linear-gradient(90deg,rgba(69,82,189,.14),rgba(11,55,102,.04) 48%,transparent)}
.pipeline-row{--pipeline-deep:#0b716b;--pipeline-mid:#0fb5a8;--pipeline-hot:#51d4d6;--pipeline-glow:rgba(81,212,214,.28)}
.pipeline-row.violet{--pipeline-deep:#413c88;--pipeline-mid:#6d66d8;--pipeline-hot:#a9a4ff;--pipeline-glow:rgba(127,120,242,.3)}
.pipeline-row.blue{--pipeline-deep:#14559d;--pipeline-mid:#2d7dd2;--pipeline-hot:#75b6ff;--pipeline-glow:rgba(59,130,246,.3)}
.pipeline-row.indigo{--pipeline-deep:#28367f;--pipeline-mid:#4552bd;--pipeline-hot:#8f9cff;--pipeline-glow:rgba(99,117,255,.28)}
.pipeline-cards{padding:8px;background:linear-gradient(135deg,rgba(7,16,39,.98),rgba(11,27,61,.96))}.pipeline-card{--card-hot:#51d4d6;--card-mid:#0fb5a8;position:relative;margin-bottom:8px;border:1px solid rgba(101,194,194,.14);background:linear-gradient(145deg,rgba(11,27,61,.92),rgba(6,14,32,.96));overflow:hidden}.pipeline-card:last-child{margin-bottom:0}.pipeline-card.violet{--card-hot:#a9a4ff;--card-mid:#6d66d8}.pipeline-card.blue{--card-hot:#75b6ff;--card-mid:#2d7dd2}.pipeline-card.indigo{--card-hot:#8f9cff;--card-mid:#4552bd}.pipeline-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(var(--card-hot),var(--card-mid))}.pipeline-card header{display:grid;grid-template-columns:1fr auto;gap:8px 16px;padding:20px 18px 16px 22px;border-bottom:1px solid rgba(101,194,194,.11)}.pipeline-card header>span{grid-column:1/-1;font:600 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.12em;color:var(--card-hot);text-transform:uppercase}.pipeline-card header strong{font:600 1.35rem/1.1 var(--font-d)}.pipeline-card header small{align-self:center;font:500 var(--fs-nano)/1.4 var(--font-m);letter-spacing:.04em;color:var(--muted);text-align:right}.pipeline-card-rail{display:grid;grid-template-columns:repeat(4,1fr);padding:20px 16px 15px}.pipeline-card-stage{position:relative;display:flex;flex-direction:column;align-items:center;gap:0;min-width:0;padding-top:20px}.pipeline-card-stage::before{content:"";position:absolute;left:0;right:0;top:6px;height:2px;background:rgba(101,194,194,.1)}.pipeline-card-stage:first-child::before{left:50%}.pipeline-card-stage:last-child::before{right:50%}.pipeline-card-stage.active::before{background:linear-gradient(90deg,var(--card-mid),var(--card-hot))}.pipeline-card-stage.current::before{right:calc(100% - var(--stage-pct,50%))}.pipeline-card-stage::after{content:"";position:absolute;right:0;top:0;width:1px;height:14px;background:rgba(101,194,194,.15)}.pipeline-card-stage:last-child::after{display:none}.pipeline-card-stage i{position:absolute;z-index:2;width:13px;height:13px;border:2px solid rgba(101,194,194,.2);border-radius:50%;background:#08152a;left:clamp(2px,calc(var(--stage-pct,50%) - 8.5px),calc(100% - 15.5px));top:-0.5px;opacity:0;pointer-events:none}.pipeline-card-stage.current i{opacity:1;border-color:var(--card-hot);background:#08152a;box-shadow:0 0 0 4px color-mix(in srgb,var(--card-hot) 12%,transparent),0 0 16px color-mix(in srgb,var(--card-hot) 45%,transparent)}.pipeline-card-stage b{max-width:100%;font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:-.02em;overflow-wrap:anywhere;color:#7f91a9;text-align:center;margin-top:8px}.pipeline-card-stage.current b{color:var(--card-hot)}.pipeline-card-target{display:block;width:max-content;margin:0 auto 12px;padding:5px 9px;background:rgba(5,9,26,.7);color:var(--card-hot);font:500 var(--fs-nano) var(--font-m);letter-spacing:.08em}.pipeline-card footer{display:flex;flex-direction:column;gap:5px;padding:16px 20px 18px 22px;border-top:1px solid rgba(101,194,194,.11)}.pipeline-card footer strong,.pipeline-card footer small{font:500 var(--fs-nano)/1.45 var(--font-m);letter-spacing:.03em}.pipeline-card footer small{color:#7f91a9}
#advantage{background:radial-gradient(circle at 82% 12%,rgba(127,120,242,.045),transparent 30%),linear-gradient(180deg,#05060b,#080b11 50%,#05060b)}
#science{background:radial-gradient(circle at 18% 58%,rgba(81,212,214,.035),transparent 28%),linear-gradient(180deg,#05060b,#070a0f 48%,#05060b)}
#technology{background:radial-gradient(circle at 50% 40%,rgba(92,231,194,.035),transparent 30%),linear-gradient(180deg,#05060b,#080b11 48%,#05060b)}

/* ================= Featured asset ================= */
#asset{position:relative;isolation:isolate;overflow:hidden;background:linear-gradient(118deg,#05070c 0%,#091017 55%,#071718 118%)}
#asset::before{content:"";position:absolute;inset:0;z-index:-2;background:radial-gradient(circle at 72% 38%,rgba(81,212,214,.075),transparent 27%),radial-gradient(circle at 18% 72%,rgba(127,120,242,.035),transparent 32%)}
#asset::after{content:"";position:absolute;inset:0;z-index:-1;opacity:.12;background-image:linear-gradient(rgba(101,194,194,.1) 1px,transparent 1px),linear-gradient(90deg,rgba(101,194,194,.08) 1px,transparent 1px);background-size:88px 88px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 34%,#000 78%,transparent);mask-image:linear-gradient(90deg,transparent,#000 34%,#000 78%,transparent)}
.asset-halo{position:absolute;width:720px;height:432px;right:-100px;top:120px;background:linear-gradient(100deg,var(--cyan),var(--mint) 48%,var(--violet));-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;opacity:.095;filter:drop-shadow(0 0 34px rgba(81,212,214,.25));transform:rotate(-12deg);pointer-events:none}
.asset-heading{margin-bottom:44px}.asset-heading .lead{max-width:48ch}
.asset-stage{display:grid;grid-template-columns:minmax(310px,.76fr) minmax(0,1.5fr);border:1px solid rgba(101,194,194,.22);background:linear-gradient(135deg,rgba(5,14,34,.84),rgba(11,55,102,.34));box-shadow:0 36px 100px rgba(0,0,0,.32);overflow:hidden}
.asset-profile{display:flex;flex-direction:column;border-right:1px solid rgba(101,194,194,.18);background:linear-gradient(160deg,rgba(11,27,61,.9),rgba(7,16,39,.68));padding:30px}
.asset-id-row{display:flex;align-items:center;gap:14px;padding-bottom:22px;border-bottom:1px solid rgba(101,194,194,.16);font-family:var(--font-m)}
.asset-id-row span{font-size:var(--fs-micro);letter-spacing:.18em;color:var(--teal-soft)}.asset-id-row strong{font:600 clamp(1.8rem,3vw,2.7rem)/1 var(--font-d);letter-spacing:-.03em}.asset-id-row i{margin-left:auto;padding:5px 8px;border:1px solid rgba(81,212,214,.3);color:#8fe7e3;font-size:var(--fs-nano);font-style:normal;letter-spacing:.18em}
.asset-facts{display:grid;margin:6px 0 28px}.asset-facts>div{display:grid;gap:3px;padding:17px 0;border-bottom:1px solid rgba(101,194,194,.12)}.asset-facts span{font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:.2em;color:var(--dim)}.asset-facts b{font:500 var(--fs-sm)/1.45 var(--font-m);letter-spacing:.07em;color:#dcecef}
.asset-story{margin-top:auto}.asset-story>span{font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:.2em;color:var(--cyan)}.asset-story h3{font:600 clamp(1.35rem,2vw,2rem)/1.1 var(--font-d);letter-spacing:-.025em;margin:12px 0}.asset-story p{color:var(--muted);font-size:.91rem;line-height:1.7}
.asset-figure{position:relative;display:flex;flex-direction:column;min-width:0;background:radial-gradient(circle at 48% 48%,rgba(15,181,168,.12),transparent 24%),linear-gradient(145deg,rgba(5,9,26,.5),rgba(11,55,102,.28));overflow:hidden}
.asset-figure svg{width:100%;height:auto;min-height:500px}.asset-figure figcaption{padding:12px 22px;border-top:1px solid rgba(101,194,194,.12);color:var(--dim);font:400 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.08em}.asset-mobile-mechanism{display:none}
.asset-diagram-grid path{fill:none;stroke:rgba(101,194,194,.075);stroke-width:1}.asset-sequence>path{fill:none;stroke:url(#asset-rna-stroke);stroke-width:6;stroke-linecap:round;filter:drop-shadow(0 0 8px rgba(81,212,214,.38))}.asset-sequence .rungs{stroke:rgba(221,250,249,.34);stroke-width:2}.asset-sequence text{fill:rgba(166,177,194,.66);font:500 var(--fs-meta) var(--font-m);letter-spacing:.18em}
html[lang="ja"] .asset-sequence>path{stroke:#51d4d6}.asset-protein path,.asset-protein circle{fill:#173563;stroke:rgba(117,182,255,.5);stroke-width:2;filter:drop-shadow(0 14px 26px rgba(0,0,0,.4))}.asset-protein circle{fill:#244d83;opacity:.86}
.asset-compound path{fill:rgba(255,138,91,.12);stroke:#ff9d72;stroke-width:3}.asset-compound circle{fill:#ffd0b9;filter:drop-shadow(0 0 12px rgba(255,138,91,.9))}.asset-decay path{fill:none;stroke:#51d4d6;stroke-width:4;stroke-dasharray:6 11}.asset-decay circle{fill:#65c2c2;filter:drop-shadow(0 0 8px rgba(81,212,214,.65))}
.asset-callout path{fill:none;stroke:rgba(166,177,194,.48);stroke-width:1}.asset-callout text{fill:#a6b1c2;font:500 var(--fs-micro) var(--font-m);letter-spacing:.08em}.asset-callout.hot path{stroke:rgba(255,138,91,.7)}.asset-callout.hot text{fill:#ffb28e}.asset-steps circle{fill:#51d4d6;filter:drop-shadow(0 0 6px rgba(81,212,214,.8))}.asset-steps path{stroke:rgba(101,194,194,.22)}.asset-steps text{fill:#94a3b8;font:500 var(--fs-nano) var(--font-m);letter-spacing:.05em}
.asset-evidence{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid rgba(101,194,194,.22);border-top:0;background:rgba(242,246,250,.96);color:#0b1b3d}.asset-evidence article{min-height:132px;padding:24px 26px;border-right:1px solid rgba(11,27,61,.12)}.asset-evidence article:last-child{border-right:0}.asset-evidence span{display:block;min-height:32px;color:#536277;font:500 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.12em;text-transform:uppercase}.asset-evidence strong{display:block;margin-top:10px;font:600 clamp(2rem,3.7vw,3.7rem)/1 var(--font-d);letter-spacing:-.04em}.asset-evidence small{font-size:max(var(--fs-nano),.35em);letter-spacing:.02em}.asset-note{margin-top:14px;color:#91a1b8}
.asset-stage.in .asset-protein{animation:assetProteinFloat 18s ease-in-out infinite}.asset-stage.in .asset-compound{animation:assetCompoundPulse 7s ease-in-out infinite}.asset-stage.in .asset-decay path{animation:assetDecay 12s linear infinite}
@keyframes assetProteinFloat{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-8px) rotate(1deg)}}@keyframes assetCompoundPulse{0%,100%{opacity:.78;filter:drop-shadow(0 0 0 rgba(255,138,91,0))}48%{opacity:1;filter:drop-shadow(0 0 12px rgba(255,138,91,.45))}}@keyframes assetDecay{to{stroke-dashoffset:-90}}

/* ================= Engine narrative ================= */
.engine-stage-grid{display:grid;grid-template-columns:repeat(3,1fr);margin:30px 0 42px;border:1px solid rgba(101,194,194,.18);background:linear-gradient(135deg,rgba(11,27,61,.7),rgba(8,21,42,.82))}
.engine-stage-grid article{position:relative;display:flex;flex-direction:column;min-height:310px;padding:26px;border-right:1px solid rgba(101,194,194,.16);overflow:hidden}.engine-stage-grid article:last-child{border-right:0}.engine-stage-grid article:not(:last-child)::after{content:"";position:absolute;right:-6px;top:72px;width:12px;height:12px;border-top:1px solid var(--cyan);border-right:1px solid var(--cyan);transform:rotate(45deg);z-index:2;background:#0a1b37}
.engine-stage-grid article>span{color:var(--cyan);font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:.18em}.engine-stage-grid h3{font:600 1.5rem/1.12 var(--font-d);margin:18px 0 10px}.engine-stage-grid p{color:var(--muted);font-size:var(--fs-sm);line-height:1.65}.engine-stage-grid small{margin-top:auto;padding-top:20px;color:var(--dim);font:500 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.08em}.engine-core-stage{background:linear-gradient(155deg,rgba(11,55,102,.54),rgba(15,181,168,.08))}
.engine-stage-icon{position:relative;width:86px;height:72px;margin-top:24px}.target-icon i{position:absolute;width:30px;height:30px;border:1px solid rgba(81,212,214,.7);border-radius:50%;background:rgba(81,212,214,.04)}.target-icon i:nth-child(1){left:0;top:20px}.target-icon i:nth-child(2){left:28px;top:4px}.target-icon i:nth-child(3){left:55px;top:30px}.matrix-icon{display:grid;grid-template-columns:repeat(3,16px);grid-template-rows:repeat(3,16px);gap:5px}.matrix-icon i{border:1px solid rgba(101,194,194,.3);background:rgba(81,212,214,.05)}.matrix-icon i:nth-child(5){background:#ff8a5b;border-color:#ffb28e;box-shadow:0 0 10px rgba(255,138,91,.55)}.lead-icon::before{content:"";position:absolute;left:7px;right:7px;top:35px;height:1px;background:linear-gradient(90deg,#51d4d6,#3b82f6)}.lead-icon i{position:absolute;top:27px;width:16px;height:16px;border:1px solid var(--cyan);border-radius:50%;background:#0b1b3d}.lead-icon i:nth-child(1){left:0}.lead-icon i:nth-child(2){left:34px}.lead-icon i:nth-child(3){right:0;border-color:#ff8a5b;box-shadow:0 0 9px rgba(255,138,91,.4)}

/* ================= Value model ================= */
.value-model{display:grid;grid-template-columns:1.05fr 1fr 1fr;margin-top:42px;border:1px solid rgba(101,194,194,.18);background:linear-gradient(125deg,rgba(11,27,61,.78),rgba(8,21,42,.86))}
.value-model-head,.value-lane{padding:28px;border-right:1px solid rgba(101,194,194,.14)}.value-lane:last-child{border-right:0}.value-model-head>span,.value-lane>span{color:var(--cyan);font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:.18em}.value-model-head h3{font:600 clamp(1.5rem,2.4vw,2.25rem)/1.1 var(--font-d);letter-spacing:-.03em;margin-top:16px}.value-lane h4{font:600 1.25rem/1.2 var(--font-d);margin:16px 0 10px}.value-lane p{color:var(--muted);font-size:var(--fs-sm);line-height:1.62;min-height:110px}.value-track{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:22px;padding-top:18px}.value-track i{position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,#51d4d6,#0fb5a8,#3b82f6)}.asset-lane .value-track i{background:linear-gradient(90deg,#51d4d6,#3b82f6,#ff8a5b)}.value-track b{color:#7f91a9;font:500 var(--fs-nano)/1.4 var(--font-m);letter-spacing:.05em}

@media(max-width:980px){.asset-stage{grid-template-columns:1fr}.asset-profile{border-right:0;border-bottom:1px solid rgba(101,194,194,.18)}.asset-story{margin-top:20px}.asset-figure svg{min-height:0}.engine-stage-grid{grid-template-columns:1fr}.engine-stage-grid article{min-height:230px;border-right:0;border-bottom:1px solid rgba(101,194,194,.16)}.engine-stage-grid article:last-child{border-bottom:0}.engine-stage-grid article:not(:last-child)::after{right:30px;top:auto;bottom:-6px;transform:rotate(135deg)}.engine-stage-grid small{position:static;display:block;margin-top:20px}.value-model{grid-template-columns:1fr 1fr}.value-model-head{grid-column:1/-1;border-right:0;border-bottom:1px solid rgba(101,194,194,.14)}}
@media(max-width:680px){#asset{padding-top:96px}.asset-halo{display:none}.asset-stage{border-left:0;border-right:0;margin-left:-24px;margin-right:-24px}.asset-profile{padding:24px}.asset-id-row{flex-wrap:wrap}.asset-id-row i{margin-left:0}.asset-figure{margin:0}.asset-figure svg{width:125%;margin-left:-12.5%}.asset-figure figcaption{padding:12px 24px}.asset-evidence{grid-template-columns:1fr;margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}.asset-evidence article{min-height:106px;border-right:0;border-bottom:1px solid rgba(11,27,61,.12)}.asset-evidence article:last-child{border-bottom:0}.asset-evidence span{min-height:0}.asset-evidence strong{font-size:2.45rem}.asset-note{font-size:var(--fs-nano)}.engine-stage-grid{margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}.engine-stage-grid article{padding:24px}.value-model{grid-template-columns:1fr;margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}.value-model-head,.value-lane{grid-column:auto;border-right:0;border-bottom:1px solid rgba(101,194,194,.14)}.value-lane p{min-height:0}.asset-steps text{font-size:var(--fs-nano)}.asset-callout text{font-size:var(--fs-micro)}}
@media(max-width:680px){.asset-figure>svg{display:none}.asset-mobile-mechanism{display:grid;padding:22px 24px}.asset-mobile-mechanism article{position:relative;display:grid;grid-template-columns:34px 66px 1fr;align-items:center;gap:16px;min-height:94px;border-bottom:1px solid rgba(101,194,194,.13)}.asset-mobile-mechanism article:last-child{border-bottom:0}.asset-mobile-mechanism article:not(:last-child)::after{content:"";position:absolute;left:66px;bottom:-18px;width:1px;height:36px;background:linear-gradient(#51d4d6,rgba(81,212,214,.12));z-index:2}.asset-mobile-mechanism span{font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em;color:#51d4d6}.asset-mobile-mechanism b{font:500 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.09em;color:#d7e8eb}.asset-mobile-mechanism i{position:relative;display:block;width:50px;height:50px;border:1px solid rgba(81,212,214,.24);border-radius:50%;background:radial-gradient(circle,rgba(81,212,214,.14),rgba(11,27,61,.2))}.asset-mobile-mechanism i::before,.asset-mobile-mechanism i::after{content:"";position:absolute}.mobile-bind::before{left:12px;top:20px;width:24px;height:10px;border:2px solid #51d4d6;border-radius:50%}.mobile-bind::after{right:8px;top:16px;width:10px;height:10px;border:2px solid #ff9d72;transform:rotate(45deg)}.mobile-rbp::before{left:8px;top:10px;width:23px;height:20px;border:1px solid #75b6ff;border-radius:55% 45% 60% 40%;opacity:.72}.mobile-rbp::after{right:7px;bottom:9px;width:18px;height:1px;background:#ff9d72;box-shadow:0 -6px 0 rgba(255,157,114,.55),0 6px 0 rgba(255,157,114,.3)}.mobile-destabilize::before{left:9px;right:9px;top:24px;border-top:2px dashed #51d4d6;transform:rotate(-12deg)}.mobile-destabilize::after{left:16px;top:10px;width:5px;height:5px;border-radius:50%;background:#ff9d72;box-shadow:14px 23px 0 #65c2c2,23px 7px 0 rgba(81,212,214,.7)}.mobile-decay::before{inset:11px;border:2px dotted #51d4d6;border-radius:50%}.mobile-decay::after{left:22px;top:22px;width:6px;height:6px;border-radius:50%;background:#ff9d72;box-shadow:0 0 12px #ff8a5b}}
@media(prefers-reduced-motion:reduce){.asset-protein,.asset-compound,.asset-decay path{animation:none!important}}
@media(max-width:860px){.pipeline-table{display:none}.pipeline-cards{display:block}.pipeline-note{padding:14px 18px;gap:10px;align-items:flex-start;flex-direction:column}.pipeline-disclaimer{padding:16px 18px}}
@media(max-width:680px){.proof-nav{grid-template-columns:1fr 1fr}.proof-nav .proof-metric{min-height:118px!important;padding:18px!important;border-top:1px solid var(--hair)!important;border-left:1px solid var(--hair)!important}.proof-nav .proof-metric:nth-child(odd){border-left:0!important}.proof-nav .proof-metric:nth-child(-n+2){border-top:0!important}.proof-nav .proof-kicker{font-size:var(--fs-nano)}.proof-nav .proof-value{font-size:1.45rem}.proof-nav .proof-metric>span:last-child{font-size:var(--fs-nano);line-height:1.35}.pipeline-wrap{margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}.pipeline-cards{padding:7px}.advantage-proofbar{grid-template-columns:1fr;margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}.advantage-proofbar article{grid-template-columns:98px 1fr;border-right:0;border-bottom:1px solid rgba(101,194,194,.14)}.advantage-proofbar article:last-child{border-bottom:0}}

/* ================= MatrixFOREST assay principle ================= */
.assay-principle{margin-top:34px;border:1px solid rgba(101,194,194,.2);background:linear-gradient(135deg,rgba(11,27,61,.88),rgba(8,21,42,.94));overflow:hidden}.assay-principle-copy{display:grid;grid-template-columns:180px minmax(260px,.8fr) minmax(320px,1.2fr);gap:30px;align-items:start;padding:30px;border-bottom:1px solid rgba(101,194,194,.15)}.assay-principle-copy>span{font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.17em;color:#51d4d6}.assay-principle-copy h3{font:600 clamp(1.5rem,2.6vw,2.35rem)/1.08 var(--font-d);letter-spacing:-.03em}.assay-principle-copy p{color:var(--muted);font-size:var(--fs-sm);line-height:1.65}.assay-principle-rail{display:grid;grid-template-columns:repeat(5,1fr);border-bottom:1px solid rgba(101,194,194,.15)}.assay-principle-rail article{position:relative;display:grid;grid-template-columns:58px 24px 1fr;align-items:center;gap:10px;min-height:110px;padding:18px;border-right:1px solid rgba(101,194,194,.12)}.assay-principle-rail article:last-child{border-right:0}.assay-principle-rail article:not(:last-child)::after{content:"";position:absolute;right:-5px;top:51px;width:9px;height:9px;border-top:1px solid #51d4d6;border-right:1px solid #51d4d6;transform:rotate(45deg);background:#09172d;z-index:2}.assay-principle-rail i{position:relative;width:52px;height:52px;border:1px solid rgba(81,212,214,.22);border-radius:50%;background:radial-gradient(circle,rgba(81,212,214,.11),transparent 68%)}.assay-principle-rail i::before,.assay-principle-rail i::after{content:"";position:absolute}.assay-principle-rail span{font:500 var(--fs-nano) var(--font-m);color:#51d4d6}.assay-principle-rail b{font:500 var(--fs-micro)/1.4 var(--font-m);letter-spacing:.04em}.assay-fold::before{left:10px;top:9px;width:28px;height:30px;border:2px solid #51d4d6;border-color:#51d4d6 transparent #51d4d6 #51d4d6;border-radius:50% 46% 55% 42%;transform:rotate(-26deg)}.assay-probe::before{left:9px;top:23px;width:32px;border-top:2px solid #51d4d6;box-shadow:0 -8px 0 rgba(81,212,214,.42),0 8px 0 rgba(81,212,214,.25)}.assay-probe::after{right:8px;top:10px;width:7px;height:7px;border-radius:50%;background:#ff9d72;box-shadow:-16px 26px 0 #ff9d72}.assay-rt::before{left:12px;top:12px;width:24px;height:27px;border-left:2px solid #75b6ff;border-bottom:2px solid #75b6ff;transform:skewX(-18deg)}.assay-rt::after{left:18px;top:17px;width:24px;height:2px;background:#51d4d6;box-shadow:0 7px 0 rgba(81,212,214,.6),0 14px 0 rgba(81,212,214,.3)}.assay-seq::before{left:9px;top:11px;width:6px;height:27px;background:#51d4d6;box-shadow:9px 8px 0 #75b6ff,18px -2px 0 #a9a4ff,27px 12px 0 #0fb5a8}.assay-profile::before{left:8px;bottom:12px;width:34px;height:1px;background:#65758d}.assay-profile::after{left:9px;bottom:13px;width:32px;height:24px;border-left:2px solid #51d4d6;border-top:2px solid transparent;clip-path:polygon(0 82%,18% 68%,35% 74%,52% 8%,68% 58%,84% 50%,100% 70%,100% 100%,0 100%);background:#51d4d6}.assay-readout{padding:24px 30px 20px;background:rgba(5,9,26,.38)}.assay-readout svg{display:block;width:100%;height:auto}.assay-axis{fill:none;stroke:rgba(166,177,194,.35);stroke-width:1}.assay-control,.assay-treated{fill:none;stroke:#75b6ff;stroke-width:2}.assay-treated{stroke:#51d4d6;stroke-width:3;filter:drop-shadow(0 0 6px rgba(81,212,214,.35))}.assay-site{fill:none;stroke:rgba(255,157,114,.7);stroke-width:1;stroke-dasharray:4 5}.assay-readout text{fill:#91a1b8;font:500 var(--fs-nano) var(--font-m);letter-spacing:.08em}.assay-readout figcaption{padding-top:12px;color:var(--dim);font:400 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.08em}
@media(max-width:900px){.assay-principle-copy{grid-template-columns:1fr}.assay-principle-rail{grid-template-columns:1fr}.assay-principle-rail article{grid-template-columns:58px 32px 1fr;min-height:86px;border-right:0;border-bottom:1px solid rgba(101,194,194,.12)}.assay-principle-rail article:last-child{border-bottom:0}.assay-principle-rail article:not(:last-child)::after{right:28px;top:auto;bottom:-5px;transform:rotate(135deg)}.assay-readout{padding:18px}}
@media(max-width:680px){.assay-principle{margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}.assay-principle-copy{padding:24px}.assay-principle-rail article{padding:16px 24px}.assay-readout svg{width:100%;margin-left:0}.assay-readout figcaption{font-size:var(--fs-nano)}}
@media(min-width:1200px){#hero h1{font-size:clamp(4rem,5vw,4.65rem)}}

/* ================= Möbius-derived surface system ================= */
.sec-top::before{background:linear-gradient(90deg,rgba(81,212,214,.42),rgba(92,231,194,.14) 18%,var(--line2) 42%,var(--hair) 100%)}

#proof::after,#pipeline::after,#validation::after{content:"";position:absolute;z-index:0;pointer-events:none;background:linear-gradient(100deg,var(--cyan),var(--mint) 48%,var(--violet));-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;filter:drop-shadow(0 0 28px rgba(81,212,214,.2))}
#proof::after{width:580px;height:348px;right:-210px;top:-90px;opacity:.034;transform:rotate(-9deg)}
#pipeline::after{width:760px;height:456px;right:-350px;top:310px;opacity:.028;transform:rotate(12deg)}
#validation::after{width:700px;height:420px;left:-330px;top:210px;opacity:.032;transform:rotate(-16deg)}
#proof>.container,#pipeline>.container,#validation>.container{position:relative;z-index:1}

.value-lane,.asset-profile,.assay-principle-copy{position:relative}
.engine-stage-grid article::before,.value-lane::after,.pipeline-card::after,.asset-profile::before,.assay-principle-copy::after{content:"";position:absolute;width:42px;height:25px;right:22px;top:20px;background:linear-gradient(100deg,var(--cyan),var(--mint) 52%,var(--violet));-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;opacity:.12;pointer-events:none}
.pipeline-card::after{background:linear-gradient(100deg,var(--card-hot),var(--card-mid),var(--violet));opacity:.15}
.asset-profile::before{width:54px;height:32px;right:28px;top:84px;opacity:.105}
.assay-principle-copy::after{width:58px;height:35px;right:30px;top:26px;opacity:.1}

.detail-hero-field i{border:0;border-radius:0;background:linear-gradient(100deg,var(--cyan),var(--mint) 48%,var(--violet));-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;opacity:.055;filter:drop-shadow(0 0 30px rgba(81,212,214,.2))}

@media(max-width:680px){
  .sec-top::after{left:9px;width:32px;height:19px}
  .sec-top{flex-wrap:wrap;gap:10px 14px}
  .sec-top .s-lbl{font-size:var(--fs-sm)}
  #proof::after,#pipeline::after,#validation::after,.section-orbit{opacity:.022}
  .engine-stage-grid article::before,.value-lane::after,.pipeline-card::after,.asset-profile::before,.assay-principle-copy::after{width:34px;height:20px;right:18px;top:17px;opacity:.09}
}

@media(prefers-reduced-motion:reduce){.sec-top::after{transform:scaleX(1);transition:none}}

/* ================= Hero-derived color mastering =================
   Obsidian carries the page; moonlight describes form; spectral cyan
   carries motion; aperture gold appears only at decisive intersections. */
body{background:radial-gradient(circle at 50% -10%,rgba(138,212,212,.035),transparent 29%),linear-gradient(180deg,#05060b,#070a0e 46%,#05060b)}
body::after{opacity:.042}
::selection{background:rgba(138,212,212,.24);color:#fff}
nav.scrolled{background:rgba(5,7,10,.9);border-color:rgba(220,238,241,.08)}
.nav-links a:hover{color:var(--ice)}
.btn-primary{background:#e4e9e9;border-color:#e4e9e9;color:#07090c;box-shadow:0 12px 38px rgba(0,0,0,.2)}
.btn-primary:hover{background:var(--ice);border-color:var(--ice);box-shadow:0 0 26px rgba(220,235,237,.16)}
.btn-ghost:hover{border-color:rgba(220,238,241,.3);color:var(--ice);background:rgba(220,238,241,.025)}

#proof{background:linear-gradient(108deg,#06090d,#0a0f14 62%,#0b1618 122%)}
.proof-nav .proof-metric{background:linear-gradient(145deg,rgba(15,21,27,.68),rgba(5,8,12,.2));border-color:rgba(206,228,232,.07)}
.proof-nav .proof-metric::before{background:radial-gradient(circle at 74% 12%,rgba(228,197,141,.065),transparent 28%),linear-gradient(120deg,transparent 46%,rgba(138,212,212,.028),transparent 64%)}
.proof-nav .proof-metric:hover{background:linear-gradient(145deg,rgba(20,28,34,.72),rgba(8,12,16,.46));border-color:rgba(138,212,212,.16)}
.proof-kicker{color:var(--cyan)!important}.proof-value small{color:#73818e}
.proof-signal i{background:linear-gradient(90deg,transparent,var(--ice),var(--cyan),var(--aperture),transparent);filter:drop-shadow(0 0 6px rgba(220,235,237,.42))}

#pipeline{background:radial-gradient(circle at 86% 38%,rgba(138,212,212,.025),transparent 25%),linear-gradient(180deg,#05060b,#080b0f 55%,#05060b)}
.pipeline-wrap{background:linear-gradient(135deg,rgba(9,13,18,.98),rgba(10,17,21,.95) 52%,rgba(9,11,16,.98));border-color:rgba(206,228,232,.105);box-shadow:inset 0 1px rgba(255,255,255,.025),0 34px 100px rgba(0,0,0,.28)}
.pipeline-wrap::before{background:radial-gradient(ellipse at 62% 28%,rgba(138,212,212,.035),transparent 38%),radial-gradient(ellipse at 28% 70%,rgba(153,146,181,.028),transparent 42%)}
.pipeline-note{background:linear-gradient(90deg,rgba(16,27,31,.72),rgba(8,12,16,.42) 48%,rgba(20,20,25,.62))}
.pipeline-head{background:linear-gradient(90deg,#0d141b,#111b23 58%,#182329)}
.pipeline-head span{color:#748290}
.pipeline-table::-webkit-scrollbar-thumb{background:linear-gradient(90deg,#385e61,#756f85);border-color:#080c10}
.pipeline-group{color:#94d5c9;background:linear-gradient(90deg,rgba(102,177,164,.085),transparent 48%)}
.pipeline-group.violet{color:#aaa5b9;background:linear-gradient(90deg,rgba(143,135,166,.085),transparent 48%)}
.pipeline-group.blue{color:#91b8c7;background:linear-gradient(90deg,rgba(105,152,170,.085),transparent 48%)}
.pipeline-group.indigo{color:#9ea7bd;background:linear-gradient(90deg,rgba(125,135,158,.085),transparent 48%)}
.pipeline-group i{background:linear-gradient(180deg,var(--ice),currentColor 62%,#39454d);box-shadow:0 0 12px color-mix(in srgb,currentColor 25%,transparent)}
.pipeline-row{--pipeline-deep:#365e5a;--pipeline-mid:#65a99d;--pipeline-hot:#9ad9cc;--pipeline-glow:rgba(128,205,190,.2);background:linear-gradient(90deg,rgba(84,141,132,.065),transparent 25%,rgba(89,127,133,.04) 82%,transparent)}
.pipeline-row.violet{--pipeline-deep:#56516b;--pipeline-mid:#7d7794;--pipeline-hot:#b1abc1;--pipeline-glow:rgba(160,152,187,.2);background:linear-gradient(90deg,rgba(104,97,128,.06),transparent 25%,rgba(88,82,110,.035) 82%,transparent)}
.pipeline-row.blue{--pipeline-deep:#405f6c;--pipeline-mid:#688e9d;--pipeline-hot:#9bc2cf;--pipeline-glow:rgba(141,189,205,.2);background:linear-gradient(90deg,rgba(83,120,134,.06),transparent 25%,rgba(70,103,118,.035) 82%,transparent)}
.pipeline-row.indigo{--pipeline-deep:#4c5368;--pipeline-mid:#747e98;--pipeline-hot:#aab4c9;--pipeline-glow:rgba(161,175,202,.18);background:linear-gradient(90deg,rgba(91,100,125,.055),transparent 25%,rgba(77,85,108,.035) 82%,transparent)}
.stage-cell.active::after{background:linear-gradient(90deg,var(--pipeline-deep),var(--pipeline-mid) 60%,var(--pipeline-hot));box-shadow:0 0 7px var(--pipeline-glow),inset 0 1px rgba(255,255,255,.25)}
.stage-cell.current::before{border-color:var(--pipeline-hot);background:radial-gradient(circle,var(--aperture) 0 12%,rgba(228,197,141,.14) 15%,#091016 42% 62%,rgba(220,235,237,.12) 65%);box-shadow:0 0 0 3px color-mix(in srgb,var(--pipeline-hot) 7%,transparent),0 0 18px var(--pipeline-glow),0 0 9px var(--warm-glow)}
.pipeline-target{color:var(--aperture);background:linear-gradient(90deg,transparent,#0a1117 18% 82%,transparent);text-shadow:0 0 10px var(--warm-glow)}
.pipeline-cards{background:linear-gradient(135deg,#090e14,#0d141b)}
.pipeline-card{background:linear-gradient(145deg,rgba(15,23,30,.96),rgba(7,11,15,.98));border-color:rgba(206,228,232,.1)}
.pipeline-card-stage i{background:#0a0f14}.pipeline-card-stage.current i{box-shadow:0 0 0 3px color-mix(in srgb,var(--card-hot) 8%,transparent),0 0 13px var(--warm-glow);background:radial-gradient(circle,var(--aperture) 0 18%,#0a0f14 22%)}

#asset{background:linear-gradient(118deg,#05070a,#0a0f14 56%,#0a1516 122%)}
#asset::before{background:radial-gradient(circle at 72% 38%,rgba(138,212,212,.055),transparent 27%),radial-gradient(circle at 18% 72%,rgba(153,146,181,.025),transparent 32%)}
.asset-stage{border-color:rgba(206,228,232,.13);background:linear-gradient(135deg,rgba(9,14,19,.92),rgba(15,25,29,.72));box-shadow:0 36px 110px rgba(0,0,0,.38)}
.asset-profile{border-color:rgba(206,228,232,.1);background:linear-gradient(160deg,rgba(15,23,30,.97),rgba(7,11,15,.88))}
.asset-figure{background:radial-gradient(circle at 48% 48%,rgba(138,212,212,.075),transparent 24%),linear-gradient(145deg,rgba(6,9,13,.72),rgba(16,26,30,.58))}
.asset-id-row,.asset-facts>div,.asset-figure figcaption{border-color:rgba(206,228,232,.09)}
.asset-id-row i{border-color:rgba(138,212,212,.25);color:var(--ice)}
.asset-evidence{border-color:rgba(206,228,232,.13);background:linear-gradient(120deg,#0d1319,#111a20);color:var(--text);box-shadow:0 20px 80px rgba(0,0,0,.28)}
.asset-evidence article{border-color:rgba(206,228,232,.09);background:linear-gradient(145deg,rgba(220,235,237,.018),transparent)}
.asset-evidence span{color:#7e8b96}.asset-evidence strong{color:var(--ice)}.asset-evidence article:nth-child(3) strong{color:var(--aperture);text-shadow:0 0 18px var(--warm-glow)}
.asset-compound path{fill:rgba(228,197,141,.08);stroke:var(--aperture)}.asset-compound circle{fill:#f2dfbb;filter:drop-shadow(0 0 11px rgba(228,197,141,.72))}
.asset-callout.hot path{stroke:rgba(228,197,141,.58)}.asset-callout.hot text{fill:#d7c39e}

#advantage{background:radial-gradient(circle at 82% 12%,rgba(153,146,181,.025),transparent 30%),linear-gradient(180deg,#05060b,#080b0f 50%,#05060b)}
.advantage-proofbar{border-color:rgba(206,228,232,.11);background:linear-gradient(90deg,#0e151b,#121b21,#090e13)}
.advantage-proofbar article{border-color:rgba(206,228,232,.08)}.advantage-proofbar span{color:var(--cyan)}.advantage-proofbar small{color:#74818c}
.advantage-row,.advantage-row.cinematic-surface{background:radial-gradient(circle at 76% 20%,rgba(153,146,181,.035),transparent 35%),radial-gradient(circle at 8% 82%,rgba(138,212,212,.025),transparent 34%),rgba(7,10,14,.9)}
.advantage-metric{background:radial-gradient(circle at 50% 55%,rgba(138,212,212,.055),transparent 54%)}
.scale-rail i{background:linear-gradient(180deg,rgba(138,212,212,.5),rgba(138,212,212,.025));border-color:var(--cyan)}
.chemical-glyphs::before{background:linear-gradient(90deg,var(--ice),var(--cyan),var(--violet),transparent)}
.chemical-glyphs i{background:#090d12;border-color:#7cb8ae}.chemical-glyphs i:nth-child(5){border-color:var(--aperture);box-shadow:0 0 16px var(--warm-glow)}

#science{background:radial-gradient(circle at 18% 58%,rgba(138,212,212,.022),transparent 28%),linear-gradient(180deg,#05060b,#070a0e 48%,#05060b)}
.science-stage{background:linear-gradient(135deg,rgba(8,12,16,.94),rgba(11,17,22,.86));border-color:rgba(206,228,232,.1)}
.science-step.active{background:linear-gradient(110deg,rgba(138,212,212,.05),transparent)}
.science-step.active::after{background:linear-gradient(var(--ice),var(--cyan),transparent);box-shadow:0 0 18px var(--cool-glow)}
.rna-universe.cinematic-surface,.structure-figure.cinematic-surface,.workflow-figure.cinematic-surface{background:radial-gradient(circle at 68% 42%,rgba(138,212,212,.055),transparent 25%),radial-gradient(circle at 22% 78%,rgba(153,146,181,.04),transparent 36%),linear-gradient(145deg,#0b1117,#0d171c)}
.motif-loop path{stroke:rgba(168,160,191,.58)}.molecule circle,.molecule path{stroke:var(--aperture)}.molecule{filter:drop-shadow(0 0 10px var(--warm-glow))}

#technology{background:radial-gradient(circle at 50% 40%,rgba(138,212,212,.022),transparent 30%),linear-gradient(180deg,#05060b,#080b0f 48%,#05060b)}
.engine-stage-grid,.value-model,.assay-principle{border-color:rgba(206,228,232,.11);background:linear-gradient(135deg,#0d1319,#0a1015)}
.engine-stage-grid article,.value-model-head,.value-lane,.assay-principle-copy,.assay-principle-rail,.assay-principle-rail article{border-color:rgba(206,228,232,.085)}
.engine-core-stage{background:linear-gradient(155deg,rgba(24,40,48,.7),rgba(138,212,212,.035))}
.engine-stage-grid article:not(:last-child)::after{background:#0d151b;border-color:var(--cyan)}
.lead-icon i{background:#0c1218}.lead-icon i:nth-child(3){border-color:var(--aperture);box-shadow:0 0 10px var(--warm-glow)}
.matrix-system.cinematic-surface{background:radial-gradient(ellipse at 50% 50%,rgba(138,212,212,.06),transparent 26%),radial-gradient(ellipse at 12% 70%,rgba(153,146,181,.04),transparent 31%),linear-gradient(150deg,#0b1118,#0d171c)}
.matrix-cell{background:#0e141b;border-color:rgba(220,238,241,.025)}.matrix-cell.low{background:rgba(138,212,212,.1)}.matrix-cell.mid{background:rgba(119,205,189,.26)}.matrix-cell.violet{background:rgba(153,146,181,.3)}.matrix-cell.high{background:var(--aperture);box-shadow:0 0 15px var(--warm-glow)}
.matrix-scan{background:linear-gradient(90deg,transparent,var(--ice),var(--cyan),transparent);box-shadow:0 0 12px var(--cool-glow)}
.matrix-readout strong{color:var(--aperture)}.output-line{background:linear-gradient(90deg,var(--ice),var(--cyan),var(--aperture))}.output-node.hot::before{background:var(--aperture);border-color:#f3dfb9;box-shadow:0 0 17px var(--warm-glow)}
.tech-portfolio,.platform-detail-grid{background:rgba(206,228,232,.075)}.tech-card,.platform-detail-card{background:linear-gradient(145deg,#0d1319,#080c10)}
.value-track i{background:linear-gradient(90deg,var(--ice),var(--cyan),#61747d)}.asset-lane .value-track i{background:linear-gradient(90deg,var(--ice),var(--cyan),var(--aperture))}
.assay-principle-rail article:not(:last-child)::after{background:#0c1318;border-color:var(--cyan)}.assay-readout{background:rgba(6,9,13,.48)}.assay-site{stroke:rgba(228,197,141,.65)}

.evidence-grid,.validation-grid,.company-grid,.advisor-grid{background:linear-gradient(145deg,rgba(10,14,19,.92),rgba(7,10,14,.96));border-color:rgba(206,228,232,.09)}
.funding-card,.validation-feature,.milestone-panel,.company-facts{border-color:rgba(206,228,232,.085)}
.investor-list span{background:rgba(220,235,237,.018);border-color:rgba(206,228,232,.1)}
.milestone-item:hover,.news-item:hover{background:rgba(138,212,212,.02)}.milestone-date{color:var(--cyan)}
.validation-signal i{background:linear-gradient(90deg,var(--hair),var(--cyan),var(--aperture),var(--hair))}
.validation-node .validation-core{fill:var(--aperture);stroke:#f1dcba;filter:drop-shadow(0 0 11px var(--warm-glow))}
.company-facts{background:radial-gradient(circle at 80% 14%,rgba(228,197,141,.04),transparent 24%),linear-gradient(145deg,#0e151b,#090d12)}

.section-orbit,#proof::after,#pipeline::after,#validation::after,.asset-halo,.sec-top::after,.engine-stage-grid article::before,.value-lane::after,.pipeline-card::after,.asset-profile::before,.assay-principle-copy::after,.detail-hero-field i{background:linear-gradient(100deg,var(--ice),var(--cyan) 54%,var(--aperture))}
.sec-top::before{background:linear-gradient(90deg,rgba(220,235,237,.48),rgba(138,212,212,.16) 18%,var(--line2) 42%,var(--hair) 100%)}
.cross.c-r{color:#645d51}
.detail-hero::before{background:radial-gradient(circle at 75% 42%,rgba(138,212,212,.06),transparent 23%),radial-gradient(circle at 18% 20%,rgba(220,235,237,.035),transparent 30%),linear-gradient(var(--hair) 1px,transparent 1px),linear-gradient(90deg,var(--hair) 1px,transparent 1px);background-size:auto,auto,80px 80px,80px 80px}
.publication-list,.partnerships-page .milestone-list{background:rgba(8,11,15,.86)}.publication-card:hover,.partner-card:hover{background:rgba(138,212,212,.014)}
.resolution-card.cinematic-surface{background:radial-gradient(circle at 75% 20%,rgba(153,146,181,.045),transparent 34%),linear-gradient(145deg,#0c141a,#0d191e)}
.workflow-mobile-stage{border-color:rgba(138,212,212,.12);background:linear-gradient(115deg,#0d171d,#10151d)}
#progress{height:1px;background:linear-gradient(90deg,var(--ice),var(--cyan) 72%,var(--aperture));box-shadow:0 0 8px rgba(220,235,237,.24);opacity:.72}
#glow{background:radial-gradient(circle,rgba(138,212,212,.045),rgba(138,212,212,0) 62%)}
.pipeline-card{--card-hot:#9ad9cc;--card-mid:#65a99d}.pipeline-card.violet{--card-hot:#b1abc1;--card-mid:#7d7794}.pipeline-card.blue{--card-hot:#9bc2cf;--card-mid:#688e9d}.pipeline-card.indigo{--card-hot:#aab4c9;--card-mid:#747e98}
.pipeline-card-target{background:rgba(7,11,15,.72);color:var(--aperture)}
html[lang="ja"] .asset-sequence>path{stroke:url(#asset-rna-stroke-ja)}
.mobile-bind::after,.mobile-destabilize::after,.mobile-decay::after{background:var(--aperture)}
.mobile-rbp::after{background:var(--aperture);box-shadow:0 -6px 0 rgba(228,197,141,.5),0 6px 0 rgba(228,197,141,.25)}
.cinema-molecule-network path{stroke:rgba(138,212,212,.2)}
.cinema-pocket>path:first-child{fill:rgba(138,212,212,.025);stroke:rgba(138,212,212,.62);filter:drop-shadow(0 0 7px rgba(138,212,212,.3))}
.cinema-pocket>circle{fill:var(--ice);filter:drop-shadow(0 0 9px rgba(220,235,237,.42))}
.cinema-matrix-plane>path:first-child{fill:rgba(15,28,34,.16);stroke:rgba(138,212,212,.24)}
.cinema-matrix-hits circle{fill:var(--aperture);filter:drop-shadow(0 0 6px var(--warm-glow))}
.cinema-workflow-gates circle{fill:rgba(14,24,29,.3);stroke:rgba(138,212,212,.22)}

@media(max-width:680px){
    .asset-evidence article{border-color:rgba(206,228,232,.08)}
}

/* ================= Moonlight silver lead ================= */
.brand-mark path{stroke:var(--ice);filter:drop-shadow(0 0 6px rgba(227,235,236,.18))}
.brand-mark circle{fill:var(--aperture);filter:drop-shadow(0 0 5px var(--warm-glow))}
.logo b{color:var(--ice)}
.acc-grad{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.section-heading h2,.detail-split-heading h2,.publications-intro h2{text-shadow:0 8px 36px rgba(0,0,0,.3),0 0 28px rgba(227,235,236,.025)}
.sec-top .s-idx,.sec-top .s-lbl,.eyebrow,.proof-kicker,.system-tag,.panel-index,.tech-state,.advantage-copy>span,.advantage-metric>span,.asset-story>span,.engine-stage-grid article>span,.value-model-head>span,.value-lane>span,.assay-principle-copy>span{color:#b9ced0!important}
.sec-top .s-meta{color:#6c7984}
.sec-top::after{filter:drop-shadow(0 0 9px rgba(227,235,236,.2))}

.proof-value,.advantage-metric strong,.asset-evidence article:not(:nth-child(3)) strong{color:var(--ice);background:linear-gradient(180deg,#f4f6f6 0%,#d4dfe1 48%,#aab7bc 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.asset-evidence article:nth-child(3) strong{-webkit-text-fill-color:var(--aperture);color:var(--aperture)}

#progress{background:linear-gradient(90deg,#f1f4f4 0%,#c8dddd 76%,var(--aperture) 100%);box-shadow:0 0 8px rgba(227,235,236,.28)}
.btn-primary{background:linear-gradient(135deg,#f2f4f4,#d7dfe0);border-color:#e5eaeb;color:#07090c}
.btn-primary:hover{background:linear-gradient(135deg,#fff,#dce8e8);border-color:#f3f6f6}

.pipeline-row{--pipeline-deep:#596d6c;--pipeline-mid:#91b2af;--pipeline-hot:#d3e0df;--pipeline-glow:rgba(207,226,224,.18)}
.pipeline-row.violet{--pipeline-deep:#666473;--pipeline-mid:#95919f;--pipeline-hot:#d0ccd5;--pipeline-glow:rgba(211,207,219,.17)}
.pipeline-row.blue{--pipeline-deep:#5d6d75;--pipeline-mid:#8fa9b2;--pipeline-hot:#ccdce0;--pipeline-glow:rgba(207,224,229,.17)}
.pipeline-row.indigo{--pipeline-deep:#606775;--pipeline-mid:#929aa9;--pipeline-hot:#cfd4de;--pipeline-glow:rgba(210,217,229,.16)}
.pipeline-group{color:#d0dfdd}.pipeline-group.violet{color:#cbc8d2}.pipeline-group.blue{color:#c7d8dd}.pipeline-group.indigo{color:#ccd1dc}
.pipeline-card{--card-hot:#d3e0df;--card-mid:#91b2af}.pipeline-card.violet{--card-hot:#d0ccd5;--card-mid:#95919f}.pipeline-card.blue{--card-hot:#ccdce0;--card-mid:#8fa9b2}.pipeline-card.indigo{--card-hot:#cfd4de;--card-mid:#929aa9}

.matrix-cell.low{background:rgba(202,222,224,.1)}.matrix-cell.mid{background:rgba(180,208,206,.24)}.matrix-scan{background:linear-gradient(90deg,transparent,#f0f3f3,#b4d0d2,transparent)}

.section-orbit,#proof::after,#pipeline::after,#validation::after,.asset-halo,.sec-top::after,.engine-stage-grid article::before,.value-lane::after,.pipeline-card::after,.asset-profile::before,.assay-principle-copy::after,.detail-hero-field i{background:linear-gradient(100deg,#f0f3f3 0%,#d5e1e2 62%,#b7d1d2 84%,var(--aperture) 100%)}
.section-orbit{filter:drop-shadow(0 0 24px rgba(227,235,236,.16))}
.asset-stage,.asset-evidence,.engine-stage-grid,.value-model,.assay-principle,.matrix-system,.evidence-grid,.company-grid,.publication-list{border-color:rgba(227,235,236,.12);box-shadow:inset 0 1px rgba(245,248,248,.055),0 30px 100px rgba(0,0,0,.25)}

.cinema-pocket>circle{fill:#eef3f3}.cinema-matrix-hits circle,.output-node.hot::before,.validation-node .validation-core{fill:var(--aperture)}
#asset-rna-stroke stop:first-child,#asset-rna-stroke-ja stop:first-child,#rnaFlow stop:first-child,#structureStroke stop:first-child,#flowStroke stop:first-child{stop-color:#e3ebec}
#asset-rna-stroke stop:nth-child(2),#asset-rna-stroke-ja stop:nth-child(2),#rnaFlow stop:nth-child(2),#structureStroke stop:nth-child(2),#flowStroke stop:nth-child(2),#asset-glow stop,#asset-glow-ja stop{stop-color:#b4d0d2}
#asset-rna-stroke stop:last-child,#asset-rna-stroke-ja stop:last-child{stop-color:#a7cbc4}
#rnaFlow stop:last-child,#structureStroke stop:last-child,#flowStroke stop:last-child{stop-color:#aaa7b5}

/* ================= Legacy intelligence, Hero-native execution =================
   Editorial hierarchy and instrumentation distilled from the earlier site,
   redrawn as a quiet moonlight-silver operating system. */
.instrument-head{min-height:48px;padding:0 18px;display:flex;align-items:center;justify-content:space-between;gap:18px;border-bottom:1px solid rgba(227,235,236,.09);background:linear-gradient(90deg,rgba(227,235,236,.025),transparent 54%,rgba(228,197,141,.018));font:600 var(--fs-nano) var(--font-m);letter-spacing:.17em;text-transform:uppercase;color:#b9ced0}
.instrument-head small{font:500 var(--fs-nano) var(--font-m);letter-spacing:.15em;color:#6b7986}

.technology-console::before,.evidence-ledger::before{content:"";position:absolute;z-index:2;left:7%;right:7%;top:0;height:1px;background:linear-gradient(90deg,transparent,rgba(246,248,248,.55),rgba(180,210,211,.2) 68%,transparent);pointer-events:none}
.technology-console{margin-top:24px;border:1px solid rgba(227,235,236,.115);background:linear-gradient(145deg,rgba(11,15,20,.98),rgba(6,9,13,.99));box-shadow:inset 0 1px rgba(245,248,248,.05),0 30px 100px rgba(0,0,0,.24);position:relative;overflow:hidden}
.technology-console-grid{display:grid;grid-template-columns:250px minmax(0,1fr)}
.technology-console-tabs{display:flex;flex-direction:column;border-right:1px solid rgba(227,235,236,.09);background:#080c11}
.technology-console-tab{appearance:none;width:100%;min-height:89px;padding:16px 18px;display:grid;grid-template-columns:26px 1fr;grid-template-rows:1fr auto;gap:3px 10px;text-align:left;border:0;border-bottom:1px solid rgba(227,235,236,.07);background:transparent;color:#7f8b94;cursor:pointer;position:relative;transition:background .35s,color .35s}
.technology-console-tab:last-child{border-bottom:0}
.technology-console-tab::before{content:"";position:absolute;left:0;top:18%;bottom:18%;width:1px;background:linear-gradient(var(--ice),var(--cyan),var(--aperture));box-shadow:0 0 10px rgba(227,235,236,.24);transform:scaleY(0);transition:transform .4s var(--ease)}
.technology-console-tab:hover{background:rgba(227,235,236,.018);color:#b9c7ca}.technology-console-tab.is-active{background:linear-gradient(90deg,rgba(190,216,217,.055),rgba(228,197,141,.012));color:var(--ice)}.technology-console-tab.is-active::before{transform:scaleY(1)}
.technology-console-tab>span{grid-row:1/3;font:500 var(--fs-nano) var(--font-m);letter-spacing:.12em;color:#6c7c89;padding-top:3px}
.technology-console-tab>b{font:500 .98rem var(--font-d);letter-spacing:-.01em}.technology-console-tab>small{font:500 var(--fs-nano) var(--font-m);letter-spacing:.15em;color:#6d7c87}
.technology-console-tab:focus-visible{outline:1px solid var(--ice);outline-offset:-3px;z-index:2}
.technology-console-panel{min-height:410px;display:grid;grid-template-columns:minmax(280px,.86fr) minmax(360px,1.14fr);outline:none}
.technology-console-panel:focus-visible{box-shadow:inset 0 0 0 1px rgba(227,235,236,.35)}
.technology-console-visual{min-height:410px;border-right:1px solid rgba(227,235,236,.075);position:relative;overflow:hidden;background:radial-gradient(circle at 52% 48%,rgba(190,216,217,.065),transparent 27%),linear-gradient(rgba(227,235,236,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(227,235,236,.025) 1px,transparent 1px),#090e13;background-size:auto,34px 34px,34px 34px,auto}
.technology-console-visual::before{content:"";position:absolute;inset:18% 11%;background:linear-gradient(100deg,#edf2f2,#bcd2d3 65%,var(--aperture));-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;opacity:.42;filter:drop-shadow(0 0 14px rgba(227,235,236,.26));transition:transform .8s var(--ease),opacity .45s}
.technology-console-visual::after{content:"AUGC / STRUCTURAL SPACE";position:absolute;left:19px;bottom:17px;font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em;color:#53616c}
.technology-console-visual i{position:absolute;display:block;border:1px solid rgba(190,216,217,.2);transition:all .75s var(--ease)}
.technology-console-visual i:nth-child(1){width:58%;height:1px;left:21%;top:36%}.technology-console-visual i:nth-child(2){width:58%;height:1px;left:21%;top:64%}.technology-console-visual i:nth-child(3){width:1px;height:54%;left:37%;top:23%}.technology-console-visual i:nth-child(4){width:1px;height:54%;left:63%;top:23%}
.technology-console-visual span{position:absolute;width:9px;height:9px;left:64%;top:35%;border:1px solid #f2dfbb;border-radius:50%;background:var(--aperture);box-shadow:0 0 18px var(--warm-glow);transition:left .7s var(--ease),top .7s var(--ease)}
.technology-console-visual[data-console-visual="spliceverse"]::before{transform:rotate(90deg) scale(.83);opacity:.3}
.technology-console-visual[data-console-visual="spliceverse"] i{width:54%;height:22%;left:23%;border-width:1px 0 0;border-radius:50%}.technology-console-visual[data-console-visual="spliceverse"] i:nth-child(1){top:28%}.technology-console-visual[data-console-visual="spliceverse"] i:nth-child(2){top:42%;transform:scaleX(-1)}.technology-console-visual[data-console-visual="spliceverse"] i:nth-child(3){top:56%;transform:none}.technology-console-visual[data-console-visual="spliceverse"] i:nth-child(4){top:70%;transform:scaleX(-1)}.technology-console-visual[data-console-visual="spliceverse"] span{left:48%;top:48%}
.technology-console-visual[data-console-visual="probing"]::before{transform:rotate(-18deg) scale(.72);opacity:.34}
.technology-console-visual[data-console-visual="probing"] i{width:62px;height:62px;border-radius:50%;left:calc(50% - 31px);top:calc(50% - 31px)}.technology-console-visual[data-console-visual="probing"] i:nth-child(2){transform:scale(1.65);opacity:.7}.technology-console-visual[data-console-visual="probing"] i:nth-child(3){transform:scale(2.3);opacity:.4}.technology-console-visual[data-console-visual="probing"] i:nth-child(4){transform:scale(3);opacity:.18}.technology-console-visual[data-console-visual="probing"] span{left:calc(50% - 4px);top:calc(50% - 4px)}
.technology-console-visual[data-console-visual="analytics"]::before{transform:rotate(8deg) scale(.76);opacity:.24}
.technology-console-visual[data-console-visual="analytics"] i:nth-child(1){width:68%;left:16%;top:70%;transform:rotate(-18deg);transform-origin:left}.technology-console-visual[data-console-visual="analytics"] i:nth-child(2){width:40%;left:35%;top:48%;transform:rotate(23deg)}.technology-console-visual[data-console-visual="analytics"] i:nth-child(3){height:62%;left:26%;top:19%}.technology-console-visual[data-console-visual="analytics"] i:nth-child(4){height:46%;left:72%;top:27%}.technology-console-visual[data-console-visual="analytics"] span{left:70%;top:35%}
.technology-console-copy{padding:46px clamp(28px,4vw,58px);display:flex;flex-direction:column;justify-content:center;background:radial-gradient(circle at 88% 12%,rgba(228,197,141,.035),transparent 19%)}
.technology-console-copy>span{font:600 var(--fs-nano) var(--font-m);letter-spacing:.16em;color:#8fa8a9;text-transform:uppercase}.technology-console-copy h3{font:500 clamp(1.8rem,3.1vw,3rem)/1.05 var(--font-d);letter-spacing:-.035em;margin:14px 0 17px;color:var(--ice)}.technology-console-copy>p{color:#8d99a3;max-width:57ch;font-size:.92rem}
.technology-console-copy dl{margin:27px 0 28px;border-top:1px solid rgba(227,235,236,.08)}.technology-console-copy dl>div{display:grid;grid-template-columns:135px 1fr;gap:18px;padding:12px 0;border-bottom:1px solid rgba(227,235,236,.065)}.technology-console-copy dt{font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em;color:#6b7986;text-transform:uppercase}.technology-console-copy dd{margin:0;color:#b8c3c7;font-size:var(--fs-sm)}.technology-console-copy .text-link{align-self:flex-start}

.evidence-ledger{margin:34px 0 18px;border:1px solid rgba(227,235,236,.11);background:linear-gradient(145deg,rgba(11,15,20,.96),rgba(6,9,13,.98));box-shadow:inset 0 1px rgba(245,248,248,.045),0 24px 78px rgba(0,0,0,.22);position:relative;overflow:hidden}
.evidence-ledger-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:rgba(227,235,236,.075)}
.evidence-ledger-grid>a,.evidence-ledger-grid>div{min-height:178px;padding:22px 20px 18px;background:linear-gradient(145deg,#0e141a,#090d12);position:relative;display:flex;flex-direction:column;text-decoration:none;color:inherit;transition:background .35s}
.evidence-ledger-grid>a:hover{background:radial-gradient(circle at 76% 20%,rgba(228,197,141,.04),transparent 24%),linear-gradient(145deg,#111920,#0a0f14)}
.evidence-ledger-grid span{font:500 var(--fs-nano) var(--font-m);letter-spacing:.15em;color:#697984}.evidence-ledger-grid strong{font:300 2.65rem/1 var(--font-d);margin:27px 0 9px;background:linear-gradient(180deg,#f3f5f5,#b9c8cb);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.evidence-ledger-grid p{margin:0;padding-right:24px;color:#89969f;font-size:var(--fs-sm);line-height:1.45}.evidence-ledger-grid i{position:absolute;right:18px;bottom:17px;font:400 .9rem var(--font-m);font-style:normal;color:#7d9194}.evidence-ledger-grid>a:last-child i{color:var(--aperture)}

@media(max-width:1080px){
  .evidence-ledger-grid{grid-template-columns:1fr 1fr}
  .technology-console-grid{grid-template-columns:210px minmax(0,1fr)}
  .technology-console-panel{grid-template-columns:minmax(230px,.72fr) minmax(360px,1.28fr)}
}
@media(max-width:780px){
  .technology-console-grid{grid-template-columns:1fr}.technology-console-tabs{display:grid;grid-template-columns:1fr 1fr;border-right:0;border-bottom:1px solid rgba(227,235,236,.09)}.technology-console-tab{min-height:76px;border-right:1px solid rgba(227,235,236,.07)}.technology-console-panel{grid-template-columns:1fr}.technology-console-visual{min-height:290px;border-right:0;border-bottom:1px solid rgba(227,235,236,.075)}.technology-console-copy{padding:34px 25px 40px}.technology-console-copy dl>div{grid-template-columns:110px 1fr}
}
@media(max-width:560px){
  .instrument-head{padding:12px 15px;align-items:flex-start;flex-direction:column;justify-content:center;gap:4px}.instrument-head small{line-height:1.5}
  .evidence-ledger-grid{grid-template-columns:1fr}.evidence-ledger-grid>a,.evidence-ledger-grid>div{min-height:150px}.evidence-ledger-grid strong{margin-top:22px}
  .technology-console-tabs{grid-template-columns:1fr}.technology-console-tab{min-height:70px;border-right:0}.technology-console-visual{min-height:250px}.technology-console-copy dl>div{grid-template-columns:1fr;gap:6px}
}
@media(prefers-reduced-motion:reduce){.technology-console-visual::before,.technology-console-visual i,.technology-console-visual span{transition:none}}

/* ================= Cinematic motion score =================
   Original xFOREST expression: the hero Möbius becomes atmosphere, rhythm
   and depth. Long stillness is interrupted by a short controlled surge. */
.cinematic-scene{--scene-x:76%;--scene-y:42%;--scene-rot:-9deg;isolation:isolate;overflow:hidden}
.cinematic-scene-1{--scene-x:20%;--scene-y:58%;--scene-rot:12deg}
.cinematic-scene-2{--scene-x:84%;--scene-y:64%;--scene-rot:-18deg}
.cinematic-scene-3{--scene-x:34%;--scene-y:34%;--scene-rot:20deg}
.cinematic-scene>.container,.cinematic-scene>.partner-band{position:relative;z-index:2}
.scene-atmosphere{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden;opacity:0;transition:opacity 1.8s var(--ease);mix-blend-mode:screen}
.cinematic-scene.is-scene-active>.scene-atmosphere,.cinematic-static .scene-atmosphere{opacity:1}
.scene-depth{position:absolute;width:min(82vw,1120px);aspect-ratio:1.8;left:var(--scene-x);top:var(--scene-y);transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(ellipse,rgba(227,235,236,.038),rgba(180,208,210,.018) 30%,rgba(170,167,181,.01) 52%,transparent 72%);filter:blur(38px);opacity:.72}
.scene-mobius{position:absolute;left:var(--scene-x);top:var(--scene-y);width:min(68vw,900px);aspect-ratio:1.66;background:linear-gradient(100deg,rgba(243,246,246,.86),rgba(197,216,218,.58) 58%,rgba(171,170,183,.44) 82%,rgba(228,197,141,.58));-webkit-mask:var(--mobius-mask) center/contain no-repeat;mask:var(--mobius-mask) center/contain no-repeat;filter:drop-shadow(0 0 18px rgba(227,235,236,.16));opacity:.035;transform-origin:center;animation:sceneMobiusScore 21s var(--scene-delay) infinite}
.scene-mobius-far{width:min(92vw,1260px);opacity:.018;filter:blur(1px) drop-shadow(0 0 30px rgba(180,208,210,.11));animation-duration:29s;animation-direction:reverse}
.scene-light{position:absolute;top:-16%;bottom:-16%;left:-42%;width:34%;background:linear-gradient(90deg,transparent,rgba(239,244,244,.015) 32%,rgba(209,225,226,.095) 52%,rgba(228,197,141,.018) 66%,transparent);filter:blur(12px);transform:skewX(-13deg);opacity:0;animation:sceneLightScore 21s var(--scene-delay) infinite}
.scene-signal{position:absolute;left:7%;right:7%;top:22%;height:1px;background:linear-gradient(90deg,transparent,rgba(227,235,236,.035) 18%,rgba(180,208,210,.07) 52%,transparent);opacity:.7}
.scene-signal::before,.scene-signal::after{content:"";position:absolute;top:-2px;width:5px;height:5px;border:1px solid rgba(218,231,232,.16);border-radius:50%;background:#080c11}.scene-signal::before{left:22%}.scene-signal::after{right:18%}
.scene-signal i{position:absolute;top:-1px;left:-16%;width:16%;height:2px;background:linear-gradient(90deg,transparent,rgba(243,246,246,.16),rgba(203,222,224,.5),rgba(228,197,141,.22),transparent);filter:drop-shadow(0 0 7px rgba(227,235,236,.24));animation:sceneSignalScore 21s var(--scene-delay) infinite}
.scene-mobius,.scene-light,.scene-signal i{animation-play-state:paused}
.cinematic-scene.is-scene-active .scene-mobius,.cinematic-scene.is-scene-active .scene-light,.cinematic-scene.is-scene-active .scene-signal i{animation-play-state:running}
.scene-code{position:absolute;right:7%;bottom:24px;font:500 var(--fs-nano) var(--font-m);letter-spacing:.2em;color:rgba(180,198,202,.18);white-space:nowrap}

@keyframes sceneMobiusScore{
  0%,52%{transform:translate3d(-50%,-50%,0) rotate(var(--scene-rot)) scale(.96);opacity:.026;animation-timing-function:cubic-bezier(.45,0,.55,1)}
  59%{transform:translate3d(-49.4%,-50.5%,0) rotate(calc(var(--scene-rot) + 3deg)) scale(.975);opacity:.04;animation-timing-function:cubic-bezier(.18,.76,.2,1)}
  64%{transform:translate3d(-47.8%,-52%,0) rotate(calc(var(--scene-rot) + 17deg)) scale(1.015);opacity:.105;animation-timing-function:cubic-bezier(.16,1,.3,1)}
  70%{transform:translate3d(-48.6%,-51.2%,0) rotate(calc(var(--scene-rot) + 23deg)) scale(1);opacity:.052}
  78%,100%{transform:translate3d(-50%,-50%,0) rotate(calc(var(--scene-rot) + 25deg)) scale(.97);opacity:.025}
}
@keyframes sceneLightScore{0%,55%{left:-42%;opacity:0}60%{opacity:.08}66%{left:108%;opacity:.38}72%,100%{left:118%;opacity:0}}
@keyframes sceneSignalScore{0%,55%{left:-16%;opacity:0}59%{opacity:.28}68%{left:102%;opacity:.78}74%,100%{left:108%;opacity:0}}

/* Silver replaces spectral neon; amber remains a rare point of decision. */
.cinematic-particles{opacity:0;filter:saturate(.38)}
.cinematic-surface.is-cinematic-active .cinematic-particles{opacity:.48}
.cinematic-surface.is-cinematic-active .cinematic-overlay,.cinematic-static .cinematic-overlay{opacity:.68}
.cinematic-overlay{mix-blend-mode:screen;filter:saturate(.45) brightness(.92);transition:opacity 1.45s var(--ease),transform 1.45s var(--ease),filter .8s var(--ease)}
.cinema-in-surge .cinematic-surface.is-cinematic-active .cinematic-overlay{filter:saturate(.58) brightness(1.06);transition-duration:.3s}
.cinema-in-surge .scene-mobius-near{filter:drop-shadow(0 0 24px rgba(227,235,236,.22))}
.hero-glyph-field{filter:saturate(.28) brightness(1.06);-webkit-mask-image:radial-gradient(ellipse at center,#000 28%,rgba(0,0,0,.88) 58%,transparent 94%);mask-image:radial-gradient(ellipse at center,#000 28%,rgba(0,0,0,.88) 58%,transparent 94%);will-change:opacity}
.cinematic-surface[data-scene-density="ambient"].is-cinematic-active .hero-glyph-field{opacity:.27}
.cinematic-surface.hero-scene-pipeline.is-cinematic-active .hero-glyph-field{opacity:.2;filter:saturate(.2) brightness(.94);-webkit-mask-image:linear-gradient(90deg,transparent,#000 8% 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8% 92%,transparent)}
.cinema-in-surge .cinematic-surface.is-cinematic-active .hero-glyph-field{filter:saturate(.36) brightness(1.18);transition-duration:.22s}
.detail-hero-field.cinematic-surface{position:absolute;inset:0;z-index:1;pointer-events:none}
.detail-hero-field.cinematic-surface>:not(.cinematic-particles):not(.cinematic-overlay){position:absolute;z-index:2}
.detail-hero-field.cinematic-surface .hero-glyph-field{z-index:0;opacity:.34;-webkit-mask-image:linear-gradient(90deg,transparent 24%,#000 48% 94%,transparent);mask-image:linear-gradient(90deg,transparent 24%,#000 48% 94%,transparent)}
.asset-stage.cinematic-surface,.pipeline-wrap.cinematic-surface{isolation:isolate}
.asset-stage.cinematic-surface>:not(.cinematic-particles):not(.cinematic-overlay),.pipeline-wrap.cinematic-surface>:not(.cinematic-particles):not(.cinematic-overlay){position:relative;z-index:2}
.cinematic-static .cinematic-overlay *,.cinematic-static .scene-mobius,.cinematic-static .scene-light,.cinematic-static .scene-signal i{animation:none!important;transition:none!important}
.cinema-depth-back ellipse,.cinema-depth-back path,.cinema-perspective-grid path{stroke:rgba(196,216,218,.12)}
.cinema-depth-back ellipse:nth-child(even),.cinema-depth-back path:nth-child(even){stroke:rgba(170,167,181,.12)}
.cinema-rna-ribbon>path,.cinema-rna-stream>path,.cinema-fold-trace,.cinema-dock-path,.cinema-workflow-current,.cinema-base-wave,.cinema-branch>path,.cinema-matrix-beams>path,.cinema-output-pulse{stroke:rgba(211,228,229,.54);filter:drop-shadow(0 0 5px rgba(227,235,236,.18))}
.cinema-rna-ribbon>path:nth-child(2),.cinema-rna-stream>path:nth-child(2),.cinema-fold-trace{stroke:rgba(174,174,187,.48)}
.cinema-branch circle,.cinema-data-cluster circle,.cinema-molecule-network circle,.cinema-matrix-hits circle,.cinema-docking-molecule,.cinema-workflow-pulse{fill:#eef3f3;stroke:#b4d0d2;filter:drop-shadow(0 0 7px rgba(227,235,236,.36))}
.cinema-branch circle:nth-of-type(even),.cinema-molecule-network circle:nth-of-type(3n){fill:#c8c7ce;stroke:#e1e0e4;filter:drop-shadow(0 0 6px rgba(170,167,181,.28))}
.cinema-hit,.cinema-molecule-network .selected,.cinema-matrix-hits circle:first-child,.cinema-docking-molecule{fill:var(--aperture)!important;stroke:#f3dfb9!important;filter:drop-shadow(0 0 11px var(--warm-glow))!important}
.cinema-perspective-grid path,.cinema-matrix-plane path{stroke:rgba(196,216,218,.12)}
.cinema-data-cluster circle{fill:rgba(203,220,222,.42)}
.cinema-molecule-network path{stroke:rgba(190,211,212,.18)}

/* Every loop carries the same score: stillness → gathering → short surge → air. */
.cinematic-surface.is-cinematic-active .cinema-depth-back{animation:cinemaOrbitScore 23s linear infinite}
.cinematic-surface.is-cinematic-active .cinema-rna-ribbon,.cinematic-surface.is-cinematic-active .cinema-rna-stream,.cinematic-surface.is-cinematic-active .cinema-molecule-network,.cinematic-surface.is-cinematic-active .cinema-fold-trace{animation:cinemaDriftScore 19s linear infinite}
.cinematic-surface.is-cinematic-active .cinema-branch>path,.cinematic-surface.is-cinematic-active .cinema-matrix-beams>path,.cinematic-surface.is-cinematic-active .cinema-output-pulse,.cinematic-surface.is-cinematic-active .cinema-workflow-current,.cinematic-surface.is-cinematic-active .cinema-dock-path{animation:cinemaFlowScore 19s linear infinite}
.cinematic-surface.is-cinematic-active .cinema-core,.cinematic-surface.is-cinematic-active .cinema-hit,.cinematic-surface.is-cinematic-active .cinema-matrix-hits circle,.cinematic-surface.is-cinematic-active .cinema-workflow-pulse{animation:cinemaPulseScore 19s linear infinite}
.cinematic-surface.is-cinematic-active .cinema-scan-plane,.cinematic-surface.is-cinematic-active .cinema-matrix-sweep{animation:cinemaSweepScore 19s linear infinite}
.cinematic-surface.is-cinematic-active .cinema-docking-molecule{animation:cinemaDockScore 19s linear infinite}
@keyframes cinemaOrbitScore{0%,54%{transform:rotate(0) scale(.99);opacity:.5}61%{transform:rotate(18deg) scale(1);opacity:.62}68%{transform:rotate(82deg) scale(1.018);opacity:.88}76%{transform:rotate(105deg) scale(1);opacity:.62}100%{transform:rotate(120deg) scale(.99);opacity:.5}}
@keyframes cinemaDriftScore{0%,54%{transform:translate3d(-2px,1px,0) rotate(-.2deg)}61%{transform:translate3d(1px,-1px,0) rotate(.05deg)}68%{transform:translate3d(11px,-7px,0) rotate(.72deg)}76%{transform:translate3d(5px,-4px,0) rotate(.32deg)}100%{transform:translate3d(2px,-1px,0) rotate(.08deg)}}
@keyframes cinemaFlowScore{0%,54%{stroke-dashoffset:0;opacity:.46}62%{stroke-dashoffset:-12;opacity:.62}69%{stroke-dashoffset:-78;opacity:1}78%{stroke-dashoffset:-94;opacity:.6}100%{stroke-dashoffset:-102;opacity:.46}}
@keyframes cinemaPulseScore{0%,54%{opacity:.48;transform:scale(.9)}62%{opacity:.62;transform:scale(.96)}68%{opacity:1;transform:scale(1.14)}75%{opacity:.62;transform:scale(.98)}100%{opacity:.48;transform:scale(.9)}}
@keyframes cinemaSweepScore{0%,55%{transform:translateX(-42%);opacity:0}61%{opacity:.08}69%{transform:translateX(36%);opacity:.18}76%,100%{transform:translateX(44%);opacity:0}}
@keyframes cinemaDockScore{0%,55%{transform:translate3d(-22px,-12px,0) rotate(-8deg);opacity:.5}62%{transform:translate3d(-12px,-7px,0) rotate(-4deg);opacity:.68}69%,76%{transform:translate3d(0,0,0) rotate(0);opacity:1}100%{transform:translate3d(-2px,-1px,0);opacity:.58}}

/* Entrance timing is softer at rest and faster at the decisive moment. */
.js .lmi{opacity:0;filter:blur(8px);transition:transform 1.15s var(--ease),opacity .72s ease,filter 1.05s var(--ease);transition-delay:var(--d,0s)}
.js .reveal-lines.in .lmi,.js body.loaded #hero .lmi{opacity:1;filter:none}
.js .reveal{filter:blur(6px)}
.js .reveal.in{filter:none;transition:opacity 1.05s var(--ease),transform 1.05s var(--ease),filter 1.2s var(--ease);transition-delay:var(--d,0s)}
.sec-top::before{box-shadow:0 0 10px rgba(227,235,236,.04)}
.sec-top.in::after{animation:microMobiusScore 9s 1.1s ease-in-out infinite}
@keyframes microMobiusScore{0%,62%,100%{opacity:.48;filter:drop-shadow(0 0 4px rgba(227,235,236,.12))}69%{opacity:.92;filter:drop-shadow(0 0 12px rgba(227,235,236,.32))}76%{opacity:.58}}

.tech-card,.evidence-ledger-grid>a,.evidence-ledger-grid>div,.publication-card,.partner-card{transition:background .5s var(--ease),border-color .5s,box-shadow .65s var(--ease),transform .65s var(--ease)}
@media(hover:hover){
  .tech-card:hover,.evidence-ledger-grid>a:hover,.publication-card:hover,.partner-card:hover{transform:translateY(-2px);box-shadow:inset 0 1px rgba(247,249,249,.07),0 24px 70px rgba(0,0,0,.24),0 0 32px rgba(196,216,218,.025)}
}
@media(max-width:680px){
  .scene-mobius{width:150vw;opacity:.023}.scene-mobius-far{width:190vw}.scene-code{display:none}.scene-signal{left:4%;right:4%;top:17%}.scene-depth{width:150vw}.cinematic-surface.is-cinematic-active .cinematic-particles{opacity:.34}.cinematic-surface.is-cinematic-active .cinematic-overlay,.cinematic-static .cinematic-overlay{opacity:.56}
  #hero[data-hero-ui]::after{background:linear-gradient(90deg,rgba(5,6,11,.66),rgba(5,6,11,.25) 88%),linear-gradient(180deg,rgba(5,6,11,.3),rgba(5,6,11,.54) 36%,rgba(5,6,11,.97) 72%,var(--bg))}
}
@media(prefers-reduced-motion:reduce){
  .scene-atmosphere{opacity:.55!important}.scene-mobius,.scene-light,.scene-signal i,.sec-top.in::after{animation:none!important}.scene-mobius{transform:translate(-50%,-50%) rotate(var(--scene-rot));opacity:.025}.scene-light{display:none}.js .lmi,.js .reveal{filter:none!important;opacity:1!important}
}

/* ================= Multi-page split ================= */
/* Colors here repeat the mastering pass at 1390-1391 rather than the original
   tokens, because this block sits after it and would otherwise undo it. */

/* /about/ carries the validation feature without the news column beside it, so
   the two-column grid at 671 has to collapse the way 772 does under 860px. The
   bottom hairline is what .evidence-grid{border-top:0} (834) draws against. */
.validation-grid.is-solo{grid-template-columns:1fr}
.validation-grid.is-solo .validation-feature{border-right:0;border-bottom:1px solid rgba(206,228,232,.085)}

/* The home page shows the news teaser on its own. .news-stack (681) is a bare
   flex column: its frame came from .validation-grid and its bottom alignment
   from .all-news{margin:auto …} (688) filling the feature's 510px. */
.news-band{border:1px solid rgba(206,228,232,.09);background:linear-gradient(145deg,rgba(10,14,19,.92),rgba(7,10,14,.96))}
.news-band>a:nth-last-child(2){border-bottom:0}
.news-band .all-news{margin-top:22px}

/* 854 styles the current page only inside .nav-links, so the mobile menu never
   showed where the visitor was. */
#mobile-menu a[aria-current="page"]{color:var(--mint)}

/* .section-deep-link drops its top border (831) because it is meant to butt
   against the block above and continue that box. .evidence-ledger's 18px bottom
   margin (1518) would leave the join open at the top. */
.evidence-ledger + .section-deep-link{margin-top:-18px}

/* ================= Nav submenus =================
   Append-only. Nothing above is edited; every override here wins on source order
   or specificity alone. Two of them need this position: .nav-panel a ties with
   146, and .nav-item:hover>.nav-top ties with 1298. */

/* 142 centres .nav-links inside the 74px bar, so .nav-links is only as tall as
   its 12px text plus 146's 4px padding, and wrapping the trigger in a div also
   de-blockifies it. top:100% then lands around y=47 — 28px above the bar's own
   bottom edge — and pinning the panel to y=74 instead would leave a hover dead
   zone the pointer has to cross. Stretching the row to the full bar height fixes
   the anchor and the dead zone together, and makes the whole 74px column the
   hover target instead of a 27px strip. align-items:center on the inner link
   reproduces the present label centre exactly.
   The .nav-links>a half keeps the hand-written no-JS nav, whose children are
   bare anchors, vertically centred too. */
.nav-links{align-self:stretch;align-items:stretch}
.nav-links>a,.nav-item>a{display:flex;align-items:center;height:100%;padding:0}
.nav-item{position:relative;display:flex;align-items:center}
/* So an open panel paints above the .nav-item siblings that follow it. */
.nav-item.open{z-index:2}
/* 63's outline-offset:3px on a 74px trigger would draw off the top of the
   viewport and past nav's hairline. */
.nav-item>a:focus-visible{outline-offset:-3px}
/* The whole column is the hover target now, so the label answers to the column. */
.nav-item:hover>.nav-top,.nav-item.open>.nav-top{color:var(--ice)}
/* Last, so the current section stays identifiable under the pointer. Carried by
   the .nav-item because on /science/, /partnerships/ and /publications/ the link
   that matches is a child inside the closed panel, and 854 is a descendant
   selector. */
.nav-item.is-current>.nav-top{color:var(--mint)}

.nav-panel{position:absolute;top:100%;left:-20px;width:330px;padding:9px 0;
  /* border-top:0 — nav's own hairline (140/1297) becomes the panel's top edge, so
     there is no seam to mismatch while nav is still transparent. The background
     is a shade darker than scrolled-nav's rgba(5,7,10,.9) so the panel never
     reads lighter than the bar above it, and the shadow detaches it from the page
     rather than trying to blend into a transparent bar.
     No backdrop-filter: nav.scrolled (1297) is already a backdrop root, so a
     nested filter would sample nav's filtered group and blur nothing. */
  border:1px solid var(--line);border-top:0;background:#080a10;
  box-shadow:0 26px 60px rgba(0,0,0,.5);
  /* 145 hands the panel 12px mono at .2em tracking in --dim and 146 leaves its
     links inline — the titles would sit in the wrong face and colour, touching
     the border. All of it has to be undone. */
  font-family:var(--font-b);font-size:1rem;letter-spacing:normal;line-height:1.5;
  color:var(--muted);text-transform:none;text-align:left;
  opacity:0;visibility:hidden;transform:translateY(-6px);
  /* visibility is stepped, not interpolated, and the two directions need
     different timing. Closed state: delay the flip to hidden by the full 220ms so
     the panel is still painted while it fades. Open state (next rule): flip to
     visible at 0s with no delay, so a panel is focusable the instant .open lands
     rather than one frame later — the keyboard path depends on the children being
     reachable by the very next Tab, and that must not ride on a repaint. */
  transition:opacity .22s var(--ease),transform .22s var(--ease),visibility 0s linear .22s}
.nav-item.open>.nav-panel{opacity:1;visibility:visible;transform:none;
  transition:opacity .22s var(--ease),transform .22s var(--ease),visibility 0s}
/* At 861px — the home page's narrowest desktop nav, since 761 hides the links at
   860 and 745 has already tightened the gap — a left-aligned 330px panel on NEWS
   runs off the right edge. Nothing reveals it: the panel descends from a fixed
   nav, so the overflow is silent. */
.nav-item:nth-last-child(-n+2)>.nav-panel{left:auto;right:-20px}

.nav-panel a{display:block;padding:10px 20px;transition:background .2s,color .2s}
.nav-panel a:hover,.nav-panel a:focus-visible{background:rgba(220,238,241,.045)}
.nav-panel b{display:block;font:500 .93rem/1.35 var(--font-d);letter-spacing:-.01em;color:var(--text)}
.nav-panel a:hover b{color:var(--ice)}
/* 854 colours the anchor, but b carries its own colour, so the current child
   would show no marker. After the hover rule so it wins the tie. */
.nav-panel a[aria-current="page"] b{color:var(--mint)}
@media (prefers-reduced-motion:reduce){
  /* 459 already forces transition-duration to .01ms on everything; dropping the
     transition and the offset start state stops a one-frame flash. */
  .nav-panel{transition:none;transform:none}
}

/* Mobile. 155 gives #mobile-menu no max-height: the six existing rows just fit a
   small phone, and the sub-rows push it past the fold with no way to scroll. */
#mobile-menu{max-height:calc(100vh - var(--nav-h));overflow-y:auto;overscroll-behavior:contain}
/* 156 is an id selector, so a bare .mobile-sub a rule would lose to it silently —
   every rule below needs the id. It is also a descendant selector, so sub-links
   would otherwise inherit the 22px display face and the top-level hairline.
   1652's aria-current rule loses to that reset, so it is re-declared here. */
#mobile-menu>a.has-sub{border-bottom:0;padding-bottom:7px}
#mobile-menu .mobile-sub{display:flex;flex-direction:column;
  padding:0 0 13px 38px;border-bottom:1px solid var(--hair)}
#mobile-menu .mobile-sub a{display:block;padding:7px 0;border-bottom:0;
  font:400 15px/1.4 var(--font-b);letter-spacing:.01em;color:var(--dim)}
#mobile-menu .mobile-sub a[aria-current="page"]{color:var(--mint)}

/* ================= Readable type =================
   Append-only. The token bump in :root lifts every label two points, but a
   number of these were never labels: an officer's job title, an adviser's
   affiliation, a journal name, a release date, the filter buttons and the
   regulatory small print are body copy that had been set as instrument
   metadata. They come out of the mono/uppercase/wide-tracking treatment here.
   The instrument decoration itself — the edge coordinates, the column rules,
   the + marks, the section numerals and their right-hand meta — is deliberately
   untouched. */

/* --- Officers and advisers. 707 set the role in 11px uppercase mono at .12em;
       it is the one piece of information on the card that isn't the name. */
.leader p,.advisor p{font-family:var(--font-b);font-size:var(--fs-sm);
  letter-spacing:normal;text-transform:none;line-height:1.5;color:var(--muted)}
/* dt stays a label; dd is the answer. */
.company-facts dt{font-size:var(--fs-nano);letter-spacing:.08em}
.company-facts dd{font-family:var(--font-b);font-size:var(--fs-sm);
  letter-spacing:normal;color:var(--muted)}

/* --- Bibliographic and dateline text. */
.article-meta{font-size:var(--fs-micro);letter-spacing:.08em}
.news-date,.news-type{font-family:var(--font-b);font-size:var(--fs-micro);
  letter-spacing:normal;color:var(--muted)}
.science-reference span,.science-reference i{font-size:var(--fs-micro);letter-spacing:.06em}
.publication-index,.partner-index{font-size:var(--fs-micro);letter-spacing:.08em}
.partner-index b{font-size:var(--fs-micro);letter-spacing:.08em}
.publication-action>span{font-size:var(--fs-nano);letter-spacing:.08em}
.publication-action strong{font-size:var(--fs-sm)}
.milestone-date{font-size:var(--fs-micro);letter-spacing:.06em}
.breadcrumb{font-size:var(--fs-micro);letter-spacing:.1em}

/* --- The regulatory small print. It carries the sentences that let the rest of
       the page make its claims — "Investigational program; not approved by any
       regulatory authority", the forward-looking note on the pipeline. Kept, and
       set so it can actually be read: sentence case survives, tracking comes off,
       and the measure is capped so it does not run the full page width.
       .source-note went with the citation lines in 2026-08. .page-note replaces
       it for a disclaimer rather than a citation (privacy: the effective date
       of the policy). It also carried the publications page's paper-to-
       capability disclaimer until that correspondence itself was removed in
       2026-08 — see the comment in publications/index.html.
       Its declarations are the computed result of the two old .source-note
       rules, so the restored paragraph renders exactly as it did. */
.page-note{margin-top:22px;font:400 var(--fs-meta)/1.65 var(--font-b);
  letter-spacing:normal;max-width:92ch;color:var(--muted)}
.pipeline-disclaimer{font-family:var(--font-b);font-size:var(--fs-meta);line-height:1.65;
  letter-spacing:normal;text-transform:none;max-width:92ch;color:var(--muted)}
/* Figure captions are explanatory text, not annotation. */
.structure-figure figcaption,.workflow-figure figcaption,.asset-figure figcaption,.rna-universe figcaption,.assay-readout figcaption{font-family:var(--font-b);font-size:var(--fs-meta);
  line-height:1.6;letter-spacing:normal;text-transform:none}

/* --- Interactive controls. 982's 11px chip was also a small tap target. */
.news-chip{font-family:var(--font-b);font-size:var(--fs-meta);letter-spacing:.02em;padding:11px 18px}
.news-count-line,.lead-stack .news-count-line{font-family:var(--font-b);
  font-size:var(--fs-meta);letter-spacing:normal}
.news-empty{font-family:var(--font-b);font-size:var(--fs-meta);letter-spacing:normal}
.back-top{font-size:var(--fs-micro);letter-spacing:.1em}
.foot-links h3{font-size:var(--fs-micro);letter-spacing:.12em}
.foot-links a{font-size:var(--fs-sm)}

/* --- Body copy that sat below the body size. .9rem is 15.3px against an 18px
       body; these are paragraphs, not captions. */
.principle p{font-size:var(--fs-sm)}
.platform-detail-card p,.resolution-card p,.partner-card .publication-summary{font-size:var(--fs-sm)}
.advantage-copy p,.value-lane p,.engine-stage-grid p{font-size:var(--fs-sm)}
.leader h3,.advisor h3{font-size:1.05rem}

/* --- Tracking. Roughly 120 declarations sit between .12em and .28em, and at
       label sizes that spacing is most of why the page reads as machine output.
       The widest are pulled in; the nav, the section labels and the display
       headings keep theirs, which is where the instrument character belongs. */
.leader-index,.investor-list span,.platform-detail-card>span,
.platform-detail-card small,.platform-detail-card a,
.evidence-ledger-grid span,.instrument-head span,.instrument-head small,
.proof-kicker,.eyebrow,.badge{letter-spacing:.1em}

/* 631 and 1114 sized the program column for the old display size; at the larger
   face "Immunology" overflows its 110px by 7px. The table already scrolls
   horizontally, so the extra width costs nothing. Scoped to 861px and up because
   1264 swaps the table for cards below that. */
@media (min-width:861px){
  .pipeline-head,.pipeline-row{grid-template-columns:132px 185px 148px repeat(4,minmax(118px,1fr));min-width:950px}
  .pipeline-group{min-width:1342px}
}
@media (min-width:1101px){
  .pipeline-head,.pipeline-row{grid-template-columns:132px 185px 140px repeat(4,minmax(105px,1fr));min-width:880px}
  .pipeline-group{min-width:1178px}
}

/* The collaboration table (past partnered programs) shares the frame above but
   carries five text columns and no stage rail. One rule for every breakpoint:
   1264 swaps the table for cards below 861px, and .collab-table's extra
   specificity outranks the seven-column rules above. The sibling rule spaces
   the 02 divider off the first frame in both the table and the card view —
   the frame itself then hangs off its .sec-top the same way 01's does.

   The ANNOUNCED column added in 2026-08 is the fifth track. It holds one
   YYYY.MM.DD date in a 13px mono face, about 80px of text, so it takes the
   narrowest track of the five and the four text columns keep their old ratios
   to each other. min-width stays 0: these are fr tracks, so the table
   compresses instead of growing the scrollbar the internal table needs. */
.collab-table .pipeline-head,.collab-table .pipeline-row{grid-template-columns:1.2fr 1.4fr 1fr 1fr .8fr;min-width:0}
/* The date is a value, not a label, so it is left-aligned and its heading sits
   over it. Scoped to the fifth cell of .collab-table so the centred MoA and
   STAGE headings above keep the alignment they already had. */
.collab-table .pipeline-head span:nth-child(5){text-align:left}
/* Same mono face and size as .moa, minus the uppercasing a date does not need.
   .pipeline-row already carries tnum, so the dates line up down the column. */
.pipeline-cell.announced{font:500 var(--fs-nano)/1.4 var(--font-m);letter-spacing:.05em;color:var(--muted)}
.pipeline-wrap+.sec-top{margin-top:64px}
/* /pipeline/ の表の足元に置いた MoA 導線。.lead-stack は padding-top:8px しか
   持たないので、上の .sec-top と同じ 64px の呼吸を枠から取る。 */
.pipeline-wrap+.lead-stack{margin-top:64px}

/* 854's 88px date column was cut for the old label size; a full "2025.11.06"
   now needs 92px. 1012 narrows it to 72px on small screens, where the row also
   reflows to three columns. */
.milestone-item{grid-template-columns:104px 1fr 1.25fr auto}
@media (max-width:860px){
  /* Three columns from here down, so the third span and the arrow have to be
     placed here too — they used to be set only below 680px, which left the
     681-860px band three-column with four children still trying to sit in a row. */
  .milestone-item{grid-template-columns:96px 1fr auto}
  .milestone-item>span:nth-child(3){grid-column:2/4}
  .milestone-item i{grid-column:3;grid-row:1/2}
}

/* --- Narrow screens. Three labels are single long uppercase words in fixed
       narrow columns, where wide tracking has nowhere to go. Only the tracking
       comes off; the labels themselves stay. */
@media (max-width:680px){
  /* "04 / COLLABORATIONS" at .18em (836) overruns the 170px proof card. */
  .proof-kicker{letter-spacing:.06em}
  /* "SELECTIVITY" at .16em (653) overruns its third of the proof bar. */
  .advantage-proofbar article>span{letter-spacing:.05em}
  /* 1143 leaves this index a 64px column while 1139 sets it at --fs-sm — even
     "PRIORITIZE" alone did not fit before the type bump. Give it its own row
     instead of a column, which also lets the title use the full width. */
  .workflow-mobile-stage{grid-template-columns:minmax(0,1fr) 38px}
  .workflow-mobile-stage>span{grid-column:1/-1;font-size:var(--fs-nano);margin-bottom:2px}
}

/* --- The bar. 145 set the links at .2em on a 12px face; at 14px the five
       labels plus the logo, the language switch and the contact button ran 22px
       past the container and the flexbox answered by wrapping "ABOUT US" and
       "CAREERS" onto two lines. Tightening the tracking and the gap recovers
       about 80px, and nowrap makes a future overflow visible instead of silently
       breaking the labels. */
.nav-links{gap:24px;letter-spacing:.1em}
/* Triggers only. `.nav-links a` also matches the panel's own links, whose notes
   are sentences and have to wrap. */
.nav-links>a,.nav-item>.nav-top{white-space:nowrap}
@media (max-width:1100px){
  .nav-links,.detail-nav-links{gap:15px}
}

/* --- Wrapping is stated outright here rather than left to inheritance, so a
       future nowrap on the bar cannot reach in again. The panel used to be
       widened to 352px to fit a grey description under each title; those were
       removed in 2026-08, so the panel is sized to the titles alone. */
.nav-panel a,.nav-panel b{white-space:normal}
.nav-panel{width:250px}
.nav-item:nth-last-child(-n+2)>.nav-panel{left:auto;right:-20px}

/* ================= Team =================
   Officers keep equal portrait cards. Board directors, the auditor and
   scientific advisers render as a name + role ledger — those groups have no
   supplied photos, so a card grid of initials plates is no longer used.
   Legacy officer-card rules remain below for older embedded leadership views. */
.team-roster{position:relative;background:linear-gradient(180deg,rgba(7,12,18,.4),rgba(6,10,15,.92))}
.team-roster-group+.team-roster-group{margin-top:96px}
/* The 56px lead track held a decorative 01/02/03 that has been removed; the
   heading now starts at the container edge and the head-count keeps the right. */
.team-group-heading{display:grid;grid-template-columns:1fr auto;align-items:baseline;padding-bottom:22px;border-bottom:1px solid var(--line)}
.team-group-heading small{color:var(--dim);font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em}
.team-group-heading h2{margin:0;color:#e5eff0;font:500 clamp(2rem,3.5vw,3.4rem)/1 var(--font-d);letter-spacing:-.04em}
.team-roster-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-left:1px solid var(--line)}
/* Name + role ledger for directors / auditor / advisers. A mint square is the
   bullet; on wide stages the role sits on the right like a company-facts row,
   and stacks under the name below 760px. */
.team-roster-list{list-style:none;margin:0;padding:0;border-left:1px solid var(--line)}
.team-list-item{position:relative;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.95fr);gap:6px 28px;align-items:baseline;padding:18px 22px 18px 32px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:linear-gradient(155deg,rgba(13,22,29,.72),rgba(7,12,18,.88));transition:background .35s var(--ease)}
.team-list-item::before{content:"";position:absolute;left:14px;top:1.45em;width:5px;height:5px;background:var(--mint);opacity:.72;transform:translateY(-50%)}
.team-list-item:hover{background:linear-gradient(155deg,rgba(18,31,39,.88),rgba(8,14,20,.96))}
.team-list-item:hover::before{opacity:1}
.team-list-name{color:#e4eff0;font:500 clamp(1.05rem,1.4vw,1.28rem)/1.35 var(--font-d);letter-spacing:-.02em;overflow-wrap:anywhere}
.team-list-role{color:var(--muted);font-size:var(--fs-sm);line-height:1.5;text-align:right}
.team-list-item.is-unlisted .team-list-name{color:var(--mint);letter-spacing:-.04em}
@media(min-width:761px){
  html[lang="ja"] .team-list-role{word-break:keep-all;overflow-wrap:anywhere}
}
/* Profiles used to expand in-place (span 2, 5→6 / 4→5 columns). That
   re-grids every neighbour. The toggle now opens a sized overlay, so the
   roster column counts stay put. */
.team-person{display:flex;min-width:0;min-height:0;padding:0 0 20px;flex-direction:column;align-items:stretch;text-align:left;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:linear-gradient(155deg,rgba(13,22,29,.9),rgba(7,12,18,.96));overflow:hidden;transition:background .35s var(--ease)}
.team-person:hover{background:linear-gradient(155deg,rgba(18,31,39,.94),rgba(8,14,20,.98))}
/* Portrait as a specimen plate, not a round avatar: the card's own grid
   hairlines are the frame, so the photo is flush to the top and sides. The
   four L-ticks (.team-figure::before) are the only ornament — the same
   fiducial language as a well plate or a targeting reticle, at rest opacity.
   position:relative is required for those ticks. */
.team-figure{position:relative;display:block;width:100%;margin:0 0 16px;border-bottom:1px solid var(--line)}
.team-figure::before,.team-profile-figure::before{content:"";position:absolute;inset:8px;z-index:1;pointer-events:none;opacity:.55;transition:opacity .3s var(--ease);background:
  linear-gradient(#c5d9da,#c5d9da) 0 0/12px 1px no-repeat,
  linear-gradient(#c5d9da,#c5d9da) 0 0/1px 12px no-repeat,
  linear-gradient(#c5d9da,#c5d9da) 100% 0/12px 1px no-repeat,
  linear-gradient(#c5d9da,#c5d9da) 100% 0/1px 12px no-repeat,
  linear-gradient(#c5d9da,#c5d9da) 0 100%/12px 1px no-repeat,
  linear-gradient(#c5d9da,#c5d9da) 0 100%/1px 12px no-repeat,
  linear-gradient(#c5d9da,#c5d9da) 100% 100%/12px 1px no-repeat,
  linear-gradient(#c5d9da,#c5d9da) 100% 100%/1px 12px no-repeat}
.team-person:hover .team-figure::before{opacity:.95}
/* Shared footprint for both states of the portrait plate — an actual photo
   (.team-portrait) or the initials fallback for anyone with no photo on file
   (.team-portrait-initials, see cards() in detail.js). Same size and square
   crop either way, so the grid never shifts between the two. */
/* height:auto is required here, not decorative: the <img> carries width/height=256
   HTML attributes (intrinsic-size hints, kept so the layout doesn't jump before the
   photo loads), which the UA maps to a presentational height:256px hint. With no
   explicit `height` of our own, that hint would win over aspect-ratio — both
   dimensions would count as definite and the box would render as 256px tall
   regardless of width — so this overrides it and leaves aspect-ratio:1 the
   only thing deciding the height. */
.team-portrait,.team-portrait-initials{position:relative;display:grid;place-items:center;width:100%;height:auto;aspect-ratio:1;border:0;border-radius:0;background:radial-gradient(circle,rgba(75,174,172,.09),rgba(5,12,18,.72) 67%);overflow:hidden}
/* A photo needs no radial glow or crosshair behind it — it already fills the
   plate — but keeps the square crop above so it reads as one family with the
   initials fallback. object-fit:cover guards against the rare photo that
   isn't a perfect square. No grayscale/duotone treatment: the brief asked
   for the portraits to read as photos, not as processed art. */
.team-portrait{background:#09131b;object-fit:cover;object-position:50% 18%}
/* TODO: a 5-column management card is ~236px wide, so this plate asks for
   ~472 device pixels at DPR 2. komatsu.webp, kashida.webp, kuroita.webp and
   kume.webp are native 512px studio photos (2026-08) and clear that, but the
   other portraits under assets/team/ are 256px WebPs upscaled from a ~139px
   source (the company deck PDF), so those still render visibly soft. Swap in
   native 512px+ photos for the rest once available; see #146. Do not shrink
   the plate back to a circle to hide that — the square crop is the point. */
.team-portrait-initials::before,.team-portrait-initials::after{content:"";position:absolute;background:rgba(119,206,207,.11);transition:opacity .3s var(--ease)}
.team-portrait-initials::before{left:12%;right:12%;top:50%;height:1px}.team-portrait-initials::after{top:12%;bottom:12%;left:50%;width:1px}
.team-portrait-initials span{position:relative;z-index:1;color:#8fa8ad;font:500 clamp(1.3rem,2vw,1.7rem) var(--font-d);letter-spacing:.02em;transition:opacity .3s var(--ease)}
.team-person h3{margin:0;color:#e4eff0;font:500 clamp(1.05rem,1.35vw,1.3rem)/1.3 var(--font-d);letter-spacing:-.02em;overflow-wrap:anywhere}
.team-person p{margin:8px 0 0;color:#8fa5ab;font-size:var(--fs-sm);line-height:1.55}
/* Caption is the name / role / chrome stack under the plate. The plate is
   full-bleed, so the caption carries the inset the card itself no longer
   has. flex:1 plus .team-chrome { margin-top:auto } pins the profile
   button and social row to the card foot so a wrapping role
   (「創業者・代表取締役社長 CEO」 dropping "CEO" onto a second line)
   does not drop this card's controls below its neighbours. Two-line
   min-height on the role keeps short titles (CTO / CSO / CFO) on the
   same starting line as the long ones. */
.team-caption{display:flex;flex:1 1 auto;min-width:0;flex-direction:column;align-items:stretch;padding:0 18px}
.team-caption>p{min-height:calc(1.55em * 2)}
.team-chrome{display:flex;flex-direction:column;align-items:flex-start;margin-top:auto;padding-top:16px}
/* The explicit disclosure control that replaced hover/tap-to-reveal: a pill
   button between the role line and the social row, present only on cards
   `detailLines()` actually gave something to show (`.has-detail`). */
/* white-space:nowrap plus the tighter padding/tracking below buy back the
   ~13px "VIEW PROFILE" needs to clear a single line inside the 144px content
   box a 196px management neighbour column leaves it (196 minus the card's
   26px sides) and inside the open card's own 150px left column — both are
   narrower than the pill's unpadded default fit. Measured in-browser per
   2026-08 polish pass; see the team block's opening note for the harness. */
.team-profile-toggle{display:inline-flex;align-self:flex-start;align-items:center;gap:8px;margin:0;padding:9px 12px;border:1px solid var(--line2);border-radius:0;background:transparent;color:var(--dim);font:500 var(--fs-nano) var(--font-m);letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;cursor:pointer;transition:color .25s var(--ease),border-color .25s var(--ease)}
.team-profile-toggle:hover,.team-profile-toggle:focus-visible{color:var(--mint);border-color:rgba(119,206,207,.5)}
.team-profile-toggle .ar{display:inline-block;transition:transform .25s var(--ease)}
.team-profile-toggle:hover .ar,.team-profile-toggle:focus-visible .ar{transform:translateX(4px)}
/* Per-person LinkedIn icon — optional, see `social` in site-data.js.
   The icon always renders on every card: `a.is-live` is the working link
   once a URL is set, `.is-off` is the same-sized inert placeholder shown
   while it isn't. The row sits dimmed at rest and lifts on hover for pointers
   that support it; a real link is marked permanently rather than only while
   the card is open, since the toggle button now carries the disclosure. */
.team-social{display:flex;justify-content:flex-start;gap:4px;margin-top:14px;opacity:.55;transition:opacity .3s var(--ease)}
@media(hover:hover){.team-person:hover .team-social{opacity:1}}
.team-social a{display:grid;place-items:center;width:32px;height:32px;color:var(--dim);border-radius:0;transition:color .25s var(--ease),background .25s var(--ease),box-shadow .25s var(--ease)}
.team-social a:hover,.team-social a:focus-visible{color:var(--mint);background:rgba(167,203,196,.1)}
.team-social a.is-live{color:var(--mint);box-shadow:0 0 0 1px rgba(119,206,207,.28)}
.team-social .is-off{display:grid;place-items:center;width:32px;height:32px;color:var(--dim);opacity:.38;cursor:default}
.team-social svg{width:16px;height:16px}
/* 和文の役職は約物以外のどこでも折れる。「創業者・取締役 会長 CBO」が
   「会／長」になるのを keep-all で文節（・とスペース）に限る。
   overflow-wrap:anywhere は、将来もっと長い役職が入ったときのあふれ止め。
   5列ギャラリーが狭くなる 761px 以上だけで足りる。EN は素通り。 */
@media(min-width:761px){
  html[lang="ja"] .team-person p{word-break:keep-all;overflow-wrap:anywhere}
}
@media(max-width:1280px){.team-roster-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
/* 3-col (and any closed card wider than ~260px): horizontal dossier. Keeps
   the plate near the 256px source instead of blowing a square up to ~390px. */
@media(min-width:761px) and (max-width:1280px){
  .team-person{display:grid;grid-template-columns:158px minmax(0,1fr);align-items:stretch;min-height:158px;padding:0}
  .team-person>.team-figure{grid-column:1;align-self:stretch;height:100%;min-height:158px;margin:0;border-bottom:0;border-right:1px solid var(--line)}
  .team-person .team-portrait,
  .team-person .team-portrait-initials{height:100%;aspect-ratio:auto}
  .team-person>.team-caption{grid-column:2;min-width:0;padding:18px 18px 16px}
}
@media(max-width:760px){
  .team-roster-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-left:-24px;margin-right:-24px}
  .team-person{padding:0 0 18px}
  .team-roster-list{margin-left:-24px;margin-right:-24px}
  .team-list-item{grid-template-columns:1fr;gap:4px;padding:16px 22px 16px 32px}
  .team-list-role{text-align:left}
}
@media(max-width:430px){
  .team-roster-grid{grid-template-columns:1fr}
  .team-person{display:grid;grid-template-columns:128px minmax(0,1fr);align-items:stretch;min-height:128px;padding:0}
  .team-person>.team-figure{grid-column:1;align-self:stretch;height:100%;min-height:128px;margin:0;border-bottom:0;border-right:1px solid var(--line)}
  .team-person .team-portrait,
  .team-person .team-portrait-initials{height:100%;aspect-ratio:auto}
  .team-person>.team-caption{grid-column:2;min-width:0;padding:16px 16px 14px}
}
/* Profile overlay. Roster cards stay closed; View Profile opens a
   centered sheet instead of a viewport takeover. z-index 240 sits above
   nav (100) and the progress bar (200). */
.team-profile-layer{position:fixed;inset:0;z-index:240;background:rgba(5,6,11,.72);color:var(--text);overflow:auto;overscroll-behavior:contain}
.team-profile-layer[hidden]{display:none!important}
.team-profile-layer:not([hidden]){animation:team-profile-in .22s var(--ease) both}
@keyframes team-profile-in{from{opacity:0}to{opacity:1}}
@keyframes team-profile-sheet-in{from{opacity:0;transform:translate(-50%,calc(-50% + 8px))}to{opacity:1;transform:translate(-50%,-50%)}}
.team-profile-sheet{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;flex-direction:column;width:min(420px,calc(100% - 40px));max-height:min(86vh,560px);border:1px solid var(--line2);background:linear-gradient(155deg,rgba(13,22,29,.98),rgba(7,12,18,.99));overflow:hidden;animation:team-profile-sheet-in .28s var(--ease) both}
.team-profile-close{position:absolute;top:12px;right:12px;z-index:2;display:inline-flex;align-items:center;padding:8px 12px;border:1px solid var(--line2);background:rgba(7,12,18,.88);color:var(--text);font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em;text-transform:uppercase;cursor:pointer}
.team-profile-close:hover,.team-profile-close:focus-visible{border-color:var(--mint);color:var(--mint)}
.team-profile-figure{position:relative;flex:0 0 auto;width:100%;aspect-ratio:1;background:#09131b;overflow:hidden}
.team-profile-figure img{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 18%}
.team-profile-figure.is-blank{display:grid;place-items:center;background:
  linear-gradient(var(--line) 1px,transparent 1px) 50% 50%/100% 1px no-repeat,
  linear-gradient(90deg,var(--line) 1px,transparent 1px) 50% 50%/1px 100% no-repeat,
  #09131b}
.team-profile-initials{color:#8fa8ad;font:500 clamp(2rem,6vw,2.8rem) var(--font-d);letter-spacing:.02em}
/* Long careers must scroll inside this pane. A near-black global
   scrollbar thumb would vanish on the sheet, so the body carries its own. */
.team-profile-body{flex:1 1 auto;min-width:0;min-height:0;padding:44px 22px 24px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:rgba(119,206,207,.45) transparent}
.team-profile-body::-webkit-scrollbar{width:8px}
.team-profile-body::-webkit-scrollbar-track{background:transparent}
.team-profile-body::-webkit-scrollbar-thumb{background:rgba(119,206,207,.38);border:2px solid transparent;background-clip:padding-box}
.team-profile-kicker{margin:0 0 8px;padding-right:72px;color:var(--mint);font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em;text-transform:uppercase}
.team-profile-body h2{margin:0 0 6px;padding-right:72px;color:#e5eff0;font:500 clamp(1.25rem,2.4vw,1.6rem)/1.2 var(--font-d);letter-spacing:-.03em}
.team-profile-role{margin:0 0 16px;color:var(--muted);font-size:var(--fs-sm);line-height:1.5}
.team-profile-section{margin:0 0 16px;padding:0}
.team-profile-section h3{margin:0 0 6px;color:var(--mint);font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em;text-transform:uppercase}
.team-profile-section p{margin:0 0 8px;color:var(--text);font-size:var(--fs-sm);line-height:1.6}
.team-profile-social.team-social{opacity:1;margin-top:18px}
html[lang="ja"] .team-profile-role{word-break:keep-all;overflow-wrap:anywhere}
@media(min-width:641px){
  /* Square plate, never a slit: sheet height follows the photo. 28vw / 52vh
     grows the plate on a large or OS-fullscreen viewport so the portrait is
     not a 216–340px stamp in a dark field. align-self:stretch is avoided —
     it was what turned a 1:1 photo into a tall narrow column when copy ran long. */
  .team-profile-sheet{--plate:clamp(280px,min(28vw,52vh),480px);flex-direction:row;align-items:stretch;width:min(calc(var(--plate) + 30rem),calc(100% - 48px));height:var(--plate);max-height:var(--plate);min-height:var(--plate)}
  .team-profile-figure{flex:0 0 var(--plate);width:var(--plate);height:var(--plate);max-width:var(--plate);max-height:var(--plate);aspect-ratio:1;align-self:flex-start}
  .team-profile-figure img{position:absolute;inset:0;width:100%;height:100%;object-position:50% 18%}
  .team-profile-body{padding:22px 24px 20px;border-left:1px solid var(--line);height:100%}
}
@media(max-width:640px){
  .team-profile-sheet{max-height:min(90vh,720px)}
  .team-profile-figure{width:min(100%,48vh);max-height:none;aspect-ratio:1;align-self:center}
  .team-profile-body{max-height:none}
}
@media(prefers-reduced-motion:reduce){
  .team-profile-layer:not([hidden]),.team-profile-sheet{animation:none}
  .team-profile-toggle .ar{transition:none}
}
body.team-profile-open{overflow:hidden}
.officer-feature{margin-top:34px}
.officer-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);
  border:1px solid var(--line);border-top:0}
.officer-card{position:relative;background:var(--cell);padding:34px 30px;display:flex;flex-direction:column}
.officer-feature .officer-card{border:1px solid var(--line);
  background:radial-gradient(circle at 82% 12%,rgba(228,197,141,.045),transparent 26%),linear-gradient(145deg,#0e151b,#090d12)}
.officer-dept{font:500 var(--fs-nano) var(--font-m);letter-spacing:.1em;color:var(--mint)}
.officer-card h3{font:500 1.3rem/1.25 var(--font-d);letter-spacing:-.02em;margin:26px 0 8px}
.officer-feature .officer-card h3{font-size:clamp(1.6rem,2.6vw,2.1rem);margin-top:30px}
.officer-role{font-size:var(--fs-sm);color:var(--cyan)}

/* Employment history is not printed next to the name; the card reveals it on
   hover or on tap, and only .has-prior cards carry the affordance at all.
   Dormant as of 2026-08-04: every `prior` array in site-data.js is empty
   pending each officer's agreement, so nothing here currently matches. Kept
   so that filling one array in is the only step needed to bring it back.
   It stays in normal flow rather than being positioned at the card's bottom edge:
   absolute placement reserved one line, and "PREVIOUSLY / Takeda · Otsuka" wraps
   to two in a 294px column, so it grew upward into the role. In flow the card
   accounts for its height whether it is showing or not, and revealing it only
   changes opacity — no shift, and nothing can collide.
   opacity, never display:none or visibility: the line stays in the accessibility
   tree, so a screen reader reads it without having to trigger anything. */
.officer-card.has-prior{cursor:pointer}
/* margin-top:auto pins this pair to the bottom of the flex column, so the four
   cards agree on where the line sits. The rule stays lit as the quiet signal that
   there is something to reveal — on a touch screen there is no cursor to do it. */
.officer-more{margin-top:auto;width:22px;height:1px;background:var(--line2)}
/* Two lines reserved: "PREVIOUSLY / JT" takes one and "PREVIOUSLY / Takeda ·
   Chordia Therapeutics" takes two, and without a floor the rule above — the one
   thing that is always visible — would sit at a different height on each card. */
.officer-prior{margin-top:15px;min-height:3em;font:500 var(--fs-nano)/1.5 var(--font-m);
  letter-spacing:.08em;color:var(--muted);
  opacity:0;transform:translateY(3px);transition:opacity .22s var(--ease),transform .22s var(--ease)}
.officer-card.is-open .officer-prior{opacity:1;transform:none}
@media (hover:hover){
  .officer-card.has-prior:hover .officer-prior{opacity:1;transform:none}
}
/* /about/ keeps a three-line summary of the team with a link out to the page. */
.leadership-link{margin:0 34px 30px}

@media (max-width:1100px){
  .officer-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:680px){
  .officer-grid{grid-template-columns:1fr}
  .officer-card{padding:26px 22px}
  .officer-card h3{margin-top:18px}
}

/* ================= Header chrome type (2026-08) =================
   The reader type scale (小 / 中 / 大 on html[data-type]) was retired: the three
   steps are gone and the site renders at one fixed size. That size is the old
   中 step, which was defined to be identical to the no-attribute default — the
   :root tokens at the top of this file (13 / 14 / 15 / 16 / 18px) and
   html{font-size:17px} — so removing the attribute rules changes nothing that
   was on screen for a visitor who never touched the control.

   --fs-chrome stays here and stays outside that token group. It carries the
   header only, and was deliberately never scaled with the reader steps: at
   1101px the header has 49px of slack, and growing the five nav labels would
   wrap them. The width-driven step-down below is what it exists for. */
:root{--fs-chrome:14px}

.nav-links,.lang-switch,.nav-contact.btn-sm{font-size:var(--fs-chrome)}

/* 1101px is the tightest desktop header there is: .detail-page hands over to the
   burger at 1100px and / drops its contact button there, so this is the last
   width that still carries five nav labels, EN / JP and the button all at
   once. Measured against the 1044px available, that came to 11px
   over on .detail-page and 18px over on / — the home nav sits slightly wider.
   Dropping --fs-chrome one step is what closes it: it takes the reduction out
   of every header string at once rather than squeezing the gaps to nothing, and
   13px is the readability floor this stylesheet sets at the top, not below it.
   The range is closed at 1100px on purpose — the ≤1100px rule above sets the
   gap to 15px and appears earlier in the file, so an open-ended max-width here
   would silently override it. */
/* One step down for every header string, from 1199px to wherever the burger
   takes over. Two bands need it, not one: 1101-1199px is the .detail-page
   squeeze above, and 861-1100px is / and /jp/ still showing five labels and
   EN / JP after the contact button has gone — that one measured 7px of slack.
   Kept as its own rule so it cannot touch the gap. */
@media (max-width:1199px){
  :root{--fs-chrome:13px}
}
@media (min-width:1101px) and (max-width:1199px){
  .nav-links,.detail-nav-links{gap:18px}
}
/* 861px is the narrowest header that still shows everything: / and /jp/ only
   hand over to the burger at 860px, and the Japanese labels are the longest set
   there is, which left 4px. The ≤1100px rule above sets the gap to 15px and this
   takes it to 11px for that band only — below 861px none of it is on screen. */
@media (min-width:861px) and (max-width:1100px){
  .nav-links,.detail-nav-links{gap:11px}
  .lang-switch{gap:4px}
}

/* ================= Publication list (2026-08) =================
   Three changes: the byline is printed, the journal is the loudest line in the
   card, and the list starts directly under the hero.

   The journal was on .article-meta, which the news, partner, about and science
   cards also use — hence a class of its own. It is set on the display face at
   --fs-sm rather than the mono label face: at nano size with .18em of tracking
   it read as a tag, and the ask was for the journal, not the tag. */
.publication-journal{font:500 var(--fs-sm)/1.3 var(--font-d);letter-spacing:.005em;
  color:var(--mint)}
.publications-page .publication-main h2{margin-top:14px}

/* A byline is reference matter, so it is set on the body face and allowed to
   wrap — the longest of these is thirteen names. It is held level with the
   summary rather than below it: this is the line that was asked for, and at
   --fs-nano in --dim it was the faintest thing in the card. Not truncated to
   "et al.": see the note in site-data.js. */
.publication-authors{margin:0 0 16px;max-width:72ch;
  font:400 var(--fs-micro)/1.65 var(--font-b);letter-spacing:.01em;color:var(--muted)}

/* The intro heading between the hero and the list is gone, so the section keeps
   only enough room for .sec-top to breathe. 125px of section padding plus the
   intro's own 64px was most of a screen before the first record. */
.publications-page .detail-section{padding-top:52px}
.publications-page .publication-list{margin-top:32px}

@media (max-width:680px){
  .publications-page .detail-section{padding-top:36px}
  .publications-page .publication-list{margin-top:24px}
  .publication-authors{max-width:none}
}

/* ================= Pipeline CTA rail (2026-08) =================
   The hero's pipeline button carried the same generic → as the contact button
   beside it. It now carries five segments — one per stage in the real table,
   TARGET ID through LEAD ID — two lit at rest and filling to the end on hover,
   so the affordance states what it leads to instead of merely that it leads
   somewhere. currentColor, so it inverts correctly on .btn-primary's light face
   and on .btn-ghost without a second rule. */
.btn-pipe{display:inline-flex;align-items:center;gap:3px;margin-left:3px}
.btn-pipe i{width:9px;height:2px;background:currentColor;opacity:.2;
  transform-origin:left;
  transition:opacity .3s var(--ease),transform .3s var(--ease)}
/* At rest the rail reads as a pipeline in progress rather than an empty track:
   two stages behind, three ahead — which is where most of the portfolio sits. */
.btn-pipe i:nth-child(1),.btn-pipe i:nth-child(2){opacity:.9}
/* The stagger is the whole point — the light travels, it does not just switch on. */
.btn:hover .btn-pipe i,.btn:focus-visible .btn-pipe i{opacity:.9}
.btn:hover .btn-pipe i:nth-child(3),.btn:focus-visible .btn-pipe i:nth-child(3){transition-delay:.06s}
.btn:hover .btn-pipe i:nth-child(4),.btn:focus-visible .btn-pipe i:nth-child(4){transition-delay:.12s}
.btn:hover .btn-pipe i:nth-child(5),.btn:focus-visible .btn-pipe i:nth-child(5){transition-delay:.18s;transform:scaleX(1.55)}

@media (prefers-reduced-motion:reduce){
  .btn-pipe i{transition:none}
  .btn:hover .btn-pipe i,.btn:focus-visible .btn-pipe i{transition-delay:0s}
  .btn:hover .btn-pipe i:nth-child(5),.btn:focus-visible .btn-pipe i:nth-child(5){transform:none}
}

/* ================= Site index tiles (2026-08) =================
   The index tiles used to carry a big number in the <strong> slot — the same
   ~1B / 8+ / 07 the proof strip states forty lines above, which made this block
   a second copy of that one. They now carry what each page answers, so the slot
   holds a phrase rather than a figure: solid text at a readable size instead of
   2.65rem gradient-clipped numerals, which would wrap to three lines in a 270px
   column and break the tile's 178px floor.
   Scoped with .is-index because /about/ and /jp/ use .evidence-ledger-grid for
   the evidence ledger, where a number in that slot is exactly right. */
.evidence-ledger-grid.is-index strong{
  font:500 1.4rem/1.25 var(--font-d);letter-spacing:-.015em;margin:24px 0 10px;
  background:none;-webkit-background-clip:border-box;background-clip:border-box;
  -webkit-text-fill-color:currentColor;color:var(--text)}
.evidence-ledger-grid.is-index p{padding-right:20px}

@media (max-width:1080px){
  .evidence-ledger-grid.is-index strong{font-size:1.32rem;margin-top:22px}
}

/* ================= Phone workflow diagram, mastered (2026-08) =================
   The mastering pass at :1169 re-toned .workflow-mobile-stage's own border and
   background but not its children, so the phone-only diagram kept the
   pre-mastering neon — rgba(83,238,219) connectors, rgba(92,239,222) node rings,
   #8b7bff validate dots — while every desktop figure beside it had moved to the
   desaturated ramp. Below 860px it was the one loud thing on the page.
   Re-toned onto the same tokens the rest of the site uses: --mint for the
   connector and node, --violet for the validate marker, --amber for the hit. */
@media (max-width:860px){
  .workflow-mobile-stage:not(:last-child)::after{
    background:linear-gradient(rgba(167,203,196,.6),rgba(170,167,181,.34));
    box-shadow:0 0 7px rgba(167,203,196,.22)}
  .workflow-mobile-stage i{
    border-color:rgba(167,203,196,.26);
    background:radial-gradient(circle,rgba(167,203,196,.13),rgba(170,167,181,.05) 56%,transparent 72%)}
  .workflow-mobile-stage i::before,
  .workflow-mobile-stage i::after{border-color:rgba(224,236,234,.5)}
  .workflow-mobile-stage.map i::before{
    background:repeating-linear-gradient(90deg,transparent 0 5px,rgba(167,203,196,.34) 5px 6px),
               repeating-linear-gradient(0deg,transparent 0 5px,rgba(167,203,196,.26) 5px 6px)}
  .workflow-mobile-stage.map i::after,
  .workflow-mobile-stage.hit i::after{
    background:var(--amber);border-color:rgba(240,222,186,.8);box-shadow:0 0 7px rgba(226,194,139,.5)}
  .workflow-mobile-stage.site i::before{
    background:repeating-linear-gradient(90deg,rgba(167,203,196,.55) 0 2px,transparent 2px 6px)}
  .workflow-mobile-stage.validate i::after{background:var(--violet)}
}

/* ================= Flare theme: ice → turquoise → gold =================
   2026-08 会議の第2案。基準は .proof-signal i（1084）の閃光グラデーション
   ice → cyan → gold。この cyan の座席にブランドカラー #00CED1 を入れた
     FLARE = ice #f0f3f3 → turquoise #00CED1 → aperture gold #e4c58d
   を唯一の主題グラデーションとし、方向を持つ要素すべてに同じ順序で敷く。
   順序に意味がある：光（ice）が走り、ブランド（turq）が運び、決定（gold）
   で終わる。単色の差し色に見えた前案と違い、既存の金の文法を壊さない。
   単色で使う場面（hover / focus / selection / s-idx）は turq のまま。
   current-page マーカーは --mint 据え置き（状態≠反応）。
   実測（WCAG）: #00CED1 on --bg 10.36:1 / on #111920 9.08:1 /
   ボタン文字 #07090c on #00CED1 10.20:1 / --grad 中間停止 #5fd9db は
   #00CED1 より明るく全停止 AA クリア。
   このブロックはカスケード最終層。丸ごと削除で 6f69c1f の見た目に戻る。 */
:root{
  --turq:#00CED1;
  /* 2026-08 色調整パス：純色 #00CED1（彩度100%）は細線と小さいモノ組専用。
     大きい文字の hover は彩度を七割に焼きなました --turq-soft が受ける。
     面積が大きいほど彩度を落とす——パレット内で唯一の「生の色」だった
     turq の彩度断崖（他アクセントは 1〜38%）をなだらかにするため。 */
  --turq-soft:#3fd4d6;
  /* FLARE の終端金。--aperture #e4c58d は L*80.9 で中間の turq（75.3）より
     明るく、「決定で着地する」はずの終点が浮いていた。グラデ停止色だけ
     L*≈70 のこの色に落とし、ice 96 → turq 75 → gold 70 の単調な沈み込みに
     する。テキストとして使う --aperture 自体は据え置き。 */
  --gold-deep:#caa45c;
  --turq-glow:rgba(0,206,209,.2);
  --turq-wash:rgba(0,206,209,.03);
  --cool-glow:rgba(0,206,209,.16);
  /* 見出しのグラデ文字（druggable. / yours.）。112deg なので左上=光、
     右下=金、中間の灰紫 #b9b5c0 を turquoise に差し替え。終端も明度の
     旋律に合わせて一段深い金へ（95.6 → ~89 → 80.3 → ~73 と単調に沈む） */
  --grad:linear-gradient(112deg,#f1f4f4 0%,#aee8e9 42%,#5fd9db 70%,#d2ad69 100%);
  /* hero のフラッシュ（main.js resolveHeroFlash：中心ダイヤの色ビーム lgB と
     アームのグリント）が読む同期トークン。文字アトラスはもう読まない —
     1万2千字に混ざった turq は濁って見えたため、色は光にだけ流す（2026-08）。
     このブロックごと消えればフラッシュは旧の銀青 180,208,210 に自動で戻る。
     検証は tests/hero-flare-sync.test.html。 */
  --hero-flare-tint:var(--turq);
}
::selection{background:rgba(0,206,209,.3);color:#fff}
::-webkit-scrollbar-thumb{background:#14444a;border:2px solid var(--bg)}
:focus-visible{outline-color:var(--turq)}
.technology-console-tab:focus-visible{outline-color:var(--turq)}
#glow{background:radial-gradient(circle,rgba(0,206,209,.07) 0%,rgba(0,206,209,0) 62%)}

/* ---- 主題：閃光そのもの。基準要素にもターコイズを通す。
        終端金は全て --gold-deep：明度が 96→75→70 と沈んで着地する ---- */
.proof-signal i{background:linear-gradient(90deg,transparent,var(--ice),var(--turq),var(--gold-deep),transparent);
  filter:drop-shadow(0 0 6px rgba(0,206,209,.5))}
.proof-signal span{border-color:rgba(0,206,209,.42);box-shadow:0 0 10px rgba(0,206,209,.16)}

/* ---- FLARE を方向要素へ。1213 の一括セレクタと同じ組で上書き ---- */
.section-orbit,#proof::after,#pipeline::after,#validation::after,.asset-halo,.sec-top::after,.engine-stage-grid article::before,.value-lane::after,.pipeline-card::after,.asset-profile::before,.assay-principle-copy::after,.detail-hero-field i{background:linear-gradient(100deg,#f0f3f3 0%,#9fe7e8 46%,var(--turq) 76%,var(--gold-deep) 100%)}
#progress{background:linear-gradient(90deg,#f0f3f3 0%,var(--turq) 72%,var(--gold-deep) 100%);box-shadow:0 0 8px rgba(0,206,209,.3)}
.matrix-scan{background:linear-gradient(90deg,transparent,#f0f3f3,var(--turq),rgba(202,164,92,.6),transparent);box-shadow:0 0 12px var(--turq-glow)}
.science-step.active::after{background:linear-gradient(var(--ice),var(--turq),transparent);box-shadow:0 0 18px var(--turq-glow)}
.sec-top::before{background:linear-gradient(90deg,rgba(240,243,243,.5),rgba(0,206,209,.32) 12%,rgba(0,206,209,.1) 26%,var(--line2) 46%,var(--hair) 100%)}

/* ---- 単色ターコイズ二段構え：純色は細線・小さいモノ組（s-idx、focus、
        selection、＋ボタン）に残し、大きい文字の hover は --turq-soft ---- */
.sec-top .s-idx{color:var(--turq)!important} /* 1193 の !important に勝つ */
.nav-links a:hover{color:var(--turq-soft)}
.nav-item:hover>.nav-top,.nav-item.open>.nav-top{color:var(--turq-soft)}
.nav-panel a:hover b{color:var(--turq-soft)}
.text-link:hover,.foot-links a:hover,.back-top:hover,.breadcrumb a:hover,
.platform-detail-card a:hover,.section-deep-link:hover{color:var(--turq-soft)}
.lang-switch button:hover,.lang-switch a:hover{color:var(--turq-soft)}
/* 緻密さ：ヒーローの field は無数の AUGC でできている。ボタンも同じ素材から
   切り出す — AUGC のマイクロ組版（SVG タイル、システムモノ、6〜9px、
   不透明度 .08〜.14）を面の最上層に敷く。テキストの下に沈む背景テクスチャ
   なので、ラベル #07090c のコントラストへの影響は 1% 未満。 */
:root{--augc-tile:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='128' height='64' font-family='Menlo,Consolas,monospace'%3E%3Cg fill='%2307090c'%3E%3Ctext x='6' y='12' font-size='8' opacity='.14'%3EG%3C/text%3E%3Ctext x='34' y='9' font-size='6' opacity='.09'%3EA%20U%3C/text%3E%3Ctext x='58' y='16' font-size='9' opacity='.12'%3EC%3C/text%3E%3Ctext x='86' y='11' font-size='6' opacity='.10'%3EG%20C%3C/text%3E%3Ctext x='112' y='18' font-size='7' opacity='.08'%3EU%3C/text%3E%3Ctext x='16' y='28' font-size='6' opacity='.10'%3EC%20G%20A%3C/text%3E%3Ctext x='70' y='30' font-size='8' opacity='.13'%3EA%3C/text%3E%3Ctext x='98' y='27' font-size='6' opacity='.09'%3EU%20A%3C/text%3E%3Ctext x='6' y='44' font-size='7' opacity='.11'%3EU%20G%3C/text%3E%3Ctext x='44' y='47' font-size='9' opacity='.09'%3EG%3C/text%3E%3Ctext x='78' y='42' font-size='6' opacity='.12'%3EC%20U%3C/text%3E%3Ctext x='108' y='49' font-size='8' opacity='.10'%3EA%3C/text%3E%3Ctext x='24' y='60' font-size='6' opacity='.08'%3EA%20C%3C/text%3E%3Ctext x='60' y='58' font-size='7' opacity='.12'%3EU%3C/text%3E%3Ctext x='92' y='61' font-size='6' opacity='.10'%3EG%20A%3C/text%3E%3C/g%3E%3C/svg%3E")}
/* 静止時：銀の面にも同じ粒子。素材の連続性は hover の前から始まっている */
.btn-primary{background:var(--augc-tile) 0 0/128px 64px repeat,linear-gradient(135deg,#f2f4f4,#d7dfe0)}
/* hover の FLARE は気配に留める：面はほぼ光のまま、ターコイズと金は
   淡い染みとして通過する（全停止 L*90 前後）。輪郭の turq と glow が
   ブランドを言い、面は言い過ぎない。 */
.btn-primary:hover{background:var(--augc-tile) 0 0/128px 64px repeat,linear-gradient(112deg,#f4f7f7 0%,#dcf3f4 42%,#c9edee 68%,#eadfc2 100%);border-color:var(--turq);
  box-shadow:0 0 26px rgba(0,206,209,.22)}
.btn-ghost:hover{border-color:rgba(0,206,209,.5);color:#8ceaec;background:rgba(0,206,209,.03)}
#mobile-menu>a:last-of-type{color:var(--turq-soft)} /* 276 の mint CTA を FLARE 系へ */

/* ---- 現在地は色相ではなく構造で示す：ice の文字＋turq の下線／左罫。
        hover=色が変わる・current=線が付く、で色覚に依存しない。
        854/1392/1432/1491 の mint マーカーはここで引退する ---- */
.nav-item.is-current>.nav-top{color:var(--ice)}
.nav-item.is-current>.nav-top>span:last-child{background:linear-gradient(var(--turq),var(--turq)) 0 100%/100% 2px no-repeat;padding-bottom:4px}
.nav-panel a[aria-current="page"] b{color:var(--ice);background:linear-gradient(var(--turq),var(--turq)) 0 100%/100% 2px no-repeat;padding-bottom:3px}
#mobile-menu a[aria-current="page"]{color:var(--ice)}
#mobile-menu a[aria-current="page"]>span{background:linear-gradient(var(--turq),var(--turq)) 0 100%/100% 2px no-repeat;padding-bottom:4px}
#mobile-menu .mobile-sub a[aria-current="page"]{color:var(--ice);box-shadow:inset 2px 0 var(--turq);padding-left:12px}
.lang-switch a[aria-current="page"]{color:var(--ice);background:linear-gradient(var(--turq),var(--turq)) 0 100%/100% 1px no-repeat;padding-bottom:2px}
.mobile-lang a[aria-current="page"]{color:var(--ice);box-shadow:inset 0 -2px var(--turq)}
.detail-page .mobile-lang a[aria-current="page"]{color:var(--ice);border-color:rgba(0,206,209,.5)}
.mobile-lang button[aria-pressed="true"]{color:var(--ice);border-color:rgba(0,206,209,.5)}

/* ---- 行 hover の面 ---- */
.news-item:hover,.milestone-item:hover{background:var(--turq-wash)}
.publication-card:hover,.partner-card:hover{background:rgba(0,206,209,.02)}
.proof-nav .proof-metric:hover{border-color:rgba(0,206,209,.22)}

/* ---- 全面展開：FLARE を常時見える面へ ----
   閃光は proof の帯にしか出なかった。同じ「地平線」を、サイトに常駐する
   2つの水平線 — ナビ下端・フッター上端 — に立てる。
   border-image は 1px の solid ボーダーの塗りだけ差し替えるので
   レイアウトに影響しない。 */
.logo .brand-mark{background:linear-gradient(135deg,var(--ice),var(--turq) 50%,#dfb87a)}
.logo b{color:var(--turq)}
nav.scrolled{border-image:linear-gradient(90deg,rgba(240,243,243,.22),rgba(0,206,209,.3) 26%,rgba(0,206,209,.12) 55%,rgba(202,164,92,.24) 92%,transparent) 1}
footer{border-image:linear-gradient(90deg,transparent,rgba(0,206,209,.28) 22%,rgba(240,243,243,.34) 50%,rgba(202,164,92,.3) 78%,transparent) 1}
/* ヒーロー：バッジの点・注記・SCROLL の垂線もブランドの色で入場する */
#hero .badge::before{background:var(--turq);box-shadow:0 0 18px rgba(0,206,209,.6)}
.badge b{color:var(--turq)}
.scroll-cue::after{background:linear-gradient(180deg,var(--turq),transparent)}
/* proof カード hover の内光：ミント残りを turq に置換（1081 と同じ組） */
.proof-nav .proof-metric::before{background:radial-gradient(circle at 74% 12%,rgba(228,197,141,.065),transparent 28%),linear-gradient(120deg,transparent 46%,rgba(0,206,209,.05),transparent 64%)}

/* ---- 掃討パス：マスタリング（1067〜）に拾われず生き残っていた旧ミント緑
        rgba(92,242,192) 系の面・点・線を FLARE 文法へ揃える。割り当ては
        既存の三層文法のまま — 生きている信号＝turq、ヒットと決定＝amber、
        選ばれた面＝turq の面、環境光＝turq の弱いラジアル ---- */
.system-status i,.pipeline-note i{background:var(--turq);box-shadow:0 0 12px rgba(0,206,209,.6)}
.matrix-system::before{background:radial-gradient(circle at 50% 38%,rgba(0,206,209,.06),transparent 38%)}
.matrix-cell.high{background:var(--aperture);box-shadow:0 0 13px rgba(228,197,141,.5)}   /* ヒット＝決定＝金 */
.output-node.hot::before{background:var(--aperture);border-color:var(--aperture);box-shadow:0 0 18px var(--warm-glow)}
.mini-matrix rect.mid{fill:rgba(0,206,209,.3)}.mini-matrix rect.hit{fill:var(--aperture)}
.pipeline-group{background:rgba(0,206,209,.028)}
.advantage-metric{background:radial-gradient(circle at 50% 55%,rgba(0,206,209,.07),transparent 54%)}
.scale-rail i{background:linear-gradient(180deg,rgba(0,206,209,.5),rgba(0,206,209,.04));border-top:1px solid var(--turq-soft)}
.validation-signal i{background:linear-gradient(90deg,var(--hair),rgba(0,206,209,.4),var(--hair))}
.company-facts{background:radial-gradient(circle at 80% 20%,rgba(0,206,209,.055),transparent 30%),linear-gradient(135deg,rgba(255,255,255,.015),transparent)}
.detail-hero::before{background:radial-gradient(circle at 75% 42%,rgba(0,206,209,.07),transparent 23%),radial-gradient(circle at 18% 20%,rgba(0,206,209,.045),transparent 30%),linear-gradient(var(--hair) 1px,transparent 1px),linear-gradient(90deg,var(--hair) 1px,transparent 1px);background-size:auto,auto,80px 80px,80px 80px}
.detail-hero-field i{border-color:rgba(0,206,209,.11)}
.publication-field>span:nth-child(4){color:rgba(0,206,209,.04)}
.section-deep-link:hover{background:var(--turq-wash)}
.science-reference:hover{background:var(--turq-wash)}

/* ---- 選ばれた面：選択状態の面は灰色ではなく turq の面で答える ---- */
.science-step.active{background:linear-gradient(110deg,rgba(0,206,209,.055),transparent)}
.technology-console-tab.is-active{background:linear-gradient(90deg,rgba(0,206,209,.06),rgba(202,164,92,.015))}
.technology-console-tab::before{background:linear-gradient(var(--ice),var(--turq),var(--gold-deep));box-shadow:0 0 10px rgba(0,206,209,.3)}
.news-chip.is-on{color:var(--ice);border-color:rgba(0,206,209,.55);background:rgba(0,206,209,.06)}
.news-chip:hover{color:var(--turq-soft);border-color:rgba(0,206,209,.45);background:rgba(0,206,209,.03)}

/* ---- mint の完全引退：残っていたコンテンツラベルと番号を FLARE 系へ ---- */
.officer-dept{color:var(--turq-soft)}
.fact-coord{color:var(--turq-soft)}
.article-meta{color:var(--turq-soft)}                                  /* 448 */
.publication-index>span:first-child,.partner-index>span:first-child{color:var(--turq-soft)}  /* 718 */
::-webkit-scrollbar-thumb:hover{background:#1a565c}

/* ---- P3 広色域：対応ディスプレイだけブランド色をガモット外へ押し出す。
        sRGB 環境はこのブロックを読まず現状のまま。字幕アトラス（canvas）は
        sRGB で描くため、--hero-flare-tint だけ sRGB 値に固定し直す —
        tests/hero-flare-sync.test.html はこの固定を含めて検証する ---- */
@supports (color: color(display-p3 0 0 0)){
  :root{
    --turq:color(display-p3 .05 .8 .82);
    --turq-soft:color(display-p3 .33 .83 .84);
    --gold-deep:color(display-p3 .77 .65 .38);
    --hero-flare-tint:#00CED1;
  }
}

/* ================= Mobile submenu disclosure =================
   2026-08 会議: モバイルメニューの下層リンクを常時展開からトグル展開へ。
   サブ行が積もって 6 セクションが小さい端末の 1 画面に収まらなくなったため。
   行そのものはリンクのまま — 開閉は右端の + （実 <button>）だけが受け持つ。
   マークアップと状態（[hidden] / aria-expanded）は site-nav.js renderMobile。
   flare ブロックとは独立：テーマを廃止してもこの構造は残る。--turq には
   フォールバックを置いてあるので、flare 側を消してもここは壊れない。 */
#mobile-menu .mobile-row{display:flex;align-items:stretch;border-bottom:1px solid var(--hair)}
/* 172 の #mobile-menu a が付ける行下線は .mobile-row が引き継ぐ */
#mobile-menu .mobile-row a{flex:1;border-bottom:0}
#mobile-menu .mobile-disclose{appearance:none;background:none;border:0;border-left:1px solid var(--hair);
  width:58px;margin:9px 0;display:flex;align-items:center;justify-content:center;cursor:pointer;
  color:var(--dim);font:300 22px/1 var(--font-m);padding:0}
#mobile-menu .mobile-disclose::before{content:"+";display:block;transition:transform .35s var(--ease)}
#mobile-menu .mobile-disclose[aria-expanded="true"]{color:var(--turq,#b4d0d2)}
#mobile-menu .mobile-disclose[aria-expanded="true"]::before{transform:rotate(45deg)}
/* 開いたグループは 1488 の .mobile-sub 下線が閉じるので、行側の下線は引っ込む */
#mobile-menu .mobile-row:has(+ .mobile-sub:not([hidden])){border-bottom:0}
#mobile-menu .mobile-sub[hidden]{display:none}
#mobile-menu .mobile-sub:not([hidden]){animation:mobileSubIn .3s var(--ease)}
@keyframes mobileSubIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){#mobile-menu .mobile-sub:not([hidden]){animation:none}}

/* ================= Art direction: light performs =================
   2026-08 仕上げパス。色は既に文法を持った。ここからは光の「演技」と
   紙面の職人技 — 世界水準のサイトが持つ「署名的な一瞬」を FLARE で作る。
   3楽章：①光の演出（見出しを一度だけ横切る閃光、CTA を通過する光）
   ②タイポの磨き（行の重心、数字の桁揃え、和文のツメ組み）
   ③空間の素材（ヴィネットで中心へ視線を集め、カードの縁に冷光）。
   flare ブロックとは独立に削除できる。動きは全て prefers-reduced-motion
   で消灯し、一度きり・短く・二度と繰り返さない（品位は反復しないこと）。 */

/* ---- ① 見出しの閃光：グラデ文字の上を光が一度だけ走る。
        ヒーローは boot 後、CTA の「yours.」はスクロールで現れた時 ---- */
.js .acc-grad{
  background-image:linear-gradient(100deg,transparent 44%,rgba(255,255,255,.9) 50%,rgba(127,231,233,.55) 53%,transparent 60%),var(--grad);
  background-size:220% 100%,100% 100%;
  background-position:-180% 0,0 0;
  background-repeat:no-repeat;
  -webkit-background-clip:text;background-clip:text;color:transparent}
.js body.loaded #hero .acc-grad,.js .reveal-lines.in .acc-grad{animation:accLightPass 1.5s var(--ease) .95s 1}
@keyframes accLightPass{from{background-position:-180% 0,0 0}to{background-position:300% 0,0 0}}

/* ---- ① CTA を通過する光：hover の瞬間、ボタンの面を閃光が一度通る。
        clip-path（149）がボタン形状に刈り込むので overflow は要らない ---- */
.btn-primary::after{content:"";position:absolute;top:0;bottom:0;left:-45%;width:36%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);
  transform:skewX(-18deg);opacity:0;pointer-events:none}
.btn-primary:hover::after{animation:btnLightPass .65s var(--ease)}
@keyframes btnLightPass{0%{left:-45%;opacity:0}25%{opacity:1}100%{left:112%;opacity:0}}

/* ---- ② タイポの磨き：行の重心と数字の桁 ---- */
h1,h2,h3{text-wrap:balance}
.lead,.lead-stack p,.publication-summary,.science-step p{text-wrap:pretty}
/* 実測数字は桁が揃ってこそ証拠になる（Inter / Space Grotesk の tnum） */
.proof-value,.asset-evidence strong,.advantage-metric strong,.pipeline-row,.publication-index,.milestone-date{font-feature-settings:"tnum" 1}
/* 和文見出しはツメ組み（palt）＋わずかな追い込み。本文は可読性優先で触らない */
html[lang="ja"] h1,html[lang="ja"] h2,html[lang="ja"] h3{font-feature-settings:"palt" 1;letter-spacing:.03em}
/* 禁則。既定の line-break:auto は長音符「ー」や小書き仮名を行頭に置いてしまう
   （「パートナ／ーシップ」）。折り返す場所そのものは許したまま、置いてはいけない
   文字だけを止める。ナビのパネルとフッターの列は狭い中間幅への保険。 */
html[lang="ja"] h1,html[lang="ja"] h2,html[lang="ja"] h3,
html[lang="ja"] .foot-links a,html[lang="ja"] .nav-panel b,
html[lang="ja"] .hub-index-grid p{line-break:strict}
/* 和文は分かち書きしないので、text-wrap:balance は行長だけを見て「転写産物」の
   ようなひとまとまりの語を割ってしまう（「一つの構造要素が転／写産物全体を動か
   す」）。auto-phrase は文節の切れ目にだけ改行位置を許すので、balance と併せて
   長さの釣り合いを保ったまま語の途中で切れなくなる。未対応のブラウザは無視する
   だけで、今までどおりの折り返しに戻る。 */
html[lang="ja"] .moa-target-principles h3{word-break:auto-phrase}
/* <br> で段組みした和文見出しだけ、balance ではなく pretty で組む。
   balance は <br> で区切られた段ごとに効いている（main では MoA の CTA の平段が
   5+5 に組まれ、貪欲改行なら 6+4 になる）。ただし同じ見出しで text-wrap-style を
   auto に替えても壊れ方は同一だったので、箱に入る字数と語長の余りがちょうど 1 の
   とき行末に 1 文字だけ残る（「る」「く」「ム」「す」）原因は balance ではない。
   pretty は最終行が短くなるのを避けるアルゴリズムなので、この欠陥には直接効く。
   :has(br) を採る理由は実測で、この選択子は欠陥の出た見出しをちょうど選び、
   pretty を掛けると 4 件が 4 件とも解消して行数の増えた見出しは 0。全和文見出しへ
   広げる案は測って悪化した（1 文字だけの行 1→2、「量を変える」が「量を変」＋
   「える」に割れた）。2321 の balance は全見出しにそのまま残る。
   全 56 ページ×7 幅で実測：1 文字だけの行 4→0、新たな 1 文字の行 0、
   行数の増加 0、要素幅の変化 0。未対応のブラウザは値を捨てて balance のまま。 */
html[lang="ja"] :is(h1,h2,h3,h4,h5,h6):has(br){text-wrap:pretty}

/* ---- ③ 空間の素材：ヴィネットが中心へ視線を集める。grain（83, z95）の
        すぐ下、nav（z100）とカーソル光（z1）の間 ---- */
body::before{content:"";position:fixed;inset:0;z-index:94;pointer-events:none;
  background:radial-gradient(ellipse at 50% 40%,transparent 62%,rgba(2,3,6,.42) 120%)}
/* カードの縁の冷光：持ち上がる瞬間、上辺のハイライトがわずかに FLARE を帯びる */
@media(hover:hover){
  .tech-card:hover,.evidence-ledger-grid>a:hover,.publication-card:hover,.partner-card:hover{
    box-shadow:inset 0 1px rgba(127,231,233,.16),0 24px 70px rgba(0,0,0,.24),0 0 32px rgba(0,206,209,.035)}
}
/* 1032 のモバイル proofbar 罫線に残っていた旧ティールも FLARE へ */
@media(max-width:680px){.advantage-proofbar article{border-bottom-color:rgba(0,206,209,.14)}}
/* フォーカスリングは 2px：キーボードの現在地は誰にでも見える太さで */
:focus-visible{outline-width:2px}

@media(prefers-reduced-motion:reduce){
  .js body.loaded #hero .acc-grad,.js .reveal-lines.in .acc-grad,.btn-primary:hover::after{animation:none}
}

/* ================= News ticker =================
   2026-08 改：カテゴリタグの単一バンド（右→左）。対向流の2バンド構成は
   同一タグ列の重複表示に見えるため不採用。年タグの下段も試したが不採用 —
   年は索引であってタグではない。全タグが /news/?cat= への実リンクで、
   buildNewsFilter がチップを押した状態で開く（?year= も旧リンクのために
   生かしてある）— 飾りではなく航法。見出しの帯は不採用（流れる長文は
   半分しか読めず雑音、実体は下の3枚のティーザーが担う）。トラックは
   同一チャンク2つを translateX(-50%) で回す。hover / フォーカスで停止、
   prefers-reduced-motion では静止。 */
.news-ticker{margin:34px 0 30px;border-top:1px solid var(--hair);border-bottom:1px solid var(--hair)}
.ticker-band{overflow:hidden;white-space:nowrap;padding:16px 0;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7% 93%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 7% 93%,transparent)}
.ticker-track{display:inline-flex;will-change:transform;animation:tickerDrift 48s linear infinite}
.ticker-band:hover .ticker-track,.ticker-band:focus-within .ticker-track{animation-play-state:paused}
@keyframes tickerDrift{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.ticker-chunk{display:inline-flex;align-items:baseline;gap:44px;padding-right:44px}
.ticker-tag{font:500 var(--fs-micro) var(--font-m);letter-spacing:.16em;color:var(--muted);transition:color .25s}
.ticker-tag b{color:var(--turq-soft);font-weight:500;margin-right:1px}
.ticker-tag:hover,.ticker-tag:focus-visible{color:var(--turq-soft)}
@media(prefers-reduced-motion:reduce){.ticker-track{animation:none!important}}

/* ================= Footer as the tab map =================
   2026-08: フッターは NAV から生成されるサイトマップになった（site-nav.js
   renderFooter）。5タブ＋CONNECT の6カラムはロゴ横の 1.25fr には収まらない
   ので、509 の 2カラムを解いてロゴを上、地図を全幅に置く。タグラインが
   消えてブランド欄がロゴ1個になった今、縦積みのほうが素直でもある。 */
.foot-top{grid-template-columns:1fr;gap:52px;padding:64px 0 56px}
.foot-links{grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:30px 26px}
/* 587 の 2カラム固定と last-child の全幅指定は auto-fit の邪魔になるので解除 */
@media(max-width:900px){
  .foot-links{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
  .foot-links>div:last-child{grid-column:auto}
}
@media(max-width:560px){.foot-links{grid-template-columns:1fr 1fr}}

/* ================= News cue =================
   汎用 SCROLL キューの後継（2026-08）。行き先を名指しし（LATEST NEWS＋
   最新リリースの日付、detail.js renderNewsTicker が埋める）、ターコイズの
   滴が細い線を伝って落ち続ける — 光を追えばワイヤーに着く、という FLARE
   文法の誘導。全体が #news へのアンカー。 */
/* センタリングは left/right+margin:auto で行う。translateX(-50%) だと
   .fx のリベール（transform を書き換える）に負けて右へずれる。 */
.news-cue{position:absolute;left:0;right:0;bottom:20px;margin:0 auto;width:max-content;z-index:2;
  display:flex;flex-direction:column;align-items:center;gap:12px;
  font:500 var(--fs-nano) var(--font-m);letter-spacing:.22em;color:var(--dim);transition:color .3s}
.news-cue b{font-weight:500;color:var(--turq)}
.news-cue:hover,.news-cue:focus-visible{color:var(--turq-soft)}
.news-cue i{position:relative;width:1px;height:44px;background:rgba(0,206,209,.16);overflow:hidden}
.news-cue i::after{content:"";position:absolute;left:0;top:-45%;width:100%;height:45%;
  background:linear-gradient(180deg,transparent,var(--turq));
  animation:newsCueDrip 2.4s cubic-bezier(.45,0,.55,1) infinite}
@keyframes newsCueDrip{to{top:115%}}
@media(prefers-reduced-motion:reduce){
  .news-cue i::after{animation:none;top:55%}
}

/* ================= Hero copy protection =================
   2026-08 の顛末を記録しておく。①本文が核の閃光と交差して読みにくい、
   という指摘に対し、保護の肩を本文右端（72%）まで運ぶ強化スクリムを
   #hero::after に敷いた。②ところがオブジェクト（glyph field）が沈んで
   主役が死ぬ、という次のレビューで強化版は撤回。スクリムは 195 の元の
   弱い版（.62 → .26 → 58% で透明）に戻し、読みやすさは文字側の三点 —
   遠く柔らかい影・一段明るい本文・バッジ類の淡い暈 — だけで支える。
   近接の締め影は禁止：細いグリフ（druggable. のイタリック）の縁に暈が
   回り込んで字面が曇る。なお 917〜921 の [data-hero-ui] スクリム群は
   b9c4b91 以来死んでいる別物なので触っていない。 */
.hero-copy h1{text-shadow:0 2px 26px rgba(5,6,11,.5)}
/* 測りは 40ch：本文がダイヤモンド（横位置 50〜64% に浮かぶ）へ届かない
   幅に絞る。ch はフォント追随なので画面幅にも文字サイズ切替（S/M/L）にも
   自動で応じる。文章を消す案・下へ移す案は不採用 — TOP 簡素化後、会社を
   説明する文はページ上これだけで、位置の秩序（badge→h1→sub→CTA）も
   崩したくない。 */
.hero-sub{color:#c3ccd5;text-shadow:0 1px 14px rgba(5,6,11,.65);max-width:40ch}
/* 中間幅ではダイヤが相対的に左へ寄ってくるので、測りをもう一段絞る。
   680px 以下は元々スタック＋モバイル用グラデの管轄。 */
@media(max-width:1100px){.hero-sub{max-width:34ch}}
.hero-note,#hero .badge{text-shadow:0 1px 12px rgba(5,6,11,.65)}

/* ================= Pipeline, minimal =================
   2026-08: 表は「各プログラムがどこまで来たか」だけを言う。STATUS · NEXT
   列・LEAD ID の目標日チップ・TARGET ID 段は撤去（標的同定は定義上全行が
   点灯する — 常に点いている列は情報ではなく家具）。4段構成の採番は
   site-data.js の stage が直接持つ。 */
.pipeline-head span:last-child,.pipeline-row .pipeline-cell:last-child{border-right:0}

/* パイプラインのバーは hero の閃光と同じ光学（2026-08）：深いターコイズから
   ブランドの aqua を通って、進行の先端が白熱で終わる — 這うライトの
   「白い頭＋ターコイズの尾」を進捗バーとして言い直したもの。エンジン別の
   violet / blue / indigo は色の飾りとしては引退（行の区別は表の中身が語る）。 */
.pipeline-row,.pipeline-row.violet,.pipeline-row.blue,.pipeline-row.indigo{
  --pipeline-deep:#0f6f72;
  --pipeline-mid:#3fd4d6;
  --pipeline-hot:#eef8f8;
  --pipeline-glow:rgba(0,206,209,.3)}
.pipeline-card,.pipeline-card.violet,.pipeline-card.blue,.pipeline-card.indigo{
  --card-hot:#7fe7e9;--card-mid:#0f8f93}
/* 未到達ステージの薄いレール（419 の --hair 線）は廃止（2026-08）。行の
   高さが違うと隣の行と線の高さがずれ、LEAD ID 列に「経路が2通りあるのか」
   と読める偽の平行線が生まれていた。バーは現在地のリングで終わり、その先は
   何も描かない — 進捗は線の長さだけが語る。 */
.stage-cell:not(.active)::after{display:none}

/* MoA 列（2026-08）：売りなので列で立てるが、値は当面 Undisclosed —
   開示はプログラム単位で site-data.js に moa を書けば置き換わる設計。
   非開示の行は控えめに（--dim）、開示された行だけが自然に浮く。 */
.pipeline-cell.moa{font:500 var(--fs-nano)/1.4 var(--font-m);letter-spacing:.08em;color:var(--dim);text-transform:uppercase}
/* バーは計器面の左端（MoA 境界罫の直後）から発進する（2026-08）。
   「最初のステージの中央から」という旧作法（420）は、MoA 列の追加で
   nth-child(3) が .stage-cell に当たらなくなったのを機に廃止 —
   419 の既定 left:0 に任せる。 */
.pipeline-card-moa{padding:12px 22px 0;font:500 var(--fs-nano)/1.4 var(--font-m);letter-spacing:.1em;color:var(--dim);text-transform:uppercase}

/* MoA 列の強調罫は右側だけ（2026-08 レビュー：両側だと枠が箱に見える）。
   この一本が「読む情報ここまで／見る情報ここから」の境界線を兼ねる */
.pipeline-cell.moa,.pipeline-head span:nth-child(3){border-right-color:rgba(0,206,209,.32)}
/* 提携テーブルの4列目（ステージ）は .moa クラスを共有しているため上の
   ターコイズ罫も継いでいるが、発表列が増えるまでは :last-child の
   border-right:0（2781）に隠れていて見えていなかった。提携テーブルに計器面は
   無く、この罫が兼ねる「読む／見る」の境界も存在しないので、ステージと発表の
   間は通常の --hair に戻す。ヘッダー側は nth-child(3) だけが対象で元から
   --hair なので、これで本文とヘッダーの罫が揃う。 */
.collab-table .pipeline-cell:nth-child(4){border-right-color:var(--hair)}

/* 属性とステージを「面」で分ける（2026-08）：PROGRAM / TARGET CLASS / MoA は
   リスト面のまま、HTS→LEAD ID の4列はひとつの沈んだ計器面として続く —
   内部の縦罫は消し、軌道と現在地のリングだけが走る。境界は MoA 右端の
   ブランド罫（既設）が兼ねる。ヘッダのステージ名はティール寄りの灰で
   属性ヘッダと声色を変える。 */
.pipeline-row .stage-cell{background:rgba(4,11,14,.6);border-right:0}
.pipeline-head span:nth-child(n+4){background:rgba(4,11,14,.6);border-right-color:rgba(255,255,255,.035);color:#7e9aa2}

/* CONTACT キューの下の呼吸を詰める（2026-08）：セクション下端 130px
   ＋ CTA 上端 120px の合算 250px は、滴の誘導が指す先としては遠すぎた */
.pipeline-page #pipeline{padding-bottom:52px}

/* ============================================================
   hub: /technology/ — engine hub
   ============================================================
   2026-08: TECHNOLOGY はハブになった。装置（MatrixFOREST の図・4枚の技術
   カード・コンソール）と 作用機序はサブページへ出て、ここに残るのは
   ①エンジンの地図（.engine-stage-grid）②入口の索引（.engine-index）
   ③Why xFOREST の三つだけ。移設された装置の CSS は削っていない —
   /technology/discovery-engine/ と /technology/moa/ が同じ規則を再利用する。
   このブロックは追記のみで、既存の規則は上書きで扱う。 */

/* ---- 地図の各段に出口を付ける。1041 の small は article 下端への絶対配置な
        ので、リンクの高さぶん床を上げてから small を持ち上げる。.stage-map を
        噛ませた場合だけの上書きで、.engine-stage-grid 自体は無傷 ---- */
.stage-map article{padding-bottom:114px}
.stage-map article small{bottom:72px}
.stage-jump{position:absolute;left:26px;right:26px;bottom:22px;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding-top:15px;border-top:1px solid var(--hair);
  font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:.16em;color:var(--muted);
  transition:color .3s var(--ease),border-color .3s var(--ease)}
.stage-jump>span:last-child{font-size:17px;transition:transform .3s var(--ease)}
.stage-jump:hover,.stage-jump:focus-visible{color:var(--turq-soft);border-top-color:rgba(0,206,209,.32)}
.stage-jump:hover>span:last-child{transform:translateX(5px)}

/* ---- 入口の索引：2×2。1px の隙間が罫になる .tech-portfolio と同じ組版で、
        面と面のあいだにだけ線が立つ ---- */
.engine-index{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;
  margin:36px 0 26px;border:1px solid rgba(227,235,236,.12);
  background:rgba(206,228,232,.075);
  box-shadow:inset 0 1px rgba(245,248,248,.055),0 30px 100px rgba(0,0,0,.25)}
.engine-index-card{position:relative;display:flex;flex-direction:column;
  min-height:352px;padding:30px 28px 26px;overflow:hidden;
  background:linear-gradient(145deg,#0d1319,#080c10);
  transition:background .4s var(--ease)}
.engine-index-card:hover{background:linear-gradient(145deg,#101821,#0a0f14)}
/* focus は面の内側に turq のリングで返す。実際の outline はリンク側に出るので、
   キーボードでは「カードが選ばれた」と「リンクが選ばれた」の両方が見える */
.engine-index-card:focus-within{background:linear-gradient(145deg,#101821,#0a0f14);
  box-shadow:inset 0 0 0 1px var(--turq)}
.ix-no{position:absolute;right:26px;top:28px;
  font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.14em;color:var(--dim)}
.ix-tag{font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.18em;color:#b9ced0}
.engine-index-card h3{font:600 1.75rem/1.12 var(--font-d);margin:17px 0 11px}
.engine-index-card p{max-width:42ch;color:var(--muted);font-size:var(--fs-sm);line-height:1.65}
/* ミニ可視化は「この先に何があるか」の一目：格子・階段・隣人・記録。
   auto マージンで下寄せするので、本文の長さが違ってもリンクの高さは揃う */
/* 可視化と数値の床を揃える：viz は 47px、数値は 2 行ぶんを常に確保する。
   4枚とも実測が 1〜2 行に収まるので、隣り合う二枚のミニ図が 14px ずれて
   見えていた不揃いはこの二本で消える（--fs-nano 追随なのでトークンを
   動かしても成立する） */
.ix-viz{margin:26px 0 18px;margin-top:auto;width:100%;max-width:264px;min-height:47px}
.ix-meta{min-height:calc(var(--fs-nano) * 3.2);
  font:500 var(--fs-nano)/1.6 var(--font-m);letter-spacing:.1em;color:var(--cyan)}
.ix-go{margin-top:20px;padding-top:16px;border-top:1px solid var(--hair);
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  font:500 var(--fs-micro)/1.3 var(--font-m);letter-spacing:.16em;color:var(--ice);
  transition:color .3s var(--ease),border-color .3s var(--ease)}
/* カード全面をリンクの当たり判定にする。フォーカス可能な要素はこの1つだけ —
   見出しも数値もリンク名には入れない（読み上げは "INSPECT THE METHODS"） */
.ix-go::after{content:"";position:absolute;inset:0}
.ix-go>span:last-child{font-size:18px;transition:transform .3s var(--ease)}
.engine-index-card:hover .ix-go{color:var(--turq-soft);border-top-color:rgba(0,206,209,.32)}
.engine-index-card:hover .ix-go>span:last-child{transform:translateX(5px)}

/* 01 / 格子と、金の一点。ヒットは決定点なので --aperture（2028 の文法） */
.ix-matrix{display:grid;grid-template-columns:repeat(10,1fr);grid-auto-rows:11px;gap:4px;align-content:end}
.ix-matrix i{background:#0e141b;border:1px solid rgba(220,238,241,.03)}
.ix-matrix i.on{background:rgba(0,206,209,.26);border-color:rgba(0,206,209,.16)}
.ix-matrix i.hit{background:var(--aperture);border-color:var(--aperture);box-shadow:0 0 13px var(--warm-glow)}

/* 02 / 4段の機序。到達点だけが金で終わる（1042 の lead-icon と同じ言い方） */
.ix-steps{display:flex;align-items:center;height:47px}
.ix-steps i{flex:0 0 auto;width:11px;height:11px;border:1px solid var(--cyan);border-radius:50%;background:#0c1218}
.ix-steps i:last-child{border-color:var(--aperture);box-shadow:0 0 10px var(--warm-glow)}
.ix-steps b{flex:1 1 auto;height:1px;background:linear-gradient(90deg,rgba(0,206,209,.45),rgba(0,206,209,.16))}

/* 03 / 選択性の隣人。1本だけが立つ = 選択性そのものの絵 */
.ix-bars{display:flex;align-items:flex-end;gap:6px;height:47px}
.ix-bars i{flex:1;height:var(--v);
  background:linear-gradient(180deg,rgba(0,206,209,.42),rgba(0,206,209,.04));
  border-top:1px solid var(--turq-soft)}
.ix-bars i.hot{background:linear-gradient(180deg,var(--aperture),rgba(228,197,141,.1));
  border-top-color:#f3dfb9;box-shadow:0 0 14px var(--warm-glow)}

/* 04 / 4本の記録。ice で始まり turq に流れて消える — 論文は決定点ではない */
.ix-stack{display:flex;flex-direction:column;justify-content:flex-end;gap:11px;height:47px}
.ix-stack i{height:2px;background:linear-gradient(90deg,rgba(240,243,243,.5),rgba(0,206,209,.28) 62%,transparent)}
.ix-stack i:nth-child(1){width:100%}
.ix-stack i:nth-child(2){width:82%}
.ix-stack i:nth-child(3){width:63%}
.ix-stack i:nth-child(4){width:45%}

@media(max-width:980px){
  .engine-index{grid-template-columns:1fr}
  .engine-index-card{min-height:0}
  /* 段リンクは 1048 で small が static に戻るので、絶対配置も解いて素直に積む */
  .stage-map article{padding-bottom:24px}
  .stage-map article small{bottom:auto}
  .stage-jump{position:static;margin-top:20px}
}
@media(max-width:680px){
  .engine-index{margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}
  .engine-index-card{padding:26px 24px 24px}
  .engine-index-card h3{font-size:1.55rem}
  .engine-index-card p{max-width:none}
  .ix-no{right:24px;top:26px}
}
@media(prefers-reduced-motion:reduce){
  .stage-jump,.stage-jump>span:last-child,.ix-go,.ix-go>span:last-child,.engine-index-card{transition:none}
  .stage-jump:hover>span:last-child,.engine-index-card:hover .ix-go>span:last-child{transform:none}
}

/* Technology top is intentionally only a router: one concise decision surface,
   then the global footer. Detailed proof and explanation live on destinations. */
.technology-hub-hero{min-height:0;padding:calc(var(--nav-h) + 34px) 0 34px}
.technology-hub-hero h1{font-size:clamp(2.45rem,4.7vw,4.1rem);line-height:.92}
.technology-hub-hero .breadcrumb{margin-bottom:16px}
.technology-hub-hero .detail-hero-field{opacity:.56}
.technology-hub{padding:78px 0 68px;min-height:auto}
.technology-hub .section-heading{margin-bottom:0}
/* 2026-08: 化合物ライブラリを足して行き先が4枚になった。3列だと2段目に
   1枚だけ残って空きが2つ出るので、.engine-index 既定の2列に戻して 2×2 にする
   （狭幅の 2列→1列は下の @media がそのまま担当する） */
.technology-hub .engine-index{grid-template-columns:repeat(2,minmax(0,1fr));margin:30px 0 18px}
.technology-hub .engine-index-card{min-height:310px;padding:27px 23px 22px;
  transition:transform .45s var(--ease),background .4s var(--ease),box-shadow .45s var(--ease)}
.technology-hub .engine-index-card:hover,.technology-hub .engine-index-card:focus-within{
  z-index:2;transform:translateY(-6px);box-shadow:0 22px 50px rgba(0,0,0,.3),inset 0 0 0 1px rgba(0,206,209,.35)}
.technology-hub .engine-index-card h3{font-size:clamp(1.35rem,1.7vw,1.72rem)}
.technology-hub .engine-index-card p{font-size:var(--fs-micro);line-height:1.58}
.technology-hub .ix-viz{max-width:none;min-height:39px;height:39px;margin:19px 0 14px}
/* ix-bars は棒が4本しかないので、カード幅いっぱいに伸ばすと板に見える。
   ここだけ幅の上限を置く（高さは他のミニ図と同じ 39px の床を守る） */
.technology-hub .ix-bars{max-width:152px;gap:9px}
.technology-hub .ix-meta{font-size:var(--fs-nano);line-height:1.45;letter-spacing:.075em;
  margin-bottom:14px}
/* リンク行はカードの底に置く。カードは縦の flex なので margin-top:auto が
   余白を全部リンクの上に集め、罫が 4 枚とも同じ床に立つ。
   本文の行数がカードごとに違っても、和文で行数が変わっても、
   .ix-meta の実測高が予約分を数 px 超えても、床は動かない。
   直前の要素が 14px の margin-bottom を持つので、余白ゼロのカード
   （＝いちばん高いカード）でも罫の上の間隔は 14px を下回らない */
.technology-hub .ix-go{margin-top:auto;padding-top:13px;font-size:var(--fs-nano)}
/* カード2は .ix-meta を持たない。数値の段のぶんだけ .ix-viz の下に高さを
   確保して、1 列・2 列に折り返したときのカードの丈をそろえる
   （14px は .ix-meta 自身の margin-bottom ぶん） */
.technology-hub .engine-index-card:not(:has(.ix-meta)) .ix-viz{
  margin-bottom:calc(28px + var(--fs-nano) * 3.2)}

@media(max-width:1120px){
  .technology-hub .engine-index{grid-template-columns:repeat(2,minmax(0,1fr))}
  .technology-hub .engine-index-card{min-height:288px}
}
@media(max-width:680px){
  .technology-hub-hero{padding:calc(var(--nav-h) + 22px) 0 25px}
  .technology-hub-hero h1{font-size:clamp(2.2rem,11vw,3rem)}
  .technology-hub{padding:58px 0 48px}
  .technology-hub .engine-index{grid-template-columns:1fr}
  .technology-hub .engine-index-card{min-height:0}
  .technology-hub .engine-index-card:hover,.technology-hub .engine-index-card:focus-within{transform:none}
}

/* ============================================================
   pubs: /publications/ 引用として読める論文カード
   ============================================================
   2026-08: /publications/ は「発表物リスト」から「プラットフォームの
   どこが査読を通っているか」を言うページになった。当初は上段に
   .evidence-map（能力の積み上がり）を置き、下段に引用カードを並べて
   いたが、同じ論文を二度説明していたので地図は畳んだ。地図が持って
   いた「この論文がどの器官を裏付けるか」は一度カード側の
   RELATED TECHNOLOGY 欄と .publication-capability に移されたが、
   紐付けが実態と合わないことが多いという Hiroki Yoshida の指摘により
   2026-08 に両方とも削除。カードは論文そのものだけを示す。
   論文は HTML に直書き。detail.js renderPublications() は
   #publication-list が無ければ何もしないので、id を外すことで JS を
   切っても引用が読める。 */

/* ---- 引用ブロック ----
   一行で選べる引用文字列。user-select:all なので一度のクリック（または
   ダブルタップ）で全体が選択される — コピー用のボタンを JS で足すより、
   文字そのものを掴みやすくするほうが壊れない。著者は site-data.js の
   並び順どおり全員。 */
.publication-cite{margin:20px 0 0;padding:14px 16px;border:1px solid var(--hair);background:rgba(4,7,11,.55);max-width:74ch;min-width:0}
.publication-cite>span{display:block;margin-bottom:9px;font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em;color:var(--dim)}
/* overflow-wrap:anywhere（break-word ではなく）。引用末尾の URL は分割
   不能な一語なので、break-word だとグリッド列の min-content を押し広げ、
   375px 幅でカードが画面外へ出る。anywhere は min-content にも効く。 */
.publication-cite cite{display:block;font:400 var(--fs-nano)/1.72 var(--font-m);font-style:normal;letter-spacing:.005em;color:var(--muted);overflow-wrap:anywhere;
  -webkit-user-select:all;user-select:all}
/* .publication-main / .publication-action は 733 のグリッド列の中身。既定の
   min-width:auto を切っておかないと、上の引用に限らず長い一語が列を伸ばす */
.publications-page .publication-main,.publications-page .publication-action{min-width:0}
/* アンカー着地（#pub-01 など）が固定 NAV の下に隠れないように */
.publication-card[id],#papers{scroll-margin-top:calc(var(--nav-h) + 18px)}

/* ============================================================
   engine: /technology/discovery-engine/
   ============================================================
   3つのメソッドを「1台の装置の3つの覗き窓」として読ませる計器。
   タブではなく導管（conduit）が骨格：INPUT ポートから READOUT ポートまで
   1本の線が走り、その上に3つのノードが乗る。スクロール位置は engine.js が
   --fill（px）と --p（0–1）に翻訳し、線を走る光そのものが位置指示器になる
   ——ネイティブのスクロールバーは隠し、その役目を導管が引き継ぐ。

   色の分担は FLARE のまま：ice が走り、turq が選択と反応を運び、
   gold-deep #caa45c は各オルガンの到達点＝READOUT だけに置く
   （READOUT ポートのランプ／dd.eng-readout／各計器の終端＝ヒットの金セル、
   選ばれたアイソフォーム、着地した系列）。turq を「結論」に使わない。

   JS 無しの姿：.eng-track が縦積みの静的ドキュメントになり、ステーションは
   ただの in-page アンカーとして機能する（html:not(.js) の節を参照）。
   自動でスライドが進む仕掛けは持たない — 読者が導管を歩く装置なので、
   止めるべきタイマーが存在しない。計器内部の動きは [data-active] と
   prefers-reduced-motion の二重ゲートで止まる。 */

.engine-page .engine-hero+main #engine{padding-top:58px}
.engine-page .engine-hero h1{max-width:980px}
.engine-page #engine .eng-carousel{margin-top:28px}

.eng-carousel{margin:38px 0 0;border:1px solid var(--line);
  background:linear-gradient(180deg,#080b12 0%,#05070c 100%)}

/* ---- 導管とステーション ---- */
.eng-spine{border-bottom:1px solid var(--line)}
.eng-stations{position:relative;display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch}
/* 線は 30px、ノードとランプの中心も 30.5px に揃える（節点の上を光が通る） */
.eng-conduit{position:absolute;left:0;right:0;top:30px;height:1px;background:var(--line2)}
.eng-conduit-fill{position:absolute;left:0;top:0;height:1px;width:var(--fill,0);
  background:linear-gradient(90deg,rgba(240,243,243,.12) 0%,var(--ice) 26%,var(--turq) 100%);
  box-shadow:0 0 10px var(--turq-glow);transition:width .55s var(--ease)}

.eng-station{position:relative;display:block;padding:46px 20px 22px;text-align:center;
  text-decoration:none;transition:background .4s var(--ease)}
/* 仕切りは導管の下から始める（線を横切る縦罫は隔壁のように見えてしまう） */
.eng-station::before{content:"";position:absolute;left:0;top:44px;bottom:0;
  width:1px;background:var(--hair)}
.eng-node{position:absolute;top:24px;left:50%;margin-left:-6.5px;width:13px;height:13px;
  border-radius:50%;border:1px solid rgba(0,206,209,.3);background:var(--bg);
  transition:border-color .35s var(--ease),box-shadow .35s var(--ease),background .35s var(--ease)}
.eng-station-no{display:block;font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.18em;color:var(--muted)}
.eng-station b{display:block;margin-top:9px;font:600 var(--fs-sm)/1.2 var(--font-d);color:var(--muted);
  transition:color .35s var(--ease)}
.eng-station small{display:block;margin-top:7px;font:400 var(--fs-nano)/1.45 var(--font-m);
  letter-spacing:.1em;color:var(--muted)}
.eng-station:hover b,.eng-station:focus-visible b{color:var(--turq-soft)}
.eng-station:hover .eng-node{border-color:var(--turq)}
/* 現在地マーカーは ice + turq（状態は色ではなく線と光で言う） */
.eng-station.is-active{background:linear-gradient(180deg,rgba(0,206,209,.055),transparent 72%)}
.eng-station.is-active .eng-station-no{color:var(--turq)}
.eng-station.is-active b{color:var(--text)}
.eng-station.is-active .eng-node{border-color:var(--turq);background:var(--turq);
  box-shadow:0 0 0 4px rgba(0,206,209,.12),0 0 16px var(--turq-glow)}
.eng-station.is-active .eng-node::after{content:"";position:absolute;inset:3px;border-radius:50%;
  background:var(--ice)}

/* ---- トラック：ネイティブのスクロールスナップ。スワイプは実装ではなく素の挙動 ---- */
.eng-viewport{position:relative;overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;-ms-overflow-style:none}
.eng-viewport::-webkit-scrollbar{width:0;height:0;display:none}
.eng-viewport:focus-visible{outline:1px solid var(--turq);outline-offset:-3px}
.eng-track{display:flex;align-items:stretch}
.eng-organ{flex:0 0 100%;min-width:100%;scroll-snap-align:start;
  display:flex;flex-direction:column;padding:38px 40px 0}

.eng-organ-head{max-width:76ch}
.eng-organ-no{display:inline-block;font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.2em;color:var(--turq)}
.eng-organ-no i{font-style:normal;color:var(--dim);padding:0 4px}
.eng-organ-head h3{margin:14px 0 0;font:600 clamp(28px,3.2vw,42px)/1.05 var(--font-d);
  letter-spacing:-.012em;color:var(--text)}
.eng-organ-role{margin:15px 0 0;max-width:64ch;font:400 var(--fs-body)/1.65 var(--font-b);color:var(--muted)}
.eng-organ-body{margin-top:32px;display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,1fr);
  gap:34px;align-items:start}

/* ---- 計器（instrument）。SVG の文字サイズは3段の変数で持ち、狭幅でまとめて上げる ---- */
.eng-instrument{margin:0;padding:18px;border:1px solid var(--line);
  --eg-fs:11.5px;--eg-fs-s:10px;--eg-fs-xs:9.5px;
  background:radial-gradient(120% 120% at 18% 0%,rgba(0,206,209,.045),transparent 62%),#070a10}
.eng-instrument svg{display:block;width:100%;height:auto}
.eng-instrument text{font-family:var(--font-m);font-weight:500;font-size:var(--eg-fs);
  letter-spacing:.14em;fill:#7d8b98}
.eng-instrument figcaption{margin-top:15px;padding-top:12px;border-top:1px solid var(--hair);
  font:400 var(--fs-nano)/1.6 var(--font-m);letter-spacing:.04em;color:var(--muted)}
.eng-instrument text.eg-ax-y{font-size:var(--eg-fs-xs);letter-spacing:.08em}
/* READOUT の見出しだけ金：計器の中の到達点。要素＋クラスで書かないと
   .eng-instrument text（詳細度 0,1,1）に負けて灰に潰れるため必ず修飾する */
.eng-instrument text.eg-ax-out{font-size:var(--eg-fs-s);letter-spacing:.06em;fill:var(--gold-deep);opacity:.85}
.eg-bracket path{fill:none;stroke:var(--turq);stroke-width:1.2;opacity:.5}
.eg-ax-brace path{fill:none;stroke:var(--turq);stroke-width:1;opacity:.55}

/* ---- 疑似3D（アイソメトリック）の積層。01/02 で共有する造形言語 ----
   床＝化合物プレート（微細ウェルの2軸がどちらも化合物ライブラリ）、
   垂直軸＝RNA構造／スプライシングカセットのライブラリ、
   ヒット＝その立体の中のただ1ボクセル。
   プレートは局所座標のまま matrix() で床面に落とし込むので、
   セル・点灯ウェル・反応帯は平面図と同じ座標で書ける。
   斜行変換で線幅が 0.35〜0.6 倍に潰れるため、床の中の線は太めに取る */
.eg-3d-edge{fill:none;stroke:rgba(0,206,209,.5);stroke-width:1.2;stroke-linejoin:round}
.eg-3d-layer path{fill:none;stroke:var(--turq);stroke-width:.9;stroke-linejoin:round}
.eg-3d-layer-hit{fill:none;stroke:var(--gold-deep);stroke-width:1.1;opacity:.5;stroke-linejoin:round}
/* 読み取り面：積層を下から上へ掃引し、各RNA層を順に読む。
   静止時はヒットを含む層の上で止まった状態＝「読み取り途中の完成図」 */
.eg-3d-plane{fill:rgba(0,206,209,.1)}
.eg-3d-plane-edge{fill:none;stroke:#f0f3f3;stroke-width:1.1;opacity:.5;stroke-linejoin:round}
.eg-3d-well path{fill:var(--turq-soft);opacity:.8}
.eg-3d-dot circle{fill:var(--turq);opacity:.34}
.eg-3d-axis{fill:none;stroke:rgba(0,206,209,.4);stroke-width:1;
  stroke-linejoin:round;stroke-linecap:round}
.eng-instrument text.eg-3d-note{font-size:var(--eg-fs-xs);letter-spacing:.06em;fill:#6d7b8a}
/* ヒットは立体の中の1ボクセル：上面＋2側面の3面で箱として立てる */
.eg-3d-vox-t{fill:#e9d3a6;filter:drop-shadow(0 0 7px rgba(202,164,92,.6))}
.eg-3d-vox-l{fill:var(--gold-deep);fill-opacity:.92}
.eg-3d-vox-r{fill:var(--gold-deep);fill-opacity:.6}

/* 01 MatrixFOREST — 化合物プレートの上にRNAライブラリが積み上がる立体 */
.eg-cell{fill:none;stroke:rgba(0,206,209,.13);stroke-width:1.3}
.eg-plate{stroke:rgba(0,206,209,.26);stroke-width:2}
/* 反応帯は床の局所座標で走る（斜行変換ごしに iso 方向へ掃く）。
   静止時はプレート奥端で掃き終えた残り香として淡く置く */
.eg-mf-react{opacity:.28;transform:translateX(216px)}
/* 微細セル格子（6px）用：走査後も計測が続く気配のきらめきと、
   ヒット点火を知らせるソナーリング。静止時はどちらも淡い定常値 */
.eg-tw{fill:var(--turq);fill-opacity:.07}
.eg-hit-ring{fill:none;stroke:var(--gold-deep);stroke-width:1;opacity:.4;
  transform-box:fill-box;transform-origin:center}
.eg-legend text{font-size:var(--eg-fs-s);letter-spacing:.06em;fill:#8b98a4}
.eg-legend-key{fill:var(--gold-deep);fill-opacity:.82;stroke:#e9d3a6;stroke-width:1}
/* 01 追加：選択的ヒットを読み出しパネルへ引き出すコールアウト。
   turq＝走査／プロセス、gold＝読み出し・選択的ヒット。灰は既存のモノラベル灰を踏襲 */
.eg-weak{fill:var(--turq);fill-opacity:.17}
.eg-lead{fill:none;stroke:var(--gold-deep);stroke-width:1;opacity:.5;stroke-linejoin:round}
.eg-lead-node{fill:var(--gold-deep);opacity:.8}
.eg-panel{fill:rgba(0,206,209,.03);stroke:rgba(0,206,209,.22);stroke-width:1}
.eg-panel-hair{stroke:var(--hair);stroke-width:1}
/* 読み出しは2本トレースの差で結合部位を同定する（p-13 の実測に忠実）。
   turq＝測定側(化合物+)、灰の破線＝対照(化合物−)、gold は結合部位マーカーに温存 */
.eg-trace{fill:none;stroke:var(--turq-soft);stroke-width:1.3;stroke-linejoin:round;stroke-linecap:round}
.eg-trace-ctrl{fill:none;stroke:#7d8b98;stroke-width:1.1;stroke-dasharray:3 3;
  stroke-linejoin:round;stroke-linecap:round;opacity:.7}
.eg-trace-diff{fill:var(--turq);fill-opacity:.12}
.eg-trace-base{stroke:rgba(221,234,236,.18);stroke-width:1}
.eg-site{stroke:var(--gold-deep);stroke-width:1.4}
.eg-site-dot{fill:var(--gold-deep);filter:drop-shadow(0 0 5px rgba(202,164,92,.55))}
.eg-rna{fill:none;stroke:rgba(0,206,209,.5);stroke-width:1.4;stroke-linecap:round}
.eg-rna-pair{stroke:rgba(0,206,209,.3);stroke-width:1}
.eg-rna-site{fill:var(--gold-deep);filter:drop-shadow(0 0 5px rgba(202,164,92,.55))}
/* 凡例の弱結合スウォッチは格子内の .eg-weak（turq・不透明度 .17・strokeなし）と実体を一致させる。
   ただし 10px 単独のスウォッチは .17 では暗地に埋もれるため、凡例のみ視認性を確保する範囲で
   僅かに濃くする（絵柄の性格＝薄いターコイズの塗り四角、strokeなしは保つ） */
.eg-legend-key-weak{fill:var(--turq);fill-opacity:.34}
/* パネル内の text は要素＋クラスで修飾（.eng-instrument text に負けないため） */
.eng-instrument text.eg-note{font-size:var(--eg-fs-xs);letter-spacing:.1em;fill:#7d8b98}
.eng-instrument text.eg-site-lbl{font-size:var(--eg-fs-xs);letter-spacing:.12em;fill:var(--gold-deep)}

/* 02 SpliceVerse — 化合物依存でスプライシング接合の帰結が切り替わる機構。
   turq=プロセス（接合選択・化合物作用）、gold=読み出し（生じた転写産物=MoA）。
   up/down は両方 gold 系。向きは 三角の向き＋質感＋明度＋ラベルで冗長に区別。
   ※ 01 とは絵柄を分ける：セル格子プレート/スキャン帯/金四角は使わない。 */
.eg-mech rect{fill:rgba(19,32,40,.92);stroke:rgba(227,235,236,.4);stroke-width:1}
.eg-mech .eg-target{fill:rgba(0,206,209,.14);stroke:var(--turq-soft)}
.eg-mech-intron{fill:none;stroke:rgba(227,235,236,.22);stroke-width:1;stroke-dasharray:3 4}
.eg-jarc path{fill:none;stroke:var(--turq);stroke-width:1.5;stroke-linecap:round;opacity:.9}
.eg-jarc .eg-jarc-skip{stroke-dasharray:4 4;opacity:.55}
.eg-cmpd path{fill:none;stroke:var(--turq-soft);stroke-width:1.4}
.eg-cmpd-bond{fill:none;stroke:var(--turq);stroke-width:1.2;stroke-dasharray:2 3;opacity:.75}
.eg-cmpd text{font-size:var(--eg-fs-s);letter-spacing:.1em;fill:var(--turq-soft)}
.eg-iso-rule{fill:none;stroke:rgba(202,164,92,.32);stroke-width:1}
.eg-iso rect{fill:rgba(202,164,92,.1);stroke:var(--gold-deep);stroke-width:1}
.eg-iso-join{fill:none;stroke:var(--gold-deep);stroke-width:1.4}
.eg-iso-up .eg-iso-mid{fill:#e9d3a6;fill-opacity:.9;stroke:#e9d3a6}
.eg-iso-dn .eg-iso-mid{fill:url(#eg-poison);stroke:var(--gold-deep)}
.eg-iso text{font-size:var(--eg-fs-s);letter-spacing:.08em}
.eg-iso-up text{fill:#e9d3a6}
.eg-iso-dn text{fill:var(--gold-deep)}
.eg-mod-up{fill:#e9d3a6;filter:drop-shadow(0 0 4px rgba(233,211,166,.45))}
.eg-mod-dn{fill:var(--gold-deep);fill-opacity:.95}
/* 02 左下：カセットライブラリを 01 と同じ立体の言語で描く。床＝化合物
   プレート、垂直に積み上がる面＝カセット。金の枠で示した1面が上の
   pre-mRNA 機構図の拡大元であることを誘導線で語る。静止時も完成図。
   立体は 01 より小さいので、面の線は細く取らないと目が詰まる */
.eg-sv-layers path{stroke-width:.75}
.eg-lf{fill:var(--turq);opacity:.55}
.eg-lf-gold{fill:var(--gold-deep);opacity:.85}
.eg-lf-focus{fill:rgba(202,164,92,.07);stroke:var(--gold-deep);stroke-width:1.2;opacity:.8;
  transform-box:fill-box;transform-origin:center}
.eg-lf-lead{fill:none;stroke:rgba(0,206,209,.45);stroke-width:1;stroke-dasharray:3 3}
.eg-lf-dot{fill:var(--turq-soft)}
.eng-instrument text.eg-scale-note{fill:#6d7b8a;font-size:var(--eg-fs-xs);letter-spacing:.06em}

/* 03 SAR by Selectivity — 週次サイクル図＋ターゲット・コンバージョン。
   turq=走査/プロセス、gold=読み出し/到達点。grid/axis/land/traj は共通要素 */
.eg-grid path{fill:none;stroke:var(--hair);stroke-width:1}
.eg-axis path{fill:none;stroke:rgba(227,235,236,.28);stroke-width:1}
.eg-traj{fill:none;stroke:rgba(0,206,209,.75);stroke-width:1.6;stroke-dasharray:5 5}
.eg-land-ring{fill:none;stroke:var(--gold-deep);stroke-width:1;opacity:.5;
  transform-box:fill-box;transform-origin:center}
.eg-land-dot{fill:var(--gold-deep);filter:drop-shadow(0 0 8px rgba(202,164,92,.6))}
/* 03 追加：サイクルのノード・矢印・分岐（非 text 要素は素のクラスでよい） */
.eg-cy-node{fill:none;stroke:rgba(0,206,209,.5);stroke-width:1.2}
.eg-cy-node-fill{fill:rgba(0,206,209,.06);stroke:rgba(0,206,209,.5);stroke-width:1.2}
.eg-cy-cell{fill:rgba(0,206,209,.14);stroke:rgba(0,206,209,.28);stroke-width:.6}
.eg-cy-cell-hit{fill:var(--gold-deep);fill-opacity:.82;stroke:#e9d3a6;stroke-width:.6}
.eg-cy-spot{fill:rgba(0,206,209,.4)}
.eg-cy-spot-hit{fill:var(--gold-deep)}
.eg-cy-arrow{fill:none;stroke:var(--turq);stroke-width:1.4;opacity:.85}
.eg-cy-ah{fill:var(--turq)}
.eg-cy-tick{stroke:rgba(157,167,177,.6);stroke-width:1.4}
/* ノードラベル・中央注記・下段見出しの text は要素＋クラスで修飾。
   .eng-instrument text（字送り .14em）に負けると3語が1行に収まらず重なる */
.eng-instrument text.eg-cy-lab{letter-spacing:.02em;fill:#8b98a4}
.eng-instrument text.eg-cy-mid{fill:var(--turq-soft);letter-spacing:.1em}
.eng-instrument text.eg-cy-head{fill:var(--turq-soft);letter-spacing:.06em;font-size:var(--eg-fs-s)}

/* 週次サイクル：環は回り、金の決定点は毎周同じ位置に戻ってくる */
.eng-cycle{margin-top:16px;padding:11px 14px;display:flex;align-items:center;gap:13px;
  border:1px solid var(--line);background:rgba(0,206,209,.03)}
.eng-cycle i{position:relative;flex:none;width:26px;height:26px;border-radius:50%;
  border:1px solid rgba(0,206,209,.28)}
.eng-cycle i::before{content:"";position:absolute;inset:-1px;border-radius:50%;
  border:1px solid transparent;border-top-color:var(--turq)}
.eng-cycle i::after{content:"";position:absolute;top:-3px;left:50%;margin-left:-2.5px;
  width:5px;height:5px;border-radius:50%;background:var(--gold-deep);
  box-shadow:0 0 7px rgba(202,164,92,.6)}
.eng-cycle span{font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.12em;color:#7d8b98}
.eng-cycle b{color:var(--turq-soft)}

/* 計器の動きは「開いているオルガン」の中だけで走る（既定は静止像）。
   各図は1本のループ・タイムラインとして段階的に「語る」：
   01 プレート面を反応帯が掃く → 弱結合が波ごとに点灯 → RNA層が下から
      積み上がる → 反応ウェルから光の柱が立つ → 読み取り面が積層を
      1層ずつ上へ掃引 → 柱と層の交点＝1ボクセルが金に点火 → リード線 →
      対照/化合物トレース描画 → 差分 → 結合部位マーク → RNAフォールド（21s）
   02 化合物が降下・結合 → 標的エクソンが応答 → 接合アークが引かれる →
      UP転写産物 → DOWN転写産物 → DOWN強調 → 両立（12s）
   03 SpliceVerse→Selectivity→Design が順に点灯・接続 → 帰還ループ →
      下段でターゲット・コンバージョンの分岐 → 2つの着地点（13s）
   すべての要素の既定値＝完成図。よって JS 無し・reduced-motion・
   非アクティブのオルガンでは静止した完成図がそのまま出る。
   dasharray は必ずパス実長より大きく取る（reduced-motion で animation:none に
   なっても rule 側の dasharray が残るため、実長より短いと破線に見えてしまう） */

/* ---- 01 MatrixFOREST（21s・反応帯と読み取り面は等速） ---- */
.eng-organ[data-active="true"] .eg-mf-react{animation:egmReact 21s linear infinite}
/* 弱結合セルは反応帯の通過時刻に同期して波ごとに点灯（列帯のx位置から線形換算） */
.eng-organ[data-active="true"] .eg-wv1{animation:egmW1 21s linear infinite}
.eng-organ[data-active="true"] .eg-wv2{animation:egmW2 21s linear infinite}
.eng-organ[data-active="true"] .eg-wv3{animation:egmW3 21s linear infinite}
.eng-organ[data-active="true"] .eg-wv4{animation:egmW4 21s linear infinite}
.eng-organ[data-active="true"] .eg-wv5{animation:egmW5 21s linear infinite}
.eng-organ[data-active="true"] .eg-wv6{animation:egmW6 21s linear infinite}
.eng-organ[data-active="true"] .eg-wv7{animation:egmW7 21s linear infinite}
.eng-organ[data-active="true"] .eg-wv8{animation:egmW8 21s linear infinite}
.eng-organ[data-active="true"] .eg-tw1{animation:egmTw 3.8s var(--ease) infinite alternate}
.eng-organ[data-active="true"] .eg-tw2{animation:egmTw 3.1s var(--ease) -1.6s infinite alternate}
/* RNA層は下の帯から順に立ち上がる。柱は反応ウェルから遅れて伸びる */
.eng-organ[data-active="true"] .eg-mf-lb1{animation:egmLy1 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-lb2{animation:egmLy2 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-lb3{animation:egmLy3 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-lb4{animation:egmLy4 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-rails{animation:egmRails 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-wl1{animation:egmWellA 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-wl2{animation:egmWellB 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-bm1 rect{transform-box:fill-box;transform-origin:bottom;
  animation:egmBeamA 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-bm2 rect{transform-box:fill-box;transform-origin:bottom;
  animation:egmBeamB 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-mf-sweep{animation:egmSweep 21s linear infinite}
.eng-organ[data-active="true"] .eg-3d-layer-hit{animation:egmHitPlane 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-hit{transform-box:fill-box;transform-origin:center;
  animation:egmHit 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-hit-ring{animation:egmRing 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-hit-ring2{animation:egmRing2 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-lead{stroke-dasharray:130;animation:egmLead 21s linear infinite}
.eng-organ[data-active="true"] .eg-lead-node{animation:egmLeadNode 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-trace-ctrl{animation:egmCtrl 21s linear infinite}
.eng-organ[data-active="true"] .eg-trace{stroke-dasharray:130;animation:egmTrace 21s linear infinite}
.eng-organ[data-active="true"] .eg-trace-diff{animation:egmDiff 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-site{stroke-dasharray:34;animation:egmSiteLine 21s linear infinite}
.eng-organ[data-active="true"] .eg-site-dot{transform-box:fill-box;transform-origin:center;
  animation:egmSiteDot 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-site-lbl{animation:egmSiteLbl 21s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-rna,
.eng-organ[data-active="true"] .eg-rna-pair,
.eng-organ[data-active="true"] .eg-rna-site{animation:egmRna 21s var(--ease) infinite}
/* 反応帯：2→20% で床の局所座標を 216 だけ掃き、以降は奥端で淡く残る */
@keyframes egmReact{0%{transform:translateX(0);opacity:0}
  2%{transform:translateX(0);opacity:.75}
  20%{transform:translateX(216px);opacity:.75}
  24%,96%{transform:translateX(216px);opacity:.28}
  100%{transform:translateX(216px);opacity:0}}
@keyframes egmW1{0%,3%{opacity:0}4.5%,96%{opacity:1}100%{opacity:0}}
@keyframes egmW2{0%,5.5%{opacity:0}7%,96%{opacity:1}100%{opacity:0}}
@keyframes egmW3{0%,8%{opacity:0}9.5%,96%{opacity:1}100%{opacity:0}}
@keyframes egmW4{0%,10.5%{opacity:0}12%,96%{opacity:1}100%{opacity:0}}
@keyframes egmW5{0%,13%{opacity:0}14.5%,96%{opacity:1}100%{opacity:0}}
@keyframes egmW6{0%,15.5%{opacity:0}17%,96%{opacity:1}100%{opacity:0}}
@keyframes egmW7{0%,17.5%{opacity:0}19%,96%{opacity:1}100%{opacity:0}}
@keyframes egmW8{0%,19.5%{opacity:0}21%,96%{opacity:1}100%{opacity:0}}
@keyframes egmTw{from{fill-opacity:.05}to{fill-opacity:.16}}
/* 積層は4帯に分けて下から順に立ち上げる（各パスの opacity は上ほど淡い） */
@keyframes egmLy1{0%,16%{opacity:0;transform:translateY(7px)}
  22%,96%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(0)}}
@keyframes egmLy2{0%,19%{opacity:0;transform:translateY(7px)}
  25%,96%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(0)}}
@keyframes egmLy3{0%,22%{opacity:0;transform:translateY(7px)}
  28%,96%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(0)}}
@keyframes egmLy4{0%,25%{opacity:0;transform:translateY(7px)}
  31%,96%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(0)}}
@keyframes egmRails{0%,20%{opacity:0}28%,96%{opacity:1}100%{opacity:0}}
@keyframes egmWellA{0%,22%{opacity:0}27%,96%{opacity:1}100%{opacity:0}}
@keyframes egmWellB{0%,25%{opacity:0}30%,96%{opacity:1}100%{opacity:0}}
/* 光の柱は反応ウェルから垂直に伸びる（下端固定の scaleY） */
@keyframes egmBeamA{0%,26%{opacity:0;transform:scaleY(0)}
  34%,96%{opacity:1;transform:scaleY(1)}100%{opacity:0;transform:scaleY(1)}}
@keyframes egmBeamB{0%,30%{opacity:0;transform:scaleY(0)}
  38%,96%{opacity:1;transform:scaleY(1)}100%{opacity:0;transform:scaleY(1)}}
/* 読み取り面：38→58% で積層を1層ずつ（8px刻み・6段）上がり、
   ヒットを含む層（transform なしの既定位置）で止まって以後そこに残る */
@keyframes egmSweep{0%,34%{opacity:0;transform:translateY(48px)}
  38%{opacity:1;transform:translateY(48px);animation-timing-function:steps(6,end)}
  58%,96%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(0)}}
@keyframes egmHitPlane{0%,54%{opacity:0}60%,96%{opacity:.5}100%{opacity:0}}
/* ヒット：読み取り面が到達した瞬間に1ボクセルが点火する */
@keyframes egmHit{0%,56%{opacity:0;transform:scale(.3)}
  60%{opacity:1;transform:scale(1.55)}
  64%,96%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1)}}
/* 点火を知らせる楕円ソナー（層の面の上に寝ている）。2周広がって静まる */
@keyframes egmRing{0%,57%{opacity:0;transform:scale(.5)}
  61%{opacity:.85;transform:scale(1)}69%{opacity:.12;transform:scale(2.2)}
  70%,100%{opacity:0;transform:scale(1)}}
@keyframes egmRing2{0%,64%{opacity:0;transform:scale(.5)}
  68%{opacity:.6;transform:scale(1)}76%{opacity:.1;transform:scale(2)}
  77%,100%{opacity:0;transform:scale(1)}}
@keyframes egmLead{0%,62%{stroke-dashoffset:130;opacity:0}63%{opacity:.5}
  69%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:.5}100%{opacity:0}}
@keyframes egmLeadNode{0%,63%{opacity:0}68%,96%{opacity:.8}100%{opacity:0}}
/* 対照(−)はワイプで、測定(+)はプロッタ描画で引く（対照は破線のため dash 描画不可） */
@keyframes egmCtrl{0%,68%{opacity:0;clip-path:inset(-20% 102% -20% -3%)}
  70%{opacity:.7}76%,96%{opacity:.7;clip-path:inset(-20% -3% -20% -3%)}
  100%{opacity:0;clip-path:inset(-20% -3% -20% -3%)}}
@keyframes egmTrace{0%,76%{stroke-dashoffset:130;opacity:0}77%{opacity:1}
  83%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:1}100%{opacity:0}}
@keyframes egmDiff{0%,83%{opacity:0}86%,96%{opacity:1}100%{opacity:0}}
@keyframes egmSiteLine{0%,85%{stroke-dashoffset:34;opacity:0}86%{opacity:1}
  88%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:1}100%{opacity:0}}
@keyframes egmSiteDot{0%,87%{opacity:0;transform:scale(.4)}89%{opacity:1;transform:scale(1.4)}
  91%,96%{transform:scale(1);opacity:1}100%{opacity:0}}
@keyframes egmSiteLbl{0%,89%{opacity:0}91%,96%{opacity:1}100%{opacity:0}}
@keyframes egmRna{0%,91%{opacity:0;transform:translateY(5px)}
  95%,96%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(0)}}

/* ---- 02 SpliceVerse（12s） ---- */
.eng-organ[data-active="true"] .eg-cmpd{animation:egvCmpd 12s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-cmpd-bond{animation:egvFlow 1.4s linear infinite}
.eng-organ[data-active="true"] .eg-mech .eg-target{animation:egvTarget 12s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-jarc path:nth-child(-n+2){stroke-dasharray:60;
  animation:egvArc 12s linear infinite}
.eng-organ[data-active="true"] .eg-jarc path.eg-jarc-skip{stroke-dasharray:4 4;
  animation:egvSkip 12s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-iso-up{animation:egvUp 12s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-iso-dn{animation:egvDn 12s var(--ease) infinite}
/* カセットライブラリの立体：床の点灯波3系統＋金のヒット点滅＋光の柱の明滅＋
   積層を上下する読み取り面。ストーリーとは独立の環境ループ＝
   「大量に並列で読み続けている」気配。金の枠の1面は拡大元として脈打つ */
.eng-organ[data-active="true"] .eg-lf1{animation:egvTw 4.2s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-lf2{animation:egvTw 4.2s var(--ease) -1.4s infinite}
.eng-organ[data-active="true"] .eg-lf3{animation:egvTw 4.2s var(--ease) -2.8s infinite}
.eng-organ[data-active="true"] .eg-lf-gold{animation:egvGold 5.2s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-sv-sweep{animation:egvSweep 4.6s var(--ease) infinite alternate}
.eng-organ[data-active="true"] .eg-sv-beams rect{animation:egvBeam 3.6s var(--ease) infinite alternate}
.eng-organ[data-active="true"] .eg-lf-focus{animation:engLand 3.4s var(--ease) infinite}
@keyframes egvCmpd{0%,4%{opacity:0;transform:translateY(-9px)}
  10%{opacity:1;transform:translateY(0)}96%{opacity:1;transform:translateY(0)}100%{opacity:0}}
@keyframes egvFlow{to{stroke-dashoffset:-10}}
@keyframes egvTarget{0%,9%{fill:rgba(0,206,209,.14)}13%{fill:rgba(0,206,209,.34)}
  19%,100%{fill:rgba(0,206,209,.14)}}
@keyframes egvArc{0%,13%{stroke-dashoffset:60;opacity:0}14%{opacity:.9}
  22%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:.9}100%{opacity:0}}
@keyframes egvSkip{0%,16%{opacity:0}24%,96%{opacity:.55}100%{opacity:0}}
/* 転写産物は左→右へ組み上がる。UPが先に現れ、次にDOWN、その間UPは減光
   ＝「化合物次第でどちらの帰結にも倒れうる」ことを時間で語る */
@keyframes egvUp{0%,28%{opacity:0;clip-path:inset(-15% 102% -15% -3%)}
  34%{opacity:1;clip-path:inset(-15% -3% -15% -3%)}
  62%{opacity:1}68%,78%{opacity:.4}84%,96%{opacity:1;clip-path:inset(-15% -3% -15% -3%)}
  100%{opacity:0;clip-path:inset(-15% -3% -15% -3%)}}
@keyframes egvDn{0%,46%{opacity:0;clip-path:inset(-15% 102% -15% -3%)}
  52%,96%{opacity:1;clip-path:inset(-15% -3% -15% -3%)}
  100%{opacity:0;clip-path:inset(-15% -3% -15% -3%)}}
@keyframes egvTw{0%,100%{opacity:.3}50%{opacity:1}}
@keyframes egvGold{0%,55%,100%{opacity:.25}12%,30%{opacity:1}}
/* 読み取り面は積層の中を上下する。transform なしの既定位置＝積層の中程 */
@keyframes egvSweep{from{transform:translateY(20px)}to{transform:translateY(-16px)}}
@keyframes egvBeam{from{opacity:.45}to{opacity:1}}

/* ---- 03 SAR by Selectivity（13s） ---- */
.eng-organ[data-active="true"] .eg-l1,
.eng-organ[data-active="true"] .eg-cy-node,
.eng-organ[data-active="true"] .eg-cy-st1{animation:egcSt1 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-a1{stroke-dasharray:100;animation:egcA1 13s linear infinite}
.eng-organ[data-active="true"] .eg-l2,
.eng-organ[data-active="true"] .eg-cy-st2{animation:egcSt2 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-cy-cell-hit{transform-box:fill-box;transform-origin:center;
  animation:egcHit 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-a2{stroke-dasharray:100;animation:egcA2 13s linear infinite}
.eng-organ[data-active="true"] .eg-l3,
.eng-organ[data-active="true"] .eg-des{animation:egcSt3 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-traj{animation:egcTraj 13s linear infinite,engTraj 4.6s linear infinite}
.eng-organ[data-active="true"] .eg-cy-mid{animation:egcMid 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-l4,
.eng-organ[data-active="true"] .eg-src,
.eng-organ[data-active="true"] .eg-cy-tick,
.eng-organ[data-active="true"] .eg-ax-src{animation:egcSrc 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-b1{stroke-dasharray:80;animation:egcB1 13s linear infinite}
.eng-organ[data-active="true"] .eg-b2{stroke-dasharray:80;animation:egcB2 13s linear infinite}
.eng-organ[data-active="true"] .eg-r1{animation:egcR1 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-r2{animation:egcR2 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-cy-head{animation:egcHead 13s var(--ease) infinite}
.eng-organ[data-active="true"] .eg-land-ring{animation:engLand 3.4s var(--ease) infinite}
.eng-organ[data-active="true"] .eng-cycle i::before{animation:engSpin 3.4s linear infinite}
@keyframes egcSt1{0%,2%{opacity:0}7%,96%{opacity:1}100%{opacity:0}}
@keyframes egcA1{0%,8%{stroke-dashoffset:100;opacity:0}9%{opacity:.85}
  14%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:.85}100%{opacity:0}}
@keyframes egcSt2{0%,13%{opacity:0}18%,96%{opacity:1}100%{opacity:0}}
@keyframes egcHit{0%,18%{opacity:0;transform:scale(.4)}22%{opacity:1;transform:scale(1.4)}
  25%,96%{transform:scale(1);opacity:1}100%{opacity:0}}
@keyframes egcA2{0%,19%{stroke-dashoffset:100;opacity:0}20%{opacity:.85}
  25%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:.85}100%{opacity:0}}
@keyframes egcSt3{0%,25%{opacity:0}30%,96%{opacity:1}100%{opacity:0}}
@keyframes egcTraj{0%,31%{opacity:0}35%,96%{opacity:1}100%{opacity:0}}
@keyframes egcMid{0%,35%{opacity:0}40%,96%{opacity:1}100%{opacity:0}}
@keyframes egcSrc{0%,44%{opacity:0}50%,96%{opacity:1}100%{opacity:0}}
@keyframes egcB1{0%,52%{stroke-dashoffset:80;opacity:0}53%{opacity:.85}
  60%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:.85}100%{opacity:0}}
@keyframes egcB2{0%,56%{stroke-dashoffset:80;opacity:0}57%{opacity:.85}
  64%{stroke-dashoffset:0}96%{stroke-dashoffset:0;opacity:.85}100%{opacity:0}}
@keyframes egcR1{0%,60%{opacity:0}66%,96%{opacity:1}100%{opacity:0}}
@keyframes egcR2{0%,64%{opacity:0}70%,96%{opacity:1}100%{opacity:0}}
@keyframes egcHead{0%,70%{opacity:0}76%,96%{opacity:1}100%{opacity:0}}
@keyframes engTraj{to{stroke-dashoffset:-40}}
@keyframes engLand{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:.14;transform:scale(1.32)}}
@keyframes engSpin{to{transform:rotate(360deg)}}

/* ---- データ側：役割 / INPUT / READOUT / スケール / プログラム / 論文 ---- */
.eng-organ-data{display:flex;flex-direction:column;gap:26px}
.eng-spec{margin:0;border-top:1px solid var(--line)}
.eng-spec>div{display:grid;grid-template-columns:142px minmax(0,1fr);gap:18px;padding:13px 0;
  border-bottom:1px solid var(--hair)}
.eng-spec dt{font:500 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.16em;color:var(--muted)}
.eng-spec dd{margin:0;font:400 var(--fs-meta)/1.6 var(--font-b);color:var(--muted)}
.eng-spec dd.eng-readout,.eng-under dd.eng-readout{color:var(--gold-deep)}
/* INPUT 行の「化合物ライブラリ」から /technology/chemical-library/ へ渡す。
   サイトに散文用のインラインリンク様式が無い（a{color:inherit;text-decoration:none}）
   ため、dd の書体をそのまま継いで罫だけ足す最小の指定をここに置く。
   .text-link は等幅＋字送り .16em ＋inline-flex なので、本文中には使えない */
.eng-spec dd a{color:var(--text);border-bottom:1px solid rgba(0,206,209,.45);
  transition:color .25s var(--ease),border-color .25s var(--ease)}
.eng-spec dd a:hover,.eng-spec dd a:focus-visible{color:var(--turq-soft);
  border-bottom-color:var(--turq-soft)}

.eng-scale{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  border:1px solid var(--line);background:rgba(0,206,209,.02)}
.eng-scale article{padding:16px 15px;border-right:1px solid var(--hair)}
.eng-scale article:last-child{border-right:0}
.eng-scale span{display:block;font:500 var(--fs-nano)/1.45 var(--font-m);letter-spacing:.14em;color:var(--muted)}
.eng-scale strong{display:block;margin-top:10px;font:500 clamp(17px,1.5vw,22px)/1.12 var(--font-d);
  color:var(--text)}
.eng-scale strong.eng-scale-text{font:500 clamp(13px,1vw,15px)/1.45 var(--font-d);letter-spacing:0}
.eng-scale strong i,.eng-scale strong sub,.eng-scale strong sup{font-style:normal;font-size:max(var(--fs-nano),.62em);
  color:var(--dim)}
.eng-scale strong sup{color:inherit}

.eng-sub{display:flex;align-items:baseline;justify-content:space-between;gap:14px;padding-bottom:9px;
  border-bottom:1px solid rgba(0,206,209,.2);
  font:500 var(--fs-nano)/1.45 var(--font-m);letter-spacing:.16em;color:#7d8b98}
.eng-sub i{font-style:normal;color:var(--turq);white-space:nowrap}
.eng-papers{margin:0;padding:0;list-style:none}
.eng-papers a{display:block;padding:12px 0;border-bottom:1px solid var(--hair);
  font:400 var(--fs-meta)/1.55 var(--font-b);color:var(--muted);text-decoration:none;
  transition:color .3s var(--ease)}
.eng-papers a i{display:block;margin-top:6px;font:500 var(--fs-nano)/1.4 var(--font-m);font-style:normal;
  letter-spacing:.12em;color:var(--muted);transition:color .3s var(--ease)}
.eng-papers a:hover,.eng-papers a:focus-visible{color:var(--turq-soft)}
.eng-papers a:hover i,.eng-papers a:focus-visible i{color:var(--turq)}

/* ---- 受け渡し：ここが「3枚のカード」ではなく「1本の流れ」である証拠 ---- */
.eng-handoff{margin-top:34px;padding:20px 0;display:flex;flex-wrap:wrap;align-items:center;
  justify-content:flex-end;gap:16px;border-top:1px solid var(--line)}
.eng-handoff-lbl{font:500 var(--fs-nano)/1.4 var(--font-m);letter-spacing:.18em;color:var(--muted)}
.eng-handoff-link{display:inline-flex;align-items:center;gap:12px;padding:11px 18px;
  border:1px solid rgba(0,206,209,.32);font:500 var(--fs-micro)/1.2 var(--font-m);letter-spacing:.1em;
  color:var(--turq-soft);text-decoration:none;
  transition:background .35s var(--ease),color .35s var(--ease),border-color .35s var(--ease)}
.eng-handoff-link i{font-style:normal;color:var(--turq)}
.eng-handoff-link:hover,.eng-handoff-link:focus-visible{background:rgba(0,206,209,.08);
  border-color:var(--turq);color:var(--ice)}

/* ---- 操作系（クリック／キーボード／スワイプの3経路のうち、ボタンの分） ---- */
.eng-ctl{display:flex;align-items:center;justify-content:center;gap:20px;padding:18px 24px;
  border-top:1px solid var(--line);background:rgba(0,206,209,.02)}
.eng-arrow{width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--line2);background:transparent;color:var(--muted);font-size:15px;cursor:pointer;
  transition:border-color .3s var(--ease),color .3s var(--ease),opacity .3s var(--ease)}
.eng-arrow:hover:not(:disabled),.eng-arrow:focus-visible:not(:disabled){border-color:var(--turq);
  color:var(--turq)}
.eng-arrow:disabled{opacity:.26;cursor:default}
.eng-status{margin:0;min-width:280px;text-align:center;font:500 var(--fs-nano)/1.4 var(--font-m);
  letter-spacing:.16em;color:#8fa0a8}

/* ---- 検証層：導管の第4のステーションではなく、その下を走る層 ---- */
.eng-under{margin-top:38px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  border:1px solid var(--line)}
.eng-under article{position:relative;padding:32px 30px 30px;border-right:1px solid var(--hair)}
.eng-under article:last-child{border-right:0}
.eng-under-no{font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.2em;color:var(--turq)}
.eng-under h3{margin:22px 0 0;font:600 clamp(20px,2vw,26px)/1.2 var(--font-d);color:var(--text)}
.eng-under p{margin:12px 0 0;font:400 var(--fs-meta)/1.65 var(--font-b);color:var(--muted)}
.eng-under dl{margin:24px 0 0;border-top:1px solid var(--hair)}
.eng-under dl>div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:14px;padding:11px 0;
  border-bottom:1px solid var(--hair)}
.eng-under dt{font:500 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.14em;color:var(--muted)}
.eng-under dd{margin:0;font:400 var(--fs-micro)/1.6 var(--font-b);color:var(--muted)}
.eng-under-viz{position:relative;height:66px;margin-top:24px;border-bottom:1px solid var(--hair)}
.eng-viz-probe i{position:absolute;bottom:0;width:13px;
  background:linear-gradient(180deg,rgba(0,206,209,.45),rgba(0,206,209,.03));
  border-top:1px solid var(--turq-soft)}
.eng-viz-probe i:nth-child(1){left:0;height:38%}
.eng-viz-probe i:nth-child(2){left:22px;height:72%}
.eng-viz-probe i:nth-child(3){left:44px;height:54%}
.eng-viz-probe i:nth-child(4){left:66px;height:88%}
.eng-viz-probe b{position:absolute;left:70px;top:2px;width:9px;height:9px;border-radius:50%;
  background:var(--gold-deep);box-shadow:0 0 10px rgba(202,164,92,.55)}
.eng-viz-analytics i{position:absolute;left:0;right:34px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(0,206,209,.55) 45%,rgba(0,206,209,.12))}
.eng-viz-analytics i:nth-child(1){top:16px}
.eng-viz-analytics i:nth-child(2){top:33px}
.eng-viz-analytics i:nth-child(3){top:50px}
.eng-viz-analytics b{position:absolute;right:20px;top:29px;width:9px;height:9px;border-radius:50%;
  background:var(--gold-deep);box-shadow:0 0 10px rgba(202,164,92,.55)}

/* ---- 出口 ---- */
.eng-exit{margin-top:30px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  border:1px solid var(--line)}
.eng-exit-card{position:relative;display:block;padding:30px 26px 26px;
  border-right:1px solid var(--hair);text-decoration:none;transition:background .4s var(--ease)}
.eng-exit-card:last-child{border-right:0}
.eng-exit-card span{font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.18em;color:var(--muted)}
.eng-exit-card b{display:block;margin-top:18px;font:600 clamp(19px,1.8vw,24px)/1.2 var(--font-d);
  color:var(--text);transition:color .35s var(--ease)}
.eng-exit-card p{margin:11px 0 0;font:400 var(--fs-micro)/1.65 var(--font-b);color:var(--muted)}
.eng-exit-card i{display:inline-block;margin-top:20px;font:500 var(--fs-nano)/1 var(--font-m);
  font-style:normal;letter-spacing:.16em;color:var(--turq)}
.eng-exit-card:hover,.eng-exit-card:focus-visible{background:rgba(0,206,209,.045)}
.eng-exit-card:hover b,.eng-exit-card:focus-visible b{color:var(--turq-soft)}
.eng-back{margin:34px 0 0}
.engine-page #lands{padding-bottom:40px}

/* ---- JS 無し：カルーセルは3つのオルガンを縦に積んだ静的ドキュメントになる。
        ステーションは素の in-page アンカーとして生き、導管は装置の全長を示す ---- */
html:not(.js) .eng-viewport{overflow:visible}
html:not(.js) .eng-track{display:block}
html:not(.js) .eng-organ{min-width:0;padding-bottom:8px}
html:not(.js) .eng-organ+.eng-organ{border-top:1px solid var(--line)}
html:not(.js) .eng-ctl{display:none}
html:not(.js) .eng-conduit-fill{width:100%;opacity:.42}

/* ================= Chemical library（/technology/chemical-library/）=================
   計器そのものは engine ページの .eng-instrument をそのまま使い回す。ここで足すのは
   図の脇に仕様を並べる2カラム枠と、2つの図の固有要素だけ。
   色の役割も engine 図と同一に保つ：turq＝プロセス／母集団、
   gold＝読み出し・成果（ヒット／選抜されたもの／焦点化世代）。
   このページは静止図のみ。engine の計器と違いアニメーションは持たせない
   （カルーセルの [data-active] が無く、開いている図が常に1つではないため）。 */
.lib-frame{margin-top:34px;display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,1fr);
  gap:34px;align-items:start}
/* 世代図は単独で置く。全幅に伸ばすと棒が間延びするので中央で幅を止める */
/* 幅は2カラム側の計器（≒540px）と近い実寸になるところで止める。
   広げると同じ --eg-fs でも図中の文字が相対的に小さく見え、2図の質感がずれる */
.lib-frame-wide{grid-template-columns:minmax(0,1fr);max-width:640px;margin-inline:auto}

/* 図1 ループ ── ライブラリ＝棒の積層。.on の2本＝焦点化された部分集合 */
.eg-cl-stack rect{fill:rgba(0,206,209,.24)}
.eg-cl-stack rect.on{fill:var(--gold-deep);fill-opacity:.82}
/* 図1 下段 ── 灰の連なり（母集団）から金が数個だけ立つ。個数に意味はない */
.eg-cl-marks rect{fill:none;stroke:rgba(0,206,209,.26);stroke-width:1}
.eg-cl-marks rect.on{fill:var(--gold-deep);fill-opacity:.82;stroke:#e9d3a6;stroke-width:1;
  filter:drop-shadow(0 0 5px rgba(202,164,92,.45))}

/* 図2 世代 ── G1 だけ turq（多様性＝比較の基準）、G2-G4 は gold を段階的に濃く。
   縦軸は相対なので目盛りを置かない。「上がっている」は .eg-cl-base の破線
   （G1 の頂点をチャート全幅へ伸ばしたもの）1本だけで読ませる */
.eg-cl-bar-base{fill:rgba(0,206,209,.14);stroke:rgba(0,206,209,.42);stroke-width:1}
.eg-cl-bar{fill:var(--gold-deep);stroke:var(--gold-deep);stroke-width:1}
.eg-cl-bar.s2{fill-opacity:.12}
.eg-cl-bar.s3{fill-opacity:.2}
.eg-cl-bar.s4{fill-opacity:.3}
.eg-cl-cap path{fill:none;stroke:#e9d3a6;stroke-width:1.6;
  filter:drop-shadow(0 0 5px rgba(202,164,92,.45))}
.eg-cl-base{fill:none;stroke:rgba(0,206,209,.5);stroke-width:1;stroke-dasharray:4 4}
.eg-cl-brace path{fill:none;stroke:var(--gold-deep);stroke-width:1;opacity:.55}
/* ベースラインのラベルは G3/G4 の棒に重なる位置にしか置き場所がない（狭幅では
   --eg-fs が 19px まで上がるので、棒の外に逃がすと必ず隣とぶつかる）。
   計器の地色で縁取りして棒の上でも読めるようにする＝paint-order で塗りの下に stroke */
.eng-instrument text.eg-cl-baselbl{font-size:var(--eg-fs-xs);letter-spacing:.1em;fill:#8b98a4;
  stroke:#070a10;stroke-width:3;paint-order:stroke;stroke-linejoin:round}

/* 世代の呼び名は SVG ではなく HTML に置く。狭幅では --eg-fs が 19px まで上がる
   仕様なので、"SCREEN-INFORMED" 級の語を viewBox 内に置くと隣の棒のラベルと
   必ず重なる。HTML なら折り返せるし、一行の説明も添えられる */
.lib-gen{margin:22px 0 0;padding:0;list-style:none;display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:var(--line)}
.lib-gen li{padding:16px 15px;background:var(--surface)}
.lib-gen b{display:block;font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.18em;
  color:var(--gold-deep)}
.lib-gen strong{display:block;margin-top:11px;font:600 var(--fs-meta)/1.3 var(--font-d);
  color:var(--text)}
.lib-gen span{display:block;margin-top:8px;font:400 var(--fs-micro)/1.6 var(--font-b);
  color:var(--muted)}
/* G1 は焦点化世代ではなく基準。図で turq にしてある区別を色で引き継ぐ */
.lib-gen li:first-child b{color:var(--turq)}
.lib-gen li:first-child strong{color:var(--muted)}

@media(max-width:1080px){
  .lib-frame{grid-template-columns:1fr;gap:28px}
}
@media(max-width:860px){
  .lib-gen{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:480px){
  .lib-gen{grid-template-columns:1fr}
}

/* ---- 自動で動くものを全部止める ---- */
@media(prefers-reduced-motion:reduce){
  /* 図中の段階演出は要素ごとに :nth-child 等で詳細度が上がるため、
     #engine を付けて一括で確実に上書きする（既定値＝完成図に戻る） */
  #engine .eng-organ[data-active="true"] .eng-instrument svg *,
  .eng-organ[data-active="true"] .eng-cycle i::before{animation:none}
  .eng-conduit-fill,.eng-node,.eng-station,.eng-station b,
  .eng-handoff-link,.eng-exit-card,.eng-exit-card b,.eng-papers a{transition:none}
  .eng-viewport{scroll-behavior:auto}
}

/* ---- 狭幅 ---- */
@media(max-width:1080px){
  .eng-organ-body{grid-template-columns:1fr;gap:28px}
  .eng-organ{padding:32px 30px 0}
  .eng-station small{display:none}
}
@media(max-width:860px){
  .eng-under,.eng-exit{grid-template-columns:1fr}
  .eng-under article,.eng-exit-card{border-right:0;border-bottom:1px solid var(--hair)}
  .eng-under article:last-child,.eng-exit-card:last-child{border-bottom:0}
  .eng-scale{grid-template-columns:1fr}
  .eng-scale article{border-right:0;border-bottom:1px solid var(--hair)}
  .eng-scale article:last-child{border-bottom:0}
  .eng-handoff{justify-content:flex-start}
}
@media(max-width:640px){
  .engine-page .engine-hero+main #engine{padding-top:46px}
  .eng-carousel{margin-top:28px}
  .eng-organ{padding:26px 18px 0}
  .eng-organ-body{margin-top:24px}
  /* 計器の文字は viewBox 相対で、狭幅ほど縮む。3段そろえて上げ、
     390px 幅で実寸 13px を下回らないようにする（ラベルは短縮済み） */
  .eng-instrument{padding:14px;--eg-fs:19px;--eg-fs-s:19px;--eg-fs-xs:19px}
  .eng-instrument text.eg-ax-out,.eng-instrument text.eg-cy-head{font-size:19px}
  /* 縦軸ラベル（立体の垂直軸＝ライブラリ）は viewBox の高さいっぱいを使う。
     19px 一律拡大では 21 字が 272 の高さを越えて上下で見切れるため、
     この1本だけ実寸を下げ字送りも詰める（390px 実機で 13px 相当を確保） */
  .eng-instrument text.eg-ax-y{font-size:17px;letter-spacing:.01em}
  .eg-ax-brace path{stroke-width:1.15}
  /* 積層の上方フェードに添える注記も横に溢れるので実寸を下げる */
  .eng-instrument text.eg-3d-note{font-size:12px;letter-spacing:.02em}
  /* 03 のサイクル/中央ラベルは狭幅で3語が重なるので字送りをさらに詰める
     （要素＋クラスで .eng-instrument text に勝たせる） */
  .eng-instrument text.eg-cy-lab,.eng-instrument text.eg-cy-mid{letter-spacing:.005em}
  /* 01/02：狭幅の 19px 一律拡大では、読み出しパネル注記・凡例・転写産物ラベル・
     長い軸注記が横並び固定レイアウトの枠を溢れる。要素＋クラスで実寸を下げ字送りを
     詰めて収める（いずれも一次ラベルではなく注記なので 13px 下限は適用しない）。
     元図の担当は 01=デスクトップのみ、02=production の 19px バンプ未適用の 320px で
     確認しており、実機の狭幅で溢れていた——ここで解消する */
  .eng-instrument text.eg-ax{letter-spacing:.02em}
  .eng-instrument text.eg-note,
  .eng-instrument text.eg-site-lbl{font-size:11.5px;letter-spacing:.02em}
  .eg-legend text{font-size:12px;letter-spacing:.02em}
  .eg-iso text{font-size:12px;letter-spacing:.005em}
  .eng-instrument text.eg-scale-note{font-size:12px;letter-spacing:.02em}
  /* 02 の READOUT 見出しは長文（… OUTCOME · MoA）で、ライブラリ・フィールド
     導入により x=138 起点になったため 02 に限ってさらに下げる。
     x=196 起点になった PRE-mRNA ラベル等の eg-ax も右端見切れ防止で下げる */
  #spliceverse .eng-instrument text.eg-ax-out{font-size:12px;letter-spacing:.02em}
  #spliceverse .eng-instrument text.eg-ax{font-size:13px;letter-spacing:.02em}
  .eng-station{padding:40px 6px 16px}
  .eng-station b{font:600 var(--fs-nano)/1.25 var(--font-d)}
  .eng-station-no{letter-spacing:.1em}
  .eng-spec>div,.eng-under dl>div{grid-template-columns:1fr;gap:6px}
  .eng-under article{padding:26px 20px 24px}
  .eng-exit-card{padding:26px 20px 22px}
  .eng-ctl{gap:12px;padding:14px 16px}
  .eng-status{min-width:0;letter-spacing:.1em}
  .eng-arrow{width:38px;height:38px}
}

/* ============================================================
   Engine Select — the discovery technologies as a playable roster
   ============================================================ */
.eng-carousel{position:relative;overflow:hidden;border-color:rgba(106,242,189,.22);
  background:
    radial-gradient(68% 42% at 50% 18%,rgba(0,206,209,.13),transparent 72%),
    linear-gradient(180deg,#070c14 0%,#05070c 44%,#07090e 100%);
  box-shadow:0 32px 90px rgba(0,0,0,.34),inset 0 1px rgba(255,255,255,.025)}
.eng-carousel::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background:
    repeating-linear-gradient(0deg,transparent 0 4px,rgba(255,255,255,.012) 5px),
    linear-gradient(115deg,transparent 18%,rgba(0,206,209,.035) 48%,transparent 76%);
  mix-blend-mode:screen}
.eng-carousel::after{content:"";position:absolute;left:12%;right:12%;top:298px;height:118px;
  border-radius:50%;pointer-events:none;background:radial-gradient(ellipse,rgba(0,206,209,.19),transparent 68%);
  filter:blur(14px);opacity:.75;transition:transform .8s var(--ease)}
.eng-carousel[data-selection="0"]::after{transform:translateX(-28%)}
.eng-carousel[data-selection="2"]::after{transform:translateX(28%)}

.eng-select-head{position:relative;z-index:2;display:grid;grid-template-columns:1fr auto 1fr;
  align-items:center;gap:20px;padding:18px 24px;border-bottom:1px solid var(--hair);
  font-family:var(--font-m);letter-spacing:.16em}
.eng-select-head b{font:500 var(--fs-nano)/1 var(--font-m);color:var(--turq-soft);text-align:center}
/* ENGINE SELECT ラベルを削除したので、残る要素は明示的に列を指定する。
   これがないと b が左の 1fr に落ちて中央揃えが崩れる */
.eng-select-head b{grid-column:2}

.eng-spine{position:relative;z-index:2;border-bottom:1px solid rgba(0,206,209,.16);perspective:1100px}
.eng-stations{grid-template-columns:repeat(3,minmax(0,1fr));min-height:330px;
  align-items:end;padding:26px 0 0;touch-action:pan-y;cursor:grab;user-select:none}
.eng-stations a{-webkit-user-drag:none}
.eng-stations.is-grabbing{cursor:grabbing}
.eng-conduit{left:0;right:0;top:auto;bottom:27px;background:rgba(0,206,209,.16)}
.eng-conduit-fill{background:linear-gradient(90deg,var(--turq),var(--ice),var(--gold-deep));
  box-shadow:0 0 18px rgba(0,206,209,.48)}

.eng-station{align-self:end;min-height:290px;padding:15px 15px 49px;transform-style:preserve-3d;
  position:relative;z-index:1;cursor:pointer;touch-action:pan-y;
  border:1px solid transparent;border-bottom:0;
  background:linear-gradient(180deg,rgba(14,24,34,.24),rgba(5,8,13,.62));
  opacity:.5;filter:saturate(.45);transform:translateY(25px) scale(.9) rotateY(0deg);
  transition:transform .7s var(--ease),opacity .5s var(--ease),filter .5s var(--ease),
    background .5s var(--ease),border-color .5s var(--ease),box-shadow .5s var(--ease)}
.eng-station[data-position="before"]{transform:translateY(25px) scale(.9) rotateY(7deg);transform-origin:right center}
.eng-station[data-position="after"]{transform:translateY(25px) scale(.9) rotateY(-7deg);transform-origin:left center}
.eng-station::before{top:0;bottom:0;background:linear-gradient(transparent,rgba(0,206,209,.14),transparent)}
.eng-station.is-active{z-index:2;opacity:1;filter:none;transform:translateY(0) scale(1.045);
  border-color:rgba(0,206,209,.33);
  background:radial-gradient(circle at 50% 38%,rgba(0,206,209,.15),transparent 47%),
    linear-gradient(180deg,rgba(12,24,34,.88),rgba(5,8,13,.94));
  box-shadow:0 28px 62px rgba(0,0,0,.38),inset 0 0 44px rgba(0,206,209,.035)}
.eng-station:hover:not(.is-active),.eng-station:focus-visible:not(.is-active){opacity:.82;filter:saturate(.9);
  transform:translateY(14px) scale(.94)}
.eng-station:focus-visible:not(.is-active){outline:1px dashed rgba(125,139,152,.32);outline-offset:-6px;
  box-shadow:inset 0 0 0 1px rgba(125,139,152,.08)}
.eng-node{top:auto;bottom:21px;z-index:4}
.eng-station-no{position:absolute;top:17px;left:18px;font-size:var(--fs-nano)}
.eng-station>b{margin-top:8px;font-size:clamp(14px,1.5vw,20px);color:#87949e}
.eng-station small{margin-top:7px;font-size:var(--fs-nano)}
.eng-station.is-active>b{color:var(--ice);text-shadow:0 0 24px rgba(0,206,209,.22)}

.eng-avatar{position:relative;display:block;width:min(150px,72%);height:154px;margin:7px auto 15px;
  border-radius:50%;transform:translateZ(18px);transition:transform .7s var(--ease),filter .7s var(--ease)}
.eng-avatar::before{content:"";position:absolute;inset:6%;border:1px solid rgba(0,206,209,.18);border-radius:50%;
  box-shadow:inset 0 0 32px rgba(0,206,209,.07),0 0 28px rgba(0,206,209,.05)}
.eng-avatar::after{content:"";position:absolute;left:8%;right:8%;bottom:2px;height:10px;border-radius:50%;
  background:radial-gradient(ellipse,var(--turq),transparent 68%);filter:blur(6px);opacity:.22}
.eng-station.is-active .eng-avatar{transform:translateZ(34px) translateY(-4px);filter:drop-shadow(0 0 14px rgba(0,206,209,.22));
  animation:engAvatarFloat 4.8s var(--ease) infinite}
.eng-station.is-active .eng-avatar::before{border-color:rgba(107,242,189,.46);animation:engAvatarPulse 3.2s var(--ease) infinite}
@keyframes engAvatarFloat{0%,100%{transform:translateZ(34px) translateY(-4px)}50%{transform:translateZ(34px) translateY(-10px)}}
@keyframes engAvatarPulse{0%,100%{transform:scale(.98);opacity:.55}50%{transform:scale(1.04);opacity:1}}

.eg-av-line{stroke-width:1.1}
.eg-av-mx-cell{fill:rgba(0,206,209,.07);stroke:var(--turq);stroke-width:1.1}
.eg-av-mx-hit{fill:var(--gold-deep);stroke:#e9d3a6;stroke-width:1.2}
.eng-station.is-active .eng-avatar-matrix .eg-av-mx-ring2{animation:engAvatarPulse 3.2s var(--ease) infinite}
.eng-station.is-active .eng-avatar-splice .eg-av-sv-detail:first-of-type{animation:engAvatarPulse 3.2s var(--ease) infinite}
.eng-station.is-active .eng-avatar-sar .eg-av-sar-halo{animation:engAvatarPulse 3.2s var(--ease) infinite}
@media(prefers-reduced-motion:reduce){
  .eng-station.is-active .eng-avatar-matrix .eg-av-mx-ring2,
  .eng-station.is-active .eng-avatar-splice .eg-av-sv-detail:first-of-type,
  .eng-station.is-active .eng-avatar-sar .eg-av-sar-halo{animation:none}
}

.eng-viewport{position:relative;z-index:1;overflow:hidden;touch-action:pan-y;
  background:linear-gradient(180deg,rgba(4,8,13,.7),rgba(5,7,12,.96))}
.eng-viewport.is-grabbing{cursor:grabbing}
.eng-track{transform:translate3d(calc(var(--eng-index,0) * -100%),0,0);
  transition:transform .68s cubic-bezier(.22,.82,.22,1);will-change:transform}
.eng-organ{padding:46px 44px 0;opacity:.18;transform:scale(.985);transition:opacity .45s var(--ease),transform .7s var(--ease)}
.eng-organ[data-active="true"]{opacity:1;transform:scale(1)}
.eng-organ-head{position:relative;max-width:82ch}
.eng-organ-no{padding:8px 10px;border:1px solid rgba(0,206,209,.28)}
.eng-organ-head h3{font-size:clamp(34px,4.5vw,62px);letter-spacing:-.035em}
.eng-organ-role{max-width:70ch}
.eng-instrument{position:relative;box-shadow:inset 0 0 40px rgba(0,206,209,.025),0 20px 45px rgba(0,0,0,.16)}
.eng-ctl{position:relative;z-index:3;gap:24px;padding:16px 24px;background:rgba(3,7,11,.9)}
.eng-arrow{width:auto;min-width:94px;height:44px;padding:0 15px;gap:11px;border-color:rgba(0,206,209,.22);
  font:500 16px/1 var(--font-m)}
.eng-arrow small{font:500 var(--fs-nano)/1 var(--font-m);letter-spacing:.15em;color:#72818d}
.eng-arrow:hover small,.eng-arrow:focus-visible small{color:var(--turq-soft)}
.eng-status{position:relative;min-width:310px;color:var(--ice)}

@media(prefers-reduced-motion:reduce){
  .eng-station,.eng-avatar,.eng-organ,.eng-carousel::after,.eng-track{transition:none}
  .eng-station.is-active .eng-avatar,.eng-station.is-active .eng-avatar::before{animation:none}
}
@media(max-width:860px){
  .eng-select-head{grid-template-columns:1fr}.eng-select-head b{grid-column:1}
  .eng-stations{grid-template-columns:repeat(3,minmax(0,1fr));min-height:278px}
  .eng-station{min-height:242px;padding-left:8px;padding-right:8px}
  .eng-avatar{width:112px;max-width:88%;height:118px}
  .eng-organ{padding:38px 30px 0}
}
@media(max-width:640px){
  .eng-select-head{padding:14px 16px}
  .eng-stations{grid-template-columns:repeat(3,minmax(0,1fr));min-height:218px;padding-top:16px}
  .eng-conduit{left:0;right:0;bottom:20px}
  /* 番号ラベルを13pxにすると狭幅3枚並びでは2行になる（要113px / 枠113px）。
     上側に2行ぶんの余白を確保し、アバターに重ならないようにする */
  .eng-station{min-height:196px;padding:42px 5px 38px;transform:translateY(17px) scale(.88)}
  .eng-station[data-position="before"],.eng-station[data-position="after"]{transform:translateY(17px) scale(.88)}
  .eng-station.is-active{transform:translateY(0) scale(1.04)}
  .eng-station:hover:not(.is-active),.eng-station:focus-visible:not(.is-active){transform:translateY(10px) scale(.92)}
  .eng-node{bottom:14px}
  .eng-station-no{top:10px;left:4px;right:4px;text-align:center;letter-spacing:.02em}
  .eng-avatar{width:80px;height:91px;margin:10px auto 9px}
  .eg-av-line{stroke-width:1.9}
  .eg-av-mx-detail,.eg-av-sv-detail,.eg-av-sar-detail{display:none}
  .eng-station>b{font-size:var(--fs-nano)}.eng-station small{font-size:var(--fs-nano);letter-spacing:.06em}
  .eng-organ{padding:32px 18px 0}.eng-organ-head h3{font-size:34px}
  .eng-ctl{gap:8px;padding:12px}.eng-arrow{min-width:46px;width:46px;padding:0}.eng-arrow small{display:none}.eng-status{min-width:0}
}
/* 390px 級では、矢印と同じ行に置くと状態行が 2 行になり、区切りの em ダッシュ
   だけが 1 行目の末尾に取り残される。13px は可読性の下限なので詰められない。
   状態行を独立した行に上げて幅を渡し、字送りを .06em に寄せると、
   いちばん長い "TECHNOLOGY 03 / 03 — SAR by Selectivity" まで 1 行に収まる。
   矢印は下の行に降り、左右の端という位置関係はそのまま
   （文言は engine.js が実行時に書くので、ここは CSS だけで直す） */
@media(max-width:480px){
  .eng-ctl{flex-wrap:wrap;row-gap:12px;justify-content:space-between}
  .eng-status{order:-1;flex:1 0 100%;letter-spacing:.06em}
}

/* ============================================================
   moa: /technology/moa/ — general RNA mechanism-of-action classes
   ============================================================
   このページは一般的なRNA作用機序を説明する。既存の .asset-stage /
   .asset-profile / .asset-figure / .asset-evidence をそのまま土台にして、
   足りない三つだけをここで足す：
     1. 開示境界のパネル（.moa-disclosure）
     2. 4ステップを1つずつ辿る計器（.moa-walk）
     3. 数値の「意味」の1行（.moa-evidence p）
   色の文法：現在地は ice + turq の線、到達点（04 / mRNA 分解）だけが金。
   既存の .asset-compound は flare 層で金だが、このページでは 04 に金を
   譲るので turq に戻す（既存ルールは触らず、ここで上書き）。
   .moa-walk の減衰は moa.js が .is-walkable を付けた後にしか効かない。
   JS 無し・prefers-reduced-motion では 4 ステップが同時に見える静止図。 */

/* ---- 01 開示境界 ---------------------------------------------------- */
.moa-page .moa-profile-stage{grid-template-columns:minmax(320px,.92fr) minmax(0,1.08fr)}
.moa-disclosure{display:flex;flex-direction:column;padding:30px}
.moa-disclosure h3{margin:12px 0 20px;font:600 clamp(1.3rem,1.9vw,1.85rem)/1.14 var(--font-d);letter-spacing:-.025em;color:var(--text)}
.moa-disclosure dl{display:grid;margin:0}
.moa-disclosure dl>div{display:grid;gap:8px;padding:18px 0;border-top:1px solid rgba(206,228,232,.09)}
.moa-disclosure dt{font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:.2em;color:var(--turq)}
.moa-disclosure .moa-undisclosed dt{color:var(--dim)}
.moa-disclosure dd{margin:0;color:var(--muted);font-size:.91rem;line-height:1.72}
.moa-disclosure>p{margin-top:auto;padding-top:22px;color:var(--dim);font:400 var(--fs-meta)/1.72 var(--font-b)}

/* ---- 02 歩行計器 ----------------------------------------------------- */
.moa-walk{border:1px solid rgba(227,235,236,.12);background:linear-gradient(135deg,rgba(9,14,19,.92),rgba(15,25,29,.72));box-shadow:inset 0 1px rgba(245,248,248,.045),0 36px 110px rgba(0,0,0,.38);overflow:hidden}
/* cinematic-visuals.js が canvas を firstChild に差すので、1345 の
   .asset-stage.cinematic-surface と同じ手当てをこの面にも。 */
.moa-walk.cinematic-surface{isolation:isolate}
.moa-walk.cinematic-surface>:not(.cinematic-particles):not(.cinematic-overlay){position:relative;z-index:2}
.moa-page .moa-figure{border-bottom:1px solid rgba(227,235,236,.09)}

.moa-walk-nav{display:flex;align-items:center;gap:8px;padding:12px 18px;border-bottom:1px solid rgba(227,235,236,.09)}
.moa-walk-nav button{position:relative;height:36px;border:1px solid rgba(227,235,236,.14);background:transparent;color:#8fa3ab;font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em;cursor:pointer;transition:color .3s,border-color .3s,background .3s}
.moa-walk-nav button:hover:not(:disabled){color:var(--turq-soft);border-color:rgba(0,206,209,.42)}
.moa-walk-nav button:disabled{opacity:.32;cursor:default}
.moa-walk-arrow{width:38px;font-size:15px;line-height:1}
.moa-walk-dot{min-width:48px}
.moa-walk-dot.is-active{color:var(--ice);border-color:rgba(227,235,236,.3)}
/* 現在地マーカー = ice + turq の線。04 だけ終端が金に着地する。 */
.moa-walk-dot.is-active::after{content:"";position:absolute;left:-1px;right:-1px;bottom:-1px;height:2px;background:linear-gradient(90deg,#f0f3f3,var(--turq));box-shadow:0 0 10px var(--turq-glow)}
.moa-walk-dot:last-of-type.is-active::after{background:linear-gradient(90deg,#f0f3f3,var(--turq) 56%,var(--gold-deep))}
.moa-walk-count{margin-left:auto;font:500 var(--fs-nano) var(--font-m);letter-spacing:.18em;color:#6b7986}

.moa-step-list{display:grid;grid-template-columns:repeat(4,1fr);margin:0;padding:0;list-style:none}
.moa-step-card{position:relative;display:grid;align-content:start;gap:11px;padding:28px 24px 30px;border-right:1px solid rgba(227,235,236,.08)}
.moa-step-card:last-child{border-right:0}
.moa-step-no{font:500 var(--fs-nano)/1.3 var(--font-m);letter-spacing:.2em;color:var(--dim)}
.moa-step-card h3{font:600 clamp(1.02rem,1.3vw,1.28rem)/1.2 var(--font-d);letter-spacing:-.02em;color:#dcecef}
.moa-step-card p{color:var(--muted);font-size:.88rem;line-height:1.74}
.moa-step-card small{margin-top:4px;font:500 var(--fs-nano)/1.55 var(--font-m);letter-spacing:.12em;color:#6b7986}
/* 非現在ステップの文字は薄くしない（読める状態を落とさない）。現在地は
   足す側だけで示す：上端の線・わずかな染み・番号の turq。 */
.moa-walk.is-walkable .moa-step-card{cursor:pointer;transition:background .45s var(--ease)}
.moa-walk.is-walkable .moa-step-card.is-active{background:linear-gradient(180deg,rgba(0,206,209,.055),transparent 62%)}
.moa-walk.is-walkable .moa-step-card.is-active::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:linear-gradient(90deg,#f0f3f3,var(--turq));box-shadow:0 0 12px var(--turq-glow)}
.moa-walk.is-walkable .moa-step-card.is-active .moa-step-no{color:var(--turq)}
.moa-walk.is-walkable .moa-step-card[data-moa-step="4"].is-active{background:linear-gradient(180deg,rgba(202,164,92,.06),transparent 62%)}
.moa-walk.is-walkable .moa-step-card[data-moa-step="4"].is-active::before{background:linear-gradient(90deg,#f0f3f3,var(--turq) 56%,var(--gold-deep))}
.moa-walk.is-walkable .moa-step-card[data-moa-step="4"].is-active .moa-step-no{color:var(--gold-deep)}

/* ---- 03 図の段階表示 ------------------------------------------------- */
/* 既に歩いた段は薄く残る（通ってきた道）、これからの段はほぼ消える。 */
.moa-page .moa-figure [data-moa-step]{transition:opacity .5s var(--ease)}
.moa-walk.is-walkable .moa-figure [data-moa-step].is-past{opacity:.4}
.moa-walk.is-walkable .moa-figure [data-moa-step].is-future{opacity:.12}
.moa-walk.is-walkable .moa-figure [data-moa-step].is-current{opacity:1}
.moa-walk.is-walkable .moa-figure .asset-steps g.is-current text{fill:var(--ice)}
.moa-walk.is-walkable .asset-mobile-mechanism article{transition:opacity .4s var(--ease)}
.moa-walk.is-walkable .asset-mobile-mechanism article:not(.is-active){opacity:.44}
/* 化合物は 01（起点）なので turq。金は 04 にしか出さない。 */
.moa-page .moa-figure .asset-compound path{fill:rgba(0,206,209,.07);stroke:var(--turq)}
.moa-page .moa-figure .asset-compound circle{fill:#e6fbfb;filter:drop-shadow(0 0 11px rgba(0,206,209,.5))}
.moa-page .moa-figure .asset-callout.hot path{stroke:rgba(0,206,209,.55)}
.moa-page .moa-figure .asset-callout.hot text{fill:#9fe7e8}
/* 02：占拠された構造と RBP の接触に×、そして離れていく矢。 */
.moa-page .moa-figure .moa-block path{fill:none;stroke:var(--turq);stroke-width:3;stroke-linecap:round}
.moa-page .moa-figure .moa-block-lift,.moa-page .moa-figure .moa-block-tip{stroke:rgba(0,206,209,.6);stroke-width:2}
/* 03：塩基対がほどけ、断片が離れはじめる。 */
.moa-page .moa-figure .moa-fray path{fill:none;stroke:rgba(159,231,232,.85);stroke-width:2.5;stroke-linecap:round}
.moa-page .moa-figure .moa-fray circle{fill:#9fe7e8}
/* 04：到達点だけが金。 */
.moa-page .moa-figure .asset-decay path{stroke:var(--gold-deep)}
.moa-page .moa-figure .asset-decay circle{fill:var(--gold-deep);filter:drop-shadow(0 0 8px rgba(202,164,92,.6))}
.moa-page .moa-figure .asset-callout[data-moa-step="4"] path{stroke:rgba(202,164,92,.55)}
.moa-page .moa-figure .asset-callout[data-moa-step="4"] text{fill:#d7c39e}
.moa-page .moa-figure .asset-steps g[data-moa-step="4"] circle{fill:var(--gold-deep);filter:drop-shadow(0 0 6px rgba(202,164,92,.7))}
.moa-page .moa-figure .asset-steps g[data-moa-step="4"] text{fill:#c3b294}

/* ---- 04 数値の意味 --------------------------------------------------- */
.moa-evidence article{display:flex;flex-direction:column}
.moa-evidence strong{font-size:clamp(1.85rem,2.9vw,2.9rem)}
.moa-evidence p{margin-top:14px;color:#7e8b96;font:400 var(--fs-meta)/1.72 var(--font-b);letter-spacing:0;text-transform:none}
.moa-portfolio-note{margin-top:20px}

/* ---- 05 エンジンへの導線 --------------------------------------------- */
.moa-deep-links{display:grid;border-top:1px solid var(--line)}

/* ---- 06 レスポンシブ ------------------------------------------------- */
@media(max-width:1180px){
  .moa-step-list{grid-template-columns:repeat(2,1fr)}
  .moa-step-card{border-right:1px solid rgba(227,235,236,.08)}
  .moa-step-card:nth-child(2n),.moa-step-card:last-child{border-right:0}
  .moa-step-card:nth-child(-n+2){border-bottom:1px solid rgba(227,235,236,.08)}
}
@media(max-width:980px){
  .moa-page .moa-profile-stage{grid-template-columns:1fr}
  .moa-disclosure{padding:26px}
  .moa-disclosure>p{margin-top:0}
}
@media(max-width:680px){
  .moa-page #asset{padding-top:96px}
  .moa-walk{margin-left:-24px;margin-right:-24px;border-left:0;border-right:0}
  .moa-walk-nav{flex-wrap:wrap;padding:12px 24px}
  .moa-walk-count{width:100%;margin-left:0;padding-top:4px}
  .moa-step-list{grid-template-columns:1fr}
  .moa-step-card{padding:24px;border-right:0}
  .moa-step-card:not(:last-child){border-bottom:1px solid rgba(227,235,236,.08)}
  .moa-disclosure{padding:24px}
  .moa-evidence strong{font-size:2.3rem}
}
/* 減衰も遷移も止める。moa.js はこの環境では起動しないので .is-walkable は
   付かないが、CSS 側でも二重に断っておく（将来 JS の条件が変わっても
   静止図に戻れるように）。 */
@media(prefers-reduced-motion:reduce){
  .moa-page .moa-figure [data-moa-step],.moa-walk.is-walkable .moa-step-card,
  .moa-walk.is-walkable .asset-mobile-mechanism article{transition:none}
  .moa-walk.is-walkable .moa-figure [data-moa-step].is-past,
  .moa-walk.is-walkable .moa-figure [data-moa-step].is-future,
  .moa-walk.is-walkable .asset-mobile-mechanism article:not(.is-active){opacity:1}
}

/* ============================================================
   moa refresh: three RNA control modes (2026-08)
   ============================================================ */
.moa-page{--moa-mint:#62e4c1;--moa-blue:#7eb8ff;--moa-coral:#ff8f73;--moa-ink:#07101b}
.moa-page .moa-hero{min-height:min(650px,72vh);display:flex;align-items:flex-end;padding-top:118px;overflow:hidden}
.moa-page .moa-hero::after{content:"";position:absolute;inset:auto -8% -35% 38%;height:90%;background:radial-gradient(ellipse,rgba(0,206,209,.13),transparent 67%);pointer-events:none}
.moa-page .moa-hero .detail-hero-field{opacity:.2}
.moa-hero-illustration{position:absolute;inset:0 0 0 auto;z-index:1;width:62%;height:100%;object-fit:cover;object-position:center;opacity:.34;mix-blend-mode:screen;pointer-events:none;-webkit-mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.45) 20%,#000 48%,#000 100%);mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.45) 20%,#000 48%,#000 100%)}
.moa-hero-grid{position:relative;z-index:2;display:grid;grid-template-columns:minmax(0,1.18fr) minmax(320px,.82fr);gap:26px 7vw;align-items:end;padding-bottom:34px}
.moa-hero-title h1{max-width:780px;font-size:clamp(3.8rem,7.2vw,7.2rem);line-height:.86;letter-spacing:-.07em}
.moa-hero-title .breadcrumb{margin-bottom:24px}
.moa-hero-copy{align-self:end;max-width:530px;padding:0 0 13px 30px;border-left:1px solid rgba(98,228,193,.34)}
.moa-hero-copy p{margin:14px 0 22px;color:#b2c2c9;font-size:clamp(1rem,1.25vw,1.16rem);line-height:1.6}
.moa-hero-rail{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,1fr);margin-top:2px;border-top:1px solid rgba(220,239,240,.16);border-bottom:1px solid rgba(220,239,240,.16)}
.moa-hero-rail span{padding:13px 18px;color:#d9e9eb;font:500 var(--fs-nano)/1.35 var(--font-m);letter-spacing:.16em;border-right:1px solid rgba(220,239,240,.12)}
.moa-hero-rail span:last-child{border-right:0}
.moa-hero-rail b{margin-right:18px;color:var(--moa-mint);font-weight:500}

/* ---- careers hero: placeholder illustration (2026-08) ----
   Same two-layer arrangement as .moa-hero-illustration above. The raster sits
   between the canvas glyph field and the text grid, so the field is dimmed to
   .2 for the same reason MoA dims it: two decorative layers at full strength
   read as noise behind the type. .detail-hero-grid already carries z-index:2,
   which keeps the badge, the breadcrumb and the h1 above both layers, and
   .detail-hero has overflow:hidden so the 62%-wide raster cannot spill.
   The image itself is a temporary in-repo placeholder and is meant to be
   swapped for a real photograph; only the src changes when it is. */
.careers-page .detail-hero .detail-hero-field{opacity:.2}
.careers-hero-illustration{position:absolute;inset:0 0 0 auto;z-index:1;width:62%;height:100%;object-fit:cover;object-position:center;opacity:.34;mix-blend-mode:screen;pointer-events:none;-webkit-mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.45) 20%,#000 48%,#000 100%);mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.45) 20%,#000 48%,#000 100%)}
@media(max-width:680px){
  /* full width, vertical fade, dimmer: the same override MoA takes below 680 */
  .careers-hero-illustration{width:100%;object-position:58% center;opacity:.2;-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.22),#000 48%,rgba(0,0,0,.38));mask-image:linear-gradient(180deg,rgba(0,0,0,.22),#000 48%,rgba(0,0,0,.38))}
}

.moa-principle{position:relative;padding-bottom:120px;background:linear-gradient(180deg,rgba(5,8,14,.35),rgba(8,17,24,.78))}
.moa-principle-map{display:grid;grid-template-columns:31% 12% 57%;min-height:370px;margin-top:52px;border:1px solid rgba(220,239,240,.13);background:linear-gradient(125deg,rgba(9,18,28,.96),rgba(10,23,29,.78));box-shadow:0 35px 100px rgba(0,0,0,.3);overflow:hidden}
.principle-input{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;border-right:1px solid rgba(220,239,240,.1)}
.principle-input strong{margin-top:25px;color:#e0eff0;font:600 clamp(1.1rem,1.8vw,1.55rem) var(--font-d);letter-spacing:.04em;text-align:center}
.principle-input small{margin-top:9px;color:#71858d;font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.12em;text-align:center}
.rna-knot{position:relative;width:150px;height:112px;margin-top:26px}
.rna-knot i{position:absolute;left:7px;right:7px;height:2px;background:linear-gradient(90deg,transparent,var(--moa-mint),#dffaf4,var(--moa-mint),transparent);transform-origin:center;box-shadow:0 0 12px rgba(98,228,193,.28)}
.rna-knot i:nth-child(1){top:25px;transform:rotate(26deg)}
.rna-knot i:nth-child(2){top:49px;transform:rotate(-29deg)}
.rna-knot i:nth-child(3){top:73px;transform:rotate(25deg)}
.rna-knot i:nth-child(4){top:52px;left:38px;right:38px;transform:rotate(90deg)}
.rna-knot b{position:absolute;left:66px;top:44px;width:19px;height:19px;border:2px solid var(--moa-coral);background:#0a1720;transform:rotate(45deg);box-shadow:0 0 20px rgba(255,143,115,.45)}
.principle-branch{position:relative}
.principle-branch::before{content:"";position:absolute;left:0;top:50%;width:50%;height:1px;background:rgba(98,228,193,.45)}
.principle-branch::after{content:"";position:absolute;left:50%;top:16.66%;bottom:16.66%;width:1px;background:linear-gradient(var(--moa-mint),var(--moa-blue),var(--moa-coral));opacity:.55}
.principle-branch i{position:absolute;left:50%;right:0;height:1px;background:rgba(220,239,240,.23)}
.principle-branch i:nth-child(1){top:16.66%}.principle-branch i:nth-child(2){top:50%}.principle-branch i:nth-child(3){top:83.33%}
.principle-outcomes{display:grid;grid-template-rows:repeat(3,1fr)}
.principle-outcomes article{display:grid;grid-template-columns:70px minmax(170px,.8fr) minmax(180px,1fr);align-items:center;padding:22px 34px;border-bottom:1px solid rgba(220,239,240,.1);background:linear-gradient(90deg,rgba(98,228,193,.03),transparent);transition:background .3s}
.principle-outcomes article:nth-child(2){background:linear-gradient(90deg,rgba(126,184,255,.035),transparent)}
.principle-outcomes article:nth-child(3){border-bottom:0;background:linear-gradient(90deg,rgba(255,143,115,.035),transparent)}
.principle-outcomes article:hover{background-color:rgba(255,255,255,.025)}
.principle-outcomes span{color:var(--moa-mint);font:500 var(--fs-nano) var(--font-m);letter-spacing:.16em}
.principle-outcomes article:nth-child(2) span{color:var(--moa-blue)}
.principle-outcomes article:nth-child(3) span{color:var(--moa-coral)}
.principle-outcomes b{color:#d8e8eb;font:500 clamp(.95rem,1.4vw,1.18rem)/1.45 var(--font-d);letter-spacing:.06em}
.principle-icon{position:relative;justify-self:stretch;height:76px;margin-left:22px;border-left:1px solid rgba(220,239,240,.08);opacity:.9}
.abundance-icon i{position:absolute;left:24px;right:42px;height:3px;border-radius:2px;background:linear-gradient(90deg,rgba(98,228,193,.25),var(--moa-mint),rgba(98,228,193,.15));box-shadow:0 0 10px rgba(98,228,193,.15)}
.abundance-icon i:nth-child(1){top:15px;width:45%}.abundance-icon i:nth-child(2){top:36px;width:66%}.abundance-icon i:nth-child(3){top:57px;width:82%}
.abundance-icon i::before,.abundance-icon i::after{content:"";position:absolute;top:-2px;width:7px;height:7px;border:1px solid var(--moa-mint);border-radius:50%;background:#0a1820}.abundance-icon i::before{left:14%}.abundance-icon i::after{right:16%}
.abundance-icon em{position:absolute;right:15px;top:14px;width:1px;height:46px;background:var(--moa-mint)}.abundance-icon em::before{content:"";position:absolute;right:-4px;top:0;width:8px;height:8px;border-top:1px solid var(--moa-mint);border-left:1px solid var(--moa-mint);transform:rotate(45deg)}
.isoform-icon::before{content:"";position:absolute;left:28px;right:18px;top:37px;height:1px;background:linear-gradient(90deg,var(--moa-blue),rgba(126,184,255,.12))}.isoform-icon::after{content:"";position:absolute;left:52%;top:18px;width:52px;height:38px;border:1px solid rgba(126,184,255,.45);border-left:0;border-radius:0 24px 24px 0}
.isoform-icon i{position:absolute;top:28px;width:30px;height:20px;border:1px solid var(--moa-blue);background:rgba(126,184,255,.1);z-index:1}.isoform-icon i:nth-child(1){left:24px}.isoform-icon i:nth-child(2){left:43%}.isoform-icon i:nth-child(3){right:18px}.isoform-icon i:nth-child(4){left:43%;top:8px;width:23px;height:15px;border-color:rgba(98,228,193,.72);background:rgba(98,228,193,.08)}.isoform-icon i:nth-child(5){left:43%;top:55px;width:23px;height:15px;border-color:rgba(126,184,255,.5);opacity:.6}.isoform-icon em{position:absolute;left:calc(43% + 11px);width:1px;background:rgba(126,184,255,.5)}.isoform-icon em:nth-of-type(1){top:22px;height:7px}.isoform-icon em:nth-of-type(2){top:48px;height:8px}
.surveillance-icon::before{content:"";position:absolute;left:24px;right:24px;top:35px;height:1px;background:linear-gradient(90deg,var(--moa-coral),rgba(255,143,115,.18))}.surveillance-icon i{position:absolute;z-index:1}.surveillance-icon i:nth-child(1){left:24px;top:22px;width:42px;height:27px;border:1px solid var(--moa-coral);background:rgba(255,143,115,.1)}.surveillance-icon i:nth-child(1)::after{content:"STOP";position:absolute;left:50%;top:5px;transform:translateX(-50%);color:#ffd8cf;font:500 var(--fs-nano) var(--font-m);letter-spacing:.02em}.surveillance-icon i:nth-child(2){left:48%;top:13px;width:46px;height:46px;border:1px solid var(--moa-coral);border-radius:50%;background:#09141d;box-shadow:0 0 18px rgba(255,143,115,.14)}.surveillance-icon i:nth-child(2)::after{content:"NMD";position:absolute;inset:0;display:grid;place-items:center;color:#ffd8cf;font:500 var(--fs-nano) var(--font-m);letter-spacing:.05em}.surveillance-icon em{position:absolute;right:var(--x);top:var(--y);width:15px;height:2px;background:var(--moa-coral);transform:rotate(var(--r))}.surveillance-icon em:nth-of-type(1){--x:38px;--y:18px;--r:18deg}.surveillance-icon em:nth-of-type(2){--x:16px;--y:32px;--r:-12deg}.surveillance-icon em:nth-of-type(3){--x:45px;--y:55px;--r:-24deg}.surveillance-icon em:nth-of-type(4){--x:10px;--y:62px;--r:16deg}
.principle-outcomes article:hover .principle-icon{opacity:1}.principle-outcomes article:hover .abundance-icon i{animation:principleAbundance 2.4s var(--ease) infinite}.principle-outcomes article:hover .isoform-icon i:nth-child(4){animation:principleIsoform 2.4s var(--ease) infinite}.principle-outcomes article:hover .surveillance-icon i:nth-child(2){animation:principleNmd 2.4s var(--ease) infinite}
@keyframes principleAbundance{50%{filter:brightness(1.55);transform:translateX(5px)}}
@keyframes principleIsoform{50%{box-shadow:0 0 18px rgba(98,228,193,.4);transform:translateY(-2px)}}
@keyframes principleNmd{50%{box-shadow:0 0 0 6px rgba(255,143,115,.07),0 0 24px rgba(255,143,115,.28)}}
.moa-boundary{margin:22px 0 0;padding-left:18px;border-left:2px solid rgba(220,239,240,.18);color:#758890;font:400 var(--fs-meta)/1.7 var(--font-b)}

/* OUR TARGET carries two targets, A and B. Each block gets a head row that also
   supplies the top edge .science-principles deliberately leaves open
   (border-top:0), so the two card grids close the same way. */
.moa-target-block+.moa-target-block{margin-top:60px}
.moa-target-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 20px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.moa-target-head h3{color:var(--ice);font:600 clamp(1.45rem,2.3vw,1.9rem)/1.12 var(--font-d);letter-spacing:-.025em}
.moa-target-tag{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.22em;color:var(--turq)}
.moa-target-platform{margin-left:auto;font-family:var(--font-m);font-size:var(--fs-micro);letter-spacing:.14em;color:var(--dim)}

.moa-modes{position:relative;padding-top:128px;padding-bottom:138px;background:radial-gradient(circle at 78% 40%,rgba(44,97,115,.11),transparent 40%),#060b12}
.moa-mode-switcher{margin-top:55px;border:1px solid rgba(220,239,240,.14);background:#08121b;box-shadow:0 42px 120px rgba(0,0,0,.42)}
.moa-mode-tabs{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid rgba(220,239,240,.13)}
.moa-mode-tabs button{position:relative;display:grid;grid-template-columns:42px 1fr;gap:5px 12px;min-height:112px;padding:25px 28px;text-align:left;border:0;border-right:1px solid rgba(220,239,240,.11);background:rgba(255,255,255,.012);color:#869aa2;cursor:pointer;transition:background .3s,color .3s}
.moa-mode-tabs button:last-child{border-right:0}
.moa-mode-tabs button::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:3px;transform:scaleX(0);transform-origin:left;background:var(--moa-mint);box-shadow:0 0 16px rgba(98,228,193,.4);transition:transform .38s var(--ease)}
.moa-mode-tabs button:nth-child(2)::after{background:var(--moa-blue);box-shadow:0 0 16px rgba(126,184,255,.4)}
.moa-mode-tabs button:nth-child(3)::after{background:var(--moa-coral);box-shadow:0 0 16px rgba(255,143,115,.4)}
.moa-mode-tabs button:hover,.moa-mode-tabs button:focus-visible{background:rgba(255,255,255,.03);color:#cfe1e4}
.moa-mode-tabs button[aria-selected="true"]{background:linear-gradient(180deg,rgba(98,228,193,.07),transparent);color:#eef9f7}
.moa-mode-tabs button:nth-child(2)[aria-selected="true"]{background:linear-gradient(180deg,rgba(126,184,255,.07),transparent)}
.moa-mode-tabs button:nth-child(3)[aria-selected="true"]{background:linear-gradient(180deg,rgba(255,143,115,.07),transparent)}
.moa-mode-tabs button[aria-selected="true"]::after{transform:scaleX(1)}
.moa-mode-tabs span{grid-row:1/3;color:var(--moa-mint);font:500 var(--fs-nano) var(--font-m);letter-spacing:.18em}
.moa-mode-tabs button:nth-child(2) span{color:var(--moa-blue)}
.moa-mode-tabs button:nth-child(3) span{color:var(--moa-coral)}
.moa-mode-tabs b{font:600 clamp(1rem,1.4vw,1.25rem) var(--font-d);letter-spacing:.045em}
.moa-mode-tabs small{font:500 var(--fs-nano) var(--font-m);letter-spacing:.13em;color:var(--muted)}
.moa-mode-panel{display:grid;grid-template-columns:minmax(320px,.82fr) minmax(0,1.18fr);min-height:590px}
.moa-mode-panel[hidden]{display:none}
.mode-copy{padding:58px 50px;border-right:1px solid rgba(220,239,240,.11)}
.mode-kicker{color:var(--moa-mint);font:500 var(--fs-nano) var(--font-m);letter-spacing:.17em}
.moa-mode-panel[data-mode-panel="2"] .mode-kicker{color:var(--moa-blue)}
.moa-mode-panel[data-mode-panel="3"] .mode-kicker{color:var(--moa-coral)}
.mode-copy h3{max-width:520px;margin:26px 0 22px;color:#e6f2f3;font:600 clamp(2rem,3.2vw,3.15rem)/1.02 var(--font-d);letter-spacing:-.04em}
.mode-copy>p{max-width:540px;color:#9caeb5;font-size:1rem;line-height:1.82}
.mode-copy dl{margin:36px 0 0}
.mode-copy dl>div{display:grid;grid-template-columns:minmax(138px,auto) 1fr;gap:18px;padding:15px 0;border-top:1px solid rgba(220,239,240,.1)}
.mode-copy dt{color:var(--muted);font:500 var(--fs-nano)/1.5 var(--font-m);letter-spacing:.1em}
.mode-copy dd{margin:0;color:#c0d0d4;font-size:.88rem;line-height:1.55}
.mode-visual{position:relative;min-height:590px;overflow:hidden;background-color:#07111a;background-image:linear-gradient(rgba(119,180,187,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(119,180,187,.045) 1px,transparent 1px),radial-gradient(circle at 50% 45%,rgba(49,126,128,.14),transparent 46%);background-size:56px 56px,56px 56px,auto}
.mode-visual::after{content:"CONCEPTUAL / NOT TO SCALE";position:absolute;right:22px;bottom:18px;color:var(--muted);font:500 var(--fs-nano) var(--font-m);letter-spacing:.12em}

.stability-core{position:absolute;left:12%;right:12%;top:30%;height:120px}
.stability-core .rna-line{position:absolute;left:0;right:0;top:54px;height:2px;background:linear-gradient(90deg,transparent,var(--moa-mint) 12%,#e0f8f3 50%,var(--moa-mint) 88%,transparent);box-shadow:0 0 15px rgba(98,228,193,.32)}
.stability-core .rna-loop{position:absolute;left:42%;top:11px;width:80px;height:87px;border:2px solid var(--moa-mint);border-left-color:transparent;border-radius:50%;transform:rotate(28deg)}
.compound-dot,.splice-compound{position:absolute;width:20px;height:20px;border:2px solid var(--moa-coral);background:#08121b;transform:rotate(45deg);box-shadow:0 0 22px rgba(255,143,115,.5)}
.stability-core .compound-dot{left:50%;top:48px}
.fate-split{position:absolute;left:9%;right:9%;bottom:16%;display:grid;grid-template-columns:1fr 1fr;gap:24px}
.fate-split>div{position:relative;min-height:115px;padding:22px;border:1px solid rgba(220,239,240,.12);background:rgba(7,17,26,.72)}
.fate-split i{display:inline-block;width:39px;height:2px;margin:32px 4px 0;background:var(--moa-mint)}
.fate-decay i{width:11px;background:var(--moa-coral);transform:rotate(-15deg)}

.exon-source,.poison-transcript{position:absolute;left:10%;right:10%;top:31%;display:flex;align-items:center}
.exon-source>i,.splice-paths i,.poison-transcript>i{flex:1;height:1px;background:rgba(126,184,255,.6)}
.exon-source .splice-compound{left:43%;top:-29px;border-color:var(--moa-coral)}
.splice-paths{position:absolute;left:10%;right:10%;bottom:15%;display:grid;gap:18px}
.splice-paths>div{display:flex;align-items:center;min-height:68px;padding:10px 16px;border:1px solid rgba(220,239,240,.1);background:rgba(7,17,26,.78)}
.splice-paths>div:nth-child(2) b{border-color:rgba(126,184,255,.5);background:rgba(126,184,255,.04)}

/* Six-second splice decision: compound engagement, exon recognition, then
   the two possible isoform readouts. The diagram never changes meaning; only
   the reading order is illuminated. */
.moa-mode-panel[data-mode-panel="2"] .splice-compound{animation:moaSpliceSignal 6s var(--ease) infinite}
.moa-mode-panel[data-mode-panel="2"] .exon-source b:nth-of-type(2){animation:moaSpliceDecision 6s var(--ease) infinite}
.moa-mode-panel[data-mode-panel="2"] .exon-source>i{background:linear-gradient(90deg,rgba(126,184,255,.25),var(--moa-blue),rgba(126,184,255,.25));background-size:220% 100%;animation:moaSpliceFlow 6s linear infinite}
.moa-mode-panel[data-mode-panel="2"] .splice-paths>div:first-child{animation:moaIsoformA 6s var(--ease) infinite}
.moa-mode-panel[data-mode-panel="2"] .splice-paths>div:nth-child(2){animation:moaIsoformB 6s var(--ease) infinite}
.moa-mode-panel[data-mode-panel="2"] .splice-paths i{background:linear-gradient(90deg,rgba(126,184,255,.22),var(--moa-blue),rgba(126,184,255,.22));background-size:220% 100%;animation:moaSpliceFlow 6s linear infinite}
@keyframes moaSpliceSignal{
  0%,8%{opacity:.28;transform:translateY(-9px) rotate(45deg) scale(.78);box-shadow:0 0 8px rgba(255,143,115,.18)}
  22%,32%{opacity:1;transform:translateY(7px) rotate(45deg) scale(1.12);box-shadow:0 0 30px rgba(255,143,115,.72)}
  43%,100%{opacity:.38;transform:translateY(0) rotate(45deg) scale(.9);box-shadow:0 0 12px rgba(255,143,115,.25)}
}
@keyframes moaSpliceDecision{
  0%,17%,52%,100%{border-color:var(--moa-blue);background:rgba(126,184,255,.09);box-shadow:none;transform:translateY(0)}
  25%,39%{border-color:var(--moa-coral);background:rgba(255,143,115,.15);box-shadow:0 0 26px rgba(255,143,115,.35);transform:translateY(-3px)}
}
@keyframes moaSpliceFlow{0%{background-position:180% 0}100%{background-position:-40% 0}}
@keyframes moaIsoformA{
  0%,31%,68%,100%{opacity:.34;border-color:rgba(220,239,240,.1);box-shadow:none;transform:translateX(0)}
  42%,58%{opacity:1;border-color:rgba(126,184,255,.38);box-shadow:inset 0 0 28px rgba(126,184,255,.07),0 0 22px rgba(126,184,255,.08);transform:translateX(4px)}
}
@keyframes moaIsoformB{
  0%,55%,92%,100%{opacity:.3;border-color:rgba(220,239,240,.1);box-shadow:none;transform:translateX(0)}
  67%,84%{opacity:1;border-color:rgba(98,228,193,.35);box-shadow:inset 0 0 28px rgba(98,228,193,.06),0 0 22px rgba(98,228,193,.08);transform:translateX(4px)}
}

.poison-transcript b{border-color:rgba(220,239,240,.38);background:rgba(220,239,240,.04);color:#dce9eb}
.poison-transcript .poison-exon{position:relative;width:100px;height:72px;border-color:var(--moa-coral);background:rgba(255,143,115,.1);color:#ffd9d0}
.poison-transcript>i{background:rgba(255,143,115,.52)}
.poison-fragments{position:absolute;left:68%;right:8%;bottom:11%;height:30px}
.poison-fragments i{position:absolute;width:13px;height:2px;background:var(--moa-coral);transform:rotate(var(--r,12deg))}
.poison-fragments i:nth-child(1){left:3%;top:5px}.poison-fragments i:nth-child(2){left:23%;top:19px;--r:-18deg}.poison-fragments i:nth-child(3){left:47%;top:2px;--r:27deg}.poison-fragments i:nth-child(4){left:66%;top:20px;--r:-7deg}.poison-fragments i:nth-child(5){left:89%;top:8px;--r:34deg}

/* Mechanism storyboards. Every mode uses the same visual grammar:
   target → control point → RNA-level outcome. The six-second loop changes
   emphasis only, so the complete mechanism remains readable while paused. */
.moa-story{position:absolute;inset:66px 6% 48px;display:grid;grid-template-columns:minmax(0,1fr) 74px minmax(0,1fr);grid-template-rows:minmax(235px,1fr) auto;gap:18px 14px;align-items:stretch}
.story-stage,.story-outputs article,.story-output-final{position:relative;border:1px solid rgba(220,239,240,.14);background:linear-gradient(145deg,rgba(12,28,39,.94),rgba(7,17,26,.92));overflow:hidden}
.story-stage{display:flex;flex-direction:column;min-width:0;padding:22px 22px 20px}
.story-stage::before,.story-outputs article::before,.story-output-final::before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:var(--story-color,var(--moa-mint));box-shadow:0 0 18px color-mix(in srgb,var(--story-color,var(--moa-mint)) 48%,transparent)}
.story-no,.story-outputs article>span,.story-output-final>span{color:var(--story-color,var(--moa-mint));font:500 var(--fs-nano)/1.45 var(--font-m);letter-spacing:.1em}
.story-stage>strong{margin-top:13px;color:#e3eff1;font:600 clamp(.9rem,1.15vw,1.08rem)/1.25 var(--font-d);letter-spacing:.035em}
.story-stage>small,.story-outputs article>small,.story-output-final>small{display:block;color:#7f939b;font:400 var(--fs-nano)/1.45 var(--font-b)}
.story-stage>small{margin-top:auto;padding-top:13px;border-top:1px solid rgba(220,239,240,.08)}
.story-arrow{position:relative;display:grid;place-items:center;align-content:center;gap:14px;min-width:0;color:#778c94;text-align:center}
.story-arrow i{position:relative;display:block;width:100%;height:1px;background:linear-gradient(90deg,rgba(98,228,193,.16),var(--moa-mint))}
.story-arrow i::after{content:"";position:absolute;right:0;top:50%;width:8px;height:8px;border-top:1px solid var(--moa-mint);border-right:1px solid var(--moa-mint);transform:translateY(-50%) rotate(45deg)}
/* 13px化で列幅(74px)に収まらなくなる。balance で行を均し、
   日本語の「低分子が結合」が5+1文字に割れるのを防ぐ */
.story-arrow span{max-width:92px;font:500 var(--fs-nano)/1.35 var(--font-m);letter-spacing:.04em;text-wrap:balance}
.story-arrow.coral i{background:linear-gradient(90deg,rgba(255,143,115,.16),var(--moa-coral))}.story-arrow.coral i::after{border-color:var(--moa-coral)}
.story-outputs{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:14px}
.story-outputs article{display:grid;grid-template-columns:minmax(115px,.85fr) 1fr;grid-template-rows:auto auto auto;column-gap:18px;min-height:128px;padding:18px 20px}
.story-outputs article>span{grid-column:1;align-self:end}.story-outputs article>strong{grid-column:1;align-self:start;margin-top:7px;color:#deedef;font:600 .94rem/1.25 var(--font-d);letter-spacing:.035em}.story-outputs article>small{grid-column:1;align-self:start}.story-outputs article>div{grid-column:2;grid-row:1/4;align-self:center}

.rna-structure{position:relative;width:min(100%,190px);height:86px;margin:auto}
.rna-structure i{position:absolute;left:7%;right:7%;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,var(--moa-mint) 14%,#dffaf4 50%,var(--moa-mint) 86%,transparent);box-shadow:0 0 11px rgba(98,228,193,.22)}
.rna-structure i:nth-child(1){top:24px;transform:rotate(18deg)}.rna-structure i:nth-child(2){top:44px;transform:rotate(-20deg)}.rna-structure i:nth-child(3){top:64px;transform:rotate(17deg)}
.rna-structure b{position:absolute;left:calc(50% - 24px);top:17px;width:48px;height:54px;border:2px solid var(--moa-mint);border-bottom-color:transparent;border-radius:48% 48% 42% 42%;transform:rotate(8deg)}
.rna-structure em{position:absolute;left:calc(50% - 8px);top:31px;width:16px;height:16px;border:2px solid var(--moa-coral);background:#09151e;transform:rotate(45deg);box-shadow:0 0 18px rgba(255,143,115,.45)}
.protein-access{display:flex;align-items:center;justify-content:center;gap:10px;min-height:88px;margin:auto 0}
.protein-access b{display:grid;place-items:center;width:54px;height:40px;border:1px solid rgba(98,228,193,.52);border-radius:50%;color:#cceae7;font:500 var(--fs-nano) var(--font-m);background:rgba(98,228,193,.06)}
.protein-access i{width:38px;height:2px;background:var(--moa-coral);box-shadow:0 0 12px rgba(255,143,115,.38)}
.output-rna{display:flex;align-items:center;justify-content:center;gap:5px;min-height:54px}.output-rna i{width:28%;height:3px;border-radius:2px;background:var(--moa-mint);box-shadow:0 0 10px rgba(98,228,193,.25)}.output-rna.fragments i{width:22%;background:var(--moa-coral);transform:rotate(var(--r,-8deg))}.output-rna.fragments i:nth-child(2){--r:12deg}.output-rna.fragments i:nth-child(3){--r:-17deg}
.output-decay{--story-color:var(--moa-coral)}

.splicing-story{--story-color:var(--moa-blue)}
.transcript{display:flex;align-items:center;width:100%;min-height:84px;margin:auto 0}.transcript b{position:relative;display:grid;place-items:center;flex:0 0 46px;height:40px;border:1px solid var(--moa-blue);background:rgba(126,184,255,.08);color:#deebff;font:500 var(--fs-nano) var(--font-m)}.transcript>i{flex:1;min-width:10px;height:1px;background:rgba(126,184,255,.55)}.transcript .choice-exon{border-color:#b7d6ff;background:rgba(126,184,255,.16);box-shadow:0 0 18px rgba(126,184,255,.15)}.transcript .choice-exon em{position:absolute;left:calc(50% - 7.5px);top:-25px;width:15px;height:15px;border:2px solid var(--moa-coral);background:#09151e;transform:rotate(45deg);box-shadow:0 0 14px rgba(255,143,115,.38)}
.splice-choice{display:flex;align-items:center;justify-content:center;min-height:82px;margin:auto 0}.splice-choice i{width:29%;height:1px;background:linear-gradient(90deg,transparent,var(--moa-blue))}.splice-choice i:last-child{transform:scaleX(-1)}.splice-choice b{display:grid;place-items:center;width:50px;height:50px;border:1px solid var(--moa-blue);border-radius:50%;color:#e0ecff;font:500 1rem var(--font-m);box-shadow:0 0 24px rgba(126,184,255,.12)}
.splice-outputs article{--story-color:var(--moa-blue)}.splice-outputs .transcript{min-height:58px}.transcript.compact b{flex-basis:38px;height:30px;font-size:var(--fs-nano)}.transcript.compact>i{min-width:7px}.splice-outputs article:nth-child(2){--story-color:var(--moa-mint)}

.poison-story{--story-color:var(--moa-coral)}
.poison-box{width:64px!important;flex-basis:64px!important;border-color:var(--moa-coral)!important;background:rgba(255,143,115,.12)!important;color:#ffded6!important}.poison-box em{position:absolute;left:50%;bottom:-18px;transform:translateX(-50%);color:var(--moa-coral);font:500 var(--fs-nano) var(--font-m);letter-spacing:.06em}
.nmd-sensor{position:relative;display:grid;place-items:center;min-height:84px;margin:auto 0}.nmd-sensor b{display:grid;place-items:center;width:66px;height:66px;border:1px solid var(--moa-coral);border-radius:50%;color:#ffddd5;font:600 var(--fs-nano) var(--font-m);box-shadow:0 0 28px rgba(255,143,115,.14)}.nmd-sensor i{position:absolute;width:102px;height:1px;background:linear-gradient(90deg,transparent,var(--moa-coral),transparent)}
.story-output-final{grid-column:1/-1;display:grid;grid-template-columns:150px 1fr minmax(180px,.8fr);grid-template-rows:auto auto;gap:5px 24px;align-items:center;min-height:128px;padding:20px 24px;--story-color:var(--moa-coral)}
.story-output-final>span{grid-column:1}.story-output-final>strong{grid-column:1;color:#ffddd5;font:600 .94rem/1.3 var(--font-d);letter-spacing:.03em}.story-output-final>small{grid-column:3;grid-row:1/3;align-self:center}.decay-route{grid-column:2;grid-row:1/3;display:flex;justify-content:space-around;align-items:center}.decay-route i{width:23px;height:3px;background:var(--moa-coral);transform:translate(var(--x,0),var(--y,0)) rotate(var(--r,-9deg));box-shadow:0 0 10px rgba(255,143,115,.24)}.decay-route i:nth-child(2){--y:15px;--r:16deg}.decay-route i:nth-child(3){--y:-12px;--r:-21deg}.decay-route i:nth-child(4){--y:11px;--r:8deg}.decay-route i:nth-child(5){--y:-7px;--r:25deg}

.moa-mode-panel.is-active .story-target,.moa-mode-panel.is-active .splice-input,.moa-mode-panel.is-active .poison-input{animation:moaStoryInput 6s var(--ease) infinite}.moa-mode-panel.is-active .story-arrow{animation:moaStoryArrow 6s var(--ease) infinite}.moa-mode-panel.is-active .story-control,.moa-mode-panel.is-active .splice-decision,.moa-mode-panel.is-active .nmd-stage{animation:moaStoryControl 6s var(--ease) infinite}.moa-mode-panel.is-active .story-outputs,.moa-mode-panel.is-active .story-output-final{animation:moaStoryOutput 6s var(--ease) infinite}.moa-mode-panel.is-active .rna-structure em,.moa-mode-panel.is-active .transcript .choice-exon em{animation:moaMoleculeEngage 6s var(--ease) infinite}.moa-mode-panel.is-active .nmd-sensor b{animation:moaNmdPulse 6s var(--ease) infinite}.moa-mode-panel.is-active .decay-route i{animation:moaDecayFragment 6s var(--ease) infinite}
@keyframes moaStoryInput{0%,22%{opacity:1;box-shadow:inset 0 0 34px rgba(98,228,193,.07)}32%,100%{opacity:.58;box-shadow:none}}
@keyframes moaStoryArrow{0%,14%{opacity:.28}24%,38%{opacity:1;filter:drop-shadow(0 0 8px rgba(98,228,193,.45))}48%,100%{opacity:.45;filter:none}}
@keyframes moaStoryControl{0%,28%{opacity:.48;box-shadow:none}40%,58%{opacity:1;box-shadow:inset 0 0 34px rgba(126,184,255,.08)}68%,100%{opacity:.62;box-shadow:none}}
@keyframes moaStoryOutput{0%,50%{opacity:.42;transform:translateY(3px)}62%,88%{opacity:1;transform:translateY(0)}100%{opacity:.55;transform:translateY(0)}}
@keyframes moaMoleculeEngage{0%,10%{opacity:.25;transform:translateY(-15px) rotate(45deg) scale(.75)}22%,46%{opacity:1;transform:translateY(0) rotate(45deg) scale(1.08)}60%,100%{opacity:.7;transform:translateY(0) rotate(45deg) scale(.92)}}
@keyframes moaNmdPulse{0%,35%{box-shadow:0 0 8px rgba(255,143,115,.08)}48%,66%{box-shadow:0 0 0 8px rgba(255,143,115,.08),0 0 34px rgba(255,143,115,.32)}78%,100%{box-shadow:0 0 18px rgba(255,143,115,.12)}}
@keyframes moaDecayFragment{0%,55%{opacity:.2;transform:translate(0,0) rotate(var(--r,-9deg))}72%,90%{opacity:1;transform:translate(var(--x,0),var(--y,0)) rotate(var(--r,-9deg))}100%{opacity:.45;transform:translate(var(--x,0),var(--y,0)) rotate(var(--r,-9deg))}}

.moa-compare{padding-top:132px;background:linear-gradient(180deg,#081019,#070b11)}
.moa-compare-grid{display:grid;grid-template-columns:repeat(3,1fr);margin-top:52px;border:1px solid rgba(220,239,240,.13)}
.moa-compare-grid article{position:relative;min-height:330px;padding:34px 32px;border-right:1px solid rgba(220,239,240,.11);background:linear-gradient(160deg,rgba(98,228,193,.035),transparent 55%)}
.moa-compare-grid article:nth-child(2){background:linear-gradient(160deg,rgba(126,184,255,.04),transparent 55%)}
.moa-compare-grid article:nth-child(3){border-right:0;background:linear-gradient(160deg,rgba(255,143,115,.04),transparent 55%)}
.moa-compare-grid article>span{color:var(--moa-mint);font:500 var(--fs-nano) var(--font-m);letter-spacing:.14em}
.moa-compare-grid article:nth-child(2)>span{color:var(--moa-blue)}
.moa-compare-grid article:nth-child(3)>span{color:var(--moa-coral)}
.moa-compare-grid h3{margin:64px 0 16px;color:#e1eef0;font:500 clamp(2.4rem,4vw,4.2rem)/1 var(--font-d);letter-spacing:-.05em}
.moa-compare-grid p{max-width:300px;color:#96a9b0;line-height:1.7}
.moa-compare .moa-deep-links{margin-top:72px}

@media(max-width:980px){
  .moa-page .moa-hero{min-height:auto}.moa-hero-grid{grid-template-columns:minmax(0,1.1fr) minmax(280px,.9fr);padding-bottom:34px}.moa-hero-title h1{font-size:clamp(3.7rem,8.5vw,5.8rem)}.moa-hero-copy{max-width:680px}
  .moa-principle-map{grid-template-columns:1fr}.principle-input{border-right:0;border-bottom:1px solid rgba(220,239,240,.1)}.principle-branch{display:none}.principle-outcomes{grid-template-columns:repeat(3,1fr);grid-template-rows:none}.principle-outcomes article{grid-template-columns:1fr;gap:14px;border-right:1px solid rgba(220,239,240,.1);border-bottom:0}.principle-icon{grid-column:1/-1;width:100%;margin:4px 0 0;border-left:0;border-top:1px solid rgba(220,239,240,.08)}
  .moa-mode-panel{grid-template-columns:1fr}.mode-copy{border-right:0;border-bottom:1px solid rgba(220,239,240,.11)}.mode-visual{min-height:530px}.moa-compare-grid article{min-height:310px}
}
@media(max-width:680px){
  .moa-page .moa-hero{padding-top:104px}.moa-hero-illustration{width:100%;object-position:58% center;opacity:.2;-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.22),#000 48%,rgba(0,0,0,.38));mask-image:linear-gradient(180deg,rgba(0,0,0,.22),#000 48%,rgba(0,0,0,.38))}.moa-hero-grid{grid-template-columns:1fr;gap:22px;padding-bottom:28px}.moa-hero-title h1{font-size:clamp(3.35rem,16vw,4.7rem);line-height:.88}.moa-hero-title .breadcrumb{margin-bottom:18px}.moa-hero-copy{padding-left:16px}.moa-hero-copy p{margin:10px 0 18px}.moa-hero-rail{display:none}
  .moa-principle,.moa-modes,.moa-compare{padding-top:92px;padding-bottom:92px}.moa-target-block+.moa-target-block{margin-top:44px}.moa-target-platform{margin-left:0}.moa-principle-map{margin-left:-24px;margin-right:-24px}.principle-input{padding:38px 20px}.principle-outcomes{grid-template-columns:1fr}.principle-outcomes article{grid-template-columns:54px 1fr;border-right:0;border-bottom:1px solid rgba(220,239,240,.1)}
  .moa-mode-switcher{margin-left:-24px;margin-right:-24px}.moa-mode-tabs{grid-template-columns:1fr}.moa-mode-tabs button{grid-template-columns:38px 1fr;min-height:84px;padding:18px 24px;border-right:0;border-bottom:1px solid rgba(220,239,240,.1)}.moa-mode-tabs button::after{top:0;right:auto;bottom:0;width:3px;height:auto;transform:scaleY(0)}.moa-mode-tabs button[aria-selected="true"]::after{transform:scaleY(1)}
  .mode-copy{padding:38px 24px}.mode-copy h3{font-size:2.25rem}.mode-copy dl>div{grid-template-columns:1fr;gap:6px}.mode-visual{min-height:850px;background-size:42px 42px,42px 42px,auto}.moa-story{inset:58px 18px 34px;grid-template-columns:1fr;grid-template-rows:auto 50px auto auto;gap:12px}.story-stage{min-height:176px}.story-arrow{min-height:50px;gap:7px}.story-arrow i{width:1px;height:100%;background:linear-gradient(rgba(98,228,193,.16),var(--moa-mint))}.story-arrow i::after{right:50%;top:auto;bottom:0;transform:translateX(50%) rotate(135deg)}.story-arrow.coral i{background:linear-gradient(rgba(255,143,115,.16),var(--moa-coral))}.story-arrow span{position:absolute;left:calc(50% + 14px);top:50%;max-width:118px;transform:translateY(-50%);text-align:left}.story-outputs{grid-column:1;grid-template-columns:1fr;gap:10px}.story-outputs article{grid-template-columns:1fr 100px;min-height:112px}.story-output-final{grid-column:1;grid-template-columns:1fr 120px;min-height:124px}.story-output-final>span,.story-output-final>strong{grid-column:1}.story-output-final>small{grid-column:1/-1;grid-row:auto}.decay-route{grid-column:2;grid-row:1/3}.fate-split{left:5%;right:5%;gap:10px}.fate-split>div{padding:16px}.fate-split i{width:24px}.fate-decay i{width:8px}.exon-source,.poison-transcript{left:5%;right:5%}.exon-source b,.poison-transcript>b{width:54px}.splice-paths{left:5%;right:5%}.splice-paths span{width:72px}.poison-transcript .poison-exon{width:80px}.nmd-route{left:5%;right:5%;gap:8px}.nmd-route strong{width:58px;height:58px}
  .moa-compare-grid{grid-template-columns:1fr;margin-left:-24px;margin-right:-24px}.moa-compare-grid article{min-height:270px;border-right:0;border-bottom:1px solid rgba(220,239,240,.11)}.moa-compare-grid article:last-child{border-bottom:0}.moa-compare-grid h3{margin-top:46px}
}
@media(prefers-reduced-motion:reduce){
  .moa-mode-tabs button::after{transition:none}
  .moa-mode-panel[data-mode-panel="2"] .splice-compound,
  .moa-mode-panel[data-mode-panel="2"] .exon-source b:nth-of-type(2),
  .moa-mode-panel[data-mode-panel="2"] .exon-source>i,
  .moa-mode-panel[data-mode-panel="2"] .splice-paths>div,
  .moa-mode-panel[data-mode-panel="2"] .splice-paths i,
  .moa-mode-panel.is-active .story-stage,
  .moa-mode-panel.is-active .story-arrow,
  .moa-mode-panel.is-active .story-outputs,
  .moa-mode-panel.is-active .story-output-final,
  .moa-mode-panel.is-active .rna-structure em,
  .moa-mode-panel.is-active .transcript .choice-exon em,
  .moa-mode-panel.is-active .nmd-sensor b,
  .moa-mode-panel.is-active .decay-route i,
  .principle-outcomes article:hover .principle-icon *{animation:none!important}
}

/* ===== ABOUT SPLIT: company (2026-08) ===== */
/* The short-history ledger on /about/company/. Rows reuse .milestone-item
   (88px date / title / summary / tag grid); this block only supplies the
   frame the partnerships page gets from its own scoped rules, plus the two
   gold decision points (Series A, Nippon Shinyaku). */
.company-page .company-history{border:1px solid var(--line);background:rgba(8,10,17,.7)}
.company-page .company-history .milestone-item{min-height:84px;padding:18px 34px}
.company-page .company-history .milestone-item:last-child{border-bottom:0}
.company-page .company-history .milestone-item i{font-family:var(--font-m);font-size:var(--fs-nano);letter-spacing:.14em}
.company-page .history-capital .milestone-date,
.company-page .history-capital i{color:var(--aperture)}
.company-page .history-foot{margin-top:26px}
.company-page .company-vision .lead-stack{padding-top:0}
@media(max-width:720px){
  .company-page .company-history .milestone-item{min-height:0;padding:16px 20px}
}
/* ===== end ABOUT SPLIT: company ===== */

/* ===== ABOUT SPLIT: validation (2026-08) =====
   /about/validation/ separates the funding card (movement 02) from the milestone
   panel (movement 03), so each takes the .evidence-grid frame alone instead of
   sharing its two columns (611). */
.validation-page .evidence-grid.is-solo{grid-template-columns:1fr}
.validation-page .evidence-grid.is-solo .funding-card{border-right:0;border-bottom:0}
/* Standing free of the validation grid, the milestone frame has no hairline
   above it to borrow, so .evidence-grid{border-top:0} (611) is undone here.
   The color repeats the mastering pass at 1236 rather than --line, because
   this block sits after it and would otherwise undo it on one side. */
.validation-page #milestones .evidence-grid.is-solo{border-top:1px solid rgba(227,235,236,.12);margin-top:56px}
/* ===== end ABOUT SPLIT: validation ===== */

/* ===== ABOUT SPLIT: hub (2026-08) =====
   /about/ is now the umbrella over four pages — /about/company/,
   /about/validation/, /team/ and /partnerships/ — and this block styles the
   destination cards of its index. Same grammar as .evidence-ledger-grid one
   panel up: 1px seams, instrument surfaces, mono index labels, gold breathing
   on hover. The big numeral slot is replaced by a name + note + metric row,
   because these cards answer "where does this lead" rather than "how many".
   The mint metric line under each note was removed in 2026-08. */
.hub-index-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:rgba(227,235,236,.075)}
/* 2026-08: the hub gained /about/mission-vision/ and now lists four pillars,
   so the three-up modifier is retired and .is-four names what the markup
   actually is. The base grid was already four across; the modifier exists so
   the tile count is readable from the HTML, and so the two tightenings a
   four-up row needs -- a smaller title, less right gutter under the note --
   hang off one hook. */
.hub-index-grid.is-four{grid-template-columns:repeat(4,minmax(0,1fr))}
.hub-index-grid.is-four b{font-size:1.18rem;margin-top:20px}
.hub-index-grid.is-four p{padding-right:12px}
.partnership-capital{margin-top:1px;padding:42px 44px;display:grid;grid-template-columns:.8fr 1.2fr;gap:64px;border:1px solid var(--line);background:linear-gradient(145deg,rgba(10,14,19,.92),rgba(7,10,14,.96))}
.partnership-capital h3{font:500 clamp(1.8rem,3vw,2.5rem)/1.08 var(--font-d);letter-spacing:-.025em;margin-top:28px}
.partnership-capital p{max-width:58ch;color:var(--muted);line-height:1.65}
.partnership-capital .investor-list{margin:26px 0}
@media(max-width:760px){.partnership-capital{grid-template-columns:1fr;gap:28px;padding:32px 26px}}
.hub-index-grid>a{min-height:236px;padding:24px 22px 20px;background:linear-gradient(145deg,#0e141a,#090d12);position:relative;display:flex;flex-direction:column;text-decoration:none;color:inherit;transition:background .35s}
.hub-index-grid>a:hover{background:radial-gradient(circle at 76% 18%,rgba(228,197,141,.04),transparent 24%),linear-gradient(145deg,#111920,#0a0f14)}
.hub-index-grid>a>span:first-child{font:500 var(--fs-nano) var(--font-m);letter-spacing:.15em;color:#697984}
.hub-index-grid b{font:500 1.35rem/1.2 var(--font-d);letter-spacing:-.015em;color:var(--text);margin:24px 0 10px}
.hub-index-grid p{margin:0 0 26px;padding-right:24px;color:#89969f;font-size:var(--fs-sm);line-height:1.45}
.hub-index-grid i{position:absolute;right:18px;bottom:17px;font:400 .9rem var(--font-m);font-style:normal;color:#7d9194;transition:color .35s,transform .35s var(--ease)}
.hub-index-grid>a:hover i{color:var(--ice);transform:translateX(3px)}
/* the ledger's onward link: sits between the panel and the source note */
.hub-onward{margin:26px 0 0}
/* 2026-08, second pass: the hub reads as an index. Both hub sections shed the
   130px section suit so the cards sit inside the first scroll, and the vision
   statement above them tightens to a strip rather than a movement. */
.about-page #index{padding:72px 0 96px}
.about-page #index .company-vision{margin-bottom:44px;gap:56px}
.about-page #index .company-vision h2{font-size:clamp(2.4rem,4.6vw,3.6rem)}
.about-page #validation{padding:78px 0 96px}
@media(max-width:1080px){.hub-index-grid,.hub-index-grid.is-four{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.hub-index-grid,.hub-index-grid.is-four{grid-template-columns:1fr}.hub-index-grid>a{min-height:190px}}
/* ===== end ABOUT SPLIT: hub ===== */

/* ===== CONTACT (2026-08) =====
   /contact/ reuses the hub-index-grid grammar for its four inquiry-type
   cards. Every destination stays on the site: all four open /contact/form/
   with a ?type= preselection, and applications are handled on /careers/
   instead. .hub-index-hint carries the "opens the form" notice; the extra line
   needs a touch more card height than the three-item /about/ index this
   grammar was built for. */
.contact-page .hub-index-grid>a{min-height:250px}
/* 2026-08: business is the primary path, so its card spans the full row and
   the remaining three sit in a 3-up row beneath it. The 3-column override has
   to be fenced inside the wide breakpoint: the collapses above are bare
   .hub-index-grid rules inside media queries, and a media query adds no
   specificity, so an unfenced .contact-page .hub-index-grid would outrank
   them and freeze tablet and mobile at three columns. min-width:1081px is the
   exact complement of the max-width:1080px collapse above. The lower 200px
   floor belongs in the same fence: only at this width is the card genuinely
   full-bleed, its copy filling the row on one line. At 1080px and below the
   card is as narrow as any other, so it keeps the shared 250px floor —
   dropping it there squeezed the space under the CTA to a third of the
   neighbouring cards'. grid-column stays unfenced: a no-op in the 1-column
   layout and the right span in the 2-column one. */
@media(min-width:1081px){.contact-page .hub-index-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.contact-page .hub-index-grid>a.is-primary{min-height:200px}}
.contact-page .hub-index-grid>a.is-primary{grid-column:1/-1}
.hub-index-hint{display:block;margin-top:-10px;padding-right:24px;font:500 var(--fs-nano) var(--font-m);letter-spacing:.1em;text-transform:uppercase;color:var(--dim)}
/* The "Choose the right conversation" intro between the hero and the card
   grid is gone (2026-08): #index is now the first section under the compact
   hero, so it only needs .sec-top's own breathing room, not the full 130px
   section suit — same trade /pipeline/ makes for #pipeline. */
.contact-page #index{padding-top:64px}
@media(max-width:680px){.contact-page #index{padding-top:52px}}
/* ===== end CONTACT ===== */

/* ================= Partner wall (2026-08) =================
   「スクロールせずに一目でパートナー先を確認できるようにしてほしい。
     ここでは説明は不要、NEWSにリンクが飛ぶようにして欲しい。」
   Seven 246px cards put the first partner name ~885px down and the last one two
   and a half screens further. The seven are now one instrument of eight cells —
   seven partners plus the archive terminus — four across, two rows, on the
   .evidence-ledger frame with the .is-index <strong> treatment that :1969 already
   wrote for a phrase in that slot. Nothing new is invented: the frame, the 1px
   seam grid, the hover lift and the gold :last-child glyph are all borrowed.
   The hero band and section 01's header give up their long breath in the same
   trade .detail-hero-compact+main #pipeline makes at :693, so both rows of the
   wall land above the fold from 1280x720 up. */

/* Hero: the compact band gives up about 100px of air, so the breadcrumb sits
   almost on the headline. The decorative field was placed for the 323px band,
   so its digits and orbits come down too. */
.partnership-hero-flush{padding:calc(var(--nav-h) + 30px) 0 30px}
.partnership-hero-flush h1{font-size:clamp(2.2rem,3.6vw,3.2rem)}
.partnership-hero-flush .breadcrumb{margin-bottom:14px}
.partnership-hero-flush .detail-hero-field>span{font-size:clamp(2.6rem,6vw,4.6rem)}
.partnership-hero-flush .detail-hero-field i{top:-52%}
.detail-hero-compact+main .partnerships-section{padding-top:56px}

/* The frame takes no .instrument-head: .sec-top directly above it already reads
   01 / PARTNER NETWORK, and .evidence-ledger::before still crowns the box.
   padding:0 is the load-bearing declaration here. .evidence-ledger is a <section>,
   and the bare-element rule at :101 gives every <section> 130px 0 — 260px of air
   inside the frame, which is what put the wall 130px below where it belongs and
   left ::before floating a screen above the first row. The section-03 ledger
   still carries it; that box has an .instrument-head to hang in the space and it
   is below the fold either way. */
.partner-wall-frame{margin:30px 0 20px;padding:0}
.partner-wall-frame+.text-link{display:inline-flex;margin-top:4px}

.evidence-ledger-grid.partner-wall>a{min-height:168px;justify-content:space-between}
/* space-between places date, name and logo, so <strong>'s own margins go. */
.evidence-ledger-grid.partner-wall strong{margin:0}
/* the index keeps the turquoise it had as .partner-index>span:first-child (:2164) */
.partner-wall span b{color:var(--turq-soft);font-weight:500}
/* the terminus still uses the ledger caption slot; padding-right clears the glyph. */
.evidence-ledger-grid.partner-wall p{font:500 var(--fs-nano)/1.45 var(--font-m);letter-spacing:.14em;text-transform:uppercase;color:#6b7986;padding-right:40px}
/* the logo chip is the same light plate the news archive uses. it sits where
   the COLLABORATION / SPLICEVERSE label used to, and margin-right keeps it
   off the absolutely positioned corner glyph. */
.evidence-ledger-grid.partner-wall .partner-logo{
  --partner-h:26px;--partner-w:128px;
  align-self:flex-start;margin-right:36px}
/* the terminus is not a partner, so it steps back and lets the seven names lead */
.partner-tile-all strong{color:var(--muted)}
.partner-wall noscript{display:block;grid-column:1/-1;padding:22px 20px;background:linear-gradient(145deg,#0e141a,#090d12)}
.partner-wall noscript p{font:400 var(--fs-sm)/1.6 var(--font-b);letter-spacing:0;text-transform:none;color:var(--muted);padding-right:0}

/* 4 columns hold down to 900px: seven partners and the terminus fill two rows
   exactly, and two rows above the fold is the whole point of the layout. */
@media(max-width:1080px){
  .evidence-ledger-grid.partner-wall{grid-template-columns:repeat(4,minmax(0,1fr))}
  .evidence-ledger-grid.partner-wall strong{font-size:1.22rem}
}
@media(max-width:900px){
  .evidence-ledger-grid.partner-wall{grid-template-columns:1fr 1fr}
  .evidence-ledger-grid.partner-wall>a{min-height:148px;padding:18px 18px 16px}
}
@media(max-width:560px){
  /* two columns, not the ledger's one: a phone cannot hold seven legible names in
     a viewport, but it can hold four rows instead of eight. The logo stays —
     it replaced the platform label, so hiding it would empty the bottom of
     the cell again. The terminus caption still goes: "公開情報" / "Public
     record" is the one leftover <p>, and on a phone it collides with the
     gold glyph the way the old platform line did. */
  .evidence-ledger-grid.partner-wall{grid-template-columns:1fr 1fr}
  .evidence-ledger-grid.partner-wall>a{min-height:128px;padding:16px 14px 14px}
  .evidence-ledger-grid.partner-wall strong{font-size:1.05rem;line-height:1.2;margin-top:8px}
  .evidence-ledger-grid.partner-wall p{display:none}
  .evidence-ledger-grid.partner-wall .partner-logo{--partner-h:20px;--partner-w:100px;margin-right:28px}
  .partner-wall span{letter-spacing:.1em}
  .evidence-ledger-grid.partner-wall i{right:12px;bottom:11px;font-size:max(var(--fs-nano),.82rem)}
}

/* ---- 01 PARTNER NETWORK — academic logo wall ------------------------------
   The seven named pharmaceutical partners now carry their logos on the
   name cells above. This strip is only the academic / research institutions
   that have no cell of their own on that wall (Kyoto University, NCC,
   CiRA, Tohoku University). Same frame and chip as before.
   .partner-logo-wall-frame needs its own padding:0 for the same reason
   .partner-wall-frame does: a bare <section> inherits the
   section{padding:130px 0} rule at :101. */
.partner-logo-wall-frame{margin:20px 0 20px;padding:0}
.partner-logo-wall{--partner-h:30px;--partner-w:132px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:rgba(227,235,236,.075)}
.partner-logo-tile{display:flex;align-items:center;justify-content:center;min-height:100px;padding:16px;background:linear-gradient(145deg,#0e141a,#090d12);text-decoration:none;transition:background .35s}
.partner-logo-tile:hover{background:radial-gradient(circle at 76% 20%,rgba(228,197,141,.04),transparent 24%),linear-gradient(145deg,#111920,#0a0f14)}
/* Kyoto University has no logo file: no official mark distinct from the
   CiRA-specific one already in assets/logos/ could be sourced (network
   egress was blocked for every non-GitHub host when this shipped). A plain
   text tile in the same grid, rather than a missing/broken image icon. */
.partner-logo-tile-text{font:500 var(--fs-sm) var(--font-m);letter-spacing:.04em;color:var(--dim);text-align:center;padding:16px 10px}
@media(max-width:900px){
  .partner-logo-wall{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:560px){
  .partner-logo-wall{grid-template-columns:repeat(2,minmax(0,1fr))}
  .partner-logo-tile,.partner-logo-tile-text{min-height:84px;padding:12px}
}

/* ---- 02 COLLABORATION PIPELINE — the named partner link -------------------
   The PARTNER column now holds a company name linked to that collaboration's
   press release. a{color:inherit;text-decoration:none} at the top of this file
   leaves an anchor here indistinguishable from the text beside it, so this is
   the one rule that makes it read as a link.

   It sets no type of its own. The cell is .pipeline-cell.program — Space
   Grotesk 1rem, the display face, not the mono/uppercase treatment MoA and
   STAGE carry — and the mobile card's <strong> is its own size, so the anchor
   inherits both rather than being handed .text-link, which would replace the
   face with mono at --fs-micro. What is added is a hairline underline held off
   the baseline, and the site's own --turq-soft on hover, which is what every
   other large-type link here does. */
.pipeline-cell.program .collab-partner-link,
.pipeline-card header .collab-partner-link{
  font:inherit;letter-spacing:inherit;color:inherit;
  text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;
  text-decoration-color:rgba(216,230,233,.26);
  transition:color .22s ease,text-decoration-color .22s ease}
.pipeline-cell.program .collab-partner-link:hover,
.pipeline-card header .collab-partner-link:hover{
  color:var(--turq-soft);text-decoration-color:var(--turq-soft)}
/* The underline is dropped under the focus ring so the two do not double up. */
.pipeline-cell.program .collab-partner-link:focus-visible,
.pipeline-card header .collab-partner-link:focus-visible{
  outline:1px solid var(--turq);outline-offset:3px;text-decoration-color:transparent}

/* ================= Mission & Vision (2026-08) =================
   /about/mission-vision/ と /jp/about/mission-vision/ 専用。2026年1月に
   確定した MVV デッキの文言をそのまま載せるページで、既存の部品では足り
   ないものだけをここに足す。節そのものは .sec-top + .company-vision、
   本文は .lead-stack、CTA は .detail-cta と、すべて既存のまま。

   足したのは3つ。
   1. .mv-quote — 各ステートメントに付く引用句。デッキでは紫のイタリック
      に細い縦罫が付く。サイト側の等価物は .lead だが、引用符ごと見せる1行
      なので Instrument Serif（--font-s、サイト唯一のセリフ体）に寄せて本文
      と区別し、縦罫は --cyan の1px。新しい色は足していない。
   2. .mv-statement — 和文ページの VISION 見出しの直下に置く公式英文。
      見出しでも .s-meta でもない「正式な文言」の行なので、モノ体のラベル
      組みにして本文とは別物であることを字面で示す。
   3. .value-ledger — バリュー3枚。枠組みは .evidence-ledger /
      .hub-index-grid とまったく同じ文法（1px の目地、instrument の面、
      モノ体のラベル）で、数字スロットの代わりに名前とタグラインが入る。
      デッキは3枚を cyan / purple / light pink で塗り分けているが、サイトに
      pink のトークンは無い。新しい hex を持ち込まず、サイト自身の3色
      （--cyan / --violet / --aperture。ロゴと .sec-top::after が使う並び）
      に置き換えている。 */
/* .lead-stack p (912) is (0,1,1) and would keep its --muted and 1rem on a bare
   .mv-quote, so the colour and the size are set from inside .lead-stack too.
   The serif face, the italic and the rule are not contested and stay above. */
.mv-quote{
  margin:0;padding-left:20px;border-left:1px solid var(--cyan);
  font-family:var(--font-s);font-style:italic;line-height:1.45;
  letter-spacing:.005em}
.lead-stack .mv-quote{font-size:1.32rem;color:var(--ice);max-width:46ch}
html[lang="ja"] .lead-stack .mv-quote{font-size:1.24rem}
/* 3 節が縦に並ぶこのページでは .company-vision の align-items:end が効かない。
   末尾そろえだと右カラムの長さで左カラムの開始位置が決まるので、MISSION と
   VISION は見出しが大きく下がり、右が 1 段落しかない VALUES では s-lbl の
   すぐ下に eyebrow が来て 0px で衝突する（実測 2054px で接触）。この 3 節に
   限って先頭そろえにし、.sec-top との間隔を明示する。 */
.mission-vision-page .company-vision{align-items:start;margin:44px 0 0}
/* VALUES no longer carries a lead-stack paragraph (the survey/workshop
   provenance blurb was retracted), so its .company-vision has a single
   child — collapse the 1.2fr/.7fr grid (611) to one column instead of
   leaving an empty right-hand track. */
.mission-vision-page #values .company-vision{grid-template-columns:1fr}
.mv-statement{
  margin:18px 0 0;font:500 var(--fs-meta)/1.5 var(--font-m);
  letter-spacing:.1em;color:var(--cyan)}

.value-ledger{
  margin:44px 0 0;position:relative;overflow:hidden;
  border:1px solid rgba(227,235,236,.11);
  background:linear-gradient(145deg,rgba(11,15,20,.96),rgba(6,9,13,.98));
  box-shadow:inset 0 1px rgba(245,248,248,.045),0 24px 78px rgba(0,0,0,.22)}
.value-ledger-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:rgba(227,235,236,.075)}
.value-card{
  --value-accent:var(--cyan);
  position:relative;min-height:318px;padding:30px 26px 28px;
  display:flex;flex-direction:column;
  background:linear-gradient(145deg,#0e141a,#090d12)}
/* デッキのカード上端の色帯。セル間の1px目地はグリッド側のものなので、
   border ではなくカードに描いて目地の色を上書きしない。 */
.value-card::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:var(--value-accent);opacity:.85}
.value-interact{--value-accent:var(--cyan)}
.value-respect{--value-accent:var(--violet)}
.value-impact{--value-accent:var(--aperture)}
.value-card b{font:500 var(--fs-micro)/1.3 var(--font-m);letter-spacing:.22em;color:var(--value-accent)}
.value-tagline{
  margin:18px 0;font-family:var(--font-s);font-style:italic;
  font-size:1.16rem;line-height:1.35;color:var(--value-accent);text-wrap:pretty}
.value-body{margin:0;color:#89969f;font-size:var(--fs-sm);line-height:1.62;text-wrap:pretty}
.value-onward{margin-top:26px}
/* 3枚並びは他所の2段落ちより早く読めなくなる。IMPACT の本文は62語あり、
   1180px コンテナの3分の1は約380px しかない。2列にすると2段目に1枚だけ
   残るので、3列から1列へ直接落とす。 */
@media(max-width:940px){
  .value-ledger-grid{grid-template-columns:1fr}
  .value-card{min-height:0;padding:26px 22px 24px}
}
@media(max-width:560px){
  .mv-quote{font-size:1.18rem;padding-left:16px}
  html[lang="ja"] .mv-quote{font-size:1.12rem}
  .value-ledger{margin-top:34px}
}
/* ================= end Mission & Vision =================== */

/* ================= Careers: apply form =================== */
.apply-form{max-width:640px;margin-top:28px;display:flex;flex-direction:column;gap:22px}
/* The form's own `display:flex` above has the same specificity as the
   [hidden] UA-stylesheet rule it's meant to be overridden by, and author
   rules always win that tie — so without this, apply.js/contact.js setting
   form.hidden = true on success leaves the form (and its disabled
   "Sending…" button) visibly on screen. Also covers the contact form,
   which reuses this class. */
.apply-form[hidden]{display:none!important}
.apply-field{display:flex;flex-direction:column;gap:8px}
.apply-field label{font:500 var(--fs-micro) var(--font-m);letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}
.apply-field input[type=text],.apply-field input[type=email],.apply-field input[type=url],
.apply-field textarea,.apply-field select{
  width:100%;padding:14px 16px;background:var(--cell);border:1px solid var(--line2);
  color:var(--text);font:400 var(--fs-sm) var(--font-b);border-radius:2px;
  transition:border-color .25s,box-shadow .25s}
.apply-field select{cursor:pointer}
.apply-field textarea{min-height:160px;line-height:1.6;resize:vertical}
.apply-field input:focus,.apply-field textarea:focus,.apply-field select:focus{
  outline:none;border-color:var(--cyan);box-shadow:0 0 0 3px rgba(180,208,210,.15)}
.apply-field input[type=file]{
  padding:12px 14px;background:var(--cell);border:1px dashed var(--line2);
  color:var(--dim);font:400 var(--fs-sm) var(--font-b);cursor:pointer}
.apply-field input[type=file]::file-selector-button{
  margin-right:14px;padding:9px 16px;border:1px solid var(--line2);background:transparent;
  color:var(--text);font:500 var(--fs-micro) var(--font-m);letter-spacing:.08em;text-transform:uppercase;
  border-radius:2px;cursor:pointer;transition:background .25s,border-color .25s}
.apply-field input[type=file]::file-selector-button:hover{border-color:var(--text)}
.apply-hint{margin:0;font-size:var(--fs-nano);color:var(--dim)}
/* Honeypot: kept in the tab order out of view rather than display:none, which
   some bots skip when deciding what to fill in. */
.apply-honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.apply-privacy{margin:0;font-size:var(--fs-nano);color:var(--dim)}
.apply-notice{margin:0;padding:14px 16px;border:1px solid var(--line2);background:var(--cell);
  color:var(--muted);font-size:var(--fs-sm);line-height:1.6}
.apply-notice a,.apply-error a{color:var(--teal-soft);text-decoration:underline;text-underline-offset:3px}
.apply-error{padding:14px 16px;border:1px solid rgba(228,140,140,.35);background:rgba(228,140,140,.07)}
.apply-error-msg{margin:0 0 8px;font-size:var(--fs-sm);color:var(--text)}
.apply-error-fallback{margin:0;font-size:var(--fs-sm);color:var(--muted)}
.apply-submit{align-self:flex-start;margin-top:4px}
.apply-submit[disabled]{opacity:.55;cursor:not-allowed;pointer-events:none}
.apply-success{max-width:640px;margin-top:28px;padding:32px;border:1px solid var(--line2);background:var(--cell)}
.apply-success p{margin:0;font-size:1.05rem;line-height:1.6;color:var(--text)}
@media(max-width:680px){
  .apply-form,.apply-success{max-width:100%}
}
/* ================= end Careers: apply form =================== */
