cy0307/awesome-loop-engineering
Awesome Loop Engineering Dataset A structured dataset of 1022 papers, official docs, tools, benchmarks, patterns, critiques, and implementation guides for recurring AI-agent systems. Resource Atlas · GitHub field guide · Resource selection · Report a correction Dataset Summary Each row connects an original source to its contribution, novelty, impact, publication details, lifecycle stages, audience, evidence type, link status, and… See the full description on the dataset page: https://huggingface.co/datasets/cy0307/awesome-loop-engineering.
34.9k
1<!doctype html>2<html lang="en">3 <head>4 <meta charset="utf-8">5 <meta name="viewport" content="width=device-width, initial-scale=1">6 <title>Awesome Loop Engineering</title>7 <meta name="description" content="Explore 1022 resources from model recurrence to governed agent operations, then build with 22 patterns, 22 contracts, and 8 runtime starters.">8 <meta name="robots" content="index,follow">9 <meta name="author" content="Chaoyue He">10 <link rel="canonical" href="https://chaoyue0307.github.io/awesome-loop-engineering/">11 <link rel="icon" href="assets/favicon-32.png" type="image/png" sizes="32x32">12 <link rel="apple-touch-icon" href="assets/apple-touch-icon.png" sizes="180x180">13 <link rel="preconnect" href="https://fonts.googleapis.com">14 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>15 <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@500;600&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">16 <meta property="og:type" content="website">17 <meta property="og:title" content="Awesome Loop Engineering">18 <meta property="og:description" content="Explore 1022 papers, docs, tools, benchmarks, and guides, then build recurring agent systems with 22 patterns, 22 contracts, and 8 starters.">19 <meta property="og:url" content="https://chaoyue0307.github.io/awesome-loop-engineering/">20 <meta property="og:image" content="https://chaoyue0307.github.io/awesome-loop-engineering/assets/social-preview-1022-v10.png">21 <meta property="og:image:width" content="1280">22 <meta property="og:image:height" content="640">23 <meta property="og:image:alt" content="Awesome Loop Engineering: design loops, not just prompts.">24 <meta name="twitter:card" content="summary_large_image">25 <meta name="twitter:title" content="Awesome Loop Engineering">26 <meta name="twitter:description" content="1022 resources from model recurrence to agent operations, plus 22 patterns, 22 contracts, and 8 starters for building reliable loops.">27 <meta name="twitter:image" content="https://chaoyue0307.github.io/awesome-loop-engineering/assets/social-preview-1022-v10.png">28 <link rel="alternate" type="application/atom+xml" title="Awesome Loop Engineering releases" href="https://github.com/ChaoYue0307/awesome-loop-engineering/releases.atom">29 <link rel="alternate" type="application/atom+xml" title="Awesome Loop Engineering commits" href="https://github.com/ChaoYue0307/awesome-loop-engineering/commits/main.atom">30 <style>31 :root {32 color-scheme: light;33 --paper: #f7f9fc;34 --surface: #ffffff;35 --ink: #121722;36 --muted: #5c6678;37 --quiet: #7c8799;38 --line: #cfd7e5;39 --line-strong: #9eabc0;40 --blue: #155eef;41 --cyan: #08a9c4;42 --green: #0c9b68;43 --violet: #7055d9;44 --maxw: 1180px;45 }46 * { box-sizing: border-box; }47 html { scroll-behavior: smooth; scroll-padding-top: 84px; }48 body {49 margin: 0;50 background: var(--paper);51 color: var(--ink);52 font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;53 line-height: 1.62;54 -webkit-font-smoothing: antialiased;55 }56 a { color: var(--blue); text-decoration-thickness: 1px; text-underline-offset: 3px; }57 a:hover { color: #0f49bd; }58 button, input, select { font: inherit; }59 .wrap { width: min(var(--maxw), calc(100% - 48px)); margin: 0 auto; }60 .skip {61 position: absolute;62 left: -9999px;63 top: 0;64 z-index: 100;65 background: var(--ink);66 color: #fff;67 padding: 10px 16px;68 }69 .skip:focus { left: 0; }70 a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, summary:focus-visible {71 outline: 3px solid rgba(21, 94, 239, 0.32);72 outline-offset: 3px;73 }74 .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }75 .icon {76 display: block;77 width: 1em;78 height: 1em;79 flex: 0 0 auto;80 color: currentColor;81 stroke-width: 2;82 }83 84 header.site {85 position: sticky;86 top: 0;87 z-index: 50;88 background: rgba(247, 249, 252, 0.94);89 border-bottom: 1px solid var(--line);90 -webkit-backdrop-filter: blur(14px);91 backdrop-filter: blur(14px);92 }93 .nav { display: flex; align-items: center; min-height: 66px; gap: 22px; }94 .brand {95 display: inline-flex;96 align-items: center;97 gap: 10px;98 color: var(--ink);99 font-weight: 800;100 text-decoration: none;101 white-space: nowrap;102 }103 .brand:hover { color: var(--ink); }104 .brand .logo { display: block; width: 32px; height: 32px; flex: 0 0 auto; object-fit: contain; }105 .links { display: flex; align-items: center; gap: 18px; margin-left: 8px; }106 .links a { position: relative; color: var(--muted); font-size: 0.84rem; font-weight: 600; text-decoration: none; }107 .links a:hover { color: var(--ink); }108 .links a[aria-current="location"] { color: var(--blue); }109 .links a[aria-current="location"]::after {110 position: absolute;111 right: 0;112 bottom: -8px;113 left: 0;114 height: 2px;115 background: var(--blue);116 content: "";117 }118 .spacer { flex: 1; }119 .project-links { display: flex; gap: 8px; }120 .nav-link, .button {121 display: inline-flex;122 align-items: center;123 justify-content: center;124 gap: 7px;125 min-height: 40px;126 border: 1px solid var(--line-strong);127 border-radius: 6px;128 padding: 8px 14px;129 color: var(--ink);130 background: var(--surface);131 font-size: 0.86rem;132 font-weight: 700;133 line-height: 1.2;134 text-decoration: none;135 }136 .nav-link .icon, .button .icon, .menu-btn .icon { width: 17px; height: 17px; }137 .nav-link:hover, .button:hover { border-color: var(--blue); color: var(--blue); text-decoration: none; }138 .nav-link.primary, .button.primary { background: var(--blue); border-color: var(--blue); color: #fff; }139 .nav-link.primary:hover, .button.primary:hover { background: #0f49bd; border-color: #0f49bd; color: #fff; }140 .menu-btn {141 display: none;142 align-items: center;143 gap: 7px;144 min-height: 40px;145 border: 1px solid var(--line-strong);146 border-radius: 6px;147 padding: 7px 12px;148 color: var(--ink);149 background: var(--surface);150 font-size: 0.82rem;151 font-weight: 700;152 cursor: pointer;153 }154 .menu-icon-close { display: none; }155 .menu-btn[aria-expanded="true"] .menu-icon-open { display: none; }156 .menu-btn[aria-expanded="true"] .menu-icon-close { display: block; }157 .mobile-nav-only, .definition-compact, .mobile-diagram { display: none; }158 159 main { overflow: hidden; }160 section { padding: 86px 0; border-top: 1px solid var(--line); }161 .hero { position: relative; isolation: isolate; min-height: 0; overflow: hidden; padding: 52px 0 16px; border-top: 0; text-align: center; }162 .hero .wrap { position: relative; z-index: 1; }163 .hero-copy { position: relative; z-index: 2; }164 .hero-system {165 width: min(100%, 1120px);166 margin: 28px auto 0;167 border-top: 1px solid var(--line-strong);168 border-bottom: 1px solid var(--line-strong);169 background: var(--surface);170 }171 .scene-head {172 display: flex;173 align-items: center;174 justify-content: space-between;175 gap: 20px;176 min-height: 42px;177 border-bottom: 1px solid var(--line);178 padding: 9px 2px;179 color: var(--quiet);180 font-family: "IBM Plex Mono", ui-monospace, monospace;181 font-size: 0.66rem;182 text-transform: uppercase;183 }184 .scene-head strong { color: var(--blue); }185 .scene-flow { text-align: right; }186 .scene-flow span { color: var(--ink); font-weight: 700; }187 .scene-flow i { padding: 0 6px; color: var(--blue); font-style: normal; }188 .hero-scene {189 position: relative;190 z-index: 0;191 min-width: 0;192 width: 100%;193 height: 330px;194 overflow: hidden;195 background: #f4f7fc;196 pointer-events: none;197 }198 .hero-scene canvas { display: block; width: 100%; height: 100%; opacity: 0.96; }199 .scene-fallback { display: none; align-items: center; justify-content: center; height: 100%; color: var(--muted); font-size: 0.82rem; }200 .hero-scene[data-scene-state="fallback"] canvas { display: none; }201 .hero-scene[data-scene-state="fallback"] .scene-fallback { display: flex; }202 .scene-key {203 display: flex;204 align-items: center;205 justify-content: center;206 gap: 26px;207 min-height: 34px;208 border-top: 1px solid var(--line);209 color: var(--muted);210 font-size: 0.68rem;211 }212 .scene-key-item { display: inline-flex; align-items: center; gap: 7px; }213 .scene-key-item::before {214 width: 16px;215 height: 5px;216 border-radius: 2px;217 background: var(--blue);218 content: "";219 }220 .scene-key-item.packet::before { background: var(--cyan); }221 .scene-key-item.agents::before { background: var(--blue); }222 .scene-key-item.evidence::before { background: var(--green); }223 .scene-key-item.state::before { background: var(--violet); }224 .scene-outcomes {225 display: flex;226 align-items: center;227 justify-content: center;228 gap: 26px;229 min-height: 34px;230 border-top: 1px solid var(--line);231 color: var(--muted);232 font-size: 0.7rem;233 }234 .scene-outcome { display: inline-flex; align-items: center; gap: 7px; }235 .scene-outcome::before { width: 7px; height: 7px; border-radius: 50%; background: var(--blue); content: ""; }236 .scene-outcome.retry::before { background: var(--violet); }237 .scene-outcome.escalate::before { background: #d97706; }238 .scene-outcome.exit::before { background: var(--green); }239 .hero-inspector {240 display: grid;241 grid-template-columns: minmax(0, 1.45fr) minmax(260px, 0.55fr);242 gap: 24px;243 align-items: center;244 min-width: 0;245 border-top: 1px solid var(--line);246 padding: 12px 0;247 }248 .mental-model { padding: 18px 0 52px; }249 .section-label {250 display: flex;251 align-items: center;252 gap: 8px;253 margin: 0 0 12px;254 color: var(--blue);255 font-family: "IBM Plex Mono", ui-monospace, monospace;256 font-size: 0.74rem;257 font-weight: 600;258 text-transform: uppercase;259 }260 .section-label .icon { width: 15px; height: 15px; margin-top: 1px; }261 h1, h2, h3, p { overflow-wrap: anywhere; }262 h1 { max-width: 900px; margin: 0 auto; font-size: 3.85rem; line-height: 1.04; font-weight: 800; }263 h2 { margin: 0; font-size: 2.45rem; line-height: 1.14; font-weight: 800; }264 h3 { margin: 0; font-size: 1.02rem; line-height: 1.35; }265 .hero-kicker { width: fit-content; max-width: 100%; justify-content: center; margin: 0 auto 14px; }266 .tagline { margin: 18px auto 0; color: var(--blue); font-size: 1.5rem; font-weight: 700; }267 .lead { max-width: 780px; margin: 14px auto 0; color: var(--muted); font-size: 1.08rem; }268 .actions { display: flex; justify-content: center; flex-wrap: wrap; gap: 10px; margin-top: 26px; }269 .loop-stage-rail {270 display: grid;271 grid-template-columns: repeat(6, minmax(0, 1fr));272 max-width: 880px;273 margin: 28px auto 0;274 border: 1px solid var(--line-strong);275 border-radius: 6px;276 background: rgba(247, 249, 252, 0.94);277 overflow: hidden;278 }279 .loop-stage {280 display: flex;281 align-items: center;282 justify-content: center;283 gap: 7px;284 min-width: 0;285 min-height: 46px;286 border: 0;287 padding: 8px 9px;288 color: var(--muted);289 background: transparent;290 font-size: 0.76rem;291 font-weight: 700;292 cursor: pointer;293 }294 .loop-stage + .loop-stage { border-left: 1px solid var(--line); }295 .loop-stage:hover { color: var(--ink); background: rgba(255, 255, 255, 0.72); }296 .loop-stage[aria-pressed="true"] { color: #fff; background: var(--blue); }297 .loop-stage-number { font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.66rem; }298 .loop-stage-detail {299 min-height: 24px;300 max-width: 820px;301 margin: 10px auto 0;302 color: var(--muted);303 font-size: 0.82rem;304 }305 .loop-stage-detail strong { color: var(--ink); }306 .hero-system .loop-stage-rail {307 grid-template-columns: repeat(6, minmax(0, 1fr));308 width: 100%;309 max-width: none;310 margin: 0;311 }312 .hero-system .loop-stage:nth-child(n) { border-top: 0; }313 .hero-system .loop-stage:first-child { border-left: 0; }314 .hero-inspector .loop-stage-detail {315 min-height: 54px;316 max-width: none;317 margin: 0;318 border-left: 3px solid var(--blue);319 padding: 7px 0 0 14px;320 text-align: left;321 }322 .hero-visual { max-width: 780px; margin: 0 auto; }323 .hero-visual picture, .hero-visual img, .diagram img { display: block; width: 100%; height: auto; }324 .hero-visual picture, .diagram-scroll {325 width: 100%;326 overflow: hidden;327 border: 1px solid var(--line);328 border-radius: 6px;329 background: var(--surface);330 }331 .stats {332 display: grid;333 grid-template-columns: repeat(5, 1fr);334 max-width: 1000px;335 margin: 34px auto 0;336 border-top: 1px solid var(--line-strong);337 border-bottom: 1px solid var(--line-strong);338 }339 .stat { position: relative; padding: 17px 12px; text-align: left; }340 .stat + .stat { border-left: 1px solid var(--line); }341 .stat b { display: flex; align-items: center; gap: 8px; color: var(--ink); font-size: 1.35rem; line-height: 1.2; }342 .stat b .icon { width: 18px; height: 18px; color: var(--blue); }343 .stat span { color: var(--quiet); font-size: 0.76rem; font-weight: 600; text-transform: uppercase; }344 .definition { max-width: 900px; margin: 0 auto 28px; color: var(--muted); font-size: 0.92rem; text-align: center; }345 .definition strong { color: var(--ink); }346 347 .mobile-stack { display: none; }348 .desktop-stack-scene {349 position: relative;350 width: 100%;351 height: 442px;352 border: 1px solid var(--line-strong);353 border-radius: 6px 6px 0 0;354 background: #f4f7fc;355 overflow: hidden;356 }357 .desktop-stack-scene canvas,358 .desktop-stack-scene .desktop-stack-visual {359 position: absolute;360 inset: 0;361 display: block;362 width: 100%;363 height: 100%;364 }365 .desktop-stack-scene canvas { opacity: 0.98; }366 .desktop-stack-scene .desktop-stack-visual { object-fit: cover; transition: opacity 180ms ease; }367 .desktop-stack-scene[data-scene-ready="true"] .desktop-stack-visual { opacity: 0; pointer-events: none; }368 .desktop-stack-scene[data-scene-state="fallback"] canvas { display: none; }369 .desktop-stack-key {370 display: grid;371 grid-template-columns: repeat(2, minmax(0, 1fr));372 border: 1px solid var(--line-strong);373 border-top: 0;374 border-radius: 0 0 6px 6px;375 background: var(--surface);376 color: var(--muted);377 font-size: 0.73rem;378 line-height: 1.45;379 text-align: left;380 }381 .desktop-stack-key span { min-width: 0; padding: 11px 14px; }382 .desktop-stack-key span + span { border-left: 1px solid var(--line); }383 .desktop-stack-key strong { color: var(--ink); }384 385 .section-head { display: grid; grid-template-columns: minmax(250px, 0.78fr) minmax(360px, 1.22fr); gap: 64px; align-items: end; margin-bottom: 36px; }386 .section-intro { max-width: 720px; margin: 0; color: var(--muted); }387 .audit-note { margin: -17px 0 28px; border-top: 1px solid var(--line); padding-top: 13px; color: var(--muted); font-size: 0.8rem; }388 .audit-note strong { color: var(--ink); }389 .loop-layer-map {390 display: grid;391 grid-template-columns: repeat(3, minmax(0, 1fr));392 margin: 0 0 28px;393 border-top: 1px solid var(--line-strong);394 border-bottom: 1px solid var(--line-strong);395 }396 .loop-layer-item { min-width: 0; padding: 18px 20px 18px 0; }397 .loop-layer-item + .loop-layer-item { border-left: 1px solid var(--line); padding-left: 20px; }398 .loop-layer-item span { display: block; color: var(--blue); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.64rem; font-weight: 700; text-transform: uppercase; }399 .loop-layer-item strong { display: block; margin-top: 6px; color: var(--ink); font-size: 0.92rem; }400 .loop-layer-item p { margin: 6px 0 0; color: var(--muted); font-size: 0.78rem; line-height: 1.5; }401 .diagram { width: 100%; margin: 0; }402 .caption { margin: 13px 0 0; color: var(--quiet); font-size: 0.78rem; text-align: right; }403 .supporting-visual { margin: 0 0 34px; }404 405 .contract-need {406 display: grid;407 grid-template-columns: 210px minmax(0, 1fr);408 gap: 34px;409 margin-bottom: 30px;410 border-top: 1px solid var(--line-strong);411 border-bottom: 1px solid var(--line);412 padding: 22px 0;413 }414 .contract-need h3 { margin: 0; font-size: 0.96rem; }415 .contract-need p { max-width: 870px; margin: 0; color: var(--muted); font-size: 0.9rem; line-height: 1.6; }416 .contract-layers-head {417 display: grid;418 grid-template-columns: 210px minmax(0, 1fr);419 gap: 34px;420 align-items: baseline;421 margin-bottom: 12px;422 }423 .contract-layers-head h3 { margin: 0; font-size: 0.96rem; }424 .contract-layers-head p { margin: 0; color: var(--muted); font-size: 0.84rem; }425 .contract-layers {426 display: grid;427 grid-template-columns: repeat(4, minmax(0, 1fr));428 margin-bottom: 36px;429 border-top: 1px solid var(--line-strong);430 border-bottom: 1px solid var(--line-strong);431 }432 .contract-layer { min-width: 0; padding: 18px 20px 18px 0; }433 .contract-layer + .contract-layer { border-left: 1px solid var(--line); padding-left: 20px; }434 .contract-layer strong { display: block; color: var(--ink); font-size: 0.88rem; }435 .contract-layer span { display: block; margin-top: 6px; color: var(--muted); font-size: 0.78rem; line-height: 1.5; }436 .contract-layer.contract-policy strong { color: var(--blue); }437 .contract-phases {438 display: grid;439 grid-template-columns: repeat(3, minmax(0, 1fr));440 margin-top: 30px;441 border-top: 1px solid var(--line-strong);442 border-bottom: 1px solid var(--line-strong);443 }444 .contract-phase { min-width: 0; padding: 20px 22px 20px 0; }445 .contract-phase + .contract-phase { border-left: 1px solid var(--line); padding-left: 22px; }446 .contract-phase-label {447 display: block;448 margin-bottom: 8px;449 color: var(--blue);450 font-family: "IBM Plex Mono", ui-monospace, monospace;451 font-size: 0.65rem;452 font-weight: 650;453 text-transform: uppercase;454 }455 .contract-phase h3 { margin: 0; font-size: 0.94rem; }456 .contract-phase p { margin: 7px 0 0; color: var(--muted); font-size: 0.8rem; line-height: 1.5; }457 .contract-phase small { display: block; margin-top: 10px; color: var(--quiet); font-size: 0.7rem; line-height: 1.45; }458 .contract-example { margin-top: 38px; border-top: 1px solid var(--line-strong); border-bottom: 1px solid var(--line-strong); }459 .contract-example-head {460 display: grid;461 grid-template-columns: 210px minmax(0, 1fr);462 gap: 34px;463 padding: 22px 0;464 border-bottom: 1px solid var(--line);465 }466 .contract-example-head h3 { margin: 0; font-size: 1rem; }467 .contract-example-head p { max-width: 820px; margin: 0; color: var(--muted); font-size: 0.86rem; line-height: 1.55; }468 .contract-example-row {469 display: grid;470 grid-template-columns: 180px minmax(0, 1fr);471 gap: 34px;472 padding: 14px 0;473 border-bottom: 1px solid var(--line);474 }475 .contract-example-row strong { color: var(--ink); font-size: 0.8rem; }476 .contract-example-row p { margin: 0; color: var(--muted); font-size: 0.8rem; line-height: 1.5; }477 .contract-example-result {478 display: flex;479 align-items: center;480 justify-content: space-between;481 gap: 20px;482 padding: 16px 0;483 }484 .contract-example-result p { margin: 0; color: var(--ink); font-size: 0.82rem; font-weight: 700; line-height: 1.5; }485 .contract-example-result a { flex: 0 0 auto; font-size: 0.8rem; font-weight: 700; }486 487 .mobile-contract-summary, .mobile-lifecycle-summary { border-top: 1px solid var(--line-strong); }488 .mobile-contract-group { padding: 15px 0 0; }489 .mobile-contract-group + .mobile-contract-group { margin-top: 4px; }490 .mobile-contract-group > p {491 margin: 0 0 7px;492 color: var(--blue);493 font-family: "IBM Plex Mono", ui-monospace, monospace;494 font-size: 0.68rem;495 font-weight: 600;496 text-transform: uppercase;497 }498 .mobile-contract-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }499 .mobile-contract-part {500 display: grid;501 grid-template-columns: 24px minmax(0, 1fr);502 gap: 7px;503 align-items: baseline;504 min-width: 0;505 padding: 10px 8px 10px 0;506 border-top: 1px solid var(--line);507 }508 .mobile-contract-part:nth-child(even) { padding-left: 10px; border-left: 1px solid var(--line); }509 .mobile-contract-part span {510 color: var(--quiet);511 font-family: "IBM Plex Mono", ui-monospace, monospace;512 font-size: 0.65rem;513 font-weight: 600;514 }515 .mobile-contract-part strong { font-size: 0.86rem; line-height: 1.3; }516 .mobile-next-action {517 display: flex;518 align-items: baseline;519 justify-content: space-between;520 gap: 16px;521 margin: 15px 0 0;522 padding: 13px 0;523 border-top: 1px solid var(--blue);524 border-bottom: 1px solid var(--line-strong);525 }526 .mobile-next-action strong { color: var(--blue); font-size: 0.86rem; }527 .mobile-next-action span { color: var(--muted); font-size: 0.76rem; text-align: right; }528 529 .mobile-lifecycle-list {530 display: grid;531 grid-template-columns: repeat(2, minmax(0, 1fr));532 margin: 0;533 padding: 0;534 list-style: none;535 }536 .mobile-lifecycle-list li {537 display: grid;538 grid-template-columns: 24px minmax(0, 1fr);539 gap: 7px;540 min-width: 0;541 padding: 13px 8px 13px 0;542 border-bottom: 1px solid var(--line);543 }544 .mobile-lifecycle-list li:nth-child(even) { padding-left: 10px; border-left: 1px solid var(--line); }545 .mobile-lifecycle-list span {546 color: var(--blue);547 font-family: "IBM Plex Mono", ui-monospace, monospace;548 font-size: 0.65rem;549 font-weight: 600;550 }551 .mobile-lifecycle-list strong { display: block; font-size: 0.88rem; line-height: 1.25; }552 .mobile-lifecycle-list small { display: block; margin-top: 3px; color: var(--muted); font-size: 0.7rem; line-height: 1.4; }553 .mobile-lifecycle-outcomes {554 display: grid;555 grid-template-columns: repeat(3, minmax(0, 1fr));556 border-bottom: 1px solid var(--line-strong);557 }558 .mobile-lifecycle-outcomes div { min-width: 0; padding: 12px 8px 13px 0; }559 .mobile-lifecycle-outcomes div + div { padding-left: 9px; border-left: 1px solid var(--line); }560 .mobile-lifecycle-outcomes strong { display: block; color: var(--blue); font-size: 0.78rem; }561 .mobile-lifecycle-outcomes span { display: block; margin-top: 2px; color: var(--muted); font-size: 0.66rem; line-height: 1.35; }562 563 .principles, .link-grid, .pattern-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }564 .contribute-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }565 .principle, .card, .pattern {566 min-width: 0;567 border-top: 1px solid var(--line-strong);568 padding: 18px 22px 18px 0;569 }570 .principle + .principle, .card + .card, .pattern + .pattern { padding-left: 22px; }571 .principle p, .card p { margin: 7px 0 0; color: var(--muted); font-size: 0.9rem; }572 .principle h3, .card h3, footer h4 { display: flex; align-items: flex-start; gap: 8px; }573 .principle h3 .icon, .card h3 .icon, footer h4 .icon { width: 17px; height: 17px; margin-top: 2px; color: var(--blue); }574 .principles { margin-top: 34px; }575 .choice-why {576 display: grid;577 grid-template-columns: 220px minmax(0, 1fr);578 gap: 34px;579 margin-bottom: 0;580 border-top: 1px solid var(--line-strong);581 border-bottom: 1px solid var(--line);582 padding: 22px 0;583 }584 .choice-why h3 { margin: 0; font-size: 0.96rem; }585 .choice-why p { max-width: 850px; margin: 0; color: var(--muted); font-size: 0.9rem; line-height: 1.6; }586 .choice-fit {587 display: grid;588 grid-template-columns: repeat(2, minmax(0, 1fr));589 margin-bottom: 30px;590 border-bottom: 1px solid var(--line-strong);591 }592 .choice-fit-column { min-width: 0; padding: 22px 24px 22px 0; }593 .choice-fit-column + .choice-fit-column { border-left: 1px solid var(--line); padding-left: 24px; }594 .choice-fit-label { display: flex; align-items: center; gap: 8px; margin: 0; color: var(--ink); font-size: 0.88rem; }595 .choice-fit-label .icon { width: 17px; height: 17px; color: var(--green); }596 .choice-fit-column:last-child .choice-fit-label .icon { color: var(--violet); }597 .choice-fit ul { margin: 12px 0 0; padding-left: 18px; }598 .choice-fit li { margin-top: 7px; color: var(--muted); font-size: 0.82rem; line-height: 1.5; }599 .choice-fit li::marker { color: var(--blue); }600 .choice-steps {601 display: grid;602 grid-template-columns: repeat(4, minmax(0, 1fr));603 border-top: 1px solid var(--line-strong);604 border-bottom: 1px solid var(--line-strong);605 }606 .choice-step { min-width: 0; padding: 20px 20px 20px 0; }607 .choice-step + .choice-step { border-left: 1px solid var(--line); padding-left: 20px; }608 .choice-step .number {609 display: block;610 margin-bottom: 8px;611 color: var(--blue);612 font-family: "IBM Plex Mono", ui-monospace, monospace;613 font-size: 0.67rem;614 font-weight: 700;615 }616 .choice-step strong { display: block; font-size: 0.9rem; }617 .choice-step p { margin: 6px 0 0; color: var(--muted); font-size: 0.78rem; line-height: 1.5; }618 .choice-sequence { margin: 16px 0 28px; color: var(--muted); font-size: 0.84rem; line-height: 1.55; }619 .choice-sequence strong { color: var(--ink); }620 .pattern-grid { gap: 0; border-top: 1px solid var(--line-strong); }621 .pattern {622 display: flex;623 min-height: 178px;624 flex-direction: column;625 color: var(--ink);626 text-decoration: none;627 transition: color 140ms ease, border-color 140ms ease;628 }629 .pattern-grid .pattern:nth-child(n) { border-top: 0; border-bottom: 1px solid var(--line); border-left: 1px solid var(--line); padding: 20px 22px; }630 .pattern-grid .pattern:nth-child(3n+1) { border-left: 0; padding-left: 0; }631 .pattern-grid .pattern:nth-child(3n) { padding-right: 0; }632 .pattern:hover { color: var(--blue); border-color: var(--blue); text-decoration: none; }633 .pattern .category {634 display: block;635 margin-bottom: 8px;636 color: var(--blue);637 font-family: "IBM Plex Mono", ui-monospace, monospace;638 font-size: 0.62rem;639 font-weight: 650;640 text-transform: uppercase;641 }642 .pattern .sym { display: block; color: var(--quiet); font-size: 0.76rem; line-height: 1.4; }643 .pattern .name { display: block; margin-top: 6px; font-weight: 760; line-height: 1.35; }644 .pattern .outcome { display: block; margin-top: auto; padding-top: 14px; color: var(--muted); font-size: 0.74rem; line-height: 1.5; }645 .pattern .outcome strong { color: var(--ink); }646 .filter-row { display: flex; align-items: center; gap: 18px; margin: 0 0 16px; }647 .pattern-filter {648 width: min(100%, 460px);649 min-height: 44px;650 border: 1px solid var(--line-strong);651 border-radius: 6px;652 padding: 10px 13px;653 color: var(--ink);654 background: var(--surface);655 }656 .pattern-filter::placeholder { color: var(--quiet); }657 .filter-row > a { margin-left: auto; font-size: 0.8rem; font-weight: 700; }658 .filter-empty { margin: 0 0 18px; color: var(--muted); }659 660 .card { display: block; color: var(--ink); text-decoration: none; }661 a.card:hover { color: var(--blue); border-color: var(--blue); text-decoration: none; }662 .runtime-kind {663 display: block;664 margin-bottom: 8px;665 color: var(--blue);666 font-family: "IBM Plex Mono", ui-monospace, monospace;667 font-size: 0.64rem;668 font-weight: 650;669 line-height: 1.2;670 text-transform: uppercase;671 }672 .runtime-kind.executable { color: var(--green); }673 .future-grid {674 display: grid;675 grid-template-columns: repeat(3, minmax(0, 1fr));676 border-top: 1px solid var(--line-strong);677 border-bottom: 1px solid var(--line-strong);678 }679 .future-track {680 display: flex;681 min-width: 0;682 flex-direction: column;683 padding: 24px 24px 24px 0;684 }685 .future-track + .future-track { border-left: 1px solid var(--line); padding-left: 24px; }686 .future-track h3 { display: flex; align-items: center; gap: 9px; margin: 0; font-size: 1rem; }687 .future-track h3 .icon { width: 18px; height: 18px; color: var(--blue); }688 .future-track ul { margin: 16px 0 22px; padding-left: 19px; }689 .future-track li { margin-top: 9px; color: var(--muted); font-size: 0.86rem; line-height: 1.5; }690 .future-track li::marker { color: var(--blue); }691 .future-output { margin: auto 0 0; border-top: 1px solid var(--line); padding-top: 14px; color: var(--quiet); font-size: 0.76rem; line-height: 1.5; }692 .future-output strong { display: block; margin-bottom: 3px; color: var(--ink); }693 .future-steps {694 display: grid;695 grid-template-columns: repeat(4, minmax(0, 1fr));696 border-bottom: 1px solid var(--line-strong);697 }698 .future-step { min-width: 0; padding: 20px 20px 20px 0; }699 .future-step + .future-step { border-left: 1px solid var(--line); padding-left: 20px; }700 .future-step span {701 display: block;702 color: var(--blue);703 font-family: "IBM Plex Mono", ui-monospace, monospace;704 font-size: 0.63rem;705 font-weight: 700;706 text-transform: uppercase;707 }708 .future-step strong { display: block; margin-top: 6px; font-size: 0.88rem; }709 .future-step p { margin: 5px 0 0; color: var(--muted); font-size: 0.76rem; line-height: 1.5; }710 .future-shared {711 display: grid;712 grid-template-columns: 180px minmax(0, 1fr) auto;713 gap: 22px;714 align-items: center;715 border-bottom: 1px solid var(--line-strong);716 padding: 20px 0;717 }718 .future-shared strong { font-size: 0.92rem; }719 .future-shared p { margin: 0; color: var(--muted); font-size: 0.84rem; line-height: 1.55; }720 .star-history-chart {721 display: block;722 width: 100%;723 color: inherit;724 line-height: 0;725 text-decoration: none;726 }727 .star-history-chart img { display: block; width: 100%; height: auto; }728 .growth-note {729 display: flex;730 align-items: center;731 justify-content: space-between;732 gap: 24px;733 border-bottom: 1px solid var(--line-strong);734 padding: 20px 0;735 }736 .growth-note p { max-width: 760px; margin: 0; color: var(--muted); font-size: 0.88rem; }737 .growth-note .button { flex: 0 0 auto; }738 code {739 border: 1px solid var(--line);740 border-radius: 4px;741 padding: 1px 5px;742 background: #eef2f8;743 color: var(--ink);744 font-family: "IBM Plex Mono", ui-monospace, monospace;745 font-size: 0.84em;746 }747 .maturity-guide {748 display: grid;749 grid-template-columns: 180px minmax(0, 1fr);750 gap: 30px;751 align-items: start;752 margin: 0 0 30px;753 border-top: 1px solid var(--line-strong);754 border-bottom: 1px solid var(--line);755 padding: 20px 0;756 }757 .maturity-guide h3 { margin: 0; font-size: 0.96rem; line-height: 1.35; }758 .maturity-guide p { margin: 0; color: var(--muted); font-size: 0.88rem; line-height: 1.62; }759 .maturity-guide p + p { margin-top: 8px; }760 .maturity-guide strong { color: var(--ink); }761 .levels { border-top: 1px solid var(--line-strong); }762 .level {763 display: grid;764 grid-template-columns: 64px minmax(190px, 0.72fr) minmax(0, 2.2fr);765 gap: 24px;766 align-items: start;767 padding: 25px 0;768 border-bottom: 1px solid var(--line);769 }770 .level .number { padding-top: 2px; color: var(--blue); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.76rem; font-weight: 700; }771 .level-intro h3 { margin: 0; font-size: 1rem; line-height: 1.35; }772 .level-intro p { margin: 6px 0 0; color: var(--muted); font-size: 0.82rem; line-height: 1.5; }773 .level-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 22px; margin: 0; }774 .level-facts > div { min-width: 0; }775 .level-facts dt { color: var(--quiet); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.62rem; font-weight: 650; letter-spacing: 0; text-transform: uppercase; }776 .level-facts dd { margin: 6px 0 0; color: var(--muted); font-size: 0.8rem; line-height: 1.52; }777 778 .resource-explorer { border-top: 1px solid var(--line-strong); }779 .resource-toolbar {780 display: grid;781 grid-template-columns: minmax(240px, 1.4fr) repeat(4, minmax(132px, 0.66fr)) auto;782 gap: 10px;783 padding: 16px 0;784 border-bottom: 1px solid var(--line);785 }786 .resource-input, .resource-select {787 width: 100%;788 min-height: 44px;789 border: 1px solid var(--line-strong);790 border-radius: 6px;791 padding: 9px 12px;792 color: var(--ink);793 background: var(--surface);794 }795 .resource-input::placeholder { color: var(--quiet); }796 .resource-reset, .resource-more {797 align-items: center;798 justify-content: center;799 gap: 7px;800 min-height: 44px;801 border: 1px solid var(--line-strong);802 border-radius: 6px;803 padding: 9px 13px;804 color: var(--ink);805 background: var(--surface);806 font-weight: 700;807 cursor: pointer;808 }809 .resource-reset { display: inline-flex; }810 .resource-reset .icon { width: 15px; height: 15px; }811 .resource-reset:hover, .resource-more:hover { border-color: var(--blue); color: var(--blue); }812 .resource-collections { display: flex; flex-wrap: wrap; gap: 0; border-bottom: 1px solid var(--line); }813 .resource-collection {814 display: inline-flex;815 align-items: center;816 justify-content: center;817 gap: 6px;818 min-height: 42px;819 border: 0;820 border-bottom: 2px solid transparent;821 padding: 9px 14px;822 color: var(--muted);823 background: transparent;824 font-size: 0.82rem;825 font-weight: 700;826 cursor: pointer;827 }828 .resource-collection:hover { color: var(--ink); }829 .resource-collection[aria-pressed="true"] { border-bottom-color: var(--blue); color: var(--blue); }830 .resource-collection .icon { width: 15px; height: 15px; }831 .resource-summary { display: flex; align-items: center; justify-content: space-between; gap: 20px; min-height: 58px; border-bottom: 1px solid var(--line-strong); }832 .resource-count { margin: 0; color: var(--muted); font-size: 0.86rem; }833 .resource-sort { width: auto; min-width: 176px; }834 .resource-list { min-height: 180px; }835 .resource-row-head {836 display: grid;837 grid-template-columns: minmax(0, 1.5fr) 72px minmax(170px, 0.55fr) minmax(130px, 0.4fr);838 gap: 22px;839 padding: 11px 0;840 border-bottom: 1px solid var(--line-strong);841 color: var(--quiet);842 font-family: "IBM Plex Mono", ui-monospace, monospace;843 font-size: 0.66rem;844 font-weight: 650;845 text-transform: uppercase;846 }847 .resource-item {848 display: grid;849 grid-template-columns: minmax(0, 1.5fr) 72px minmax(170px, 0.55fr) minmax(130px, 0.4fr);850 gap: 12px 22px;851 align-items: start;852 padding: 18px 0 16px;853 border-bottom: 1px solid var(--line);854 }855 .resource-work, .resource-publication, .resource-evidence { min-width: 0; }856 .resource-title { color: var(--ink); font-weight: 760; line-height: 1.35; text-decoration: none; }857 .resource-title:hover { color: var(--blue); }858 .resource-item p { margin: 0; }859 .resource-contribution { margin-top: 6px !important; color: var(--muted); font-size: 0.86rem; line-height: 1.5; }860 .resource-authors { margin-top: 7px !important; color: var(--quiet); font-size: 0.76rem; line-height: 1.45; }861 .resource-meta { margin-top: 7px; color: var(--quiet); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.68rem; overflow-wrap: anywhere; }862 .resource-cell-label { display: none; margin-bottom: 5px; color: var(--quiet); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.62rem; font-weight: 650; text-transform: uppercase; }863 .resource-year-value { color: var(--ink); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.9rem; font-weight: 700; }864 .resource-year.is-empty { min-height: 1px; }865 .resource-venue { display: block; color: var(--ink); font-size: 0.82rem; font-weight: 700; line-height: 1.4; overflow-wrap: anywhere; }866 .resource-publisher, .resource-date, .resource-identifier { display: block; margin-top: 4px; color: var(--quiet); font-size: 0.72rem; line-height: 1.4; overflow-wrap: anywhere; }867 .resource-type-label { display: block; color: var(--ink); font-size: 0.78rem; font-weight: 700; }868 .resource-signal { display: block; margin-top: 5px; color: var(--green); font-size: 0.68rem; font-weight: 700; text-transform: uppercase; }869 .resource-signal.contextual { color: var(--violet); }870 .resource-signal.medium { color: var(--blue); }871 .resource-signal.unverified { color: var(--quiet); }872 .resource-source-status { display: block; margin-top: 4px; color: var(--quiet); font-size: 0.7rem; line-height: 1.4; }873 .resource-details, .resource-details:last-child { grid-column: 1 / -1; margin-top: 2px; border: 0; border-top: 1px dashed var(--line); border-bottom: 0; padding: 9px 0 0; }874 .resource-details summary { width: fit-content; color: var(--blue); font-size: 0.72rem; font-weight: 700; }875 .resource-detail-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 28px; padding: 14px 0 4px; }876 .resource-detail h4 { margin: 0 0 5px; color: var(--quiet); font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.64rem; text-transform: uppercase; }877 .resource-detail p { color: var(--muted); font-size: 0.78rem; line-height: 1.5; }878 .resource-bibliography + .resource-bibliography { margin-top: 5px; }879 .resource-actions { display: flex; justify-content: center; padding-top: 18px; }880 .resource-empty, .resource-loading { margin: 0; padding: 28px 0; color: var(--muted); }881 details { border-top: 1px solid var(--line-strong); padding: 18px 0; }882 details:last-child { border-bottom: 1px solid var(--line-strong); }883 summary { cursor: pointer; font-weight: 750; }884 details p { max-width: 850px; margin: 10px 0 0; color: var(--muted); }885 886 footer { padding: 58px 0 48px; border-top: 1px solid var(--line-strong); background: #eef2f8; }887 .footer-grid { display: grid; grid-template-columns: 1.45fr 0.8fr 0.8fr 0.8fr; gap: 32px; }888 .footer-grid > * { min-width: 0; }889 footer h4 { margin: 0 0 10px; font-size: 0.9rem; }890 footer a { display: block; padding: 3px 0; color: var(--muted); font-size: 0.84rem; text-decoration: none; }891 footer a:hover { color: var(--blue); }892 .cite { position: relative; margin-top: 12px; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--surface); overflow: auto; }893 .cite pre { min-width: 460px; margin: 0; padding: 16px; color: #344054; font: 0.74rem/1.55 "IBM Plex Mono", ui-monospace, monospace; }894 .copy { position: absolute; top: 8px; right: 8px; border: 1px solid var(--line-strong); border-radius: 4px; padding: 4px 9px; background: var(--surface); color: var(--ink); font-size: 0.72rem; font-weight: 700; cursor: pointer; }895 .legal { margin: 30px 0 0; color: var(--quiet); font-size: 0.8rem; }896 897 @media (min-width: 1041px) {898 #runtimes .link-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }899 #runtimes .card { padding-left: 22px; }900 #runtimes .card:nth-child(4n+1) { padding-left: 0; }901 }902 @media (max-width: 1040px) {903 .links { display: none; }904 .menu-btn { display: inline-flex; }905 .nav { position: relative; }906 .links.open {907 position: absolute;908 top: 66px;909 left: -24px;910 right: -24px;911 display: flex;912 flex-direction: column;913 align-items: stretch;914 gap: 0;915 margin: 0;916 padding: 10px 24px 14px;917 border-bottom: 1px solid var(--line);918 background: var(--paper);919 box-shadow: 0 14px 30px rgba(18, 23, 34, 0.09);920 max-height: calc(100vh - 66px);921 overflow-y: auto;922 }923 .links.open a { padding: 9px 0; }924 .links.open .mobile-nav-only { display: flex; align-items: center; gap: 8px; }925 .links.open a[aria-current="location"]::after { display: none; }926 }927 @media (max-width: 920px) {928 .hero-system {929 width: 100%;930 margin-top: 28px;931 }932 .hero-scene { height: 316px; }933 .hero-inspector { grid-template-columns: 1fr; gap: 12px; padding: 14px 0; }934 .hero-system .loop-stage-rail { grid-template-columns: repeat(6, minmax(0, 1fr)); }935 .hero-inspector .loop-stage-detail { min-height: 42px; }936 }937 @media (max-width: 820px) {938 .wrap { width: min(var(--maxw), calc(100% - 32px)); }939 .links.open { left: -16px; right: -16px; padding-inline: 16px; }940 section { padding: 68px 0; }941 .hero { min-height: 0; padding: 40px 0 24px; }942 .hero-system { margin-top: 24px; }943 .hero-scene { width: 100%; height: 286px; }944 .hero-scene canvas { opacity: 1; }945 .hero-system .loop-stage-rail { grid-template-columns: repeat(3, minmax(0, 1fr)); }946 .hero-system .loop-stage:nth-child(n) { border-top: 0; border-left: 1px solid var(--line); }947 .hero-system .loop-stage:nth-child(3n+1) { border-left: 0; }948 .hero-system .loop-stage:nth-child(n+4) { border-top: 1px solid var(--line); }949 h1 { font-size: 2.7rem; }950 h2 { font-size: 2rem; }951 .section-head { grid-template-columns: 1fr; gap: 16px; align-items: start; }952 .contract-need, .contract-layers-head, .contract-example-head { grid-template-columns: 180px minmax(0, 1fr); gap: 24px; }953 .contract-layers { grid-template-columns: repeat(2, minmax(0, 1fr)); }954 .contract-layer:nth-child(n) { border-left: 1px solid var(--line); padding: 18px; }955 .contract-layer:nth-child(2n+1) { border-left: 0; padding-left: 0; }956 .contract-layer:nth-child(n+3) { border-top: 1px solid var(--line); }957 .contract-phase { padding-right: 18px; }958 .contract-phase + .contract-phase { padding-left: 18px; }959 .contract-example-row { grid-template-columns: 150px minmax(0, 1fr); gap: 24px; }960 .stats { grid-template-columns: repeat(2, 1fr); }961 .stat + .stat { border-left: 0; }962 .stat:nth-child(even) { border-left: 1px solid var(--line); }963 .stat:nth-child(n+3) { border-top: 1px solid var(--line); }964 .stat:last-child { grid-column: 1 / -1; border-left: 0; }965 .principles, .link-grid, .pattern-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }966 .choice-why { grid-template-columns: 180px minmax(0, 1fr); gap: 24px; }967 .choice-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }968 .choice-step:nth-child(n) { border-left: 1px solid var(--line); padding: 18px; }969 .choice-step:nth-child(2n+1) { border-left: 0; padding-left: 0; }970 .choice-step:nth-child(n+3) { border-top: 1px solid var(--line); }971 .pattern-grid .pattern:nth-child(n) { border-left: 1px solid var(--line); padding: 20px; }972 .pattern-grid .pattern:nth-child(2n+1) { border-left: 0; padding-left: 0; }973 .pattern-grid .pattern:nth-child(2n) { padding-right: 0; }974 .future-grid { grid-template-columns: 1fr; }975 .future-track { padding: 20px 0; }976 .future-track + .future-track { border-top: 1px solid var(--line); border-left: 0; padding-left: 0; }977 .future-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }978 .future-step:nth-child(n) { border-left: 1px solid var(--line); padding: 18px; }979 .future-step:nth-child(2n+1) { border-left: 0; padding-left: 0; }980 .future-step:nth-child(n+3) { border-top: 1px solid var(--line); }981 .future-shared { grid-template-columns: 1fr; gap: 10px; align-items: start; }982 .growth-note { align-items: flex-start; flex-direction: column; gap: 14px; }983 .maturity-guide { grid-template-columns: 150px minmax(0, 1fr); gap: 24px; }984 .level { grid-template-columns: 52px minmax(0, 1fr); gap: 16px; }985 .level .number { grid-row: 1 / 3; }986 .level-intro, .level-facts { grid-column: 2; }987 .level-facts { grid-template-columns: 1fr; gap: 12px; }988 .level-facts > div { display: grid; grid-template-columns: 108px minmax(0, 1fr); gap: 14px; }989 .level-facts dd { margin-top: 0; }990 .resource-toolbar { grid-template-columns: repeat(2, minmax(0, 1fr)); }991 .resource-toolbar label:first-child { grid-column: 1 / -1; }992 .resource-reset { width: 100%; }993 .resource-row-head { display: none; }994 .resource-item { grid-template-columns: 72px minmax(0, 1fr) minmax(120px, 0.72fr); gap: 14px 18px; }995 .resource-work, .resource-details { grid-column: 1 / -1; }996 .resource-cell-label { display: block; }997 .resource-detail-grid { gap: 14px 22px; }998 .footer-grid { grid-template-columns: 1fr 1fr; }999 .loop-stage-rail { grid-template-columns: repeat(3, minmax(0, 1fr)); }1000 .loop-stage:nth-child(4) { border-left: 0; }1001 .loop-stage:nth-child(n+4) { border-top: 1px solid var(--line); }1002 }1003 @media (min-width: 561px) and (max-width: 768px) {1004 .star-history-chart { max-width: 680px; margin-inline: auto; }1005 }1006 @media (max-width: 600px) {1007 .project-links .nav-link:first-child { display: none; }1008 .project-links { gap: 6px; }1009 }1010 @media (max-width: 560px) {1011 html { scroll-padding-top: 74px; }1012 .nav { min-height: 64px; gap: 8px; }1013 .links.open { top: 64px; max-height: calc(100vh - 64px); }1014 .nav-link { min-height: 44px; padding-inline: 12px; }1015 .brand { min-width: 0; gap: 8px; }1016 .brand .logo { width: 28px; height: 28px; }1017 .brand .brand-text { display: block; font-size: 0.78rem; line-height: 1.1; }1018 .menu-btn { width: 44px; min-height: 44px; justify-content: center; padding: 0; }1019 .menu-label { display: none; }1020 .menu-btn .icon { width: 18px; height: 18px; }1021 section { padding: 56px 0; }1022 h1 { font-size: 2.25rem; line-height: 1.08; }1023 h2 { font-size: 1.85rem; line-height: 1.16; }1024 .section-label { align-items: flex-start; margin-bottom: 9px; font-size: 0.68rem; line-height: 1.4; }1025 .section-label .icon { width: 14px; height: 14px; margin-top: 1px; }1026 .section-head { gap: 12px; margin-bottom: 24px; }1027 .section-intro { font-size: 0.95rem; }1028 .contract-need, .contract-layers-head, .contract-example-head { grid-template-columns: 1fr; gap: 8px; }1029 .contract-need { margin-bottom: 24px; padding: 18px 0; }1030 .contract-need p { font-size: 0.84rem; line-height: 1.55; }1031 .contract-layers-head { margin-bottom: 10px; }1032 .contract-layers { grid-template-columns: 1fr; margin-bottom: 28px; }1033 .contract-layer:nth-child(n) { border-top: 1px solid var(--line); border-left: 0; padding: 14px 0; }1034 .contract-layer:first-child { border-top: 0; }1035 .contract-layer span { margin-top: 4px; }1036 .contract-phases { grid-template-columns: 1fr; margin-top: 24px; }1037 .contract-phase:nth-child(n) { border-top: 1px solid var(--line); border-left: 0; padding: 16px 0; }1038 .contract-phase:first-child { border-top: 0; }1039 .contract-example { margin-top: 30px; }1040 .contract-example-head { padding: 18px 0; }1041 .contract-example-row { grid-template-columns: 1fr; gap: 5px; padding: 13px 0; }1042 .contract-example-result { align-items: flex-start; flex-direction: column; gap: 9px; padding: 15px 0; }1043 .hero { min-height: 0; padding: 20px 0 6px; }1044 .hero-kicker { max-width: 100%; align-items: center; margin: 0 auto 10px; line-height: 1.35; text-align: left; }1045 .tagline { margin-top: 11px; font-size: 1.18rem; }1046 .lead { margin-top: 6px; font-size: 0.95rem; line-height: 1.48; }1047 .actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; max-width: 420px; gap: 8px; margin: 12px auto 0; }1048 .actions .button { min-width: 0; min-height: 44px; padding-inline: 8px; font-size: 0.82rem; }1049 .actions .button .icon { width: 16px; height: 16px; }1050 .hero-system { display: flex; flex-direction: column; margin-top: 8px; }1051 .scene-head { order: 1; justify-content: center; min-height: 24px; padding: 2px 0; }1052 .scene-flow { display: none; }1053 .hero-scene { order: 2; width: 100%; height: 224px; }1054 .hero-scene canvas { opacity: 1; }1055 .scene-key { display: none; }1056 .scene-key-item { justify-content: flex-start; min-width: 0; min-height: 34px; padding: 7px 8px; }1057 .scene-key-item:nth-child(even) { border-left: 1px solid var(--line); }1058 .scene-key-item:nth-child(n+3) { border-top: 1px solid var(--line); }1059 .scene-key-item::before { width: 13px; flex: 0 0 auto; }1060 .scene-outcomes { order: 5; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; min-height: 34px; padding: 0; font-size: 0.62rem; line-height: 1.3; }1061 .scene-outcome { justify-content: flex-start; gap: 5px; min-width: 0; padding: 8px 6px; }1062 .scene-outcome + .scene-outcome { border-left: 1px solid var(--line); }1063 .scene-outcome::before { width: 6px; height: 6px; flex: 0 0 auto; }1064 .hero-inspector { order: 3; gap: 8px; padding: 0 0 6px; }1065 .loop-stage-rail { margin-top: 20px; }1066 .hero-system .loop-stage-rail { margin: 0; }1067 .loop-stage { min-height: 44px; padding-inline: 6px; font-size: 0.71rem; }1068 .loop-stage-number { font-size: 0.61rem; }1069 .loop-stage-detail { min-height: 40px; margin-top: 8px; font-size: 0.75rem; line-height: 1.45; }1070 .hero-inspector .loop-stage-detail { min-height: 36px; margin: 0; padding: 4px 8px 0 12px; line-height: 1.42; }1071 .mental-model { padding: 30px 0 46px; }1072 .definition { margin-bottom: 18px; font-size: 0.88rem; line-height: 1.55; text-align: left; }1073 .definition-full { display: none; }1074 .definition-compact { display: inline; }1075 .hero-visual { width: min(100%, 420px); }1076 .hero-visual .desktop-stack-visual { display: none; }1077 .desktop-stack-scene, .desktop-stack-key { display: none; }1078 .mobile-stack {1079 display: block;1080 border: 1px solid var(--line-strong);1081 border-radius: 6px;1082 background: var(--surface);1083 overflow: hidden;1084 text-align: left;1085 }1086 .mobile-stack-head { padding: 15px 15px 13px; border-bottom: 1px solid var(--line); }1087 .mobile-stack-eyebrow {1088 display: block;1089 color: var(--blue);1090 font-family: "IBM Plex Mono", ui-monospace, monospace;1091 font-size: 0.62rem;1092 font-weight: 650;1093 text-transform: uppercase;1094 }1095 .mobile-stack-head strong { display: block; margin-top: 3px; font-size: 1.12rem; line-height: 1.25; }1096 .mobile-stack-list { margin: 0; padding: 0; list-style: none; }1097 .mobile-stack-layer {1098 display: grid;1099 grid-template-columns: 30px minmax(0, 1fr);1100 gap: 10px;1101 min-width: 0;1102 padding: 13px 14px 14px 12px;1103 border-left: 4px solid var(--ink);1104 }1105 .mobile-stack-layer + .mobile-stack-layer { border-top: 1px solid var(--line); }1106 .mobile-stack-layer.loop { border-left-color: var(--blue); background: #eef4ff; }1107 .mobile-stack-layer.harness { border-left-color: var(--cyan); }1108 .mobile-stack-layer.context { border-left-color: var(--green); }1109 .mobile-stack-number {1110 padding-top: 2px;1111 color: var(--quiet);1112 font-family: "IBM Plex Mono", ui-monospace, monospace;1113 font-size: 0.64rem;1114 font-weight: 700;1115 }1116 .mobile-stack-layer.loop .mobile-stack-number, .mobile-stack-layer.loop strong { color: var(--blue); }1117 .mobile-stack-layer.harness strong { color: #087f99; }1118 .mobile-stack-layer.context strong { color: #087b53; }1119 .mobile-stack-layer strong { display: block; font-size: 0.92rem; line-height: 1.3; }1120 .mobile-stack-layer p { margin: 3px 0 0; color: var(--muted); font-size: 0.74rem; line-height: 1.45; }1121 .mobile-stack-note {1122 margin: 0;1123 border-top: 1px solid var(--line-strong);1124 padding: 11px 14px 12px;1125 color: var(--muted);1126 font-size: 0.72rem;1127 line-height: 1.45;1128 }1129 .mobile-stack-note strong { color: var(--blue); }1130 .stats { margin-top: 20px; }1131 .stat { min-height: 76px; padding: 14px 11px; }1132 .stat b { font-size: 1.22rem; }1133 .stat span { font-size: 0.68rem; }1134 .desktop-diagram { display: none; }1135 .mobile-diagram { display: block; }1136 .supporting-visual { display: none; }1137 .mobile-contract-summary { border-bottom: 1px solid var(--line-strong); }1138 .mobile-contract-group { padding: 16px 0 0; }1139 .mobile-contract-group + .mobile-contract-group { margin-top: 14px; border-top: 1px solid var(--line); }1140 .mobile-contract-group > p { margin-bottom: 9px; border-left: 3px solid var(--blue); padding-left: 9px; }1141 .mobile-contract-grid { gap: 6px; }1142 .mobile-contract-part {1143 grid-template-columns: 28px minmax(0, 1fr);1144 gap: 7px;1145 min-height: 48px;1146 padding: 9px;1147 border: 1px solid var(--line);1148 border-radius: 6px;1149 background: var(--surface);1150 }1151 .mobile-contract-part:nth-child(even) { padding-left: 9px; border-left: 1px solid var(--line); }1152 .mobile-contract-part span {1153 display: inline-flex;1154 align-items: center;1155 justify-content: center;1156 width: 24px;1157 height: 24px;1158 border: 1px solid #b8ccf8;1159 border-radius: 50%;1160 color: var(--blue);1161 background: #eef4ff;1162 }1163 .mobile-next-action {1164 display: grid;1165 grid-template-columns: 96px minmax(0, 1fr);1166 gap: 10px;1167 margin-top: 16px;1168 border-top: 1px solid #b8ccf8;1169 border-bottom: 0;1170 border-left: 3px solid var(--blue);1171 padding: 13px 12px;1172 background: #eef4ff;1173 }1174 .mobile-next-action span { text-align: left; }1175 .mobile-lifecycle-summary { border-bottom: 1px solid var(--line-strong); }1176 .mobile-lifecycle-list { grid-template-columns: 1fr; }1177 .mobile-lifecycle-list li {1178 grid-template-columns: 34px minmax(0, 1fr);1179 gap: 10px;1180 align-items: center;1181 min-height: 58px;1182 padding: 10px 0;1183 }1184 .mobile-lifecycle-list li:nth-child(even) { padding-left: 0; border-left: 0; }1185 .mobile-lifecycle-list span {1186 display: inline-flex;1187 align-items: center;1188 justify-content: center;1189 width: 30px;1190 height: 30px;1191 border: 1px solid #b8ccf8;1192 border-radius: 50%;1193 background: #eef4ff;1194 }1195 .mobile-lifecycle-list strong { font-size: 0.91rem; }1196 .mobile-lifecycle-list small { margin-top: 2px; font-size: 0.73rem; }1197 .mobile-lifecycle-outcomes { gap: 6px; padding-top: 10px; }1198 .mobile-lifecycle-outcomes div { padding: 10px 8px 12px; border-top: 2px solid var(--violet); background: var(--surface); }1199 .mobile-lifecycle-outcomes div:nth-child(2) { border-top-color: #d97706; }1200 .mobile-lifecycle-outcomes div:nth-child(3) { border-top-color: var(--green); }