:root{--bg:#191919;--panel:#1e1e1e;--panel-2:#232323;--border:#333;--text:#dcdcdc;--text-muted:#b0b0b0;--accent:#50a5ff;--flags:#31a85d;--match:#50a5ff26;--match-alt:#31a85d26;--match-active:#50a5ff4d;--selection:#41689d80;--error:#ff3636;--token-group:#50a5ff;--token-quantifier:#31a85d;--token-charclass:#de7617;--token-anchor:#ff42cb;--token-escape:#1ca4e3;--token-backreference:#fd0;--token-alternation:#ff3636;--tooltip-bg:#232323;--tooltip-border:#333;--tooltip-text:#dcdcdc;--transition-fast:.15s ease;--transition-base:.2s ease;--font-ui:system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, sans-serif;--font-mono:ui-monospace, "Cascadia Code", "Fira Code", "JetBrains Mono", Consolas, monospace;--radius:8px;--radius-sm:4px;--shadow-1:0 1px 2px #00000040;--shadow-2:0 8px 30px #0006;--ring:0 0 0 3px #50a5ff40;--glow:0 0 0 1px var(--accent), 0 0 0 4px #50a5ff2e;--overlay-1:#ffffff08;--overlay-2:#ffffff0a;--overlay-3:#ffffff0d;--overlay-4:#ffffff0f;--active-line-overlay:#ffffff08;--accent-tint-weak:#50a5ff1f;--accent-tint-strong:#50a5ff26;--flags-tint-weak:#31a85d14;--flags-tint-strong:#31a85d29;--error-glow:#ff363629;--font-size-base:14px;--editor-font-size:13px}:root[data-theme=light]{--bg:#fff;--panel:#fafafa;--panel-2:#f0f0f0;--border:#c8c8c8;--text:#1e1e1e;--text-muted:#707070;--accent:#006de6;--flags:#317a43;--match:#006de626;--match-alt:#4cab7526;--match-active:#006de64d;--selection:#b8d7ffcc;--error:#c52536;--ring:0 0 0 3px #006de640;--glow:0 0 0 1px var(--accent), 0 0 0 4px #006de62e;--token-group:#006de6;--token-quantifier:#317a43;--token-escape:#00a2ed;--token-anchor:#e117aa;--token-alternation:#c52536;--tooltip-bg:#f0f0f0;--tooltip-border:#c8c8c8;--tooltip-text:#1e1e1e;--overlay-1:#00000008;--overlay-2:#0000000a;--overlay-3:#0000000d;--overlay-4:#0000000f;--active-line-overlay:#00000008;--accent-tint-weak:#006de61f;--accent-tint-strong:#006de626;--flags-tint-weak:#4cab7514;--flags-tint-strong:#4cab7529;--error-glow:#c5253629}:root[data-text-size=small]{--font-size-base:12px;--editor-font-size:11px}:root[data-text-size=large]{--font-size-base:16px;--editor-font-size:15px}*{box-sizing:border-box}html,body{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);font-size:var(--font-size-base);margin:0;line-height:1.5}h1,h2,h3{margin:0;font-weight:600}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}input,textarea,select,button{font-family:inherit;font-size:inherit;color:inherit}textarea,input[type=text],input[type=search],select{background:var(--panel);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:6px 8px}input:focus,textarea:focus,select:focus{border-color:var(--accent);outline:none}:focus-visible{box-shadow:var(--ring);border-radius:var(--radius-sm);outline:none}::placeholder{color:var(--text-muted)}body{flex-direction:column;min-height:100vh;display:flex}main{flex-direction:column;flex:auto;min-height:0;display:flex}.app-grid{flex:auto;grid-template-columns:230px minmax(0,1fr) 360px;grid-template-areas:"sidebar center right";min-height:0;display:grid}.sidebar{background:var(--panel-2);border-right:1px solid var(--border);flex-direction:column;grid-area:sidebar;gap:16px;padding:14px 10px;display:flex}.sidebar-section{flex-direction:column;gap:6px;display:flex}.sidebar-heading{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:0;font-size:11px}.editor-modes{flex-direction:column;gap:4px;display:flex}.mode-btn,.tool-link,.tool-btn{text-align:left;cursor:pointer;width:100%;color:var(--text);background:0 0;border:1px solid #0000;border-radius:4px;align-items:center;gap:8px;padding:6px 8px;display:flex}.mode-btn:hover,.tool-link:hover,.tool-btn:hover{background:var(--overlay-2);text-decoration:none}.mode-btn[aria-pressed=true]{background:var(--accent-tint-strong);color:var(--accent);border-color:var(--border)}.mode-btn .icon,.tool-btn .icon,.tool-link .icon{color:var(--text-muted)}.mode-btn:hover .icon,.tool-btn:hover .icon,.tool-link:hover .icon{color:var(--text)}.mode-btn[aria-pressed=true] .icon{color:var(--accent)}.trust-badge{color:var(--text-muted);align-items:center;gap:8px;margin-top:auto;padding:8px;font-size:11px;line-height:1.35;display:flex}.trust-badge .icon{color:var(--flags);width:14px;height:14px}.center{flex-direction:column;grid-area:center;gap:14px;padding:14px;display:flex;overflow:auto}.editor-box{flex-direction:column;gap:8px;display:flex}.box-label{letter-spacing:.02em;color:var(--text-muted);font-size:12px;font-weight:600}.right{background:var(--panel-2);border-left:1px solid var(--border);flex-direction:column;grid-area:right;display:flex;overflow:auto}.pattern-input{flex-direction:column;gap:8px;display:flex}.pattern-row{background:linear-gradient(180deg, var(--panel-2), var(--panel));border:1px solid var(--border);border-radius:var(--radius);min-height:46px;box-shadow:var(--shadow-1);transition:border-color var(--transition-base), box-shadow var(--transition-base);align-items:center;gap:10px;padding:7px 10px 7px 14px;display:flex}.pattern-row:focus-within{border-color:var(--accent);box-shadow:var(--glow)}.pattern-row[aria-invalid=true]{border-color:var(--error)}.pattern-row[aria-invalid=true]:focus-within{box-shadow:0 0 0 1px var(--error), 0 0 0 4px var(--error-glow)}.pattern-row .slash{color:var(--text-muted);font-family:var(--font-mono);opacity:.7;user-select:none;font-size:16px}.pattern-field{flex:1;min-width:0}.pattern-field .cm-editor{outline:none}.pattern-field .cm-content{caret-color:var(--text);padding:4px 0}.pattern-field .cm-scroller{font-size:var(--editor-font-size);line-height:1.6;overflow:hidden}.pattern-field .cm-cursor{border-left-width:2px}.pattern-error{color:var(--error);margin:0;font-size:12px}.pattern-copy{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-muted);cursor:pointer;transition:color var(--transition-fast), background var(--transition-fast);background:0 0;border:1px solid #0000;flex:none;place-items:center;display:grid}.pattern-copy:hover{color:var(--text);background:var(--overlay-4)}.pattern-copy:active{transform:scale(.94)}.flags-menu-root{flex:none;position:relative}.flags-summary{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--flags-tint-weak);height:28px;color:var(--flags);font-family:var(--font-mono);cursor:pointer;transition:background var(--transition-fast), border-color var(--transition-fast);align-items:center;gap:4px;padding:0 8px;display:flex}.flags-summary:hover{background:var(--flags-tint-strong);border-color:var(--flags)}.flags-summary-chevron{width:12px;height:12px;transition:transform var(--transition-fast);transform:rotate(90deg)}.flags-summary[aria-expanded=true] .flags-summary-chevron{transform:rotate(-90deg)}.flags-menu{z-index:20;background:var(--tooltip-bg);border:1px solid var(--tooltip-border);border-radius:var(--radius-sm);min-width:260px;box-shadow:var(--shadow-2);transform-origin:100% 0;flex-direction:column;padding:4px;animation:.16s cubic-bezier(.16,1,.3,1) flags-menu-in;display:flex;position:absolute;top:calc(100% + 6px);right:0}@keyframes flags-menu-in{0%{opacity:0;transform:scale(.96)translateY(-4px)}to{opacity:1;transform:scale(1)translateY(0)}}.flags-menu-item{text-align:left;border-radius:var(--radius-sm);cursor:pointer;width:100%;color:var(--text);transition:background var(--transition-fast);background:0 0;border:none;align-items:center;gap:8px;padding:8px 10px;font-size:12px;display:flex}.flags-menu-item:hover{background:var(--overlay-3)}.flags-menu-body{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.flags-menu-head{align-items:baseline;gap:8px;display:flex}.flags-menu-letter{font-family:var(--font-mono);color:var(--flags);font-size:14px;font-weight:700}.flags-menu-name{color:var(--text)}.flags-menu-desc{color:var(--text-muted);line-height:1.35}.flags-menu-check{text-align:center;width:14px;color:var(--flags);font-family:var(--font-mono);flex:none}.test-string-panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);transition:border-color var(--transition-base), box-shadow var(--transition-base);flex-direction:column;display:flex;overflow:hidden}.test-string-panel:focus-within{border-color:var(--accent);box-shadow:var(--glow)}.test-string-editor,.test-string-editor .cm-editor{min-height:200px}.test-string-editor .cm-scroller{font-size:calc(var(--editor-font-size) + .5px);line-height:1.65}.test-string-editor .cm-gutters{background:var(--panel-2);border-right:1px solid var(--border);padding-right:2px}.test-string-editor .cm-lineNumbers .cm-gutterElement{color:var(--text-muted);opacity:.55;padding:0 8px 0 10px}.test-string-footer{background:var(--panel-2);border-top:1px solid var(--border);color:var(--text-muted);font-size:11px;font-family:var(--font-mono);letter-spacing:.02em;text-align:right;padding:5px 12px}.substitution-panel{flex-direction:column;gap:10px;display:flex}.substitution-panel>label{color:var(--text-muted);flex-direction:column;gap:4px;font-size:12px;display:flex}.substitution-panel input{font-family:var(--font-mono)}.substitution-preview h3{color:var(--text-muted);margin-bottom:4px;font-size:12px}.substitution-preview pre{font-family:var(--font-mono);background:var(--panel);border:1px solid var(--border);white-space:pre-wrap;border-radius:4px;margin:0;padding:10px}.list-panel{flex-direction:column;gap:10px;display:flex}.list-panel-header{justify-content:space-between;align-items:center;gap:10px;display:flex}.list-panel-source{color:var(--text-muted);align-items:center;gap:6px;font-size:12px;display:flex}.list-panel-source select{font:inherit}.list-panel-header button{border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;color:var(--text-muted);background:0 0;align-items:center;gap:5px;padding:2px 8px;font-size:11px;display:inline-flex}.list-panel-header button .icon{width:13px;height:13px}.list-panel-header button:hover:not(:disabled){color:var(--text);border-color:var(--accent)}.list-panel-header button:disabled{opacity:.5;cursor:default}.list-panel pre{font-family:var(--font-mono);background:var(--panel);border:1px solid var(--border);white-space:pre-wrap;border-radius:4px;margin:0;padding:10px}.unit-tests-panel{flex-direction:column;gap:8px;display:flex}.unit-tests-summary{color:var(--text-muted);margin:0;font-size:12px}.unit-test-row{align-items:center;gap:8px;display:flex}.unit-test-status{background:var(--border);border-radius:50%;flex:none;width:10px;height:10px}.unit-test-status--pass{background:var(--flags)}.unit-test-status--fail{background:var(--error)}.unit-test-row input[type=text]{min-width:0;font-family:var(--font-mono);flex:auto}.unit-test-row select{flex:none}.unit-test-row button{border-radius:var(--radius-sm);cursor:pointer;color:var(--text-muted);background:0 0;border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:4px;display:inline-flex}.unit-test-row button:hover{color:var(--text);border-color:var(--border)}.panel{border-bottom:1px solid var(--border)}.panel-header{cursor:pointer;width:100%;color:var(--accent);background:0 0;border:none;align-items:center;gap:6px;padding:11px 16px;font-size:13px;font-weight:600;display:flex}.panel-header:hover{background:var(--overlay-1)}.panel-chevron{color:var(--text-muted);transition:transform .15s}.panel-header[aria-expanded=true] .panel-chevron{transform:rotate(90deg)}.panel-body{padding:0 16px 12px}.debugger-empty,.explanation-empty,.match-info-empty,.explanation-error{color:var(--text-muted);margin:0;font-size:13px}.match-info-truncated{color:var(--text-muted);margin:8px 0 0;font-size:12px}.explanation-panel,.match-info-panel{flex-direction:column;gap:6px;margin:0;padding-left:18px;font-size:13px;display:flex}.match-info-panel ul{color:var(--text-muted);margin:4px 0 0;padding-left:16px}.match-info-panel>li{cursor:pointer;border-radius:var(--radius-sm);transition:background-color var(--transition-fast);margin:0 -6px;padding:4px 6px}.match-info-panel>li:hover{background:var(--overlay-2)}.match-info-panel>li.match-info-active{background:var(--match-active)}.explanation-panel code,.match-info-panel code,.quick-reference code{font-family:var(--font-mono);background:var(--panel);border:1px solid var(--border);color:var(--flags);border-radius:3px;padding:1px 4px}.quick-reference{flex-direction:column;gap:8px;display:flex}.search-field{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:6px;padding:0 8px;display:flex}.search-field:focus-within{border-color:var(--accent);box-shadow:var(--ring)}.search-field .icon{color:var(--text-muted)}.search-field input[type=search]{background:0 0;border:none;flex:1;min-width:0;padding:6px 0}.search-field input[type=search]:focus{box-shadow:none}.quick-reference-categories{flex-wrap:wrap;gap:4px;display:flex}.quick-reference-category{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;transition:color var(--transition-fast), border-color var(--transition-fast);background:0 0;padding:3px 8px;font-size:11px}.quick-reference-category:hover{color:var(--text)}.quick-reference-category[aria-pressed=true]{color:var(--accent);border-color:var(--accent);background:var(--accent-tint-weak)}.quick-reference ul{flex-direction:column;gap:6px;max-height:300px;margin:0;padding:0;font-size:13px;list-style:none;display:flex;overflow:auto}.modal-overlay{z-index:100;background:#0000008c;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-dialog{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);width:min(680px,100%);max-height:85vh;box-shadow:var(--shadow-2);flex-direction:column;display:flex}.modal-dialog:focus{outline:none}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.modal-header h2{color:var(--accent);font-size:15px}.modal-close{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:22px;line-height:1}.modal-close:hover{color:var(--text)}.modal-body{padding:16px;overflow:auto}.code-generator-panel{flex-direction:column;gap:12px;display:flex}.code-generator-lang{color:var(--text-muted);flex-direction:column;gap:4px;font-size:12px;display:flex}.snippet{border:1px solid var(--border);border-radius:4px;overflow:hidden}.snippet-header{background:var(--panel-2);justify-content:space-between;align-items:center;padding:6px 10px;font-size:12px;display:flex}.snippet-header button{border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;color:var(--text-muted);background:0 0;align-items:center;gap:5px;padding:2px 8px;font-size:11px;display:inline-flex}.snippet-header button .icon{width:13px;height:13px}.snippet-header button:hover{color:var(--text);border-color:var(--accent)}.snippet pre{font-family:var(--font-mono);background:var(--panel);margin:0;padding:10px;font-size:13px;overflow-x:auto}.export-panel{flex-direction:column;gap:12px;display:flex}.export-panel-format{color:var(--text-muted);flex-direction:column;gap:4px;font-size:12px;display:flex}.export-panel-preview{font-family:var(--font-mono);background:var(--panel);border:1px solid var(--border);white-space:pre;border-radius:4px;max-height:320px;margin:0;padding:10px;font-size:13px;overflow:auto}.export-panel-download{border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;color:var(--text-muted);background:0 0;align-self:flex-start;align-items:center;gap:6px;padding:6px 14px;font-size:13px;display:inline-flex}.export-panel-download .icon{width:14px;height:14px}.export-panel-download:hover{color:var(--text);border-color:var(--accent)}@media (width<=1100px){.app-grid{grid-template-columns:56px minmax(0,1fr);grid-template-areas:"sidebar center""sidebar right"}.sidebar{padding:12px 6px}.sidebar-heading,.tool-label{display:none}.mode-btn,.tool-link,.tool-btn,.trust-badge{justify-content:center}.trust-badge .tool-label{display:none}.right{border-left:none;border-top:1px solid var(--border)}}@media (width<=700px){.app-grid{grid-template-columns:1fr;grid-template-areas:"sidebar""center""right"}.sidebar{border-right:none;border-bottom:1px solid var(--border);flex-direction:row;align-items:center;gap:14px;overflow-x:auto}.sidebar-section{flex-direction:row;align-items:center;gap:8px}.editor-modes{flex-direction:row}.tool-label{display:inline}.mode-btn,.tool-link,.tool-btn{white-space:nowrap;width:auto}.trust-badge{display:none}.right{border-top:1px solid var(--border)}}.icon{width:16px;height:16px;color:inherit;flex:none}.topbar{background:var(--panel-2);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:16px;height:48px;padding:0 16px;display:flex}.topbar .brand{color:var(--text);align-items:center;gap:9px;font-size:15px;font-weight:600;display:flex}.topbar .brand:hover{text-decoration:none}.brand-mark{border-radius:var(--radius-sm);background:var(--accent);width:26px;height:26px;color:var(--bg);place-items:center;display:grid}.topbar-right{align-items:center;gap:16px;display:flex}.topbar-note{color:var(--text-muted);font-size:12px}.topbar-link{color:var(--text-muted);font-size:13px}.topbar-link:hover{color:var(--text);text-decoration:none}.page{max-width:1100px;padding:20px 24px}.page h1{margin-bottom:16px;font-size:22px}.page h2{color:var(--accent);margin:20px 0 8px;font-size:15px}.page table{border-collapse:collapse;width:100%;max-width:620px}.page th,.page td{text-align:left;border-bottom:1px solid var(--border);padding:5px 10px;font-size:13px}.page th{color:var(--text-muted);font-weight:600}.page code{font-family:var(--font-mono);color:var(--flags)}.test-string-panel,.substitution-preview pre,.snippet{box-shadow:var(--shadow-1)}.box-header{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.flavor-selector{align-items:center;gap:.5rem;display:flex}.flavor-selector-label{text-transform:uppercase;letter-spacing:.04em;opacity:.7;font-size:.75rem}.flavor-selector-select{font:inherit;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:4px;padding:.25rem .5rem;font-size:.8125rem}.cm-debug-active{background:var(--match-active);border-radius:2px}.cm-debug-caret{vertical-align:text-bottom;background:var(--accent);width:2px;height:1.1em;animation:1s step-end infinite debug-caret-blink;display:inline-block}@keyframes debug-caret-blink{50%{opacity:0}}.debugger-warning{background:var(--overlay-3);border:1px solid var(--error);color:var(--error);border-radius:var(--radius-sm);margin:0 0 10px;padding:8px 10px;font-size:12px}.debugger-view-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:10px 0 4px;font-size:11px}.debugger-view{border:1px solid var(--border);border-radius:var(--radius-sm);max-height:80px;overflow:auto}.debugger-controls{align-items:center;gap:6px;margin:12px 0;display:flex}.debugger-controls button{border:1px solid var(--border);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;background:0 0;padding:4px 10px}.debugger-controls button:disabled{opacity:.4;cursor:default}.debugger-step-count{color:var(--text-muted);margin-left:auto;font-size:12px}.debugger-log{border-top:1px solid var(--border);max-height:220px;margin:0;padding:0;list-style:none;overflow:auto}.debugger-log li{font-size:12px;font-family:var(--font-mono);cursor:pointer;padding:4px 6px}.debugger-log li:hover{background:var(--overlay-2)}.debugger-log-active{background:var(--match-active)}.theme-toggle{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.theme-toggle:hover{background:var(--overlay-2);color:var(--text)}.settings-body{flex-direction:column;gap:14px;display:flex}.settings-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.settings-label{color:var(--text);font-size:13px}.settings-checkbox-row{cursor:pointer}.settings-choice-group{gap:6px;display:flex}.settings-choice-group button{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;background:0 0;align-items:center;gap:6px;padding:5px 10px;font-size:13px;display:flex}.settings-choice-group button[aria-pressed=true]{color:var(--accent);border-color:var(--accent);background:var(--accent-tint-weak)}.site-footer{border-top:1px solid var(--border);background:var(--panel-2);color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:16px;padding:14px 16px;font-size:12px;display:flex}.footer-brand{color:var(--text);font-weight:600}.footer-nav{gap:12px;display:flex}.footer-nav a{color:var(--text-muted)}.footer-nav a:hover{color:var(--text)}.footer-note{margin-left:auto}.rating-widget{align-items:center;gap:4px;display:flex}.rating-widget-label{color:var(--text-muted)}.rating-star{cursor:pointer;background:0 0;border:none;margin:0;padding:2px;line-height:0;display:inline-flex}.rating-star svg{fill:none;stroke:var(--text-muted);stroke-width:24px;transition:fill var(--transition-fast), stroke var(--transition-fast)}.rating-star svg.is-filled{fill:var(--flags);stroke:var(--flags)}.rating-widget-done{color:var(--text-muted)}.library-save-row{gap:8px;margin-bottom:12px;display:flex}.library-save-row input{flex:auto}.library-list{max-height:280px;margin:0 0 12px;padding:0;list-style:none;overflow:auto}.library-list li{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:8px 4px;display:flex}.library-entry-info{flex-direction:column;gap:2px;min-width:0;display:flex}.library-entry-name{font-size:13px}.library-entry-pattern{color:var(--text-muted);font-size:11px;font-family:var(--font-mono);white-space:nowrap;text-overflow:ellipsis;max-width:220px;overflow:hidden}.library-entry-actions{flex:none;gap:4px;display:flex}.library-entry-actions button{border:1px solid var(--border);color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;background:0 0;padding:3px 8px;font-size:12px}.library-entry-actions button:hover{color:var(--text)}.library-io-row{border-top:1px solid var(--border);gap:8px;padding-top:8px;display:flex}.library-file-input{display:none}
