:root{--bg:#f7f8fa;--surface:#fff;--text:#16181d;--muted:#5a6170;--border:#d9dde4;--accent:#2457d6;--accent-ink:#fff;--accent-soft:#e8eefc;--ok:#137a3a;--err:#b42318;--err-soft:#fdecea;--code:#f1f3f6;--radius:10px;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}
@media (prefers-color-scheme:dark){:root{--bg:#0f1115;--surface:#171a21;--text:#e7e9ee;--muted:#9aa2b1;--border:#2c313c;--accent:#7aa2ff;--accent-ink:#0f1115;--accent-soft:#1d2740;--ok:#4cc27a;--err:#ff8a7a;--err-soft:#3a1d1a;--code:#1e222b}}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:16px/1.6 var(--sans);overflow-wrap:break-word}
a{color:var(--accent)}
a:hover{text-decoration-thickness:2px}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.skip{position:absolute;left:-9999px;top:0;background:var(--surface);padding:8px 12px;z-index:10}
.skip:focus{left:8px;top:8px}
.wrap{max-width:980px;margin:0 auto;padding:0 16px}
.site-header{background:var(--surface);border-bottom:1px solid var(--border)}
.site-header .wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 20px;padding-top:12px;padding-bottom:12px}
.brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:1.1rem;color:var(--text);text-decoration:none}
.brand img{width:28px;height:28px}
.site-nav ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 14px;font-size:.95rem}
.site-nav a{color:var(--muted);text-decoration:none}
.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--text);text-decoration:underline}
main{padding:24px 0 48px}
h1{font-size:clamp(1.7rem,4.5vw,2.4rem);line-height:1.2;margin:.2em 0 .4em}
h2{font-size:1.35rem;line-height:1.3;margin:2em 0 .5em}
h3{font-size:1.08rem;margin:1.4em 0 .3em}
.lead{font-size:1.12rem;color:var(--muted);max-width:44em;margin-top:0}
.crumbs{font-size:.88rem;color:var(--muted);margin:0 0 4px}
.crumbs ol{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:4px}
.crumbs li+li::before{content:"/";margin-right:4px}
.crumbs a{color:var(--muted)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px;padding:0;list-style:none;margin:16px 0}
.card{display:block;height:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;color:var(--text);text-decoration:none}
.card:hover{border-color:var(--accent)}
.card strong{display:block;color:var(--accent);font-size:1.05rem;margin-bottom:4px}
.card span{color:var(--muted);font-size:.95rem}
.tool{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin:16px 0 8px}
.tool label,.tool .lbl{display:block;font-weight:600;margin:0 0 6px}
textarea,input[type=text],input[type=number],select{width:100%;max-width:100%;font:15px/1.5 var(--mono);color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px}
select,input[type=number]{font-family:var(--sans);width:auto;min-width:0}
textarea{min-height:200px;resize:vertical}
textarea.out{background:var(--code)}
.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:12px 0}
.row label{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;font-weight:400;margin:0;max-width:100%}
.row label input[type=number]{width:6.5em}
button{font:inherit;font-size:.95rem;cursor:pointer;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);padding:8px 14px;min-height:40px}
button:hover{border-color:var(--accent)}
button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}
.status{min-height:1.6em;margin:8px 0 0;font-size:.95rem}
.status.ok{color:var(--ok)}
.status.err{color:var(--err);background:var(--err-soft);padding:8px 10px;border-radius:8px}
.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin:14px 0 0;padding:0;list-style:none}
.stats li{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px}
.stats b{display:block;font-size:1.5rem;font-variant-numeric:tabular-nums}
.stats span{color:var(--muted);font-size:.88rem}
.two{display:grid;grid-template-columns:1fr;gap:12px}
@media (min-width:760px){.two{grid-template-columns:1fr 1fr}}
.note{font-size:.9rem;color:var(--muted)}
code,kbd,pre{font-family:var(--mono);font-size:.92em}
code{background:var(--code);padding:1px 5px;border-radius:4px}
pre{background:var(--code);padding:12px;border-radius:8px;overflow-x:auto;white-space:pre}
pre code{background:none;padding:0}
.content{max-width:46em}
.content table{border-collapse:collapse;width:100%;display:block;overflow-x:auto;font-size:.95rem}
.content th,.content td{border:1px solid var(--border);padding:6px 10px;text-align:left;vertical-align:top}
.faq h3{margin-top:1.2em}
.related ul{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.site-footer{border-top:1px solid var(--border);background:var(--surface);font-size:.92rem;color:var(--muted)}
.site-footer .wrap{padding-top:20px;padding-bottom:24px}
.site-footer ul{list-style:none;padding:0;margin:0 0 10px;display:flex;flex-wrap:wrap;gap:4px 16px}
.site-footer a{color:var(--muted)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.site-nav a.here{color:var(--text);font-weight:600}
.foot-tools{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px 20px;margin:0 0 18px}
.site-footer .foot-tools ul{display:block;margin:0}
.foot-tools li{margin:3px 0}
.foot-h{font-weight:600;color:var(--text);margin:0 0 4px}
.group h3{margin-top:1.6em}
.group .note{margin:0}
input.out{background:var(--code)}
textarea.short{min-height:110px}
.outrow{display:flex;gap:8px;align-items:stretch;margin:0 0 12px}
.outrow input{flex:1 1 auto;min-width:0}
.tool .gap{margin-top:14px}
fieldset.opts{border:0;padding:0;min-width:0}
fieldset.opts legend{font-weight:600;padding:0;margin:0 0 6px;float:left;width:100%}
.row .grow{flex:1 1 220px;min-width:0}
.row label.grow input{flex:1 1 160px;min-width:0}
input[type=file]{max-width:100%;font-size:.9rem;color:var(--text)}
input[type=range]{accent-color:var(--accent);max-width:100%;flex:1 1 140px;min-width:0}
input[type=color]{width:52px;height:38px;padding:2px;border:1px solid var(--border);border-radius:6px;background:var(--bg);cursor:pointer}
input[type=checkbox],input[type=radio]{accent-color:var(--accent);width:18px;height:18px;margin:0}
.meter{margin:4px 0 14px;font-weight:600}
.meter .bar{display:block;height:8px;border-radius:4px;background:var(--border);margin-top:6px;overflow:hidden}
.meter .bar i{display:block;height:100%;background:var(--accent)}
.meter.weak .bar i{background:var(--err)}
.meter.strong .bar i{background:var(--ok)}
.color-top{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start}
.color-top .grow{flex:1 1 220px;min-width:0}
.swatch-wrap{flex:none;width:104px;height:104px;border-radius:var(--radius);border:1px solid var(--border);overflow:hidden;background:repeating-conic-gradient(#c8ccd4 0 25%,#fff 0 50%) 0 0/16px 16px}
.swatch{width:100%;height:100%}
.outs{margin-top:8px}
.rx-pat{display:flex;align-items:center;gap:4px;font:15px var(--mono);color:var(--muted)}
.rx-pat input{flex:1 1 auto;min-width:0}
.rx-flagstr{min-width:2ch}
.rx-hl{font:15px/1.5 var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;background:var(--code);border:1px solid var(--border);border-radius:8px;padding:10px;min-height:3.2em;max-height:360px;overflow:auto;margin:0 0 12px}
.rx-hl mark{background:#ffe08a;color:#16181d;border-radius:3px;box-shadow:inset 0 0 0 1px #d39e00}
.rx-hl mark.alt{background:#b9dcff;box-shadow:inset 0 0 0 1px #4a90d9}
.rx-hl mark.empty{display:inline-block;width:2px;height:1.2em;vertical-align:text-bottom;padding:0;background:#d39e00}
.rx-groups{overflow-x:auto;margin:0 0 8px}
.rx-groups table{border-collapse:collapse;width:100%;font-size:.9rem}
.rx-groups th,.rx-groups td{border:1px solid var(--border);padding:5px 8px;text-align:left;vertical-align:top}
.rx-groups td{font-family:var(--mono);white-space:pre;max-width:28em;overflow:hidden;text-overflow:ellipsis}
.rx-groups .undef{color:var(--muted);font-style:italic}
.content td code{overflow-wrap:anywhere}
