diff --git a/.github/linters/.editorconfig-checker.json b/.github/linters/.editorconfig-checker.json index 3b52d57..b22e54c 100644 --- a/.github/linters/.editorconfig-checker.json +++ b/.github/linters/.editorconfig-checker.json @@ -15,6 +15,7 @@ "^code_coverage/", "^composer\\.lock$", "^runtime/", + "^tests/Support/PrintR/server-request\\.txt$", "^tests/runtime/", "^vendor/", "phpstan-baseline\\.neon$", diff --git a/CHANGELOG.md b/CHANGELOG.md index 9708a8f..76498a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## 0.1.2 Under development +- feat(log): render multi-line log messages with preserved whitespace, `print_r()` dumps as a tree, and `var_export()` values highlighted. + ## 0.1.1 October 28, 2026 - fix(event): skip `InstrumentationGuard` trace frames on Windows by joining the skip path with `DIRECTORY_SEPARATOR`. diff --git a/composer.json b/composer.json index a67c682..e5db0d4 100644 --- a/composer.json +++ b/composer.json @@ -23,6 +23,7 @@ "ext-ctype": "*", "ext-intl": "*", "ext-mbstring": "*", + "ext-tokenizer": "*", "ui-awesome/html": "^0.6", "ui-awesome/html-core-component": "^0.4", "ui-awesome/html-helper": "^0.7", diff --git a/resources/assets/dist/css/debug.min.css b/resources/assets/dist/css/debug.min.css index 79f907f..8def219 100644 --- a/resources/assets/dist/css/debug.min.css +++ b/resources/assets/dist/css/debug.min.css @@ -1 +1 @@ -:root,:host{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--yii-debug-font-sans:"IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, helvetica, arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--yii-debug-font-mono:"JetBrains Mono", ui-monospace, sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;--yii-debug-font-display:var(--yii-debug-font-mono);--yii-debug-space-1:4px;--yii-debug-space-2:8px;--yii-debug-space-3:12px;--yii-debug-space-4:16px;--yii-debug-space-5:24px;--yii-debug-space-6:32px;--yii-debug-radius-sm:6px;--yii-debug-radius-md:10px;--yii-debug-radius-lg:14px;--yii-debug-radius-pill:999px;--yii-debug-fs-xs:.75rem;--yii-debug-fs-sm:.8125rem;--yii-debug-fs-base:.9375rem;--yii-debug-fs-lg:1.0625rem;--yii-debug-fs-xl:1.25rem;--yii-debug-fs-2xl:1.5rem;--yii-debug-control-min-size:36px;--yii-debug-panel-padding:var(--yii-debug-space-5);--yii-debug-row-padding-block:10px;--yii-debug-duration-fast:.12s;--yii-debug-duration-normal:.18s;--yii-debug-panel-bg:var(--lightningcss-light,#f2f5f1)var(--lightningcss-dark,#0c120e);--yii-debug-panel-bg-accent:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c14);--yii-debug-panel-surface:var(--lightningcss-light,#fffffff0)var(--lightningcss-dark,#121a15eb);--yii-debug-panel-surface-muted:var(--lightningcss-light,#f6f8f5)var(--lightningcss-dark,#101812);--yii-debug-panel-surface-hover:var(--lightningcss-light,#e9f2ec)var(--lightningcss-dark,#1a241d);--yii-debug-panel-border:var(--lightningcss-light,#5d7a6942)var(--lightningcss-dark,#8fa39633);--yii-debug-panel-border-strong:var(--lightningcss-light,#4660515c)var(--lightningcss-dark,#8fa39652);--yii-debug-panel-text:var(--lightningcss-light,#16211a)var(--lightningcss-dark,#e4ede6);--yii-debug-panel-muted:var(--lightningcss-light,#5c6b60)var(--lightningcss-dark,#8fa396);--yii-debug-panel-link:var(--lightningcss-light,#0b6b4a)var(--lightningcss-dark,#4fd39a);--yii-debug-panel-link-hover:var(--lightningcss-light,#0d855b)var(--lightningcss-dark,#7fe4b8);--yii-debug-panel-primary:var(--lightningcss-light,#0e7a55)var(--lightningcss-dark,#2fd08c);--yii-debug-primary-bg:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));--yii-debug-on-primary:var(--lightningcss-light,#fff)var(--lightningcss-dark,#06281b);--yii-debug-panel-primary-strong:var(--lightningcss-light,#0a5c40)var(--lightningcss-dark,#17a673);--yii-debug-focus-ring:var(--lightningcss-light,#075c40)var(--lightningcss-dark,#7fe4b8);--yii-debug-success:var(--lightningcss-light,#0d7d47)var(--lightningcss-dark,#34c97e);--yii-debug-warning:var(--lightningcss-light,#8f5000)var(--lightningcss-dark,#e8a33d);--yii-debug-danger:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-on-success:var(--lightningcss-light,#fff)var(--lightningcss-dark,#0c120e);--yii-debug-on-warning:var(--lightningcss-light,#fff)var(--lightningcss-dark,#1c1917);--yii-debug-on-danger:var(--lightningcss-light,#fff)var(--lightningcss-dark,#1c1917);--yii-debug-info:var(--lightningcss-light,#205f9d)var(--lightningcss-dark,#5fa8e8);--yii-debug-on-info:var(--yii-debug-panel-bg);--yii-debug-panel-code-bg:var(--lightningcss-light,#ecf1ec)var(--lightningcss-dark,#17211a);--yii-debug-panel-pill:var(--lightningcss-light,#16211a0f)var(--lightningcss-dark,#8fa3962e);--yii-debug-panel-shadow:var(--lightningcss-light,0 22px 60px #16211a14)var(--lightningcss-dark,0 22px 60px #0006);--yii-debug-border:1px solid var(--yii-debug-panel-border);--yii-debug-border-strong:1px solid var(--yii-debug-panel-border-strong);--yii-debug-shadow-sm:0 1px 2px #0f172a0f;--yii-debug-shadow-md:0 10px 24px #0f172a14;--yii-debug-verb-get:var(--lightningcss-light,#0b7285)var(--lightningcss-dark,#4dc4d9);--yii-debug-verb-post:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#a78bfa);--yii-debug-verb-put:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#e8a33d);--yii-debug-verb-delete:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-verb-other:var(--yii-debug-panel-muted);--yii-debug-status-2xx:var(--yii-debug-success);--yii-debug-status-3xx:var(--yii-debug-warning);--yii-debug-status-4xx:var(--lightningcss-light,#c2410c)var(--lightningcss-dark,#fb923c);--yii-debug-status-5xx:var(--yii-debug-danger);--yii-debug-level-error:var(--yii-debug-danger);--yii-debug-level-warning:var(--yii-debug-warning);--yii-debug-level-info:var(--yii-debug-info);--yii-debug-level-trace:var(--yii-debug-panel-muted);--yii-debug-level-profile:var(--lightningcss-light,#9333ea)var(--lightningcss-dark,#b16be8);--yii-debug-level-other:var(--yii-debug-panel-muted);--yii-debug-gauge-fill:var(--yii-debug-panel-primary);--yii-debug-gauge-track:var(--lightningcss-light,#0e7a5529)var(--lightningcss-dark,#2fd08c24);--yii-debug-sql-kw:var(--lightningcss-light,#0a5c40)var(--lightningcss-dark,#4fd39a);--yii-debug-sql-str:var(--lightningcss-light,#8f4e00)var(--lightningcss-dark,#e8a33d);--yii-debug-sql-num:var(--yii-debug-info);--yii-debug-sql-comment:var(--yii-debug-panel-muted);--yii-debug-sql-param:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#a78bfa);--yii-debug-cat-app:var(--lightningcss-light,#0a6b47)var(--lightningcss-dark,#14b06e);--yii-debug-cat-db:var(--lightningcss-light,#0994b8)var(--lightningcss-dark,#0999be);--yii-debug-cat-view:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#8f6ce8);--yii-debug-cat-cache:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#c28300);--yii-debug-cat-mail:var(--lightningcss-light,#b23a67)var(--lightningcss-dark,#d95f8f);--yii-debug-cat-queue:var(--lightningcss-light,#3f4dbd)var(--lightningcss-dark,#6d7ce6);--yii-debug-cat-other:var(--yii-debug-panel-muted)}@media (prefers-color-scheme:dark){:root,:host{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-yii-debug-theme=light],:host([data-theme=light]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-yii-debug-theme=dark],:host([data-theme=dark]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../fonts/jetbrains-mono-latin-400-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../fonts/jetbrains-mono-latin-500-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(../fonts/jetbrains-mono-latin-700-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(../fonts/ibm-plex-sans-latin-400-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(../fonts/ibm-plex-sans-latin-500-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(../fonts/ibm-plex-sans-latin-600-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:700;src:url(../fonts/ibm-plex-sans-latin-700-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.yii-debug .yii-debug-event-controls{margin-block:var(--yii-debug-space-4);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-event-groups{align-items:center;gap:var(--yii-debug-space-2);margin-block:var(--yii-debug-space-4);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-event-group{align-items:center;gap:var(--yii-debug-space-2);min-height:var(--yii-debug-control-min-size);padding:var(--yii-debug-space-1) var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);overflow-wrap:anywhere;display:inline-flex}.yii-debug .yii-debug-event-item>summary{cursor:pointer;list-style:none}.yii-debug .yii-debug-event-item>summary:focus-visible{outline:2px solid var(--yii-debug-panel-primary);outline-offset:4px;border-radius:var(--yii-debug-radius-sm)}.yii-debug :is(.yii-debug-event-clock,.yii-debug-event-identity){gap:var(--yii-debug-space-1);display:grid}.yii-debug .yii-debug-event-clock{min-width:105px}.yii-debug .yii-debug-event-time{white-space:nowrap;color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-event-identity{overflow-wrap:anywhere;min-width:0}.yii-debug .yii-debug-event-name:before{content:"+ ";color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-event-item[open] .yii-debug-event-name:before{content:"− "}.yii-debug .yii-debug-event-timing{font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-event-detail-row{display:none}.yii-debug .yii-debug-table tr:has(.yii-debug-event-item[open])+.yii-debug-event-detail-row{display:table-row}.yii-debug .yii-debug-table .yii-debug-event-detail-row>td{padding:0}.yii-debug .yii-debug-event-detail{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);background:var(--yii-debug-panel-surface-muted);white-space:normal;grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-event-detail>div{min-width:0}.yii-debug .yii-debug-event-detail-footer{gap:var(--yii-debug-space-2) var(--yii-debug-space-4);flex-wrap:wrap;grid-column:1/-1;display:flex}.yii-debug .yii-debug-event-metadata{gap:var(--yii-debug-space-2) var(--yii-debug-space-3);grid-template-columns:minmax(75px,.4fr) minmax(0,1fr);display:grid}.yii-debug .yii-debug-event-metadata dt{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-event-metadata dd{margin:0}.yii-debug .yii-debug-event-trace pre{white-space:pre-wrap;overflow-wrap:anywhere}.yii-debug :is(.yii-debug-event-context,.yii-debug-event-trace)>:last-child{margin-bottom:0}@media not (min-width:768px){.yii-debug .yii-debug-event-detail{grid-template-columns:minmax(0,1fr)}}.yii-debug .yii-debug-event-coverage>summary{min-height:var(--yii-debug-control-min-size);padding-block:var(--yii-debug-space-2);cursor:pointer}.yii-debug .yii-debug-request-hero{margin-bottom:var(--yii-debug-space-4);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);box-shadow:var(--yii-debug-shadow-sm)}.yii-debug .yii-debug-request-overview{margin-bottom:var(--yii-debug-space-4);border:var(--yii-debug-border);border-inline-start:4px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 76%, var(--yii-debug-panel-text));border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-request-overview-header{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.yii-debug .yii-debug-request-overview-identity{min-width:0}.yii-debug .yii-debug-request-hero-line{align-items:center;gap:var(--yii-debug-space-2);min-width:0;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-base);display:flex}.yii-debug .yii-debug-request-hero-method{border-radius:var(--yii-debug-radius-pill);letter-spacing:.04em;flex:none;padding:2px 10px;font-weight:700}.yii-debug .yii-debug-request-hero-url{min-width:0;color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.yii-debug .yii-debug-request-hero-meta{align-items:center;gap:6px var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);flex-wrap:wrap;margin-top:6px;display:flex}.yii-debug .yii-debug-request-hero-meta:empty{display:none}.yii-debug .yii-debug-request-hero-meta-item{align-items:baseline;gap:var(--yii-debug-space-1);display:inline-flex}.yii-debug .yii-debug-request-hero-meta-label{font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;font-size:.625rem;font-weight:700}.yii-debug .yii-debug-request-hero-meta-value{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-request-overview-status{text-align:right;min-width:72px}.yii-debug .yii-debug-request-overview-metrics{border-block:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);grid-template-columns:minmax(0,1fr) minmax(0,2fr) auto;margin:0;display:grid}.yii-debug .yii-debug-request-overview-metric{min-width:0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4)}.yii-debug .yii-debug-request-overview-metric+:is(.yii-debug .yii-debug-request-overview-metric){border-inline-start:var(--yii-debug-border)}.yii-debug .yii-debug-request-overview-metric dt{color:var(--yii-debug-panel-muted);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-request-overview-metric dd{align-items:center;gap:var(--yii-debug-space-2);min-width:0;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);overflow-wrap:anywhere;flex-wrap:wrap;margin:0;font-weight:600;display:flex}.yii-debug .yii-debug-request-overview-meta{align-items:center;gap:var(--yii-debug-space-2) var(--yii-debug-space-5);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-request-overview-config{align-items:center;gap:var(--yii-debug-space-2);flex-wrap:wrap;margin-inline-start:auto;display:inline-flex}.yii-debug .yii-debug-request-overview-meta-item{flex-direction:column;align-items:flex-start;min-width:0;display:inline-flex}.yii-debug .yii-debug-request-overview-meta-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-request-overview-tag{max-width:34ch;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.yii-debug .yii-debug-request-routing-error{border-width:1px 0 0 4px;border-radius:0;margin:0}.yii-debug .yii-debug-request-routing-error p{margin:0}.yii-debug .yii-debug-request-tabs{min-width:0}.yii-debug .yii-debug-request-tabs>.yii-debug-tabs{scrollbar-width:thin;flex-wrap:nowrap;overflow-x:auto}.yii-debug .yii-debug-request-tabs .yii-debug-tab{flex:none}.yii-debug .yii-debug-request-tabs .yii-debug-empty-state{padding:var(--yii-debug-space-4)}.yii-debug .yii-debug-request-tabs .yii-debug-empty-state h2{font-size:var(--yii-debug-fs-base);margin:0}.yii-debug .yii-debug-diagnostic-shell{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-diagnostic-header{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);display:flex}.yii-debug .yii-debug-diagnostic-heading-copy{align-items:baseline;gap:var(--yii-debug-space-2) var(--yii-debug-space-3);flex-wrap:wrap;min-width:0;display:flex}.yii-debug .yii-debug-diagnostic-heading-copy h2{margin:0}.yii-debug .yii-debug-diagnostic-counts{align-items:center;gap:var(--yii-debug-space-2);display:inline-flex}.yii-debug .yii-debug-diagnostic-count,.yii-debug .yii-debug-diagnostic-total,.yii-debug .yii-debug-header-lane-count,.yii-debug .yii-debug-server-group-count{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums}.yii-debug .yii-debug-diagnostic-count{align-items:baseline;gap:var(--yii-debug-space-1);display:inline-flex}.yii-debug .yii-debug-diagnostic-count+.yii-debug-diagnostic-count:before{width:1px;height:12px;background:var(--yii-debug-panel-border-strong);content:"";margin-inline-end:var(--yii-debug-space-1)}.yii-debug .yii-debug-diagnostic-count-value{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-diagnostic-filter{background:var(--yii-debug-panel-surface);width:min(280px,42%);max-width:none}.yii-debug .yii-debug-header-lanes{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-header-lane{min-width:0;position:relative}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane{border-inline-start:2px solid color-mix(in srgb, var(--yii-debug-panel-primary) 36%, var(--yii-debug-panel-border))}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane:before{z-index:1;top:25px;border:2px solid var(--yii-debug-panel-surface);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-primary);content:"";width:8px;height:8px;position:absolute;inset-inline-start:-5px}.yii-debug .yii-debug-header-lane-header{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);min-height:58px;padding:10px var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);display:flex}.yii-debug .yii-debug-header-lane-header h3{font-size:var(--yii-debug-fs-base);margin:1px 0 0}.yii-debug .yii-debug-header-direction{color:var(--yii-debug-panel-primary-strong);font-family:var(--yii-debug-font-mono);letter-spacing:.04em;font-size:.6875rem;font-weight:700;display:block}.yii-debug .yii-debug-diagnostic-ledger{margin:0}.yii-debug .yii-debug-diagnostic-row{border-top:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 58%, transparent);grid-template-columns:minmax(132px,.72fr) minmax(0,1.28fr);align-items:start;display:grid}.yii-debug .yii-debug-diagnostic-row:first-child{border-top:0}.yii-debug .yii-debug-diagnostic-row:hover{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-diagnostic-row dt,.yii-debug .yii-debug-diagnostic-row dd{min-width:0;padding:10px var(--yii-debug-space-4);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);line-height:1.5}.yii-debug .yii-debug-diagnostic-row dt{color:var(--yii-debug-panel-muted);overflow-wrap:anywhere;font-weight:600;overflow:hidden}.yii-debug .yii-debug-diagnostic-row dd{border-inline-start:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 45%, transparent);color:var(--yii-debug-panel-text);overflow-wrap:anywhere;white-space:pre-wrap;margin:0}.yii-debug .yii-debug-header-ledger .yii-debug-diagnostic-row:nth-child(2n),.yii-debug .yii-debug-server-ledger .yii-debug-diagnostic-row:nth-child(2n){background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 72%)}:is(.yii-debug .yii-debug-header-ledger .yii-debug-diagnostic-row:nth-child(2n),.yii-debug .yii-debug-server-ledger .yii-debug-diagnostic-row:nth-child(2n)):hover{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-diagnostic-values{gap:6px;display:grid}.yii-debug .yii-debug-diagnostic-value-count{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:.6875rem}.yii-debug .yii-debug-diagnostic-value-list{gap:var(--yii-debug-space-1);margin:0;padding:0;list-style:none;display:grid}.yii-debug .yii-debug-diagnostic-value-list li+li{padding-top:var(--yii-debug-space-1);border-top:1px dashed var(--yii-debug-panel-border)}.yii-debug .yii-debug-diagnostic-empty-value,.yii-debug .yii-debug-diagnostic-lane-empty,.yii-debug .yii-debug-diagnostic-empty-state,.yii-debug .yii-debug-diagnostic-filter-empty{color:var(--yii-debug-panel-muted);font-style:italic}.yii-debug .yii-debug-diagnostic-lane-empty,.yii-debug .yii-debug-diagnostic-empty-state,.yii-debug .yii-debug-diagnostic-filter-empty{padding:var(--yii-debug-space-4);margin:0}.yii-debug .yii-debug-diagnostic-filter-empty{border-top:var(--yii-debug-border);text-align:center}.yii-debug .yii-debug-server-group-body>.yii-debug-mini-toolbar{padding:var(--yii-debug-space-2) var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);margin:0}.yii-debug .yii-debug-server-group-body>.yii-debug-mini-toolbar .yii-debug-filter-input{max-width:100%}.yii-debug .yii-debug-server-additional+.yii-debug-server-group,.yii-debug .yii-debug-server-group+.yii-debug-server-group{border-top:var(--yii-debug-border)}.yii-debug .yii-debug-server-group-summary{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);min-height:44px;padding:9px var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);display:flex}.yii-debug .yii-debug-server-group-summary .yii-debug-server-group-title{font-size:var(--yii-debug-fs-sm);margin:0;font-weight:700}.yii-debug .yii-debug-server-group-summary{cursor:pointer;list-style:none}.yii-debug .yii-debug-server-group-summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-server-group-summary:hover,.yii-debug .yii-debug-server-group-summary:focus-visible{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-server-group-identity{align-items:baseline;gap:var(--yii-debug-space-2);display:inline-flex}.yii-debug .yii-debug-server-group:not([open])>.yii-debug-server-group-summary{border-bottom:0}.yii-debug .yii-debug-server-group-summary .yii-debug-disclosure-hint{margin-inline-start:auto}.yii-debug .yii-debug-diagnostic-row[hidden],.yii-debug .yii-debug-header-lane[hidden],.yii-debug .yii-debug-server-group[hidden],.yii-debug .yii-debug-diagnostic-filter-empty[hidden]{display:none}@container yii-debug-main (width<=900px){.yii-debug .yii-debug-header-lanes{grid-template-columns:minmax(0,1fr)}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane{border-top:2px solid color-mix(in srgb, var(--yii-debug-panel-primary) 36%, var(--yii-debug-panel-border));border-inline-start:0}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane:before{top:-5px;inset-inline-start:var(--yii-debug-space-4)}}@container yii-debug-main (width<=560px){.yii-debug .yii-debug-diagnostic-header{flex-direction:column;align-items:stretch}.yii-debug .yii-debug-diagnostic-filter{width:100%}.yii-debug .yii-debug-diagnostic-row{grid-template-columns:minmax(0,1fr)}.yii-debug .yii-debug-diagnostic-row dt{padding-bottom:var(--yii-debug-space-1)}.yii-debug .yii-debug-diagnostic-row dd{border-inline-start:0;padding-top:0}}.yii-debug .yii-debug-route-resolution{margin:var(--yii-debug-space-3) var(--yii-debug-space-4) var(--yii-debug-space-4)}.yii-debug .yii-debug-route-resolution-message{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm)}.yii-debug .yii-debug-route-trace{min-width:560px}.yii-debug .yii-debug-table.yii-debug-route-trace thead th,.yii-debug .yii-debug-table.yii-debug-route-trace tbody td{text-align:center}.yii-debug .yii-debug-table.yii-debug-route-trace thead th:nth-child(2),.yii-debug .yii-debug-table.yii-debug-route-trace tbody td:nth-child(2){text-align:start}.yii-debug .yii-debug-table.yii-debug-route-trace thead th:first-child,.yii-debug .yii-debug-table.yii-debug-route-trace tbody td:first-child{width:56px}.yii-debug .yii-debug-table.yii-debug-route-trace thead th:last-child,.yii-debug .yii-debug-table.yii-debug-route-trace tbody td:last-child{width:160px}.yii-debug{background:radial-gradient(circle at top left, var(--yii-debug-panel-bg-accent), transparent 36rem), var(--yii-debug-panel-bg);min-height:100vh;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-base);margin:0;padding:0;line-height:1.5}.yii-debug *,.yii-debug :before,.yii-debug :after{box-sizing:border-box}.yii-debug h1,.yii-debug h2,.yii-debug h3,.yii-debug h4,.yii-debug h5,.yii-debug h6{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-text);letter-spacing:-.01em;font-weight:700;line-height:1.25}.yii-debug h1{font-size:var(--yii-debug-fs-2xl)}.yii-debug h2{font-size:var(--yii-debug-fs-xl)}.yii-debug h3{font-size:var(--yii-debug-fs-lg)}.yii-debug h4,.yii-debug h5,.yii-debug h6{font-size:var(--yii-debug-fs-base)}.yii-debug p,.yii-debug ul,.yii-debug ol,.yii-debug dl,.yii-debug figure{margin:0 0 var(--yii-debug-space-3)}.yii-debug ul,.yii-debug ol{padding-left:var(--yii-debug-space-5)}.yii-debug strong,.yii-debug b{font-weight:600}.yii-debug a{color:var(--yii-debug-panel-link);text-decoration:none;transition:color .12s}.yii-debug a:hover,.yii-debug a:focus{color:var(--yii-debug-panel-link-hover);text-decoration:underline}.yii-debug code,.yii-debug kbd,.yii-debug samp{border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-code-bg);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-variant-ligatures:none;padding:.1em .35em;font-size:.875em}.yii-debug pre{margin:0 0 var(--yii-debug-space-3);padding:var(--yii-debug-space-3);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-code-bg);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);font-variant-ligatures:none;line-height:1.4;overflow-x:auto}.yii-debug pre code{font-size:inherit;background:0 0;padding:0}.yii-debug :focus-visible{outline:3px solid var(--yii-debug-focus-ring);outline-offset:3px}.yii-debug .yii-debug-page{max-width:1680px;padding:var(--yii-debug-space-4);margin:0 auto}.yii-debug .yii-debug-layout{gap:var(--yii-debug-space-4);grid-template-columns:240px 1fr;align-items:start;display:grid}@media (max-width:959px){.yii-debug .yii-debug-layout{grid-template-columns:1fr}}@media (min-width:960px){.yii-debug .yii-debug-sidebar{top:var(--yii-debug-space-4);max-height:calc(100vh - var(--yii-debug-space-5));position:sticky;overflow-y:auto}}.yii-debug .yii-debug-main{min-width:0;container:yii-debug-main/inline-size}.yii-debug .yii-debug-main>*+:is(h2,.yii-debug-disclosure),.yii-debug .yii-debug-tab-panel>.yii-debug-table-wrap+.yii-debug-disclosure{margin-top:var(--yii-debug-space-5)}.yii-debug .yii-debug-main>.yii-debug-sr-only:first-child+:is(h2,.yii-debug-disclosure){margin-top:0}.yii-debug .yii-debug-mini-toolbar{justify-content:flex-end;align-items:center;gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-4);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-side-section{gap:var(--yii-debug-space-2);margin:0 0 var(--yii-debug-space-3);padding:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);flex-direction:column;display:flex}.yii-debug .yii-debug-side-section-title{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-request-nav-row{width:100%;margin-top:var(--yii-debug-space-2);grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.yii-debug .yii-debug-btn-icon{justify-content:center;align-items:center;padding:4px 0;font-size:16px;line-height:1;display:inline-flex}.yii-debug .yii-debug-btn-icon svg{width:1em;height:1em}.yii-debug .yii-debug-request-nav .yii-debug-btn{justify-content:center;width:100%}.yii-debug .yii-debug-brand-bar{align-items:center;gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:linear-gradient(180deg, color-mix(in srgb, var(--yii-debug-panel-surface) 96%, transparent), color-mix(in srgb, var(--yii-debug-panel-surface-muted) 88%, transparent));box-shadow:var(--yii-debug-shadow-sm);flex-wrap:wrap;padding:8px 12px;display:flex}.yii-debug .yii-debug-brand-chip{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-surface), transparent 30%);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);min-height:var(--yii-debug-control-min-size);align-items:center;gap:8px;padding:6px 12px;text-decoration:none;transition:border-color .14s,transform .14s,box-shadow .14s;display:inline-flex}.yii-debug a.yii-debug-brand-chip:hover,.yii-debug a.yii-debug-brand-chip:focus{border-color:var(--yii-debug-panel-primary);box-shadow:var(--yii-debug-shadow-sm);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-brand-icon{flex:none;justify-content:center;align-items:center;width:22px;height:22px;display:inline-flex}.yii-debug .yii-debug-brand-icon svg{width:100%;height:100%}.yii-debug .yii-debug-brand-chip-php .yii-debug-brand-icon{width:32px}.yii-debug .yii-debug-brand-chip-php .yii-debug-brand-icon svg{fill:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-brand-label{color:var(--yii-debug-panel-muted);letter-spacing:.06em;text-transform:uppercase;font-weight:600}.yii-debug .yii-debug-brand-value{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-brand-chip-mem{margin-left:auto}.yii-debug .yii-debug-brand-chip-config{border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);text-decoration:none;transition:transform .14s,border-color .14s,color .14s,background-color .14s}.yii-debug .yii-debug-brand-chip-config .yii-debug-brand-icon{justify-content:center;align-items:center;width:14px;height:14px;transition:transform .24s;display:inline-flex}.yii-debug .yii-debug-brand-chip-config .yii-debug-brand-icon svg{width:100%;height:100%}.yii-debug .yii-debug-brand-chip-config:hover,.yii-debug .yii-debug-brand-chip-config:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);color:var(--yii-debug-panel-primary-strong);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-brand-chip-config:hover .yii-debug-brand-icon,.yii-debug .yii-debug-brand-chip-config:focus-visible .yii-debug-brand-icon{transform:rotate(45deg)}.yii-debug .yii-debug-brand-chip-config.is-disabled{opacity:.5;cursor:default;pointer-events:none}.yii-debug .yii-debug-brand-chip-config{margin-left:auto}.yii-debug .yii-debug-brand-bar:has(.yii-debug-brand-chip-mem) .yii-debug-brand-chip-config{margin-left:0}.yii-debug .yii-debug-brand-chip-theme{border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);cursor:pointer;padding:6px 10px;transition:transform .14s,border-color .14s,color .14s,background-color .14s}.yii-debug .yii-debug-brand-chip-theme:hover,.yii-debug .yii-debug-brand-chip-theme:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);color:var(--yii-debug-panel-primary-strong);transform:translateY(-1px)}.yii-debug .yii-debug-brand-chip-theme .yii-debug-brand-icon{justify-content:center;align-items:center;width:16px;height:16px;transition:transform .24s;display:inline-flex}.yii-debug .yii-debug-brand-chip-theme .yii-debug-brand-icon svg{width:100%;height:100%}.yii-debug .yii-debug-brand-chip-theme:hover .yii-debug-brand-icon{transform:rotate(20deg)}.yii-debug .yii-debug-snapshot-line{min-width:0;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);align-items:baseline;gap:6px;display:flex}.yii-debug .yii-debug-snapshot-method{color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-primary-strong)) 80%, var(--yii-debug-panel-text));flex:none;font-weight:700}.yii-debug .yii-debug-snapshot-url{min-width:0;color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;overflow:hidden}.yii-debug .yii-debug-snapshot-meta{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);align-items:center;gap:6px;display:flex}.yii-debug .yii-debug-snapshot-status{border-radius:var(--yii-debug-radius-pill);padding:1px 6px;font-weight:700;display:inline-block}.yii-debug .yii-debug-snapshot-tag{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);padding:0 6px}.yii-debug .yii-debug-request-overview-status-value{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-lg);letter-spacing:-.03em;padding:3px 9px;line-height:1.2}.yii-debug .yii-debug-panel-heading-eyebrow{color:var(--yii-debug-panel-muted);letter-spacing:.09em;text-transform:uppercase;margin-bottom:5px;font-size:.6875rem;font-weight:700;line-height:1.2;display:block}.yii-debug .yii-debug-request-overview-flag,.yii-debug .yii-debug-panel-heading-kind{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-pill);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.07em;text-transform:uppercase;padding:2px 8px;font-size:.625rem;font-weight:700;line-height:1.4}.yii-debug .yii-debug-panel-heading{justify-content:space-between;align-items:flex-end;gap:var(--yii-debug-space-3);margin:var(--yii-debug-space-5) 0 var(--yii-debug-space-3);padding-bottom:var(--yii-debug-space-2);border-bottom:var(--yii-debug-border);display:flex}.yii-debug .yii-debug-panel-heading-copy{min-width:0}.yii-debug .yii-debug-panel-heading-copy h2{margin:0}.yii-debug .yii-debug-panel-heading-kind{flex:none;margin-bottom:2px}.yii-debug pre.yii-debug-panel-payload{min-height:180px;padding:var(--yii-debug-space-4);border:var(--yii-debug-border);background:linear-gradient(90deg, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%), transparent 42%), var(--yii-debug-panel-code-bg);margin-bottom:0;line-height:1.55}@media (max-width:640px){.yii-debug .yii-debug-request-overview-header{gap:var(--yii-debug-space-3);grid-template-columns:minmax(0,1fr)}.yii-debug .yii-debug-request-overview-status{align-items:center;gap:var(--yii-debug-space-2);text-align:left;display:flex}.yii-debug .yii-debug-request-overview-metrics{grid-template-columns:1fr}.yii-debug .yii-debug-request-overview-metric+.yii-debug-request-overview-metric{border-block-start:var(--yii-debug-border);border-inline-start:0}.yii-debug .yii-debug-request-overview-meta-item{max-width:100%}.yii-debug .yii-debug-panel-heading{align-items:flex-start}}.yii-debug .yii-debug-section-header{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);margin:var(--yii-debug-space-4) 0 var(--yii-debug-space-2);display:flex}.yii-debug .yii-debug-section-header h2,.yii-debug .yii-debug-section-header h3{margin:0}.yii-debug .yii-debug-filter-input{width:240px;max-width:50%;padding:4px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font:inherit;flex:none}.yii-debug .yii-debug-filter-input::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-filter-input:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-stack>*+*{margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-card{padding:var(--yii-debug-panel-padding);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-md)}.yii-debug .yii-debug-nav{padding:var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);margin:0}.yii-debug .yii-debug-nav ul{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-nav-group{margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-nav-group>.yii-debug-nav{box-shadow:none;background:0 0;border:0;border-radius:0;padding:0}.yii-debug .yii-debug-nav-link{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-2);border-radius:var(--yii-debug-radius-md);color:var(--yii-debug-panel-text);padding:8px 12px;font-weight:600;text-decoration:none;transition:background .12s,color .12s;display:flex}.yii-debug .yii-debug-nav-link:after{content:"›";color:var(--yii-debug-panel-muted);font-size:1.1em;line-height:1}.yii-debug .yii-debug-nav-link:hover,.yii-debug .yii-debug-nav-link:focus{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-nav-link[aria-current=page]{background:var(--yii-debug-primary-bg);color:var(--yii-debug-on-primary)}:is(.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-nav-link[aria-current=page]):after{color:inherit}.yii-debug .yii-debug-btn{justify-content:center;align-items:center;gap:var(--yii-debug-space-1);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);min-height:32px;color:var(--yii-debug-panel-text);font-family:inherit;font-size:var(--yii-debug-fs-sm);letter-spacing:0;text-transform:none;cursor:pointer;padding:6px 14px;font-weight:600;line-height:1;text-decoration:none;transition:border-color .12s,background .12s,color .12s,transform .12s,box-shadow .12s;display:inline-flex}.yii-debug .yii-debug-btn:hover,.yii-debug .yii-debug-btn:focus{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 30%);background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-btn:active{transform:translateY(0)}.yii-debug .yii-debug-btn[disabled],.yii-debug .yii-debug-btn.is-disabled{opacity:.55;pointer-events:none;transform:none}.yii-debug .yii-debug-btn-primary{background:var(--yii-debug-primary-bg);color:var(--yii-debug-on-primary);border-color:#0000}.yii-debug .yii-debug-btn-primary:is(:hover,:focus){background:var(--yii-debug-panel-primary-strong);color:var(--yii-debug-on-primary)}.yii-debug .yii-debug-btn-ghost{border-color:var(--yii-debug-panel-border);background:0 0}.yii-debug .yii-debug-btn-sm{min-height:28px;font-size:var(--yii-debug-fs-xs);padding:4px 10px}.yii-debug .yii-debug-badge{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-xs);letter-spacing:.01em;align-items:center;padding:2px 10px;font-weight:600;line-height:1.4;display:inline-flex}.yii-debug .yii-debug-badge-success{background:var(--yii-debug-success);color:var(--yii-debug-on-success)}.yii-debug .yii-debug-badge-info{background:var(--yii-debug-info);color:var(--yii-debug-on-info)}.yii-debug .yii-debug-badge-warning{background:var(--yii-debug-warning);color:var(--yii-debug-on-warning)}.yii-debug .yii-debug-badge-danger{background:var(--yii-debug-danger);color:var(--yii-debug-on-danger)}.yii-debug .yii-debug-badge-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-verb-get{--yii-debug-hue:var(--yii-debug-verb-get)}.yii-debug .yii-debug-verb-post{--yii-debug-hue:var(--yii-debug-verb-post)}.yii-debug .yii-debug-verb-put{--yii-debug-hue:var(--yii-debug-verb-put)}.yii-debug .yii-debug-verb-delete{--yii-debug-hue:var(--yii-debug-verb-delete)}.yii-debug .yii-debug-verb-other{--yii-debug-hue:var(--yii-debug-verb-other)}.yii-debug .yii-debug-status-2xx{--yii-debug-hue:var(--yii-debug-status-2xx)}.yii-debug .yii-debug-status-3xx{--yii-debug-hue:var(--yii-debug-status-3xx)}.yii-debug .yii-debug-status-4xx{--yii-debug-hue:var(--yii-debug-status-4xx)}.yii-debug .yii-debug-status-5xx{--yii-debug-hue:var(--yii-debug-status-5xx)}.yii-debug .yii-debug-status-none{--yii-debug-hue:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-level-error{--yii-debug-hue:var(--yii-debug-level-error)}.yii-debug .yii-debug-level-warning{--yii-debug-hue:var(--yii-debug-level-warning)}.yii-debug .yii-debug-level-info{--yii-debug-hue:var(--yii-debug-level-info)}.yii-debug .yii-debug-level-trace{--yii-debug-hue:var(--yii-debug-level-trace)}.yii-debug .yii-debug-level-profile{--yii-debug-hue:var(--yii-debug-level-profile)}.yii-debug .yii-debug-level-other{--yii-debug-hue:var(--yii-debug-level-other)}.yii-debug .yii-debug-request-hero-method,.yii-debug .yii-debug-snapshot-status,.yii-debug .yii-debug-hero-status>.yii-debug-badge,.yii-debug .yii-debug-level-chip,.yii-debug .yii-debug-db-type,.yii-debug .yii-debug-dump-type,.yii-debug .yii-debug-badge:is(.yii-debug-status-2xx,.yii-debug-status-3xx,.yii-debug-status-4xx,.yii-debug-status-5xx,.yii-debug-status-none){border:1px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 65%);background:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 90%);color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 80%, var(--yii-debug-panel-text))}.yii-debug .yii-debug-method{color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 80%, var(--yii-debug-panel-text));font-family:var(--yii-debug-font-mono);letter-spacing:.02em;font-weight:700}.yii-debug .yii-debug-level-chip{border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;padding:1px 8px;font-size:.7rem;font-weight:700;display:inline-block}.yii-debug .yii-debug-callout{align-items:flex-start;gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-left:4px solid var(--yii-debug-panel-border-strong);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);display:flex}.yii-debug .yii-debug-callout-info{border-left-color:var(--yii-debug-info)}.yii-debug .yii-debug-callout-success{border-left-color:var(--yii-debug-success)}.yii-debug .yii-debug-callout-warning{border-left-color:var(--yii-debug-warning)}.yii-debug .yii-debug-callout-danger{border-left-color:var(--yii-debug-danger)}.yii-debug .yii-debug-table-wrap{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);overflow-x:auto}.yii-debug .yii-debug-table{border-collapse:separate;border-spacing:0;width:100%;min-width:640px;color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);background:0 0;margin:0}.yii-debug .yii-debug-table thead th,.yii-debug .yii-debug-table thead td{border-bottom:var(--yii-debug-border);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 20%);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);letter-spacing:.03em;text-align:left;text-transform:uppercase;vertical-align:middle;padding:10px 12px;font-weight:700}.yii-debug .yii-debug-table thead th a{color:var(--yii-debug-panel-link);font-weight:700;text-decoration:none}.yii-debug .yii-debug-table thead th a:hover,.yii-debug .yii-debug-table thead th a:focus{color:var(--yii-debug-panel-link-hover);text-decoration:none}.yii-debug .yii-debug-table tbody td,.yii-debug .yii-debug-table tbody th{padding:var(--yii-debug-row-padding-block) 12px;border-top:1px solid var(--yii-debug-panel-border);vertical-align:top;overflow-wrap:anywhere}.yii-debug .yii-debug-table tbody th{white-space:nowrap}.yii-debug .yii-debug-table tbody tr:first-child td,.yii-debug .yii-debug-table tbody tr:first-child th{border-top:0}.yii-debug .yii-debug-table tbody tr:nth-child(2n) td,.yii-debug .yii-debug-table tbody tr:nth-child(2n) th{background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 50%)}.yii-debug .yii-debug-table tbody tr:hover td,.yii-debug .yii-debug-table tbody tr:hover th{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-table tfoot td{border-top:var(--yii-debug-border);color:var(--yii-debug-panel-muted);padding:10px 12px}.yii-debug .yii-debug-row-success td,.yii-debug .yii-debug-row-success th{background:color-mix(in srgb, var(--yii-debug-success), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-row-info td,.yii-debug .yii-debug-row-info th{background:color-mix(in srgb, var(--yii-debug-info), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-row-warning td,.yii-debug .yii-debug-row-warning th{background:color-mix(in srgb, var(--yii-debug-warning), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-row-danger td,.yii-debug .yii-debug-row-danger th{background:color-mix(in srgb, var(--yii-debug-danger), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-grid{margin-bottom:var(--yii-debug-space-4)}.yii-debug .yii-debug-grid>.summary{margin:0 0 var(--yii-debug-space-2);padding:0 var(--yii-debug-space-1);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm)}.yii-debug .yii-debug-grid>.summary b{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-grid>.empty{padding:var(--yii-debug-space-5);color:var(--yii-debug-panel-muted);text-align:center;font-style:italic}.yii-debug .yii-debug-grid td.yii-debug-cell-nowrap,.yii-debug .yii-debug-grid td.yii-debug-cell-numeric,.yii-debug .yii-debug-grid td.yii-debug-cell-pill,.yii-debug .yii-debug-table td.yii-debug-cell-nowrap,.yii-debug .yii-debug-table td.yii-debug-cell-numeric,.yii-debug .yii-debug-table td.yii-debug-cell-pill{white-space:nowrap}.yii-debug .yii-debug-grid td.yii-debug-cell-fqcn{overflow-wrap:normal}.yii-debug .yii-debug-disclosure{margin-bottom:var(--yii-debug-space-5);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);overflow:hidden}.yii-debug .yii-debug-disclosure[open]>.yii-debug-disclosure-summary{border-bottom:var(--yii-debug-border)}.yii-debug .yii-debug-disclosure-summary{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);padding:10px var(--yii-debug-space-4);cursor:pointer;list-style:none;transition:background-color .12s;display:flex}.yii-debug .yii-debug-disclosure-summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-disclosure-summary:hover,.yii-debug .yii-debug-disclosure-summary:focus-visible{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-disclosure-title,.yii-debug .yii-debug-request-section-title,.yii-debug .yii-debug-diagnostic-heading-copy h2{color:var(--yii-debug-panel-primary-strong);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.12em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-disclosure-hint{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;transition:color .12s}.yii-debug .yii-debug-disclosure-hint [data-yii-debug-hint=expanded]{display:none}.yii-debug .yii-debug-disclosure-summary:hover .yii-debug-disclosure-hint,.yii-debug .yii-debug-disclosure-summary:focus-visible .yii-debug-disclosure-hint{color:var(--yii-debug-panel-link)}.yii-debug details[open]>summary .yii-debug-disclosure-hint [data-yii-debug-hint=collapsed]{display:none}.yii-debug details[open]>summary .yii-debug-disclosure-hint [data-yii-debug-hint=expanded]{display:inline}.yii-debug .yii-debug-disclosure-body{padding:var(--yii-debug-space-4)}.yii-debug .yii-debug-disclosure-body>pre{overflow-wrap:anywhere;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);white-space:pre-wrap;margin:0;line-height:1.6}.yii-debug .yii-debug-cell-more-body{max-height:156px;position:relative;overflow:hidden}.yii-debug .yii-debug-cell-more-body:has(.yii-debug-table){max-height:420px}.yii-debug .yii-debug-cell-more-body:after{content:"";background:linear-gradient(to bottom, transparent, var(--yii-debug-panel-surface));pointer-events:none;height:32px;position:absolute;inset:auto 0 0}.yii-debug .yii-debug-cell-more.is-open .yii-debug-cell-more-body{max-height:none}.yii-debug .yii-debug-cell-more.is-open .yii-debug-cell-more-body:after{content:none}.yii-debug .yii-debug-cell-more-toggle{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);color:var(--yii-debug-panel-link);font-family:inherit;font-size:var(--yii-debug-fs-xs);cursor:pointer;background:0 0;align-items:center;margin-top:6px;padding:2px 10px;font-weight:600;display:inline-flex}.yii-debug .yii-debug-cell-more-toggle:before{content:"";width:1.25em;height:1.25em;margin-right:var(--yii-debug-space-1);background:linear-gradient(currentcolor, currentcolor) center / 8px 2px no-repeat, linear-gradient(currentcolor, currentcolor) center / 2px 8px no-repeat, var(--yii-debug-panel-bg-accent);border-radius:50%;display:inline-block}.yii-debug .yii-debug-cell-more.is-open .yii-debug-cell-more-toggle:before{background:linear-gradient(currentcolor, currentcolor) center / 8px 2px no-repeat, var(--yii-debug-panel-bg-accent)}.yii-debug .yii-debug-cell-more-toggle:hover,.yii-debug .yii-debug-cell-more-toggle:focus{background:var(--yii-debug-panel-bg-accent);border-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-grid td.yii-debug-cell-mono{font-family:var(--yii-debug-font-mono)}.yii-debug td.yii-debug-cell-payload{overflow-wrap:anywhere;width:100%}.yii-debug .yii-debug-grid td.yii-debug-cell-numeric{font-variant-numeric:tabular-nums;text-align:right}.yii-debug a.asc:after,.yii-debug a.desc:after{content:"↑";opacity:.78;margin-left:4px;font-size:.85em}.yii-debug a.desc:after{content:"↓"}.yii-debug .yii-debug-pager{gap:var(--yii-debug-space-1);margin:var(--yii-debug-space-3) 0 0;flex-wrap:wrap;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-pager-item{display:inline-flex}.yii-debug .yii-debug-pager-link,.yii-debug .yii-debug-pager>li>:is(a,span){border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);min-width:40px;min-height:40px;color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-sm);justify-content:center;align-items:center;padding:0 10px;font-weight:600;text-decoration:none;transition:border-color .12s,background .12s,color .12s;display:inline-flex}:is(.yii-debug .yii-debug-pager-link,.yii-debug .yii-debug-pager>li>:is(a,span)):hover,:is(.yii-debug .yii-debug-pager-link,.yii-debug .yii-debug-pager>li>:is(a,span)):focus{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 30%);background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover);text-decoration:none}.yii-debug .yii-debug-pager-item.is-active .yii-debug-pager-link{background:var(--yii-debug-primary-bg);color:var(--yii-debug-on-primary);cursor:default;border-color:#0000}.yii-debug .yii-debug-pager-item.is-disabled .yii-debug-pager-link{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);cursor:not-allowed;pointer-events:none}.yii-debug .yii-debug-field{margin-bottom:var(--yii-debug-space-3);flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-label{color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);font-weight:600}.yii-debug .yii-debug-input,.yii-debug .yii-debug-select{border:1px solid var(--yii-debug-panel-border-strong);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);width:100%;min-height:32px;color:var(--yii-debug-panel-text);font-family:inherit;font-size:var(--yii-debug-fs-sm);padding:6px 10px;transition:border-color .12s,box-shadow .12s}:is(.yii-debug .yii-debug-input,.yii-debug .yii-debug-select):hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), var(--yii-debug-panel-border-strong) 60%)}:is(.yii-debug .yii-debug-input,.yii-debug .yii-debug-select):focus{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 82%)}:is(.yii-debug .yii-debug-input,.yii-debug .yii-debug-select)::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-grid .filters td{border-bottom:var(--yii-debug-border);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 30%);padding:6px 12px}.yii-debug .yii-debug-grid .filters input,.yii-debug .yii-debug-grid .filters select,.yii-debug .yii-debug-grid .filters textarea{border:1px solid var(--yii-debug-panel-border-strong);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);width:100%;min-width:0;min-height:28px;color:var(--yii-debug-panel-text);font:inherit;font-size:var(--yii-debug-fs-xs);padding:4px 8px}:is(.yii-debug .yii-debug-grid .filters input,.yii-debug .yii-debug-grid .filters select,.yii-debug .yii-debug-grid .filters textarea):focus{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 84%)}.yii-debug .yii-debug-tabs{gap:var(--yii-debug-space-1);margin:0 0 var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);flex-wrap:wrap;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-tab{display:inline-flex}.yii-debug .yii-debug-tab-link{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm);border-bottom:2px solid #0000;align-items:center;padding:8px 14px;font-weight:600;text-decoration:none;transition:color .12s,border-color .12s;display:inline-flex}.yii-debug .yii-debug-tab-link:hover,.yii-debug .yii-debug-tab-link:focus{color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-tab.is-active .yii-debug-tab-link,.yii-debug .yii-debug-tab-link.is-active{border-bottom-color:var(--yii-debug-panel-primary);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-tab-panel{padding:var(--yii-debug-space-3) 0 0;display:none}.yii-debug .yii-debug-tab-panel.is-active{display:block}.yii-debug .yii-debug-since-previous{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.yii-debug .yii-debug-since-previous .yii-debug-since-previous-btn{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);min-width:24px;height:24px;color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-xs);justify-content:center;align-items:center;padding:0 6px;font-weight:700;text-decoration:none;display:inline-flex}.yii-debug .yii-debug-table-mono{min-width:0}.yii-debug .yii-debug-table-mono thead th{z-index:1;background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 10%);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.12em;padding:8px 16px;position:sticky;top:0}.yii-debug .yii-debug-table-mono tbody tr{transition:background-color .14s}.yii-debug .yii-debug-table-mono tbody tr:hover td,.yii-debug .yii-debug-table-mono tbody tr:hover th{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-table-mono tbody tr:hover th{box-shadow:inset 3px 0 0 var(--yii-debug-panel-primary);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-table-mono tbody th,.yii-debug .yii-debug-table-mono tbody td{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);padding:12px 16px;line-height:1.55}.yii-debug .yii-debug-table-mono tbody th{width:1%;min-width:120px;max-width:220px;color:var(--yii-debug-panel-muted);letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;font-weight:500;transition:color .14s,box-shadow .14s;overflow:hidden}.yii-debug .yii-debug-table-mono tbody td{color:var(--yii-debug-panel-text);word-break:normal;overflow-wrap:anywhere}.yii-debug .yii-debug-table-mono tbody tr+tr td,.yii-debug .yii-debug-table-mono tbody tr+tr th{border-top:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 55%, transparent)}.yii-debug .yii-debug-table-mono tbody tr:nth-child(2n) td,.yii-debug .yii-debug-table-mono tbody tr:nth-child(2n) th{background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 70%)}.yii-debug .yii-debug-table-overview tbody th{width:200px;min-width:160px;max-width:200px}.yii-debug .yii-debug-panel-group+.yii-debug-panel-group{margin-top:var(--yii-debug-space-6)}.yii-debug .yii-debug-table-wrap:has(>.yii-debug-table-mono){border-radius:var(--yii-debug-radius-md);box-shadow:var(--yii-debug-shadow-sm), inset 0 0 0 1px color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);overflow:clip}.yii-debug .yii-debug-table-mono{min-width:0}.yii-debug .yii-debug-table-mono tbody th{overflow-wrap:anywhere;white-space:normal}.yii-debug .yii-debug-table-userswitch{width:auto;min-width:100%}.yii-debug .yii-debug-table-userswitch thead th,.yii-debug .yii-debug-table-userswitch tbody td,.yii-debug .yii-debug-table-userswitch tbody th{overflow-wrap:normal;white-space:nowrap}.yii-debug .yii-debug-table-userswitch tbody tr.filters td input{width:100%;min-width:0}.yii-debug .yii-debug-col-userswitch-id{font-variant-numeric:tabular-nums;min-width:10ch}.yii-debug .yii-debug-col-userswitch-username{min-width:14ch}.yii-debug .yii-debug-col-userswitch-email{min-width:24ch}.yii-debug .yii-debug-col-userswitch-status{text-align:center;min-width:8ch}.yii-debug .yii-debug-col-userswitch-timestamp{font-variant-numeric:tabular-nums;min-width:18ch}.yii-debug .yii-debug-table-pointer tbody tr{cursor:pointer;transition:background-color .12s}.yii-debug .yii-debug-table-pointer tbody tr:hover{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 86%)}.yii-debug .yii-debug-sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.yii-debug .yii-debug-table-empty{padding:var(--yii-debug-space-4);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;justify-content:center;align-items:center;gap:10px;margin:0;display:flex}.yii-debug .yii-debug-table-empty:before{content:"";opacity:.5;border:1.5px solid;border-radius:50%;width:8px;height:8px}.yii-debug .yii-debug-grid-summary{align-items:center;gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);letter-spacing:.06em;text-transform:uppercase;flex-wrap:wrap;display:flex}.yii-debug .yii-debug-grid-summary strong{color:var(--yii-debug-panel-primary-strong);letter-spacing:0;text-transform:none;margin-right:.35em;font-weight:700}.yii-debug .yii-debug-grid-summary-sep{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-grid-summary-stat-warn{--yii-debug-hue:var(--yii-debug-level-warning)}.yii-debug .yii-debug-grid-summary-stat-danger{--yii-debug-hue:var(--yii-debug-level-error)}.yii-debug .yii-debug-grid-summary-stat-info{--yii-debug-hue:var(--yii-debug-level-info)}.yii-debug .yii-debug-grid-summary-stat-trace{--yii-debug-hue:var(--yii-debug-level-trace)}.yii-debug .yii-debug-grid-summary-stat-warn strong{color:var(--yii-debug-warning)}.yii-debug .yii-debug-grid-summary-stat-danger strong{color:var(--yii-debug-danger)}.yii-debug .yii-debug-grid-summary-stat-2xx{--yii-debug-hue:var(--yii-debug-status-2xx)}.yii-debug .yii-debug-grid-summary-stat-3xx{--yii-debug-hue:var(--yii-debug-status-3xx)}.yii-debug .yii-debug-grid-summary-stat-4xx{--yii-debug-hue:var(--yii-debug-status-4xx)}.yii-debug .yii-debug-grid-summary-stat-5xx{--yii-debug-hue:var(--yii-debug-status-5xx)}.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx){border:1px solid color-mix(in srgb, var(--yii-debug-hue), transparent 65%);border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-hue), transparent 90%);color:color-mix(in srgb, var(--yii-debug-hue) 80%, var(--yii-debug-panel-text));align-items:center;gap:6px;padding:2px 10px;text-decoration:none;transition:transform .14s,background-color .14s;display:inline-flex}.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx) strong{color:inherit;margin-right:0}.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx):hover,.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx):focus-visible{background:color-mix(in srgb, var(--yii-debug-hue), transparent 80%);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-grid-footer{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);margin-top:var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-grid-count{margin:0}.yii-debug .yii-debug-grid-pagesize{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.yii-debug .yii-debug-grid-pagesize-label{color:var(--yii-debug-panel-muted);letter-spacing:.06em;text-transform:uppercase;font-weight:600}.yii-debug .yii-debug-grid-pagesize-select{padding:3px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);letter-spacing:0;text-transform:none;cursor:pointer}.yii-debug .yii-debug-grid-pagesize-select:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-db-type{border-radius:var(--yii-debug-radius-pill);min-width:5em;font-family:var(--yii-debug-font-mono);letter-spacing:.04em;text-align:center;text-transform:uppercase;white-space:nowrap;padding:2px 8px;font-size:.7rem;font-weight:700;display:inline-block}.yii-debug .yii-debug-db-sql{font-family:var(--yii-debug-font-mono);overflow-wrap:anywhere}.yii-debug .yii-debug-grid-db .yii-debug-table th:not(:last-child),.yii-debug .yii-debug-grid-db .yii-debug-table td:not(:last-child){white-space:nowrap}.yii-debug .yii-debug-grid-db .yii-debug-table th:last-child,.yii-debug .yii-debug-grid-db .yii-debug-table td:last-child{width:100%}.yii-debug .yii-debug-grid-db .filters select{min-width:max-content}.yii-debug .yii-debug-grid-db .filters select:focus{box-shadow:none}.yii-debug .yii-debug-grid-db .filters select:focus-visible{outline-offset:1px;outline-width:2px}.yii-debug .yii-debug-sql-kw{color:var(--yii-debug-sql-kw);font-weight:700}.yii-debug .yii-debug-sql-str{color:var(--yii-debug-sql-str)}.yii-debug .yii-debug-sql-num{color:var(--yii-debug-sql-num)}.yii-debug .yii-debug-sql-comment{color:var(--yii-debug-sql-comment);font-style:italic}.yii-debug .yii-debug-sql-param{color:var(--yii-debug-sql-param);font-weight:600}.yii-debug .yii-debug-db-explain,.yii-debug .yii-debug-db-trace{margin-top:var(--yii-debug-space-2)}.yii-debug .yii-debug-db-explain-toggle,.yii-debug .yii-debug-db-trace-toggle{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-xs);cursor:pointer;background:0 0;align-items:center;gap:6px;padding:2px 10px 2px 6px;font-weight:600;text-decoration:none;transition:background-color .12s,border-color .12s;display:inline-flex}.yii-debug .yii-debug-db-explain-toggle:hover,.yii-debug .yii-debug-db-explain-toggle:focus,.yii-debug .yii-debug-db-trace-toggle:hover,.yii-debug .yii-debug-db-trace-toggle:focus-visible{background:var(--yii-debug-panel-bg-accent);border-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-db-trace-toggle{list-style:none}.yii-debug .yii-debug-db-trace-toggle::-webkit-details-marker{display:none}.yii-debug .yii-debug-db-explain-chevron,.yii-debug .yii-debug-db-trace-chevron{width:10px;font-size:14px;line-height:1;transition:transform .16s;display:inline-block}.yii-debug .yii-debug-db-explain.is-open .yii-debug-db-explain-chevron,.yii-debug .yii-debug-db-trace[open]>.yii-debug-db-trace-toggle .yii-debug-db-trace-chevron{transform:rotate(90deg)}.yii-debug .yii-debug-db-explain.is-loading .yii-debug-db-explain-toggle{opacity:.55;pointer-events:none}.yii-debug .yii-debug-db-explain-text{margin-top:var(--yii-debug-space-2);display:none}.yii-debug .yii-debug-db-explain.is-open .yii-debug-db-explain-text{display:block}.yii-debug .yii-debug-db-explain-text.is-error{padding:var(--yii-debug-space-2) var(--yii-debug-space-3);border-left:3px solid var(--yii-debug-danger);border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-danger), transparent 92%);color:var(--yii-debug-danger);font-size:var(--yii-debug-fs-sm);font-weight:600;display:block}.yii-debug .yii-debug-db-explain-all{margin-top:var(--yii-debug-space-3);justify-content:flex-end;display:flex}.yii-debug .yii-debug-db-explain-all-toggle{white-space:nowrap;justify-content:center;min-width:104px}.yii-debug .yii-debug-explain{margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-explain-title{margin-bottom:var(--yii-debug-space-2);font-size:var(--yii-debug-fs-lg);font-weight:700}.yii-debug .yii-debug-explain-query{margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3);background:var(--yii-debug-panel-code-bg);border-radius:var(--yii-debug-radius-md);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);white-space:pre-wrap;overflow-wrap:break-word}.yii-debug .yii-debug-explain-empty{color:var(--yii-debug-panel-muted);font-style:italic}.yii-debug .yii-debug-empty-state{margin:var(--yii-debug-space-4) 0 0;padding:var(--yii-debug-space-5) var(--yii-debug-space-5);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 80%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 30%)}.yii-debug .yii-debug-empty-state h2{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-lg);font-weight:700}.yii-debug .yii-debug-empty-state p{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);line-height:1.5}.yii-debug .yii-debug-empty-state p:last-child{margin-bottom:0}.yii-debug .yii-debug-empty-state code{border-radius:var(--yii-debug-radius-sm,4px);background:var(--yii-debug-panel-code-bg);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);padding:.1em .4em}.yii-debug .yii-debug-empty-state-code{margin:0 0 var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-code-bg);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);white-space:pre-wrap;overflow-wrap:break-word;line-height:1.5}.yii-debug .yii-debug-queue-job-page{gap:var(--yii-debug-space-3);flex-direction:column;display:flex}.yii-debug .yii-debug-queue-job-head{align-items:center;gap:var(--yii-debug-space-2);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-queue-card{gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);flex-direction:column;display:flex}.yii-debug .yii-debug-queue-card-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:flex-start;display:grid}.yii-debug .yii-debug-queue-avatar{--queue-hue:210;border-radius:var(--yii-debug-radius-md);background:linear-gradient(135deg, hsl(var(--queue-hue) 72% 52%), hsl(calc(var(--queue-hue) + 28) 65% 40%));width:40px;height:40px;box-shadow:0 2px 10px hsl(var(--queue-hue) 60% 40% / 32%), inset 0 1px 0 #ffffff38;color:#fff;font-family:var(--yii-debug-font-mono);letter-spacing:-.01em;flex:none;justify-content:center;align-items:center;font-size:16px;font-weight:800;display:inline-flex}.yii-debug .yii-debug-queue-headline{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-queue-class{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-lg);letter-spacing:-.01em;word-break:break-all;margin:0;font-weight:700;line-height:1.25}.yii-debug .yii-debug-queue-namespace{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em}.yii-debug .yii-debug-queue-meta-pills{flex-direction:column;flex:none;align-items:flex-end;gap:6px;display:flex}.yii-debug .yii-debug-queue-status{border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;align-items:center;padding:3px 10px;font-weight:600;line-height:1;display:inline-flex}.yii-debug .yii-debug-queue-status-queued{color:var(--yii-debug-info);background:color-mix(in srgb, var(--yii-debug-info), transparent 86%)}.yii-debug .yii-debug-queue-status-done{color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 86%)}.yii-debug .yii-debug-queue-status-failed{color:var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 86%)}.yii-debug .yii-debug-queue-driver{border-radius:var(--yii-debug-radius-pill);border:var(--yii-debug-border);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.05em;text-transform:uppercase;cursor:help;align-items:center;padding:3px 10px;font-weight:600;line-height:1;display:inline-flex}.yii-debug .yii-debug-queue-driver-is-sync{color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 92%);border-color:color-mix(in srgb, var(--yii-debug-success), transparent 70%)}.yii-debug .yii-debug-queue-driver-is-async{color:var(--yii-debug-warning);background:color-mix(in srgb, var(--yii-debug-warning), transparent 92%);border-color:color-mix(in srgb, var(--yii-debug-warning), transparent 70%)}.yii-debug .yii-debug-queue-hint{margin:var(--yii-debug-space-3) 0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-radius:var(--yii-debug-radius-md);border-left:3px solid var(--yii-debug-warning);background:color-mix(in srgb, var(--yii-debug-warning), transparent 94%);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);line-height:1.5}.yii-debug .yii-debug-queue-tree{padding:var(--yii-debug-space-3);border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 96%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);flex-direction:column;gap:4px;line-height:1.6;display:flex}.yii-debug .yii-debug-queue-tree-row{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.yii-debug .yii-debug-queue-tree-key{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-queue-tree-key:after{content:":";color:var(--yii-debug-panel-muted);margin-left:1px;font-weight:400}.yii-debug .yii-debug-queue-tree-type{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);text-transform:uppercase;letter-spacing:.05em;background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 92%);border-radius:3px;padding:1px 6px}.yii-debug .yii-debug-queue-tree-class{color:var(--yii-debug-info);cursor:help;font-weight:600}.yii-debug .yii-debug-queue-tree-meta{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-queue-tree-truncated{color:var(--yii-debug-warning);font-size:var(--yii-debug-fs-xs);text-transform:uppercase;letter-spacing:.05em;background:color-mix(in srgb, var(--yii-debug-warning), transparent 86%);border-radius:3px;padding:1px 6px}.yii-debug .yii-debug-queue-tree-value{word-break:break-all}.yii-debug .yii-debug-queue-tree-value-string{color:var(--yii-debug-success)}.yii-debug .yii-debug-queue-tree-value-number{color:var(--yii-debug-info)}.yii-debug .yii-debug-queue-tree-value-bool{color:var(--yii-debug-warning);font-weight:600}.yii-debug .yii-debug-queue-tree-value-null{color:var(--yii-debug-panel-muted);font-style:italic}.yii-debug .yii-debug-queue-tree-collapse{flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-queue-tree-summary{cursor:pointer;list-style:revert;flex-wrap:wrap;align-items:baseline;gap:8px;padding:2px 0;display:inline-flex}.yii-debug .yii-debug-queue-tree-summary::-webkit-details-marker{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-queue-tree-children{margin-left:var(--yii-debug-space-4);padding-left:var(--yii-debug-space-3);border-left:1px dashed color-mix(in srgb, var(--yii-debug-panel-text), transparent 80%);flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-queue-time{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em}.yii-debug .yii-debug-queue-payload{margin:0}.yii-debug .yii-debug-queue-error{padding:var(--yii-debug-space-3);border-radius:var(--yii-debug-radius-sm);border-left:3px solid var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 92%);color:var(--yii-debug-danger);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);line-height:1.5}.yii-debug .yii-debug-queue-meta{gap:var(--yii-debug-space-2);padding-top:var(--yii-debug-space-2);border-top:var(--yii-debug-border);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-queue-meta-item{border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 94%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);align-items:center;gap:6px;padding:2px 10px;line-height:1.4;display:inline-flex}.yii-debug .yii-debug-queue-meta-label{color:var(--yii-debug-panel-muted);text-transform:uppercase;letter-spacing:.05em;font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-queue-meta-value{color:var(--yii-debug-panel-text);font-weight:600}.yii-debug .yii-debug-dump{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);overflow:hidden}.yii-debug .yii-debug-dump-card-head{align-items:center;gap:var(--yii-debug-space-2);padding:6px var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);color:var(--yii-debug-panel-muted);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-dump-index{color:var(--yii-debug-panel-primary-strong);font-weight:700}.yii-debug .yii-debug-dump-type{border-radius:var(--yii-debug-radius-pill);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;--yii-debug-hue:var(--yii-debug-panel-primary);padding:1px 8px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-dump-type[data-type=array]{--yii-debug-hue:var(--yii-debug-info)}.yii-debug .yii-debug-dump-type[data-type=string]{--yii-debug-hue:var(--yii-debug-success)}.yii-debug .yii-debug-dump-type[data-type=number]{--yii-debug-hue:var(--yii-debug-warning)}.yii-debug .yii-debug-dump-type[data-type=bool],.yii-debug .yii-debug-dump-type[data-type=null]{--yii-debug-hue:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-dump-meta{align-items:center;gap:var(--yii-debug-space-2);margin-left:auto;display:inline-flex}.yii-debug .yii-debug-dump-time{color:var(--yii-debug-panel-muted);font-variant-numeric:tabular-nums}.yii-debug .yii-debug-dump-trace{color:var(--yii-debug-panel-link)}.yii-debug .yii-debug-php-dump{text-align:start;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);line-height:1.5;overflow-x:auto}.yii-debug .yii-debug-php-dump pre{background:0 0;margin:0}.yii-debug .yii-debug-php-dump code{white-space:pre;background:0 0;padding:0;display:block}.yii-debug .yii-debug-dump-body{padding:var(--yii-debug-space-3);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);line-height:1.5;overflow-x:auto}.yii-debug .yii-debug-dump-body code{white-space:pre;background:0 0;padding:0;display:block}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #DD0000"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#DD0000"]{color:#e5c07b!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #0000BB"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#0000BB"]{color:#93c5fd!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #007700"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#007700"]{color:#86efac!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #FF8000"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#FF8000"]{color:#fdba74!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #000000"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#000000"]{color:var(--yii-debug-panel-text)!important}.yii-debug .yii-debug-history-card{gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-3);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-md);background:radial-gradient(circle at top right, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 86%), transparent 60%), color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%);flex-direction:column;display:flex;position:relative}.yii-debug .yii-debug-nav-iconed .yii-debug-nav-link{align-items:center}.yii-debug .yii-debug-nav-iconed .yii-debug-nav-link .yii-debug-nav-link-label{margin-right:auto}.yii-debug .yii-debug-nav-link-icon{width:16px;height:16px;color:var(--yii-debug-panel-primary);flex:none;justify-content:center;align-items:center;margin-right:10px;transition:color .14s,transform .14s;display:inline-flex}.yii-debug .yii-debug-nav-link-icon svg{width:100%;height:100%}.yii-debug .yii-debug-nav-link.is-active .yii-debug-nav-link-icon{color:currentColor}.yii-debug .yii-debug-nav-link-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);letter-spacing:.005em;flex:1;font-weight:600;overflow:hidden}.yii-debug .yii-debug-nav-link:not(.is-active){color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-nav-link:not(.is-active) .yii-debug-nav-link-icon{color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 35%)}.yii-debug .yii-debug-nav-link:not(.is-active):after{color:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 40%)}.yii-debug .yii-debug-nav-link:not(.is-active):hover,.yii-debug .yii-debug-nav-link:not(.is-active):focus-visible{color:var(--yii-debug-panel-text);background:var(--yii-debug-panel-surface-hover)}:is(.yii-debug .yii-debug-nav-link:not(.is-active):hover,.yii-debug .yii-debug-nav-link:not(.is-active):focus-visible) .yii-debug-nav-link-icon{color:var(--yii-debug-panel-primary);transform:translate(1px)}:is(.yii-debug .yii-debug-nav-link:not(.is-active):hover,.yii-debug .yii-debug-nav-link:not(.is-active):focus-visible):after{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-tag-link{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:-.01em;color:var(--yii-debug-panel-primary-strong);white-space:nowrap;border-bottom:1px dotted color-mix(in srgb, var(--yii-debug-panel-primary), transparent 60%);font-weight:700;text-decoration:none;display:inline-block}.yii-debug .yii-debug-tag-link:hover,.yii-debug .yii-debug-tag-link:focus-visible{color:var(--yii-debug-panel-primary);border-bottom-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-url-cell{text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;max-width:clamp(180px,26vw,460px);display:inline-block;overflow:hidden}.yii-debug .yii-debug-table tbody tr.is-cursor{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 86%);box-shadow:inset 3px 0 0 var(--yii-debug-panel-primary)}.yii-debug .yii-debug-table tbody tr.is-cursor:hover{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 78%)}.yii-debug .yii-debug-active-filters{margin-bottom:var(--yii-debug-space-3);padding:8px var(--yii-debug-space-3);border:1px solid color-mix(in srgb, var(--yii-debug-info), transparent 60%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-info), transparent 92%);flex-wrap:wrap;align-items:center;gap:8px;display:flex}.yii-debug .yii-debug-active-filters-label{color:var(--yii-debug-info);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-active-filters-list{flex-wrap:wrap;gap:4px;display:inline-flex}.yii-debug .yii-debug-active-filter-pill{border:1px solid color-mix(in srgb, var(--yii-debug-info), transparent 50%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);align-items:center;gap:4px;padding:2px 6px 2px 8px;text-decoration:none;transition:background-color .12s,border-color .12s;display:inline-flex}.yii-debug .yii-debug-active-filter-pill:hover,.yii-debug .yii-debug-active-filter-pill:focus-visible{border-color:var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 88%);color:var(--yii-debug-danger);text-decoration:none}.yii-debug .yii-debug-active-filter-attr{color:var(--yii-debug-panel-muted);text-transform:lowercase}.yii-debug .yii-debug-active-filter-sep{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-active-filter-value{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-weight:700;overflow:hidden}.yii-debug .yii-debug-active-filter-x{color:var(--yii-debug-panel-muted);margin-left:2px;font-weight:700;line-height:1}.yii-debug .yii-debug-active-filter-pill:hover .yii-debug-active-filter-x,.yii-debug .yii-debug-active-filter-pill:focus-visible .yii-debug-active-filter-x{color:var(--yii-debug-danger)}.yii-debug .yii-debug-active-filters-clear{border:1px solid color-mix(in srgb, var(--yii-debug-danger), transparent 60%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-danger);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;margin-left:auto;padding:3px 10px;font-weight:700;text-decoration:none;transition:background-color .12s,border-color .12s,transform .12s}.yii-debug .yii-debug-active-filters-clear:hover,.yii-debug .yii-debug-active-filters-clear:focus-visible{border-color:var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 86%);color:var(--yii-debug-danger);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-col-id{white-space:nowrap;min-width:120px}.yii-debug .yii-debug-grid .filters input.yii-debug-col-id-input{box-sizing:border-box;width:104px}.yii-debug .yii-debug-grid-history .yii-debug-table{--yii-debug-history-query-width:0px;--yii-debug-history-mail-width:0px;--yii-debug-history-fixed-width:calc(988px + var(--yii-debug-history-query-width) + var(--yii-debug-history-mail-width));min-width:calc(var(--yii-debug-history-fixed-width) + 180px);table-layout:fixed}.yii-debug .yii-debug-grid-history .yii-debug-table:has(thead th.yii-debug-col-num:not(:first-child,.yii-debug-col-mail)){--yii-debug-history-query-width:66px}.yii-debug .yii-debug-grid-history .yii-debug-table:has(thead th.yii-debug-col-mail){--yii-debug-history-mail-width:56px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:first-child{width:36px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(2){width:276px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(3){width:80px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(4),.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(5){width:100px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-ip{width:112px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-num:not(:first-child,.yii-debug-col-mail){width:66px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-mail{width:56px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-last-child(4){width:128px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-status{width:72px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-last-child(2){width:84px}.yii-debug .yii-debug-grid-history .yii-debug-table tbody td,.yii-debug .yii-debug-grid-history .yii-debug-table tbody th{white-space:nowrap;padding:8px 10px}.yii-debug .yii-debug-grid-history .yii-debug-table tbody td.yii-debug-col-ip{white-space:normal;overflow-wrap:anywhere}.yii-debug .yii-debug-grid-history .yii-debug-table tbody:has(>tr:only-child>td[colspan]){caption-side:bottom;display:table-caption}.yii-debug .yii-debug-grid-history .yii-debug-table tbody:has(>tr:only-child>td[colspan]) td{display:block}.yii-debug .yii-debug-grid-history .yii-debug-table .yii-debug-tag-link,.yii-debug .yii-debug-grid-history .yii-debug-table .yii-debug-url-cell{text-overflow:ellipsis;max-width:100%;overflow:hidden}.yii-debug .yii-debug-grid-history .yii-debug-table .yii-debug-tag-link{vertical-align:middle;display:inline-block}@media (max-width:1600px){.yii-debug .yii-debug-grid-history .yii-debug-table{--yii-debug-history-fixed-width:calc(876px + var(--yii-debug-history-query-width))}.yii-debug .yii-debug-grid-history .yii-debug-col-ip,.yii-debug .yii-debug-grid-history .yii-debug-col-mail{display:none}}@media (max-width:767px){.yii-debug .yii-debug-grid-event .yii-debug-table thead th,.yii-debug .yii-debug-grid-event .yii-debug-table thead td,.yii-debug .yii-debug-grid-event .yii-debug-table tbody tr:not(.yii-debug-event-detail-row) td,.yii-debug .yii-debug-grid-event .yii-debug-table tbody th,.yii-debug .yii-debug-grid-event .yii-debug-table tfoot td{padding:8px 10px}.yii-debug .yii-debug-grid-event .yii-debug-table .filters td{padding:6px 10px}}.yii-debug th.yii-debug-col-num,.yii-debug td.yii-debug-col-num{text-align:center;white-space:nowrap;width:1%}.yii-debug td.yii-debug-col-num{font-variant-numeric:tabular-nums}.yii-debug td.yii-debug-col-num input,.yii-debug td.yii-debug-col-num select{text-align:center;width:100%;min-width:0}.yii-debug .yii-debug-explain-scroll{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);overflow-x:auto}.yii-debug .yii-debug-explain-table{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);white-space:nowrap;margin:0}.yii-debug .yii-debug-explain-table th,.yii-debug .yii-debug-explain-table td{padding:var(--yii-debug-space-2) var(--yii-debug-space-3)}.yii-debug ul.yii-debug-trace{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);white-space:normal;margin:2px 0 0;padding:0;list-style:none}.yii-debug .yii-debug-disclosure:has(>.yii-debug-disclosure-body>.yii-debug-log-context){margin:var(--yii-debug-space-2) 0 0;border-radius:var(--yii-debug-radius-md)}.yii-debug .yii-debug-disclosure:has(>.yii-debug-disclosure-body>.yii-debug-log-context)>.yii-debug-disclosure-summary{gap:0 var(--yii-debug-space-3);padding:var(--yii-debug-space-1) var(--yii-debug-space-3);flex-wrap:wrap}.yii-debug .yii-debug-disclosure:has(>.yii-debug-disclosure-body>.yii-debug-log-context)>.yii-debug-disclosure-body{padding:var(--yii-debug-space-2) var(--yii-debug-space-3)}.yii-debug .yii-debug-log-context{gap:var(--yii-debug-space-1) var(--yii-debug-space-3);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);grid-template-columns:minmax(75px,max-content) minmax(0,1fr);margin:0;display:grid}.yii-debug .yii-debug-log-context dt{color:var(--yii-debug-panel-muted);overflow-wrap:anywhere}.yii-debug .yii-debug-log-context dd{min-width:0;margin:0}.yii-debug .yii-debug-log-context code,.yii-debug .yii-debug-log-context pre{font-size:inherit;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.yii-debug .yii-debug-log-context pre{padding:var(--yii-debug-space-2);overflow:visible}@media not (min-width:768px){.yii-debug .yii-debug-log-context{grid-template-columns:minmax(0,1fr);row-gap:0}.yii-debug .yii-debug-log-context dd+dt{margin-top:var(--yii-debug-space-2)}}.yii-debug .yii-debug-muted{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-nowrap{white-space:nowrap}.yii-debug .yii-debug-not-set{color:var(--yii-debug-danger);font-style:italic}.yii-debug .yii-debug-gauge{vertical-align:middle;font-variant-numeric:tabular-nums;flex-direction:column;gap:3px;min-width:76px;display:inline-flex}.yii-debug .yii-debug-gauge-value{text-align:right}.yii-debug .yii-debug-gauge-bar{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-gauge-track);height:3px;display:block;overflow:hidden}.yii-debug .yii-debug-gauge-bar:after{content:"";width:var(--yii-debug-gauge,0%);border-radius:inherit;background:var(--yii-debug-gauge-fill);height:100%;display:block}.yii-debug .yii-debug-indent{color:var(--yii-debug-panel-muted);margin-inline-end:var(--yii-debug-space-1)}.yii-debug .yii-debug-section{margin-bottom:var(--yii-debug-space-6)}.yii-debug .yii-debug-section:last-child{margin-bottom:0}.yii-debug .yii-debug-section-title{align-items:center;gap:var(--yii-debug-space-2);margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.22em;text-transform:uppercase;font-size:.6875rem;font-weight:500;line-height:1;display:flex}.yii-debug .yii-debug-section-mark{color:var(--yii-debug-panel-primary);font-weight:700}.yii-debug .yii-debug-section-count{border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 85%);color:var(--yii-debug-panel-primary);align-items:center;margin-left:auto;padding:2px 8px;font-weight:700;display:inline-flex}.yii-debug h1.yii-debug-hero-title{margin:0 0 var(--yii-debug-space-5);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-display);letter-spacing:-.015em;text-transform:lowercase;font-size:2rem;font-weight:400;line-height:1}.yii-debug h1.yii-debug-hero-title:before{content:"// ";color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);letter-spacing:0;vertical-align:2px;margin-right:.2em;font-size:.75em;font-weight:700}.yii-debug .yii-debug-readout-card{gap:var(--yii-debug-space-2);min-height:132px;padding:var(--yii-debug-space-5) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--yii-debug-panel-border), transparent 30%) 1px, transparent 0) 0 0 / 14px 14px, linear-gradient(150deg, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 92%), transparent 55%), var(--yii-debug-panel-surface);flex-direction:column;transition:border-color .15s,transform .15s,box-shadow .15s;animation:.45s cubic-bezier(.2,.7,.3,1) both yii-debug-readout-in;display:flex;position:relative;overflow:hidden}.yii-debug .yii-debug-readout-card:hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 45%);box-shadow:var(--yii-debug-shadow-md);transform:translateY(-2px)}.yii-debug .yii-debug-readout-card:first-child{animation-delay:40ms}.yii-debug .yii-debug-readout-card:nth-child(2){animation-delay:80ms}.yii-debug .yii-debug-readout-card:nth-child(3){animation-delay:.12s}.yii-debug .yii-debug-readout-card:nth-child(4){animation-delay:.16s}.yii-debug .yii-debug-readout-card:nth-child(5){animation-delay:.2s}.yii-debug .yii-debug-readout-card:nth-child(6){animation-delay:.24s}.yii-debug .yii-debug-readout-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.15em;text-transform:uppercase;margin:0;font-size:.6875rem;font-weight:500;line-height:1;display:block;position:relative}.yii-debug .yii-debug-readout-label:before{content:":: ";color:var(--yii-debug-panel-primary);opacity:.85;font-weight:700}.yii-debug .yii-debug-readout-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);letter-spacing:-.015em;overflow-wrap:break-word;margin:0;font-size:1.375rem;font-weight:700;line-height:1.15;display:block}.yii-debug .yii-debug-readout-meta{align-items:center;gap:var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.05em;text-transform:lowercase;margin-top:auto;font-size:.6875rem;line-height:1;display:inline-flex}.yii-debug .yii-debug-readout-grid{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-6);grid-template-columns:repeat(auto-fit,minmax(210px,1fr));display:grid}.yii-debug .yii-debug-section .yii-debug-table-wrap{border-radius:var(--yii-debug-radius-md)}.yii-debug .yii-debug-section .yii-debug-table-overview th,.yii-debug .yii-debug-section .yii-debug-table-overview td{padding:9px var(--yii-debug-space-4);border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 45%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);text-align:left;vertical-align:baseline}.yii-debug .yii-debug-section .yii-debug-table-overview th{width:34%;color:var(--yii-debug-panel-muted);letter-spacing:.12em;text-transform:uppercase;font-weight:500}.yii-debug .yii-debug-section .yii-debug-table-overview td{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-section .yii-debug-table-overview tr:last-child th,.yii-debug .yii-debug-section .yii-debug-table-overview tr:last-child td{border-bottom:0}.yii-debug .yii-debug-fact-strip{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-border);grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:1px;margin:0;display:grid;overflow:hidden}.yii-debug .yii-debug-fact{min-width:0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4);background:var(--yii-debug-panel-surface-muted)}.yii-debug .yii-debug-fact-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-fact-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:600;overflow:hidden}.yii-debug .yii-debug-hero{margin-bottom:var(--yii-debug-space-5);border:var(--yii-debug-border);border-inline-start:4px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 76%, var(--yii-debug-panel-text));border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-hero-danger{--yii-debug-hue:var(--yii-debug-danger)}.yii-debug .yii-debug-hero-info{--yii-debug-hue:var(--yii-debug-info)}.yii-debug .yii-debug-hero-success{--yii-debug-hue:var(--yii-debug-success)}.yii-debug .yii-debug-hero-warning{--yii-debug-hue:var(--yii-debug-warning)}.yii-debug .yii-debug-hero-header{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.yii-debug .yii-debug-hero-identity{align-items:center;gap:var(--yii-debug-space-3);min-width:0;display:flex}.yii-debug .yii-debug-hero-mark{border:1px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 65%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 88%);width:40px;height:40px;color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 80%, var(--yii-debug-panel-text));font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:.04em;text-transform:uppercase;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.yii-debug .yii-debug-hero-text{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-hero-title,.yii-debug .yii-debug-hero-subtitle{font-family:var(--yii-debug-font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.yii-debug .yii-debug-hero-title{color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-base);font-weight:600}.yii-debug .yii-debug-hero-subtitle{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-hero-status>.yii-debug-badge{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:.02em;padding:3px 12px;font-weight:700}.yii-debug .yii-debug-hero-metrics{border-top:var(--yii-debug-border);background:var(--yii-debug-panel-border);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1px;margin:0;display:grid}.yii-debug .yii-debug-hero-metric{min-width:0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4);background:var(--yii-debug-panel-surface-muted)}.yii-debug .yii-debug-hero-metric dt{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-hero-metric dd{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:600;overflow:hidden}.yii-debug .yii-debug-stat-strip{gap:var(--yii-debug-space-3);margin:0 0 var(--yii-debug-space-4);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.yii-debug .yii-debug-stat{padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);align-items:center;gap:10px;display:flex}.yii-debug .yii-debug-stat-icon{width:26px;height:26px;color:var(--yii-debug-panel-primary);flex:none;justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-stat-icon svg{width:100%;height:100%}.yii-debug .yii-debug-stat-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xl);font-weight:800;line-height:1}.yii-debug .yii-debug-stat-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;margin-left:auto}.yii-debug .yii-debug-stat-danger .yii-debug-stat-icon{color:var(--yii-debug-danger)}.yii-debug .yii-debug-stat-info .yii-debug-stat-icon{color:var(--yii-debug-info)}.yii-debug .yii-debug-stat-muted .yii-debug-stat-icon{color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-stat-success .yii-debug-stat-icon{color:var(--yii-debug-success)}.yii-debug .yii-debug-stat-warning .yii-debug-stat-icon{color:var(--yii-debug-warning)}.yii-debug .yii-debug-entity{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);scroll-margin-top:var(--yii-debug-space-4);flex-direction:column;transition:transform .16s,border-color .16s,box-shadow .16s;display:flex;position:relative}.yii-debug .yii-debug-entity:hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 60%);box-shadow:var(--yii-debug-shadow-sm), 0 12px 32px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%);transform:translateY(-1px)}.yii-debug .yii-debug-entity:target{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 78%), var(--yii-debug-shadow-sm)}.yii-debug .yii-debug-card-grid{gap:var(--yii-debug-space-3);grid-template-columns:repeat(auto-fit,minmax(min(100%,32rem),1fr));display:grid}.yii-debug .yii-debug-entity-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:center;display:grid}.yii-debug .yii-debug-entity-icon{border-radius:var(--yii-debug-radius-md);background:linear-gradient(135deg, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 78%), color-mix(in srgb, var(--yii-debug-info), transparent 78%));width:38px;height:38px;color:var(--yii-debug-panel-primary-strong);flex:none;justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-entity-icon svg{width:22px;height:22px}.yii-debug .yii-debug-entity-title{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-entity-name{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-lg);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:700;line-height:1.2;overflow:hidden}.yii-debug .yii-debug-entity-subtitle{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.01em;text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.yii-debug .yii-debug-entity-meta{flex-wrap:nowrap;flex:none;justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.yii-debug .yii-debug-entity-meta .yii-debug-badge{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;align-items:center;gap:4px;padding:2px 8px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-entity-meta .yii-debug-badge-danger{border-color:color-mix(in srgb, var(--yii-debug-danger), transparent 60%);background:color-mix(in srgb, var(--yii-debug-danger), transparent 90%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-info{border-color:color-mix(in srgb, var(--yii-debug-info), transparent 60%);background:color-mix(in srgb, var(--yii-debug-info), transparent 90%);color:var(--yii-debug-info)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-muted{border-color:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 60%);background:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 90%);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-success{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 60%);background:color-mix(in srgb, var(--yii-debug-success), transparent 90%);color:var(--yii-debug-success)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-warning{border-color:color-mix(in srgb, var(--yii-debug-warning), transparent 60%);background:color-mix(in srgb, var(--yii-debug-warning), transparent 90%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-entity-body{gap:var(--yii-debug-space-4);grid-template-columns:minmax(180px,2fr) minmax(0,3fr);display:grid}.yii-debug .yii-debug-entity-body[data-cols="1"]{grid-template-columns:1fr}.yii-debug .yii-debug-entity-column{gap:var(--yii-debug-space-3);flex-direction:column;min-width:0;display:flex}.yii-debug .yii-debug-entity-column-title{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.14em;text-transform:uppercase;margin:0;font-weight:700}.yii-debug .yii-debug-file-list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-file-list+.yii-debug-file-list{margin-top:4px}.yii-debug .yii-debug-file{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);grid-template-columns:auto 1fr;align-items:center;gap:6px;min-width:0;padding:4px 8px;display:grid}.yii-debug .yii-debug-file-type{border-radius:var(--yii-debug-radius-pill);min-width:30px;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;justify-content:center;align-items:center;padding:0 5px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-file-type-danger{background:color-mix(in srgb, var(--yii-debug-danger), transparent 84%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-file-type-info{background:color-mix(in srgb, var(--yii-debug-info), transparent 84%);color:var(--yii-debug-info)}.yii-debug .yii-debug-file-type-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-file-type-success{background:color-mix(in srgb, var(--yii-debug-success), transparent 84%);color:var(--yii-debug-success)}.yii-debug .yii-debug-file-type-warning{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-file-name{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.yii-debug .yii-debug-entity-column .yii-debug-fact-strip{background:0 0;border:0;border-radius:0;flex-direction:column;gap:4px;margin:0;display:flex;overflow:visible}.yii-debug .yii-debug-entity-column .yii-debug-fact{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);grid-template-columns:56px 1fr;align-items:baseline;gap:8px;padding:6px 10px;display:grid}.yii-debug .yii-debug-entity-column .yii-debug-fact-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.12em;text-transform:uppercase;margin:0;font-weight:700}.yii-debug .yii-debug-entity-column .yii-debug-fact-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);text-overflow:clip;white-space:normal;word-break:break-all;margin:0;font-weight:400;overflow:visible}.yii-debug .yii-debug-link-strip{padding:10px var(--yii-debug-space-3);border:1px dashed color-mix(in srgb, var(--yii-debug-success), transparent 50%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-success), transparent 92%);flex-direction:column;gap:8px;display:flex}.yii-debug .yii-debug-link-strip-label{color:var(--yii-debug-success);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.14em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-link-strip-list{flex-wrap:wrap;gap:6px;display:flex}.yii-debug .yii-debug-link-pill{border:1px solid color-mix(in srgb, var(--yii-debug-success), transparent 50%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-success);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);white-space:nowrap;align-items:center;gap:5px;padding:3px 10px 3px 8px;font-weight:600;text-decoration:none;transition:background-color .14s,color .14s,transform .14s,border-color .14s;display:inline-flex}.yii-debug .yii-debug-link-pill:before{content:"↳";opacity:.85;font-size:12px}.yii-debug .yii-debug-link-pill:hover,.yii-debug .yii-debug-link-pill:focus-visible{border-color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 86%);color:var(--yii-debug-success);text-decoration:none;transform:translateY(-1px)}@media (max-width:720px){.yii-debug .yii-debug-stat-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.yii-debug .yii-debug-entity-body{grid-template-columns:1fr}.yii-debug .yii-debug-entity-head{grid-template-columns:auto 1fr}.yii-debug .yii-debug-entity-meta{grid-column:1/-1;justify-content:flex-start;max-width:100%}}.yii-debug .yii-debug-manifest{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);flex-direction:column;display:flex;overflow:hidden}.yii-debug .yii-debug-manifest-head{align-items:center;gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.08em;font-weight:700;display:flex}.yii-debug .yii-debug-manifest-count{color:var(--yii-debug-panel-muted);letter-spacing:.12em;text-transform:uppercase;margin-left:auto;font-weight:500}.yii-debug .yii-debug-manifest-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));display:grid}.yii-debug .yii-debug-manifest-item{justify-content:space-between;align-items:baseline;gap:var(--yii-debug-space-3);min-width:0;padding:7px var(--yii-debug-space-4);border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 45%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);display:flex}.yii-debug .yii-debug-manifest-name{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.yii-debug .yii-debug-manifest-version{color:var(--yii-debug-panel-primary);flex:none}.yii-debug .yii-debug-ext-strip{gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:linear-gradient(0deg, color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 30%), var(--yii-debug-panel-surface));flex-wrap:wrap;display:flex}.yii-debug .yii-debug-ext-pill{align-items:center;gap:var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);letter-spacing:.1em;text-transform:uppercase;padding:6px 12px 6px 9px;font-size:.6875rem;font-weight:500;line-height:1;transition:border-color .15s,background .15s;display:inline-flex}.yii-debug .yii-debug-ext-pill-dot{background:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 60%);border-radius:999px;width:7px;height:7px;display:inline-block}.yii-debug .yii-debug-ext-pill-label{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-ext-pill-state{margin-left:var(--yii-debug-space-1);color:var(--yii-debug-panel-muted);letter-spacing:.12em;opacity:.7;font-size:.625rem;font-weight:700}.yii-debug .yii-debug-ext-pill.is-on{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 55%);background:color-mix(in srgb, var(--yii-debug-success), var(--yii-debug-panel-surface) 90%)}.yii-debug .yii-debug-ext-pill.is-on .yii-debug-ext-pill-dot{background:var(--yii-debug-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-success), transparent 75%);animation:2.4s ease-in-out infinite yii-debug-led-pulse}.yii-debug .yii-debug-ext-pill.is-on .yii-debug-ext-pill-state{color:var(--yii-debug-success);opacity:1}.yii-debug .yii-debug-ext-pill.is-off{opacity:.55}.yii-debug .yii-debug-phpinfo-shell{gap:var(--yii-debug-space-4);grid-template-columns:220px minmax(0,1fr);align-items:start;display:grid}.yii-debug .yii-debug-phpinfo-toc{top:var(--yii-debug-space-3);max-height:calc(100vh - 80px);padding:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);scrollbar-width:thin;align-self:start;position:sticky;overflow-y:auto}.yii-debug .yii-debug-phpinfo-toc-title{margin:0 0 var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);align-items:baseline;gap:6px;display:flex}.yii-debug .yii-debug-phpinfo-toc-title span:first-child{color:var(--yii-debug-panel-text);font-variant-numeric:tabular-nums;font-weight:700}.yii-debug .yii-debug-phpinfo-toc-title-note{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);margin-left:auto}.yii-debug .yii-debug-phpinfo-toc-overview,.yii-debug .yii-debug-phpinfo-toc-group-list{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-phpinfo-toc-overview{margin-bottom:var(--yii-debug-space-2);padding-bottom:var(--yii-debug-space-2);border-bottom:var(--yii-debug-border)}.yii-debug .yii-debug-phpinfo-toc-groups{flex-direction:column;gap:2px;display:flex}.yii-debug .yii-debug-phpinfo-toc-group{margin:0}.yii-debug .yii-debug-phpinfo-toc-group-summary{border-radius:var(--yii-debug-radius-sm);color:var(--yii-debug-panel-muted);cursor:pointer;font-size:var(--yii-debug-fs-xs);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 8px;font-weight:600;list-style:none;transition:background-color .12s,color .12s;display:grid}.yii-debug .yii-debug-phpinfo-toc-group-summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-phpinfo-toc-group-summary:before{content:"›";color:var(--yii-debug-panel-muted);font-size:1.1em;line-height:1;transition:transform .12s}.yii-debug .yii-debug-phpinfo-toc-group-summary:hover,.yii-debug .yii-debug-phpinfo-toc-group-summary:focus-visible{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-phpinfo-toc-group[open]>.yii-debug-phpinfo-toc-group-summary{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-phpinfo-toc-group[open]>.yii-debug-phpinfo-toc-group-summary:before{transform:rotate(90deg)}.yii-debug .yii-debug-phpinfo-toc-group-count{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);min-width:22px;color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;text-align:center;padding:1px 6px}.yii-debug .yii-debug-phpinfo-toc-group-list{margin:2px 0 var(--yii-debug-space-2);padding-left:14px}.yii-debug .yii-debug-phpinfo-toc-link{border-radius:0 var(--yii-debug-radius-sm) var(--yii-debug-radius-sm) 0;color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm);border-left:2px solid #0000;padding:7px 10px 7px 12px;text-decoration:none;transition:background-color .12s,color .12s,border-color .12s;display:block}.yii-debug .yii-debug-phpinfo-toc-link:hover,.yii-debug .yii-debug-phpinfo-toc-link:focus-visible{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-phpinfo-toc-link.is-active{border-left-color:var(--yii-debug-panel-primary);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 90%);color:var(--yii-debug-panel-primary-strong);font-weight:700}.yii-debug .yii-debug-phpinfo-main{min-width:0}.yii-debug .yii-debug-phpinfo-search{margin-bottom:var(--yii-debug-space-3);flex-direction:column;gap:6px;display:flex}.yii-debug .yii-debug-phpinfo-search-control{align-items:center;display:flex;position:relative}.yii-debug .yii-debug-phpinfo-search-icon{width:16px;height:16px;color:var(--yii-debug-panel-muted);pointer-events:none;justify-content:center;align-items:center;display:inline-flex;position:absolute;left:12px}.yii-debug .yii-debug-phpinfo-search-icon svg{width:100%;height:100%}.yii-debug .yii-debug-phpinfo-search-input{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);flex:1;padding:9px 12px 9px 36px;transition:border-color .12s,box-shadow .12s}.yii-debug .yii-debug-phpinfo-search-input::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-phpinfo-search-input:focus{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%)}.yii-debug .yii-debug-phpinfo-search-clear{border-radius:var(--yii-debug-radius-sm);color:var(--yii-debug-panel-link);cursor:pointer;font:inherit;font-size:var(--yii-debug-fs-xs);background:0 0;border:0;padding:4px 8px;font-weight:600;position:absolute;right:8px}.yii-debug .yii-debug-phpinfo-search-clear:hover,.yii-debug .yii-debug-phpinfo-search-clear:focus-visible{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover)}.yii-debug .yii-debug-phpinfo-search-control:has(.yii-debug-phpinfo-search-clear:not([hidden])) .yii-debug-phpinfo-search-input{padding-right:58px}.yii-debug .yii-debug-phpinfo-search-feedback{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-2);min-height:18px;padding-inline:2px;display:flex}.yii-debug .yii-debug-phpinfo-search-feedback:has(.yii-debug-phpinfo-search-status:empty):has(.yii-debug-phpinfo-search-empty[hidden]){display:none}.yii-debug .yii-debug-phpinfo-search-status,.yii-debug .yii-debug-phpinfo-search-empty{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-phpinfo-search-empty{color:var(--yii-debug-danger)}.yii-debug .yii-debug-phpinfo-section{scroll-margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-phpinfo-section+:is(.yii-debug .yii-debug-phpinfo-section){margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-phpinfo-section .yii-debug-disclosure{margin-bottom:0}.yii-debug .yii-debug-phpinfo-toc-link[hidden],.yii-debug .yii-debug-phpinfo-toc-group[hidden],.yii-debug .yii-debug-phpinfo-section[hidden],.yii-debug .yii-debug-phpinfo-search-clear[hidden],.yii-debug .yii-debug-phpinfo-search-empty[hidden],.yii-debug .yii-debug-phpinfo-overview-hero-section[hidden],.yii-debug .yii-debug-disclosure[hidden],.yii-debug .yii-debug-phpinfo-extension-group[hidden],.yii-debug .yii-debug-ext-pill[hidden],.yii-debug .yii-debug-table-wrap[hidden],.yii-debug .yii-debug-phpinfo-module tr[hidden]{display:none}@media (max-width:900px){.yii-debug .yii-debug-phpinfo-shell{grid-template-columns:1fr}.yii-debug .yii-debug-phpinfo-toc{max-height:none;position:static;overflow:hidden}.yii-debug .yii-debug-phpinfo-toc-groups{gap:4px var(--yii-debug-space-2);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-phpinfo-toc-group[open]{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-toc-group-list{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:4px;padding-left:0;display:grid}.yii-debug .yii-debug-phpinfo-toc-link{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);border-left:0;padding:4px 10px}.yii-debug .yii-debug-phpinfo-toc-link.is-active{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%);border-left:0}}@media (max-width:560px){.yii-debug .yii-debug-phpinfo-toc-groups{grid-template-columns:1fr}}.yii-debug .yii-debug-phpinfo-overview-hero{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-3);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}@media (max-width:720px){.yii-debug .yii-debug-phpinfo-overview-hero{grid-template-columns:1fr}}.yii-debug .yii-debug-phpinfo-overview-hero-headline{align-items:center;gap:var(--yii-debug-space-3);grid-template-columns:1fr auto;display:grid}.yii-debug .yii-debug-phpinfo-overview-hero-version{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-display,var(--yii-debug-font-mono));letter-spacing:-.02em;font-size:clamp(1.6rem,2.4vw + 1rem,2.4rem);font-weight:800;line-height:1}.yii-debug .yii-debug-phpinfo-overview-hero-mark{border-radius:var(--yii-debug-radius-pill);border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);min-width:64px;color:var(--yii-debug-panel-primary-strong);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-lg);letter-spacing:.08em;text-transform:lowercase;justify-content:center;align-items:center;padding:6px 14px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-phpinfo-overview-hero-metrics{gap:var(--yii-debug-space-2) var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));margin:0;display:grid}.yii-debug .yii-debug-phpinfo-overview-hero-section{gap:var(--yii-debug-space-3);min-width:0;padding:var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);flex-direction:column;display:flex}.yii-debug .yii-debug-phpinfo-overview-hero-section:first-child{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-extensions{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-extensions>.yii-debug-phpinfo-extension-groups{padding:var(--yii-debug-space-4)}.yii-debug .yii-debug-phpinfo-extension-group-count{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;padding:1px 7px}.yii-debug .yii-debug-phpinfo-extension-groups{gap:var(--yii-debug-space-3);flex-direction:column;display:flex}.yii-debug .yii-debug-phpinfo-extension-group{gap:var(--yii-debug-space-2);flex-direction:column;display:flex}.yii-debug .yii-debug-phpinfo-extension-group-head{align-items:center;gap:var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);font-weight:600;display:flex}.yii-debug .yii-debug-phpinfo-extension-group-head .yii-debug-phpinfo-extension-group-count{margin-left:auto}.yii-debug .yii-debug-phpinfo-extension-group .yii-debug-ext-pill{scroll-margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-phpinfo-extension-group .yii-debug-ext-pill:target,.yii-debug .yii-debug-phpinfo-extension-group .yii-debug-ext-pill.is-search-match{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 45%);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 90%)}.yii-debug .yii-debug-phpinfo-overview-block-head{border-bottom:var(--yii-debug-border);align-items:center;gap:10px;padding-bottom:8px;display:flex}.yii-debug .yii-debug-phpinfo-overview-block-eyebrow{color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);font-weight:600}.yii-debug .yii-debug-phpinfo-overview-hero-metric{flex-direction:column;gap:3px;padding-block:2px;display:flex}.yii-debug .yii-debug-phpinfo-overview-hero-metric dt{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);margin:0;font-weight:600;line-height:1.2}.yii-debug .yii-debug-phpinfo-overview-hero-metric dd{overflow-wrap:break-word;min-width:0;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);margin:0;line-height:1.4}.yii-debug .yii-debug-phpinfo-overview-hero-metric dd code{color:inherit;background:0 0;padding:0}.yii-debug .yii-debug-phpinfo-overview-hero-metric.is-wide{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-overview-pill{border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;border:1px solid #0000;align-items:center;gap:6px;padding:1px 10px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-phpinfo-overview-pill[data-variant=success]{color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 86%);border-color:color-mix(in srgb, var(--yii-debug-success), transparent 65%)}.yii-debug .yii-debug-phpinfo-overview-pill[data-variant=muted]{color:var(--yii-debug-panel-muted);background:var(--yii-debug-panel-surface-muted);border-color:var(--yii-debug-panel-border)}.yii-debug .yii-debug-phpinfo-overview-token{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);padding:1px 8px}.yii-debug .yii-debug-phpinfo-overview-files{flex-wrap:wrap;gap:4px;display:flex}.yii-debug .yii-debug-phpinfo-overview-files .yii-debug-phpinfo-overview-token{cursor:help;transition:border-color .12s,background-color .12s}.yii-debug .yii-debug-phpinfo-overview-files .yii-debug-phpinfo-overview-token:hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 40%);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%)}.yii-debug .yii-debug-phpinfo-module{gap:var(--yii-debug-space-3);flex-direction:column;margin-top:0;display:flex}.yii-debug .yii-debug-phpinfo-module-head{align-items:center;gap:10px;margin:0;padding:2px 2px 0;display:flex}.yii-debug .yii-debug-phpinfo-module-head h2{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xl);text-align:left;background:0 0;margin:0;padding:0;font-weight:600}.yii-debug .yii-debug-phpinfo-table-section{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-phpinfo-table-section-head{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-2);padding:9px var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);font-weight:600;display:flex}.yii-debug .yii-debug-phpinfo-variable-group>summary{cursor:pointer;list-style:none;transition:background-color .12s}.yii-debug .yii-debug-phpinfo-variable-group>summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-phpinfo-variable-group>summary:hover,.yii-debug .yii-debug-phpinfo-variable-group>summary:focus-visible{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-phpinfo-variable-group>summary>span:first-child{align-items:center;gap:8px;display:inline-flex}.yii-debug .yii-debug-phpinfo-variable-group>summary>span:first-child:before{content:"›";color:var(--yii-debug-panel-muted);font-size:1.1em;line-height:1;transition:transform .12s}.yii-debug .yii-debug-phpinfo-variable-group[open]>summary>span:first-child:before{transform:rotate(90deg)}.yii-debug .yii-debug-phpinfo-table-section-count{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;flex:none;padding:1px 7px;font-weight:500}.yii-debug .yii-debug-phpinfo-table-scroll{min-width:0;overflow-x:auto}.yii-debug .yii-debug-phpinfo-module .yii-debug-table{table-layout:fixed;min-width:560px}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:first-child{width:40%}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:nth-child(2):last-child{width:60%}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:nth-child(2):not(:last-child),.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:nth-child(3){width:30%}.yii-debug .yii-debug-phpinfo-module .yii-debug-table th,.yii-debug .yii-debug-phpinfo-module .yii-debug-table td{text-align:left}.yii-debug .yii-debug-phpinfo-module .yii-debug-table th[scope=row]{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);white-space:normal;font-weight:500}.yii-debug .yii-debug-phpinfo-module .yii-debug-table td{font-family:var(--yii-debug-font-mono)}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr.h>*{z-index:1;background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.03em;text-transform:uppercase;font-weight:700;position:sticky;top:0}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr.is-search-match>*{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%)!important}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr.has-local-override>td:nth-child(2){box-shadow:inset 2px 0 0 color-mix(in srgb, var(--yii-debug-warning), transparent 25%);color:color-mix(in srgb, var(--yii-debug-warning) 72%, var(--yii-debug-panel-text))}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-phpinfo-table-scroll{overflow:visible}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts{table-layout:auto;min-width:0;display:block}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tbody{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact{border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 25%);grid-template-columns:minmax(130px,.85fr) minmax(0,1.15fr);min-width:0;display:grid}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact:nth-child(odd){border-right:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 25%)}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact.yii-debug-phpinfo-fact-wide{border-right:0;grid-column:1/-1}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact>*{overflow-wrap:anywhere;background:0 0;border:0;width:auto;padding:9px 12px}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact>th{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);font-weight:600}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact>td{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact-subheading{grid-column:1/-1;display:block}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact-subheading>th{border-block:var(--yii-debug-border);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 15%);width:auto;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;text-align:left;padding:8px 12px;font-weight:600;display:block}.yii-debug .yii-debug-phpinfo-status-pill,.yii-debug .yii-debug-phpinfo-redacted{border-radius:var(--yii-debug-radius-pill);width:-moz-fit-content;width:fit-content;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.03em;border:1px solid #0000;align-items:center;padding:1px 8px;font-weight:600;display:inline-flex}.yii-debug .yii-debug-phpinfo-status-pill[data-variant=success]{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 65%);background:color-mix(in srgb, var(--yii-debug-success), transparent 88%);color:var(--yii-debug-success)}.yii-debug .yii-debug-phpinfo-status-pill[data-variant=muted]{border-color:var(--yii-debug-panel-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-phpinfo-redacted{border-color:color-mix(in srgb, var(--yii-debug-warning), transparent 65%);background:color-mix(in srgb, var(--yii-debug-warning), transparent 90%);color:color-mix(in srgb, var(--yii-debug-warning) 72%, var(--yii-debug-panel-text));text-transform:uppercase}.yii-debug .yii-debug-phpinfo-table-section.is-note .yii-debug-table.is-note{table-layout:auto;min-width:0}.yii-debug .yii-debug-phpinfo-table-section.is-note .yii-debug-table.is-note td,.yii-debug .yii-debug-phpinfo-table-section.is-note .yii-debug-table.is-note th{width:auto;padding:var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);text-align:left;line-height:1.6}@media (max-width:720px){.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tbody{grid-template-columns:1fr}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact{border-right:0}}@media (max-width:959px){.yii-debug .yii-debug-sidebar{min-width:0}.yii-debug .yii-debug-nav{overscroll-behavior-x:contain;scrollbar-width:thin;overflow-x:auto}.yii-debug .yii-debug-nav ul{gap:var(--yii-debug-space-1);flex-direction:row;width:max-content;min-width:100%}.yii-debug .yii-debug-nav-link{white-space:nowrap;min-height:40px}.yii-debug .yii-debug-nav-link:after{display:none}.yii-debug .yii-debug-nav-link-icon{margin-right:var(--yii-debug-space-1)}}@media (max-width:767px){.yii-debug .yii-debug-page{padding:var(--yii-debug-space-2)}.yii-debug .yii-debug-card{padding:var(--yii-debug-space-3)}}@media (prefers-reduced-motion:reduce){.yii-debug *,.yii-debug :before,.yii-debug :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@keyframes yii-debug-readout-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes yii-debug-led-pulse{0%,to{box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-success), transparent 75%)}50%{box-shadow:0 0 0 6px color-mix(in srgb, var(--yii-debug-success), transparent 90%)}}.yii-debug-tl-filter{align-items:end;gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);flex-wrap:wrap;display:flex}.yii-debug-tl-field{flex-direction:column;gap:4px;min-width:160px;display:flex}.yii-debug-tl-field label{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;font-weight:600}.yii-debug-tl-field input{padding:6px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font:inherit;font-family:var(--yii-debug-font-mono)}.yii-debug-tl-field input::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug-tl-field input:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug-tl-field-grow{flex:240px}.yii-debug-tl-hint{margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%)}.yii-debug-tl-hint-title{color:var(--yii-debug-panel-text);margin:0 0 6px;font-weight:600}.yii-debug-tl-hint-body{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm);margin:0;line-height:1.55}.yii-debug-tl-hint-body em{color:var(--yii-debug-panel-text);font-style:normal;font-weight:600}.yii-debug-tl{--yii-debug-tl-label-col:22%;grid-template-columns:minmax(180px, var(--yii-debug-tl-label-col)) 1fr;border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);grid-template-rows:auto 1fr auto;gap:0;display:grid;overflow:hidden}@media (max-width:1440px){.yii-debug-tl{--yii-debug-tl-label-col:32%}}.yii-debug-tl-axis{border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);grid-column:2/3;height:32px;padding:8px 0;position:relative}.yii-debug-tl-tick{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;white-space:nowrap;pointer-events:none;position:absolute;top:8px;transform:translate(-50%)}.yii-debug-tl-tick:after{content:"";background:var(--yii-debug-panel-border);width:1px;height:8px;position:absolute;top:18px;left:50%}.yii-debug-tl-rows{grid-column:1/3;grid-template-columns:minmax(180px, var(--yii-debug-tl-label-col)) 1fr;background:linear-gradient(to right, transparent calc(var(--yii-debug-tl-label-col) - 1px), var(--yii-debug-panel-border) calc(var(--yii-debug-tl-label-col) - 1px), var(--yii-debug-panel-border) var(--yii-debug-tl-label-col), transparent var(--yii-debug-tl-label-col));display:grid}.yii-debug-tl-row{display:contents}.yii-debug-tl-row:hover .yii-debug-tl-label,.yii-debug-tl-row:hover .yii-debug-tl-track{background:var(--yii-debug-panel-surface-hover)}.yii-debug-tl-row:hover .yii-debug-tl-name{color:var(--yii-debug-panel-text)}.yii-debug-tl-label{min-width:0;padding:8px var(--yii-debug-space-3) 8px calc(var(--yii-debug-space-3) + (var(--depth,0) * 14px));border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;transition:background-color .12s;display:grid}.yii-debug-tl-dot{background:var(--yii-debug-cat-db);opacity:.85;border-radius:50%;flex:none;width:6px;height:6px}.yii-debug-tl-name{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);color:var(--yii-debug-panel-muted);text-overflow:ellipsis;white-space:nowrap;transition:color .12s;overflow:hidden}.yii-debug-tl-track{border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);transition:background-color .12s;position:relative}.yii-debug-tl-bar{background:var(--yii-debug-cat-db);border-radius:4px;min-width:2px;height:18px;position:absolute;top:50%;transform:translateY(-50%);box-shadow:inset 0 1px #ffffff1f,0 1px 2px #0000002e}.yii-debug-tl-bar-duration{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;white-space:nowrap;justify-self:end;font-weight:500}.yii-debug-tl-memory{grid-template-columns:minmax(180px, var(--yii-debug-tl-label-col)) 1fr auto;padding:var(--yii-debug-space-2) var(--yii-debug-space-3);border-top:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);grid-column:1/3;align-items:center;display:grid}.yii-debug-tl-memory-label{text-transform:uppercase;letter-spacing:.06em}.yii-debug-tl-memory-track{border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-surface), transparent 50%);width:100%;color:var(--yii-debug-panel-primary);position:relative;overflow:hidden}.yii-debug-tl-memory-track svg{width:100%;height:100%;display:block}.yii-debug-tl-memory-peak{margin-left:var(--yii-debug-space-2);color:var(--yii-debug-panel-text);font-weight:700}@media (max-width:640px){.yii-debug-tl,.yii-debug-tl-rows{--yii-debug-tl-label-col:52%;grid-template-columns:minmax(140px, var(--yii-debug-tl-label-col)) minmax(0, 1fr)}.yii-debug-tl-label{padding:7px var(--yii-debug-space-2);gap:6px}.yii-debug-tl-memory{grid-template-columns:minmax(140px, var(--yii-debug-tl-label-col)) minmax(0, 1fr)}.yii-debug-tl-memory-peak{text-align:right;grid-column:2;margin:4px 0 0}}.yii-debug .yii-debug-skip-link{top:var(--yii-debug-space-2);left:var(--yii-debug-space-2);z-index:1000;padding:var(--yii-debug-space-2) var(--yii-debug-space-3);border:2px solid var(--yii-debug-focus-ring);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-md);color:var(--yii-debug-panel-text);transform:translateY(calc(-100% - var(--yii-debug-space-4)));font-weight:700;position:fixed}.yii-debug .yii-debug-skip-link:focus-visible{text-decoration:none;transform:translateY(0)}.yii-debug .yii-debug-brand-chip-control{border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);cursor:pointer;justify-content:center}.yii-debug .yii-debug-brand-chip-control:hover,.yii-debug .yii-debug-brand-chip-control:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);color:var(--yii-debug-panel-primary-strong);transform:translateY(-1px)}.yii-debug :is(h2,h3).yii-debug-has-permalink{align-items:center;gap:var(--yii-debug-space-1);scroll-margin-block-start:var(--yii-debug-space-5);display:flex}.yii-debug .yii-debug-heading-permalink{border-radius:var(--yii-debug-radius-sm);min-width:32px;min-height:32px;color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);opacity:0;transition:color var(--yii-debug-duration-fast) ease, opacity var(--yii-debug-duration-fast) ease, background var(--yii-debug-duration-fast) ease;flex:none;justify-content:center;align-items:center;line-height:1;text-decoration:none;display:inline-flex}.yii-debug .yii-debug-heading-permalink:hover,.yii-debug .yii-debug-heading-permalink:focus-visible{background:var(--yii-debug-panel-bg-accent);color:var(--yii-debug-panel-primary-strong);opacity:1;text-decoration:none}.yii-debug :is(h2,h3).yii-debug-has-permalink:hover>.yii-debug-heading-permalink,.yii-debug :is(h2,h3).yii-debug-has-permalink:focus-within>.yii-debug-heading-permalink,.yii-debug :is(h2,h3).yii-debug-deep-link-target>.yii-debug-heading-permalink{opacity:1}.yii-debug .yii-debug-deep-link-target{outline:2px solid var(--yii-debug-focus-ring);outline-offset:4px}.yii-debug .yii-debug-db-n1-summary{gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-4);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:1px solid color-mix(in srgb, var(--yii-debug-warning), transparent 55%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-warning), transparent 92%);display:grid}.yii-debug .yii-debug-db-n1-heading{justify-content:space-between;align-items:baseline;gap:var(--yii-debug-space-2);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-db-n1-list{gap:var(--yii-debug-space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link{align-items:center;gap:var(--yii-debug-space-2);min-height:var(--yii-debug-control-min-size);padding:var(--yii-debug-space-1) var(--yii-debug-space-2);border:1px solid color-mix(in srgb, var(--yii-debug-warning), transparent 60%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:color-mix(in srgb, var(--yii-debug-warning) 72%, var(--yii-debug-panel-text));font-size:var(--yii-debug-fs-xs);font-weight:700;text-decoration:none;display:inline-flex}:is(.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link):hover,:is(.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link):focus-visible,:is(.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link)[aria-current=true]{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-db-n1-fingerprint{max-width:min(56ch,65vw);font-family:var(--yii-debug-font-mono);text-overflow:ellipsis;white-space:nowrap;font-weight:500;display:inline-block;overflow:hidden}.yii-debug .yii-debug-db-n1-row-link{margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-grid-db .yii-debug-trace{gap:0;display:grid}.yii-debug .yii-debug-grid-db .yii-debug-trace a{align-items:center;min-height:24px;display:inline-flex}.yii-debug .yii-debug-db-n1-clear[hidden]{display:none}.yii-debug .yii-debug-compare-form{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));align-items:end;display:grid}.yii-debug .yii-debug-compare-overview{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));display:grid}.yii-debug .yii-debug-compare-grid{min-width:42rem}.yii-debug :is(.yii-debug-delta-up,.yii-debug-delta-down,.yii-debug-delta-neutral){padding:2px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;align-items:center;font-weight:700;display:inline-flex}.yii-debug .yii-debug-delta-up{border-color:color-mix(in srgb, var(--yii-debug-danger), transparent 60%);background:color-mix(in srgb, var(--yii-debug-danger), transparent 90%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-delta-down{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 60%);background:color-mix(in srgb, var(--yii-debug-success), transparent 90%);color:var(--yii-debug-success)}.yii-debug .yii-debug-delta-neutral{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}@container yii-debug-main (width<=560px){.yii-debug .yii-debug-section-header,.yii-debug .yii-debug-panel-heading{flex-direction:column;align-items:stretch}.yii-debug .yii-debug-filter-input{width:100%;max-width:none}}@media (max-width:767px){.yii-debug .yii-debug-brand-chip-copy .yii-debug-brand-label{text-overflow:ellipsis;white-space:nowrap;max-width:5.5rem;overflow:hidden}}@media (pointer:coarse){.yii-debug .yii-debug-grid-db .yii-debug-trace a{min-width:44px;min-height:44px}.yii-debug :is(.yii-debug-btn,.yii-debug-brand-chip,.yii-debug-cell-more-toggle,.yii-debug-filter-input,.yii-debug-heading-permalink,.yii-debug-server-group-summary,.yii-debug-tab-link){min-height:44px}}@media (forced-colors:active){.yii-debug .yii-debug-card,.yii-debug .yii-debug-brand-bar,.yii-debug .yii-debug-brand-chip,.yii-debug .yii-debug-nav,.yii-debug .yii-debug-table-wrap{box-shadow:none;border-color:canvastext}.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-tab-link.is-active{color:highlighttext;background:highlight;border-color:highlight}.yii-debug :focus-visible{outline-color:highlight}} +:root,:host{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--yii-debug-font-sans:"IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, helvetica, arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--yii-debug-font-mono:"JetBrains Mono", ui-monospace, sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;--yii-debug-font-display:var(--yii-debug-font-mono);--yii-debug-space-1:4px;--yii-debug-space-2:8px;--yii-debug-space-3:12px;--yii-debug-space-4:16px;--yii-debug-space-5:24px;--yii-debug-space-6:32px;--yii-debug-radius-sm:6px;--yii-debug-radius-md:10px;--yii-debug-radius-lg:14px;--yii-debug-radius-pill:999px;--yii-debug-fs-xs:.75rem;--yii-debug-fs-sm:.8125rem;--yii-debug-fs-base:.9375rem;--yii-debug-fs-lg:1.0625rem;--yii-debug-fs-xl:1.25rem;--yii-debug-fs-2xl:1.5rem;--yii-debug-control-min-size:36px;--yii-debug-panel-padding:var(--yii-debug-space-5);--yii-debug-row-padding-block:10px;--yii-debug-duration-fast:.12s;--yii-debug-duration-normal:.18s;--yii-debug-panel-bg:var(--lightningcss-light,#f2f5f1)var(--lightningcss-dark,#0c120e);--yii-debug-panel-bg-accent:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c14);--yii-debug-panel-surface:var(--lightningcss-light,#fffffff0)var(--lightningcss-dark,#121a15eb);--yii-debug-panel-surface-muted:var(--lightningcss-light,#f6f8f5)var(--lightningcss-dark,#101812);--yii-debug-panel-surface-hover:var(--lightningcss-light,#e9f2ec)var(--lightningcss-dark,#1a241d);--yii-debug-panel-border:var(--lightningcss-light,#5d7a6942)var(--lightningcss-dark,#8fa39633);--yii-debug-panel-border-strong:var(--lightningcss-light,#4660515c)var(--lightningcss-dark,#8fa39652);--yii-debug-panel-text:var(--lightningcss-light,#16211a)var(--lightningcss-dark,#e4ede6);--yii-debug-panel-muted:var(--lightningcss-light,#5c6b60)var(--lightningcss-dark,#8fa396);--yii-debug-panel-link:var(--lightningcss-light,#0b6b4a)var(--lightningcss-dark,#4fd39a);--yii-debug-panel-link-hover:var(--lightningcss-light,#0d855b)var(--lightningcss-dark,#7fe4b8);--yii-debug-panel-primary:var(--lightningcss-light,#0e7a55)var(--lightningcss-dark,#2fd08c);--yii-debug-primary-bg:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));--yii-debug-on-primary:var(--lightningcss-light,#fff)var(--lightningcss-dark,#06281b);--yii-debug-panel-primary-strong:var(--lightningcss-light,#0a5c40)var(--lightningcss-dark,#17a673);--yii-debug-focus-ring:var(--lightningcss-light,#075c40)var(--lightningcss-dark,#7fe4b8);--yii-debug-success:var(--lightningcss-light,#0d7d47)var(--lightningcss-dark,#34c97e);--yii-debug-warning:var(--lightningcss-light,#8f5000)var(--lightningcss-dark,#e8a33d);--yii-debug-danger:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-on-success:var(--lightningcss-light,#fff)var(--lightningcss-dark,#0c120e);--yii-debug-on-warning:var(--lightningcss-light,#fff)var(--lightningcss-dark,#1c1917);--yii-debug-on-danger:var(--lightningcss-light,#fff)var(--lightningcss-dark,#1c1917);--yii-debug-info:var(--lightningcss-light,#205f9d)var(--lightningcss-dark,#5fa8e8);--yii-debug-on-info:var(--yii-debug-panel-bg);--yii-debug-panel-code-bg:var(--lightningcss-light,#ecf1ec)var(--lightningcss-dark,#17211a);--yii-debug-panel-pill:var(--lightningcss-light,#16211a0f)var(--lightningcss-dark,#8fa3962e);--yii-debug-panel-shadow:var(--lightningcss-light,0 22px 60px #16211a14)var(--lightningcss-dark,0 22px 60px #0006);--yii-debug-border:1px solid var(--yii-debug-panel-border);--yii-debug-border-strong:1px solid var(--yii-debug-panel-border-strong);--yii-debug-shadow-sm:0 1px 2px #0f172a0f;--yii-debug-shadow-md:0 10px 24px #0f172a14;--yii-debug-verb-get:var(--lightningcss-light,#0b7285)var(--lightningcss-dark,#4dc4d9);--yii-debug-verb-post:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#a78bfa);--yii-debug-verb-put:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#e8a33d);--yii-debug-verb-delete:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-verb-other:var(--yii-debug-panel-muted);--yii-debug-status-2xx:var(--yii-debug-success);--yii-debug-status-3xx:var(--yii-debug-warning);--yii-debug-status-4xx:var(--lightningcss-light,#c2410c)var(--lightningcss-dark,#fb923c);--yii-debug-status-5xx:var(--yii-debug-danger);--yii-debug-level-error:var(--yii-debug-danger);--yii-debug-level-warning:var(--yii-debug-warning);--yii-debug-level-info:var(--yii-debug-info);--yii-debug-level-trace:var(--yii-debug-panel-muted);--yii-debug-level-profile:var(--lightningcss-light,#9333ea)var(--lightningcss-dark,#b16be8);--yii-debug-level-other:var(--yii-debug-panel-muted);--yii-debug-gauge-fill:var(--yii-debug-panel-primary);--yii-debug-gauge-track:var(--lightningcss-light,#0e7a5529)var(--lightningcss-dark,#2fd08c24);--yii-debug-sql-kw:var(--lightningcss-light,#0a5c40)var(--lightningcss-dark,#4fd39a);--yii-debug-sql-str:var(--lightningcss-light,#8f4e00)var(--lightningcss-dark,#e8a33d);--yii-debug-sql-num:var(--yii-debug-info);--yii-debug-sql-comment:var(--yii-debug-panel-muted);--yii-debug-sql-param:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#a78bfa);--yii-debug-cat-app:var(--lightningcss-light,#0a6b47)var(--lightningcss-dark,#14b06e);--yii-debug-cat-db:var(--lightningcss-light,#0994b8)var(--lightningcss-dark,#0999be);--yii-debug-cat-view:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#8f6ce8);--yii-debug-cat-cache:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#c28300);--yii-debug-cat-mail:var(--lightningcss-light,#b23a67)var(--lightningcss-dark,#d95f8f);--yii-debug-cat-queue:var(--lightningcss-light,#3f4dbd)var(--lightningcss-dark,#6d7ce6);--yii-debug-cat-other:var(--yii-debug-panel-muted)}@media (prefers-color-scheme:dark){:root,:host{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-yii-debug-theme=light],:host([data-theme=light]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-yii-debug-theme=dark],:host([data-theme=dark]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../fonts/jetbrains-mono-latin-400-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../fonts/jetbrains-mono-latin-500-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(../fonts/jetbrains-mono-latin-700-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(../fonts/ibm-plex-sans-latin-400-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(../fonts/ibm-plex-sans-latin-500-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(../fonts/ibm-plex-sans-latin-600-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:700;src:url(../fonts/ibm-plex-sans-latin-700-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.yii-debug .yii-debug-event-controls{margin-block:var(--yii-debug-space-4);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-event-groups{align-items:center;gap:var(--yii-debug-space-2);margin-block:var(--yii-debug-space-4);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-event-group{align-items:center;gap:var(--yii-debug-space-2);min-height:var(--yii-debug-control-min-size);padding:var(--yii-debug-space-1) var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);overflow-wrap:anywhere;display:inline-flex}.yii-debug .yii-debug-event-item>summary{cursor:pointer;list-style:none}.yii-debug .yii-debug-event-item>summary:focus-visible{outline:2px solid var(--yii-debug-panel-primary);outline-offset:4px;border-radius:var(--yii-debug-radius-sm)}.yii-debug :is(.yii-debug-event-clock,.yii-debug-event-identity){gap:var(--yii-debug-space-1);display:grid}.yii-debug .yii-debug-event-clock{min-width:105px}.yii-debug .yii-debug-event-time{white-space:nowrap;color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-event-identity{overflow-wrap:anywhere;min-width:0}.yii-debug .yii-debug-event-name:before{content:"+ ";color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-event-item[open] .yii-debug-event-name:before{content:"− "}.yii-debug .yii-debug-event-timing{font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-event-detail-row{display:none}.yii-debug .yii-debug-table tr:has(.yii-debug-event-item[open])+.yii-debug-event-detail-row{display:table-row}.yii-debug .yii-debug-table .yii-debug-event-detail-row>td{padding:0}.yii-debug .yii-debug-event-detail{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);background:var(--yii-debug-panel-surface-muted);white-space:normal;grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-event-detail>div{min-width:0}.yii-debug .yii-debug-event-detail-footer{gap:var(--yii-debug-space-2) var(--yii-debug-space-4);flex-wrap:wrap;grid-column:1/-1;display:flex}.yii-debug .yii-debug-event-metadata{gap:var(--yii-debug-space-2) var(--yii-debug-space-3);grid-template-columns:minmax(75px,.4fr) minmax(0,1fr);display:grid}.yii-debug .yii-debug-event-metadata dt{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-event-metadata dd{margin:0}.yii-debug .yii-debug-event-trace pre{white-space:pre-wrap;overflow-wrap:anywhere}.yii-debug :is(.yii-debug-event-context,.yii-debug-event-trace)>:last-child{margin-bottom:0}@media not (min-width:768px){.yii-debug .yii-debug-event-detail{grid-template-columns:minmax(0,1fr)}}.yii-debug .yii-debug-event-coverage>summary{min-height:var(--yii-debug-control-min-size);padding-block:var(--yii-debug-space-2);cursor:pointer}.yii-debug .yii-debug-request-hero{margin-bottom:var(--yii-debug-space-4);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);box-shadow:var(--yii-debug-shadow-sm)}.yii-debug .yii-debug-request-overview{margin-bottom:var(--yii-debug-space-4);border:var(--yii-debug-border);border-inline-start:4px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 76%, var(--yii-debug-panel-text));border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-request-overview-header{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.yii-debug .yii-debug-request-overview-identity{min-width:0}.yii-debug .yii-debug-request-hero-line{align-items:center;gap:var(--yii-debug-space-2);min-width:0;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-base);display:flex}.yii-debug .yii-debug-request-hero-method{border-radius:var(--yii-debug-radius-pill);letter-spacing:.04em;flex:none;padding:2px 10px;font-weight:700}.yii-debug .yii-debug-request-hero-url{min-width:0;color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.yii-debug .yii-debug-request-hero-meta{align-items:center;gap:6px var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);flex-wrap:wrap;margin-top:6px;display:flex}.yii-debug .yii-debug-request-hero-meta:empty{display:none}.yii-debug .yii-debug-request-hero-meta-item{align-items:baseline;gap:var(--yii-debug-space-1);display:inline-flex}.yii-debug .yii-debug-request-hero-meta-label{font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;font-size:.625rem;font-weight:700}.yii-debug .yii-debug-request-hero-meta-value{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-request-overview-status{text-align:right;min-width:72px}.yii-debug .yii-debug-request-overview-metrics{border-block:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);grid-template-columns:minmax(0,1fr) minmax(0,2fr) auto;margin:0;display:grid}.yii-debug .yii-debug-request-overview-metric{min-width:0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4)}.yii-debug .yii-debug-request-overview-metric+:is(.yii-debug .yii-debug-request-overview-metric){border-inline-start:var(--yii-debug-border)}.yii-debug .yii-debug-request-overview-metric dt{color:var(--yii-debug-panel-muted);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-request-overview-metric dd{align-items:center;gap:var(--yii-debug-space-2);min-width:0;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);overflow-wrap:anywhere;flex-wrap:wrap;margin:0;font-weight:600;display:flex}.yii-debug .yii-debug-request-overview-meta{align-items:center;gap:var(--yii-debug-space-2) var(--yii-debug-space-5);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-request-overview-config{align-items:center;gap:var(--yii-debug-space-2);flex-wrap:wrap;margin-inline-start:auto;display:inline-flex}.yii-debug .yii-debug-request-overview-meta-item{flex-direction:column;align-items:flex-start;min-width:0;display:inline-flex}.yii-debug .yii-debug-request-overview-meta-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-request-overview-tag{max-width:34ch;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.yii-debug .yii-debug-request-routing-error{border-width:1px 0 0 4px;border-radius:0;margin:0}.yii-debug .yii-debug-request-routing-error p{margin:0}.yii-debug .yii-debug-request-tabs{min-width:0}.yii-debug .yii-debug-request-tabs>.yii-debug-tabs{scrollbar-width:thin;flex-wrap:nowrap;overflow-x:auto}.yii-debug .yii-debug-request-tabs .yii-debug-tab{flex:none}.yii-debug .yii-debug-request-tabs .yii-debug-empty-state{padding:var(--yii-debug-space-4)}.yii-debug .yii-debug-request-tabs .yii-debug-empty-state h2{font-size:var(--yii-debug-fs-base);margin:0}.yii-debug .yii-debug-diagnostic-shell{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-diagnostic-header{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);display:flex}.yii-debug .yii-debug-diagnostic-heading-copy{align-items:baseline;gap:var(--yii-debug-space-2) var(--yii-debug-space-3);flex-wrap:wrap;min-width:0;display:flex}.yii-debug .yii-debug-diagnostic-heading-copy h2{margin:0}.yii-debug .yii-debug-diagnostic-counts{align-items:center;gap:var(--yii-debug-space-2);display:inline-flex}.yii-debug .yii-debug-diagnostic-count,.yii-debug .yii-debug-diagnostic-total,.yii-debug .yii-debug-header-lane-count,.yii-debug .yii-debug-server-group-count{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums}.yii-debug .yii-debug-diagnostic-count{align-items:baseline;gap:var(--yii-debug-space-1);display:inline-flex}.yii-debug .yii-debug-diagnostic-count+.yii-debug-diagnostic-count:before{width:1px;height:12px;background:var(--yii-debug-panel-border-strong);content:"";margin-inline-end:var(--yii-debug-space-1)}.yii-debug .yii-debug-diagnostic-count-value{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-diagnostic-filter{background:var(--yii-debug-panel-surface);width:min(280px,42%);max-width:none}.yii-debug .yii-debug-header-lanes{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-header-lane{min-width:0;position:relative}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane{border-inline-start:2px solid color-mix(in srgb, var(--yii-debug-panel-primary) 36%, var(--yii-debug-panel-border))}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane:before{z-index:1;top:25px;border:2px solid var(--yii-debug-panel-surface);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-primary);content:"";width:8px;height:8px;position:absolute;inset-inline-start:-5px}.yii-debug .yii-debug-header-lane-header{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);min-height:58px;padding:10px var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);display:flex}.yii-debug .yii-debug-header-lane-header h3{font-size:var(--yii-debug-fs-base);margin:1px 0 0}.yii-debug .yii-debug-header-direction{color:var(--yii-debug-panel-primary-strong);font-family:var(--yii-debug-font-mono);letter-spacing:.04em;font-size:.6875rem;font-weight:700;display:block}.yii-debug .yii-debug-diagnostic-ledger{margin:0}.yii-debug .yii-debug-diagnostic-row{border-top:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 58%, transparent);grid-template-columns:minmax(132px,.72fr) minmax(0,1.28fr);align-items:start;display:grid}.yii-debug .yii-debug-diagnostic-row:first-child{border-top:0}.yii-debug .yii-debug-diagnostic-row:hover{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-diagnostic-row dt,.yii-debug .yii-debug-diagnostic-row dd{min-width:0;padding:10px var(--yii-debug-space-4);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);line-height:1.5}.yii-debug .yii-debug-diagnostic-row dt{color:var(--yii-debug-panel-muted);overflow-wrap:anywhere;font-weight:600;overflow:hidden}.yii-debug .yii-debug-diagnostic-row dd{border-inline-start:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 45%, transparent);color:var(--yii-debug-panel-text);overflow-wrap:anywhere;white-space:pre-wrap;margin:0}.yii-debug .yii-debug-header-ledger .yii-debug-diagnostic-row:nth-child(2n),.yii-debug .yii-debug-server-ledger .yii-debug-diagnostic-row:nth-child(2n){background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 72%)}:is(.yii-debug .yii-debug-header-ledger .yii-debug-diagnostic-row:nth-child(2n),.yii-debug .yii-debug-server-ledger .yii-debug-diagnostic-row:nth-child(2n)):hover{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-diagnostic-values{gap:6px;display:grid}.yii-debug .yii-debug-diagnostic-value-count{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:.6875rem}.yii-debug .yii-debug-diagnostic-value-list{gap:var(--yii-debug-space-1);margin:0;padding:0;list-style:none;display:grid}.yii-debug .yii-debug-diagnostic-value-list li+li{padding-top:var(--yii-debug-space-1);border-top:1px dashed var(--yii-debug-panel-border)}.yii-debug .yii-debug-diagnostic-empty-value,.yii-debug .yii-debug-diagnostic-lane-empty,.yii-debug .yii-debug-diagnostic-empty-state,.yii-debug .yii-debug-diagnostic-filter-empty{color:var(--yii-debug-panel-muted);font-style:italic}.yii-debug .yii-debug-diagnostic-lane-empty,.yii-debug .yii-debug-diagnostic-empty-state,.yii-debug .yii-debug-diagnostic-filter-empty{padding:var(--yii-debug-space-4);margin:0}.yii-debug .yii-debug-diagnostic-filter-empty{border-top:var(--yii-debug-border);text-align:center}.yii-debug .yii-debug-server-group-body>.yii-debug-mini-toolbar{padding:var(--yii-debug-space-2) var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);margin:0}.yii-debug .yii-debug-server-group-body>.yii-debug-mini-toolbar .yii-debug-filter-input{max-width:100%}.yii-debug .yii-debug-server-additional+.yii-debug-server-group,.yii-debug .yii-debug-server-group+.yii-debug-server-group{border-top:var(--yii-debug-border)}.yii-debug .yii-debug-server-group-summary{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);min-height:44px;padding:9px var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);display:flex}.yii-debug .yii-debug-server-group-summary .yii-debug-server-group-title{font-size:var(--yii-debug-fs-sm);margin:0;font-weight:700}.yii-debug .yii-debug-server-group-summary{cursor:pointer;list-style:none}.yii-debug .yii-debug-server-group-summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-server-group-summary:hover,.yii-debug .yii-debug-server-group-summary:focus-visible{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-server-group-identity{align-items:baseline;gap:var(--yii-debug-space-2);display:inline-flex}.yii-debug .yii-debug-server-group:not([open])>.yii-debug-server-group-summary{border-bottom:0}.yii-debug .yii-debug-server-group-summary .yii-debug-disclosure-hint{margin-inline-start:auto}.yii-debug .yii-debug-diagnostic-row[hidden],.yii-debug .yii-debug-header-lane[hidden],.yii-debug .yii-debug-server-group[hidden],.yii-debug .yii-debug-diagnostic-filter-empty[hidden]{display:none}@container yii-debug-main (width<=900px){.yii-debug .yii-debug-header-lanes{grid-template-columns:minmax(0,1fr)}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane{border-top:2px solid color-mix(in srgb, var(--yii-debug-panel-primary) 36%, var(--yii-debug-panel-border));border-inline-start:0}.yii-debug .yii-debug-header-lane+.yii-debug-header-lane:before{top:-5px;inset-inline-start:var(--yii-debug-space-4)}}@container yii-debug-main (width<=560px){.yii-debug .yii-debug-diagnostic-header{flex-direction:column;align-items:stretch}.yii-debug .yii-debug-diagnostic-filter{width:100%}.yii-debug .yii-debug-diagnostic-row{grid-template-columns:minmax(0,1fr)}.yii-debug .yii-debug-diagnostic-row dt{padding-bottom:var(--yii-debug-space-1)}.yii-debug .yii-debug-diagnostic-row dd{border-inline-start:0;padding-top:0}}.yii-debug .yii-debug-route-resolution{margin:var(--yii-debug-space-3) var(--yii-debug-space-4) var(--yii-debug-space-4)}.yii-debug .yii-debug-route-resolution-message{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm)}.yii-debug .yii-debug-route-trace{min-width:560px}.yii-debug .yii-debug-table.yii-debug-route-trace thead th,.yii-debug .yii-debug-table.yii-debug-route-trace tbody td{text-align:center}.yii-debug .yii-debug-table.yii-debug-route-trace thead th:nth-child(2),.yii-debug .yii-debug-table.yii-debug-route-trace tbody td:nth-child(2){text-align:start}.yii-debug .yii-debug-table.yii-debug-route-trace thead th:first-child,.yii-debug .yii-debug-table.yii-debug-route-trace tbody td:first-child{width:56px}.yii-debug .yii-debug-table.yii-debug-route-trace thead th:last-child,.yii-debug .yii-debug-table.yii-debug-route-trace tbody td:last-child{width:160px}.yii-debug{background:radial-gradient(circle at top left, var(--yii-debug-panel-bg-accent), transparent 36rem), var(--yii-debug-panel-bg);min-height:100vh;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-base);margin:0;padding:0;line-height:1.5}.yii-debug *,.yii-debug :before,.yii-debug :after{box-sizing:border-box}.yii-debug h1,.yii-debug h2,.yii-debug h3,.yii-debug h4,.yii-debug h5,.yii-debug h6{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-text);letter-spacing:-.01em;font-weight:700;line-height:1.25}.yii-debug h1{font-size:var(--yii-debug-fs-2xl)}.yii-debug h2{font-size:var(--yii-debug-fs-xl)}.yii-debug h3{font-size:var(--yii-debug-fs-lg)}.yii-debug h4,.yii-debug h5,.yii-debug h6{font-size:var(--yii-debug-fs-base)}.yii-debug p,.yii-debug ul,.yii-debug ol,.yii-debug dl,.yii-debug figure{margin:0 0 var(--yii-debug-space-3)}.yii-debug ul,.yii-debug ol{padding-left:var(--yii-debug-space-5)}.yii-debug strong,.yii-debug b{font-weight:600}.yii-debug a{color:var(--yii-debug-panel-link);text-decoration:none;transition:color .12s}.yii-debug a:hover,.yii-debug a:focus{color:var(--yii-debug-panel-link-hover);text-decoration:underline}.yii-debug code,.yii-debug kbd,.yii-debug samp{border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-code-bg);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-variant-ligatures:none;padding:.1em .35em;font-size:.875em}.yii-debug pre{margin:0 0 var(--yii-debug-space-3);padding:var(--yii-debug-space-3);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-code-bg);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);font-variant-ligatures:none;line-height:1.4;overflow-x:auto}.yii-debug pre code{font-size:inherit;background:0 0;padding:0}.yii-debug :focus-visible{outline:3px solid var(--yii-debug-focus-ring);outline-offset:3px}.yii-debug .yii-debug-page{max-width:1680px;padding:var(--yii-debug-space-4);margin:0 auto}.yii-debug .yii-debug-layout{gap:var(--yii-debug-space-4);grid-template-columns:240px 1fr;align-items:start;display:grid}@media (max-width:959px){.yii-debug .yii-debug-layout{grid-template-columns:1fr}}@media (min-width:960px){.yii-debug .yii-debug-sidebar{top:var(--yii-debug-space-4);max-height:calc(100vh - var(--yii-debug-space-5));position:sticky;overflow-y:auto}}.yii-debug .yii-debug-main{min-width:0;container:yii-debug-main/inline-size}.yii-debug .yii-debug-main>*+:is(h2,.yii-debug-disclosure),.yii-debug .yii-debug-tab-panel>.yii-debug-table-wrap+.yii-debug-disclosure{margin-top:var(--yii-debug-space-5)}.yii-debug .yii-debug-main>.yii-debug-sr-only:first-child+:is(h2,.yii-debug-disclosure){margin-top:0}.yii-debug .yii-debug-mini-toolbar{justify-content:flex-end;align-items:center;gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-4);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-side-section{gap:var(--yii-debug-space-2);margin:0 0 var(--yii-debug-space-3);padding:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);flex-direction:column;display:flex}.yii-debug .yii-debug-side-section-title{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-request-nav-row{width:100%;margin-top:var(--yii-debug-space-2);grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.yii-debug .yii-debug-btn-icon{justify-content:center;align-items:center;padding:4px 0;font-size:16px;line-height:1;display:inline-flex}.yii-debug .yii-debug-btn-icon svg{width:1em;height:1em}.yii-debug .yii-debug-request-nav .yii-debug-btn{justify-content:center;width:100%}.yii-debug .yii-debug-brand-bar{align-items:center;gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:linear-gradient(180deg, color-mix(in srgb, var(--yii-debug-panel-surface) 96%, transparent), color-mix(in srgb, var(--yii-debug-panel-surface-muted) 88%, transparent));box-shadow:var(--yii-debug-shadow-sm);flex-wrap:wrap;padding:8px 12px;display:flex}.yii-debug .yii-debug-brand-chip{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-surface), transparent 30%);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);min-height:var(--yii-debug-control-min-size);align-items:center;gap:8px;padding:6px 12px;text-decoration:none;transition:border-color .14s,transform .14s,box-shadow .14s;display:inline-flex}.yii-debug a.yii-debug-brand-chip:hover,.yii-debug a.yii-debug-brand-chip:focus{border-color:var(--yii-debug-panel-primary);box-shadow:var(--yii-debug-shadow-sm);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-brand-icon{flex:none;justify-content:center;align-items:center;width:22px;height:22px;display:inline-flex}.yii-debug .yii-debug-brand-icon svg{width:100%;height:100%}.yii-debug .yii-debug-brand-chip-php .yii-debug-brand-icon{width:32px}.yii-debug .yii-debug-brand-chip-php .yii-debug-brand-icon svg{fill:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-brand-label{color:var(--yii-debug-panel-muted);letter-spacing:.06em;text-transform:uppercase;font-weight:600}.yii-debug .yii-debug-brand-value{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-brand-chip-mem{margin-left:auto}.yii-debug .yii-debug-brand-chip-config{border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);text-decoration:none;transition:transform .14s,border-color .14s,color .14s,background-color .14s}.yii-debug .yii-debug-brand-chip-config .yii-debug-brand-icon{justify-content:center;align-items:center;width:14px;height:14px;transition:transform .24s;display:inline-flex}.yii-debug .yii-debug-brand-chip-config .yii-debug-brand-icon svg{width:100%;height:100%}.yii-debug .yii-debug-brand-chip-config:hover,.yii-debug .yii-debug-brand-chip-config:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);color:var(--yii-debug-panel-primary-strong);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-brand-chip-config:hover .yii-debug-brand-icon,.yii-debug .yii-debug-brand-chip-config:focus-visible .yii-debug-brand-icon{transform:rotate(45deg)}.yii-debug .yii-debug-brand-chip-config.is-disabled{opacity:.5;cursor:default;pointer-events:none}.yii-debug .yii-debug-brand-chip-config{margin-left:auto}.yii-debug .yii-debug-brand-bar:has(.yii-debug-brand-chip-mem) .yii-debug-brand-chip-config{margin-left:0}.yii-debug .yii-debug-brand-chip-theme{border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);cursor:pointer;padding:6px 10px;transition:transform .14s,border-color .14s,color .14s,background-color .14s}.yii-debug .yii-debug-brand-chip-theme:hover,.yii-debug .yii-debug-brand-chip-theme:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);color:var(--yii-debug-panel-primary-strong);transform:translateY(-1px)}.yii-debug .yii-debug-brand-chip-theme .yii-debug-brand-icon{justify-content:center;align-items:center;width:16px;height:16px;transition:transform .24s;display:inline-flex}.yii-debug .yii-debug-brand-chip-theme .yii-debug-brand-icon svg{width:100%;height:100%}.yii-debug .yii-debug-brand-chip-theme:hover .yii-debug-brand-icon{transform:rotate(20deg)}.yii-debug .yii-debug-snapshot-line{min-width:0;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);align-items:baseline;gap:6px;display:flex}.yii-debug .yii-debug-snapshot-method{color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-primary-strong)) 80%, var(--yii-debug-panel-text));flex:none;font-weight:700}.yii-debug .yii-debug-snapshot-url{min-width:0;color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;overflow:hidden}.yii-debug .yii-debug-snapshot-meta{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);align-items:center;gap:6px;display:flex}.yii-debug .yii-debug-snapshot-status{border-radius:var(--yii-debug-radius-pill);padding:1px 6px;font-weight:700;display:inline-block}.yii-debug .yii-debug-snapshot-tag{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);padding:0 6px}.yii-debug .yii-debug-request-overview-status-value{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-lg);letter-spacing:-.03em;padding:3px 9px;line-height:1.2}.yii-debug .yii-debug-panel-heading-eyebrow{color:var(--yii-debug-panel-muted);letter-spacing:.09em;text-transform:uppercase;margin-bottom:5px;font-size:.6875rem;font-weight:700;line-height:1.2;display:block}.yii-debug .yii-debug-request-overview-flag,.yii-debug .yii-debug-panel-heading-kind{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-pill);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.07em;text-transform:uppercase;padding:2px 8px;font-size:.625rem;font-weight:700;line-height:1.4}.yii-debug .yii-debug-panel-heading{justify-content:space-between;align-items:flex-end;gap:var(--yii-debug-space-3);margin:var(--yii-debug-space-5) 0 var(--yii-debug-space-3);padding-bottom:var(--yii-debug-space-2);border-bottom:var(--yii-debug-border);display:flex}.yii-debug .yii-debug-panel-heading-copy{min-width:0}.yii-debug .yii-debug-panel-heading-copy h2{margin:0}.yii-debug .yii-debug-panel-heading-kind{flex:none;margin-bottom:2px}.yii-debug pre.yii-debug-panel-payload{min-height:180px;padding:var(--yii-debug-space-4);border:var(--yii-debug-border);background:linear-gradient(90deg, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%), transparent 42%), var(--yii-debug-panel-code-bg);margin-bottom:0;line-height:1.55}@media (max-width:640px){.yii-debug .yii-debug-request-overview-header{gap:var(--yii-debug-space-3);grid-template-columns:minmax(0,1fr)}.yii-debug .yii-debug-request-overview-status{align-items:center;gap:var(--yii-debug-space-2);text-align:left;display:flex}.yii-debug .yii-debug-request-overview-metrics{grid-template-columns:1fr}.yii-debug .yii-debug-request-overview-metric+.yii-debug-request-overview-metric{border-block-start:var(--yii-debug-border);border-inline-start:0}.yii-debug .yii-debug-request-overview-meta-item{max-width:100%}.yii-debug .yii-debug-panel-heading{align-items:flex-start}}.yii-debug .yii-debug-section-header{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);margin:var(--yii-debug-space-4) 0 var(--yii-debug-space-2);display:flex}.yii-debug .yii-debug-section-header h2,.yii-debug .yii-debug-section-header h3{margin:0}.yii-debug .yii-debug-filter-input{width:240px;max-width:50%;padding:4px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font:inherit;flex:none}.yii-debug .yii-debug-filter-input::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-filter-input:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-stack>*+*{margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-card{padding:var(--yii-debug-panel-padding);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-md)}.yii-debug .yii-debug-nav{padding:var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);margin:0}.yii-debug .yii-debug-nav ul{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-nav-group{margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-nav-group>.yii-debug-nav{box-shadow:none;background:0 0;border:0;border-radius:0;padding:0}.yii-debug .yii-debug-nav-link{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-2);border-radius:var(--yii-debug-radius-md);color:var(--yii-debug-panel-text);padding:8px 12px;font-weight:600;text-decoration:none;transition:background .12s,color .12s;display:flex}.yii-debug .yii-debug-nav-link:after{content:"›";color:var(--yii-debug-panel-muted);font-size:1.1em;line-height:1}.yii-debug .yii-debug-nav-link:hover,.yii-debug .yii-debug-nav-link:focus{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-nav-link[aria-current=page]{background:var(--yii-debug-primary-bg);color:var(--yii-debug-on-primary)}:is(.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-nav-link[aria-current=page]):after{color:inherit}.yii-debug .yii-debug-btn{justify-content:center;align-items:center;gap:var(--yii-debug-space-1);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);min-height:32px;color:var(--yii-debug-panel-text);font-family:inherit;font-size:var(--yii-debug-fs-sm);letter-spacing:0;text-transform:none;cursor:pointer;padding:6px 14px;font-weight:600;line-height:1;text-decoration:none;transition:border-color .12s,background .12s,color .12s,transform .12s,box-shadow .12s;display:inline-flex}.yii-debug .yii-debug-btn:hover,.yii-debug .yii-debug-btn:focus{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 30%);background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-btn:active{transform:translateY(0)}.yii-debug .yii-debug-btn[disabled],.yii-debug .yii-debug-btn.is-disabled{opacity:.55;pointer-events:none;transform:none}.yii-debug .yii-debug-btn-primary{background:var(--yii-debug-primary-bg);color:var(--yii-debug-on-primary);border-color:#0000}.yii-debug .yii-debug-btn-primary:is(:hover,:focus){background:var(--yii-debug-panel-primary-strong);color:var(--yii-debug-on-primary)}.yii-debug .yii-debug-btn-ghost{border-color:var(--yii-debug-panel-border);background:0 0}.yii-debug .yii-debug-btn-sm{min-height:28px;font-size:var(--yii-debug-fs-xs);padding:4px 10px}.yii-debug .yii-debug-badge{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-xs);letter-spacing:.01em;align-items:center;padding:2px 10px;font-weight:600;line-height:1.4;display:inline-flex}.yii-debug .yii-debug-badge-success{background:var(--yii-debug-success);color:var(--yii-debug-on-success)}.yii-debug .yii-debug-badge-info{background:var(--yii-debug-info);color:var(--yii-debug-on-info)}.yii-debug .yii-debug-badge-warning{background:var(--yii-debug-warning);color:var(--yii-debug-on-warning)}.yii-debug .yii-debug-badge-danger{background:var(--yii-debug-danger);color:var(--yii-debug-on-danger)}.yii-debug .yii-debug-badge-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-verb-get{--yii-debug-hue:var(--yii-debug-verb-get)}.yii-debug .yii-debug-verb-post{--yii-debug-hue:var(--yii-debug-verb-post)}.yii-debug .yii-debug-verb-put{--yii-debug-hue:var(--yii-debug-verb-put)}.yii-debug .yii-debug-verb-delete{--yii-debug-hue:var(--yii-debug-verb-delete)}.yii-debug .yii-debug-verb-other{--yii-debug-hue:var(--yii-debug-verb-other)}.yii-debug .yii-debug-status-2xx{--yii-debug-hue:var(--yii-debug-status-2xx)}.yii-debug .yii-debug-status-3xx{--yii-debug-hue:var(--yii-debug-status-3xx)}.yii-debug .yii-debug-status-4xx{--yii-debug-hue:var(--yii-debug-status-4xx)}.yii-debug .yii-debug-status-5xx{--yii-debug-hue:var(--yii-debug-status-5xx)}.yii-debug .yii-debug-status-none{--yii-debug-hue:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-level-error{--yii-debug-hue:var(--yii-debug-level-error)}.yii-debug .yii-debug-level-warning{--yii-debug-hue:var(--yii-debug-level-warning)}.yii-debug .yii-debug-level-info{--yii-debug-hue:var(--yii-debug-level-info)}.yii-debug .yii-debug-level-trace{--yii-debug-hue:var(--yii-debug-level-trace)}.yii-debug .yii-debug-level-profile{--yii-debug-hue:var(--yii-debug-level-profile)}.yii-debug .yii-debug-level-other{--yii-debug-hue:var(--yii-debug-level-other)}.yii-debug .yii-debug-request-hero-method,.yii-debug .yii-debug-snapshot-status,.yii-debug .yii-debug-hero-status>.yii-debug-badge,.yii-debug .yii-debug-level-chip,.yii-debug .yii-debug-db-type,.yii-debug .yii-debug-dump-type,.yii-debug .yii-debug-badge:is(.yii-debug-status-2xx,.yii-debug-status-3xx,.yii-debug-status-4xx,.yii-debug-status-5xx,.yii-debug-status-none){border:1px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 65%);background:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 90%);color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 80%, var(--yii-debug-panel-text))}.yii-debug .yii-debug-method{color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 80%, var(--yii-debug-panel-text));font-family:var(--yii-debug-font-mono);letter-spacing:.02em;font-weight:700}.yii-debug .yii-debug-level-chip{border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;padding:1px 8px;font-size:.7rem;font-weight:700;display:inline-block}.yii-debug .yii-debug-callout{align-items:flex-start;gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-left:4px solid var(--yii-debug-panel-border-strong);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);display:flex}.yii-debug .yii-debug-callout-info{border-left-color:var(--yii-debug-info)}.yii-debug .yii-debug-callout-success{border-left-color:var(--yii-debug-success)}.yii-debug .yii-debug-callout-warning{border-left-color:var(--yii-debug-warning)}.yii-debug .yii-debug-callout-danger{border-left-color:var(--yii-debug-danger)}.yii-debug .yii-debug-table-wrap{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);overflow-x:auto}.yii-debug .yii-debug-table{border-collapse:separate;border-spacing:0;width:100%;min-width:640px;color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);background:0 0;margin:0}.yii-debug .yii-debug-table thead th,.yii-debug .yii-debug-table thead td{border-bottom:var(--yii-debug-border);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 20%);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);letter-spacing:.03em;text-align:left;text-transform:uppercase;vertical-align:middle;padding:10px 12px;font-weight:700}.yii-debug .yii-debug-table thead th a{color:var(--yii-debug-panel-link);font-weight:700;text-decoration:none}.yii-debug .yii-debug-table thead th a:hover,.yii-debug .yii-debug-table thead th a:focus{color:var(--yii-debug-panel-link-hover);text-decoration:none}.yii-debug .yii-debug-table tbody td,.yii-debug .yii-debug-table tbody th{padding:var(--yii-debug-row-padding-block) 12px;border-top:1px solid var(--yii-debug-panel-border);vertical-align:top;overflow-wrap:anywhere}.yii-debug .yii-debug-table tbody th{white-space:nowrap}.yii-debug .yii-debug-table tbody tr:first-child td,.yii-debug .yii-debug-table tbody tr:first-child th{border-top:0}.yii-debug .yii-debug-table tbody tr:nth-child(2n) td,.yii-debug .yii-debug-table tbody tr:nth-child(2n) th{background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 50%)}.yii-debug .yii-debug-table tbody tr:hover td,.yii-debug .yii-debug-table tbody tr:hover th{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-table tfoot td{border-top:var(--yii-debug-border);color:var(--yii-debug-panel-muted);padding:10px 12px}.yii-debug .yii-debug-row-success td,.yii-debug .yii-debug-row-success th{background:color-mix(in srgb, var(--yii-debug-success), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-row-info td,.yii-debug .yii-debug-row-info th{background:color-mix(in srgb, var(--yii-debug-info), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-row-warning td,.yii-debug .yii-debug-row-warning th{background:color-mix(in srgb, var(--yii-debug-warning), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-row-danger td,.yii-debug .yii-debug-row-danger th{background:color-mix(in srgb, var(--yii-debug-danger), var(--yii-debug-panel-surface) 86%)!important}.yii-debug .yii-debug-grid{margin-bottom:var(--yii-debug-space-4)}.yii-debug .yii-debug-grid>.summary{margin:0 0 var(--yii-debug-space-2);padding:0 var(--yii-debug-space-1);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm)}.yii-debug .yii-debug-grid>.summary b{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-grid>.empty{padding:var(--yii-debug-space-5);color:var(--yii-debug-panel-muted);text-align:center;font-style:italic}.yii-debug .yii-debug-grid td.yii-debug-cell-nowrap,.yii-debug .yii-debug-grid td.yii-debug-cell-numeric,.yii-debug .yii-debug-grid td.yii-debug-cell-pill,.yii-debug .yii-debug-table td.yii-debug-cell-nowrap,.yii-debug .yii-debug-table td.yii-debug-cell-numeric,.yii-debug .yii-debug-table td.yii-debug-cell-pill{white-space:nowrap}.yii-debug .yii-debug-grid td.yii-debug-cell-fqcn{overflow-wrap:normal}.yii-debug .yii-debug-disclosure{margin-bottom:var(--yii-debug-space-5);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);overflow:hidden}.yii-debug .yii-debug-disclosure[open]>.yii-debug-disclosure-summary{border-bottom:var(--yii-debug-border)}.yii-debug .yii-debug-disclosure-summary{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);padding:10px var(--yii-debug-space-4);cursor:pointer;list-style:none;transition:background-color .12s;display:flex}.yii-debug .yii-debug-disclosure-summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-disclosure-summary:hover,.yii-debug .yii-debug-disclosure-summary:focus-visible{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-disclosure-title,.yii-debug .yii-debug-request-section-title,.yii-debug .yii-debug-diagnostic-heading-copy h2{color:var(--yii-debug-panel-primary-strong);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.12em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-disclosure-hint{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;transition:color .12s}.yii-debug .yii-debug-disclosure-hint [data-yii-debug-hint=expanded]{display:none}.yii-debug .yii-debug-disclosure-summary:hover .yii-debug-disclosure-hint,.yii-debug .yii-debug-disclosure-summary:focus-visible .yii-debug-disclosure-hint{color:var(--yii-debug-panel-link)}.yii-debug details[open]>summary .yii-debug-disclosure-hint [data-yii-debug-hint=collapsed]{display:none}.yii-debug details[open]>summary .yii-debug-disclosure-hint [data-yii-debug-hint=expanded]{display:inline}.yii-debug .yii-debug-disclosure-body{padding:var(--yii-debug-space-4)}.yii-debug .yii-debug-disclosure-body>pre{overflow-wrap:anywhere;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);white-space:pre-wrap;margin:0;line-height:1.6}.yii-debug .yii-debug-cell-more-body{max-height:156px;position:relative;overflow:hidden}.yii-debug .yii-debug-cell-more-body:has(.yii-debug-table){max-height:420px}.yii-debug .yii-debug-cell-more-body:after{content:"";background:linear-gradient(to bottom, transparent, var(--yii-debug-panel-surface));pointer-events:none;height:32px;position:absolute;inset:auto 0 0}.yii-debug .yii-debug-cell-more.is-open .yii-debug-cell-more-body{max-height:none}.yii-debug .yii-debug-cell-more.is-open .yii-debug-cell-more-body:after{content:none}.yii-debug .yii-debug-cell-more-toggle{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);color:var(--yii-debug-panel-link);font-family:inherit;font-size:var(--yii-debug-fs-xs);cursor:pointer;background:0 0;align-items:center;margin-top:6px;padding:2px 10px;font-weight:600;display:inline-flex}.yii-debug .yii-debug-cell-more-toggle:before{content:"";width:1.25em;height:1.25em;margin-right:var(--yii-debug-space-1);background:linear-gradient(currentcolor, currentcolor) center / 8px 2px no-repeat, linear-gradient(currentcolor, currentcolor) center / 2px 8px no-repeat, var(--yii-debug-panel-bg-accent);border-radius:50%;display:inline-block}.yii-debug .yii-debug-cell-more.is-open .yii-debug-cell-more-toggle:before{background:linear-gradient(currentcolor, currentcolor) center / 8px 2px no-repeat, var(--yii-debug-panel-bg-accent)}.yii-debug .yii-debug-cell-more-toggle:hover,.yii-debug .yii-debug-cell-more-toggle:focus{background:var(--yii-debug-panel-bg-accent);border-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-grid td.yii-debug-cell-mono{font-family:var(--yii-debug-font-mono)}.yii-debug td.yii-debug-cell-payload{overflow-wrap:anywhere;width:100%}.yii-debug .yii-debug-grid td.yii-debug-cell-numeric{font-variant-numeric:tabular-nums;text-align:right}.yii-debug a.asc:after,.yii-debug a.desc:after{content:"↑";opacity:.78;margin-left:4px;font-size:.85em}.yii-debug a.desc:after{content:"↓"}.yii-debug .yii-debug-pager{gap:var(--yii-debug-space-1);margin:var(--yii-debug-space-3) 0 0;flex-wrap:wrap;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-pager-item{display:inline-flex}.yii-debug .yii-debug-pager-link,.yii-debug .yii-debug-pager>li>:is(a,span){border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);min-width:40px;min-height:40px;color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-sm);justify-content:center;align-items:center;padding:0 10px;font-weight:600;text-decoration:none;transition:border-color .12s,background .12s,color .12s;display:inline-flex}:is(.yii-debug .yii-debug-pager-link,.yii-debug .yii-debug-pager>li>:is(a,span)):hover,:is(.yii-debug .yii-debug-pager-link,.yii-debug .yii-debug-pager>li>:is(a,span)):focus{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 30%);background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover);text-decoration:none}.yii-debug .yii-debug-pager-item.is-active .yii-debug-pager-link{background:var(--yii-debug-primary-bg);color:var(--yii-debug-on-primary);cursor:default;border-color:#0000}.yii-debug .yii-debug-pager-item.is-disabled .yii-debug-pager-link{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);cursor:not-allowed;pointer-events:none}.yii-debug .yii-debug-field{margin-bottom:var(--yii-debug-space-3);flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-label{color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);font-weight:600}.yii-debug .yii-debug-input,.yii-debug .yii-debug-select{border:1px solid var(--yii-debug-panel-border-strong);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);width:100%;min-height:32px;color:var(--yii-debug-panel-text);font-family:inherit;font-size:var(--yii-debug-fs-sm);padding:6px 10px;transition:border-color .12s,box-shadow .12s}:is(.yii-debug .yii-debug-input,.yii-debug .yii-debug-select):hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), var(--yii-debug-panel-border-strong) 60%)}:is(.yii-debug .yii-debug-input,.yii-debug .yii-debug-select):focus{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 82%)}:is(.yii-debug .yii-debug-input,.yii-debug .yii-debug-select)::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-grid .filters td{border-bottom:var(--yii-debug-border);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 30%);padding:6px 12px}.yii-debug .yii-debug-grid .filters input,.yii-debug .yii-debug-grid .filters select,.yii-debug .yii-debug-grid .filters textarea{border:1px solid var(--yii-debug-panel-border-strong);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);width:100%;min-width:0;min-height:28px;color:var(--yii-debug-panel-text);font:inherit;font-size:var(--yii-debug-fs-xs);padding:4px 8px}:is(.yii-debug .yii-debug-grid .filters input,.yii-debug .yii-debug-grid .filters select,.yii-debug .yii-debug-grid .filters textarea):focus{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 84%)}.yii-debug .yii-debug-tabs{gap:var(--yii-debug-space-1);margin:0 0 var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);flex-wrap:wrap;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-tab{display:inline-flex}.yii-debug .yii-debug-tab-link{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm);border-bottom:2px solid #0000;align-items:center;padding:8px 14px;font-weight:600;text-decoration:none;transition:color .12s,border-color .12s;display:inline-flex}.yii-debug .yii-debug-tab-link:hover,.yii-debug .yii-debug-tab-link:focus{color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-tab.is-active .yii-debug-tab-link,.yii-debug .yii-debug-tab-link.is-active{border-bottom-color:var(--yii-debug-panel-primary);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-tab-panel{padding:var(--yii-debug-space-3) 0 0;display:none}.yii-debug .yii-debug-tab-panel.is-active{display:block}.yii-debug .yii-debug-since-previous{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.yii-debug .yii-debug-since-previous .yii-debug-since-previous-btn{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);min-width:24px;height:24px;color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-xs);justify-content:center;align-items:center;padding:0 6px;font-weight:700;text-decoration:none;display:inline-flex}.yii-debug .yii-debug-table-mono{min-width:0}.yii-debug .yii-debug-table-mono thead th{z-index:1;background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 10%);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.12em;padding:8px 16px;position:sticky;top:0}.yii-debug .yii-debug-table-mono tbody tr{transition:background-color .14s}.yii-debug .yii-debug-table-mono tbody tr:hover td,.yii-debug .yii-debug-table-mono tbody tr:hover th{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-table-mono tbody tr:hover th{box-shadow:inset 3px 0 0 var(--yii-debug-panel-primary);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-table-mono tbody th,.yii-debug .yii-debug-table-mono tbody td{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);padding:12px 16px;line-height:1.55}.yii-debug .yii-debug-table-mono tbody th{width:1%;min-width:120px;max-width:220px;color:var(--yii-debug-panel-muted);letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;font-weight:500;transition:color .14s,box-shadow .14s;overflow:hidden}.yii-debug .yii-debug-table-mono tbody td{color:var(--yii-debug-panel-text);word-break:normal;overflow-wrap:anywhere}.yii-debug .yii-debug-table-mono tbody tr+tr td,.yii-debug .yii-debug-table-mono tbody tr+tr th{border-top:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 55%, transparent)}.yii-debug .yii-debug-table-mono tbody tr:nth-child(2n) td,.yii-debug .yii-debug-table-mono tbody tr:nth-child(2n) th{background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 70%)}.yii-debug .yii-debug-table-overview tbody th{width:200px;min-width:160px;max-width:200px}.yii-debug .yii-debug-panel-group+.yii-debug-panel-group{margin-top:var(--yii-debug-space-6)}.yii-debug .yii-debug-table-wrap:has(>.yii-debug-table-mono){border-radius:var(--yii-debug-radius-md);box-shadow:var(--yii-debug-shadow-sm), inset 0 0 0 1px color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);overflow:clip}.yii-debug .yii-debug-table-mono{min-width:0}.yii-debug .yii-debug-table-mono tbody th{overflow-wrap:anywhere;white-space:normal}.yii-debug .yii-debug-table-userswitch{width:auto;min-width:100%}.yii-debug .yii-debug-table-userswitch thead th,.yii-debug .yii-debug-table-userswitch tbody td,.yii-debug .yii-debug-table-userswitch tbody th{overflow-wrap:normal;white-space:nowrap}.yii-debug .yii-debug-table-userswitch tbody tr.filters td input{width:100%;min-width:0}.yii-debug .yii-debug-col-userswitch-id{font-variant-numeric:tabular-nums;min-width:10ch}.yii-debug .yii-debug-col-userswitch-username{min-width:14ch}.yii-debug .yii-debug-col-userswitch-email{min-width:24ch}.yii-debug .yii-debug-col-userswitch-status{text-align:center;min-width:8ch}.yii-debug .yii-debug-col-userswitch-timestamp{font-variant-numeric:tabular-nums;min-width:18ch}.yii-debug .yii-debug-table-pointer tbody tr{cursor:pointer;transition:background-color .12s}.yii-debug .yii-debug-table-pointer tbody tr:hover{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 86%)}.yii-debug .yii-debug-sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.yii-debug .yii-debug-table-empty{padding:var(--yii-debug-space-4);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;justify-content:center;align-items:center;gap:10px;margin:0;display:flex}.yii-debug .yii-debug-table-empty:before{content:"";opacity:.5;border:1.5px solid;border-radius:50%;width:8px;height:8px}.yii-debug .yii-debug-grid-summary{align-items:center;gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);letter-spacing:.06em;text-transform:uppercase;flex-wrap:wrap;display:flex}.yii-debug .yii-debug-grid-summary strong{color:var(--yii-debug-panel-primary-strong);letter-spacing:0;text-transform:none;margin-right:.35em;font-weight:700}.yii-debug .yii-debug-grid-summary-sep{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-grid-summary-stat-warn{--yii-debug-hue:var(--yii-debug-level-warning)}.yii-debug .yii-debug-grid-summary-stat-danger{--yii-debug-hue:var(--yii-debug-level-error)}.yii-debug .yii-debug-grid-summary-stat-info{--yii-debug-hue:var(--yii-debug-level-info)}.yii-debug .yii-debug-grid-summary-stat-trace{--yii-debug-hue:var(--yii-debug-level-trace)}.yii-debug .yii-debug-grid-summary-stat-warn strong{color:var(--yii-debug-warning)}.yii-debug .yii-debug-grid-summary-stat-danger strong{color:var(--yii-debug-danger)}.yii-debug .yii-debug-grid-summary-stat-2xx{--yii-debug-hue:var(--yii-debug-status-2xx)}.yii-debug .yii-debug-grid-summary-stat-3xx{--yii-debug-hue:var(--yii-debug-status-3xx)}.yii-debug .yii-debug-grid-summary-stat-4xx{--yii-debug-hue:var(--yii-debug-status-4xx)}.yii-debug .yii-debug-grid-summary-stat-5xx{--yii-debug-hue:var(--yii-debug-status-5xx)}.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx){border:1px solid color-mix(in srgb, var(--yii-debug-hue), transparent 65%);border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-hue), transparent 90%);color:color-mix(in srgb, var(--yii-debug-hue) 80%, var(--yii-debug-panel-text));align-items:center;gap:6px;padding:2px 10px;text-decoration:none;transition:transform .14s,background-color .14s;display:inline-flex}.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx) strong{color:inherit;margin-right:0}.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx):hover,.yii-debug a:is(.yii-debug-grid-summary-stat-danger,.yii-debug-grid-summary-stat-warn,.yii-debug-grid-summary-stat-info,.yii-debug-grid-summary-stat-trace,.yii-debug-grid-summary-stat-2xx,.yii-debug-grid-summary-stat-3xx,.yii-debug-grid-summary-stat-4xx,.yii-debug-grid-summary-stat-5xx):focus-visible{background:color-mix(in srgb, var(--yii-debug-hue), transparent 80%);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-grid-footer{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-3);margin-top:var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-grid-count{margin:0}.yii-debug .yii-debug-grid-pagesize{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.yii-debug .yii-debug-grid-pagesize-label{color:var(--yii-debug-panel-muted);letter-spacing:.06em;text-transform:uppercase;font-weight:600}.yii-debug .yii-debug-grid-pagesize-select{padding:3px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);letter-spacing:0;text-transform:none;cursor:pointer}.yii-debug .yii-debug-grid-pagesize-select:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-db-type{border-radius:var(--yii-debug-radius-pill);min-width:5em;font-family:var(--yii-debug-font-mono);letter-spacing:.04em;text-align:center;text-transform:uppercase;white-space:nowrap;padding:2px 8px;font-size:.7rem;font-weight:700;display:inline-block}.yii-debug .yii-debug-db-sql{font-family:var(--yii-debug-font-mono);overflow-wrap:anywhere}.yii-debug .yii-debug-grid-db .yii-debug-table th:not(:last-child),.yii-debug .yii-debug-grid-db .yii-debug-table td:not(:last-child){white-space:nowrap}.yii-debug .yii-debug-grid-db .yii-debug-table th:last-child,.yii-debug .yii-debug-grid-db .yii-debug-table td:last-child{width:100%}.yii-debug .yii-debug-grid-db .filters select{min-width:max-content}.yii-debug .yii-debug-grid-db .filters select:focus{box-shadow:none}.yii-debug .yii-debug-grid-db .filters select:focus-visible{outline-offset:1px;outline-width:2px}.yii-debug .yii-debug-sql-kw{color:var(--yii-debug-sql-kw);font-weight:700}.yii-debug .yii-debug-sql-str{color:var(--yii-debug-sql-str)}.yii-debug .yii-debug-sql-num{color:var(--yii-debug-sql-num)}.yii-debug .yii-debug-sql-comment{color:var(--yii-debug-sql-comment);font-style:italic}.yii-debug .yii-debug-sql-param{color:var(--yii-debug-sql-param);font-weight:600}.yii-debug .yii-debug-db-explain,.yii-debug .yii-debug-db-trace{margin-top:var(--yii-debug-space-2)}.yii-debug .yii-debug-db-explain-toggle,.yii-debug .yii-debug-db-trace-toggle{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-xs);cursor:pointer;background:0 0;align-items:center;gap:6px;padding:2px 10px 2px 6px;font-weight:600;text-decoration:none;transition:background-color .12s,border-color .12s;display:inline-flex}.yii-debug .yii-debug-db-explain-toggle:hover,.yii-debug .yii-debug-db-explain-toggle:focus,.yii-debug .yii-debug-db-trace-toggle:hover,.yii-debug .yii-debug-db-trace-toggle:focus-visible{background:var(--yii-debug-panel-bg-accent);border-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-db-trace-toggle{list-style:none}.yii-debug .yii-debug-db-trace-toggle::-webkit-details-marker{display:none}.yii-debug .yii-debug-db-explain-chevron,.yii-debug .yii-debug-db-trace-chevron{width:10px;font-size:14px;line-height:1;transition:transform .16s;display:inline-block}.yii-debug .yii-debug-db-explain.is-open .yii-debug-db-explain-chevron,.yii-debug .yii-debug-db-trace[open]>.yii-debug-db-trace-toggle .yii-debug-db-trace-chevron{transform:rotate(90deg)}.yii-debug .yii-debug-db-explain.is-loading .yii-debug-db-explain-toggle{opacity:.55;pointer-events:none}.yii-debug .yii-debug-db-explain-text{margin-top:var(--yii-debug-space-2);display:none}.yii-debug .yii-debug-db-explain.is-open .yii-debug-db-explain-text{display:block}.yii-debug .yii-debug-db-explain-text.is-error{padding:var(--yii-debug-space-2) var(--yii-debug-space-3);border-left:3px solid var(--yii-debug-danger);border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-danger), transparent 92%);color:var(--yii-debug-danger);font-size:var(--yii-debug-fs-sm);font-weight:600;display:block}.yii-debug .yii-debug-db-explain-all{margin-top:var(--yii-debug-space-3);justify-content:flex-end;display:flex}.yii-debug .yii-debug-db-explain-all-toggle{white-space:nowrap;justify-content:center;min-width:104px}.yii-debug .yii-debug-explain{margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-explain-title{margin-bottom:var(--yii-debug-space-2);font-size:var(--yii-debug-fs-lg);font-weight:700}.yii-debug .yii-debug-explain-query{margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3);background:var(--yii-debug-panel-code-bg);border-radius:var(--yii-debug-radius-md);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);white-space:pre-wrap;overflow-wrap:break-word}.yii-debug .yii-debug-explain-empty{color:var(--yii-debug-panel-muted);font-style:italic}.yii-debug .yii-debug-empty-state{margin:var(--yii-debug-space-4) 0 0;padding:var(--yii-debug-space-5) var(--yii-debug-space-5);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 80%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 30%)}.yii-debug .yii-debug-empty-state h2{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-lg);font-weight:700}.yii-debug .yii-debug-empty-state p{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);line-height:1.5}.yii-debug .yii-debug-empty-state p:last-child{margin-bottom:0}.yii-debug .yii-debug-empty-state code{border-radius:var(--yii-debug-radius-sm,4px);background:var(--yii-debug-panel-code-bg);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);padding:.1em .4em}.yii-debug .yii-debug-empty-state-code{margin:0 0 var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-code-bg);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);white-space:pre-wrap;overflow-wrap:break-word;line-height:1.5}.yii-debug .yii-debug-queue-job-page{gap:var(--yii-debug-space-3);flex-direction:column;display:flex}.yii-debug .yii-debug-queue-job-head{align-items:center;gap:var(--yii-debug-space-2);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-queue-card{gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);flex-direction:column;display:flex}.yii-debug .yii-debug-queue-card-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:flex-start;display:grid}.yii-debug .yii-debug-queue-avatar{--queue-hue:210;border-radius:var(--yii-debug-radius-md);background:linear-gradient(135deg, hsl(var(--queue-hue) 72% 52%), hsl(calc(var(--queue-hue) + 28) 65% 40%));width:40px;height:40px;box-shadow:0 2px 10px hsl(var(--queue-hue) 60% 40% / 32%), inset 0 1px 0 #ffffff38;color:#fff;font-family:var(--yii-debug-font-mono);letter-spacing:-.01em;flex:none;justify-content:center;align-items:center;font-size:16px;font-weight:800;display:inline-flex}.yii-debug .yii-debug-queue-headline{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-queue-class{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-lg);letter-spacing:-.01em;word-break:break-all;margin:0;font-weight:700;line-height:1.25}.yii-debug .yii-debug-queue-namespace{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em}.yii-debug .yii-debug-queue-meta-pills{flex-direction:column;flex:none;align-items:flex-end;gap:6px;display:flex}.yii-debug .yii-debug-queue-status{border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;align-items:center;padding:3px 10px;font-weight:600;line-height:1;display:inline-flex}.yii-debug .yii-debug-queue-status-queued{color:var(--yii-debug-info);background:color-mix(in srgb, var(--yii-debug-info), transparent 86%)}.yii-debug .yii-debug-queue-status-done{color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 86%)}.yii-debug .yii-debug-queue-status-failed{color:var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 86%)}.yii-debug .yii-debug-queue-driver{border-radius:var(--yii-debug-radius-pill);border:var(--yii-debug-border);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.05em;text-transform:uppercase;cursor:help;align-items:center;padding:3px 10px;font-weight:600;line-height:1;display:inline-flex}.yii-debug .yii-debug-queue-driver-is-sync{color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 92%);border-color:color-mix(in srgb, var(--yii-debug-success), transparent 70%)}.yii-debug .yii-debug-queue-driver-is-async{color:var(--yii-debug-warning);background:color-mix(in srgb, var(--yii-debug-warning), transparent 92%);border-color:color-mix(in srgb, var(--yii-debug-warning), transparent 70%)}.yii-debug .yii-debug-queue-hint{margin:var(--yii-debug-space-3) 0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-radius:var(--yii-debug-radius-md);border-left:3px solid var(--yii-debug-warning);background:color-mix(in srgb, var(--yii-debug-warning), transparent 94%);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);line-height:1.5}.yii-debug .yii-debug-queue-tree{padding:var(--yii-debug-space-3);border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 96%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);flex-direction:column;gap:4px;line-height:1.6;display:flex}.yii-debug .yii-debug-queue-tree-row{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.yii-debug .yii-debug-queue-tree-key{color:var(--yii-debug-panel-text);font-weight:700}.yii-debug .yii-debug-queue-tree-key:after{content:":";color:var(--yii-debug-panel-muted);margin-left:1px;font-weight:400}.yii-debug .yii-debug-queue-tree-type{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);text-transform:uppercase;letter-spacing:.05em;background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 92%);border-radius:3px;padding:1px 6px}.yii-debug .yii-debug-queue-tree-class{color:var(--yii-debug-info);cursor:help;font-weight:600}.yii-debug .yii-debug-queue-tree-meta{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-queue-tree-truncated{color:var(--yii-debug-warning);font-size:var(--yii-debug-fs-xs);text-transform:uppercase;letter-spacing:.05em;background:color-mix(in srgb, var(--yii-debug-warning), transparent 86%);border-radius:3px;padding:1px 6px}.yii-debug .yii-debug-queue-tree-value{word-break:break-all}.yii-debug .yii-debug-queue-tree-value-string{color:var(--yii-debug-success)}.yii-debug .yii-debug-queue-tree-value-number{color:var(--yii-debug-info)}.yii-debug .yii-debug-queue-tree-value-bool{color:var(--yii-debug-warning);font-weight:600}.yii-debug .yii-debug-queue-tree-value-null{color:var(--yii-debug-panel-muted);font-style:italic}.yii-debug .yii-debug-queue-tree-collapse{flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-queue-tree-summary{cursor:pointer;list-style:revert;flex-wrap:wrap;align-items:baseline;gap:8px;padding:2px 0;display:inline-flex}.yii-debug .yii-debug-queue-tree-summary::-webkit-details-marker{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-queue-tree-children{margin-left:var(--yii-debug-space-4);padding-left:var(--yii-debug-space-3);border-left:1px dashed color-mix(in srgb, var(--yii-debug-panel-text), transparent 80%);flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-queue-time{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em}.yii-debug .yii-debug-queue-payload{margin:0}.yii-debug .yii-debug-queue-error{padding:var(--yii-debug-space-3);border-radius:var(--yii-debug-radius-sm);border-left:3px solid var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 92%);color:var(--yii-debug-danger);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);line-height:1.5}.yii-debug .yii-debug-queue-meta{gap:var(--yii-debug-space-2);padding-top:var(--yii-debug-space-2);border-top:var(--yii-debug-border);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-queue-meta-item{border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 94%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);align-items:center;gap:6px;padding:2px 10px;line-height:1.4;display:inline-flex}.yii-debug .yii-debug-queue-meta-label{color:var(--yii-debug-panel-muted);text-transform:uppercase;letter-spacing:.05em;font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-queue-meta-value{color:var(--yii-debug-panel-text);font-weight:600}.yii-debug .yii-debug-dump{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);overflow:hidden}.yii-debug .yii-debug-dump-card-head{align-items:center;gap:var(--yii-debug-space-2);padding:6px var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);color:var(--yii-debug-panel-muted);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-dump-index{color:var(--yii-debug-panel-primary-strong);font-weight:700}.yii-debug .yii-debug-dump-type{border-radius:var(--yii-debug-radius-pill);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;--yii-debug-hue:var(--yii-debug-panel-primary);padding:1px 8px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-dump-type[data-type=array]{--yii-debug-hue:var(--yii-debug-info)}.yii-debug .yii-debug-dump-type[data-type=string]{--yii-debug-hue:var(--yii-debug-success)}.yii-debug .yii-debug-dump-type[data-type=number]{--yii-debug-hue:var(--yii-debug-warning)}.yii-debug .yii-debug-dump-type[data-type=bool],.yii-debug .yii-debug-dump-type[data-type=null]{--yii-debug-hue:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-dump-meta{align-items:center;gap:var(--yii-debug-space-2);margin-left:auto;display:inline-flex}.yii-debug .yii-debug-dump-time{color:var(--yii-debug-panel-muted);font-variant-numeric:tabular-nums}.yii-debug .yii-debug-dump-trace{color:var(--yii-debug-panel-link)}.yii-debug .yii-debug-php-dump{text-align:start;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);line-height:1.5;overflow-x:auto}.yii-debug .yii-debug-php-dump pre{background:0 0;margin:0}.yii-debug .yii-debug-php-dump code{white-space:pre;background:0 0;padding:0;display:block}.yii-debug .yii-debug-dump-body{padding:var(--yii-debug-space-3);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);line-height:1.5;overflow-x:auto}.yii-debug .yii-debug-dump-body code{white-space:pre;background:0 0;padding:0;display:block}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #DD0000"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#DD0000"]{color:#e5c07b!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #0000BB"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#0000BB"]{color:#93c5fd!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #007700"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#007700"]{color:#86efac!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #FF8000"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#FF8000"]{color:#fdba74!important}[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color: #000000"],[data-yii-debug-theme=dark] .yii-debug :is(.yii-debug-dump-body,.yii-debug-php-dump) span[style*="color:#000000"]{color:var(--yii-debug-panel-text)!important}.yii-debug .yii-debug-history-card{gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-3);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-md);background:radial-gradient(circle at top right, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 86%), transparent 60%), color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%);flex-direction:column;display:flex;position:relative}.yii-debug .yii-debug-nav-iconed .yii-debug-nav-link{align-items:center}.yii-debug .yii-debug-nav-iconed .yii-debug-nav-link .yii-debug-nav-link-label{margin-right:auto}.yii-debug .yii-debug-nav-link-icon{width:16px;height:16px;color:var(--yii-debug-panel-primary);flex:none;justify-content:center;align-items:center;margin-right:10px;transition:color .14s,transform .14s;display:inline-flex}.yii-debug .yii-debug-nav-link-icon svg{width:100%;height:100%}.yii-debug .yii-debug-nav-link.is-active .yii-debug-nav-link-icon{color:currentColor}.yii-debug .yii-debug-nav-link-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);letter-spacing:.005em;flex:1;font-weight:600;overflow:hidden}.yii-debug .yii-debug-nav-link:not(.is-active){color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-nav-link:not(.is-active) .yii-debug-nav-link-icon{color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 35%)}.yii-debug .yii-debug-nav-link:not(.is-active):after{color:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 40%)}.yii-debug .yii-debug-nav-link:not(.is-active):hover,.yii-debug .yii-debug-nav-link:not(.is-active):focus-visible{color:var(--yii-debug-panel-text);background:var(--yii-debug-panel-surface-hover)}:is(.yii-debug .yii-debug-nav-link:not(.is-active):hover,.yii-debug .yii-debug-nav-link:not(.is-active):focus-visible) .yii-debug-nav-link-icon{color:var(--yii-debug-panel-primary);transform:translate(1px)}:is(.yii-debug .yii-debug-nav-link:not(.is-active):hover,.yii-debug .yii-debug-nav-link:not(.is-active):focus-visible):after{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-tag-link{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:-.01em;color:var(--yii-debug-panel-primary-strong);white-space:nowrap;border-bottom:1px dotted color-mix(in srgb, var(--yii-debug-panel-primary), transparent 60%);font-weight:700;text-decoration:none;display:inline-block}.yii-debug .yii-debug-tag-link:hover,.yii-debug .yii-debug-tag-link:focus-visible{color:var(--yii-debug-panel-primary);border-bottom-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-url-cell{text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;max-width:clamp(180px,26vw,460px);display:inline-block;overflow:hidden}.yii-debug .yii-debug-table tbody tr.is-cursor{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 86%);box-shadow:inset 3px 0 0 var(--yii-debug-panel-primary)}.yii-debug .yii-debug-table tbody tr.is-cursor:hover{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 78%)}.yii-debug .yii-debug-active-filters{margin-bottom:var(--yii-debug-space-3);padding:8px var(--yii-debug-space-3);border:1px solid color-mix(in srgb, var(--yii-debug-info), transparent 60%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-info), transparent 92%);flex-wrap:wrap;align-items:center;gap:8px;display:flex}.yii-debug .yii-debug-active-filters-label{color:var(--yii-debug-info);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-active-filters-list{flex-wrap:wrap;gap:4px;display:inline-flex}.yii-debug .yii-debug-active-filter-pill{border:1px solid color-mix(in srgb, var(--yii-debug-info), transparent 50%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);align-items:center;gap:4px;padding:2px 6px 2px 8px;text-decoration:none;transition:background-color .12s,border-color .12s;display:inline-flex}.yii-debug .yii-debug-active-filter-pill:hover,.yii-debug .yii-debug-active-filter-pill:focus-visible{border-color:var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 88%);color:var(--yii-debug-danger);text-decoration:none}.yii-debug .yii-debug-active-filter-attr{color:var(--yii-debug-panel-muted);text-transform:lowercase}.yii-debug .yii-debug-active-filter-sep{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-active-filter-value{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-weight:700;overflow:hidden}.yii-debug .yii-debug-active-filter-x{color:var(--yii-debug-panel-muted);margin-left:2px;font-weight:700;line-height:1}.yii-debug .yii-debug-active-filter-pill:hover .yii-debug-active-filter-x,.yii-debug .yii-debug-active-filter-pill:focus-visible .yii-debug-active-filter-x{color:var(--yii-debug-danger)}.yii-debug .yii-debug-active-filters-clear{border:1px solid color-mix(in srgb, var(--yii-debug-danger), transparent 60%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-danger);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;margin-left:auto;padding:3px 10px;font-weight:700;text-decoration:none;transition:background-color .12s,border-color .12s,transform .12s}.yii-debug .yii-debug-active-filters-clear:hover,.yii-debug .yii-debug-active-filters-clear:focus-visible{border-color:var(--yii-debug-danger);background:color-mix(in srgb, var(--yii-debug-danger), transparent 86%);color:var(--yii-debug-danger);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-col-id{white-space:nowrap;min-width:120px}.yii-debug .yii-debug-grid .filters input.yii-debug-col-id-input{box-sizing:border-box;width:104px}.yii-debug .yii-debug-grid-history .yii-debug-table{--yii-debug-history-query-width:0px;--yii-debug-history-mail-width:0px;--yii-debug-history-fixed-width:calc(988px + var(--yii-debug-history-query-width) + var(--yii-debug-history-mail-width));min-width:calc(var(--yii-debug-history-fixed-width) + 180px);table-layout:fixed}.yii-debug .yii-debug-grid-history .yii-debug-table:has(thead th.yii-debug-col-num:not(:first-child,.yii-debug-col-mail)){--yii-debug-history-query-width:66px}.yii-debug .yii-debug-grid-history .yii-debug-table:has(thead th.yii-debug-col-mail){--yii-debug-history-mail-width:56px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:first-child{width:36px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(2){width:276px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(3){width:80px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(4),.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-child(5){width:100px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-ip{width:112px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-num:not(:first-child,.yii-debug-col-mail){width:66px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-mail{width:56px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-last-child(4){width:128px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th.yii-debug-col-status{width:72px}.yii-debug .yii-debug-grid-history .yii-debug-table thead tr:first-child>th:nth-last-child(2){width:84px}.yii-debug .yii-debug-grid-history .yii-debug-table tbody td,.yii-debug .yii-debug-grid-history .yii-debug-table tbody th{white-space:nowrap;padding:8px 10px}.yii-debug .yii-debug-grid-history .yii-debug-table tbody td.yii-debug-col-ip{white-space:normal;overflow-wrap:anywhere}.yii-debug .yii-debug-grid-history .yii-debug-table tbody:has(>tr:only-child>td[colspan]){caption-side:bottom;display:table-caption}.yii-debug .yii-debug-grid-history .yii-debug-table tbody:has(>tr:only-child>td[colspan]) td{display:block}.yii-debug .yii-debug-grid-history .yii-debug-table .yii-debug-tag-link,.yii-debug .yii-debug-grid-history .yii-debug-table .yii-debug-url-cell{text-overflow:ellipsis;max-width:100%;overflow:hidden}.yii-debug .yii-debug-grid-history .yii-debug-table .yii-debug-tag-link{vertical-align:middle;display:inline-block}@media (max-width:1600px){.yii-debug .yii-debug-grid-history .yii-debug-table{--yii-debug-history-fixed-width:calc(876px + var(--yii-debug-history-query-width))}.yii-debug .yii-debug-grid-history .yii-debug-col-ip,.yii-debug .yii-debug-grid-history .yii-debug-col-mail{display:none}}@media (max-width:767px){.yii-debug .yii-debug-grid-event .yii-debug-table thead th,.yii-debug .yii-debug-grid-event .yii-debug-table thead td,.yii-debug .yii-debug-grid-event .yii-debug-table tbody tr:not(.yii-debug-event-detail-row) td,.yii-debug .yii-debug-grid-event .yii-debug-table tbody th,.yii-debug .yii-debug-grid-event .yii-debug-table tfoot td{padding:8px 10px}.yii-debug .yii-debug-grid-event .yii-debug-table .filters td{padding:6px 10px}}.yii-debug th.yii-debug-col-num,.yii-debug td.yii-debug-col-num{text-align:center;white-space:nowrap;width:1%}.yii-debug td.yii-debug-col-num{font-variant-numeric:tabular-nums}.yii-debug td.yii-debug-col-num input,.yii-debug td.yii-debug-col-num select{text-align:center;width:100%;min-width:0}.yii-debug .yii-debug-explain-scroll{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);overflow-x:auto}.yii-debug .yii-debug-explain-table{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);white-space:nowrap;margin:0}.yii-debug .yii-debug-explain-table th,.yii-debug .yii-debug-explain-table td{padding:var(--yii-debug-space-2) var(--yii-debug-space-3)}.yii-debug ul.yii-debug-trace{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);white-space:normal;margin:2px 0 0;padding:0;list-style:none}.yii-debug .yii-debug-disclosure:has(>.yii-debug-disclosure-body>.yii-debug-log-context){margin:var(--yii-debug-space-2) 0 0;border-radius:var(--yii-debug-radius-md)}.yii-debug .yii-debug-disclosure:has(>.yii-debug-disclosure-body>.yii-debug-log-context)>.yii-debug-disclosure-summary{gap:0 var(--yii-debug-space-3);padding:var(--yii-debug-space-1) var(--yii-debug-space-3);flex-wrap:wrap}.yii-debug .yii-debug-disclosure:has(>.yii-debug-disclosure-body>.yii-debug-log-context)>.yii-debug-disclosure-body{padding:var(--yii-debug-space-2) var(--yii-debug-space-3)}.yii-debug .yii-debug-log-context{gap:var(--yii-debug-space-1) var(--yii-debug-space-3);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);grid-template-columns:minmax(75px,max-content) minmax(0,1fr);margin:0;display:grid}.yii-debug .yii-debug-log-context dt{color:var(--yii-debug-panel-muted);overflow-wrap:anywhere}.yii-debug .yii-debug-log-context dd{min-width:0;margin:0}.yii-debug .yii-debug-log-context code,.yii-debug .yii-debug-log-context pre{font-size:inherit;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.yii-debug .yii-debug-log-context pre{padding:var(--yii-debug-space-2);overflow:visible}@media not (min-width:768px){.yii-debug .yii-debug-log-context{grid-template-columns:minmax(0,1fr);row-gap:0}.yii-debug .yii-debug-log-context dd+dt{margin-top:var(--yii-debug-space-2)}}.yii-debug .yii-debug-log-text{color:inherit;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-ligatures:none;white-space:pre-wrap;overflow-wrap:anywhere;background:0 0;margin:0;padding:0;line-height:1.6}.yii-debug .yii-debug-log-dump,.yii-debug .yii-debug-log-export pre{padding:var(--yii-debug-space-2) var(--yii-debug-space-3);border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 96%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-ligatures:none;line-height:1.6}.yii-debug .yii-debug-log-dump-summary,.yii-debug .yii-debug-log-dump-row{align-items:baseline;gap:2px var(--yii-debug-space-2);padding-left:calc(1ch + var(--yii-debug-space-2));flex-wrap:wrap;display:flex}.yii-debug .yii-debug-log-dump-summary{cursor:pointer;list-style:none;position:relative}.yii-debug .yii-debug-log-dump-summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-log-dump-summary:before{content:"▸";color:var(--yii-debug-panel-muted);position:absolute;left:0}.yii-debug :is(.yii-debug-log-dump,.yii-debug-log-dump-node)[open]>.yii-debug-log-dump-summary:before{transform:rotate(90deg)}.yii-debug .yii-debug-log-dump-entries{padding-left:calc(.5ch + var(--yii-debug-space-2));border-left:1px dashed color-mix(in srgb, var(--yii-debug-panel-text), transparent 80%);margin-left:.5ch}.yii-debug .yii-debug-log-dump-key{white-space:pre-wrap;overflow-wrap:anywhere;font-weight:700}.yii-debug .yii-debug-log-dump-key:after{content:":";color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-log-dump-value{white-space:pre-wrap;overflow-wrap:anywhere;flex:16ch;min-width:0}.yii-debug .yii-debug-log-dump-kind,.yii-debug .yii-debug-log-dump-visibility,.yii-debug .yii-debug-log-dump-recursion{background:color-mix(in srgb, var(--yii-debug-panel-text), transparent 92%);letter-spacing:.05em;border-radius:3px;padding:0 6px}.yii-debug .yii-debug-log-dump-kind,.yii-debug .yii-debug-log-dump-recursion{text-transform:uppercase}.yii-debug .yii-debug-log-dump-kind,.yii-debug .yii-debug-log-dump-visibility,.yii-debug .yii-debug-log-dump-count,.yii-debug .yii-debug-log-dump-prefix,.yii-debug .yii-debug-log-dump-empty{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-log-dump-visibility,.yii-debug .yii-debug-log-dump-empty{cursor:help;font-style:italic}.yii-debug .yii-debug-log-dump-recursion{background:color-mix(in srgb, var(--yii-debug-warning), transparent 86%);color:var(--yii-debug-warning);cursor:help}.yii-debug .yii-debug-muted{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-nowrap{white-space:nowrap}.yii-debug .yii-debug-not-set{color:var(--yii-debug-danger);font-style:italic}.yii-debug .yii-debug-gauge{vertical-align:middle;font-variant-numeric:tabular-nums;flex-direction:column;gap:3px;min-width:76px;display:inline-flex}.yii-debug .yii-debug-gauge-value{text-align:right}.yii-debug .yii-debug-gauge-bar{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-gauge-track);height:3px;display:block;overflow:hidden}.yii-debug .yii-debug-gauge-bar:after{content:"";width:var(--yii-debug-gauge,0%);border-radius:inherit;background:var(--yii-debug-gauge-fill);height:100%;display:block}.yii-debug .yii-debug-indent{color:var(--yii-debug-panel-muted);margin-inline-end:var(--yii-debug-space-1)}.yii-debug .yii-debug-section{margin-bottom:var(--yii-debug-space-6)}.yii-debug .yii-debug-section:last-child{margin-bottom:0}.yii-debug .yii-debug-section-title{align-items:center;gap:var(--yii-debug-space-2);margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.22em;text-transform:uppercase;font-size:.6875rem;font-weight:500;line-height:1;display:flex}.yii-debug .yii-debug-section-mark{color:var(--yii-debug-panel-primary);font-weight:700}.yii-debug .yii-debug-section-count{border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 85%);color:var(--yii-debug-panel-primary);align-items:center;margin-left:auto;padding:2px 8px;font-weight:700;display:inline-flex}.yii-debug h1.yii-debug-hero-title{margin:0 0 var(--yii-debug-space-5);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-display);letter-spacing:-.015em;text-transform:lowercase;font-size:2rem;font-weight:400;line-height:1}.yii-debug h1.yii-debug-hero-title:before{content:"// ";color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);letter-spacing:0;vertical-align:2px;margin-right:.2em;font-size:.75em;font-weight:700}.yii-debug .yii-debug-readout-card{gap:var(--yii-debug-space-2);min-height:132px;padding:var(--yii-debug-space-5) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--yii-debug-panel-border), transparent 30%) 1px, transparent 0) 0 0 / 14px 14px, linear-gradient(150deg, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 92%), transparent 55%), var(--yii-debug-panel-surface);flex-direction:column;transition:border-color .15s,transform .15s,box-shadow .15s;animation:.45s cubic-bezier(.2,.7,.3,1) both yii-debug-readout-in;display:flex;position:relative;overflow:hidden}.yii-debug .yii-debug-readout-card:hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 45%);box-shadow:var(--yii-debug-shadow-md);transform:translateY(-2px)}.yii-debug .yii-debug-readout-card:first-child{animation-delay:40ms}.yii-debug .yii-debug-readout-card:nth-child(2){animation-delay:80ms}.yii-debug .yii-debug-readout-card:nth-child(3){animation-delay:.12s}.yii-debug .yii-debug-readout-card:nth-child(4){animation-delay:.16s}.yii-debug .yii-debug-readout-card:nth-child(5){animation-delay:.2s}.yii-debug .yii-debug-readout-card:nth-child(6){animation-delay:.24s}.yii-debug .yii-debug-readout-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.15em;text-transform:uppercase;margin:0;font-size:.6875rem;font-weight:500;line-height:1;display:block;position:relative}.yii-debug .yii-debug-readout-label:before{content:":: ";color:var(--yii-debug-panel-primary);opacity:.85;font-weight:700}.yii-debug .yii-debug-readout-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);letter-spacing:-.015em;overflow-wrap:break-word;margin:0;font-size:1.375rem;font-weight:700;line-height:1.15;display:block}.yii-debug .yii-debug-readout-meta{align-items:center;gap:var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.05em;text-transform:lowercase;margin-top:auto;font-size:.6875rem;line-height:1;display:inline-flex}.yii-debug .yii-debug-readout-grid{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-6);grid-template-columns:repeat(auto-fit,minmax(210px,1fr));display:grid}.yii-debug .yii-debug-section .yii-debug-table-wrap{border-radius:var(--yii-debug-radius-md)}.yii-debug .yii-debug-section .yii-debug-table-overview th,.yii-debug .yii-debug-section .yii-debug-table-overview td{padding:9px var(--yii-debug-space-4);border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 45%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);text-align:left;vertical-align:baseline}.yii-debug .yii-debug-section .yii-debug-table-overview th{width:34%;color:var(--yii-debug-panel-muted);letter-spacing:.12em;text-transform:uppercase;font-weight:500}.yii-debug .yii-debug-section .yii-debug-table-overview td{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-section .yii-debug-table-overview tr:last-child th,.yii-debug .yii-debug-section .yii-debug-table-overview tr:last-child td{border-bottom:0}.yii-debug .yii-debug-fact-strip{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-border);grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:1px;margin:0;display:grid;overflow:hidden}.yii-debug .yii-debug-fact{min-width:0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4);background:var(--yii-debug-panel-surface-muted)}.yii-debug .yii-debug-fact-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-fact-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:600;overflow:hidden}.yii-debug .yii-debug-hero{margin-bottom:var(--yii-debug-space-5);border:var(--yii-debug-border);border-inline-start:4px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 76%, var(--yii-debug-panel-text));border-radius:var(--yii-debug-radius-lg);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-hero-danger{--yii-debug-hue:var(--yii-debug-danger)}.yii-debug .yii-debug-hero-info{--yii-debug-hue:var(--yii-debug-info)}.yii-debug .yii-debug-hero-success{--yii-debug-hue:var(--yii-debug-success)}.yii-debug .yii-debug-hero-warning{--yii-debug-hue:var(--yii-debug-warning)}.yii-debug .yii-debug-hero-header{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.yii-debug .yii-debug-hero-identity{align-items:center;gap:var(--yii-debug-space-3);min-width:0;display:flex}.yii-debug .yii-debug-hero-mark{border:1px solid color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 65%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 88%);width:40px;height:40px;color:color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)) 80%, var(--yii-debug-panel-text));font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:.04em;text-transform:uppercase;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.yii-debug .yii-debug-hero-text{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-hero-title,.yii-debug .yii-debug-hero-subtitle{font-family:var(--yii-debug-font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.yii-debug .yii-debug-hero-title{color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-base);font-weight:600}.yii-debug .yii-debug-hero-subtitle{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-hero-status>.yii-debug-badge{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:.02em;padding:3px 12px;font-weight:700}.yii-debug .yii-debug-hero-metrics{border-top:var(--yii-debug-border);background:var(--yii-debug-panel-border);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1px;margin:0;display:grid}.yii-debug .yii-debug-hero-metric{min-width:0;padding:var(--yii-debug-space-3) var(--yii-debug-space-4);background:var(--yii-debug-panel-surface-muted)}.yii-debug .yii-debug-hero-metric dt{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);letter-spacing:.07em;text-transform:uppercase;margin-bottom:2px;font-size:.6875rem;font-weight:700}.yii-debug .yii-debug-hero-metric dd{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:600;overflow:hidden}.yii-debug .yii-debug-stat-strip{gap:var(--yii-debug-space-3);margin:0 0 var(--yii-debug-space-4);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.yii-debug .yii-debug-stat{padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);align-items:center;gap:10px;display:flex}.yii-debug .yii-debug-stat-icon{width:26px;height:26px;color:var(--yii-debug-panel-primary);flex:none;justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-stat-icon svg{width:100%;height:100%}.yii-debug .yii-debug-stat-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xl);font-weight:800;line-height:1}.yii-debug .yii-debug-stat-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;margin-left:auto}.yii-debug .yii-debug-stat-danger .yii-debug-stat-icon{color:var(--yii-debug-danger)}.yii-debug .yii-debug-stat-info .yii-debug-stat-icon{color:var(--yii-debug-info)}.yii-debug .yii-debug-stat-muted .yii-debug-stat-icon{color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-stat-success .yii-debug-stat-icon{color:var(--yii-debug-success)}.yii-debug .yii-debug-stat-warning .yii-debug-stat-icon{color:var(--yii-debug-warning)}.yii-debug .yii-debug-entity{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);scroll-margin-top:var(--yii-debug-space-4);flex-direction:column;transition:transform .16s,border-color .16s,box-shadow .16s;display:flex;position:relative}.yii-debug .yii-debug-entity:hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 60%);box-shadow:var(--yii-debug-shadow-sm), 0 12px 32px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%);transform:translateY(-1px)}.yii-debug .yii-debug-entity:target{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 78%), var(--yii-debug-shadow-sm)}.yii-debug .yii-debug-card-grid{gap:var(--yii-debug-space-3);grid-template-columns:repeat(auto-fit,minmax(min(100%,32rem),1fr));display:grid}.yii-debug .yii-debug-entity-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:center;display:grid}.yii-debug .yii-debug-entity-icon{border-radius:var(--yii-debug-radius-md);background:linear-gradient(135deg, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 78%), color-mix(in srgb, var(--yii-debug-info), transparent 78%));width:38px;height:38px;color:var(--yii-debug-panel-primary-strong);flex:none;justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-entity-icon svg{width:22px;height:22px}.yii-debug .yii-debug-entity-title{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-entity-name{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-lg);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:700;line-height:1.2;overflow:hidden}.yii-debug .yii-debug-entity-subtitle{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.01em;text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.yii-debug .yii-debug-entity-meta{flex-wrap:nowrap;flex:none;justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.yii-debug .yii-debug-entity-meta .yii-debug-badge{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;align-items:center;gap:4px;padding:2px 8px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-entity-meta .yii-debug-badge-danger{border-color:color-mix(in srgb, var(--yii-debug-danger), transparent 60%);background:color-mix(in srgb, var(--yii-debug-danger), transparent 90%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-info{border-color:color-mix(in srgb, var(--yii-debug-info), transparent 60%);background:color-mix(in srgb, var(--yii-debug-info), transparent 90%);color:var(--yii-debug-info)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-muted{border-color:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 60%);background:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 90%);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-success{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 60%);background:color-mix(in srgb, var(--yii-debug-success), transparent 90%);color:var(--yii-debug-success)}.yii-debug .yii-debug-entity-meta .yii-debug-badge-warning{border-color:color-mix(in srgb, var(--yii-debug-warning), transparent 60%);background:color-mix(in srgb, var(--yii-debug-warning), transparent 90%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-entity-body{gap:var(--yii-debug-space-4);grid-template-columns:minmax(180px,2fr) minmax(0,3fr);display:grid}.yii-debug .yii-debug-entity-body[data-cols="1"]{grid-template-columns:1fr}.yii-debug .yii-debug-entity-column{gap:var(--yii-debug-space-3);flex-direction:column;min-width:0;display:flex}.yii-debug .yii-debug-entity-column-title{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.14em;text-transform:uppercase;margin:0;font-weight:700}.yii-debug .yii-debug-file-list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-file-list+.yii-debug-file-list{margin-top:4px}.yii-debug .yii-debug-file{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);grid-template-columns:auto 1fr;align-items:center;gap:6px;min-width:0;padding:4px 8px;display:grid}.yii-debug .yii-debug-file-type{border-radius:var(--yii-debug-radius-pill);min-width:30px;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;justify-content:center;align-items:center;padding:0 5px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-file-type-danger{background:color-mix(in srgb, var(--yii-debug-danger), transparent 84%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-file-type-info{background:color-mix(in srgb, var(--yii-debug-info), transparent 84%);color:var(--yii-debug-info)}.yii-debug .yii-debug-file-type-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-file-type-success{background:color-mix(in srgb, var(--yii-debug-success), transparent 84%);color:var(--yii-debug-success)}.yii-debug .yii-debug-file-type-warning{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-file-name{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.yii-debug .yii-debug-entity-column .yii-debug-fact-strip{background:0 0;border:0;border-radius:0;flex-direction:column;gap:4px;margin:0;display:flex;overflow:visible}.yii-debug .yii-debug-entity-column .yii-debug-fact{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);grid-template-columns:56px 1fr;align-items:baseline;gap:8px;padding:6px 10px;display:grid}.yii-debug .yii-debug-entity-column .yii-debug-fact-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.12em;text-transform:uppercase;margin:0;font-weight:700}.yii-debug .yii-debug-entity-column .yii-debug-fact-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);text-overflow:clip;white-space:normal;word-break:break-all;margin:0;font-weight:400;overflow:visible}.yii-debug .yii-debug-link-strip{padding:10px var(--yii-debug-space-3);border:1px dashed color-mix(in srgb, var(--yii-debug-success), transparent 50%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-success), transparent 92%);flex-direction:column;gap:8px;display:flex}.yii-debug .yii-debug-link-strip-label{color:var(--yii-debug-success);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.14em;text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-link-strip-list{flex-wrap:wrap;gap:6px;display:flex}.yii-debug .yii-debug-link-pill{border:1px solid color-mix(in srgb, var(--yii-debug-success), transparent 50%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-success);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);white-space:nowrap;align-items:center;gap:5px;padding:3px 10px 3px 8px;font-weight:600;text-decoration:none;transition:background-color .14s,color .14s,transform .14s,border-color .14s;display:inline-flex}.yii-debug .yii-debug-link-pill:before{content:"↳";opacity:.85;font-size:12px}.yii-debug .yii-debug-link-pill:hover,.yii-debug .yii-debug-link-pill:focus-visible{border-color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 86%);color:var(--yii-debug-success);text-decoration:none;transform:translateY(-1px)}@media (max-width:720px){.yii-debug .yii-debug-stat-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.yii-debug .yii-debug-entity-body{grid-template-columns:1fr}.yii-debug .yii-debug-entity-head{grid-template-columns:auto 1fr}.yii-debug .yii-debug-entity-meta{grid-column:1/-1;justify-content:flex-start;max-width:100%}}.yii-debug .yii-debug-manifest{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);flex-direction:column;display:flex;overflow:hidden}.yii-debug .yii-debug-manifest-head{align-items:center;gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border-bottom:var(--yii-debug-border);color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.08em;font-weight:700;display:flex}.yii-debug .yii-debug-manifest-count{color:var(--yii-debug-panel-muted);letter-spacing:.12em;text-transform:uppercase;margin-left:auto;font-weight:500}.yii-debug .yii-debug-manifest-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));display:grid}.yii-debug .yii-debug-manifest-item{justify-content:space-between;align-items:baseline;gap:var(--yii-debug-space-3);min-width:0;padding:7px var(--yii-debug-space-4);border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 45%);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);display:flex}.yii-debug .yii-debug-manifest-name{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.yii-debug .yii-debug-manifest-version{color:var(--yii-debug-panel-primary);flex:none}.yii-debug .yii-debug-ext-strip{gap:var(--yii-debug-space-2);padding:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:linear-gradient(0deg, color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 30%), var(--yii-debug-panel-surface));flex-wrap:wrap;display:flex}.yii-debug .yii-debug-ext-pill{align-items:center;gap:var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);letter-spacing:.1em;text-transform:uppercase;padding:6px 12px 6px 9px;font-size:.6875rem;font-weight:500;line-height:1;transition:border-color .15s,background .15s;display:inline-flex}.yii-debug .yii-debug-ext-pill-dot{background:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 60%);border-radius:999px;width:7px;height:7px;display:inline-block}.yii-debug .yii-debug-ext-pill-label{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-ext-pill-state{margin-left:var(--yii-debug-space-1);color:var(--yii-debug-panel-muted);letter-spacing:.12em;opacity:.7;font-size:.625rem;font-weight:700}.yii-debug .yii-debug-ext-pill.is-on{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 55%);background:color-mix(in srgb, var(--yii-debug-success), var(--yii-debug-panel-surface) 90%)}.yii-debug .yii-debug-ext-pill.is-on .yii-debug-ext-pill-dot{background:var(--yii-debug-success);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-success), transparent 75%);animation:2.4s ease-in-out infinite yii-debug-led-pulse}.yii-debug .yii-debug-ext-pill.is-on .yii-debug-ext-pill-state{color:var(--yii-debug-success);opacity:1}.yii-debug .yii-debug-ext-pill.is-off{opacity:.55}.yii-debug .yii-debug-phpinfo-shell{gap:var(--yii-debug-space-4);grid-template-columns:220px minmax(0,1fr);align-items:start;display:grid}.yii-debug .yii-debug-phpinfo-toc{top:var(--yii-debug-space-3);max-height:calc(100vh - 80px);padding:var(--yii-debug-space-3);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);scrollbar-width:thin;align-self:start;position:sticky;overflow-y:auto}.yii-debug .yii-debug-phpinfo-toc-title{margin:0 0 var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);align-items:baseline;gap:6px;display:flex}.yii-debug .yii-debug-phpinfo-toc-title span:first-child{color:var(--yii-debug-panel-text);font-variant-numeric:tabular-nums;font-weight:700}.yii-debug .yii-debug-phpinfo-toc-title-note{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);margin-left:auto}.yii-debug .yii-debug-phpinfo-toc-overview,.yii-debug .yii-debug-phpinfo-toc-group-list{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-phpinfo-toc-overview{margin-bottom:var(--yii-debug-space-2);padding-bottom:var(--yii-debug-space-2);border-bottom:var(--yii-debug-border)}.yii-debug .yii-debug-phpinfo-toc-groups{flex-direction:column;gap:2px;display:flex}.yii-debug .yii-debug-phpinfo-toc-group{margin:0}.yii-debug .yii-debug-phpinfo-toc-group-summary{border-radius:var(--yii-debug-radius-sm);color:var(--yii-debug-panel-muted);cursor:pointer;font-size:var(--yii-debug-fs-xs);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 8px;font-weight:600;list-style:none;transition:background-color .12s,color .12s;display:grid}.yii-debug .yii-debug-phpinfo-toc-group-summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-phpinfo-toc-group-summary:before{content:"›";color:var(--yii-debug-panel-muted);font-size:1.1em;line-height:1;transition:transform .12s}.yii-debug .yii-debug-phpinfo-toc-group-summary:hover,.yii-debug .yii-debug-phpinfo-toc-group-summary:focus-visible{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-phpinfo-toc-group[open]>.yii-debug-phpinfo-toc-group-summary{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-phpinfo-toc-group[open]>.yii-debug-phpinfo-toc-group-summary:before{transform:rotate(90deg)}.yii-debug .yii-debug-phpinfo-toc-group-count{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);min-width:22px;color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;text-align:center;padding:1px 6px}.yii-debug .yii-debug-phpinfo-toc-group-list{margin:2px 0 var(--yii-debug-space-2);padding-left:14px}.yii-debug .yii-debug-phpinfo-toc-link{border-radius:0 var(--yii-debug-radius-sm) var(--yii-debug-radius-sm) 0;color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm);border-left:2px solid #0000;padding:7px 10px 7px 12px;text-decoration:none;transition:background-color .12s,color .12s,border-color .12s;display:block}.yii-debug .yii-debug-phpinfo-toc-link:hover,.yii-debug .yii-debug-phpinfo-toc-link:focus-visible{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-phpinfo-toc-link.is-active{border-left-color:var(--yii-debug-panel-primary);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 90%);color:var(--yii-debug-panel-primary-strong);font-weight:700}.yii-debug .yii-debug-phpinfo-main{min-width:0}.yii-debug .yii-debug-phpinfo-search{margin-bottom:var(--yii-debug-space-3);flex-direction:column;gap:6px;display:flex}.yii-debug .yii-debug-phpinfo-search-control{align-items:center;display:flex;position:relative}.yii-debug .yii-debug-phpinfo-search-icon{width:16px;height:16px;color:var(--yii-debug-panel-muted);pointer-events:none;justify-content:center;align-items:center;display:inline-flex;position:absolute;left:12px}.yii-debug .yii-debug-phpinfo-search-icon svg{width:100%;height:100%}.yii-debug .yii-debug-phpinfo-search-input{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);flex:1;padding:9px 12px 9px 36px;transition:border-color .12s,box-shadow .12s}.yii-debug .yii-debug-phpinfo-search-input::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-phpinfo-search-input:focus{border-color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%)}.yii-debug .yii-debug-phpinfo-search-clear{border-radius:var(--yii-debug-radius-sm);color:var(--yii-debug-panel-link);cursor:pointer;font:inherit;font-size:var(--yii-debug-fs-xs);background:0 0;border:0;padding:4px 8px;font-weight:600;position:absolute;right:8px}.yii-debug .yii-debug-phpinfo-search-clear:hover,.yii-debug .yii-debug-phpinfo-search-clear:focus-visible{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover)}.yii-debug .yii-debug-phpinfo-search-control:has(.yii-debug-phpinfo-search-clear:not([hidden])) .yii-debug-phpinfo-search-input{padding-right:58px}.yii-debug .yii-debug-phpinfo-search-feedback{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-2);min-height:18px;padding-inline:2px;display:flex}.yii-debug .yii-debug-phpinfo-search-feedback:has(.yii-debug-phpinfo-search-status:empty):has(.yii-debug-phpinfo-search-empty[hidden]){display:none}.yii-debug .yii-debug-phpinfo-search-status,.yii-debug .yii-debug-phpinfo-search-empty{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-phpinfo-search-empty{color:var(--yii-debug-danger)}.yii-debug .yii-debug-phpinfo-section{scroll-margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-phpinfo-section+:is(.yii-debug .yii-debug-phpinfo-section){margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-phpinfo-section .yii-debug-disclosure{margin-bottom:0}.yii-debug .yii-debug-phpinfo-toc-link[hidden],.yii-debug .yii-debug-phpinfo-toc-group[hidden],.yii-debug .yii-debug-phpinfo-section[hidden],.yii-debug .yii-debug-phpinfo-search-clear[hidden],.yii-debug .yii-debug-phpinfo-search-empty[hidden],.yii-debug .yii-debug-phpinfo-overview-hero-section[hidden],.yii-debug .yii-debug-disclosure[hidden],.yii-debug .yii-debug-phpinfo-extension-group[hidden],.yii-debug .yii-debug-ext-pill[hidden],.yii-debug .yii-debug-table-wrap[hidden],.yii-debug .yii-debug-phpinfo-module tr[hidden]{display:none}@media (max-width:900px){.yii-debug .yii-debug-phpinfo-shell{grid-template-columns:1fr}.yii-debug .yii-debug-phpinfo-toc{max-height:none;position:static;overflow:hidden}.yii-debug .yii-debug-phpinfo-toc-groups{gap:4px var(--yii-debug-space-2);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-phpinfo-toc-group[open]{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-toc-group-list{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:4px;padding-left:0;display:grid}.yii-debug .yii-debug-phpinfo-toc-link{border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);border-left:0;padding:4px 10px}.yii-debug .yii-debug-phpinfo-toc-link.is-active{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%);border-left:0}}@media (max-width:560px){.yii-debug .yii-debug-phpinfo-toc-groups{grid-template-columns:1fr}}.yii-debug .yii-debug-phpinfo-overview-hero{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-3);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}@media (max-width:720px){.yii-debug .yii-debug-phpinfo-overview-hero{grid-template-columns:1fr}}.yii-debug .yii-debug-phpinfo-overview-hero-headline{align-items:center;gap:var(--yii-debug-space-3);grid-template-columns:1fr auto;display:grid}.yii-debug .yii-debug-phpinfo-overview-hero-version{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-display,var(--yii-debug-font-mono));letter-spacing:-.02em;font-size:clamp(1.6rem,2.4vw + 1rem,2.4rem);font-weight:800;line-height:1}.yii-debug .yii-debug-phpinfo-overview-hero-mark{border-radius:var(--yii-debug-radius-pill);border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);min-width:64px;color:var(--yii-debug-panel-primary-strong);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-lg);letter-spacing:.08em;text-transform:lowercase;justify-content:center;align-items:center;padding:6px 14px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-phpinfo-overview-hero-metrics{gap:var(--yii-debug-space-2) var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));margin:0;display:grid}.yii-debug .yii-debug-phpinfo-overview-hero-section{gap:var(--yii-debug-space-3);min-width:0;padding:var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);flex-direction:column;display:flex}.yii-debug .yii-debug-phpinfo-overview-hero-section:first-child{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-extensions{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-extensions>.yii-debug-phpinfo-extension-groups{padding:var(--yii-debug-space-4)}.yii-debug .yii-debug-phpinfo-extension-group-count{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;padding:1px 7px}.yii-debug .yii-debug-phpinfo-extension-groups{gap:var(--yii-debug-space-3);flex-direction:column;display:flex}.yii-debug .yii-debug-phpinfo-extension-group{gap:var(--yii-debug-space-2);flex-direction:column;display:flex}.yii-debug .yii-debug-phpinfo-extension-group-head{align-items:center;gap:var(--yii-debug-space-2);color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);font-weight:600;display:flex}.yii-debug .yii-debug-phpinfo-extension-group-head .yii-debug-phpinfo-extension-group-count{margin-left:auto}.yii-debug .yii-debug-phpinfo-extension-group .yii-debug-ext-pill{scroll-margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-phpinfo-extension-group .yii-debug-ext-pill:target,.yii-debug .yii-debug-phpinfo-extension-group .yii-debug-ext-pill.is-search-match{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 45%);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 90%)}.yii-debug .yii-debug-phpinfo-overview-block-head{border-bottom:var(--yii-debug-border);align-items:center;gap:10px;padding-bottom:8px;display:flex}.yii-debug .yii-debug-phpinfo-overview-block-eyebrow{color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);font-weight:600}.yii-debug .yii-debug-phpinfo-overview-hero-metric{flex-direction:column;gap:3px;padding-block:2px;display:flex}.yii-debug .yii-debug-phpinfo-overview-hero-metric dt{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);margin:0;font-weight:600;line-height:1.2}.yii-debug .yii-debug-phpinfo-overview-hero-metric dd{overflow-wrap:break-word;min-width:0;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);margin:0;line-height:1.4}.yii-debug .yii-debug-phpinfo-overview-hero-metric dd code{color:inherit;background:0 0;padding:0}.yii-debug .yii-debug-phpinfo-overview-hero-metric.is-wide{grid-column:1/-1}.yii-debug .yii-debug-phpinfo-overview-pill{border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:uppercase;border:1px solid #0000;align-items:center;gap:6px;padding:1px 10px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-phpinfo-overview-pill[data-variant=success]{color:var(--yii-debug-success);background:color-mix(in srgb, var(--yii-debug-success), transparent 86%);border-color:color-mix(in srgb, var(--yii-debug-success), transparent 65%)}.yii-debug .yii-debug-phpinfo-overview-pill[data-variant=muted]{color:var(--yii-debug-panel-muted);background:var(--yii-debug-panel-surface-muted);border-color:var(--yii-debug-panel-border)}.yii-debug .yii-debug-phpinfo-overview-token{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);padding:1px 8px}.yii-debug .yii-debug-phpinfo-overview-files{flex-wrap:wrap;gap:4px;display:flex}.yii-debug .yii-debug-phpinfo-overview-files .yii-debug-phpinfo-overview-token{cursor:help;transition:border-color .12s,background-color .12s}.yii-debug .yii-debug-phpinfo-overview-files .yii-debug-phpinfo-overview-token:hover{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 40%);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%)}.yii-debug .yii-debug-phpinfo-module{gap:var(--yii-debug-space-3);flex-direction:column;margin-top:0;display:flex}.yii-debug .yii-debug-phpinfo-module-head{align-items:center;gap:10px;margin:0;padding:2px 2px 0;display:flex}.yii-debug .yii-debug-phpinfo-module-head h2{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xl);text-align:left;background:0 0;margin:0;padding:0;font-weight:600}.yii-debug .yii-debug-phpinfo-table-section{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);overflow:hidden}.yii-debug .yii-debug-phpinfo-table-section-head{justify-content:space-between;align-items:center;gap:var(--yii-debug-space-2);padding:9px var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);font-weight:600;display:flex}.yii-debug .yii-debug-phpinfo-variable-group>summary{cursor:pointer;list-style:none;transition:background-color .12s}.yii-debug .yii-debug-phpinfo-variable-group>summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-phpinfo-variable-group>summary:hover,.yii-debug .yii-debug-phpinfo-variable-group>summary:focus-visible{background:var(--yii-debug-panel-surface-hover)}.yii-debug .yii-debug-phpinfo-variable-group>summary>span:first-child{align-items:center;gap:8px;display:inline-flex}.yii-debug .yii-debug-phpinfo-variable-group>summary>span:first-child:before{content:"›";color:var(--yii-debug-panel-muted);font-size:1.1em;line-height:1;transition:transform .12s}.yii-debug .yii-debug-phpinfo-variable-group[open]>summary>span:first-child:before{transform:rotate(90deg)}.yii-debug .yii-debug-phpinfo-table-section-count{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;flex:none;padding:1px 7px;font-weight:500}.yii-debug .yii-debug-phpinfo-table-scroll{min-width:0;overflow-x:auto}.yii-debug .yii-debug-phpinfo-module .yii-debug-table{table-layout:fixed;min-width:560px}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:first-child{width:40%}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:nth-child(2):last-child{width:60%}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:nth-child(2):not(:last-child),.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr>:nth-child(3){width:30%}.yii-debug .yii-debug-phpinfo-module .yii-debug-table th,.yii-debug .yii-debug-phpinfo-module .yii-debug-table td{text-align:left}.yii-debug .yii-debug-phpinfo-module .yii-debug-table th[scope=row]{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);white-space:normal;font-weight:500}.yii-debug .yii-debug-phpinfo-module .yii-debug-table td{font-family:var(--yii-debug-font-mono)}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr.h>*{z-index:1;background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.03em;text-transform:uppercase;font-weight:700;position:sticky;top:0}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr.is-search-match>*{background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%)!important}.yii-debug .yii-debug-phpinfo-module .yii-debug-table tr.has-local-override>td:nth-child(2){box-shadow:inset 2px 0 0 color-mix(in srgb, var(--yii-debug-warning), transparent 25%);color:color-mix(in srgb, var(--yii-debug-warning) 72%, var(--yii-debug-panel-text))}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-phpinfo-table-scroll{overflow:visible}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts{table-layout:auto;min-width:0;display:block}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tbody{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact{border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 25%);grid-template-columns:minmax(130px,.85fr) minmax(0,1.15fr);min-width:0;display:grid}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact:nth-child(odd){border-right:1px solid color-mix(in srgb, var(--yii-debug-panel-border), transparent 25%)}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact.yii-debug-phpinfo-fact-wide{border-right:0;grid-column:1/-1}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact>*{overflow-wrap:anywhere;background:0 0;border:0;width:auto;padding:9px 12px}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact>th{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);font-weight:600}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact>td{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact-subheading{grid-column:1/-1;display:block}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact-subheading>th{border-block:var(--yii-debug-border);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 15%);width:auto;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;text-align:left;padding:8px 12px;font-weight:600;display:block}.yii-debug .yii-debug-phpinfo-status-pill,.yii-debug .yii-debug-phpinfo-redacted{border-radius:var(--yii-debug-radius-pill);width:-moz-fit-content;width:fit-content;font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.03em;border:1px solid #0000;align-items:center;padding:1px 8px;font-weight:600;display:inline-flex}.yii-debug .yii-debug-phpinfo-status-pill[data-variant=success]{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 65%);background:color-mix(in srgb, var(--yii-debug-success), transparent 88%);color:var(--yii-debug-success)}.yii-debug .yii-debug-phpinfo-status-pill[data-variant=muted]{border-color:var(--yii-debug-panel-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-phpinfo-redacted{border-color:color-mix(in srgb, var(--yii-debug-warning), transparent 65%);background:color-mix(in srgb, var(--yii-debug-warning), transparent 90%);color:color-mix(in srgb, var(--yii-debug-warning) 72%, var(--yii-debug-panel-text));text-transform:uppercase}.yii-debug .yii-debug-phpinfo-table-section.is-note .yii-debug-table.is-note{table-layout:auto;min-width:0}.yii-debug .yii-debug-phpinfo-table-section.is-note .yii-debug-table.is-note td,.yii-debug .yii-debug-phpinfo-table-section.is-note .yii-debug-table.is-note th{width:auto;padding:var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);text-align:left;line-height:1.6}@media (max-width:720px){.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tbody{grid-template-columns:1fr}.yii-debug .yii-debug-phpinfo-table-section.is-facts .yii-debug-table.is-facts tr.yii-debug-phpinfo-fact{border-right:0}}@media (max-width:959px){.yii-debug .yii-debug-sidebar{min-width:0}.yii-debug .yii-debug-nav{overscroll-behavior-x:contain;scrollbar-width:thin;overflow-x:auto}.yii-debug .yii-debug-nav ul{gap:var(--yii-debug-space-1);flex-direction:row;width:max-content;min-width:100%}.yii-debug .yii-debug-nav-link{white-space:nowrap;min-height:40px}.yii-debug .yii-debug-nav-link:after{display:none}.yii-debug .yii-debug-nav-link-icon{margin-right:var(--yii-debug-space-1)}}@media (max-width:767px){.yii-debug .yii-debug-page{padding:var(--yii-debug-space-2)}.yii-debug .yii-debug-card{padding:var(--yii-debug-space-3)}}@media (prefers-reduced-motion:reduce){.yii-debug *,.yii-debug :before,.yii-debug :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@keyframes yii-debug-readout-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes yii-debug-led-pulse{0%,to{box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-success), transparent 75%)}50%{box-shadow:0 0 0 6px color-mix(in srgb, var(--yii-debug-success), transparent 90%)}}.yii-debug-tl-filter{align-items:end;gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);flex-wrap:wrap;display:flex}.yii-debug-tl-field{flex-direction:column;gap:4px;min-width:160px;display:flex}.yii-debug-tl-field label{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs);letter-spacing:.06em;text-transform:uppercase;font-weight:600}.yii-debug-tl-field input{padding:6px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);color:var(--yii-debug-panel-text);font:inherit;font-family:var(--yii-debug-font-mono)}.yii-debug-tl-field input::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug-tl-field input:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug-tl-field-grow{flex:240px}.yii-debug-tl-hint{margin-bottom:var(--yii-debug-space-3);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:1px dashed color-mix(in srgb, var(--yii-debug-panel-border) 70%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%)}.yii-debug-tl-hint-title{color:var(--yii-debug-panel-text);margin:0 0 6px;font-weight:600}.yii-debug-tl-hint-body{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-sm);margin:0;line-height:1.55}.yii-debug-tl-hint-body em{color:var(--yii-debug-panel-text);font-style:normal;font-weight:600}.yii-debug-tl{--yii-debug-tl-label-col:22%;grid-template-columns:minmax(180px, var(--yii-debug-tl-label-col)) 1fr;border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);grid-template-rows:auto 1fr auto;gap:0;display:grid;overflow:hidden}@media (max-width:1440px){.yii-debug-tl{--yii-debug-tl-label-col:32%}}.yii-debug-tl-axis{border-bottom:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);grid-column:2/3;height:32px;padding:8px 0;position:relative}.yii-debug-tl-tick{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;white-space:nowrap;pointer-events:none;position:absolute;top:8px;transform:translate(-50%)}.yii-debug-tl-tick:after{content:"";background:var(--yii-debug-panel-border);width:1px;height:8px;position:absolute;top:18px;left:50%}.yii-debug-tl-rows{grid-column:1/3;grid-template-columns:minmax(180px, var(--yii-debug-tl-label-col)) 1fr;background:linear-gradient(to right, transparent calc(var(--yii-debug-tl-label-col) - 1px), var(--yii-debug-panel-border) calc(var(--yii-debug-tl-label-col) - 1px), var(--yii-debug-panel-border) var(--yii-debug-tl-label-col), transparent var(--yii-debug-tl-label-col));display:grid}.yii-debug-tl-row{display:contents}.yii-debug-tl-row:hover .yii-debug-tl-label,.yii-debug-tl-row:hover .yii-debug-tl-track{background:var(--yii-debug-panel-surface-hover)}.yii-debug-tl-row:hover .yii-debug-tl-name{color:var(--yii-debug-panel-text)}.yii-debug-tl-label{min-width:0;padding:8px var(--yii-debug-space-3) 8px calc(var(--yii-debug-space-3) + (var(--depth,0) * 14px));border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;transition:background-color .12s;display:grid}.yii-debug-tl-dot{background:var(--yii-debug-cat-db);opacity:.85;border-radius:50%;flex:none;width:6px;height:6px}.yii-debug-tl-name{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);color:var(--yii-debug-panel-muted);text-overflow:ellipsis;white-space:nowrap;transition:color .12s;overflow:hidden}.yii-debug-tl-track{border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);transition:background-color .12s;position:relative}.yii-debug-tl-bar{background:var(--yii-debug-cat-db);border-radius:4px;min-width:2px;height:18px;position:absolute;top:50%;transform:translateY(-50%);box-shadow:inset 0 1px #ffffff1f,0 1px 2px #0000002e}.yii-debug-tl-bar-duration{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;white-space:nowrap;justify-self:end;font-weight:500}.yii-debug-tl-memory{grid-template-columns:minmax(180px, var(--yii-debug-tl-label-col)) 1fr auto;padding:var(--yii-debug-space-2) var(--yii-debug-space-3);border-top:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);grid-column:1/3;align-items:center;display:grid}.yii-debug-tl-memory-label{text-transform:uppercase;letter-spacing:.06em}.yii-debug-tl-memory-track{border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-surface), transparent 50%);width:100%;color:var(--yii-debug-panel-primary);position:relative;overflow:hidden}.yii-debug-tl-memory-track svg{width:100%;height:100%;display:block}.yii-debug-tl-memory-peak{margin-left:var(--yii-debug-space-2);color:var(--yii-debug-panel-text);font-weight:700}@media (max-width:640px){.yii-debug-tl,.yii-debug-tl-rows{--yii-debug-tl-label-col:52%;grid-template-columns:minmax(140px, var(--yii-debug-tl-label-col)) minmax(0, 1fr)}.yii-debug-tl-label{padding:7px var(--yii-debug-space-2);gap:6px}.yii-debug-tl-memory{grid-template-columns:minmax(140px, var(--yii-debug-tl-label-col)) minmax(0, 1fr)}.yii-debug-tl-memory-peak{text-align:right;grid-column:2;margin:4px 0 0}}.yii-debug .yii-debug-skip-link{top:var(--yii-debug-space-2);left:var(--yii-debug-space-2);z-index:1000;padding:var(--yii-debug-space-2) var(--yii-debug-space-3);border:2px solid var(--yii-debug-focus-ring);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-md);color:var(--yii-debug-panel-text);transform:translateY(calc(-100% - var(--yii-debug-space-4)));font-weight:700;position:fixed}.yii-debug .yii-debug-skip-link:focus-visible{text-decoration:none;transform:translateY(0)}.yii-debug .yii-debug-brand-chip-control{border:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted);cursor:pointer;justify-content:center}.yii-debug .yii-debug-brand-chip-control:hover,.yii-debug .yii-debug-brand-chip-control:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);color:var(--yii-debug-panel-primary-strong);transform:translateY(-1px)}.yii-debug :is(h2,h3).yii-debug-has-permalink{align-items:center;gap:var(--yii-debug-space-1);scroll-margin-block-start:var(--yii-debug-space-5);display:flex}.yii-debug .yii-debug-heading-permalink{border-radius:var(--yii-debug-radius-sm);min-width:32px;min-height:32px;color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);opacity:0;transition:color var(--yii-debug-duration-fast) ease, opacity var(--yii-debug-duration-fast) ease, background var(--yii-debug-duration-fast) ease;flex:none;justify-content:center;align-items:center;line-height:1;text-decoration:none;display:inline-flex}.yii-debug .yii-debug-heading-permalink:hover,.yii-debug .yii-debug-heading-permalink:focus-visible{background:var(--yii-debug-panel-bg-accent);color:var(--yii-debug-panel-primary-strong);opacity:1;text-decoration:none}.yii-debug :is(h2,h3).yii-debug-has-permalink:hover>.yii-debug-heading-permalink,.yii-debug :is(h2,h3).yii-debug-has-permalink:focus-within>.yii-debug-heading-permalink,.yii-debug :is(h2,h3).yii-debug-deep-link-target>.yii-debug-heading-permalink{opacity:1}.yii-debug .yii-debug-deep-link-target{outline:2px solid var(--yii-debug-focus-ring);outline-offset:4px}.yii-debug .yii-debug-db-n1-summary{gap:var(--yii-debug-space-2);margin-bottom:var(--yii-debug-space-4);padding:var(--yii-debug-space-3) var(--yii-debug-space-4);border:1px solid color-mix(in srgb, var(--yii-debug-warning), transparent 55%);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-warning), transparent 92%);display:grid}.yii-debug .yii-debug-db-n1-heading{justify-content:space-between;align-items:baseline;gap:var(--yii-debug-space-2);flex-wrap:wrap;display:flex}.yii-debug .yii-debug-db-n1-list{gap:var(--yii-debug-space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link{align-items:center;gap:var(--yii-debug-space-2);min-height:var(--yii-debug-control-min-size);padding:var(--yii-debug-space-1) var(--yii-debug-space-2);border:1px solid color-mix(in srgb, var(--yii-debug-warning), transparent 60%);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);color:color-mix(in srgb, var(--yii-debug-warning) 72%, var(--yii-debug-panel-text));font-size:var(--yii-debug-fs-xs);font-weight:700;text-decoration:none;display:inline-flex}:is(.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link):hover,:is(.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link):focus-visible,:is(.yii-debug .yii-debug-db-n1-link,.yii-debug .yii-debug-db-n1-row-link)[aria-current=true]{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-panel-text);text-decoration:none}.yii-debug .yii-debug-db-n1-fingerprint{max-width:min(56ch,65vw);font-family:var(--yii-debug-font-mono);text-overflow:ellipsis;white-space:nowrap;font-weight:500;display:inline-block;overflow:hidden}.yii-debug .yii-debug-db-n1-row-link{margin-top:var(--yii-debug-space-3)}.yii-debug .yii-debug-grid-db .yii-debug-trace{gap:0;display:grid}.yii-debug .yii-debug-grid-db .yii-debug-trace a{align-items:center;min-height:24px;display:inline-flex}.yii-debug .yii-debug-db-n1-clear[hidden]{display:none}.yii-debug .yii-debug-compare-form{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));align-items:end;display:grid}.yii-debug .yii-debug-compare-overview{gap:var(--yii-debug-space-3);margin-bottom:var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));display:grid}.yii-debug .yii-debug-compare-grid{min-width:42rem}.yii-debug :is(.yii-debug-delta-up,.yii-debug-delta-down,.yii-debug-delta-neutral){padding:2px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);font-variant-numeric:tabular-nums;align-items:center;font-weight:700;display:inline-flex}.yii-debug .yii-debug-delta-up{border-color:color-mix(in srgb, var(--yii-debug-danger), transparent 60%);background:color-mix(in srgb, var(--yii-debug-danger), transparent 90%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-delta-down{border-color:color-mix(in srgb, var(--yii-debug-success), transparent 60%);background:color-mix(in srgb, var(--yii-debug-success), transparent 90%);color:var(--yii-debug-success)}.yii-debug .yii-debug-delta-neutral{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}@container yii-debug-main (width<=560px){.yii-debug .yii-debug-section-header,.yii-debug .yii-debug-panel-heading{flex-direction:column;align-items:stretch}.yii-debug .yii-debug-filter-input{width:100%;max-width:none}}@media (max-width:767px){.yii-debug .yii-debug-brand-chip-copy .yii-debug-brand-label{text-overflow:ellipsis;white-space:nowrap;max-width:5.5rem;overflow:hidden}}@media (pointer:coarse){.yii-debug .yii-debug-grid-db .yii-debug-trace a{min-width:44px;min-height:44px}.yii-debug :is(.yii-debug-btn,.yii-debug-brand-chip,.yii-debug-cell-more-toggle,.yii-debug-filter-input,.yii-debug-heading-permalink,.yii-debug-server-group-summary,.yii-debug-tab-link){min-height:44px}}@media (forced-colors:active){.yii-debug .yii-debug-card,.yii-debug .yii-debug-brand-bar,.yii-debug .yii-debug-brand-chip,.yii-debug .yii-debug-nav,.yii-debug .yii-debug-table-wrap{box-shadow:none;border-color:canvastext}.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-tab-link.is-active{color:highlighttext;background:highlight;border-color:highlight}.yii-debug :focus-visible{outline-color:highlight}} diff --git a/resources/src/styles/main.css b/resources/src/styles/main.css index 3aa99a0..671a3cc 100644 --- a/resources/src/styles/main.css +++ b/resources/src/styles/main.css @@ -3471,6 +3471,138 @@ } } + /** + * Multi-line log message: the text keeps its line breaks and indentation + * but reads like the single-line messages around it. + */ + .yii-debug-log-text { + margin: 0; + padding: 0; + background: none; + color: inherit; + font-family: var(--yii-debug-font-mono); + font-size: var(--yii-debug-fs-xs); + line-height: 1.6; + font-variant-ligatures: none; + white-space: pre-wrap; + overflow-wrap: anywhere; + } + + /** + * print_r() dump tree: an open root block over collapsed nested blocks, + * sharing the tokens of the queue payload tree. A highlighted + * var_export() message shares the box. + */ + .yii-debug-log-dump, + .yii-debug-log-export pre { + padding: var(--yii-debug-space-2) var(--yii-debug-space-3); + border-radius: var(--yii-debug-radius-sm); + background: color-mix( + in srgb, + var(--yii-debug-panel-text), + transparent 96% + ); + font-family: var(--yii-debug-font-mono); + font-size: var(--yii-debug-fs-xs); + line-height: 1.6; + font-variant-ligatures: none; + } + + .yii-debug-log-dump-summary, + .yii-debug-log-dump-row { + display: flex; + flex-wrap: wrap; + align-items: baseline; + gap: 2px var(--yii-debug-space-2); + padding-left: calc(1ch + var(--yii-debug-space-2)); + } + + /* The marker sits in the padding so it never wraps apart from the label. */ + .yii-debug-log-dump-summary { + position: relative; + cursor: pointer; + list-style: none; + + &::-webkit-details-marker { + display: none; + } + + &::before { + position: absolute; + left: 0; + content: "\25B8"; + color: var(--yii-debug-panel-muted); + } + } + + :is(.yii-debug-log-dump, .yii-debug-log-dump-node)[open] + > .yii-debug-log-dump-summary::before { + transform: rotate(90deg); + } + + .yii-debug-log-dump-entries { + margin-left: 0.5ch; + padding-left: calc(0.5ch + var(--yii-debug-space-2)); + border-left: 1px dashed + color-mix(in srgb, var(--yii-debug-panel-text), transparent 80%); + } + + .yii-debug-log-dump-key { + font-weight: 700; + white-space: pre-wrap; + overflow-wrap: anywhere; + + &::after { + content: ":"; + color: var(--yii-debug-panel-muted); + } + } + + .yii-debug-log-dump-value { + flex: 1 1 16ch; + min-width: 0; + white-space: pre-wrap; + overflow-wrap: anywhere; + } + + .yii-debug-log-dump-kind, + .yii-debug-log-dump-visibility, + .yii-debug-log-dump-recursion { + padding: 0 6px; + border-radius: 3px; + background: color-mix( + in srgb, + var(--yii-debug-panel-text), + transparent 92% + ); + letter-spacing: 0.05em; + } + + .yii-debug-log-dump-kind, + .yii-debug-log-dump-recursion { + text-transform: uppercase; + } + + .yii-debug-log-dump-kind, + .yii-debug-log-dump-visibility, + .yii-debug-log-dump-count, + .yii-debug-log-dump-prefix, + .yii-debug-log-dump-empty { + color: var(--yii-debug-panel-muted); + } + + .yii-debug-log-dump-visibility, + .yii-debug-log-dump-empty { + font-style: italic; + cursor: help; + } + + .yii-debug-log-dump-recursion { + background: color-mix(in srgb, var(--yii-debug-warning), transparent 86%); + color: var(--yii-debug-warning); + cursor: help; + } + /* Inline helper utilities. */ .yii-debug-muted { color: var(--yii-debug-panel-muted); diff --git a/src/Helper/PhpHighlighter.php b/src/Helper/PhpHighlighter.php index e0bf070..ebb40e3 100644 --- a/src/Helper/PhpHighlighter.php +++ b/src/Helper/PhpHighlighter.php @@ -15,10 +15,8 @@ final class PhpHighlighter /** * Highlights a value as the PHP expression that would recreate it. * - * The expression is built here and handed straight to PHP's highlighter, which escapes it, so the result carries no - * markup from the captured value. - * - * The `
` wrapper scrolls horizontally, so it carries `tabindex="0"` to stay reachable by keyboard.
+ * The expression is built here with {@see Dump::export()} and handed to {@see self::highlightCode()}, so the result
+ * carries no markup from the captured value.
*
* @param mixed $value JSON-safe value to render.
*
@@ -26,6 +24,30 @@ final class PhpHighlighter
* snippet.
*/
public static function highlight(mixed $value): string
+ {
+ return self::highlightCode(Dump::export($value));
+ }
+
+ /**
+ * Highlights PHP source text, such as the `var_export()` output carried by a log message.
+ *
+ * PHP's highlighter escapes the whole source, so markup carried by the text renders as text and never as markup.
+ * The source is only highlighted, never evaluated.
+ *
+ * The `` wrapper scrolls horizontally, so it carries `tabindex="0"` to stay reachable by keyboard.
+ *
+ * Usage example:
+ * ```php
+ * $html = PhpHighlighter::highlightCode("array (\n 'id' => 7,\n)");
+ * // 'array (' . "\n" . ' ...'
+ * ```
+ *
+ * @param string $code PHP source of an expression, without the opening tag.
+ *
+ * @return string Highlighted markup in a focusable ``, without the opening tag PHP needs to recognize the
+ * snippet.
+ */
+ public static function highlightCode(string $code): string
{
return (string) preg_replace(
[
@@ -34,7 +56,7 @@ public static function highlight(mixed $value): string
'~^~',
],
['$1', '$1', ''],
- highlight_string("'a\r\nb'");
+ * // "'a
b'"
+ * ```
+ *
+ * @param string $html Escaped HTML markup.
+ *
+ * @return string Markup without raw line breaks.
+ */
+ public static function preserveHtmlLineBreaks(string $html): string
+ {
+ return str_replace(self::LINE_BREAKS, '
', $html);
+ }
+
+ /**
+ * Escapes text for HTML content and writes each of its line breaks as the `
` character reference.
+ *
+ * The UI Awesome block builders other than `` collapse consecutive line breaks in their rendered output, which
+ * drops the blank lines of a multi-line value rendered inside them; a character reference survives that
+ * normalization and still renders as a line break under `white-space: pre-wrap`. `\r\n` and a lone `\r` become one
+ * line break, as the HTML parser reads them.
+ *
+ * Usage example:
+ * ```php
+ * $html = Pre::tag()->html(Text::preserveLineBreaks("a\n\n"))->render();
+ * // "\na
<b>\n
"
+ * ```
+ *
+ * @param string $text Raw text to render.
+ *
+ * @return string Escaped HTML content without raw line breaks.
+ */
+ public static function preserveLineBreaks(string $text): string
+ {
+ return self::preserveHtmlLineBreaks(Encode::content($text));
+ }
+
/**
* Strips the authority from a captured URL for display, retaining its path, non-empty query, and fragment.
*
diff --git a/src/Panel/Log/LogCellRenderer.php b/src/Panel/Log/LogCellRenderer.php
index df79a82..79d8f62 100644
--- a/src/Panel/Log/LogCellRenderer.php
+++ b/src/Panel/Log/LogCellRenderer.php
@@ -5,7 +5,7 @@
namespace PHPForge\Debug\Panel\Log;
use Closure;
-use PHPForge\Debug\Helper\{CellMore, Disclosure, Dump, Format, Fqcn, LogLevel, Vocabulary};
+use PHPForge\Debug\Helper\{CellMore, Disclosure, Dump, Format, Fqcn, LogLevel, PhpHighlighter, Text, Vocabulary};
use PHPForge\Debug\Panel\Db\SqlHighlighter;
use PHPForge\Debug\Theme\Css;
use UIAwesome\Html\Flow\{Div, Pre};
@@ -21,6 +21,7 @@
use function is_array;
use function sprintf;
use function str_starts_with;
+use function strpbrk;
/**
* Renders the typed cells of the logs grid for the Log debug panel.
@@ -31,6 +32,10 @@ final class LogCellRenderer
* Class of the key/value list revealed by the context disclosure.
*/
private const string CONTEXT_CLASS = 'yii-debug-log-context';
+ /**
+ * Classes of the block holding a highlighted PHP value export: the Request panel dump wrapper plus the log variant.
+ */
+ private const string EXPORT_CLASS = 'yii-debug-php-dump yii-debug-log-export';
/**
* @var array Maps the four severity levels surfaced in the grid to the row variant CSS modifier.
*/
@@ -44,6 +49,10 @@ final class LogCellRenderer
* (the DB collector category defaults).
*/
private const string SQL_CATEGORY_PREFIX = 'yii\db\Command::';
+ /**
+ * Class of the block preserving the line breaks and indentation of a multi-line message.
+ */
+ private const string TEXT_CLASS = 'yii-debug-log-text';
/**
* Builds the GridView `rowOptions` array for the row: anchor id (`log-{N}`) and severity-driven CSS class.
@@ -91,8 +100,13 @@ public static function renderLevelCell(LogRow $row): string
* The row holds the message as a display string (already exported when the source was non-string), so the renderer
* escapes it once — except for DB command entries and for any message {@see SqlHighlighter::isStatement()} reads
* as raw SQL, which render through {@see SqlHighlighter::highlight()} with the same token spans as the db panel
- * queries grid. Long messages collapse behind the {@see CellMore} clamp. A non-empty context renders as a collapsed
- * {@see Disclosure} holding a ``: scalar values inline in ``, arrays as a `` block.
+ * queries grid. A message {@see PrintRParser::parse()} reads as a `print_r()` dump renders as the collapsible
+ * {@see PrintRTreeRenderer} tree; a multi-line message {@see PhpExportDetector::detect()} reads as a `var_export()`
+ * value renders through {@see PhpHighlighter::highlightCode()} like the Request panel dumps; any other multi-line
+ * message renders in a `` that preserves its line breaks and indentation, and a
+ * single-line message as escaped text. Long SQL, export, and text messages collapse behind the {@see CellMore}
+ * clamp; the tree collapses on its own. A non-empty context renders as a collapsed {@see Disclosure} holding a
+ * ``: scalar values inline in ``, arrays as a `` block.
*
* @param LogRow $row Typed log record.
* @param Closure(array): string $traceLine Renders one backtrace frame as a link line.
@@ -102,14 +116,11 @@ public static function renderMessageCell(LogRow $row, Closure $traceLine): strin
$isSql = str_starts_with($row->category, self::SQL_CATEGORY_PREFIX)
|| SqlHighlighter::isStatement($row->message);
- $body = $isSql
- ? Div::tag()
- ->class('yii-debug-db-sql')
- ->html(SqlHighlighter::highlight($row->message))
- ->render()
- : Encode::content($row->message);
+ $tree = $isSql ? null : PrintRParser::parse($row->message);
- $body = CellMore::clamp($body, $row->message);
+ $body = $tree === null
+ ? CellMore::clamp(self::renderMessageText($row->message, $isSql), $row->message)
+ : PrintRTreeRenderer::render($tree);
if ($row->context !== []) {
$body .= self::renderContext($row->context);
@@ -202,10 +213,56 @@ private static function renderContext(array $context): string
return Disclosure::render(
sprintf(LogMessage::CONTEXT_SUMMARY->value, count($context)),
- Dl::tag()->class(self::CONTEXT_CLASS)->html(...$items)->render(),
+ Dl::tag()
+ ->class(self::CONTEXT_CLASS)
+ ->html(...$items)
+ ->render(),
);
}
+ /**
+ * Renders the message body: highlighted SQL, a highlighted PHP value export, a `` block preserving the layout of
+ * a multi-line message through {@see Text::preserveLineBreaks()}, or the escaped single-line text.
+ *
+ * A message is multi-line when it holds a line feed or a carriage return. The export renders in the short array
+ * syntax {@see PhpExportDetector::detect()} returns, inside the Request panel dump wrapper. Its line breaks, `\r\n`
+ * and a lone `\r` included, are written as `
` through {@see Text::preserveHtmlLineBreaks()} for the same reason
+ * as the text block: the enclosing block builders would otherwise collapse the blank lines of a multi-line string
+ * value.
+ *
+ * @param string $message Log message.
+ * @param bool $isSql Whether the message is a SQL statement.
+ *
+ * @return string Unclamped message markup.
+ */
+ private static function renderMessageText(string $message, bool $isSql): string
+ {
+ if ($isSql) {
+ return Div::tag()
+ ->class('yii-debug-db-sql')
+ ->html(SqlHighlighter::highlight($message))
+ ->render();
+ }
+
+ if (strpbrk($message, "\r\n") === false) {
+ return Encode::content($message);
+ }
+
+ $export = PhpExportDetector::detect($message);
+
+ if ($export !== null) {
+ return Div::tag()
+ ->class(self::EXPORT_CLASS)
+ ->html(Text::preserveHtmlLineBreaks(PhpHighlighter::highlightCode($export)))
+ ->render();
+ }
+
+ return Pre::tag()
+ ->class(self::TEXT_CLASS)
+ ->html(Text::preserveLineBreaks($message))
+ ->render();
+ }
+
/**
* Renders one nav arrow as either a disabled `` when `$targetId` is `null`, or an `` linking to
* `#log-{targetId}` otherwise.
diff --git a/src/Panel/Log/LogMessage.php b/src/Panel/Log/LogMessage.php
index c577dfe..f0c0769 100644
--- a/src/Panel/Log/LogMessage.php
+++ b/src/Panel/Log/LogMessage.php
@@ -36,6 +36,71 @@ enum LogMessage: string
*/
case DELTA = 'Delta';
+ /**
+ * Marker of an empty scalar in a `print_r()` dump tree.
+ */
+ case DUMP_EMPTY = 'empty';
+
+ /**
+ * Tooltip of the empty marker, explaining why the dump cannot name the original value.
+ */
+ case DUMP_EMPTY_TITLE = 'print_r() prints an empty string, null, and false the same way';
+
+ /**
+ * `sprintf()` template of the entry count of a dump block holding zero or several entries.
+ */
+ case DUMP_ENTRIES = '%d entries';
+
+ /**
+ * Entry count of a dump block holding one entry.
+ */
+ case DUMP_ENTRY = '1 entry';
+
+ /**
+ * Kind chip of an array in a dump tree.
+ */
+ case DUMP_KIND_ARRAY = 'array';
+
+ /**
+ * Kind chip of an enum case in a dump tree.
+ */
+ case DUMP_KIND_ENUM = 'enum';
+
+ /**
+ * Kind chip of an object in a dump tree.
+ */
+ case DUMP_KIND_OBJECT = 'object';
+
+ /**
+ * Visibility chip of a private property in a dump tree.
+ */
+ case DUMP_PRIVATE = 'private';
+
+ /**
+ * `sprintf()` template of the tooltip of a private property chip, naming the declaring class.
+ */
+ case DUMP_PRIVATE_TITLE = 'Private property declared in %s';
+
+ /**
+ * Visibility chip of a protected property in a dump tree.
+ */
+ case DUMP_PROTECTED = 'protected';
+
+ /**
+ * Tooltip of a protected property chip, explaining why no declaring class is shown.
+ */
+ case DUMP_PROTECTED_TITLE = 'Protected property; print_r() does not name the declaring class';
+
+ /**
+ * Marker of a value that contains itself in a dump tree.
+ */
+ case DUMP_RECURSION = 'recursion';
+
+ /**
+ * Tooltip of the recursion marker.
+ */
+ case DUMP_RECURSION_TITLE = 'print_r() stopped here because the value contains itself';
+
/**
* Explanation of the empty state, naming the target that feeds the panel.
*/
diff --git a/src/Panel/Log/PhpExportDetector.php b/src/Panel/Log/PhpExportDetector.php
new file mode 100644
index 0000000..f055e65
--- /dev/null
+++ b/src/Panel/Log/PhpExportDetector.php
@@ -0,0 +1,267 @@
+::__set_state(`) and is exactly one syntactically valid PHP expression, within {@see PrintRParser::MAX_BYTES}
+ * bytes, made only of the token kinds these exports print: arrays, casts to `object`, quoted strings without
+ * interpolation, numbers, names, `::`, `=>`, `-`, `.`, `,`, and whitespace. Variables, interpolated strings, heredocs,
+ * comments, closures, statements, and inline output are rejected. The check tokenizes the message with the PHP parser
+ * and never evaluates it. Parser diagnostics are muted while it runs: a no-op error handler keeps a deprecation (such as
+ * a `(boolean)` cast) away from the application's error handler, and the `@` operator keeps a compile warning (such as
+ * an `"\400"` octal overflow), which no user handler can catch, out of the response.
+ *
+ * The returned source writes every `array(...)` as `[...]`, moves a value that `var_export()` prints on the line after
+ * its `=>` up to the key, indents each line by four spaces per open bracket, and writes an empty array as `[]`. Tokens
+ * keep their text, so string contents never change; a short-syntax export such as `VarDumper::export()` output keeps its
+ * layout. More than {@see PrintRParser::MAX_DEPTH} nested arrays, or a result longer than {@see self::MAX_OUTPUT}
+ * bytes, yields `null`.
+ *
+ * Usage example:
+ * ```php
+ * $code = PhpExportDetector::detect(var_export(['user' => ['id' => 7]], true));
+ * // "[\n 'user' => [\n 'id' => 7,\n ],\n]"
+ * ```
+ */
+final class PhpExportDetector
+{
+ /**
+ * Token id of `]`; a single-character token has the byte value of its character as id.
+ */
+ private const int CLOSE_BRACKET = 93;
+ /**
+ * Token id of `)`.
+ */
+ private const int CLOSE_PARENTHESIS = 41;
+ /**
+ * Indentation of one bracket level.
+ */
+ private const string INDENT = ' ';
+ /**
+ * Maximum size of the returned source, in bytes: re-indentation may enlarge a deeply nested export.
+ */
+ private const int MAX_OUTPUT = 4 * PrintRParser::MAX_BYTES;
+ /**
+ * Token id of `[`.
+ */
+ private const int OPEN_BRACKET = 91;
+ /**
+ * Token id of `(`.
+ */
+ private const int OPEN_PARENTHESIS = 40;
+ /**
+ * Leading text of a PHP value export: an `array (` or short `[` array, a `stdClass` cast, or a `__set_state()` call.
+ */
+ private const string OPENER = '/^(?:array \(|\[|\(object\) array\(|\\\\[\w\\\\\x80-\xff]+::__set_state\()/';
+ /**
+ * Ids of the tokens a `var_export()` or `VarDumper::export()` value is made of: the four brackets, `,` (44), `-`
+ * (45), and `.` (46), which joins the parts of a binary string.
+ */
+ private const array TOKENS = [
+ self::CLOSE_BRACKET,
+ self::CLOSE_PARENTHESIS,
+ self::OPEN_BRACKET,
+ self::OPEN_PARENTHESIS,
+ 44,
+ 45,
+ 46,
+ T_ARRAY,
+ T_CONSTANT_ENCAPSED_STRING,
+ T_DNUMBER,
+ T_DOUBLE_ARROW,
+ T_DOUBLE_COLON,
+ T_LNUMBER,
+ T_NAME_FULLY_QUALIFIED,
+ T_OBJECT_CAST,
+ T_STRING,
+ T_WHITESPACE,
+ ];
+
+ /**
+ * Returns a PHP value export in short array syntax.
+ *
+ * @param string $message Log message to inspect.
+ *
+ * @return string|null Export source in short array syntax, or `null` when the message is not a single export
+ * expression within the size, depth, and output bounds.
+ */
+ public static function detect(string $message): string|null
+ {
+ if (strlen($message) > PrintRParser::MAX_BYTES) {
+ return null;
+ }
+
+ $code = trim($message);
+
+ if (preg_match(self::OPENER, $code) !== 1) {
+ return null;
+ }
+
+ $tokens = self::tokenize($code);
+
+ return $tokens === null ? null : self::shortArrays($tokens);
+ }
+
+ /**
+ * Lays out the whitespace between two tokens.
+ *
+ * Whitespace without a line break stays as is. A line break (`\n`, `\r\n`, or `\r`) after `=>` becomes one space, a
+ * line break inside an empty array disappears, and any other line break starts a line indented to the bracket
+ * depth, one level less before a closing bracket.
+ *
+ * @param string $space Whitespace text, or `''` when the tokens are adjacent.
+ * @param int $previous Id of the token before the whitespace; `[` for the `(` of an `array(`.
+ * @param bool $closes Whether the token after the whitespace closes an array.
+ * @param int $depth Number of arrays open before the token after the whitespace.
+ */
+ private static function layout(string $space, int $previous, bool $closes, int $depth): string
+ {
+ if (strpbrk($space, "\r\n") === false) {
+ return $space;
+ }
+
+ if ($previous === T_DOUBLE_ARROW) {
+ return ' ';
+ }
+
+ if ($closes) {
+ return $previous === self::OPEN_BRACKET ? '' : "\n" . str_repeat(self::INDENT, $depth - 1);
+ }
+
+ return "\n" . str_repeat(self::INDENT, $depth);
+ }
+
+ /**
+ * Rebuilds the expression from its tokens with `array(...)` written as `[...]`.
+ *
+ * Structure is read from token ids, never from token text. A stack holds one entry per open array, counting the
+ * other parentheses open inside it, so the `)` closing an `array(` is told from the one closing a call such as
+ * `__set_state(`; the depth is the size of that stack and never drops below zero.
+ *
+ * @param array $tokens Tokens of the expression, in source order.
+ *
+ * @return string|null Expression source in short array syntax, or `null` when it nests more than
+ * {@see PrintRParser::MAX_DEPTH} arrays or grows beyond {@see self::MAX_OUTPUT} bytes.
+ */
+ private static function shortArrays(array $tokens): string|null
+ {
+ $arrays = [];
+ $code = '';
+ $keyword = false;
+ $previous = T_RETURN;
+ $space = '';
+
+ foreach ($tokens as $token) {
+ if ($token->id === T_WHITESPACE) {
+ $space = $keyword ? '' : $token->text;
+
+ continue;
+ }
+
+ $id = $keyword ? self::OPEN_BRACKET : $token->id;
+ $keyword = $id === T_ARRAY;
+ $inner = end($arrays);
+ $closes = $inner !== false
+ && ($id === self::CLOSE_BRACKET || ($id === self::CLOSE_PARENTHESIS && $inner === 0));
+ $code .= self::layout($space, $previous, $closes, count($arrays));
+ $previous = $id;
+ $space = '';
+
+ if ($closes) {
+ array_pop($arrays);
+ } elseif ($id === self::OPEN_BRACKET) {
+ $arrays[] = 0;
+ } elseif ($inner !== false && $id === self::OPEN_PARENTHESIS) {
+ array_pop($arrays);
+
+ $arrays[] = $inner + 1;
+ } elseif ($inner !== false && $id === self::CLOSE_PARENTHESIS) {
+ array_pop($arrays);
+
+ $arrays[] = $inner - 1;
+ }
+
+ $code .= match (true) {
+ $keyword => '',
+ $closes => ']',
+ $id === self::OPEN_BRACKET => '[',
+ default => $token->text,
+ };
+
+ if (count($arrays) > PrintRParser::MAX_DEPTH || strlen($code) > self::MAX_OUTPUT) {
+ return null;
+ }
+ }
+
+ return $code;
+ }
+
+ /**
+ * Tokenizes the source as the operand of a `return` statement.
+ *
+ * Every token between `return` and the appended `;` must be one {@see self::TOKENS} lists. The statement must end
+ * for the parse to succeed, and that list leaves out `;`, closing tags, and comments, so the appended `;` is the
+ * last token and the only terminator: a `;` or closing tag of the text, or a trailing comment swallowing the
+ * appended `;`, yields `null`. The text cannot smuggle further statements or inline output after the expression.
+ * The error handler is restored on every path.
+ *
+ * @return array|null Tokens of the expression alone, or `null` when the source is not exactly one export
+ * expression.
+ */
+ private static function tokenize(string $code): array|null
+ {
+ set_error_handler(static fn(): bool => true);
+
+ try {
+ $tokens = @PhpToken::tokenize("is(self::TOKENS) === false) {
+ return null;
+ }
+ }
+
+ return $tokens;
+ }
+}
diff --git a/src/Panel/Log/PrintREntry.php b/src/Panel/Log/PrintREntry.php
new file mode 100644
index 0000000..212358b
--- /dev/null
+++ b/src/Panel/Log/PrintREntry.php
@@ -0,0 +1,27 @@
+ value` line of a parsed `print_r()` block.
+ *
+ * Inside object and enum blocks the key is split into the property name, its visibility, and the class that declares
+ * a private property; array keys and the dynamic property names of a `stdClass` object stay verbatim.
+ */
+final readonly class PrintREntry
+{
+ /**
+ * @param string $key Array key or property name.
+ * @param PrintRNode $value Value of the entry.
+ * @param string $visibility `protected`, `private`, or `''` for a public property or an array key.
+ * @param string $declaringClass Class declaring a private property; `''` otherwise.
+ */
+ public function __construct(
+ public string $key,
+ public PrintRNode $value,
+ public string $visibility = '',
+ public string $declaringClass = '',
+ ) {}
+}
diff --git a/src/Panel/Log/PrintRKind.php b/src/Panel/Log/PrintRKind.php
new file mode 100644
index 0000000..f15d425
--- /dev/null
+++ b/src/Panel/Log/PrintRKind.php
@@ -0,0 +1,36 @@
+ Enum` header, optionally suffixed with its backing type.
+ */
+ case ENUM;
+
+ /**
+ * Object block opened by a ` Object` header.
+ */
+ case OBJECT;
+
+ /**
+ * Array or object header followed by the `*RECURSION*` marker instead of a block.
+ */
+ case RECURSION;
+
+ /**
+ * Scalar text: a string, a number, a resource label, or the empty output of `''`, `null`, and `false`.
+ */
+ case SCALAR;
+}
diff --git a/src/Panel/Log/PrintRNode.php b/src/Panel/Log/PrintRNode.php
new file mode 100644
index 0000000..d080865
--- /dev/null
+++ b/src/Panel/Log/PrintRNode.php
@@ -0,0 +1,74 @@
+ $entries Entries of an array, object, or enum block.
+ */
+ private function __construct(
+ public PrintRKind $kind,
+ public string $label,
+ public string $text,
+ public array $entries,
+ ) {}
+
+ /**
+ * Creates an array, object, or enum block.
+ *
+ * @param PrintRKind $kind Block kind: {@see PrintRKind::ARRAY}, {@see PrintRKind::ENUM}, or
+ * {@see PrintRKind::OBJECT}.
+ * @param string $label Class name of an object or enum; `''` for an array.
+ * @param list $entries Entries in dump order.
+ * @param string $prefix Free text preceding the header of a root block, such as `Request:`.
+ *
+ * @return self Block node.
+ */
+ public static function block(PrintRKind $kind, string $label, array $entries, string $prefix = ''): self
+ {
+ return new self($kind, $label, $prefix, $entries);
+ }
+
+ /**
+ * Creates the marker `print_r()` prints instead of an array or object it is already printing.
+ *
+ * @param string $label Class name of a recursive object; `''` for a recursive array.
+ *
+ * @return self Recursion node.
+ */
+ public static function recursion(string $label): self
+ {
+ return new self(PrintRKind::RECURSION, $label, '', []);
+ }
+
+ /**
+ * Creates a scalar value.
+ *
+ * @param string $text Scalar text as printed, continuation lines of a multi-line string included.
+ *
+ * @return self Scalar node.
+ */
+ public static function scalar(string $text): self
+ {
+ return new self(PrintRKind::SCALAR, '', $text, []);
+ }
+}
diff --git a/src/Panel/Log/PrintRParser.php b/src/Panel/Log/PrintRParser.php
new file mode 100644
index 0000000..8b94392
--- /dev/null
+++ b/src/Panel/Log/PrintRParser.php
@@ -0,0 +1,279 @@
+ Object`, ` Enum`, or
+ * ` Enum:`), a `(` line whose indentation plus four spaces is the indentation of the `[key] => value`
+ * entries, and a `)` line at the indentation of `(`. Nested blocks are followed by one blank line, recursive values by a
+ * ` *RECURSION*` line, and the lines of a multi-line string continue until the next entry or the closing `)` of the
+ * block. Only the root header may carry free text before it, such as `Request: Array`; only trailing whitespace may
+ * follow the root block.
+ *
+ * Any other text, a structural mismatch, or a dump beyond {@see self::MAX_BYTES} bytes, {@see self::MAX_DEPTH} nested
+ * blocks, or {@see self::MAX_NODES} values yields `null`; the parser never throws.
+ *
+ * Usage example:
+ * ```php
+ * $node = PrintRParser::parse("Request: Array\n(\n [id] => 7\n)\n");
+ * // $node->kind === PrintRKind::ARRAY, $node->text === 'Request:', $node->entries[0]->key === 'id'
+ * ```
+ */
+final class PrintRParser
+{
+ /**
+ * Maximum size of a parsed message, in bytes; {@see PhpExportDetector} applies the same bound.
+ */
+ public const int MAX_BYTES = 262144;
+ /**
+ * Maximum nesting level of blocks, the root block included; {@see PhpExportDetector} applies the same bound to
+ * nested arrays.
+ */
+ public const int MAX_DEPTH = 32;
+ /**
+ * Separator between the key and the value of an entry line.
+ */
+ private const string ARROW = '] => ';
+ /**
+ * Header of an array or object block, with the optional free text that may precede the root header.
+ */
+ private const string HEADER = '/^(.*\s)?(?:Array|(\S+) (Object|Enum)(?::int|:string)?)$/';
+ /**
+ * Maximum number of values, the root block included.
+ */
+ private const int MAX_NODES = 5000;
+ /**
+ * Line `print_r()` prints after the header of an array or object it is already printing.
+ */
+ private const string RECURSION = ' *RECURSION*';
+ /**
+ * Property key of an object or enum block: name and either `protected` or the declaring class of a private property.
+ */
+ private const string VISIBILITY = '/^([^:]*):(?:(protected)|(.+):private)$/';
+
+ /**
+ * Index of the next line to read.
+ */
+ private int $cursor = 1;
+ /**
+ * Number of values read so far, the root block included.
+ */
+ private int $nodes = 1;
+
+ /**
+ * @param list $lines Lines of the dump, trailing whitespace removed.
+ */
+ private function __construct(private readonly array $lines) {}
+
+ /**
+ * Parses a `print_r()` dump of an array, object, or enum.
+ *
+ * @param string $message Log message to parse.
+ *
+ * @return PrintRNode|null Root block, with the free text preceding its header as {@see PrintRNode::$text}, or
+ * `null` when the message is not a complete dump within the bounds.
+ */
+ public static function parse(string $message): PrintRNode|null
+ {
+ if (strlen($message) > self::MAX_BYTES) {
+ return null;
+ }
+
+ $lines = explode("\n", rtrim($message));
+ $header = self::header($lines[0]);
+
+ if ($header === null) {
+ return null;
+ }
+
+ [$prefix, $kind, $label] = $header;
+
+ $parser = new self($lines);
+ $entries = $parser->opens(0) ? $parser->block(0, self::hasVisibility($kind, $label), 1) : null;
+
+ return $entries === null || $parser->cursor !== count($lines)
+ ? null
+ : PrintRNode::block($kind, $label, $entries, $prefix);
+ }
+
+ /**
+ * Reads the entries of the block whose `(` line is the current line, up to and including its `)` line.
+ *
+ * @param int $indent Indentation of the `(` and `)` lines.
+ * @param bool $visibility Whether the keys are property names that may carry a visibility.
+ * @param int $depth Nesting level of the block, the root block being `1`.
+ *
+ * @return list|null Entries in dump order, or `null` on a structural mismatch or an exceeded bound.
+ */
+ private function block(int $indent, bool $visibility, int $depth): array|null
+ {
+ if ($depth > self::MAX_DEPTH) {
+ return null;
+ }
+
+ $this->cursor++;
+
+ $close = str_repeat(' ', $indent) . ')';
+ $start = str_repeat(' ', $indent + 4) . '[';
+
+ $entries = [];
+
+ while (($line = $this->lines[$this->cursor] ?? '') !== $close) {
+ $entry = self::split($line, $start);
+
+ if ($entry === null || ++$this->nodes > self::MAX_NODES) {
+ return null;
+ }
+
+ $this->cursor++;
+
+ $value = $this->value($entry[1], $indent + 8, $close, $start, $depth);
+
+ if ($value === null) {
+ return null;
+ }
+
+ $entries[] = self::entry($entry[0], $value, $visibility);
+ }
+
+ $this->cursor++;
+
+ return $entries;
+ }
+
+ /**
+ * Builds an entry, splitting the visibility out of a property key when the block's keys may carry one.
+ */
+ private static function entry(string $key, PrintRNode $value, bool $visibility): PrintREntry
+ {
+ if ($visibility && preg_match(self::VISIBILITY, $key, $matches, PREG_UNMATCHED_AS_NULL) === 1) {
+ return $matches[2] === null
+ ? new PrintREntry($matches[1], $value, 'private', (string) $matches[3])
+ : new PrintREntry($matches[1], $value, 'protected');
+ }
+
+ return new PrintREntry($key, $value);
+ }
+
+ /**
+ * Whether the keys of a block are property names to which `print_r()` appends a visibility.
+ *
+ * Array keys never carry one. A `stdClass` object declares no property, so every key is a dynamic property name
+ * kept verbatim, even one such as `status:protected`.
+ */
+ private static function hasVisibility(PrintRKind $kind, string $label): bool
+ {
+ return $kind !== PrintRKind::ARRAY && $label !== stdClass::class;
+ }
+
+ /**
+ * Reads a block header.
+ *
+ * @return array{string, PrintRKind, string}|null Free text preceding the header (right-trimmed), block kind, and
+ * class name, or `null` when the text is not a header.
+ */
+ private static function header(string $text): array|null
+ {
+ if (preg_match(self::HEADER, $text, $matches, PREG_UNMATCHED_AS_NULL) !== 1) {
+ return null;
+ }
+
+ $kind = match ($matches[3]) {
+ null => PrintRKind::ARRAY,
+ 'Enum' => PrintRKind::ENUM,
+ default => PrintRKind::OBJECT,
+ };
+
+ return [rtrim((string) $matches[1]), $kind, (string) $matches[2]];
+ }
+
+ /**
+ * Whether the current line opens a block at the given indentation.
+ */
+ private function opens(int $indent): bool
+ {
+ return ($this->lines[$this->cursor] ?? '') === str_repeat(' ', $indent) . '(';
+ }
+
+ /**
+ * Splits an entry line at the given indentation into its key and the first line of its value.
+ *
+ * @return array{string, string}|null Key and value text, or `null` when the line is not an entry line.
+ */
+ private static function split(string $line, string $start): array|null
+ {
+ $arrow = strpos($line, self::ARROW);
+
+ if ($arrow === false || str_starts_with($line, $start) === false) {
+ return null;
+ }
+
+ $offset = strlen($start);
+
+ return [substr($line, $offset, $arrow - $offset), substr($line, $arrow + 5)];
+ }
+
+ /**
+ * Reads the value of an entry whose line has just been consumed.
+ *
+ * A header followed by the recursion marker or by a `(` line at the child indentation opens a nested value; any
+ * other text is a scalar that absorbs the following lines up to the next entry or the closing line of the block.
+ *
+ * @param string $text Value text on the entry line.
+ * @param int $indent Indentation of a nested block's `(` line.
+ * @param string $close Closing line of the enclosing block.
+ * @param string $start Leading text of an entry line of the enclosing block.
+ * @param int $depth Nesting level of the enclosing block.
+ *
+ * @return PrintRNode|null Value node, or `null` when a nested block is malformed or exceeds a bound.
+ */
+ private function value(string $text, int $indent, string $close, string $start, int $depth): PrintRNode|null
+ {
+ $header = self::header($text);
+
+ if ($header !== null && $header[0] === '') {
+ if (($this->lines[$this->cursor] ?? '') === self::RECURSION) {
+ $this->cursor++;
+
+ return PrintRNode::recursion($header[2]);
+ }
+
+ if ($this->opens($indent)) {
+ $entries = $this->block($indent, self::hasVisibility($header[1], $header[2]), $depth + 1);
+
+ if ($entries === null || ($this->lines[$this->cursor] ?? '') !== '') {
+ return null;
+ }
+
+ $this->cursor++;
+
+ return PrintRNode::block($header[1], $header[2], $entries);
+ }
+ }
+
+ while (($line = $this->lines[$this->cursor] ?? $close) !== $close && self::split($line, $start) === null) {
+ $text .= "\n{$line}";
+ $this->cursor++;
+ }
+
+ return PrintRNode::scalar($text);
+ }
+}
diff --git a/src/Panel/Log/PrintRTreeRenderer.php b/src/Panel/Log/PrintRTreeRenderer.php
new file mode 100644
index 0000000..040c708
--- /dev/null
+++ b/src/Panel/Log/PrintRTreeRenderer.php
@@ -0,0 +1,202 @@
+`; nested non-empty blocks render as collapsed ``, and
+ * scalars, recursion markers, and empty blocks as flat rows. Every key, value, class name, and text is escaped once.
+ *
+ * Usage example:
+ * ```php
+ * $node = PrintRParser::parse($row->message);
+ *
+ * $html = $node === null ? Encode::content($row->message) : PrintRTreeRenderer::render($node);
+ * ```
+ */
+final class PrintRTreeRenderer
+{
+ /**
+ * Renders the root block of a dump, preceded by the free text found before its header.
+ *
+ * @param PrintRNode $root Root block returned by {@see PrintRParser::parse()}.
+ *
+ * @return string Open `` markup of the tree.
+ */
+ public static function render(PrintRNode $root): string
+ {
+ $head = self::head($root);
+
+ if ($root->text !== '') {
+ $head = [self::span('yii-debug-log-dump-prefix', $root->text), ...$head];
+ }
+
+ return Details::tag()
+ ->class('yii-debug-log-dump')
+ ->html(self::summary($head), self::entries($root))
+ ->open(true)
+ ->render();
+ }
+
+ /**
+ * Renders the entry list of a block.
+ */
+ private static function entries(PrintRNode $block): Div
+ {
+ return Div::tag()
+ ->class('yii-debug-log-dump-entries')
+ ->html(...array_map(self::entry(...), $block->entries));
+ }
+
+ /**
+ * Renders one entry: a flat row for a scalar, a recursion marker, or an empty block, and a collapsed ``
+ * for a block with entries.
+ */
+ private static function entry(PrintREntry $entry): Details|Div
+ {
+ $key = [self::span('yii-debug-log-dump-key', $entry->key), ...self::visibility($entry)];
+ $value = $entry->value;
+
+ if ($value->kind === PrintRKind::SCALAR) {
+ return self::row([...$key, self::scalar($value->text)]);
+ }
+
+ $head = [...$key, ...self::head($value)];
+
+ if ($value->entries === []) {
+ return self::row($head);
+ }
+
+ return Details::tag()
+ ->class('yii-debug-log-dump-node')
+ ->html(self::summary($head), self::entries($value));
+ }
+
+ /**
+ * Renders the description of a block or recursion marker: class label, kind chip, and either the entry count or
+ * the recursion marker.
+ *
+ * @return list Rendered parts in display order.
+ */
+ private static function head(PrintRNode $node): array
+ {
+ $head = $node->label === '' ? [] : [Fqcn::renderLabel($node->label)];
+
+ $head[] = self::span(
+ 'yii-debug-log-dump-kind',
+ $node->kind === PrintRKind::ENUM
+ ? LogMessage::DUMP_KIND_ENUM->value
+ : ($node->label === '' ? LogMessage::DUMP_KIND_ARRAY->value : LogMessage::DUMP_KIND_OBJECT->value),
+ );
+
+ if ($node->kind === PrintRKind::RECURSION) {
+ $head[] = self::span(
+ 'yii-debug-log-dump-recursion',
+ LogMessage::DUMP_RECURSION->value,
+ LogMessage::DUMP_RECURSION_TITLE->value,
+ );
+
+ return $head;
+ }
+
+ $count = count($node->entries);
+
+ $head[] = self::span(
+ 'yii-debug-log-dump-count',
+ $count === 1 ? LogMessage::DUMP_ENTRY->value : sprintf(LogMessage::DUMP_ENTRIES->value, $count),
+ );
+
+ return $head;
+ }
+
+ /**
+ * Renders a flat entry row.
+ *
+ * @param list $parts Rendered parts in display order.
+ */
+ private static function row(array $parts): Div
+ {
+ return Div::tag()
+ ->class('yii-debug-log-dump-row')
+ ->html(...$parts);
+ }
+
+ /**
+ * Renders a scalar value with its line breaks kept through {@see Text::preserveLineBreaks()}, or the empty marker
+ * when `print_r()` printed nothing.
+ */
+ private static function scalar(string $text): Span
+ {
+ return $text === ''
+ ? self::span('yii-debug-log-dump-empty', LogMessage::DUMP_EMPTY->value, LogMessage::DUMP_EMPTY_TITLE->value)
+ : Span::tag()
+ ->class('yii-debug-log-dump-value')
+ ->html(Text::preserveLineBreaks($text));
+ }
+
+ /**
+ * Renders a `` of the tree vocabulary with escaped content and an optional tooltip.
+ *
+ * @param string $class Class of the `yii-debug-log-dump-*` vocabulary.
+ * @param string $content Text content.
+ * @param string $title Tooltip, or `''` to omit the attribute.
+ */
+ private static function span(string $class, string $content, string $title = ''): Span
+ {
+ $span = Span::tag()
+ ->class($class)
+ ->content($content);
+
+ return $title === '' ? $span : $span->title($title);
+ }
+
+ /**
+ * Renders the `` of a block.
+ *
+ * @param list $parts Rendered parts in display order.
+ */
+ private static function summary(array $parts): Summary
+ {
+ return Summary::tag()
+ ->class('yii-debug-log-dump-summary')
+ ->html(...$parts);
+ }
+
+ /**
+ * Renders the visibility chip of a protected or private property, naming the declaring class of the latter.
+ *
+ * @return list Chip, or an empty list for a public property or an array key.
+ */
+ private static function visibility(PrintREntry $entry): array
+ {
+ return match ($entry->visibility) {
+ 'private' => [
+ self::span(
+ 'yii-debug-log-dump-visibility',
+ LogMessage::DUMP_PRIVATE->value,
+ sprintf(LogMessage::DUMP_PRIVATE_TITLE->value, $entry->declaringClass),
+ ),
+ ],
+ 'protected' => [
+ self::span(
+ 'yii-debug-log-dump-visibility',
+ LogMessage::DUMP_PROTECTED->value,
+ LogMessage::DUMP_PROTECTED_TITLE->value,
+ ),
+ ],
+ default => [],
+ };
+ }
+}
diff --git a/tests/Helper/PhpHighlighterTest.php b/tests/Helper/PhpHighlighterTest.php
index d40e14d..f60f894 100644
--- a/tests/Helper/PhpHighlighterTest.php
+++ b/tests/Helper/PhpHighlighterTest.php
@@ -5,16 +5,30 @@
namespace PHPForge\Debug\Tests\Helper;
use PHPForge\Debug\Helper\PhpHighlighter;
-use PHPUnit\Framework\Attributes\Group;
+use PHPForge\Debug\Tests\Provider\PhpHighlighterProvider;
+use PHPUnit\Framework\Attributes\{DataProviderExternal, Group};
use PHPUnit\Framework\TestCase;
/**
- * Unit tests for {@see PhpHighlighter} covering the opening tag removal and the escaping of captured payloads.
+ * Unit tests for {@see PhpHighlighter} covering the opening tag removal and the escaping of captured payloads and of
+ * PHP source text.
+ *
+ * {@see PhpHighlighterProvider} for test case data providers.
*/
#[Group('helpers')]
#[Group('php-highlighter')]
final class PhpHighlighterTest extends TestCase
{
+ #[DataProviderExternal(PhpHighlighterProvider::class, 'code')]
+ public function testHighlightCodeRendersSourceWithoutTheOpeningTag(string $code, string $expected): void
+ {
+ self::assertSame(
+ $expected,
+ PhpHighlighter::highlightCode($code),
+ 'Highlighted source markup must match exactly.',
+ );
+ }
+
public function testHighlightEscapesMarkupCarriedByTheCapturedValue(): void
{
$html = PhpHighlighter::highlight("'quoted' ");
diff --git a/tests/Helper/TextTest.php b/tests/Helper/TextTest.php
index 8afb840..2c32e3e 100644
--- a/tests/Helper/TextTest.php
+++ b/tests/Helper/TextTest.php
@@ -5,12 +5,15 @@
namespace PHPForge\Debug\Tests\Helper;
use PHPForge\Debug\Helper\Text;
-use PHPForge\Debug\Tests\Provider\UrlPathProvider;
+use PHPForge\Debug\Tests\Provider\{LineBreakProvider, UrlPathProvider};
use PHPUnit\Framework\Attributes\{DataProviderExternal, Group};
use PHPUnit\Framework\TestCase;
/**
- * Unit tests for {@see Text} covering identifiers, Unicode case conversion, and captured URL display.
+ * Unit tests for {@see Text} covering identifiers, Unicode case conversion, line break preservation, and captured URL
+ * display.
+ *
+ * {@see LineBreakProvider} and {@see UrlPathProvider} for test case data providers.
*/
#[Group('helpers')]
final class TextTest extends TestCase
@@ -40,6 +43,27 @@ public function testCamel2idPreservesEmptyInput(): void
'Empty input must remain empty.',
);
}
+
+ #[DataProviderExternal(LineBreakProvider::class, 'htmlLineBreaks')]
+ public function testPreserveHtmlLineBreaksKeepsMarkupAndEncodesLineBreaks(string $html, string $expected): void
+ {
+ self::assertSame(
+ $expected,
+ Text::preserveHtmlLineBreaks($html),
+ 'Markup must stay unescaped with every line break as `
`.',
+ );
+ }
+
+ #[DataProviderExternal(LineBreakProvider::class, 'lineBreaks')]
+ public function testPreserveLineBreaksEscapesTextAndEncodesLineBreaks(string $text, string $expected): void
+ {
+ self::assertSame(
+ $expected,
+ Text::preserveLineBreaks($text),
+ 'Content must be escaped once with every line break as `
`.',
+ );
+ }
+
#[DataProviderExternal(UrlPathProvider::class, 'paths')]
public function testUrlToPathPreservesCapturedDisplay(string $url, string $expected): void
{
diff --git a/tests/Panel/Log/LogCellRendererTest.php b/tests/Panel/Log/LogCellRendererTest.php
index df876a7..da4b03a 100644
--- a/tests/Panel/Log/LogCellRendererTest.php
+++ b/tests/Panel/Log/LogCellRendererTest.php
@@ -7,13 +7,16 @@
use PHPForge\Debug\Helper\Coerce;
use PHPForge\Debug\Helper\LogLevel;
use PHPForge\Debug\Panel\Log\{LogCellRenderer, LogRow};
-use PHPUnit\Framework\Attributes\Group;
+use PHPForge\Debug\Tests\Provider\LogCellRendererProvider;
+use PHPUnit\Framework\Attributes\{DataProviderExternal, Group};
use PHPUnit\Framework\TestCase;
/**
* Unit tests for {@see LogCellRenderer} covering the typed cell renderers used by the logs grid (time, level, two-tone
* category label, time-since-previous navigation, message + context + trace, SQL highlighting for DB command entries,
- * row options).
+ * multi-line text, `print_r()` dump trees, highlighted `var_export()` values, row options).
+ *
+ * {@see LogCellRendererProvider} for test case data providers.
*/
#[Group('panel')]
#[Group('log')]
@@ -234,6 +237,18 @@ public function testRenderMessageCellHighlightsSqlWhenTheMessageIsAStatement():
);
}
+ #[DataProviderExternal(LogCellRendererProvider::class, 'compileWarnings')]
+ public function testRenderMessageCellKeepsCompileWarningOutOfTheOutput(string $message, string $expected): void
+ {
+ $this->expectOutputString('');
+
+ self::assertSame(
+ $expected,
+ LogCellRenderer::renderMessageCell(self::makeRow(message: $message), self::traceLine()),
+ 'Export markup must match exactly.',
+ );
+ }
+
public function testRenderMessageCellKeepsPlainEscapingForNonDbCategory(): void
{
$html = LogCellRenderer::renderMessageCell(
@@ -259,6 +274,50 @@ public function testRenderMessageCellLeavesShortMessageUnclamped(): void
);
}
+ public function testRenderMessageCellRendersContextAndTraceAfterDumpTree(): void
+ {
+ $html = LogCellRenderer::renderMessageCell(
+ self::makeRow(
+ message: "Request: Array\n(\n [id] => 7\n)\n",
+ trace: [['file' => '/app/User.php', 'line' => 42]],
+ context: ['user' => 7],
+ ),
+ self::traceLine(),
+ );
+
+ self::assertSame(
+ <<<'HTML'
+
+
+ Request:array1 entry
+
+
+ id7
+
+
+
+
+ Context · 1
+
+
+ -
+ user
+
-
+
7
+
+
+
+
+ -
+ /app/User.php:
+
+
+ HTML,
+ $html,
+ 'Order: tree, context disclosure, trace list.',
+ );
+ }
+
public function testRenderMessageCellRendersContextDisclosureBetweenMessageAndTrace(): void
{
$html = LogCellRenderer::renderMessageCell(
@@ -312,6 +371,16 @@ public function testRenderMessageCellRendersContextDisclosureBetweenMessageAndTr
);
}
+ #[DataProviderExternal(LogCellRendererProvider::class, 'messageBodies')]
+ public function testRenderMessageCellRendersMessageBody(string $message, string $category, string $expected): void
+ {
+ self::assertSame(
+ $expected,
+ LogCellRenderer::renderMessageCell(self::makeRow(message: $message, category: $category), self::traceLine()),
+ 'Message body markup must match exactly.',
+ );
+ }
+
public function testRenderTimeCellFormatsMillisecondsAtTheUpperBoundary(): void
{
self::assertSame(
diff --git a/tests/Panel/Log/PhpExportDetectorTest.php b/tests/Panel/Log/PhpExportDetectorTest.php
new file mode 100644
index 0000000..e71077b
--- /dev/null
+++ b/tests/Panel/Log/PhpExportDetectorTest.php
@@ -0,0 +1,204 @@
+expectOutputString('');
+
+ self::assertSame(
+ "[\n \"\\400\",\n]",
+ PhpExportDetector::detect("[\n \"\\400\",\n]"),
+ 'Octal overflow must still be detected as an export.',
+ );
+ }
+
+ public function testDetectKeepsDeprecationAwayFromErrorHandler(): void
+ {
+ $handler = self::throwingHandler();
+
+ set_error_handler($handler);
+ error_clear_last();
+
+ try {
+ $code = PhpExportDetector::detect("[\n (boolean) 1,\n]");
+
+ $current = set_error_handler(null);
+
+ restore_error_handler();
+ } finally {
+ restore_error_handler();
+ }
+
+ self::assertNull(
+ $code,
+ 'Cast to `bool` must not be detected, as no export prints it.',
+ );
+ self::assertNull(
+ error_get_last(),
+ 'Deprecation must be consumed, not passed to the built-in handler.',
+ );
+ self::assertSame(
+ $handler,
+ $current,
+ 'Application error handler must be restored.',
+ );
+ }
+
+ public function testDetectRestoresErrorHandlerAfterParseError(): void
+ {
+ $handler = self::throwingHandler();
+
+ set_error_handler($handler);
+
+ try {
+ $code = PhpExportDetector::detect("array (\n 'a' => ,\n)");
+
+ $current = set_error_handler(null);
+
+ restore_error_handler();
+ } finally {
+ restore_error_handler();
+ }
+
+ self::assertNull(
+ $code,
+ 'Invalid PHP must not be detected.',
+ );
+ self::assertSame(
+ $handler,
+ $current,
+ 'Application error handler must be restored.',
+ );
+ }
+
+ public function testDetectReturnsNullForMessageOverByteLimit(): void
+ {
+ $message = "[\n '" . str_repeat('a', 262134) . "',\n]";
+
+ self::assertSame(
+ 262145,
+ strlen($message),
+ 'Fixture must be one byte over the limit.',
+ );
+ self::assertNull(
+ PhpExportDetector::detect($message),
+ 'Message over the byte limit must not be detected.',
+ );
+ }
+
+ #[DataProviderExternal(PhpExportDetectorProvider::class, 'rejected')]
+ public function testDetectReturnsNullForMessageThatIsNotOneExport(string $message): void
+ {
+ self::assertNull(
+ PhpExportDetector::detect($message),
+ 'Message must not be detected as an export.',
+ );
+ }
+
+ public function testDetectReturnsNullForNestingOverDepthLimit(): void
+ {
+ self::assertNull(
+ PhpExportDetector::detect(str_repeat('[', 33) . str_repeat(']', 33)),
+ 'Thirty-three nested arrays must not be detected.',
+ );
+ }
+
+ public function testDetectReturnsNullForSourceOverOutputLimit(): void
+ {
+ $message = str_repeat('[', 32) . str_repeat("\n1,", 8000) . "\n'" . str_repeat('a', 381) . "'," . str_repeat(']', 32);
+
+ self::assertNull(
+ PhpExportDetector::detect($message),
+ 'Re-indented source one byte over the output limit must not be detected.',
+ );
+ }
+
+ #[DataProviderExternal(PhpExportDetectorProvider::class, 'exports')]
+ public function testDetectRewritesExportInShortArraySyntax(string $message, string $expected): void
+ {
+ self::assertSame(
+ $expected,
+ PhpExportDetector::detect($message),
+ 'Short array source must match exactly.',
+ );
+ }
+
+ /**
+ * @return Closure(int, string): never
+ */
+ private static function throwingHandler(): Closure
+ {
+ return static function (int $level, string $message): never {
+ throw new ErrorException(
+ $message,
+ 0,
+ $level,
+ );
+ };
+ }
+}
diff --git a/tests/Panel/Log/PrintRParserTest.php b/tests/Panel/Log/PrintRParserTest.php
new file mode 100644
index 0000000..57097ae
--- /dev/null
+++ b/tests/Panel/Log/PrintRParserTest.php
@@ -0,0 +1,119 @@
+entries ?? [];
+
+ self::assertCount(
+ 4999,
+ $entries,
+ 'Root block plus 4999 entries must parse.',
+ );
+ self::assertEquals(
+ new PrintREntry('4998', PrintRNode::scalar('4999')),
+ $entries[4998] ?? null,
+ 'Last entry must keep its key and value.',
+ );
+ }
+
+ #[DataProviderExternal(PrintRParserProvider::class, 'dumps')]
+ public function testParseBuildsTreeFromDump(string $message, PrintRNode $expected): void
+ {
+ self::assertEquals(
+ $expected,
+ PrintRParser::parse($message),
+ 'Tree must mirror every block, entry, visibility, and value of the dump.',
+ );
+ }
+
+ #[DataProviderExternal(PrintRParserProvider::class, 'invalid')]
+ public function testParseReturnsNullForMalformedMessage(string $message): void
+ {
+ self::assertNull(
+ PrintRParser::parse($message),
+ 'Malformed dump must fall back to `null`.',
+ );
+ }
+
+ public function testParseReturnsNullForMessageOverByteLimit(): void
+ {
+ self::assertNull(
+ PrintRParser::parse(PrintRFixture::sized(262145)),
+ 'Message one byte over the limit must not parse.',
+ );
+ }
+
+ public function testParseReturnsNullForNestingOverDepthLimit(): void
+ {
+ self::assertNull(
+ PrintRParser::parse(PrintRFixture::nested(33)),
+ 'Thirty-three nested blocks must not parse.',
+ );
+ }
+
+ public function testParseReturnsNullForValueCountOverNodeLimit(): void
+ {
+ self::assertNull(
+ PrintRParser::parse(PrintRFixture::list(5000)),
+ 'Root block plus 5000 entries must not parse.',
+ );
+ }
+}
diff --git a/tests/Panel/Log/PrintRTreeRendererTest.php b/tests/Panel/Log/PrintRTreeRendererTest.php
new file mode 100644
index 0000000..866610e
--- /dev/null
+++ b/tests/Panel/Log/PrintRTreeRendererTest.php
@@ -0,0 +1,31 @@
+
+ */
+ public static function htmlLineBreaks(): iterable
+ {
+ yield 'markup without line breaks' => [
+ '<a>',
+ '<a>',
+ ];
+ yield 'line breaks in text' => [
+ "'a\r\nb'\nc\rd\n\ne",
+ "'a
b'
c
d
e",
+ ];
+ }
+
+ /**
+ * @return iterable
+ */
+ public static function lineBreaks(): iterable
+ {
+ yield 'single line' => [
+ 'a & "c"',
+ 'a <b> & "c"',
+ ];
+ yield 'line feed' => [
+ "a\n b",
+ 'a
b',
+ ];
+ yield 'blank lines' => [
+ "\na\n\n\nb\n",
+ '
a
b
',
+ ];
+ yield 'carriage return and line feed' => [
+ "a\r\nb\r\n\r\nc",
+ 'a
b
c',
+ ];
+ yield 'lone carriage return' => [
+ "a\rb",
+ 'a
b',
+ ];
+ }
+}
diff --git a/tests/Provider/LogCellRendererProvider.php b/tests/Provider/LogCellRendererProvider.php
new file mode 100644
index 0000000..6d9e3ef
--- /dev/null
+++ b/tests/Provider/LogCellRendererProvider.php
@@ -0,0 +1,206 @@
+
+ */
+ public static function compileWarnings(): iterable
+ {
+ yield 'octal escape overflow' => [
+ "[\n \"\\400\",\n]",
+ <<<'HTML'
+
+ [
"\400",
]
+
+ HTML,
+ ];
+ }
+
+ /**
+ * @return iterable
+ */
+ public static function messageBodies(): iterable
+ {
+ $longText = str_repeat("segment of a long line\n\n", 26);
+ $longTextHtml = str_repeat('segment of a long line
', 26);
+ $longValue = str_repeat('x', 700);
+
+ yield 'multi-line text' => [
+ "line one\n\n indented ",
+ 'app',
+ <<<'HTML'
+
+ line one
indented <b>
+
+ HTML,
+ ];
+ yield 'text with a lone carriage return' => [
+ "line one\rline two",
+ 'app',
+ <<<'HTML'
+
+ line one
line two
+
+ HTML,
+ ];
+ yield 'multi-line text over the clamp threshold' => [
+ $longText,
+ 'app',
+ <<
+
+
+ {$longTextHtml}
+
+
+
+ HTML,
+ ];
+ yield 'malformed dump' => [
+ "Array\n(\n [a] => 1",
+ 'app',
+ <<<'HTML'
+
+ Array
(
[a] => 1
+
+ HTML,
+ ];
+ yield 'print_r dump' => [
+ print_r(['id' => '<7>'], true),
+ 'app',
+ <<<'HTML'
+
+
+ array1 entry
+
+
+ id<7>
+
+
+
+ HTML,
+ ];
+ yield 'print_r dump over the clamp threshold' => [
+ print_r(['k' => $longValue], true),
+ 'app',
+ <<
+
+ array1 entry
+
+
+ k{$longValue}
+
+
+
+ HTML,
+ ];
+ yield 'var_export array' => [
+ var_export(['id' => 7], true),
+ 'app',
+ <<<'HTML'
+
+ [
'id' => 7,
]
+
+ HTML,
+ ];
+ yield 'var_export markup injection' => [
+ "array (\n 'x' => ' ',\n)",
+ 'app',
+ <<<'HTML'
+
+ [
'x' => '</pre><script>alert(1)</script>',
]
+
+ HTML,
+ ];
+ yield 'var_export string with a blank line' => [
+ var_export(['t' => "a\n\nb"], true),
+ 'app',
+ <<<'HTML'
+
+ [
't' => 'a
b',
]
+
+ HTML,
+ ];
+ yield 'var_export string with Windows line breaks' => [
+ var_export(['t' => "a\r\nb"], true),
+ 'app',
+ <<<'HTML'
+
+ [
't' => 'a
b',
]
+
+ HTML,
+ ];
+ yield 'export with carriage return line breaks' => [
+ "array (\r 'id' => 7,\r)",
+ 'app',
+ <<<'HTML'
+
+ [
'id' => 7,
]
+
+ HTML,
+ ];
+ yield 'interpolated string before a bracket' => [
+ "[\n \"\$x]\",\n]",
+ 'app',
+ <<<'HTML'
+
+ [
"$x]",
]
+
+ HTML,
+ ];
+ yield 'var_export over the clamp threshold' => [
+ var_export(['k' => $longValue], true),
+ 'app',
+ <<
+
+
+ [
'k' => '{$longValue}',
]
+
+
+
+ HTML,
+ ];
+ yield 'invalid export' => [
+ "array (\n 'a' => ,\n)",
+ 'app',
+ <<<'HTML'
+
+ array (
'a' => ,
)
+
+ HTML,
+ ];
+ yield 'single-line export' => [
+ "[1, '']",
+ 'app',
+ "[1, '<b>']",
+ ];
+ yield 'print_r dump in the DB command category' => [
+ print_r(['id' => 7], true),
+ 'yii\db\Command::query',
+ <<<'HTML'
+
+ Array
+ (
+ [id] => 7
+ )
+
+ HTML,
+ ];
+ }
+}
diff --git a/tests/Provider/LogMessageProvider.php b/tests/Provider/LogMessageProvider.php
index 51ca7d0..cef307e 100644
--- a/tests/Provider/LogMessageProvider.php
+++ b/tests/Provider/LogMessageProvider.php
@@ -37,6 +37,58 @@ public static function messages(): iterable
LogMessage::DELTA,
'Delta',
];
+ yield 'dump_empty' => [
+ LogMessage::DUMP_EMPTY,
+ 'empty',
+ ];
+ yield 'dump_empty_title' => [
+ LogMessage::DUMP_EMPTY_TITLE,
+ 'print_r() prints an empty string, null, and false the same way',
+ ];
+ yield 'dump_entries' => [
+ LogMessage::DUMP_ENTRIES,
+ '%d entries',
+ ];
+ yield 'dump_entry' => [
+ LogMessage::DUMP_ENTRY,
+ '1 entry',
+ ];
+ yield 'dump_kind_array' => [
+ LogMessage::DUMP_KIND_ARRAY,
+ 'array',
+ ];
+ yield 'dump_kind_enum' => [
+ LogMessage::DUMP_KIND_ENUM,
+ 'enum',
+ ];
+ yield 'dump_kind_object' => [
+ LogMessage::DUMP_KIND_OBJECT,
+ 'object',
+ ];
+ yield 'dump_private' => [
+ LogMessage::DUMP_PRIVATE,
+ 'private',
+ ];
+ yield 'dump_private_title' => [
+ LogMessage::DUMP_PRIVATE_TITLE,
+ 'Private property declared in %s',
+ ];
+ yield 'dump_protected' => [
+ LogMessage::DUMP_PROTECTED,
+ 'protected',
+ ];
+ yield 'dump_protected_title' => [
+ LogMessage::DUMP_PROTECTED_TITLE,
+ 'Protected property; print_r() does not name the declaring class',
+ ];
+ yield 'dump_recursion' => [
+ LogMessage::DUMP_RECURSION,
+ 'recursion',
+ ];
+ yield 'dump_recursion_title' => [
+ LogMessage::DUMP_RECURSION_TITLE,
+ 'print_r() stopped here because the value contains itself',
+ ];
yield 'empty_explanation' => [
LogMessage::EMPTY_EXPLANATION,
'This request did not emit log messages through the debug log target.',
diff --git a/tests/Provider/PhpExportDetectorProvider.php b/tests/Provider/PhpExportDetectorProvider.php
new file mode 100644
index 0000000..4a46091
--- /dev/null
+++ b/tests/Provider/PhpExportDetectorProvider.php
@@ -0,0 +1,206 @@
+
+ */
+ public static function exports(): iterable
+ {
+ yield 'nested array' => [
+ var_export(['user' => ['id' => 42, 'roles' => ['admin', 'editor']], 'flags' => ['limit' => null]], true),
+ <<<'PHP'
+ [
+ 'user' => [
+ 'id' => 42,
+ 'roles' => [
+ 0 => 'admin',
+ 1 => 'editor',
+ ],
+ ],
+ 'flags' => [
+ 'limit' => NULL,
+ ],
+ ]
+ PHP,
+ ];
+ yield 'empty arrays' => [
+ var_export(['e' => [], 'n' => [[]]], true),
+ <<<'PHP'
+ [
+ 'e' => [],
+ 'n' => [
+ 0 => [],
+ ],
+ ]
+ PHP,
+ ];
+ yield 'object with nested array and enum case' => [
+ var_export(new ExportedPoint(), true),
+ <<<'PHP'
+ \PHPForge\Debug\Tests\Support\PhpExport\ExportedPoint::__set_state([
+ 'empty' => [],
+ 'suit' => \PHPForge\Debug\Tests\Support\PrintR\PrintRSuit::HEARTS,
+ 'tags' => [
+ 'roles' => [
+ 0 => 'admin',
+ 1 => 'editor',
+ ],
+ ],
+ 'x' => 1,
+ ])
+ PHP,
+ ];
+ yield 'object nested in an array' => [
+ var_export(['point' => new ExportedPoint()], true),
+ <<<'PHP'
+ [
+ 'point' => \PHPForge\Debug\Tests\Support\PhpExport\ExportedPoint::__set_state([
+ 'empty' => [],
+ 'suit' => \PHPForge\Debug\Tests\Support\PrintR\PrintRSuit::HEARTS,
+ 'tags' => [
+ 'roles' => [
+ 0 => 'admin',
+ 1 => 'editor',
+ ],
+ ],
+ 'x' => 1,
+ ]),
+ ]
+ PHP,
+ ];
+ yield 'stdClass' => [
+ var_export((object) ['k' => 'v', 'inner' => (object) [], 'list' => [1]], true),
+ <<<'PHP'
+ (object) [
+ 'k' => 'v',
+ 'inner' => (object) [],
+ 'list' => [
+ 0 => 1,
+ ],
+ ]
+ PHP,
+ ];
+ yield 'strings holding array syntax' => [
+ var_export(['a (b)' => "array (\n)", 'q' => "it's \\ )"], true),
+ <<<'PHP'
+ [
+ 'a (b)' => 'array (
+ )',
+ 'q' => 'it\'s \\ )',
+ ]
+ PHP,
+ ];
+ yield 'special scalars' => [
+ var_export([-5 => -INF, 'f' => 1.0E+25, 'n' => NAN, 'z' => -0.0, 'b' => false, "a\0b" => "x\0"], true),
+ <<<'PHP'
+ [
+ -5 => -INF,
+ 'f' => 1.0E+25,
+ 'n' => NAN,
+ 'z' => -0.0,
+ 'b' => false,
+ 'a' . "\0" . 'b' => 'x' . "\0" . '',
+ ]
+ PHP,
+ ];
+ yield 'short array export' => [
+ <<<'PHP'
+ [
+ 'a' => [
+ 'b' => 1,
+ ],
+ 'c' => unserialize('O:8:"stdClass":0:{}'),
+ ]
+ PHP,
+ <<<'PHP'
+ [
+ 'a' => [
+ 'b' => 1,
+ ],
+ 'c' => unserialize('O:8:"stdClass":0:{}'),
+ ]
+ PHP,
+ ];
+ yield 'brackets inside strings' => [
+ var_export(['a]' => '[', ')' => ['(' => ']]'], '"x]"' => "]\n["], true),
+ <<<'PHP'
+ [
+ 'a]' => '[',
+ ')' => [
+ '(' => ']]',
+ ],
+ '"x]"' => ']
+ [',
+ ]
+ PHP,
+ ];
+ yield 'integer minimum' => [
+ var_export([PHP_INT_MIN], true),
+ "[\n 0 => -9223372036854775807-1,\n]",
+ ];
+ yield 'array without space before the parenthesis' => [
+ "[\n 0 => array(\n 0 => 1,\n ),\n]",
+ "[\n 0 => [\n 0 => 1,\n ],\n]",
+ ];
+ yield 'surrounding whitespace' => [
+ "\n array (\n 0 => 1,\n)\n",
+ "[\n 0 => 1,\n]",
+ ];
+ yield 'Windows line breaks' => [
+ "array (\r\n 0 => \r\n array (\r\n 0 => 1,\r\n ),\r\n)",
+ "[\n 0 => [\n 0 => 1,\n ],\n]",
+ ];
+ yield 'carriage return line breaks' => [
+ "array (\r 0 => \r array (\r 0 => 1,\r ),\r)",
+ "[\n 0 => [\n 0 => 1,\n ],\n]",
+ ];
+ }
+
+ /**
+ * @return iterable
+ */
+ public static function rejected(): iterable
+ {
+ yield 'plain text' => ["line one\nline two"];
+ yield 'quoted string' => ["'line one\nline two'"];
+ yield 'invalid PHP' => ["array (\n 'a' => ,\n)"];
+ yield 'free text before the export' => ["Loaded: array (\n 0 => 1,\n)"];
+ yield 'valid PHP before the export' => ["1 + [\n 2,\n]"];
+ yield 'class constant' => ["\\App\\Config::VALUES + [\n 2,\n]"];
+ yield 'closing tag with inline output' => ["[\n 1,\n] ?> x"];
+ yield 'closing tag reopening PHP' => ["[\n 1,\n] ?> ["[\n 1,\n]; echo 1"];
+ yield 'statement terminator only' => ["[\n 1,\n];"];
+ yield 'comment after the terminator' => ["[\n 1,\n]; // c"];
+ yield 'comment swallowing the terminator' => ["[\n 1,\n] // c"];
+ yield 'hash comment' => ["[\n 1, # c\n]"];
+ yield 'block comment' => ["[\n /* c */ 1,\n]"];
+ yield 'doc comment' => ["[\n /** c */ 1,\n]"];
+ yield 'interpolated variable before a bracket' => ["[\n \"\$x]\",\n]"];
+ yield 'interpolated expression in braces' => ["[\n \"{\$x}\",\n]"];
+ yield 'interpolated dollar brace' => ["[\n \"\${x}\",\n]"];
+ yield 'heredoc' => ["[\n << ["[\n <<<'EOT'\n ]\n EOT,\n]"];
+ yield 'variable' => ["[\n \$x,\n]"];
+ yield 'arrow function' => ["[\n fn(array \$a): array => \$a,\n]"];
+ yield 'closure' => ["[\n function () {\n return 1;\n },\n]"];
+ yield 'cast to bool' => ["[\n (bool) 1,\n]"];
+ }
+}
diff --git a/tests/Provider/PhpHighlighterProvider.php b/tests/Provider/PhpHighlighterProvider.php
new file mode 100644
index 0000000..598f8fa
--- /dev/null
+++ b/tests/Provider/PhpHighlighterProvider.php
@@ -0,0 +1,45 @@
+
+ */
+ public static function code(): iterable
+ {
+ yield 'short array' => [
+ "[\n 'id' => 7,\n 'tags' => [\n 0 => 'a',\n ],\n]",
+ <<<'HTML'
+ [
+ 'id' => 7,
+ 'tags' => [
+ 0 => 'a',
+ ],
+ ]
+ HTML,
+ ];
+ yield 'markup inside a string' => [
+ "[\n 'x' => ' ',\n]",
+ <<<'HTML'
+ [
+ 'x' => '</pre><script>alert(1)</script>',
+ ]
+ HTML,
+ ];
+ yield 'scalar sharing the opening tag color' => [
+ '42',
+ <<<'HTML'
+ 42
+ HTML,
+ ];
+ }
+}
diff --git a/tests/Provider/PrintRParserProvider.php b/tests/Provider/PrintRParserProvider.php
new file mode 100644
index 0000000..ab0df69
--- /dev/null
+++ b/tests/Provider/PrintRParserProvider.php
@@ -0,0 +1,402 @@
+
+ */
+ public static function dumps(): iterable
+ {
+ $suit = PrintRNode::block(
+ PrintRKind::ENUM,
+ PrintRSuit::class,
+ [
+ new PrintREntry('name', PrintRNode::scalar('HEARTS')),
+ new PrintREntry('value', PrintRNode::scalar('H')),
+ ],
+ );
+
+ yield 'array keys stay verbatim' => [
+ print_r(['a:b' => 'x', 'k:protected' => 'y', 'p:C:private' => 'z', '' => 'blank', 'a]b' => 'bracket'], true),
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('a:b', PrintRNode::scalar('x')),
+ new PrintREntry('k:protected', PrintRNode::scalar('y')),
+ new PrintREntry('p:C:private', PrintRNode::scalar('z')),
+ new PrintREntry('', PrintRNode::scalar('blank')),
+ new PrintREntry('a]b', PrintRNode::scalar('bracket')),
+ ],
+ ),
+ ];
+ yield 'array recursion' => [
+ (static function (): string {
+ $value = [1];
+ $value[] = &$value;
+
+ return print_r($value, true);
+ })(),
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('0', PrintRNode::scalar('1')),
+ new PrintREntry('1', PrintRNode::recursion('')),
+ ],
+ ),
+ ];
+ yield 'empty root array' => [
+ print_r([], true),
+ PrintRNode::block(PrintRKind::ARRAY, '', []),
+ ];
+ yield 'empty values' => [
+ print_r(['string' => '', 'null' => null, 'false' => false, 'true' => true, 'zero' => 0], true),
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('string', PrintRNode::scalar('')),
+ new PrintREntry('null', PrintRNode::scalar('')),
+ new PrintREntry('false', PrintRNode::scalar('')),
+ new PrintREntry('true', PrintRNode::scalar('1')),
+ new PrintREntry('zero', PrintRNode::scalar('0')),
+ ],
+ ),
+ ];
+ yield 'header text as scalar value' => [
+ print_r(['cast' => 'Array', 'object' => 'App\User Object', 'enum' => 'App\Suit Enum:string', 'n' => 1], true),
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('cast', PrintRNode::scalar('Array')),
+ new PrintREntry('object', PrintRNode::scalar('App\User Object')),
+ new PrintREntry('enum', PrintRNode::scalar('App\Suit Enum:string')),
+ new PrintREntry('n', PrintRNode::scalar('1')),
+ ],
+ ),
+ ];
+ yield 'int-backed enum' => [
+ print_r(PrintRPriority::HIGH, true),
+ PrintRNode::block(
+ PrintRKind::ENUM,
+ PrintRPriority::class,
+ [
+ new PrintREntry('name', PrintRNode::scalar('HIGH')),
+ new PrintREntry('value', PrintRNode::scalar('1')),
+ ],
+ ),
+ ];
+ yield 'multi-line strings' => [
+ print_r(
+ [
+ 'note' => "line one\n [nested] => not an entry\n\nline four\n",
+ 'list' => ['first' => "a\nb", 'last' => "c\n)"],
+ 'next' => 'x',
+ ],
+ true,
+ ),
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('note', PrintRNode::scalar("line one\n [nested] => not an entry\n\nline four\n")),
+ new PrintREntry(
+ 'list',
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('first', PrintRNode::scalar("a\nb")),
+ new PrintREntry('last', PrintRNode::scalar("c\n)")),
+ ],
+ ),
+ ),
+ new PrintREntry('next', PrintRNode::scalar('x')),
+ ],
+ ),
+ ];
+ yield 'nested header with free text stays scalar' => [
+ "Array\n(\n [k] => note Array\n (\n )\n\n)\n",
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('k', PrintRNode::scalar("note Array\n (\n )\n")),
+ ],
+ ),
+ ];
+ yield 'object dynamic keys stay verbatim' => [
+ (static function (): string {
+ $object = new stdClass();
+ $object->{'a:b'} = 'x';
+ $object->{'x:private'} = 'y';
+ $object->{'a:b:protected'} = 'z';
+ $object->{'x:protectedish'} = 'w';
+
+ return print_r($object, true);
+ })(),
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ 'stdClass',
+ [
+ new PrintREntry('a:b', PrintRNode::scalar('x')),
+ new PrintREntry('x:private', PrintRNode::scalar('y')),
+ new PrintREntry('a:b:protected', PrintRNode::scalar('z')),
+ new PrintREntry('x:protectedish', PrintRNode::scalar('w')),
+ ],
+ ),
+ ];
+ yield 'stdClass keys shaped like a visibility stay verbatim' => [
+ (static function (): string {
+ $inner = new stdClass();
+ $inner->{'id:App\User:private'} = 7;
+ $object = new stdClass();
+ $object->{'status:protected'} = 'on';
+ $object->inner = $inner;
+
+ return print_r($object, true);
+ })(),
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ 'stdClass',
+ [
+ new PrintREntry('status:protected', PrintRNode::scalar('on')),
+ new PrintREntry(
+ 'inner',
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ 'stdClass',
+ [new PrintREntry('id:App\User:private', PrintRNode::scalar('7'))],
+ ),
+ ),
+ ],
+ ),
+ ];
+ yield 'object with visibility, inheritance, enum, and recursion' => [
+ PrintRFixture::child(),
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ PrintRChild::class,
+ [
+ new PrintREntry('role', PrintRNode::scalar('admin'), 'protected'),
+ new PrintREntry('secret', PrintRNode::scalar('parent'), 'private', PrintRParent::class),
+ new PrintREntry('empty', PrintRNode::scalar('')),
+ new PrintREntry('flag', PrintRNode::scalar('')),
+ new PrintREntry('name', PrintRNode::scalar('Ada')),
+ new PrintREntry('self', PrintRNode::recursion(PrintRChild::class)),
+ new PrintREntry('suit', $suit),
+ new PrintREntry(
+ 'tags',
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('0', PrintRNode::scalar('a')),
+ new PrintREntry('1', PrintRNode::scalar('b')),
+ ],
+ ),
+ ),
+ new PrintREntry('parent', PrintRNode::scalar(''), 'protected'),
+ new PrintREntry('secret', PrintRNode::scalar('child'), 'private', PrintRChild::class),
+ ],
+ ),
+ ];
+ yield 'prefix before the root header' => [
+ 'Request: ' . print_r(['id' => 7], true),
+ PrintRNode::block(PrintRKind::ARRAY, '', [new PrintREntry('id', PrintRNode::scalar('7'))], 'Request:'),
+ ];
+ yield 'prefix before an object header' => [
+ 'Loaded user App\User Object' . "\n(\n [id] => 7\n)\n",
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ 'App\User',
+ [new PrintREntry('id', PrintRNode::scalar('7'))],
+ 'Loaded user',
+ ),
+ ];
+ yield 'pure enum' => [
+ print_r(PrintRToggle::ON, true),
+ PrintRNode::block(PrintRKind::ENUM, PrintRToggle::class, [new PrintREntry('name', PrintRNode::scalar('ON'))]),
+ ];
+ yield 'server request' => [
+ PrintRFixture::serverRequest(),
+ self::serverRequest(),
+ ];
+ yield 'string-backed enum' => [
+ print_r(PrintRSuit::HEARTS, true),
+ $suit,
+ ];
+ yield 'trailing whitespace' => [
+ print_r(['id' => 7], true) . " \t\n\n",
+ PrintRNode::block(PrintRKind::ARRAY, '', [new PrintREntry('id', PrintRNode::scalar('7'))]),
+ ];
+ }
+
+ /**
+ * @return iterable
+ */
+ public static function invalid(): iterable
+ {
+ yield 'empty message' => [''];
+ yield 'plain text' => ['User 7 logged in'];
+ yield 'header without block' => ['Array'];
+ yield 'header glued to free text' => ["MyArray\n(\n)\n"];
+ yield 'header followed by free text' => ["Array of users\n(\n)\n"];
+ yield 'text line before the header' => ["Request:\nArray\n(\n)\n"];
+ yield 'missing opening parenthesis' => ["Array\n [a] => 1\n)\n"];
+ yield 'indented opening parenthesis' => ["Array\n (\n)\n"];
+ yield 'recursion marker at the root' => ["Array\n *RECURSION*\n"];
+ yield 'entry without arrow' => ["Array\n(\n [a] = 1\n)\n"];
+ yield 'entry without brackets' => ["Array\n(\n a => 1\n)\n"];
+ yield 'entry at the wrong indentation' => ["Array\n(\n [a] => 1\n)\n"];
+ yield 'unterminated block' => ["Array\n(\n [a] => 1\n"];
+ yield 'unterminated nested block' => ["Array\n(\n [a] => Array\n (\n [b] => 1\n)\n"];
+ yield 'nested block without blank line' => ["Array\n(\n [a] => Array\n (\n )\n [b] => 1\n)\n"];
+ yield 'nested block followed by text' => ["Array\n(\n [a] => Array\n (\n )\nx\n)\n"];
+ yield 'nested block at the end of the message' => ["Array\n(\n [a] => Array\n (\n )"];
+ yield 'malformed nested entry' => ["Array\n(\n [a] => Array\n (\n b\n )\n\n)\n"];
+ yield 'text after the root block' => [print_r([1], true) . 'done'];
+ yield 'second dump after the root block' => [print_r([1], true) . print_r([2], true)];
+ }
+
+ /**
+ * Returns the tree of the server request dump fixture.
+ */
+ private static function serverRequest(): PrintRNode
+ {
+ $request = 'HttpSoft\Message\ServerRequest';
+ $uri = 'HttpSoft\Message\Uri';
+ $stream = 'HttpSoft\Message\Stream';
+
+ return PrintRNode::block(
+ PrintRKind::OBJECT,
+ $request,
+ [
+ new PrintREntry(
+ 'attributes',
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [new PrintREntry('applicationStartTime', PrintRNode::scalar('1793938706.0155'))],
+ ),
+ 'private',
+ $request,
+ ),
+ new PrintREntry(
+ 'cookieParams',
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [new PrintREntry('yii-debug-toolbar-theme', PrintRNode::scalar('dark'))],
+ ),
+ 'private',
+ $request,
+ ),
+ new PrintREntry('parsedBody', PrintRNode::scalar(''), 'private', $request),
+ new PrintREntry('queryParams', PrintRNode::block(PrintRKind::ARRAY, '', []), 'private', $request),
+ new PrintREntry(
+ 'serverParams',
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry('USER', PrintRNode::scalar('www-data')),
+ new PrintREntry('HTTP_PRIORITY', PrintRNode::scalar('u=0, i')),
+ new PrintREntry(
+ 'HTTP_ACCEPT',
+ PrintRNode::scalar('text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
+ ),
+ new PrintREntry(
+ 'HTTP_USER_AGENT',
+ PrintRNode::scalar(
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:159.0) Gecko/20100101 Firefox/159.0',
+ ),
+ ),
+ new PrintREntry('REQUEST_METHOD', PrintRNode::scalar('GET')),
+ new PrintREntry('CONTENT_LENGTH', PrintRNode::scalar('')),
+ new PrintREntry('REQUEST_TIME_FLOAT', PrintRNode::scalar('1793938706.0138')),
+ ],
+ ),
+ 'private',
+ $request,
+ ),
+ new PrintREntry('uploadedFiles', PrintRNode::block(PrintRKind::ARRAY, '', []), 'private', $request),
+ new PrintREntry('method', PrintRNode::scalar('GET'), 'private', $request),
+ new PrintREntry('requestTarget', PrintRNode::scalar(''), 'private', $request),
+ new PrintREntry(
+ 'uri',
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ $uri,
+ [
+ new PrintREntry('scheme', PrintRNode::scalar('http'), 'private', $uri),
+ new PrintREntry('userInfo', PrintRNode::scalar(''), 'private', $uri),
+ new PrintREntry('host', PrintRNode::scalar('ets-api.test'), 'private', $uri),
+ new PrintREntry('port', PrintRNode::scalar('80'), 'private', $uri),
+ new PrintREntry('path', PrintRNode::scalar('/'), 'private', $uri),
+ new PrintREntry('query', PrintRNode::scalar(''), 'private', $uri),
+ new PrintREntry('fragment', PrintRNode::scalar(''), 'private', $uri),
+ new PrintREntry('cache', PrintRNode::scalar(''), 'private', $uri),
+ ],
+ ),
+ 'private',
+ $request,
+ ),
+ new PrintREntry(
+ 'headers',
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [
+ new PrintREntry(
+ 'Host',
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [new PrintREntry('0', PrintRNode::scalar('ets-api.test'))],
+ ),
+ ),
+ new PrintREntry(
+ 'Content-Length',
+ PrintRNode::block(PrintRKind::ARRAY, '', [new PrintREntry('0', PrintRNode::scalar(''))]),
+ ),
+ ],
+ ),
+ 'private',
+ $request,
+ ),
+ new PrintREntry('protocol', PrintRNode::scalar('1.1'), 'private', $request),
+ new PrintREntry(
+ 'stream',
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ $stream,
+ [
+ new PrintREntry('resource', PrintRNode::scalar('Resource id #6'), 'private', $stream),
+ new PrintREntry('size', PrintRNode::scalar(''), 'private', $stream),
+ new PrintREntry('seekable', PrintRNode::scalar('1'), 'private', $stream),
+ ],
+ ),
+ 'private',
+ $request,
+ ),
+ ],
+ );
+ }
+}
diff --git a/tests/Provider/PrintRTreeRendererProvider.php b/tests/Provider/PrintRTreeRendererProvider.php
new file mode 100644
index 0000000..0cce0e0
--- /dev/null
+++ b/tests/Provider/PrintRTreeRendererProvider.php
@@ -0,0 +1,187 @@
+
+ */
+ public static function trees(): iterable
+ {
+ yield 'array with one entry' => [
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [new PrintREntry('id', PrintRNode::scalar('7'))],
+ ),
+ <<<'HTML'
+
+
+ array1 entry
+
+
+ id7
+
+
+
+ HTML,
+ ];
+ yield 'empty root array' => [
+ PrintRNode::block(
+ PrintRKind::ARRAY,
+ '',
+ [],
+ ),
+ <<<'HTML'
+
+
+ array0 entries
+
+
+
+ HTML,
+ ];
+ yield 'escaped texts' => [
+ PrintRNode::block(
+ PrintRKind::OBJECT,
+ 'App\',
+ [new PrintREntry('', PrintRNode::scalar("