.aeco .syllabus{position:sticky;top:env(safe-area-inset-top,0);z-index:12;margin-inline:calc(var(--gutter) * -1);padding-inline:var(--gutter);background:var(--ground);border-top:1px solid var(--rule-2);border-bottom:1px solid var(--rule)}.aeco .syllabus ol{display:flex;gap:clamp(18px,2.4vw,40px);list-style:none;margin:0;padding:0;overflow-x:auto;scrollbar-width:none}.aeco .syllabus ol::-webkit-scrollbar{display:none}.aeco .syllabus a{position:relative;display:inline-flex;align-items:center;gap:9px;min-height:54px;font-family:var(--mono);font-size:var(--s-label);letter-spacing:.085em;text-transform:uppercase;white-space:nowrap;color:var(--ink-3);transition:color var(--t1) var(--ease)}.aeco .syllabus a .n{color:var(--ink-3);font-variant-numeric:tabular-nums}.aeco .syllabus a:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--sky);transform:scaleX(0);transform-origin:left;transition:transform var(--t2) var(--ease)}.aeco .syllabus a[aria-current]{color:var(--ink)}.aeco .syllabus a[aria-current] .n{color:var(--sky)}.aeco .syllabus a[aria-current]:after{transform:scaleX(1)}.aeco .syllabus a:focus-visible{color:var(--ink);outline:2px solid var(--sky);outline-offset:-6px}@media (hover:hover){.aeco .syllabus a:hover{color:var(--ink)}}.aeco .sec{padding-top:clamp(56px,6vw,104px);scroll-margin-top:54px}.aeco .sec-head{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));-moz-column-gap:var(--gap);column-gap:var(--gap);row-gap:10px;align-items:baseline;padding-top:18px;border-top:1px solid var(--rule-2);margin-bottom:clamp(26px,2.8vw,48px)}.aeco .sec-head>.label{grid-column:1/span 3}.aeco .label .n{color:var(--sky);margin-right:6px;font-variant-numeric:tabular-nums}.aeco .sec-head>h2{grid-column:4/span 9;max-width:30ch}.aeco .sec-intro{margin-left:calc((100% + var(--gap)) * 3 / 12);max-width:66ch}.aeco .start-body p{font-size:var(--s-body);line-height:1.5;color:var(--ink-2)}.aeco .start-body p:first-child{color:var(--ink)}.aeco .start-body p+p{margin-top:1em}.aeco .start-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));-moz-column-gap:var(--gap);column-gap:var(--gap);row-gap:40px;align-items:start}.aeco .start-body{grid-column:4/span 5}.aeco .start-body p.first-reading{display:grid;gap:10px;margin-top:clamp(26px,2.6vw,40px);padding-top:16px;border-top:1px solid var(--rule);font-size:inherit}.aeco .stack{grid-column:10/span 3}.aeco .stack ol{list-style:none;margin:8px 0 0;padding:0;border-top:1px solid var(--rule)}.aeco .stack a{display:grid;grid-template-columns:2.2ch minmax(0,1fr);gap:2px 8px;align-items:baseline;padding:11px 0 12px;min-height:44px;border-bottom:1px solid var(--rule)}.aeco .stack .n{font-family:var(--mono);font-size:13px;color:var(--sky);margin:0;font-variant-numeric:tabular-nums}.aeco .stack .name{font-size:19px;line-height:1.2;color:var(--ink)}.aeco .stack .line{grid-column:2;font-size:15px;line-height:1.4;color:var(--ink-2);transition:color var(--t1) var(--ease)}.aeco .stack a:focus-visible{outline:2px solid var(--sky);outline-offset:2px}@media (hover:hover){.aeco .stack a:hover .line{color:var(--ink)}}.aeco a.reading{display:grid;gap:5px;padding:12px 0 13px;min-height:44px}.aeco a.reading .why{font-size:18px;line-height:1.35;color:var(--ink);text-decoration:underline;text-decoration-color:var(--rule-2);text-underline-offset:4px;transition:text-decoration-color var(--t1) var(--ease)}.aeco a.reading .label{color:var(--ink-3)}.aeco a.reading:focus-visible{outline:2px solid var(--sky);outline-offset:3px}.aeco a.reading:focus-visible .why{text-decoration-color:var(--sky)}@media (hover:hover){.aeco a.reading:hover .why{text-decoration-color:var(--sky)}.aeco a.reading:hover .label{color:var(--ink-2)}}.aeco ul.refs{list-style:none;margin:8px 0 0;padding:0;border-top:1px solid var(--rule)}.aeco a.ref{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 14px;align-items:baseline;padding:10px 0 11px;min-height:44px;border-bottom:1px solid var(--rule)}.aeco a.ref .who{grid-column:1;grid-row:1;font-family:var(--mono);font-size:var(--s-label);letter-spacing:.085em;text-transform:uppercase;color:var(--sky)}.aeco a.ref .when{grid-column:2;grid-row:1;font-family:var(--mono);font-size:12px;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums}.aeco a.ref .what{grid-column:1/-1;grid-row:2;font-size:16.5px;line-height:1.35;color:var(--ink-2);transition:color var(--t1) var(--ease)}.aeco a.ref:focus-visible{outline:2px solid var(--sky);outline-offset:2px}.aeco a.ref:focus-visible .what{color:var(--ink)}@media (hover:hover){.aeco a.ref:hover .what{color:var(--ink)}}.aeco .fold{margin-top:20px}.aeco .fold-toggle{display:none}.aeco .sec-intro{font-size:var(--s-body);line-height:1.5;color:var(--ink-2);margin-bottom:clamp(28px,3vw,48px)}.aeco ol.steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(28px,3vw,52px) var(--gap);list-style:none;margin:0;padding:0}.aeco ol.steps>li{position:relative;padding-top:20px;border-top:1px solid var(--rule-2)}.aeco ol.steps>li:before{content:"";position:absolute;top:-7px;left:0;width:12px;height:12px;border-radius:50%;background:var(--ground);border:1.5px solid var(--sky)}.aeco ol.steps>li:not(:last-child):after{content:"\2192";position:absolute;top:17px;right:0;font-family:var(--mono);font-size:15px;color:var(--ink-3)}.aeco ol.steps h3{margin-top:14px;font-size:clamp(27px,2.3vw,40px);font-weight:300;line-height:1.05;letter-spacing:-.015em}.aeco ol.steps .text{margin-top:12px;font-size:17.5px;line-height:1.5;color:var(--ink-2)}.aeco .lanes{position:relative;border-top:1px solid var(--rule-2);padding-top:clamp(16px,1.6vw,26px)}.aeco .lane,.aeco .lane-axis{display:grid;grid-template-columns:minmax(132px,14%) minmax(0,1fr);-moz-column-gap:var(--gap);column-gap:var(--gap)}.aeco .lane{border-top:1px solid var(--rule)}.aeco .lane:last-of-type{border-bottom:1px solid var(--rule)}.aeco .lane-name{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-block:16px}.aeco .lane-name h3{font-size:clamp(18px,1.35vw,23px);font-weight:400;line-height:1.2;transition:color var(--t1) var(--ease)}.aeco .lane-name .n{font-family:var(--mono);font-size:13.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}.aeco .lane-track{position:relative;min-height:calc(var(--rows, 1) * 18px + 24px);margin-right:10px}.aeco .lane-axis .lane-track{min-height:22px}.aeco .lane-axis .tick{position:absolute;top:0;transform:translateX(-50%);font-family:var(--mono);font-size:11px;color:var(--ink-3);white-space:nowrap}.aeco .lane-axis .tick.year{color:var(--ink-2)}.aeco .lane-track .rule{position:absolute;top:0;bottom:0;width:1px;background:var(--rule)}.aeco .lane-track .rule.year{background:var(--rule-2)}.aeco .lanes .m{position:absolute;left:0;bottom:calc(12px + var(--row, 0) * 18px);width:12px;height:12px;margin-left:-6px;border-radius:50%;background:var(--ground);border:1.5px solid var(--sky);transition:background var(--t1) var(--ease),transform var(--t1) var(--ease)}.aeco .lanes .m:after{content:"";position:absolute;inset:-6px;border-radius:50%}.aeco .lanes .m.is-on,.aeco .lanes .m:focus-visible{background:var(--sky);outline:none;z-index:2}.aeco .lanes .m:focus-visible{box-shadow:0 0 0 3px var(--ground),0 0 0 5px var(--sky)}@media (hover:hover){.aeco .lanes .m:hover{background:var(--sky);z-index:2}}.aeco .lanes .m:active{transform:scale(.86)}.aeco .lanes .tip{top:auto}.aeco .layers>.chart-cap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-top:14px}@media (prefers-reduced-motion:no-preference){.aeco .lanes .m{opacity:0;animation:aeco-arrive .42s var(--ease) forwards;animation-delay:calc(.24s + var(--i, 0) * 11ms)}@keyframes aeco-arrive{0%{opacity:0}to{opacity:1}}}html[data-motion="0"] .aeco .lanes .m{opacity:1;animation:none;transition:none}.aeco .lessons{margin-top:clamp(44px,5vw,88px)}.aeco .lesson{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));-moz-column-gap:var(--gap);column-gap:var(--gap);row-gap:28px;align-items:start;padding-block:clamp(28px,3.2vw,52px);border-top:1px solid var(--rule-2);scroll-margin-top:54px}.aeco .lesson>header{grid-column:1/span 3;display:grid;gap:10px;justify-items:start}.aeco .lesson .question{font-size:var(--s-small);line-height:1.4;color:var(--ink-2);max-width:26ch}.aeco .lesson .count{margin-top:6px}.aeco .lesson-toggle{display:none}.aeco .lesson-body{grid-column:4/span 5}.aeco .lesson-terms{grid-column:10/span 3}.aeco .lesson-body>p:not(.label){font-size:18.5px;line-height:1.52;color:var(--ink-2)}.aeco .lesson-body>p:first-child{color:var(--ink)}.aeco .lesson-body>p+p:not(.label){margin-top:.9em}.aeco .read-label{margin-top:28px}.aeco ol.readings{list-style:none;margin:8px 0 0;padding:0;border-top:1px solid var(--rule)}.aeco ol.readings>li{border-bottom:1px solid var(--rule)}.aeco dl.terms{margin:8px 0 0;border-top:1px solid var(--rule)}.aeco dl.terms>div{padding:11px 0 12px;border-bottom:1px solid var(--rule);-moz-column-break-inside:avoid;break-inside:avoid}.aeco dl.terms dt{font-size:17.5px;line-height:1.3;color:var(--ink)}.aeco dl.terms dd{margin-top:3px;font-size:15.5px;line-height:1.45;color:var(--ink-2)}.aeco dl.terms a.src{display:inline-flex;align-items:center;min-height:24px;margin-left:8px;font-family:var(--mono);font-size:12px;color:var(--ink-3);white-space:nowrap;text-decoration:underline;text-decoration-color:var(--rule-2);text-underline-offset:3px}.aeco dl.terms a.src:focus-visible{outline:2px solid var(--sky);outline-offset:2px;color:var(--ink)}@media (hover:hover){.aeco dl.terms a.src:hover{color:var(--ink);text-decoration-color:var(--sky)}}.aeco .entries-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:14px 28px;padding-bottom:22px}.aeco .filter{display:flex;flex-wrap:wrap;gap:8px;border:0;padding:0;margin:0;min-width:0}.aeco .filter label{position:relative;display:inline-flex;cursor:pointer}.aeco .filter input{position:absolute;inset:0;z-index:1;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.aeco .filter span{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 14px;border:1px solid var(--rule-2);font-family:var(--mono);font-size:var(--s-label);letter-spacing:.085em;text-transform:uppercase;color:var(--ink-2);transition:background var(--t1) var(--ease),color var(--t1) var(--ease),border-color var(--t1) var(--ease)}.aeco .filter small{font-size:inherit;color:var(--ink-3);font-variant-numeric:tabular-nums}.aeco .filter input:checked+span{background:var(--ink);border-color:var(--ink);color:var(--ground)}.aeco .filter input:checked+span small{color:inherit}.aeco .filter input:focus-visible+span{outline:2px solid var(--sky);outline-offset:3px}@media (hover:hover){.aeco .filter label:hover input:not(:checked)+span{color:var(--ink);border-color:var(--ink-3)}}.aeco .filter label:active span{filter:brightness(.9)}.aeco:has(.filter input[value=commerce]:checked) tbody tr:not([data-layer=commerce]),.aeco:has(.filter input[value=discovery]:checked) tbody tr:not([data-layer=discovery]),.aeco:has(.filter input[value=identity]:checked) tbody tr:not([data-layer=identity]),.aeco:has(.filter input[value=payments]:checked) tbody tr:not([data-layer=payments]),.aeco:has(.filter input[value=protocols]:checked) tbody tr:not([data-layer=protocols]),.aeco:has(.filter input[value=rules]:checked) tbody tr:not([data-layer=rules]){display:none}.aeco:has(.filter input[value=commerce]:checked) .lane[data-layer=commerce] h3,.aeco:has(.filter input[value=discovery]:checked) .lane[data-layer=discovery] h3,.aeco:has(.filter input[value=identity]:checked) .lane[data-layer=identity] h3,.aeco:has(.filter input[value=payments]:checked) .lane[data-layer=payments] h3,.aeco:has(.filter input[value=protocols]:checked) .lane[data-layer=protocols] h3,.aeco:has(.filter input[value=rules]:checked) .lane[data-layer=rules] h3{color:var(--sky)}.aeco:has(.filter input[value=all]:checked):not(:has(.more input:checked)) tbody tr:nth-child(n+9):not(:target){display:none}.aeco:not(:has(.filter input[value=all]:checked)) .more{display:none}.aeco .more{position:relative;display:inline-flex;margin:4px 0 28px;cursor:pointer}.aeco .more input{position:absolute;inset:0;z-index:1;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.aeco .more span{display:inline-flex;align-items:center;min-height:44px;padding:0 16px;border:1px solid var(--rule-2);font-family:var(--mono);font-size:var(--s-label);letter-spacing:.085em;text-transform:uppercase;color:var(--ink);transition:border-color var(--t1) var(--ease),background var(--t1) var(--ease)}.aeco .more input:checked~.closed,.aeco .more input:not(:checked)~.open{display:none}.aeco .more input:focus-visible~span{outline:2px solid var(--sky);outline-offset:3px}@media (hover:hover){.aeco .more:hover span{border-color:var(--sky)}}.aeco .more:active span{filter:brightness(.9)}.aeco tbody tr{scroll-margin-top:130px}.aeco td.act{min-width:34ch}.aeco td.act span{display:block;margin-top:4px;font-size:15px;line-height:1.45;color:var(--ink-2);max-width:64ch}.aeco td .reported{display:block;margin-top:4px;letter-spacing:0;text-transform:none;color:var(--ink-3)}.aeco tbody tr:target td{background:color-mix(in oklab,var(--sky) 12%,transparent)}.aeco tbody tr:target td:first-child{box-shadow:inset 2px 0 0 var(--sky)}@media (max-width:860px){.aeco .entries .table-wrap{overflow-x:visible}.aeco .entries table,.aeco .entries tbody,.aeco .entries td{display:block}.aeco .entries thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.aeco .entries tbody tr{display:grid;grid-template-columns:minmax(0,1fr) auto;-moz-column-gap:12px;column-gap:12px;padding:16px 0 18px;border-bottom:1px solid var(--rule)}.aeco .entries td{padding:0;border:0}.aeco .entries td.d{grid-column:1;grid-row:1;color:var(--ink-3)}.aeco .entries td.m{grid-column:2;grid-row:1;color:var(--ink-3)}.aeco .entries td.who{grid-column:1/-1;margin-top:10px;font-family:var(--mono);font-size:var(--s-label);letter-spacing:.085em;text-transform:uppercase;color:var(--sky)}.aeco .entries td.act{grid-column:1/-1;min-width:0;margin-top:4px;font-size:19px;line-height:1.3}.aeco .entries td.act span{font-size:16px;margin-top:6px}.aeco .entries td.label{grid-column:1/-1;margin-top:10px}.aeco tbody tr:target td{background:none}.aeco tbody tr:target{box-shadow:inset 2px 0 0 var(--sky);padding-left:12px}.aeco tbody tr:target td:first-child{box-shadow:none}.aeco .lane,.aeco .lane-axis{grid-template-columns:minmax(0,1fr)}.aeco .lane-axis>span{display:none}.aeco .lane-name{padding-block:12px 0}}.aeco ol.qs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(32px,3.4vw,56px) var(--gap);list-style:none;margin:0;padding:0}.aeco ol.qs>li{padding-top:16px;border-top:1px solid var(--rule-2)}.aeco ol.qs h3{font-size:clamp(24px,1.9vw,34px);font-weight:300;line-height:1.12;letter-spacing:-.012em;max-width:24ch}.aeco ol.qs .text{margin-top:12px;font-size:17.5px;line-height:1.5;color:var(--ink-2);max-width:58ch}.aeco .glossary dl.terms{-moz-columns:3;column-count:3;-moz-column-gap:var(--gap);column-gap:var(--gap);margin-top:0;border-top:0}.aeco .glossary-note{margin-top:20px}.aeco .glossary dl.terms>div{border-top:1px solid var(--rule);border-bottom:0}.aeco .method-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px var(--gap)}.aeco .method-grid>div{padding-top:14px;border-top:1px solid var(--rule)}.aeco .method .text{margin-top:10px;font-size:17px;line-height:1.5;color:var(--ink-2)}.aeco .method .cite{font-family:var(--mono);font-size:13.5px;line-height:1.6;overflow-wrap:anywhere}.aeco .method .downloads{margin-top:14px}.aeco .also{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 28px;margin-top:clamp(48px,5vw,88px);padding-top:18px;border-top:1px solid var(--rule-2)}.aeco .also a{display:inline-flex;align-items:center;min-height:44px;font-size:var(--s-body);color:var(--ink);text-decoration:underline;text-decoration-color:var(--rule-2);text-underline-offset:5px;transition:text-decoration-color var(--t1) var(--ease)}.aeco .also a:focus-visible{outline:2px solid var(--sky);outline-offset:3px}@media (hover:hover){.aeco .also a:hover{text-decoration-color:var(--sky)}}.aeco .fine{padding-top:clamp(28px,3vw,44px)}@media (max-width:1100px){.aeco ol.steps{grid-template-columns:repeat(2,minmax(0,1fr))}.aeco .lesson>header{grid-column:1/span 4}.aeco .lesson-body,.aeco .lesson-terms{grid-column:5/span 8}.aeco .stack,.aeco .start-body{grid-column:4/span 9}.aeco .glossary dl.terms{-moz-columns:2;column-count:2}}@media (max-width:860px){.aeco .sec-head>.label,.aeco .sec-head>h2{grid-column:1/-1}.aeco .sec-intro{margin-left:0}.aeco .stack,.aeco .start-body{grid-column:1/-1}.aeco .method-grid,.aeco ol.qs,.aeco ol.steps{grid-template-columns:minmax(0,1fr)}.aeco ol.steps>li:not(:last-child):after{content:"\2193"}.aeco .lesson-body,.aeco .lesson-terms,.aeco .lesson>header{grid-column:1/-1}.aeco .lesson .question{max-width:none}.aeco .glossary dl.terms{-moz-columns:1;column-count:1}.aeco .fold-label{display:none}.aeco .fold-toggle{position:relative;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);cursor:pointer}.aeco .fold-toggle input,.aeco .lesson-toggle input{position:absolute;inset:0;z-index:1;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.aeco .fold-toggle .plus{font-family:var(--mono);font-size:18px;color:var(--ink-2);transition:transform var(--t2) var(--ease)}.aeco .fold:has(.fold-toggle input:checked) .plus{transform:rotate(45deg)}.aeco .fold:has(.fold-toggle input:focus-visible) .fold-toggle{outline:2px solid var(--sky);outline-offset:2px}.aeco .fold ul.refs{display:none;margin-top:0;border-top:0}.aeco .fold:has(.fold-toggle input:checked) ul.refs{display:block}.aeco .lesson{row-gap:22px}.aeco .lesson-toggle{position:relative;display:inline-flex;margin-top:6px;cursor:pointer}.aeco .lesson-toggle span:not(.sr-only){display:inline-flex;align-items:center;min-height:44px;padding:0 16px;border:1px solid var(--rule-2);font-family:var(--mono);font-size:var(--s-label);letter-spacing:.085em;text-transform:uppercase;color:var(--ink)}.aeco .lesson-toggle input:checked~.closed,.aeco .lesson-toggle input:not(:checked)~.open{display:none}.aeco .lesson-toggle input:focus-visible~span{outline:2px solid var(--sky);outline-offset:3px}.aeco .lesson:not(:has(.lesson-toggle input:checked)):not(:target) :is(.lesson-body,.lesson-terms){display:none}}@media (prefers-reduced-motion:reduce){.aeco .filter span,.aeco .lane-name h3,.aeco .lanes .m,.aeco .syllabus a,.aeco .syllabus a:after{transition:none}}