:root{--poly-primary: #1E3776;--poly-secondary: #5f6699;--text: #333;--bg: #fff;--muted: #6b6b6b;--well-bg: #f5f5f5;--well-border: #e3e3e3;--info-bg: #d9edf7;--ground-light: #fff;--ground-dark: #101214;--gutter: 15px;--nav-top: calc(13px + env(safe-area-inset-top, 0px)) ;--navbar-h: 50px;--font-sans: "Space Grotesk", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-serif: "Source Serif 4", Charter, Georgia, Cambria, "Times New Roman", serif}@font-face{font-family:Neuropolitical;src:url(/fonts/neuropolitical/299997_0_0.woff2) format("woff2"),url(/fonts/neuropolitical/299997_0_0.woff) format("woff");font-display:swap}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300;font-display:swap;src:url(/fonts/space-grotesk/space-grotesk-300.woff2) format("woff2")}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/space-grotesk/space-grotesk-400.woff2) format("woff2")}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/space-grotesk/space-grotesk-600.woff2) format("woff2")}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/space-grotesk/space-grotesk-700.woff2) format("woff2")}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:300;font-display:swap;src:url(/fonts/source-serif/source-serif-300.woff2) format("woff2")}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/source-serif/source-serif-600.woff2) format("woff2")}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:300;font-display:swap;src:url(/fonts/source-serif/source-serif-300-italic.woff2) format("woff2")}*,*:before,*:after{box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;background:var(--bg)}html,body{height:100%}body{margin:0;font-family:var(--font-sans);font-weight:300;font-size:16px;line-height:1.55;color:var(--text);background:var(--bg)}img{max-width:100%;height:auto}a{color:var(--poly-secondary);text-decoration:none}a:hover,a:focus{color:#565c84;text-decoration:underline}:focus-visible{outline:2px solid var(--accent, var(--poly-secondary));outline-offset:2px;border-radius:2px}.skip-link{position:absolute;left:8px;top:-48px;z-index:1000;padding:8px 14px;background:var(--poly-primary);color:#fff;border-radius:0 0 6px 6px;transition:top .15s ease}.skip-link:focus{top:0;color:#fff;text-decoration:none}@media(prefers-color-scheme:dark){:focus-visible{outline-color:var(--accent, #aab3e6)}}::selection{background:color-mix(in srgb,var(--poly-secondary) 30%,transparent)}@media(prefers-color-scheme:dark){::selection{background:color-mix(in srgb,#aab3e6 34%,transparent)}}:root{accent-color:var(--poly-secondary)}@media(prefers-color-scheme:dark){:root{accent-color:#aab3e6}}pre,.install,.table-wrap,.ogp-result{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--poly-secondary) 45%,transparent) transparent}:is(pre,.install,.table-wrap,.ogp-result)::-webkit-scrollbar{height:9px;width:9px}:is(pre,.install,.table-wrap,.ogp-result)::-webkit-scrollbar-track{background:transparent}:is(pre,.install,.table-wrap,.ogp-result)::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--poly-secondary) 40%,transparent);border-radius:999px}:is(pre,.install,.table-wrap,.ogp-result)::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--poly-secondary) 65%,transparent)}@media(prefers-color-scheme:dark){pre,.install,.table-wrap,.ogp-result{scrollbar-color:color-mix(in srgb,#aab3e6 40%,transparent) transparent}:is(pre,.install,.table-wrap,.ogp-result)::-webkit-scrollbar-thumb{background:color-mix(in srgb,#aab3e6 34%,transparent)}}p{margin:0 0 10px}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.1;margin:20px 0 10px}h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:18px}h5{font-size:14px}h6{font-size:12px}hr{border:0;border-top:1px solid #eee;margin:20px 0}ul,ol{margin:0 0 10px;padding-left:25px}.lead{font-size:18px;font-weight:300;margin-bottom:20px}.text-center{text-align:center}.nowrap{white-space:nowrap}.prose{max-width:58ch;margin-inline:auto;font-family:var(--font-text);font-weight:300;font-size:17px;line-height:1.65}.prose p{margin-bottom:1.05em}.prose .lead{font-size:1.2em;line-height:1.55}.prose ul,.prose ol{margin-bottom:1.05em}.prose li{margin-bottom:.3em}.prose :is(h1,h2,h3,h4,h5,h6){font-family:var(--font-sans)}.prose h2{margin-top:1.6em}.prose.paper{max-width:1040px;font-family:var(--font-sans);font-weight:300;font-size:17.5px;line-height:1.55}.prose.paper{display:grid;grid-template-columns:1fr min(58ch,100%) 1fr}.prose.paper>*{grid-column:2;min-width:0}.prose.paper>:is(.paper-mast,figure.diagram,.demo-frame,a.demo-frame,.table-wrap,.poly-hero,.pq-advert){grid-column:1 / -1}.prose.paper>figure.diagram{width:100%;max-width:760px;justify-self:center}.prose.paper>:is(.demo-frame,.table-wrap,.pq-advert){width:100%;max-width:900px;justify-self:center}.paper-mast{text-align:center;margin:0 auto 36px;max-width:900px}.paper-kick{display:flex;align-items:center;gap:16px;margin:0 0 18px;font-family:var(--font-sans);font-weight:600;font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent-ink, var(--muted))}.paper-kick:before,.paper-kick:after{content:"";flex:1;height:1px;background:var(--well-border)}.prose.paper .paper-mast h1{font-size:clamp(34px,7.4vw,54px);line-height:1.04;margin:0;background-image:none;padding-bottom:0}.paper-sub{margin:16px auto 0;max-width:30em;font-family:var(--font-serif);font-style:italic;font-weight:300;font-size:19px;line-height:1.45;color:var(--muted);text-wrap:balance}.prose.paper>.lede{text-align:justify;hyphens:auto;-webkit-hyphens:auto;--accent-ink: color-mix(in srgb, var(--accent, var(--poly-secondary)) 72%, #000)}.prose.paper>.lede:first-letter{float:left;font-family:var(--font-serif);font-weight:600;font-size:3.3em;line-height:.84;padding:.04em .09em 0 0;color:var(--accent-ink)}.prose.paper>.lede:after{content:"";display:block;clear:left}.prose.paper>:is(h2,h3) .sec-n{color:var(--accent-ink);margin-right:.2em;font-variant-numeric:tabular-nums}.prose.paper>:is(h2,h3){--accent-ink: color-mix(in srgb, var(--accent, var(--poly-secondary)) 62%, #000)}.paper-toc{margin:0 0 30px;padding:16px 20px 18px;background:var(--card)}.paper-toc-h{margin:0 0 10px;font-family:var(--font-sans);font-weight:600;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink);--accent-ink: color-mix(in srgb, var(--accent, var(--poly-secondary)) 60%, #000)}.paper-toc ol{columns:2;column-gap:32px;margin:0;padding-left:1.4em;font-size:15px;line-height:1.5}.paper-toc li{margin:0 0 4px;break-inside:avoid}.paper-toc li::marker{color:var(--muted)}.paper-toc a{color:var(--text);text-decoration:none}.paper-toc a:hover,.paper-toc a:focus-visible{text-decoration:underline}@media(max-width:520px){.paper-toc ol{columns:1}}.paper-kick{--accent-ink: color-mix(in srgb, var(--accent, var(--poly-secondary)) 60%, #000)}@media(max-width:520px){.prose.paper>.lede{text-align:left}}.prose.paper>h2{font-size:clamp(22px,2.4vw,27px);font-weight:600;letter-spacing:-.01em;margin:2.1em 0 .5em}.prose.paper>h3{font-size:19px;font-weight:600;margin:1.7em 0 .4em}.prose.paper>p:not([class]){text-align:justify;hyphens:auto;-webkit-hyphens:auto}@media(max-width:520px){.prose.paper>p:not([class]){text-align:left}}.prose.paper h1{font-family:var(--font-serif);font-weight:600;font-size:clamp(32px,6.2vw,46px);line-height:1.06;letter-spacing:-.015em;text-wrap:balance}.prose.paper .lead{font-family:var(--font-serif);font-style:italic;font-weight:300;font-size:19px;line-height:1.45;color:var(--muted);text-align:left;hyphens:manual;max-width:34em}.poly-hero{position:relative;margin:0 0 1.7em;border-radius:16px;overflow:hidden;box-shadow:0 14px 36px #10163047}.poly-hero svg{display:block;width:100%;height:auto}.poly-hero .il-thread{fill:none;stroke:#aab3e6;stroke-width:2.5;stroke-linecap:round;opacity:.5}.poly-hero:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;background:linear-gradient(to top,rgba(13,16,32,.9) 0%,rgba(13,16,32,.55) 16%,transparent 44%)}.poly-hero h1{position:absolute;left:0;right:0;bottom:0;z-index:2;margin:0;padding:clamp(18px,3vw,30px) clamp(20px,4vw,36px);color:#fff;font-size:clamp(28px,6vw,46px);line-height:1.05;text-shadow:0 2px 16px rgba(0,0,0,.55)}.diagram{--dgm-node: #f5f7fc;--dgm-stroke: #ccd3e6;--dgm-text: #2a3142;--dgm-muted: #69728b;--dgm-accent: #1E3776;margin:1.9em auto;max-width:520px;text-align:center}.diagram svg{width:100%;height:auto;display:block}.diagram figcaption{font-size:14px;color:var(--muted);margin-top:10px;line-height:1.4}.diagram .node{fill:var(--dgm-node);stroke:var(--dgm-stroke);stroke-width:1.5}.diagram .node-accent{fill:color-mix(in srgb,var(--dgm-accent) 9%,var(--dgm-node));stroke:var(--dgm-accent);stroke-width:1.5}.diagram .edge{fill:none;stroke:var(--dgm-stroke);stroke-width:1.5}.diagram .tip{fill:var(--dgm-node);stroke:var(--dgm-stroke);stroke-width:1.5}.diagram .arrow{fill:var(--dgm-stroke)}.diagram .dot{fill:var(--dgm-accent)}.diagram text{fill:var(--dgm-text);font-size:14px;font-family:var(--font-sans)}.diagram .t-code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px}.diagram .t-name{font-weight:600}.diagram .t-accent{fill:var(--dgm-accent)}.diagram .t-muted{fill:var(--dgm-muted);font-style:italic;font-size:12.5px}.kind-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:1.6em 0;padding:0;list-style:none}@media(max-width:560px){.kind-grid{grid-template-columns:1fr}}.kind-grid li.k-wide{grid-column:1 / -1}.kind-grid li{margin:0;padding:16px 18px;background:var(--card)}.kind-grid .k-name{display:block;font-family:var(--font-sans);font-weight:600;font-size:15px}.kind-grid .k-name code{font-family:inherit;font-weight:600;color:var(--muted);font-size:13px}.kind-grid .k-desc{font-size:14.5px;line-height:1.4;color:var(--muted)}.ac-orange{--accent: #F58536}.ac-purple{--accent: #A855F7}.ac-blue{--accent: #3B82F6}.ac-green{--accent: #2DA44E}.ac-teal{--accent: #1FB8A6}.ac-amber{--accent: #E8A11A}.ac-pg{--accent: #336791}.ac-pink{--accent: #EC4899}.ac-red{--accent: #E0414E}.sec-services{--accent: #1FB8A6}.sec-products{--accent: #3B82F6}.sec-about,.sec-quiz{--accent: #A855F7}.sec-careers{--accent: #EC4899}.sec-contact{--accent: #F58536}.sec-goosey,.sec-writing,.sec-work{--accent: #E8A11A}.sec-changelog{--accent: #336791}.sec-status{--accent: #2DA44E}.sec-toolkit{--accent: #1FB8A6}.sec-social-card-preview{--accent: #2DA44E}.sec-spring-boot-end-of-life-migration,.sec-modernising-legacy-systems,.sec-innovation-funding-service,.sec-eureka-funding-platform,.sec-flexible-work-platform{--accent: #E8A11A}.sec-candor{--accent: #A855F7}.sec-how-its-built{--accent: #8b6fd6}.sec-home,.sec-404,.sec-legal,.sec-privacy{--accent: var(--poly-secondary)}:is(.sec-services,.sec-products,.sec-about,.sec-quiz,.sec-careers,.sec-contact,.sec-writing,.sec-work,.sec-changelog,.sec-status,.sec-toolkit,.sec-how-its-built,.sec-social-card-preview,.sec-spring-boot-end-of-life-migration,.sec-modernising-legacy-systems,.sec-innovation-funding-service,.sec-eureka-funding-platform,.sec-flexible-work-platform) h1{background-image:linear-gradient(var(--accent, var(--poly-secondary)),var(--accent, var(--poly-secondary)));background-repeat:no-repeat;background-size:56px 4px;background-position:0 100%;padding-bottom:15px}.product-hero h1{background-position:50% 100%}h1.has-title-icon{background-image:none;padding-bottom:0}.u-abs{position:absolute}.u-wrap{overflow-wrap:anywhere}.mt-20{margin-top:20px}.mt-32{margin-top:32px}.mt-48{margin-top:48px}.diagram .node.s-green{stroke:#2da44e}.diagram .node.s-amber{stroke:#e8a11a}.diagram .node.s-blue{stroke:#3b82f6}.prose pre{--c-key:#1E3776;--c-type:#1f6feb;--c-com:#6b7280;--c-str:#0a7d33;--c-fg:#2a2f3a;--c-bg:#f6f7fb;--c-bd:#e4e8f2;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13.5px;line-height:1.6;color:var(--c-fg);background:var(--c-bg);border:1px solid var(--c-bd);border-radius:10px;padding:14px 16px;margin:1.2em 0;overflow-x:auto;-webkit-overflow-scrolling:touch}.prose pre code{font-family:inherit;font-size:inherit}.prose pre .c{color:var(--c-com);font-style:italic}.prose pre .k{color:var(--c-key);font-weight:600}.prose pre .ty{color:var(--c-type)}.prose pre .s{color:var(--c-str)}.prose :not(pre)>code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em;background:var(--well-bg);border:1px solid var(--well-border);border-radius:4px;padding:.05em .35em}.callout,.aside-note{margin:1.5em 0;padding:18px 22px;background:var(--card);font-size:16.5px;line-height:1.55}.callout>p,.aside-note>p{margin:0}.callout .lbl,.aside-note .lbl{display:block;font-family:var(--font-sans);font-weight:600;font-size:11.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}.faq{margin:1.2em 0}.faq details{border-top:1px solid var(--well-border)}.faq details:last-child{border-bottom:1px solid var(--well-border)}.faq summary{cursor:pointer;list-style:none;position:relative;font-family:var(--font-sans);font-weight:600;font-size:17px;padding:15px 34px 15px 0}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"";position:absolute;right:8px;top:21px;width:8px;height:8px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .2s}.faq details[open] summary:after{transform:rotate(-135deg)}.faq details>p{margin:-2px 0 16px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}@media(min-width:768px){.lead{font-size:21px}}.container{width:100%;padding:0 var(--gutter);margin:0 auto;min-height:100%}@media(min-width:768px){.container{width:750px}}@media(min-width:992px){.container{width:970px}}@media(min-width:1200px){.container{width:1170px}}#wrap{min-height:100%;display:flow-root}.row{display:flex;flex-wrap:wrap;margin-inline:calc(var(--gutter) * -1)}[class^=col-md-],[class*=" col-md-"]{width:100%;padding:0 var(--gutter);margin-bottom:0}@media(min-width:992px){.col-md-12{width:100%}.col-md-6{width:50%}.col-md-4{width:33.3333%}}.services{justify-content:center;margin-top:28px}.services.is-left{justify-content:flex-start}.services [class^=col-md-]{margin-bottom:30px}.services .service-card{height:100%}.service-card{height:100%;padding:24px;background:var(--well-bg);border:1px solid var(--well-border);border-radius:12px;transition:transform .15s ease,box-shadow .2s ease,border-color .2s ease}.service-card.is-linked:hover{transform:translateY(-4px);box-shadow:0 10px 28px #0000001f;border-color:var(--accent, var(--poly-secondary))}.service-head{display:flex;align-items:center;gap:14px;margin-bottom:10px}.service-head :is(h2,h3){margin:0;font-size:20px}.service-card.is-linked{position:relative}.service-card.is-linked .card-link:after{content:"";position:absolute;inset:0}.service-card.is-linked a:not(.card-link),.service-card.is-linked .install{position:relative;z-index:1}.service-card.is-linked .copy-btn{z-index:1}.service-card p{margin:0}.service-head .service-title{min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;column-gap:8px;row-gap:3px}.service-head .service-title>.card-meta{flex-basis:100%}@media(max-width:480px){.service-head .service-title.has-badges>.card-meta{flex-basis:auto}}.service-title>.badges>.badge:first-child{margin-left:0}.service-head .card-meta{margin:0;line-height:1.2;display:flex;align-items:center;gap:7px;flex-wrap:wrap}.service-head .card-meta .wn-tag{margin-left:0}.service-card .product-cta{margin-top:16px}.service-head a.service-icon{text-decoration:none}.service-head a.service-icon:hover,.service-head a.service-icon:focus{color:var(--accent, var(--poly-secondary))}.service-head a.badge{text-decoration:none}.service-head a.badge-live:hover,.service-head a.badge-live:focus{color:var(--ink);text-decoration:underline}.service-head a.badge-api:hover,.service-head a.badge-api:focus{color:#b026c4}@media(prefers-color-scheme:dark){.service-head a.badge-api:hover,.service-head a.badge-api:focus{color:#f5c6fb}}.badge{display:inline-block;vertical-align:middle;margin-left:6px;font-family:var(--font-sans);font-weight:600;font-size:11px;letter-spacing:.05em;text-transform:uppercase;padding:4px 7px;border-radius:999px;line-height:1.5}.badge-live{color:var(--ink);background:var(--mint)}.badge-soon{color:var(--ink);background:var(--butter)}.badge-api{color:#86198f;background:color-mix(in srgb,#D946EF 16%,transparent)}@media(prefers-color-scheme:dark){.badge-api{color:#eda6f7}}.install{display:block;margin:14px 0 0;padding:9px 12px;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;line-height:1.5;white-space:pre;color:#2a2f3a;background:#f6f7fb;border:1px solid #e4e8f2;border-radius:8px}.install .p{color:#9aa1b4;user-select:none;-webkit-user-select:none}.install+.install{margin-top:8px}.service-card .install-or{margin:10px 0;font-family:var(--font-sans);font-size:12.5px;color:var(--muted);line-height:1}.service-card .install-or+.install{margin-top:10px}.service-card .install+.card-note{margin-top:9px}.service-card .card-label{margin:24px 0 0;font-family:var(--font-sans);font-size:13px;color:var(--muted);line-height:1.3}.service-card .card-label+.install{margin-top:7px}.install.install-wrap{white-space:pre-wrap;word-break:break-word}pre.install{white-space:pre-wrap;overflow-wrap:anywhere;padding-left:calc(12px + 2ch);text-indent:-2ch each-line}.changelog-entry{margin:0 0 1.25em}.changelog-points{margin:0;padding-left:1.1em;font-size:14.5px;line-height:1.55}.changelog-points li{margin:0 0 .22em}.changelog-entry>p{font-size:14.5px;line-height:1.55}.changelog-entry h3{margin:0 0 3px;font-size:16px;font-weight:600;letter-spacing:-.005em}.changelog-meta{margin:0 0 5px;font-size:12.5px;color:var(--muted)}.changelog-meta time{font-variant-numeric:tabular-nums;letter-spacing:.01em}.changelog-points code,.changelog-entry>p code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em;background:var(--tag-bg, #eef1f7);padding:0 4px;border-radius:3px}.tag-sprite{height:1.15em;width:auto;vertical-align:-.22em;margin-right:5px}.changelog-tag{display:inline-block;margin-right:7px;padding:0 6px;border-radius:3px;background:var(--tag-bg, #eef1f7);color:var(--tag-fg, #47506b);font-size:11.5px;font-weight:600;letter-spacing:.02em;text-transform:lowercase}@media(prefers-color-scheme:dark){.changelog-tag{background:#232a3d;color:#aab3cc}}.card-note{margin:11px 0 0;font-size:13.5px;color:var(--muted)}.card-note code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em}@media(prefers-color-scheme:dark){.install{color:#d6dae6;background:#1b2133;border-color:#333b54}}pre{overflow-x:auto;-webkit-overflow-scrolling:touch}.code-wrap{position:relative}.code-wrap>pre{min-height:40px}.install.has-copy{position:relative;padding-right:42px;cursor:copy}.install.has-copy.one-line{white-space:pre-wrap;overflow-wrap:anywhere}.prose pre.has-copy{padding-right:44px}.code-wrap>pre.has-copy.under-copy{padding-top:40px}.copy-btn{position:absolute;top:6px;right:6px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;cursor:pointer;color:inherit;background:#7f7f7f24;border:1px solid rgba(127,127,127,.28);border-radius:6px;opacity:.7;transition:opacity .15s,background .15s,color .15s}.code-wrap:hover .copy-btn,.install:hover .copy-btn,.copy-btn:hover,.copy-btn:focus-visible{opacity:1}.copy-btn:hover{background:#7f7f7f3d}.copy-btn svg{width:15px;height:15px;fill:currentColor}.ogp-share{display:inline-block;margin:0 0 14px;padding:4px 11px;cursor:pointer;font-family:var(--font-sans);font-size:12.5px;line-height:1.4;color:var(--muted);background:transparent;border:1px solid var(--well-border);border-radius:999px;transition:color .15s,border-color .15s}.ogp-share:hover,.ogp-share:focus-visible{color:var(--text);border-color:var(--accent)}.ogp-share.is-done{color:var(--accent);border-color:var(--accent)}.copy-btn.copied{color:#2da44e;border-color:#2da44e;opacity:1}.product-page{max-width:880px;margin-inline:auto}.product-page h2{margin-top:1.7em}.product-hero{text-align:center;max-width:720px;margin:.4em auto 1.8em}.product-name{font-size:clamp(40px,8vw,64px);line-height:1;margin:0 0 8px}.product-name .badge{vertical-align:middle;font-size:12px}p>.badge:first-child,.badges:first-child>.badge:first-child{margin-left:0}.badges{white-space:nowrap}.has-title-icon{display:flex;align-items:flex-start;gap:.34em}.has-title-icon>.t{min-width:0}.product-hero .has-title-icon{justify-content:center}.title-icon{flex:none;display:inline-flex;align-items:center;justify-content:center;width:1.55em;height:1.55em;border-radius:.34em;background:color-mix(in srgb,var(--accent, #777EAA) 20%,transparent)}.title-icon img{width:62%;height:auto}@keyframes sprite-bob{0%,49.9%{transform:translateY(0)}50%,to{transform:translateY(-2px)}}@media(prefers-reduced-motion:no-preference){.service-card:hover .service-icon.is-sprite img,.service-icon.is-sprite:hover img,.ql:hover .ql-tile img,.has-title-icon:hover .title-icon img{animation:sprite-bob .62s steps(1,end) infinite}}@media(prefers-color-scheme:dark){.title-icon{background:color-mix(in srgb,var(--accent, #aab3e6) 26%,transparent)}}.product-hero .lead{font-size:clamp(20px,3.4vw,26px);margin:0 0 14px}.product-sub{color:var(--muted);font-size:17px;line-height:1.6;margin:0 auto 18px}.product-hero .install{max-width:360px;margin:0 auto;text-align:left}.product-hero .download-row{justify-content:center;margin:14px auto 4px}.product-hero .card-note{text-align:center}kbd{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82em;background:var(--well-bg);border:1px solid var(--well-border);border-bottom-width:2px;border-radius:5px;padding:1px 6px;color:inherit;white-space:nowrap}.demo-frame{max-width:880px;margin:0 auto 10px;border-radius:12px;overflow:hidden;border:1px solid var(--well-border);background:#0d1117;box-shadow:0 22px 54px #10163052}a.demo-frame{display:block;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}a.demo-frame:hover,a.demo-frame:focus-visible{transform:translateY(-3px);box-shadow:0 28px 64px #1016306b;border-color:#f58536}@media(prefers-reduced-motion:reduce){a.demo-frame{transition:none}a.demo-frame:hover,a.demo-frame:focus-visible{transform:none}}.demo-bar{display:flex;gap:7px;padding:11px 14px;background:#161b22}.demo-bar span{width:11px;height:11px;border-radius:50%;background:#3a3f4b}.demo-bar span:nth-child(1){background:#ff5f56}.demo-bar span:nth-child(2){background:#ffbd2e}.demo-bar span:nth-child(3){background:#27c93f}.demo-video,.demo-frame img{display:block;width:100%;height:auto}.demo-caption{text-align:center;color:var(--muted);font-size:14px;max-width:700px;margin:0 auto 2.2em;line-height:1.5}.demo-caption a{text-decoration:underline}.writing-page{max-width:740px;margin-inline:auto}.writing-list{margin:26px 0 0}.writing-item{padding:24px 0;border-top:1px solid var(--well-border)}.writing-item:first-child{border-top:0;padding-top:6px}.writing-item h2{margin:0 0 8px;font-size:23px}.writing-item p{margin:0 0 6px;color:var(--text)}.writing-more{font-size:15px}.eyebrow{margin:0 0 6px;font-family:var(--font-sans);font-size:12.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--poly-secondary)}.steps{max-width:760px;margin:0 0 1.2em;padding:0;list-style:none;counter-reset:step}.steps li{position:relative;padding:7px 0 7px 46px;counter-increment:step;line-height:1.55}.steps li:before{content:counter(step);position:absolute;left:0;top:4px;width:28px;height:28px;border-radius:50%;background:var(--poly-secondary);color:#fff;font-family:var(--font-sans);font-weight:600;font-size:14px;display:flex;align-items:center;justify-content:center}.table-wrap{overflow-x:auto;margin:1.2em 0}.compare{width:100%;border-collapse:collapse;font-size:15px;min-width:560px}.compare th,.compare td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--well-border);vertical-align:top}.compare th{font-family:var(--font-sans);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.compare td:first-child{font-weight:600;white-space:nowrap}@media(max-width:560px){.compare.uptime{min-width:0}.compare.uptime tr{display:grid;grid-template-columns:1fr auto;border-bottom:1px solid var(--well-border)}.compare.uptime td{border-bottom:0}.compare.uptime td:nth-child(3){grid-column:1 / -1;padding-top:0;color:var(--muted);font-size:14px}.compare:not(:has(:is(th,td):nth-child(4))){min-width:0}.compare:not(:has(:is(th,td):nth-child(4))) td:first-child{white-space:normal;overflow-wrap:anywhere}.compare:not(.uptime,:has(:is(th,td):nth-child(3))) :is(th,td):first-child{width:40%}.compare:not(.uptime,:has(:is(th,td):nth-child(4))):has(:is(th,td):nth-child(3)) tr{display:grid;grid-template-columns:minmax(0,40%) minmax(0,1fr);border-bottom:1px solid var(--well-border)}.compare:not(.uptime,:has(:is(th,td):nth-child(4))):has(:is(th,td):nth-child(3)) :is(th,td){border-bottom:0}.compare:not(.uptime,:has(:is(th,td):nth-child(4))):has(:is(th,td):nth-child(3)) :is(th,td):nth-child(3){grid-column:1 / -1;padding-top:0}}.download-row{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0 0}.download-row .btn{display:inline-flex;align-items:center;gap:8px}.download-row .btn svg{width:15px;height:15px;fill:currentColor;flex:none}.download-row .btn svg.ico-tux{width:18px;height:18px;margin:-2px 0}.service-icon{flex:none;display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:11px;color:var(--accent, var(--poly-secondary));background:#777eaa26;background:color-mix(in srgb,var(--accent, #777EAA) 16%,transparent)}.service-icon svg{width:24px;height:24px}.service-icon img{width:30px;height:auto}.service-icon.is-sprite{background:color-mix(in srgb,var(--accent) 20%,transparent)}.quicklinks{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 30px}.ql{display:inline-flex;align-items:center;gap:8px;padding:7px 15px 7px 12px;border-radius:999px;font-family:var(--font-sans);font-size:15px;line-height:1;color:inherit;border:1px solid color-mix(in srgb,var(--accent, #777EAA) 34%,transparent);background:color-mix(in srgb,var(--accent, #777EAA) 20%,transparent)}.ql-tile{flex:none;display:inline-flex;align-items:center;justify-content:center}.ql-tile img{display:block;width:21px;height:auto}.ql:hover,.ql:focus-visible{border-color:color-mix(in srgb,var(--accent, #777EAA) 62%,transparent);background:color-mix(in srgb,var(--accent, #777EAA) 30%,transparent)}@media(prefers-color-scheme:dark){.service-icon.is-sprite{background:color-mix(in srgb,var(--accent) 26%,transparent)}}@media(prefers-color-scheme:dark){.service-card.is-linked:hover{box-shadow:0 10px 28px #00000073}.service-icon{background:color-mix(in srgb,var(--accent, #aab3e6) 22%,transparent)}}.feature-list{list-style:none;padding-left:0}.feature-list li{display:flex;align-items:center;gap:11px;margin-bottom:12px}.feature-list .feat-icon{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:8px;color:var(--accent, var(--poly-secondary));background:#777eaa26;background:color-mix(in srgb,var(--accent, #777EAA) 16%,transparent)}.feature-list .feat-icon svg{width:16px;height:16px}@media(prefers-color-scheme:dark){.feature-list .feat-icon{background:color-mix(in srgb,var(--accent, #aab3e6) 22%,transparent)}}.engage-head{display:flex;align-items:flex-start;gap:11px;margin-bottom:8px}.engage-head h3{margin:0}.engage-icon{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:9px;color:var(--accent, var(--poly-secondary));background:color-mix(in srgb,var(--accent, #777EAA) 16%,transparent)}@media(prefers-color-scheme:dark){.engage-icon{background:color-mix(in srgb,var(--accent, #aab3e6) 22%,transparent)}}.engage-icon svg{width:17px;height:17px}@media(min-width:992px){.engage-head{min-height:2lh}}.navbar{position:relative;z-index:3;display:flex;align-items:center;flex-wrap:wrap;background:#000c;border-radius:4px;margin:var(--nav-top) 0 20px;padding:0 15px;min-height:var(--navbar-h)}.navbar .nav-right{margin-left:auto}.navbar-brand{padding:8px 0;margin-right:32px;font-size:18px;line-height:1;color:#fff}.navbar-brand:hover,.navbar-brand:focus{color:#fff;text-decoration:none}.navbar .logo-icon{color:var(--poly-secondary);font-size:28px}.nav-collapse{position:absolute;top:100%;left:0;right:0;z-index:5;display:flex;flex-direction:column;background:#000000eb;border-radius:0 0 4px 4px;box-shadow:0 12px 24px #0006;padding-bottom:6px;max-height:0;overflow:hidden;opacity:0;visibility:hidden;transition:max-height .3s ease,opacity .3s ease,visibility .3s}.nav-toggle:checked~.nav-collapse{max-height:24rem;opacity:1;visibility:visible}@media(prefers-reduced-motion:reduce){.nav-collapse{transition:none}}.nav-links{list-style:none;margin:0;padding:0;width:100%;display:flex;flex-direction:column}.nav-links a{display:block;color:#9d9d9d;padding:10px 15px;text-decoration:none;white-space:nowrap;font-weight:400}.nav-links a:hover,.nav-links a:focus,.nav-links li.active a{color:#fff}.nav-toggle{position:absolute;width:1px;height:1px;opacity:0}.nav-toggle-btn{display:inline-flex;align-items:center;margin-left:auto;padding:10px;color:#9d9d9d;cursor:pointer}.nav-toggle-btn .icon{display:block;width:26px;height:26px}.nav-toggle-btn:hover{color:#fff}.nav-toggle:focus-visible~.nav-toggle-btn{outline:2px solid #aab3e6;outline-offset:2px}.nav-backdrop{display:none}.nav-toggle:checked~.nav-backdrop{display:block;position:fixed;inset:0;z-index:4;background:transparent;cursor:default}@media(min-width:992px){.nav-toggle,.nav-toggle-btn,.nav-backdrop,.nav-toggle:checked~.nav-backdrop{display:none}.nav-collapse{position:static;flex-direction:row;flex:1;align-items:center;background:none;box-shadow:none;border-radius:0;padding-bottom:0;max-height:none;overflow:visible;opacity:1;visibility:visible}.navbar-brand{flex:1 1 0;margin-right:0}.nav-collapse{display:contents}.nav-links{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;width:auto}.nav-links.nav-end{flex:1 1 0;justify-content:flex-end}.navbar{padding-bottom:0;flex-wrap:nowrap}}.btn{display:inline-block;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:4px;text-decoration:none}.btn:hover,.btn:focus{text-decoration:none}.btn-primary{color:#fff;background:var(--poly-secondary);border-color:#666da0}.btn-primary:hover,.btn-primary:focus{color:#fff;background:#5f6691}.btn-default{color:var(--poly-secondary);background:transparent;border-color:color-mix(in srgb,var(--poly-secondary) 50%,transparent)}.btn-default:hover,.btn-default:focus{color:var(--poly-secondary);background:color-mix(in srgb,var(--poly-secondary) 12%,transparent)}@media(prefers-color-scheme:dark){.btn-default{color:#aab3e6;border-color:color-mix(in srgb,#aab3e6 45%,transparent)}.btn-default:hover,.btn-default:focus{color:#aab3e6;background:color-mix(in srgb,#aab3e6 14%,transparent)}}.btn-lg{padding:10px 16px;font-size:18px;border-radius:6px}.wn-when{color:var(--muted);font-weight:400;font-size:14px;white-space:nowrap}.wn-tag{display:inline-block;vertical-align:middle;margin-left:1px;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:600;color:#166534;background:color-mix(in srgb,#2DA44E 16%,transparent)}@media(prefers-color-scheme:dark){.wn-tag{color:#74d39a}}.client-quote{--qm: clamp(44px, 6vw, 80px);position:relative;margin:38px 0 12px;background:#0e5e6f;color:#fff;padding:clamp(26px,4vw,48px) clamp(22px,4vw,48px) clamp(26px,4vw,48px) calc(clamp(22px,4vw,48px) + var(--qm) + 18px)}.client-quote:before,.client-quote:after{position:absolute;font:700 calc(var(--qm) * 1.7)/1 var(--font-text);color:#ff5a36}.client-quote:before{content:"\201c";top:calc(clamp(26px,4vw,48px) - var(--qm) * .12);left:clamp(18px,3.6vw,44px)}.client-quote:after{content:"\201d";bottom:calc(clamp(22px,3.6vw,42px) - var(--qm) * .95);right:clamp(22px,4vw,48px)}.client-quote blockquote p,.client-quote figcaption,.client-quote a{color:#fff}.client-quote a{text-decoration:underline}@media(max-width:600px){.client-quote{padding-left:clamp(22px,4vw,48px);padding-top:calc(clamp(26px,4vw,48px) + var(--qm) * .9)}}.client-quote blockquote{margin:0;border:0;padding:0}.client-quote blockquote p{font-family:var(--font-sans);font-size:21px;line-height:1.55;font-weight:400;margin-bottom:16px}.client-quote blockquote p:last-child{margin-bottom:0;font-weight:600}.client-quote figcaption{margin-top:14px;padding-right:calc(var(--qm) + 16px);font-family:var(--font-mono);font-size:14px}.short-answer{margin:1.4em 0;padding:18px 22px;background:var(--card)}.client-quote-short{max-width:760px;margin-bottom:36px}.client-quote-short blockquote p{font-size:18px}#lead{text-align:center;max-width:700px;margin:4px auto 0}#lead .lead{font-size:clamp(20px,3.2vw,25px);line-height:1.45;margin-bottom:0}.well{min-height:20px;padding:19px;margin-bottom:20px;background:var(--well-bg);border:1px solid var(--well-border);border-radius:4px;box-shadow:inset 0 1px 1px #0000000d}.well-lg{padding:24px;border-radius:6px}.bg-info{background:var(--info-bg)}.well p.lead:last-child{margin-bottom:0}.breadcrumb{list-style:none;padding:0;margin:0 0 24px;display:flex;flex-wrap:wrap;align-items:center;font-size:14px}.breadcrumb a{color:var(--muted)}.breadcrumb a:hover,.breadcrumb a:focus{color:var(--text);text-decoration:none}.breadcrumb li+li:before{content:"\203a";padding:0 9px;color:var(--muted);opacity:.65}.breadcrumb .active{color:var(--text)}.jumbotron{padding:30px 15px;margin-bottom:30px;background:#eee;border-radius:6px}.jumbotron.polytron{position:relative;z-index:1;width:100vw;margin-left:calc(50% - 50vw);margin-top:calc(-1 * (var(--nav-top) + var(--navbar-h) + 20px));margin-bottom:30px;padding:120px 15px 60px;min-height:340px;border-radius:0;background-position:50% 50%;background-size:cover;background-repeat:no-repeat;filter:url(#heroGamma);color:#fff;text-align:center;display:flex;flex-direction:column;justify-content:center}.jumbotron.polytron:before{content:"";position:absolute;inset:0;background:linear-gradient(#00000059,#0009)}.jumbotron.polytron>*{position:relative}@media(max-width:767px){.jumbotron.polytron{padding:84px 15px 32px;min-height:200px}}.jumbotron.polytron p{font-weight:600;font-size:20px;line-height:1.3;margin:0 auto;max-width:820px;text-shadow:0 1px 4px rgba(0,0,0,.6)}@media(min-width:768px){.jumbotron.polytron p{font-size:30px}}.jumbotron.polytron.services{background-color:#b5d089;background-image:image-set(url(/images/coconut.webp) 1x,url(/images/coconut2x.webp) 2x)}.jumbotron.polytron.careers{background-color:#b5d089;background-image:image-set(url(/images/helterSkelter.webp) 1x,url(/images/helterSkelter2x.webp) 2x)}.jumbotron.polytron.electricworks{background-color:#b1daff;background-image:image-set(url(/images/electricworks.webp) 1x,url(/images/electricworks2x.webp) 2x)}.jumbotron.polytron.about{background-color:#339fa9;background-image:image-set(url(/images/stanage.webp) 1x,url(/images/stanage2x.webp) 2x)}.jumbotron.polytron.products{background-color:#0a0f0c;background-image:radial-gradient(120% 140% at 50% -25%,rgba(63,185,80,.12),transparent 55%);filter:none;color:#c9d1d9;text-align:left;overflow:hidden;isolation:isolate}.jumbotron.polytron.products:before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:radial-gradient(118% 130% at 50% 48%,transparent 56%,rgba(0,0,0,.6) 100%),radial-gradient(75% 65% at 50% 40%,rgba(90,230,130,.06),transparent 72%);box-shadow:inset 0 0 90px 20px #0000008c}.jumbotron.polytron.products:after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;background:repeating-linear-gradient(to bottom,rgba(0,0,0,.22) 0,rgba(0,0,0,.22) 1px,transparent 1px,transparent 3px);opacity:.65}@media(prefers-reduced-motion:no-preference){.jumbotron.polytron.products:after{animation:crt-flicker 6s steps(40) infinite}}@keyframes crt-flicker{0%,96%,to{opacity:.65}97%{opacity:.5}98%{opacity:.78}99%{opacity:.58}}.jumbotron.polytron.products .vi{width:100%;max-width:820px;margin:0 auto;position:relative;z-index:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:18px;line-height:1.5}@media(min-width:768px){.jumbotron.polytron.products .vi{font-size:22px}}.jumbotron.polytron.products .vi-type{font-family:inherit;font-size:inherit;font-weight:400;color:#c9d1d9;margin:0;text-shadow:0 0 5px rgba(150,230,175,.35)}.jumbotron.polytron.products .vi-type:before{content:"> ";color:#3fb950;text-shadow:0 0 7px rgba(63,185,80,.6)}.jumbotron.polytron.products .vi-type:after{content:"\2589";color:#3fb950;margin-left:1px;text-shadow:0 0 8px rgba(63,185,80,.7)}.team-role{color:var(--muted);font-size:14px;margin-bottom:10px}.team-links{margin-top:8px;font-size:14px}.team-links .icon{width:14px;height:14px;vertical-align:-2px;margin-right:3px;fill:currentColor}.team-avatar{width:96px;height:96px;border-radius:50%;object-fit:cover;border:2px solid color-mix(in srgb,var(--accent, var(--poly-secondary)) 55%,transparent)}.cd-404{text-align:center;user-select:none;-webkit-user-select:none}body:has(#cd-play),body:has(.cd-404:not([hidden])){user-select:none;-webkit-user-select:none}body.pwa-standalone .navbar,body.pwa-standalone #footer{display:none}body.pwa-standalone #cd-install,body.pwa-standalone #cd-install-tip{display:none!important}.notfound{text-align:center;padding:38px 0 8px}.nf-h1{margin:0 0 22px;font-family:var(--font-display);font-weight:400;text-transform:lowercase;font-size:clamp(34px,4.6vw,52px);line-height:1.05}.nf-term{max-width:600px;margin:0 auto}.nf-screen{padding:18px;text-align:left;max-height:62vh;overflow-y:auto;background:#0d1117;color:#c9d1d9;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14.5px;line-height:1.7}.nf-line{white-space:pre-wrap;word-break:break-word}.nf-prompt{color:#3fb950}.nf-path{color:#58a6ff}.nf-err{color:#ff7b72;font-weight:600}.nf-dim,.nf-hint{color:#8b949e}.nf-num,.nf-kbd{color:#d29922}.nf-warn{color:#d29922;font-weight:600}.nf-alien{color:#a371f7}.nf-screen a{color:#58a6ff;text-decoration:none}.nf-screen a:hover,.nf-screen a:focus{color:#79c0ff;text-decoration:underline}.nf-input-line{display:flex;align-items:baseline}.nf-input-line.nf-busy{display:none}.nf-input-line .nf-prompt{margin-right:.5ch}.nf-cmd{flex:1 1 auto;min-width:0;padding:0;margin:0;border:0;outline:none;background:transparent;color:#c9d1d9;font:inherit;caret-color:#79c0ff}.nf-ok{color:#3fb950}.nf-crash{position:fixed;inset:0;z-index:9999;overflow:auto;cursor:pointer;background:#000;color:#3fb950;padding:8vh 7vw;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.nf-crash pre{margin:0;white-space:pre-wrap;font-size:clamp(13px,2.3vw,16px);line-height:1.65}.nf-c2{display:inline-block;width:.5em;height:1.05em;vertical-align:-.15em;background:#3fb950;animation:nf-blink 1.1s steps(1) infinite}@keyframes nf-blink{50%{opacity:0}}@media(prefers-reduced-motion:reduce){.nf-c2{animation:none}}#achv-toasts{position:fixed;right:1rem;bottom:1rem;z-index:10000;display:flex;flex-direction:column;gap:.5rem;pointer-events:none}.achv-card{display:flex;align-items:center;gap:.7rem;max-width:17rem;background:#161b29;border:0;border-radius:0;padding:.65rem .9rem;color:#d6dae6;box-shadow:0 8px 28px #00000073;font:500 14px/1.3 ui-sans-serif,system-ui,sans-serif;animation:achv-in .35s cubic-bezier(.2,.9,.3,1)}.achv-card.achv-out{animation:achv-out .4s forwards}.achv-e{font-size:1.5rem;line-height:1}.achv-t{display:flex;flex-direction:column}.achv-h{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#58a6ff}@keyframes achv-in{0%{opacity:0;transform:translate(120%)}to{opacity:1;transform:none}}@keyframes achv-out{to{opacity:0;transform:translate(120%)}}@media(prefers-reduced-motion:reduce){.achv-card,.achv-card.achv-out{animation:none}.achv-card.achv-out{opacity:0}}.logo,.logo-poly,.logo-morphism{font-family:Neuropolitical,Helvetica Neue,sans-serif;text-transform:lowercase}.logo-poly,.logo-morphism{color:var(--poly-primary)}.navbar-brand .logo-poly,.navbar-brand .logo-morphism{color:inherit}.address-poly{font-size:18px;margin:30px 0 0;line-height:1.9}.address-poly address{font-style:normal}.social{margin-top:18px}.social a{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:50%;overflow:hidden;color:var(--poly-secondary);transition:background-color .15s ease,color .15s ease}.social a:hover,.social a:focus{background:#007bb6;color:#fff;text-decoration:none}.social .icon{width:22px;height:22px}.contact-icon{width:1.3em;text-align:center;color:var(--text);vertical-align:-.125em}.contact-col{margin-top:20px}.map-embed{width:100%;height:300px;border:0;margin:20px 0 10px;border-radius:4px}.icon{width:1em;height:1em;vertical-align:-.125em;fill:currentColor;display:inline-block}.icon-lg{width:1.2em;height:1.2em}sup .icon{width:.75em;height:.75em}.cta-band{text-align:center;margin-top:50px;padding:0 15px 10px}.cta-band .lead{max-width:40ch;margin:0 auto 18px}.cta-band .cta-follow{margin:16px 0 0;font-size:14px;color:var(--muted)}.contact-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin:16px 0}.next-steps{margin:8px 0 0;padding-left:1.2em}.next-steps li{margin-bottom:9px;padding-left:4px}.footer-links{display:flex;flex-wrap:wrap;margin-bottom:12px}@media(prefers-color-scheme:dark){:root{--text: #d6d8e2;--bg: #232a44;--muted: #9aa3bd;--well-bg: #262c3e;--well-border: #3a4054}.prose.paper>.lede,.prose.paper>:is(h2,h3){--accent-ink: var(--accent, #aab3e6)}.paper-toc-h,.paper-kick{--accent-ink: color-mix(in srgb, var(--accent, #aab3e6) 70%, #fff)}html{background-color:#232a44;background-image:none}body{color:var(--text);background:transparent}a,.address-poly a{color:#aab3e6}.bg-info{background:#24414f;border-color:#2f5263}.address-poly .logo-poly,.address-poly .logo-morphism{color:#a7b0dd}.logo-poly,.logo-morphism{color:#aab3e6}.diagram{--dgm-node: #262d45;--dgm-stroke: #49527a;--dgm-text: #e4e7f1;--dgm-muted: #9aa3bd;--dgm-accent: #aab3e6}.diagram .node-accent{fill:color-mix(in srgb,var(--dgm-accent) 20%,var(--dgm-node))}.prose pre{--c-key:#aab3e6;--c-type:#86b4ff;--c-com:#8a93ad;--c-str:#7fd69a;--c-fg:#d6dae6;--c-bg:#1b2133;--c-bd:#333b54}}.casefile{max-width:44rem;margin:1.5rem auto;padding:clamp(1.4rem,4vw,2.6rem);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:#c9d1d9;line-height:1.7;background:#0d1117;border:1px solid #222a3a;border-radius:12px;box-shadow:0 14px 40px #00000059}.casefile h1{color:#fff;font-size:clamp(1.8rem,5vw,2.6rem);letter-spacing:.06em;margin:.2rem 0}.casefile h2{font-size:.8rem;text-transform:uppercase;letter-spacing:.18em;color:#8b949e;margin:2.2rem 0 .6rem;border-bottom:1px solid rgba(255,255,255,.1);padding-bottom:.35rem}.casefile p{margin:.8rem 0}.casefile a{color:#58a6ff}.cf-head{margin-bottom:1.5rem}.cf-ref{color:#6e7681;font-size:.72rem;letter-spacing:.08em;margin:0}.cf-sub{color:#8b949e;margin-top:.2rem}.cf-banner{text-align:center;color:#d29922;letter-spacing:.12em;font-size:.72rem;border-top:1px solid rgba(210,153,34,.5);border-bottom:1px solid rgba(210,153,34,.5);padding:.5rem 0;margin:1.5rem 0}.cf-note{color:#8b949e;font-size:.82rem;background:#ffffff0d;padding:.8rem 1rem;margin-top:2rem}.rdct{background:#050505;color:transparent;user-select:none;-webkit-user-select:none;border-radius:2px;padding:0 .2em;-webkit-box-decoration-break:clone;box-decoration-break:clone}.rdct::selection{background:#050505;color:transparent}.cf-bar{height:1.1em;background:#050505;border-radius:2px;margin:.5rem 0}.cf-bar-short{width:62%}.pal-tip{color:var(--muted);font-size:13px}#footer .pal-tip{color:#b9bdc9}.pal-tip kbd{font-family:var(--font-sans);border:1px solid var(--well-border);border-radius:4px;padding:0 5px}@media(hover:none)and (pointer:coarse){.pal-tip{display:none}}.pal{position:fixed;inset:0;z-index:200;display:none}.pal[open]{display:block}.pal-scrim{position:absolute;inset:0;background:color-mix(in srgb,#000 55%,transparent)}.pal-box{position:relative;margin:12vh auto 0;max-width:540px;width:calc(100% - 32px);background:var(--bg);border:1px solid var(--well-border);border-radius:14px;box-shadow:0 24px 60px color-mix(in srgb,#000 45%,transparent);overflow:hidden}.pal-input{width:100%;box-sizing:border-box;border:0;border-bottom:1px solid var(--well-border);background:transparent;color:var(--text);font:400 17px/1.4 var(--font-sans);padding:16px 18px;outline:none}.pal-list{list-style:none;margin:0;padding:6px;max-height:46vh;overflow-y:auto}.pal-list li{margin:0}.pal-list a{display:block;padding:9px 12px;border-radius:8px;text-decoration:none;color:var(--text)}.pal-list li[aria-selected=true] a{background:color-mix(in srgb,var(--poly-primary) 16%,transparent)}.pal-t{display:block;font-family:var(--font-sans);font-weight:600;font-size:15px}.pal-d{display:block;font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pal-empty{padding:16px 18px;color:var(--muted);font-size:14.5px}.pal-hint{padding:9px 18px;border-top:1px solid var(--well-border);color:var(--muted);font-size:12.5px;font-family:var(--font-sans)}.pal-hint kbd{font-family:inherit;border:1px solid var(--well-border);border-radius:4px;padding:1px 5px;margin:0 1px}@media(prefers-reduced-motion:no-preference){.pal[open] .pal-box{animation:pal-in .12s ease-out}@keyframes pal-in{0%{transform:translateY(-6px);opacity:0}}}@media print{:root{--bg: #fff;--text: #111;--muted: #444;--well-border: #ccc;--dgm-node: #fff;--dgm-stroke: #444;--dgm-text: #111;--dgm-muted: #555;--dgm-accent: #000}html,body{background:#fff!important;color:#111!important}body{font-size:11.5pt;line-height:1.45}.navbar,.footer-links,.skip-link,.breadcrumb,.cta-band,.copy-btn,.ogp-form,footer form,.beaky-wrap,canvas{display:none!important}.prose a[href^=http]:after{content:" (" attr(href) ")";font-size:9.5pt;color:#555;word-break:break-all}.prose a[href^="/"]:after{content:" (www.poly.io" attr(href) ")";font-size:9.5pt;color:#555}figure,table,.aside-note,.callout,.kind-grid li{break-inside:avoid;page-break-inside:avoid}h1,h2,h3{break-after:avoid;page-break-after:avoid}p{orphans:3;widows:3}pre{white-space:pre-wrap;word-wrap:break-word;border:1px solid #ccc}.table-wrap{overflow:visible}.compare{min-width:0}.diagram svg{max-width:100%}.kind-grid{display:block}.kind-grid li{margin-bottom:8px}.prose:after{content:"Published at www.poly.io \2014  Polymorphism Ltd";display:block;margin-top:24px;padding-top:10px;border-top:1px solid #ccc;font-size:9.5pt;color:#555}}body.sec-candor{background:#0b0e14}.chrome-off{display:none!important}.bk-404{max-width:1180px;margin:0 auto}.feed-intro{margin:0 0 10px;text-align:center;font-family:var(--font-sans);font-size:15px;color:var(--muted)}.feed-url{margin:8px 0 6px;font-family:var(--font-sans);text-align:center}.feed-url code{display:inline-block;max-width:100%;overflow-wrap:anywhere;vertical-align:middle;background:var(--well-bg);border:1px solid var(--well-border);border-radius:8px;padding:8px 12px;font-size:14px;color:var(--text)}.feed-copy{margin-left:8px;vertical-align:middle;cursor:pointer;font-family:var(--font-sans);font-size:13px;color:var(--text);background:var(--well-bg);border:1px solid var(--well-border);border-radius:8px;padding:7px 12px}.feed-copy:hover{border-color:var(--poly-secondary)}.feed-copy.is-copied{color:#1d7a4c;border-color:#9ed5b8}@media(prefers-color-scheme:dark){.feed-copy.is-copied{color:#7fd6a2;border-color:#2f5f45}}.feed-readers,.feed-back{margin:0 0 26px;text-align:center;font-family:var(--font-sans);font-size:15px;color:var(--muted)}.feed-back{margin:22px 0 0}.feed-list{list-style:none;margin:0;padding:0;font-family:var(--font-sans)}.feed-list li{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:11px 2px;border-top:1px solid var(--well-border)}.feed-list li:first-child{border-top:0}.feed-list time{color:var(--muted);font-size:14px;white-space:nowrap}@font-face{font-family:Jost;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/jost/jost-variable-latin.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono/ibm-plex-mono-500-latin.woff2) format("woff2")}:root{--ink: #101218;--navy: #2F5FB3;--teal: #0E5E6F;--mint: #3DD6A3;--butter: #FFD25E;--orange: #FF5A36;--font-sans: "Jost", "Futura", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font-text: "Space Grotesk", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-display: "Neuropolitical", var(--font-sans);--poly-secondary: #2F5FB3}@media(prefers-color-scheme:light){:root{--text: #101218}}body{font-family:var(--font-text);font-weight:300;font-size:17px}h1,h2,h3,h4,h5,h6,.navbar,.btn,.eyebrow,.breadcrumb{font-family:var(--font-sans)}.prose.paper,.client-quote blockquote p{font-family:var(--font-text)}a{color:var(--navy)}a:hover,a:focus{color:var(--ink)}:focus-visible{outline:3px solid var(--ink);outline-offset:3px;border-radius:0}@media(prefers-color-scheme:dark){a{color:#aab3e6}a:hover,a:focus{color:#fff}:focus-visible{outline-color:#fff}}:root{--nav-top: calc(8px + env(safe-area-inset-top, 0px)) ;--navbar-h: 68px}.navbar{background:transparent;border-radius:0;margin:calc(env(safe-area-inset-top,0px) + 8px) 0 24px;padding:0;min-height:64px}.navbar-brand{color:var(--text);font-size:24px}.navbar-brand:hover,.navbar-brand:focus{color:var(--text)}.nav-links a{color:var(--text);font-weight:500;text-transform:uppercase;letter-spacing:.08em;font-size:15px;padding:12px 13px}.nav-links a:hover,.nav-links a:focus,.nav-links li.active a{color:var(--text);text-decoration:underline 3px var(--orange);text-underline-offset:8px}.nav-end a,.nav-end a:hover,.nav-end a:focus,.nav-end li.active a{background:var(--orange);color:var(--ink);font-weight:700;text-decoration:none;padding:11px 18px}.nav-toggle-btn,.nav-toggle-btn:hover{color:var(--text)}.nav-collapse{background:var(--bg);box-shadow:0 12px 24px #1012182e;border-radius:0}@media(max-width:991px){.navbar .nav-end{order:2;width:auto;margin-left:auto;flex-direction:row}.navbar .nav-end a{padding:10px 14px;font-size:14px}.nav-toggle-btn{order:3;margin-left:6px}.nav-collapse{order:4}.navbar{flex-wrap:nowrap}}@media(max-width:480px){.navbar-brand{font-size:20px;margin-right:8px}.navbar .nav-end a{padding:9px 11px;font-size:13px;letter-spacing:.06em}}@media(min-width:992px){.nav-collapse{background:none;box-shadow:none}}@media(prefers-color-scheme:dark){.nav-links a{color:var(--text)}.nav-end a{color:var(--ink)}}.on-photo .navbar-brand,.on-photo .navbar-brand:hover,.on-photo .navbar-brand:focus,.on-photo .nav-toggle-btn,.on-photo .nav-toggle-btn:hover{color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.55)}@media(min-width:992px){.on-photo .nav-links:not(.nav-end) a{color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.55)}}.on-photo .navbar :focus-visible,.on-photo .nav-toggle:focus-visible~.nav-toggle-btn{outline-color:#fff}.sec-candor .navbar-brand,.sec-candor .navbar-brand:hover,.sec-candor .navbar-brand:focus,.sec-candor .nav-links:not(.nav-end) a,.sec-candor .nav-toggle-btn,.sec-candor .nav-toggle-btn:hover{color:#fff}.sec-candor .nav-collapse{background:#0b0e14;box-shadow:0 12px 24px #00000080}@media(min-width:992px){.sec-candor .nav-collapse{background:none;box-shadow:none}}.sec-candor .nav-toggle:focus-visible~.nav-toggle-btn,.sec-candor .navbar :focus-visible{outline-color:#fff}.btn{border-radius:0;font-weight:700;text-transform:uppercase;letter-spacing:.06em;font-size:14px}.btn-lg{padding:14px 22px;font-size:15px;border-radius:0}.btn-primary,.btn-primary:hover,.btn-primary:focus{color:#fff;background:var(--navy);border-color:var(--navy)}.btn-primary:hover{background:var(--ink);border-color:var(--ink)}.btn-default{color:var(--ink);background:transparent;border:2px solid var(--ink)}.btn-default:hover,.btn-default:focus{color:var(--ink);background:var(--butter)}@media(prefers-color-scheme:dark){.btn-default{color:#fff;border-color:#fff}.btn-default:hover,.btn-default:focus{color:var(--ink)}}.cta-band{margin-top:96px;padding:clamp(32px,5vw,56px);background:var(--mint);color:var(--ink);display:flex;flex-wrap:wrap;gap:24px;align-items:center;justify-content:space-between;text-align:left}.cta-band .lead{margin:0;max-width:24em;font-family:var(--font-display);font-size:clamp(22px,2.6vw,30px);line-height:1.2;color:var(--ink)}.cta-band .btn-primary,.cta-band .btn-primary:hover{background:var(--ink);border-color:var(--ink);color:#fff}.cta-band .cta-follow{flex-basis:100%;color:var(--ink)}.cta-band .cta-follow a{color:var(--ink);text-decoration:underline}#footer{margin:72px 0 0;padding:36px 0 30px;text-align:left;font-size:14px;background:var(--ink);color:#b9bdc9;box-shadow:0 0 0 100vmax var(--ink);clip-path:inset(0 -100vmax)}.footer-links{justify-content:flex-start;gap:8px 22px;font-size:15px}.footer-links a,#footer a{color:#fff}.footer-links a:hover,#footer a:hover{color:var(--butter)}#footer .logo{font-family:var(--font-display)}:root{--stripe: linear-gradient(90deg, var(--navy) 0 20%, var(--teal) 0 40%, var(--mint) 0 60%, var(--butter) 0 80%, var(--orange) 0)}body:before{content:"";display:block;height:4px;background:var(--stripe)}.sec-candor:before,.sec-goosey:before,.sec-prototypes:before,body.bk:before,body.pwa-standalone:before{content:none}.sec-prototypes .container{width:auto;padding:0}#footer{border-top:6px solid var(--ink);border-image:linear-gradient(90deg,var(--navy) calc(50% - 30vw),var(--teal) 0 calc(50% - 10vw),var(--mint) 0 calc(50% + 10vw),var(--butter) 0 calc(50% + 30vw),var(--orange) 0) 1 / 6px 0 0 / 0 100vmax}.sec-candor #footer,.sec-goosey #footer,body.bk #footer{border-top:0;border-image:none}.prose.paper>h2:before{content:"";display:block;width:60px;height:4px;margin-bottom:14px;background:var(--stripe)}:root{--card: #EEF0F5}@media(prefers-color-scheme:dark){:root{--card: #2E3757}}.ac-blue{--accent: #2F5FB3}.ac-teal,.ac-purple{--accent: #0E5E6F}.ac-green{--accent: #3DD6A3}.ac-amber{--accent: #FFD25E}.ac-orange,.ac-pink,.ac-red{--accent: #FF5A36}.ac-ink{--accent: var(--ink)}.sec-services,.sec-toolkit,.sec-about{--accent: #0E5E6F}.sec-products,.sec-changelog,.sec-how-its-built{--accent: #2F5FB3}.sec-careers,.sec-contact{--accent: #FF5A36}.sec-writing,.sec-work,.sec-goosey,.sec-flexible-work-platform{--accent: #FFD25E}.sec-status,.sec-social-card-preview{--accent: #3DD6A3}@media(prefers-color-scheme:dark){.ac-teal,.ac-purple,.sec-services,.sec-toolkit,.sec-about{--accent: #3DD6A3}}:is(.sec-services,.sec-products,.sec-about,.sec-careers,.sec-contact,.sec-writing,.sec-work,.sec-changelog,.sec-status,.sec-toolkit,.sec-how-its-built,.sec-legal,.sec-privacy) main h1:not(.paper h1,.product-page h1){font-family:var(--font-display);font-weight:400;text-transform:lowercase;letter-spacing:0;font-size:clamp(34px,4.6vw,52px);line-height:1.05;background-image:none;padding-bottom:0}@media(prefers-color-scheme:light){.sec-writing,.sec-work,.sec-flexible-work-platform{--accent: #C9961A}}.service-card{border:0;border-radius:0;background:var(--card)}.service-card.is-linked:hover{border-color:transparent;box-shadow:none;transform:none}.service-icon,.engage-icon,.title-icon{border-radius:0;background:var(--accent, var(--navy));color:var(--ink)}.service-icon.is-sprite{background:color-mix(in srgb,var(--accent) 34%,transparent)}.service-icon.is-sprite.ac-ink{background:var(--accent)}.well,.well-lg{border:0;border-radius:0;box-shadow:none;background:var(--card)}.bg-info,.well.bg-info{background:var(--butter);color:var(--ink)}.bg-info a:not(.btn){color:var(--ink);text-decoration:underline}.badge{border-radius:0}.ql{border-radius:0;border:0;background:var(--card)}.demo-frame{border-radius:0}.sec-services .service-card.ac-pink .service-icon{background:#ff5fa2;color:var(--ink)}.sec-services .service-card.ac-orange .service-icon{background:#ff5a36;color:var(--ink)}.sec-services .service-card.ac-teal .service-icon{background:#0e5e6f;color:#fff}.sec-services .service-card.ac-red .service-icon{background:#ff9a1f;color:var(--ink)}.sec-services .service-card.ac-blue .service-icon{background:#2f5fb3;color:#fff}.sec-services .service-card.ac-purple .service-icon{background:#a472ff;color:var(--ink)}.sec-services .service-card.ac-green .service-icon{background:#3dd6a3;color:var(--ink)}.sec-services .service-card.ac-amber .service-icon{background:#ffd25e;color:var(--ink)}.sec-services .service-card.ac-pg .service-icon{background:#8b93ff;color:var(--ink)}.paper-kick,.paper-toc-h,.callout .lbl,.aside-note .lbl,.eyebrow{text-transform:none;letter-spacing:.01em;font-size:14px}.page-h2{font-family:var(--font-display);font-weight:400;text-transform:lowercase;font-size:clamp(28px,3.6vw,40px);line-height:1.05;margin:56px 0 16px}.carnot-paper .carnot-rule+.note-c .words{color:var(--text)}
