diff --git a/.editorconfig b/.editorconfig index ff81521..fa5651e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,7 +10,7 @@ indent_style = space indent_size = 4 trim_trailing_whitespace = true -[*.js] +[*.{js,mjs}] indent_size = 2 [*.scss] @@ -33,7 +33,7 @@ trim_trailing_whitespace = unset charset = unset [*.md] -indent_size = 2 +indent_size = unset trim_trailing_whitespace = false [*.php] diff --git a/.github/workflows/assets.yml b/.github/workflows/assets.yml index c380cd8..ab710f9 100644 --- a/.github/workflows/assets.yml +++ b/.github/workflows/assets.yml @@ -57,6 +57,21 @@ jobs: - name: Build assets. run: npm run build + - name: Enforce asset size budgets. + run: npm run check:size + + - name: Enforce strict token contrast. + run: npm run check:contrast:strict + + - name: Validate browser suite discovery. + run: npm run test:e2e:list + + - name: Install Playwright Chromium. + run: npx playwright install --with-deps chromium + + - name: Test the large-data browser harness. + run: npm run test:perf + - name: Detect dist drift. run: | status="$(git status --porcelain --untracked-files=all --ignored=matching -- resources/assets/dist/)" diff --git a/.gitignore b/.gitignore index 3e95f33..310dc96 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,9 @@ node_modules .stryker-tmp reports/mutation +# local browser quality artifacts +artifacts + # vagrant (if present) .vagrant diff --git a/CHANGELOG.md b/CHANGELOG.md index ea55551..68fb7a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,3 +28,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - test: enforce complete PHP line, method, and mutation coverage with exact HTML rendering assertions. - perf: return the committed manifest from snapshot writes and reuse its raw rollback payload to avoid duplicate index reads and hydration. - fix(ui): polish Request/Timeline layout, typography, focus/motion behavior, keyboard switching, and EXPLAIN status announcements. +- feat(ui): expand the shared debug UI with secure same-origin navigation, configurable sensitive-key redaction, responsive and accessible interactions, persistent drawer and bounded `EXPLAIN` workflows, query grouping, conditional feature loading, and cross-adapter browser quality gates. diff --git a/docs/browser-quality.md b/docs/browser-quality.md new file mode 100644 index 0000000..0ffd13b --- /dev/null +++ b/docs/browser-quality.md @@ -0,0 +1,221 @@ +# Browser quality workflow + +## Prerequisites + +- Node.js from `.nvmrc` and the locked npm dependencies. +- PHP and Composer dependencies for Debug Core, `../../app-vue`, and + `../../app-react`. +- The local applications at their contract paths, or two compatible origins + supplied through environment variables. +- A Playwright Chromium installation or a compatible system Chromium binary. + +Install the browser managed by Playwright: + +```shell +npm ci +npx playwright install --with-deps chromium +``` + +For a preinstalled browser, set its absolute path instead: + +```shell +export PLAYWRIGHT_CHROMIUM_EXECUTABLE=/usr/bin/chromium +``` + +The custom-executable mode disables Playwright video recording because its +managed FFmpeg companion is not guaranteed to be installed. Failure screenshots, +traces, diagnostics, and all explicit visual-atlas images remain available. + +## Seed deterministic snapshots + +```shell +npm run fixtures:seed +``` + +The command upserts the dense and empty quality tags into both applications and +validates the synthetic redaction sentinel after persistence. Override the two +application paths in contract order when necessary: + +```shell +php tools/seed-debug-fixtures.php \ + --app=/workspace/app-vue \ + --app=/workspace/app-react \ + --rows=80 +``` + +`--rows` accepts 1 through 5,000. Use the default for the full visual suite; use +the dedicated offline performance harness for repeatable high-row-count checks. +The dense Database fixture targets the shared local `user` schema with +plan-valid SELECT, INSERT, UPDATE, and DELETE statements. Its DML predicates are +deliberate no-ops, and the browser smoke workflow opens each verb before running +Explain All, rejecting any inline request failure, and verifying that each local +SQLite database remains byte-for-byte unchanged. + +## Start the applications + +Playwright can own both PHP development servers: + +```shell +DEBUG_UI_START_SERVERS=1 npm run test:e2e +``` + +This starts: + +```text +app-vue http://localhost:8080 +app-react http://localhost:8081 +``` + +Alternatively, start the applications in separate terminals and omit +`DEBUG_UI_START_SERVERS`. Existing compatible servers are reused. + +To inspect already-running remote or containerized origins, keep the order stable: + +```shell +DEBUG_UI_BASE_URLS=http://127.0.0.1:9080,http://127.0.0.1:9081 \ +DEBUG_UI_APP_NAMES=vue-container,react-container \ +npm run test:e2e +``` + +Only HTTP(S) origins are accepted. Fixture seeding still uses the local contract +paths unless it is disabled with `DEBUG_UI_SEED_FIXTURES=0`. + +## Commands + +```shell +# Smoke, keyboard, traversal, runtime diagnostics, and the privacy sentinel. +npm run test:e2e + +# WCAG-tagged axe scans of the document and toolbar shadow DOM. +npm run test:a11y + +# Reproducible PNG atlas without golden comparison. +npm run test:visual + +# Compare with existing Playwright screenshot baselines. +npm run test:visual:compare + +# Explicitly create or update screenshot baselines. +npm run test:visual:update + +# Offline 50/1,000/5,000-row browser benchmark. +npm run test:perf + +# Dense live-panel navigation and DOM envelope. +npm run test:perf:live + +# Distribution and design-token budgets. +npm run check:size +npm run check:contrast +npm run check:contrast:strict + +# Discovery-only configuration validation; no applications or browser required. +npm run test:e2e:list +``` + +Select a project or test while iterating: + +```shell +DEBUG_UI_START_SERVERS=1 npm run test:e2e -- --project=desktop-1440 +DEBUG_UI_START_SERVERS=1 npm run test:a11y -- --project=mobile-390 --grep='light dense panels' +DEBUG_UI_START_SERVERS=1 npm run test:visual -- --project=tablet-1024 --grep='db is stable' +``` + +## Artifacts and screenshot names + +Generated outputs are local and ignored by Git: + +```text +artifacts/playwright/report/ +artifacts/playwright/results/ +artifacts/ui//--.png +artifacts/ui/desktop-1440/-light-empty-.png +``` + +Open `artifacts/playwright/report/index.html` after a failure to inspect traces, +attachments, axe JSON, performance JSON, videos, and failure screenshots. + +Golden screenshots, when explicitly enabled, use: + +```text +e2e/snapshots//.png +``` + +Do not update goldens as a way to silence an unexplained difference. Compare the +Vue and React pair, inspect all themes and breakpoints affected by the change, +then record the intended visual change in the project changelog. + +## Reproducibility controls + +The Playwright configuration fixes locale to `en-US`, time zone to UTC, reduced +motion, explicit viewport sizes, and the default light color scheme. The fixtures +use stable tags, timestamps, ordering, row counts, paths, and synthetic data. +Visual capture waits for document fonts, disables animations and transitions, +and waits for two animation frames. + +The screenshot environment is still platform-sensitive because font rasterization +and browser versions differ. Generate and compare goldens with the same OS, +Chromium build, device scale factor, and dependency lock. Artifact-only capture is +the safer default for local design review. + +## Size and contrast maintenance + +`tools/check-asset-size.mjs` scans every file under `resources/assets/dist`, +compresses it with gzip level 9, and fails for missing, unexpected, per-file, or +aggregate budget violations. Update `tools/quality/asset-size-budget.json` only +after rebuilding assets and recording a justified before/after measurement. + +`tools/check-token-contrast.mjs` parses hex `light-dark()` token pairs and `var()` +aliases directly from `resources/src/styles/tokens.css`. It uses WCAG relative +luminance against the canonical light `#ffffff` and dark `#121a15` surfaces. It +also checks the actual semantic ink/background token compositions used by solid +success, warning, danger, and information badges. `npm run check:contrast` +permits only explicitly documented baseline floors; none are configured in the +current baseline. `npm run check:contrast:strict` requires every checked token to +meet its role's target and must remain green. Axe independently verifies the +browser-computed composition. + +## CI boundary + +The asset workflow performs formatting, JavaScript/style tests, a clean Vite +build, size and contrast enforcement, Playwright discovery, and the offline +large-data browser harness. It does not run the live cross-adapter matrix because +the two sibling applications and their path Composer repositories are not part of +the Debug Core checkout. + +A future mandatory visual CI job should version the demo applications, pin PHP, +Chromium, fonts, Node.js, locale, and OS image, seed the same contract, retain +private artifacts, and review baseline changes explicitly. + +## Privacy cautions + +The deterministic panels are synthetic, but the application root, incidental +developer captures, PHP Info, trace files, and videos can reveal local paths or +environment information. Keep browser artifacts private. Do not point the suite +at a production debugger, and never put real secrets into the fixture contract. + +## Troubleshooting + +### A port is already in use + +Either stop the unrelated process, run compatible existing applications on the +contract ports, or use `DEBUG_UI_BASE_URLS` with two alternate origins. Do not swap +the Vue and React order. + +### The fixture generator cannot find an application + +Verify `../../app-vue` and `../../app-react`, or pass two `--app` overrides in +that order. Each path must contain `composer.json`, `vendor/`, and `runtime/`. + +### Playwright cannot launch Chromium + +Run `npx playwright install chromium`, or set +`PLAYWRIGHT_CHROMIUM_EXECUTABLE` to a compatible executable. Remove the override +when comparing Playwright-managed screenshot baselines. + +### A test reports runtime diagnostics + +Treat document, script, stylesheet, font, console, and page errors as product +failures. Inspect the trace and network log before changing the assertion. +Aborted requests caused by navigation are ignored; other critical failures are +not. diff --git a/docs/ui-parity-baseline.md b/docs/ui-parity-baseline.md new file mode 100644 index 0000000..32216f6 --- /dev/null +++ b/docs/ui-parity-baseline.md @@ -0,0 +1,308 @@ +# Yii Debug UI parity baseline + +## Purpose + +This document is the review contract for modernizing the shared Debug Core UI +without allowing the Yii adapter implementations to drift. It defines the +surfaces, fixture states, viewports, themes, interaction rules, accessibility +checks, privacy boundary, and reproducible artifacts that must remain covered. +See [Browser quality workflow](browser-quality.md) for setup and command details. + +The baseline is intentionally framework-neutral. The same packaged CSS, +JavaScript, fonts, PHP view models, and renderers are exercised through the two +local adapter applications: + +| Adapter fixture | Application | Origin | +| --------------- | ----------------- | ----------------------- | +| Vue client | `../../app-vue` | `http://localhost:8080` | +| React client | `../../app-react` | `http://localhost:8081` | + +The port assignment is part of +`tools/quality/fixture-contract.json`. Do not infer it from the client name or +swap it in local scripts. + +## Deterministic capture states + +`php tools/seed-debug-fixtures.php` upserts two storage-version 4 snapshots into +each application's `runtime/debug` store. Existing developer captures are not +deleted. + +| State | Stable tag | Intent | +| ----- | -------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| Empty | `quality-fixture-empty-v1` | Valid zero-row and optional-data states for every panel | +| Dense | `quality-fixture-dense-v1` | Representative content, 80 rows in data-heavy panels, long text, Unicode, traces, successes, warnings, and failures | + +The generator hydrates and serializes all panel payloads through the production +snapshot DTOs before writing them through `SnapshotStore`. Schema drift therefore +fails setup instead of silently producing a misleading screenshot. + +The dense fixture also contains an end-to-end privacy sentinel. A synthetic value +under the default exact key `password` and another under the configured prefix +`fixture_blocked_` must be replaced by `[redacted]`. A non-sensitive control value +must remain. The seeder inspects the persisted JSON after the write, and +`e2e/security.spec.js` inspects both the stored tagged-value envelope and rendered +DOM. The sentinel strings are test markers, not real credentials. + +The fixed capture timestamps begin at `2026-08-24T00:00:00Z`. The history query +uses `Debug[tag]=quality-fixture` so unrelated local requests do not affect row +counts or screenshots. + +## Surface inventory + +The browser suite treats the following 17 document surfaces as the complete UI +inventory. A new panel is incomplete until it is added to this table, +`e2e/support/environment.js`, the fixture generator, accessibility traversal, +and the visual atlas. + +| Surface | Route kind | Dense-state emphasis | Empty-state expectation | +| ------------------- | ----------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| Request history | `/debug/index` | Two deterministic captures and summary metrics | Filtered history remains understandable with no unrelated captures | +| Snapshot comparison | `/debug/compare` | Empty baseline versus dense target across all 14 panels | Missing and unchanged values remain distinct from changes | +| PHP Info | `/debug/php-info` | Standalone environment table and navigation shell | Not fixture-backed; layout must remain bounded | +| Configuration | `panel=config` | Application, PHP, and extension metadata | Sections render without malformed placeholders | +| Request | `panel=request` | Hero, parameters, body, headers, session, and server tabs | Valid empty collections and 204 status | +| Router | `panel=router` | Matching rule and rule trace | No route or rule entries | +| Inertia | `panel=inertia` | Component, props, headers, and shared data | No component or props | +| User | `panel=user` | Identity, attributes, roles, and permissions | Guest/no identity | +| Logs | `panel=log` | 80 mixed-level messages and long diagnostics | Empty table state | +| Database | `panel=db` | 80 plan-valid mixed query types, durations, duplicates, and traces | Empty table state | +| Profiling | `panel=profiling` | 80 entries, memory samples, and categories | Summary with no entries | +| Timeline | `panel=timeline` | Duration and memory overview | Minimal valid interval | +| Events | `panel=event` | 80 static and instance events | Empty table state | +| Mail | `panel=mail` | 16 success/failure messages and metadata | Empty table state | +| Queue | `panel=queue` | Push, execute, and error events | Empty table state | +| Dump | `panel=dump` | 24 traced values | Empty table state | +| Asset Bundles | `panel=asset` | Bundles plus Vite manifest chunks | No bundles and no Vite data | + +## URL contract + +Examples for the Vue application are shown below; replace only the origin for +the React application. + +```text +http://localhost:8080/debug/index?yii_debug_theme=light&Debug%5Btag%5D=quality-fixture +http://localhost:8080/debug/compare?yii_debug_theme=light&baseline=quality-fixture-empty-v1&target=quality-fixture-dense-v1 +http://localhost:8080/debug/php-info?yii_debug_theme=dark +http://localhost:8080/debug/view?yii_debug_theme=light&tag=quality-fixture-dense-v1&panel=request +http://localhost:8080/debug/view?yii_debug_theme=dark&tag=quality-fixture-empty-v1&panel=db +``` + +The toolbar is exercised on the application root. Drawer URLs must remain on the +same HTTP(S) origin and target a recognized debug route. + +## Theme and responsive matrix + +The dense visual atlas covers every surface in both explicit themes and all +three review viewports: + +| Playwright project | Viewport | Review intent | +| ------------------ | ---------- | ---------------------------------------------------------------- | +| `desktop-1440` | 1440 × 900 | Full navigation, dense tables, charts, and drawer | +| `tablet-1024` | 1024 × 768 | Intermediate wrapping and available table width | +| `mobile-390` | 390 × 844 | Single-column flow, touch-size controls, and horizontal overflow | + +The empty atlas is captured in light mode at 1440 px because the dense atlas +already covers theme and breakpoint behavior. Smoke and accessibility tests run +both fixture states at every viewport. + +The explicit theme contract is: + +- debugger documents set `data-yii-debug-theme="light|dark"` on ``; +- the toolbar sets `data-theme="light|dark"` on its Web Component host; +- light and dark tokens originate in `resources/src/styles/tokens.css`; +- a theme switch must update its label and selected theme without reloading the + inspected application. + +## Behavioral parity contract + +Both adapters must preserve the following observable behavior: + +1. All routes return a successful HTTP response and render `.yii-debug-page`. +2. When a panel is registered in the sidebar, exactly one link is active and it + targets the rendered panel. Configuration remains a header action, and a + directly addressable optional panel may be absent from adapter navigation. +3. Documents do not create page-level horizontal overflow at any review width. + A deliberately scrollable table wrapper is allowed. +4. The toolbar loads its data without console, page, script, stylesheet, or font + failures. +5. The expand and collapse controls expose their current action through an + accessible name. +6. A keyboard-activated toolbar chip opens the drawer and moves focus to the + close control. +7. `Escape` closes the drawer and restores focus to the activating chip. +8. `ArrowUp`, `ArrowDown`, `Home`, and `End` operate on the drawer resize + separator while its ARIA value reflects the resulting height. +9. Repeated toolbar data refreshes must not discard an open iframe's document, + focus, or scroll position. +10. Runtime diagnostics are empty after each traversal step. + +Framework-specific data may differ for developer-generated captures. Fixture +screenshots, structure, spacing, typography, controls, focus behavior, and empty +states must not differ merely because the host page uses Vue or React. + +## Visual identity baseline + +The current design direction is an engineering instrument rather than a generic +administration dashboard: + +- IBM Plex Sans for interface text and JetBrains Mono for code, values, and the + display accent; +- viridian/emerald primary actions over green-tinted neutral surfaces; +- compact cards, metrics, pills, tables, tab strips, trace disclosures, and + semantic colors shared by every panel; +- explicit color vocabularies for HTTP verbs and status classes, log levels, SQL + tokens, and timeline categories; +- one focus-ring token and a reduced-motion-compatible interaction layer; +- one toolbar implementation isolated in shadow DOM but driven by the same + tokens. + +A modernization may refine hierarchy, density, responsive navigation, and data +visualization. It should not introduce panel-specific typography or unrelated +color systems. + +## Automated acceptance gates + +| Gate | Command | Pass condition | +| ------------------------------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------- | +| Fixture schema and persisted sentinel | `npm run fixtures:seed` | Both stable tags are written; forbidden sentinels are absent; exact and prefixed values are placeholders | +| Smoke and keyboard | `npm run test:e2e` | Both apps, 14 panels, dense/empty, history, comparison, PHP Info, toolbar, and privacy checks pass | +| Accessibility | `npm run test:a11y` | No serious or critical axe WCAG A/AA violations and no runtime diagnostics | +| Reproducible visual atlas | `npm run test:visual` | PNG artifacts are produced under `artifacts/ui//` with stable names | +| Optional golden comparison | `npm run test:visual:compare` | Opted-in screenshots match reviewed baselines | +| Offline large-data harness | `npm run test:perf` | 50, 1,000, and 5,000 row render/filter/DOM budgets pass | +| Live panel envelope | `npm run test:perf:live` | Dense panel navigation timing and DOM-node budgets pass | +| Asset size | `npm run check:size` | Every expected distribution asset and aggregate raw/gzip size is within budget | +| Token contrast | `npm run check:contrast:strict` | Every configured text, non-text, and semantic badge composition meets its WCAG role target | + +The default visual run writes review artifacts but does not force binary goldens +into version control. Setting `DEBUG_UI_VISUAL_COMPARE=1` enables Playwright's +pixel comparison. `npm run test:visual:update` is an explicit baseline-update +operation and must be followed by paired Vue/React review. + +The dense atlas produces 204 document screenshots (2 apps × 2 themes × 3 +viewports × 17 surfaces), 12 toolbar-drawer screenshots, and 28 desktop empty +panel screenshots: 244 review images in total. + +## Accessibility baseline + +`e2e/accessibility.spec.js` scans the debugger document and toolbar shadow DOM +with axe rules tagged WCAG 2.0 A/AA, WCAG 2.1 A/AA, and WCAG 2.2 AA. Serious and +critical violations fail immediately; full JSON results are attached to the +Playwright report for review. + +This severity gate is a starting point rather than a claim of complete WCAG +conformance. Manual review is still required for: + +- meaningful reading and focus order at all widths; +- visible focus, target size, and zoom/reflow at 200% and 400%; +- chart and semantic-color comprehension without color alone; +- screen-reader announcements for dynamic filters, drawer loading, and errors; +- keyboard reachability of disclosures, tabs, filters, pagination, and copied + values. + +## Privacy and artifact handling + +Debug captures can contain request bodies, headers, cookies, SQL, mail, identity +data, filesystem paths, environment configuration, and PHP Info. The deterministic +fixtures use only synthetic values, but PHP Info and the inspected application +root still describe the local machine. + +- `artifacts/` is ignored by Git and is local-only by default. +- Do not upload Playwright traces, videos, reports, or PHP Info screenshots to a + public artifact store without a separate sanitization decision. +- Never replace the synthetic sentinel strings with working credentials. +- A UI must not recover, embed, or expose data that was redacted before storage. +- Modernization must preserve text escaping and safe URL handling; visual + convenience does not override those boundaries. + +## Performance and size baseline + +The packaged modernization baseline is 400,604 raw bytes and 204,510 bytes using +gzip level 9. Dynamically loaded database, DOM, PHP Info search, and user-switch +chunks are budgeted separately from the main debugger bundle. The file-specific ceilings in +`tools/quality/asset-size-budget.json` provide approximately five percent +headroom and reject missing or unexpected distribution files. Any budget +increase requires a before/after measurement and an explanation of user value. + +`tools/quality/performance-budget.json` establishes intentionally generous, +cross-machine guardrails. It is a regression sentinel, not a user-perceived +performance claim. Record median and tail behavior separately before tightening +budgets or selecting virtualization thresholds. + +## Known baseline limitations + +1. The required axe gate excludes moderate and minor findings so current debt can + be triaged without making the suite unusable. Each modernization phase should + reduce, not expand, the full attached violation set. +2. Goldens are opt-in. Core CI detects fixture, script, contrast, size, and + offline performance regressions, but it cannot run the local sibling demo + applications. A versioned demo environment is required before pixel diffs can + be a reliable mandatory CI gate. +3. Empty and dense captures do not yet cover every loading, storage-corruption, + transport-error, permission-denied, or very-long-localization state. Add + deterministic fixtures before redesigning those states. +4. The 5,000-row harness isolates table cost. Live fixtures are capped at 80 rows + to keep the complete visual matrix practical; large real panel datasets still + need profiling and, likely, pagination or virtualization. + +## Modernization sequence + +### Phase 0: protect contracts + +- Keep the deterministic tags, cross-adapter URL mapping, sentinel, asset budget, + and browser diagnostics green. +- Fix serious/critical accessibility failures and unsafe URL or escaping behavior + before visual expansion. +- Review paired Vue/React images for every changed shared primitive. + +### Phase 1: foundations + +- Keep the strict token contrast gate green, validate compound colors in the DOM + with axe, and document surface, border, text, semantic, spacing, radius, + elevation, and motion roles. +- Standardize focus, hover, active, disabled, selected, loading, empty, error, + and truncation states across controls. +- Establish responsive navigation behavior rather than relying on incidental + wrapping. + +### Phase 2: shared composition + +- Modernize shell hierarchy, navigation, page header, metric cards, filters, + tables, tabs, disclosures, pagination, copy actions, and drawer chrome as + shared patterns. +- Preserve information density while adding optional compact/comfortable density + only if it is consistent across panels. +- Ensure mobile views expose data through progressive disclosure instead of + document-level overflow. + +### Phase 3: data-heavy panels + +- Prioritize Logs, Database, Profiling, Timeline, Events, Mail, Queue, and Dump. +- Benchmark filter latency and DOM size with 1,000 and 5,000 rows before choosing + pagination, server filtering, windowing, or virtualization. +- Pair semantic color with labels, icons, patterns, or position. + +### Phase 4: resilience and polish + +- Add deterministic loading, stale-refresh, endpoint-error, corrupt-storage, + no-permission, long-value, and localization fixtures. +- Add screen-reader announcements and reduced-motion coverage for dynamic state. +- Promote reviewed screenshot baselines to CI only after the rendering environment + and demo applications are versioned and stable. + +## Review checklist + +- [ ] Dense and empty fixture tags exist in both stores. +- [ ] The Vue origin is 8080 and the React origin is 8081. +- [ ] All 14 panels plus History, Snapshot Comparison, and PHP Info were + inspected. +- [ ] Light and dark results were inspected at 1440, 1024, and 390 px. +- [ ] Toolbar expand, keyboard activation, resize, theme, refresh, close, and focus + restoration were inspected. +- [ ] Paired Vue/React screenshots differ only where host data legitimately differs. +- [ ] No console, page, script, stylesheet, or font errors occurred. +- [ ] Serious/critical axe output is empty and remaining findings are triaged. +- [ ] Synthetic sensitive sentinel values are absent from storage and DOM while + `[redacted]` is present. +- [ ] Asset and performance budgets did not regress without an approved rationale. +- [ ] Traces, videos, reports, and PHP Info images remain private unless sanitized. diff --git a/e2e/accessibility.spec.js b/e2e/accessibility.spec.js new file mode 100644 index 0000000..0314e23 --- /dev/null +++ b/e2e/accessibility.spec.js @@ -0,0 +1,108 @@ +import AxeBuilder from "@axe-core/playwright"; +import { expect, test } from "@playwright/test"; + +import { + collectRuntimeDiagnostics, + expectNoRuntimeDiagnostics, + formatAxeViolations, + openDebugPage, + seriousAxeViolations, + waitForToolbar, +} from "./support/debug-ui.js"; +import { + debugApps, + panelEntries, + standaloneEntries, +} from "./support/environment.js"; + +const wcagTags = ["wcag2a", "wcag2aa", "wcag21a", "wcag21aa", "wcag22aa"]; + +async function auditDebuggerPage(page, testInfo, label) { + const results = await new AxeBuilder({ page }).withTags(wcagTags).analyze(); + const violations = seriousAxeViolations(results); + + await testInfo.attach(`${label}-axe.json`, { + body: Buffer.from(JSON.stringify(results, null, 2)), + contentType: "application/json", + }); + expect.soft(violations, formatAxeViolations(violations)).toEqual([]); +} + +for (const app of debugApps()) { + test.describe(`${app.name} accessibility`, () => { + test.setTimeout(180_000); + + for (const theme of ["light", "dark"]) { + for (const state of ["dense", "empty"]) { + test(`${theme} ${state} panels have no serious axe violations`, async ({ + page, + }, testInfo) => { + const diagnostics = collectRuntimeDiagnostics(page); + + for (const entry of panelEntries) { + await test.step(entry.label, async () => { + await openDebugPage(page, app, entry, { state, theme }); + await auditDebuggerPage( + page, + testInfo, + `${app.name}-${theme}-${state}-${entry.id}`, + ); + await expectNoRuntimeDiagnostics( + diagnostics.splice(0), + `${app.name} ${theme} ${state} ${entry.id}`, + ); + }); + } + }); + } + + test(`${theme} standalone pages have no serious axe violations`, async ({ + page, + }, testInfo) => { + const diagnostics = collectRuntimeDiagnostics(page); + + for (const entry of standaloneEntries) { + await test.step(entry.label, async () => { + await openDebugPage(page, app, entry, { theme }); + await auditDebuggerPage( + page, + testInfo, + `${app.name}-${theme}-${entry.id}`, + ); + await expectNoRuntimeDiagnostics( + diagnostics.splice(0), + `${app.name} ${theme} ${entry.id}`, + ); + }); + } + }); + } + + test("toolbar shadow DOM has no serious axe violations", async ({ + page, + }, testInfo) => { + const diagnostics = collectRuntimeDiagnostics(page); + const response = await page.goto(app.baseURL, { + waitUntil: "domcontentloaded", + }); + + expect(response?.ok(), `${app.baseURL} must load successfully`).toBe( + true, + ); + await waitForToolbar(page); + + const results = await new AxeBuilder({ page }) + .include("yii-debug-toolbar") + .withTags(wcagTags) + .analyze(); + const violations = seriousAxeViolations(results); + + await testInfo.attach(`${app.name}-toolbar-axe.json`, { + body: Buffer.from(JSON.stringify(results, null, 2)), + contentType: "application/json", + }); + expect(violations, formatAxeViolations(violations)).toEqual([]); + await expectNoRuntimeDiagnostics(diagnostics, `${app.name} toolbar`); + }); + }); +} diff --git a/e2e/global-setup.js b/e2e/global-setup.js new file mode 100644 index 0000000..1605ecb --- /dev/null +++ b/e2e/global-setup.js @@ -0,0 +1,25 @@ +import { spawnSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; + +export default function globalSetup() { + if (process.env.DEBUG_UI_SEED_FIXTURES === "0") { + return; + } + + const seeder = fileURLToPath( + new URL("../tools/seed-debug-fixtures.php", import.meta.url), + ); + const command = process.env.PHP_BINARY || "php"; + const result = spawnSync(command, [seeder, "--quiet"], { + encoding: "utf8", + env: process.env, + }); + + if (result.status !== 0) { + const output = [result.stdout, result.stderr].filter(Boolean).join("\n"); + + throw new Error( + `Unable to seed deterministic debug snapshots with ${command}.\n${output}`, + ); + } +} diff --git a/e2e/large-data.spec.js b/e2e/large-data.spec.js new file mode 100644 index 0000000..342da9f --- /dev/null +++ b/e2e/large-data.spec.js @@ -0,0 +1,89 @@ +import { readFileSync } from "node:fs"; + +import { expect, test } from "@playwright/test"; + +const budget = JSON.parse( + readFileSync( + new URL("../tools/quality/performance-budget.json", import.meta.url), + "utf8", + ), +).largeData; +const stylesheet = new URL( + "../resources/assets/dist/css/debug.min.css", + import.meta.url, +); + +test.describe.configure({ mode: "serial" }); + +for (const rowCount of [50, 1000, 5000]) { + test(`representative debug grid remains bounded at ${rowCount} rows`, async ({ + page, + }, testInfo) => { + await page.setContent(` + + + + +
+
+

Large-data quality fixture

+ + +
+ + + +
IDCategoryMessageDuration
+
+
+
+ + + `); + await page.addStyleTag({ path: stylesheet.pathname }); + + const metrics = await page.evaluate((count) => { + const body = document.querySelector("#quality-rows"); + const filter = document.querySelector("#quality-filter"); + const renderStart = performance.now(); + let html = ""; + + for (let index = 0; index < count; index += 1) { + const category = `fixture-${index % 12}`; + html += `${index + 1}${category}Deterministic quality fixture row ${index}${(index % 30) + 0.25} ms`; + } + + body.innerHTML = html; + const renderMs = performance.now() - renderStart; + const filterStart = performance.now(); + const needle = "fixture-7"; + + filter.value = needle; + for (const row of body.rows) { + row.hidden = !row.dataset.search.includes(needle); + } + + const filterMs = performance.now() - filterStart; + + return { + rowCount: body.rows.length, + visibleRows: Array.from(body.rows).filter((row) => !row.hidden).length, + renderMs, + filterMs, + domNodes: document.getElementsByTagName("*").length, + }; + }, rowCount); + const threshold = budget[String(rowCount)]; + + await testInfo.attach(`large-data-${rowCount}.json`, { + body: Buffer.from(JSON.stringify(metrics, null, 2)), + contentType: "application/json", + }); + + expect(metrics.rowCount).toBe(rowCount); + expect(metrics.visibleRows).toBeGreaterThan(0); + expect(metrics.renderMs).toBeLessThanOrEqual(threshold.maxRenderMs); + expect(metrics.filterMs).toBeLessThanOrEqual(threshold.maxFilterMs); + expect(metrics.domNodes).toBeLessThanOrEqual(threshold.maxDomNodes); + }); +} diff --git a/e2e/live-performance.spec.js b/e2e/live-performance.spec.js new file mode 100644 index 0000000..63a3103 --- /dev/null +++ b/e2e/live-performance.spec.js @@ -0,0 +1,63 @@ +import { readFileSync } from "node:fs"; + +import { expect, test } from "@playwright/test"; + +import { + collectRuntimeDiagnostics, + expectNoRuntimeDiagnostics, + openDebugPage, +} from "./support/debug-ui.js"; +import { debugApps, panelEntries } from "./support/environment.js"; + +const budget = JSON.parse( + readFileSync( + new URL("../tools/quality/performance-budget.json", import.meta.url), + "utf8", + ), +).livePanel; + +for (const app of debugApps()) { + test(`${app.name} dense panels stay inside the live performance envelope`, async ({ + page, + }, testInfo) => { + const diagnostics = collectRuntimeDiagnostics(page); + const results = []; + + for (const entry of panelEntries) { + await openDebugPage(page, app, entry, { + state: "dense", + theme: "light", + }); + + const metrics = await page.evaluate(() => { + const navigation = performance.getEntriesByType("navigation")[0]; + + return { + domContentLoadedMs: navigation + ? navigation.domContentLoadedEventEnd - navigation.startTime + : null, + domNodes: document.getElementsByTagName("*").length, + }; + }); + + results.push({ panel: entry.id, ...metrics }); + expect( + metrics.domContentLoadedMs, + `${entry.id} must expose Navigation Timing`, + ).not.toBeNull(); + expect(metrics.domContentLoadedMs).toBeLessThanOrEqual( + budget.maxDomContentLoadedMs, + ); + expect(metrics.domNodes).toBeLessThanOrEqual(budget.maxDomNodes); + await expectNoRuntimeDiagnostics( + diagnostics.splice(0), + `${app.name} performance ${entry.id}`, + ); + } + + await testInfo.attach(`${app.name}-live-performance.json`, { + body: Buffer.from(JSON.stringify(results, null, 2)), + contentType: "application/json", + }); + }); +} diff --git a/e2e/security.spec.js b/e2e/security.spec.js new file mode 100644 index 0000000..09b75cb --- /dev/null +++ b/e2e/security.spec.js @@ -0,0 +1,120 @@ +import { readFileSync } from "node:fs"; + +import { expect, test } from "@playwright/test"; + +import { + collectRuntimeDiagnostics, + expectNoRuntimeDiagnostics, + openDebugPage, +} from "./support/debug-ui.js"; +import { + debugApps, + fixtureContract, + fixtureSnapshotPath, + panelEntries, + standaloneEntries, +} from "./support/environment.js"; + +function capturedValuesForKey(node, target, values = []) { + if (node === null || typeof node !== "object") { + return values; + } + + if ( + node.key === target && + node.value !== null && + typeof node.value === "object" && + Object.hasOwn(node.value, "value") + ) { + values.push(node.value.value); + } + + for (const value of Object.values(node)) { + capturedValuesForKey(value, target, values); + } + + return values; +} + +const requestPanel = panelEntries.find((entry) => entry.id === "request"); +const comparisonPage = standaloneEntries.find( + (entry) => entry.kind === "compare", +); +const security = fixtureContract.security; + +if (!requestPanel || !comparisonPage || !security) { + throw new Error("The security fixture contract is incomplete."); +} + +for (const [appIndex, app] of debugApps().entries()) { + test(`${app.name} never persists or renders synthetic sensitive sentinels`, async ({ + page, + }) => { + const snapshotPath = fixtureSnapshotPath(appIndex); + const rawSnapshot = readFileSync(snapshotPath, "utf8"); + const snapshot = JSON.parse(rawSnapshot); + + for (const sentinel of [ + security.exactSentinel, + security.prefixedSentinel, + ]) { + expect( + rawSnapshot, + `${snapshotPath} must not contain ${sentinel}`, + ).not.toContain(sentinel); + } + + for (const key of [security.exactKey, security.prefixedKey]) { + expect( + capturedValuesForKey(snapshot, key), + `${key} must be persisted only as the documented placeholder`, + ).toContain(security.placeholder); + } + + expect(capturedValuesForKey(snapshot, security.controlKey)).toContain( + security.controlValue, + ); + + const diagnostics = collectRuntimeDiagnostics(page); + + await openDebugPage(page, app, requestPanel, { + state: "dense", + theme: "light", + }); + + const html = await page.content(); + const body = page.locator("body"); + const bodyText = await body.innerText(); + + for (const sentinel of [ + security.exactSentinel, + security.prefixedSentinel, + ]) { + expect(html).not.toContain(sentinel); + expect(bodyText).not.toContain(sentinel); + } + + await expect(body).toContainText(security.exactKey); + await expect(body).toContainText(security.prefixedKey); + await expect(body).toContainText(security.placeholder); + await expect(body).toContainText(security.controlValue); + + await openDebugPage(page, app, comparisonPage, { theme: "light" }); + + const comparisonHtml = await page.content(); + const comparisonText = await page.locator("body").innerText(); + + for (const sentinel of [ + security.exactSentinel, + security.prefixedSentinel, + ]) { + expect(comparisonHtml).not.toContain(sentinel); + expect(comparisonText).not.toContain(sentinel); + } + + await expectNoRuntimeDiagnostics( + diagnostics, + `${app.name} redaction sentinel`, + ); + }); +} diff --git a/e2e/smoke.spec.js b/e2e/smoke.spec.js new file mode 100644 index 0000000..030916e --- /dev/null +++ b/e2e/smoke.spec.js @@ -0,0 +1,321 @@ +import { createHash } from "node:crypto"; +import { readFile } from "node:fs/promises"; +import { resolve } from "node:path"; + +import { expect, test } from "@playwright/test"; + +import { + collectRuntimeDiagnostics, + expandToolbar, + expectDebuggerLayout, + expectNoRuntimeDiagnostics, + openDebugPage, + waitForStableUI, + waitForToolbar, +} from "./support/debug-ui.js"; +import { + debugApps, + fixtureApplicationPaths, + panelEntries, + standaloneEntries, +} from "./support/environment.js"; + +const databaseEntry = panelEntries.find((entry) => entry.id === "db"); +const applicationPaths = fixtureApplicationPaths(); + +if (!databaseEntry) { + throw new Error("The Database panel must be registered in the UI contract."); +} + +function isExplainResponse(response) { + const url = new URL(response.url()); + + return ( + url.pathname.endsWith("/debug/db-explain") || + url.searchParams.get("r")?.endsWith("debug/db-explain") + ); +} + +async function fileDigest(file) { + const contents = await readFile(file); + + return createHash("sha256").update(contents).digest("hex"); +} + +for (const [appIndex, app] of debugApps().entries()) { + test.describe(`${app.name} debugger`, () => { + test("toolbar drawer preserves keyboard focus and closes with Escape", async ({ + page, + }) => { + const diagnostics = collectRuntimeDiagnostics(page); + const response = await page.goto(app.baseURL, { + waitUntil: "domcontentloaded", + }); + + expect(response, `${app.baseURL} must return a response`).not.toBeNull(); + expect(response?.ok(), `${app.baseURL} must load successfully`).toBe( + true, + ); + + const toolbar = await waitForToolbar(page); + await expandToolbar(toolbar); + + const trigger = toolbar.locator("[data-debug-url]").first(); + await expect(trigger).toBeVisible(); + const triggerURL = await trigger.getAttribute("data-debug-url"); + + expect( + triggerURL, + "A toolbar panel must expose its drawer URL", + ).toBeTruthy(); + await trigger.focus(); + await page.keyboard.press("Enter"); + + const close = toolbar.getByRole("button", { name: "Close panel" }); + const frame = toolbar.locator("iframe[title='Yii debug panel']"); + const resize = toolbar.getByRole("separator", { + name: "Resize debug panel", + }); + + await expect(close).toBeVisible(); + await expect(frame).toBeVisible(); + await expect(frame).toHaveAttribute("src", /\/debug\/view/); + await expect( + frame.contentFrame().locator(".yii-debug-page").first(), + ).toBeVisible(); + await expect + .poll(() => + toolbar.evaluate( + (element) => element.shadowRoot.activeElement?.className, + ), + ) + .toContain("close-drawer"); + + const drawerStateBeforeAjaxRefresh = await frame.evaluate((element) => { + const document = element.contentDocument; + const window = element.contentWindow; + const focusTarget = document?.querySelector( + "a[href], button, input, select, textarea, [tabindex]:not([tabindex='-1'])", + ); + + if (!document || !window || !focusTarget) { + return null; + } + + element.dataset.qualityDrawerIdentity = "preserved"; + focusTarget.dataset.qualityDrawerFocus = "preserved"; + focusTarget.focus(); + + const maximumScroll = Math.max( + 0, + document.documentElement.scrollHeight - window.innerHeight, + ); + window.scrollTo(0, Math.min(120, maximumScroll)); + + return { + focused: + document.activeElement?.dataset.qualityDrawerFocus === "preserved", + scrollY: window.scrollY, + }; + }); + + expect( + drawerStateBeforeAjaxRefresh, + "The open drawer must expose a focusable document", + ).not.toBeNull(); + expect(drawerStateBeforeAjaxRefresh?.focused).toBe(true); + + await toolbar.evaluate((element) => { + element.setAjaxRequests([...(element.ajaxRequests ?? [])]); + }); + + await expect(frame).toHaveAttribute( + "data-quality-drawer-identity", + "preserved", + ); + const drawerStateAfterAjaxRefresh = await frame.evaluate((element) => ({ + focused: + element.contentDocument?.activeElement?.dataset.qualityDrawerFocus === + "preserved", + scrollY: element.contentWindow?.scrollY ?? null, + })); + + expect(drawerStateAfterAjaxRefresh).toEqual(drawerStateBeforeAjaxRefresh); + + await resize.focus(); + const heightBefore = await resize.getAttribute("aria-valuenow"); + await page.keyboard.press("ArrowUp"); + const heightAfter = await resize.getAttribute("aria-valuenow"); + + expect(heightBefore).not.toBeNull(); + expect(heightAfter).not.toBe(heightBefore); + + await page.keyboard.press("Escape"); + await expect(frame).toHaveCount(0); + await expect + .poll(() => + toolbar.evaluate( + (element) => + element.shadowRoot.activeElement?.getAttribute( + "data-debug-url", + ) ?? null, + ), + ) + .toBe(triggerURL); + + const themeBefore = await toolbar.getAttribute("data-theme"); + await toolbar.getByRole("button", { name: /Switch to .* theme/ }).click(); + const themeAfter = await toolbar.getAttribute("data-theme"); + + expect(themeAfter).not.toBe(themeBefore); + await waitForStableUI(page); + await expectNoRuntimeDiagnostics(diagnostics, `${app.name} toolbar`); + }); + + for (const state of ["dense", "empty"]) { + test(`traverses all 14 panels in the ${state} fixture`, async ({ + page, + }) => { + const diagnostics = collectRuntimeDiagnostics(page); + + for (const entry of panelEntries) { + await test.step(entry.label, async () => { + await openDebugPage(page, app, entry, { + state, + theme: "light", + }); + await expectDebuggerLayout(page, entry, "light"); + + if (entry.id !== "config") { + const activeNavigation = page.locator( + ".yii-debug-nav-link.is-active", + ); + const panelNavigation = page.locator( + `.yii-debug-nav-link[href*="panel=${entry.id}"]`, + ); + + if ((await panelNavigation.count()) > 0) { + await expect(activeNavigation).toHaveCount(1); + await expect(activeNavigation).toHaveAttribute( + "href", + new RegExp(`(?:[?&]|%26)panel(?:=|%3D)${entry.id}`), + ); + } + } + + await expect(page.locator("main h1").first()).toBeVisible(); + await expect(page.locator("main h1").first()).not.toBeEmpty(); + + await expectNoRuntimeDiagnostics( + diagnostics.splice(0), + `${app.name} ${state} ${entry.id}`, + ); + }); + } + }); + } + + test("opens deterministic history, comparison, and phpinfo", async ({ + page, + }) => { + const diagnostics = collectRuntimeDiagnostics(page); + + for (const entry of standaloneEntries) { + await test.step(entry.label, async () => { + await openDebugPage(page, app, entry, { theme: "light" }); + await expectDebuggerLayout(page, entry, "light"); + + if (entry.kind === "history") { + await expect(page.locator("tr[data-key]")).toHaveCount(2); + } + + await expectNoRuntimeDiagnostics( + diagnostics.splice(0), + `${app.name} ${entry.id}`, + ); + }); + } + }); + + test("explains every fixture query without inline request failures", async ({ + page, + }, testInfo) => { + test.skip( + testInfo.project.name !== "desktop-1440", + "The EXPLAIN workflow is viewport-independent and runs once per adapter.", + ); + + const diagnostics = collectRuntimeDiagnostics(page); + const failedResponses = []; + const databaseFile = resolve( + applicationPaths[appIndex], + "runtime", + "db.sqlite", + ); + const databaseDigest = await fileDigest(databaseFile); + + page.on("response", (response) => { + if (isExplainResponse(response) && !response.ok()) { + failedResponses.push(`${response.status()} ${response.url()}`); + } + }); + + await openDebugPage(page, app, databaseEntry, { + pageSize: "all", + state: "dense", + theme: "light", + }); + await expectDebuggerLayout(page, databaseEntry, "light"); + + const toggles = page.locator(".yii-debug-db-explain-toggle"); + + await expect(toggles).toHaveCount(80); + + for (const verb of ["SELECT", "INSERT", "UPDATE", "DELETE"]) { + await test.step(`explains ${verb}`, async () => { + const rows = page.locator(".yii-debug-grid-db tbody tr").filter({ + has: page.locator(".yii-debug-db-type", { hasText: verb }), + }); + + await expect(rows).toHaveCount(20); + + const row = rows.first(); + const toggle = row.locator(".yii-debug-db-explain-toggle"); + const target = row.locator(".yii-debug-db-explain-text"); + + await toggle.click(); + await expect(target).toHaveAttribute("data-loaded", "1"); + await expect(target).not.toHaveClass(/\bis-error\b/); + await expect(target.locator(".yii-debug-explain")).toBeVisible(); + await expect(target).not.toContainText("EXPLAIN failed:"); + + await toggle.click(); + await expect(toggle).toHaveAttribute("aria-expanded", "false"); + }); + } + + const explainAll = page.locator(".yii-debug-db-explain-all-toggle"); + + await explainAll.click(); + await expect( + page.locator(".yii-debug-db-explain-text[data-loaded='1']"), + ).toHaveCount(80, { timeout: 30_000 }); + await expect( + page.locator(".yii-debug-db-explain-text.is-error"), + ).toHaveCount(0); + await expect( + page.locator(".yii-debug-db-explain.is-loading"), + ).toHaveCount(0); + await expect(explainAll).toHaveText("Collapse all"); + await expect(failedResponses).toEqual([]); + expect( + await fileDigest(databaseFile), + "EXPLAIN must not mutate the local application database", + ).toBe(databaseDigest); + await expectNoRuntimeDiagnostics( + diagnostics, + `${app.name} database EXPLAIN`, + ); + }); + }); +} diff --git a/e2e/support/debug-ui.js b/e2e/support/debug-ui.js new file mode 100644 index 0000000..1f89c14 --- /dev/null +++ b/e2e/support/debug-ui.js @@ -0,0 +1,162 @@ +import { expect } from "@playwright/test"; + +import { debugPageURL } from "./environment.js"; + +const ignoredRequestFailure = /(?:ERR_ABORTED|NS_BINDING_ABORTED)/i; + +export function collectRuntimeDiagnostics(page) { + const diagnostics = []; + + page.on("console", (message) => { + if (message.type() === "error") { + const location = message.location(); + const source = location.url + ? ` (${location.url}:${location.lineNumber ?? 0})` + : ""; + + diagnostics.push(`console${source}: ${message.text()}`); + } + }); + page.on("pageerror", (error) => { + diagnostics.push(`pageerror: ${error.message}`); + }); + page.on("requestfailed", (request) => { + const resourceType = request.resourceType(); + const failure = request.failure()?.errorText ?? "unknown failure"; + + if ( + ["document", "script", "stylesheet", "font"].includes(resourceType) && + !ignoredRequestFailure.test(failure) + ) { + diagnostics.push( + `requestfailed (${resourceType}): ${request.url()} — ${failure}`, + ); + } + }); + + return diagnostics; +} + +export async function expectNoRuntimeDiagnostics(diagnostics, context) { + await expect( + diagnostics, + `${context} must not emit console, page, or critical resource errors`, + ).toEqual([]); +} + +export async function waitForStableUI(page) { + await page.evaluate(async () => { + if (document.fonts?.ready) { + await document.fonts.ready; + } + + const animations = document.getAnimations?.() ?? []; + + await Promise.race([ + Promise.allSettled(animations.map((animation) => animation.finished)), + new Promise((resolve) => window.setTimeout(resolve, 250)), + ]); + + await new Promise((resolve) => { + requestAnimationFrame(() => requestAnimationFrame(resolve)); + }); + }); +} + +export async function freezeVisualMotion(page) { + await page.addStyleTag({ + content: ` + *, *::before, *::after { + animation-delay: 0s !important; + animation-duration: 0s !important; + caret-color: transparent !important; + scroll-behavior: auto !important; + transition-delay: 0s !important; + transition-duration: 0s !important; + } + `, + }); +} + +export async function openDebugPage(page, app, entry, options = {}) { + const url = debugPageURL(app, entry, options); + const response = await page.goto(url, { waitUntil: "domcontentloaded" }); + + expect( + response, + `Navigation to ${url} must return a response`, + ).not.toBeNull(); + expect(response?.ok(), `Navigation to ${url} must succeed`).toBe(true); + await expect(page.locator(".yii-debug-page").first()).toBeVisible(); + await waitForStableUI(page); + + return url; +} + +export async function expectDebuggerLayout(page, entry, theme) { + await expect(page.locator("html")).toHaveAttribute( + "data-yii-debug-theme", + theme, + ); + await expect(page.locator(".yii-debug-page").first()).toBeVisible(); + await expect(page.locator(".yii-debug-page").first()).not.toBeEmpty(); + + const overflow = await page.evaluate(() => ({ + clientWidth: document.documentElement.clientWidth, + scrollWidth: document.documentElement.scrollWidth, + })); + + expect( + overflow.scrollWidth, + `${entry.id} must not overflow the document viewport horizontally`, + ).toBeLessThanOrEqual(overflow.clientWidth + 1); +} + +export async function waitForToolbar(page) { + const toolbar = page.locator("yii-debug-toolbar"); + + await expect(toolbar).toBeAttached(); + await page.waitForFunction(() => { + const element = document.querySelector("yii-debug-toolbar"); + const root = element?.shadowRoot; + + return Boolean( + root?.querySelector(".toolbar") && + (element.data || root.querySelector(".error-message")), + ); + }); + await expect(toolbar.locator(".error-message")).toHaveCount(0); + + return toolbar; +} + +export async function expandToolbar(toolbar) { + const expand = toolbar.getByRole("button", { name: "Expand debug toolbar" }); + + if ((await expand.count()) > 0) { + await expand.click(); + } + + await expect( + toolbar.getByRole("button", { name: "Collapse toolbar" }), + ).toBeVisible(); +} + +export function seriousAxeViolations(results) { + return results.violations.filter((violation) => + ["serious", "critical"].includes(violation.impact ?? ""), + ); +} + +export function formatAxeViolations(violations) { + return violations + .map((violation) => { + const targets = violation.nodes + .flatMap((node) => node.target) + .map((target) => String(target)) + .join(", "); + + return `${violation.id} [${violation.impact}]: ${violation.help} (${targets})`; + }) + .join("\n"); +} diff --git a/e2e/support/environment.js b/e2e/support/environment.js new file mode 100644 index 0000000..b26109f --- /dev/null +++ b/e2e/support/environment.js @@ -0,0 +1,152 @@ +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const repositoryRoot = fileURLToPath(new URL("../..", import.meta.url)); +const contract = JSON.parse( + readFileSync( + new URL("../../tools/quality/fixture-contract.json", import.meta.url), + "utf8", + ), +); + +export const panelEntries = [ + { id: "config", label: "Configuration", kind: "panel" }, + { id: "request", label: "Request", kind: "panel" }, + { id: "router", label: "Router", kind: "panel" }, + { id: "inertia", label: "Inertia", kind: "panel" }, + { id: "user", label: "User", kind: "panel" }, + { id: "log", label: "Logs", kind: "panel" }, + { id: "db", label: "Database", kind: "panel" }, + { id: "profiling", label: "Profiling", kind: "panel" }, + { id: "timeline", label: "Timeline", kind: "panel" }, + { id: "event", label: "Events", kind: "panel" }, + { id: "mail", label: "Mail", kind: "panel" }, + { id: "queue", label: "Queue", kind: "panel" }, + { id: "dump", label: "Dump", kind: "panel" }, + { id: "asset", label: "Asset Bundles", kind: "panel" }, +]; + +export const standaloneEntries = [ + { id: "history", label: "Request history", kind: "history" }, + { id: "compare", label: "Snapshot comparison", kind: "compare" }, + { id: "phpinfo", label: "PHP Info", kind: "phpinfo" }, +]; + +export const visualEntries = [...standaloneEntries, ...panelEntries]; +export const fixtureContract = contract; +export { repositoryRoot }; + +function validatedBaseURL(value, index) { + let url; + + try { + url = new URL(value); + } catch (_error) { + throw new Error(`DEBUG_UI_BASE_URLS entry ${index + 1} is not a URL.`); + } + + if (url.protocol !== "http:" && url.protocol !== "https:") { + throw new Error( + `DEBUG_UI_BASE_URLS entry ${index + 1} must use http or https.`, + ); + } + + return url.href.replace(/\/$/, ""); +} + +export function debugApps() { + const configuredURLs = process.env.DEBUG_UI_BASE_URLS?.split(",") + .map((value) => value.trim()) + .filter(Boolean); + const configuredNames = process.env.DEBUG_UI_APP_NAMES?.split(",") + .map((value) => value.trim()) + .filter(Boolean); + const defaults = contract.apps; + + if (configuredURLs?.length && configuredURLs.length !== defaults.length) { + throw new Error( + `DEBUG_UI_BASE_URLS must provide ${defaults.length} origins in fixture-contract order.`, + ); + } + + if (configuredNames?.length && configuredNames.length !== defaults.length) { + throw new Error( + `DEBUG_UI_APP_NAMES must provide ${defaults.length} names in fixture-contract order.`, + ); + } + + const urls = configuredURLs?.length + ? configuredURLs + : defaults.map((app) => app.baseURL); + + return urls.map((baseURL, index) => ({ + name: + configuredNames?.[index] ?? defaults[index]?.name ?? `app-${index + 1}`, + baseURL: validatedBaseURL(baseURL, index), + })); +} + +export function fixtureTag(state = "dense") { + const tag = contract.states?.[state]?.tag; + + if (typeof tag !== "string" || tag === "") { + throw new Error(`Unknown debug fixture state: ${state}`); + } + + return tag; +} + +export function debugPageURL(app, entry, options = {}) { + const theme = options.theme ?? "light"; + const state = options.state ?? "dense"; + let path; + + if (entry.kind === "history") { + path = "/debug/index"; + } else if (entry.kind === "compare") { + path = "/debug/compare"; + } else if (entry.kind === "phpinfo") { + path = "/debug/php-info"; + } else { + path = "/debug/view"; + } + + const url = new URL(path, `${app.baseURL}/`); + url.searchParams.set("yii_debug_theme", theme); + + if (entry.kind === "history") { + url.searchParams.set("Debug[tag]", contract.historyFilter); + } else if (entry.kind === "compare") { + url.searchParams.set("baseline", fixtureTag("empty")); + url.searchParams.set("target", fixtureTag("dense")); + } else if (entry.kind === "panel") { + url.searchParams.set("tag", fixtureTag(state)); + url.searchParams.set("panel", entry.id); + } + + if (options.pageSize) { + url.searchParams.set("per-page", options.pageSize); + } + + return url.href; +} + +export function fixtureApplicationPaths() { + return contract.apps.map((app) => resolve(repositoryRoot, app.path)); +} + +export function fixtureSnapshotPath(appIndex, state = "dense") { + const applicationPath = fixtureApplicationPaths()[appIndex]; + + if (!applicationPath) { + throw new Error(`Fixture application index is unavailable: ${appIndex}`); + } + + return resolve( + applicationPath, + "runtime", + "debug", + `${fixtureTag(state)}.json`, + ); +} diff --git a/e2e/visual.spec.js b/e2e/visual.spec.js new file mode 100644 index 0000000..871b8a3 --- /dev/null +++ b/e2e/visual.spec.js @@ -0,0 +1,141 @@ +import { mkdir } from "node:fs/promises"; +import { resolve } from "node:path"; + +import { expect, test } from "@playwright/test"; + +import { + collectRuntimeDiagnostics, + expandToolbar, + expectDebuggerLayout, + expectNoRuntimeDiagnostics, + freezeVisualMotion, + openDebugPage, + waitForStableUI, + waitForToolbar, +} from "./support/debug-ui.js"; +import { + debugApps, + panelEntries, + repositoryRoot, + visualEntries, +} from "./support/environment.js"; + +const compareWithBaselines = process.env.DEBUG_UI_VISUAL_COMPARE === "1"; + +function screenshotOptions() { + return { + animations: "disabled", + caret: "hide", + fullPage: true, + scale: "css", + }; +} + +async function capture(page, testInfo, parts, overrides = {}) { + const name = `${parts.join("-")}.png`; + const directory = resolve( + repositoryRoot, + "artifacts", + "ui", + testInfo.project.name, + ); + const file = resolve(directory, name); + + await mkdir(directory, { recursive: true }); + const options = { ...screenshotOptions(), ...overrides }; + + await page.screenshot({ path: file, ...options }); + await testInfo.attach(name, { path: file, contentType: "image/png" }); + + if (compareWithBaselines) { + await expect(page).toHaveScreenshot(name, options); + } +} + +for (const app of debugApps()) { + for (const theme of ["light", "dark"]) { + test.describe(`${app.name} ${theme} visual atlas`, () => { + for (const entry of visualEntries) { + test(`${entry.id} is stable`, async ({ page }, testInfo) => { + const diagnostics = collectRuntimeDiagnostics(page); + + await openDebugPage(page, app, entry, { + state: "dense", + theme, + }); + await freezeVisualMotion(page); + await waitForStableUI(page); + await expectDebuggerLayout(page, entry, theme); + await capture(page, testInfo, [app.name, theme, entry.id]); + await expectNoRuntimeDiagnostics( + diagnostics, + `${app.name} ${theme} ${entry.id}`, + ); + }); + } + + test("toolbar drawer is stable", async ({ page }, testInfo) => { + const diagnostics = collectRuntimeDiagnostics(page); + + await page.addInitScript((selectedTheme) => { + localStorage.setItem("theme", selectedTheme); + localStorage.setItem("yii-debug-toolbar-theme", selectedTheme); + }, theme); + + const response = await page.goto(app.baseURL, { + waitUntil: "domcontentloaded", + }); + + expect(response?.ok(), `${app.baseURL} must load successfully`).toBe( + true, + ); + + const toolbar = await waitForToolbar(page); + await expandToolbar(toolbar); + await toolbar.locator("[data-debug-url]").first().click(); + const frame = toolbar.locator("iframe[title='Yii debug panel']"); + + await expect(frame).toBeVisible(); + await expect( + frame.contentFrame().locator(".yii-debug-page").first(), + ).toBeVisible(); + await freezeVisualMotion(page); + await waitForStableUI(page); + await capture(page, testInfo, [app.name, theme, "toolbar-drawer"], { + fullPage: false, + }); + await expectNoRuntimeDiagnostics( + diagnostics, + `${app.name} ${theme} toolbar drawer`, + ); + }); + }); + } + + test(`${app.name} captures the empty-state panel atlas at desktop width`, async ({ + page, + }, testInfo) => { + test.skip( + testInfo.project.name !== "desktop-1440", + "The dense atlas already covers every viewport; empty states use the review viewport.", + ); + + const diagnostics = collectRuntimeDiagnostics(page); + + for (const entry of panelEntries) { + await test.step(entry.label, async () => { + await openDebugPage(page, app, entry, { + state: "empty", + theme: "light", + }); + await freezeVisualMotion(page); + await waitForStableUI(page); + await capture(page, testInfo, [app.name, "light", "empty", entry.id]); + await expectNoRuntimeDiagnostics( + diagnostics.splice(0), + `${app.name} light empty ${entry.id}`, + ); + }); + } + }); +} diff --git a/package-lock.json b/package-lock.json index c23c5f7..3bef8e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,12 @@ "packages": { "": { "name": "@php-forge/debug-core-assets", + "license": "BSD-3-Clause", "devDependencies": { + "@axe-core/playwright": "^4.13.0", "@fontsource/ibm-plex-sans": "^5.3.0", "@fontsource/jetbrains-mono": "^5.3.0", + "@playwright/test": "^1.62.1", "@stryker-mutator/core": "^10.0.0", "eslint": "^10.8.0", "prettier": "^3.9.6", @@ -19,19 +22,31 @@ "node": ">=22.12.0" } }, + "node_modules/@axe-core/playwright": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.13.0.tgz", + "integrity": "sha512-6YLx+kxXu5GJceG4ozFg+33a2EMTdjYwWGloJ3sb9Kta5pp+ZNS53uxGVog5JetIY8s++P5UrtX+cri+u0VAVg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "axe-core": "~4.13.0" + }, + "peerDependencies": { + "playwright-core": ">= 1.0.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", + "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "@babel/helper-validator-identifier": "^8.0.0", + "js-tokens": "^10.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/compat-data": { @@ -76,37 +91,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", - "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^8.0.0", - "js-tokens": "^10.0.0" - }, - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", - "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/core/node_modules/js-tokens": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", - "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/generator": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", @@ -233,16 +217,6 @@ "@babel/core": "^8.0.0" } }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", - "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, "node_modules/@babel/helper-optimise-call-expression": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-8.0.0.tgz", @@ -312,13 +286,13 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", + "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@babel/helper-validator-option": { @@ -621,37 +595,6 @@ "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", - "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^8.0.0", - "js-tokens": "^10.0.0" - }, - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", - "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/template/node_modules/js-tokens": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", - "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/traverse": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.4.tgz", @@ -671,37 +614,6 @@ "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", - "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^8.0.0", - "js-tokens": "^10.0.0" - }, - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", - "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, - "node_modules/@babel/traverse/node_modules/js-tokens": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", - "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/types": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.4.tgz", @@ -716,16 +628,6 @@ "node": "^22.18.0 || >=24.11.0" } }, - "node_modules/@babel/types/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", - "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.11.0" - } - }, "node_modules/@cacheable/memory": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz", @@ -1153,15 +1055,15 @@ } }, "node_modules/@inquirer/checkbox": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.1.tgz", - "integrity": "sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.2.tgz", + "integrity": "sha512-Y5/bAScMy5Y+9isCx0SKbyJebMCaXXX5em0kxkj115eZNscgV9srOHrgyfS0e5xAVymIfOh9piYBKDILktsMMg==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.7", - "@inquirer/core": "^11.2.1", - "@inquirer/figures": "^2.0.7", + "@inquirer/core": "^12.0.0", + "@inquirer/figures": "^2.0.8", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1177,13 +1079,13 @@ } }, "node_modules/@inquirer/confirm": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz", - "integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.2.0.tgz", + "integrity": "sha512-SKXarWrYhtpqOEctf9XGCGy29QjsvJAM0Aq9ZR9z4Ns94OmpqudOly+aSEfNqUf9SwsQaUgY9+Z8hyzG0xX8fw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.2.1", + "@inquirer/core": "^12.0.0", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1199,14 +1101,14 @@ } }, "node_modules/@inquirer/core": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", - "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.7", - "@inquirer/figures": "^2.0.7", + "@inquirer/figures": "^2.0.8", "@inquirer/type": "^4.0.7", "cli-width": "^4.1.0", "fast-wrap-ansi": "^0.2.0", @@ -1226,14 +1128,14 @@ } }, "node_modules/@inquirer/editor": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.2.2.tgz", - "integrity": "sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.3.0.tgz", + "integrity": "sha512-nnsP/IdJ8s83q7ZuObmgn12QM+uLCkab9E0Oordojbn62WUg1c+v9Ou/F/057pgh0ppX0W+Hj5bO/Dp5hsxQtA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.2.1", - "@inquirer/external-editor": "^3.0.3", + "@inquirer/core": "^12.0.0", + "@inquirer/external-editor": "^3.0.4", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1249,13 +1151,13 @@ } }, "node_modules/@inquirer/expand": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.1.tgz", - "integrity": "sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.2.tgz", + "integrity": "sha512-OWIH1IyyWqEKIyqC9Xy+Bnga7NkGMovFdo4atYZMUOTRqf6rO2WCv9E/1MyzvOErDBCxs+9UFliRUDc50xs/jw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.2.1", + "@inquirer/core": "^12.0.0", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1271,9 +1173,9 @@ } }, "node_modules/@inquirer/external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.4.tgz", + "integrity": "sha512-tZbbaK2ovq6vlrRBNQvjrypmrED/p5x2ncIHQ79cD55tei3dD96v5glMMA+6tiq7K104i/25DVYKWVPJuV6ptA==", "dev": true, "license": "MIT", "dependencies": { @@ -1293,9 +1195,9 @@ } }, "node_modules/@inquirer/figures": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.7.tgz", - "integrity": "sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.8.tgz", + "integrity": "sha512-tApbon79GM9ry56ja/Ud3SY2CL4TQsao9fIwDQbgTeNY55025GdMzQ2+UdegV/lx51VNGUB59M0v0nMpybYY4Q==", "dev": true, "license": "MIT", "engines": { @@ -1303,13 +1205,13 @@ } }, "node_modules/@inquirer/input": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.2.tgz", - "integrity": "sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.3.tgz", + "integrity": "sha512-F/BZHtyEzP+HO+IGVd4AjBRgvX/ywm42bx8S0+dENk2YclzE9tJ3X/15THwtT6ehApmKvdYDMsVTuyyDod0gOQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.2.1", + "@inquirer/core": "^12.0.0", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1325,13 +1227,13 @@ } }, "node_modules/@inquirer/number": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.1.1.tgz", - "integrity": "sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.2.0.tgz", + "integrity": "sha512-ew+fSDijsQ/WhD4TV3XLb+if400cDuzTzHfGR8sTNBXkK9CYDWoGE8fhaO8GbT312pNv1AJEOsDxy/z/HVettA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.2.1", + "@inquirer/core": "^12.0.0", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1347,14 +1249,14 @@ } }, "node_modules/@inquirer/password": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.1.1.tgz", - "integrity": "sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.1.2.tgz", + "integrity": "sha512-nSdufycW8xynEVssFkNQEYIzTySilog0UlfOVRwh3pXzPSk4frXUT2jZWjHnKae6RU9PaoF9wfy1pGwewQuqGw==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.7", - "@inquirer/core": "^11.2.1", + "@inquirer/core": "^12.0.0", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1370,22 +1272,22 @@ } }, "node_modules/@inquirer/prompts": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz", - "integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.6.0.tgz", + "integrity": "sha512-WgBVDRy3IQ4v9XMCpQ1YDGpso2PcMUxYJzZdH4Nt4t0eoXhEPmOCh5iZbXbR4GTbdUB9VPWBbJB12rkjbaGDCw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^5.2.1", - "@inquirer/confirm": "^6.1.1", - "@inquirer/editor": "^5.2.2", - "@inquirer/expand": "^5.1.1", - "@inquirer/input": "^5.1.2", - "@inquirer/number": "^4.1.1", - "@inquirer/password": "^5.1.1", - "@inquirer/rawlist": "^5.3.1", - "@inquirer/search": "^4.2.1", - "@inquirer/select": "^5.2.1" + "@inquirer/checkbox": "^5.2.2", + "@inquirer/confirm": "^6.2.0", + "@inquirer/editor": "^5.3.0", + "@inquirer/expand": "^5.1.2", + "@inquirer/input": "^5.1.3", + "@inquirer/number": "^4.2.0", + "@inquirer/password": "^5.1.2", + "@inquirer/rawlist": "^5.3.2", + "@inquirer/search": "^4.3.0", + "@inquirer/select": "^5.2.2" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" @@ -1400,13 +1302,13 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.1.tgz", - "integrity": "sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.2.tgz", + "integrity": "sha512-oPSKrYK1X1bMkjXDzIKHUkJp195LFSfgbnVtXnjSKGFjrCbS6I+wyvfAZTwKE9BSt3HwWgfD7JfsXALBgCogzQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.2.1", + "@inquirer/core": "^12.0.0", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1422,14 +1324,14 @@ } }, "node_modules/@inquirer/search": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.2.1.tgz", - "integrity": "sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.3.0.tgz", + "integrity": "sha512-HFxXE5w727ctSUcAwrDquftJGjMgu36OeV5SHEXMlr2j/ahzmRX9xSEeVolV8tzYnTf45cg6vGkdMMRdm3RPhQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^11.2.1", - "@inquirer/figures": "^2.0.7", + "@inquirer/core": "^12.0.0", + "@inquirer/figures": "^2.0.8", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1445,15 +1347,15 @@ } }, "node_modules/@inquirer/select": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.1.tgz", - "integrity": "sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.2.tgz", + "integrity": "sha512-RkI8dRHWt+bh04oLixvF1kFzKC7e5rqJoHKkzcqSHATebBXFC6GmrT8ddbVkgSzLV0HnHs2cPFuBINr8otij8Q==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.7", - "@inquirer/core": "^11.2.1", - "@inquirer/figures": "^2.0.7", + "@inquirer/core": "^12.0.0", + "@inquirer/figures": "^2.0.8", "@inquirer/type": "^4.0.7" }, "engines": { @@ -1571,19 +1473,52 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.144.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.144.0.tgz", - "integrity": "sha512-nuhZIOLuI6TFQ32I/WnUx+SCPY7SdSKwgnFHydAuoS1+Z4BRcaP+RRJmGzl9lw+0OFF7UmaESf7KQRXaNLHypg==", + "version": "0.146.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.146.0.tgz", + "integrity": "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@playwright/test": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.62.1.tgz", + "integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.5.tgz", + "integrity": "sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.4.tgz", - "integrity": "sha512-jHC2cnyKz5xU2fhECtFl8OZ83cYNt13GZQD+0uMJ/X3o+ijmd56okHhTUwxVSHPx1IRVIJEZ1/1pPzeLCU6XKA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.5.tgz", + "integrity": "sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==", "cpu": [ "arm64" ], @@ -1598,9 +1533,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-Dc5mPD8F5F/FS8i01syd7FTF6yB2fVthH/TRkjwJkzUK6EpoxHtqvZQP5Zwq80/5z19TWYHIg1KOHboCgVx/aQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.5.tgz", + "integrity": "sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==", "cpu": [ "arm64" ], @@ -1615,9 +1550,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.4.tgz", - "integrity": "sha512-fpDm4oBo6SqLvWUYCmFhdde3U9KH2fRNNMeAnAPAIwxRL345xutL0EtEUcuoxsoazdJGv/MuDBQHlCDrtbvqOg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.5.tgz", + "integrity": "sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==", "cpu": [ "x64" ], @@ -1632,9 +1567,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.4.tgz", - "integrity": "sha512-rSJoreDE/HoIzoaib6MTp5jQtCTdMHKIvItAKT/ImS6Y6Ww76oUaeMyp4Vc/fAgd/ehji068IxetHXAnqUwN9A==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.5.tgz", + "integrity": "sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==", "cpu": [ "x64" ], @@ -1649,9 +1584,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.4.tgz", - "integrity": "sha512-/jm8OGHgn7oGaJu3i/qZI9spUGcJ+y/lk43ttQ/iO1tOd9NissG6o97bighBCiL+BKRngmcDuR6ikfwYdJmVuQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.5.tgz", + "integrity": "sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==", "cpu": [ "arm" ], @@ -1666,9 +1601,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.4.tgz", - "integrity": "sha512-tIP06BeD9EqvECBrPZ+sqdPlYrT+aYaAiu1wYziVx5elRK/ftm33JxVDy2bXGbr6J0CrtirCkR87/X5a2euEng==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.5.tgz", + "integrity": "sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==", "cpu": [ "arm64" ], @@ -1686,9 +1621,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.4.tgz", - "integrity": "sha512-Ql1Q0EQqVThvn9VAVlwNzsUvbSFtCMGjLpRRi4pk5i7NZZ4n5ISiLMjHYtus4VQ2PvkSw24zyaCVsiS+sXPj1w==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.5.tgz", + "integrity": "sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==", "cpu": [ "arm64" ], @@ -1706,9 +1641,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.4.tgz", - "integrity": "sha512-GjbjXD4XXfN19D0LZNbmiCBUoDiRACsYHr0yaIbbn8aFsXjHZifcYqu/W5Er5X2X990WjHXFrxarn5chzItorQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.5.tgz", + "integrity": "sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==", "cpu": [ "ppc64" ], @@ -1726,9 +1661,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.4.tgz", - "integrity": "sha512-p5WR0NOwaRmJ/B1b6IjEFLLivwEsf3PrdBIhRbhTCQisbo2SvHHpG4ELB/+FgQNnB88LTOF86upmJmbvZdQ2lw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.5.tgz", + "integrity": "sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==", "cpu": [ "s390x" ], @@ -1746,9 +1681,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.4.tgz", - "integrity": "sha512-4/GyVjmhR+Tc6HLJvwc1sOhPqAZtySiSMesOZyX6JQ5XBxoTDEMKQzvo07NIK6nTon/SivlZqvhzvuVBNQhObQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.5.tgz", + "integrity": "sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==", "cpu": [ "x64" ], @@ -1766,9 +1701,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.4.tgz", - "integrity": "sha512-l9eeLsCNvPpmSXUej0etw/J1eqV0Jj1D5G/xG6YTijmE6dkv6E2QezgWbTfQk63v952DPqrjOCoiqxq7Bw0YUQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.5.tgz", + "integrity": "sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==", "cpu": [ "x64" ], @@ -1786,9 +1721,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.4.tgz", - "integrity": "sha512-e0F355MSTMm3+UOqtV3L24gFUp2N5m1f8L/7d56deik6va+AXdrt9F8LbzGpeWGWRbZEDq4m8NVnJDeBtf9DZg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.5.tgz", + "integrity": "sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==", "cpu": [ "arm64" ], @@ -1803,9 +1738,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.4.tgz", - "integrity": "sha512-AWLi0uBRYh6QlE7OKhiz+phZC0qwtij2QZmhmOdsLdFn64m7oMpooE9ICE3lhm9xMb4SpDo2WbHcxX1iFLFtqw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.5.tgz", + "integrity": "sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==", "cpu": [ "arm64" ], @@ -1820,9 +1755,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.4.tgz", - "integrity": "sha512-UwSDJOg3dqCAejWdxclJjCsh3Qq4vLYMDxmyHqo1btz3stK2VqgwNd3mm5tuIwzSlGIQ/1H9Hr+Zn09mrezNqQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.5.tgz", + "integrity": "sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==", "cpu": [ "x64" ], @@ -1920,37 +1855,6 @@ "node": ">=22.0.0" } }, - "node_modules/@stryker-mutator/core/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@stryker-mutator/core/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@stryker-mutator/core/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, "node_modules/@stryker-mutator/instrumenter": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-10.0.0.tgz", @@ -2043,16 +1947,16 @@ } }, "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2115,6 +2019,16 @@ "node": ">=8" } }, + "node_modules/axe-core": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.13.0.tgz", + "integrity": "sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -2126,9 +2040,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.11.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.14.tgz", - "integrity": "sha512-JyJ954WzuIR8/FFzX0o5krdSTrBAkcCSRfWSleRsIHSWV+cZe2FI1PKggVkFke1hBldRs+LRxUczzE9iPmgZww==", + "version": "2.11.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.19.tgz", + "integrity": "sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2264,9 +2178,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", "dev": true, "funding": [ { @@ -2335,9 +2249,9 @@ "license": "MIT" }, "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.10.0.tgz", + "integrity": "sha512-AidJptpBJmjTclAp9BkLwJi0T93fo5epJnbaZslpg6QVzpHjAiveF55mE9AcUJiGMqRHgMDY8soMsQtuNYMHfw==", "dev": true, "license": "MIT" }, @@ -2506,16 +2420,16 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.407", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.407.tgz", - "integrity": "sha512-4R8XgQOdfxexCd/u63lRm6wCHjECwI45MV9wxAs2ggtfWe2hwlo1ql97jKsju2IcJ+jFSTwBssyYoiWhh7mauQ==", + "version": "1.5.413", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.413.tgz", + "integrity": "sha512-F1XPKvt7HVfly5WND90ec16nFsdr4g5x/cVUP3EqjeyXynupabGDqpMa84wwvuYGDnldXLBz6DLXyZXWO9TPvw==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, @@ -2606,9 +2520,9 @@ } }, "node_modules/eslint": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.1.tgz", - "integrity": "sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.9.1.tgz", + "integrity": "sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A==", "dev": true, "license": "MIT", "workspaces": [ @@ -2696,6 +2610,30 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/espree": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", @@ -2856,9 +2794,9 @@ } }, "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz", + "integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==", "dev": true, "funding": [ { @@ -2902,24 +2840,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/figures": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", @@ -3001,9 +2921,9 @@ "license": "ISC" }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3159,9 +3079,9 @@ } }, "node_modules/globby": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.3.tgz", - "integrity": "sha512-VZX7TV7jmd/pn71vdnLKtgwy1IWqc3KjI9x1/UtPkwoKk5fKrNLY30ltDe3cAM5xruIN7YuuaulFt133jRrKZg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.4.tgz", + "integrity": "sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g==", "dev": true, "license": "MIT", "dependencies": { @@ -3169,6 +3089,7 @@ "fast-glob": "^3.3.3", "ignore": "^7.0.5", "is-path-inside": "^4.0.0", + "micromatch": "^4.0.8", "slash": "^5.1.0", "unicorn-magic": "^0.4.0" }, @@ -3189,6 +3110,19 @@ "node": ">= 4" } }, + "node_modules/globby/node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globjoin": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", @@ -3447,9 +3381,9 @@ } }, "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.1.0.tgz", + "integrity": "sha512-bUi/yjmtKYcRVUtWRGr0UA6xEFh2I6zWUwMrUXB3s7bmYCaZ8a+0ZsTRkrawh/mzlSD1Y0Ph8bp/U+TvBpWDNw==", "dev": true, "license": "MIT", "engines": { @@ -3497,9 +3431,9 @@ "license": "MIT" }, "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, "license": "MIT" }, @@ -3561,9 +3495,9 @@ "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, @@ -4013,19 +3947,6 @@ "node": ">=8.6" } }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -4179,19 +4100,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -4301,6 +4209,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-json/node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/parse-json/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/parse-json/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/parse-ms": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", @@ -4342,18 +4282,50 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/postcss": { "version": "8.5.26", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", @@ -4555,14 +4527,13 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -4624,13 +4595,13 @@ } }, "node_modules/rolldown": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.4.tgz", - "integrity": "sha512-rSr7irW0K7QRWzjdJXqZowkcRdDtjRduh43rBltnVKd0VFq839l1lJoDvGJb6gl7+4rTTCrPWu+YfujUL8Ug7w==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.5.tgz", + "integrity": "sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.144.0", + "@oxc-project/types": "=0.146.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -4640,20 +4611,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.2.4", - "@rolldown/binding-darwin-arm64": "1.2.4", - "@rolldown/binding-darwin-x64": "1.2.4", - "@rolldown/binding-freebsd-x64": "1.2.4", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.4", - "@rolldown/binding-linux-arm64-gnu": "1.2.4", - "@rolldown/binding-linux-arm64-musl": "1.2.4", - "@rolldown/binding-linux-ppc64-gnu": "1.2.4", - "@rolldown/binding-linux-s390x-gnu": "1.2.4", - "@rolldown/binding-linux-x64-gnu": "1.2.4", - "@rolldown/binding-linux-x64-musl": "1.2.4", - "@rolldown/binding-openharmony-arm64": "1.2.4", - "@rolldown/binding-win32-arm64-msvc": "1.2.4", - "@rolldown/binding-win32-x64-msvc": "1.2.4" + "@rolldown/binding-android-arm-eabi": "1.2.5", + "@rolldown/binding-android-arm64": "1.2.5", + "@rolldown/binding-darwin-arm64": "1.2.5", + "@rolldown/binding-darwin-x64": "1.2.5", + "@rolldown/binding-freebsd-x64": "1.2.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.5", + "@rolldown/binding-linux-arm64-gnu": "1.2.5", + "@rolldown/binding-linux-arm64-musl": "1.2.5", + "@rolldown/binding-linux-ppc64-gnu": "1.2.5", + "@rolldown/binding-linux-s390x-gnu": "1.2.5", + "@rolldown/binding-linux-x64-gnu": "1.2.5", + "@rolldown/binding-linux-x64-musl": "1.2.5", + "@rolldown/binding-openharmony-arm64": "1.2.5", + "@rolldown/binding-win32-arm64-msvc": "1.2.5", + "@rolldown/binding-win32-x64-msvc": "1.2.5" } }, "node_modules/run-parallel": { @@ -5186,23 +5158,6 @@ "node": ">=10.0.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/table/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -5213,10 +5168,10 @@ "node": ">=8" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, @@ -5265,6 +5220,37 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5329,15 +5315,15 @@ } }, "node_modules/typed-rest-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.3.0.tgz", - "integrity": "sha512-FfBj5tjviexjIus3La4n4s9i+f81Zj7HU+lUlQWK219HMRfmzLsbIf4PZF2+X6EouJKyuANpvvef5VrUWM4AFw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.3.1.tgz", + "integrity": "sha512-k4kX5Up6qA68D0Cby2AK+6+vM5k3qTxe+/3FqhnHRExjY5cfbOnzjQZbP/LXleF8hVoDvDqxlgk9KK83HoBZlQ==", "dev": true, "license": "MIT", "dependencies": { "des.js": "^1.1.0", "js-md4": "^0.3.2", - "qs": "^6.14.1", + "qs": "6.15.1", "tunnel": "0.0.6", "underscore": "^1.13.8" }, @@ -5353,13 +5339,13 @@ "license": "MIT" }, "node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5414,16 +5400,16 @@ "license": "MIT" }, "node_modules/vite": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz", - "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", - "postcss": "^8.5.25", - "rolldown": "~1.2.1", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", "tinyglobby": "^0.2.17" }, "bin": { @@ -5440,7 +5426,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -5491,6 +5477,34 @@ } } }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/weapon-regex": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/weapon-regex/-/weapon-regex-2.0.4.tgz", diff --git a/package.json b/package.json index 80ed9c7..c114319 100644 --- a/package.json +++ b/package.json @@ -6,26 +6,43 @@ "scripts": { "build": "vite build", "dev": "vite build --watch", - "format": "prettier --write 'resources/{src,tests}/**/*.js' 'vite.config.js' 'stryker.config.mjs' 'package.json'", - "format:check": "prettier --check 'resources/{src,tests}/**/*.js' 'vite.config.js' 'stryker.config.mjs' 'package.json'", + "format": "prettier --write 'resources/{src,tests}/**/*.js' 'e2e/**/*.js' 'tools/**/*.{mjs,json}' 'docs/**/*.md' 'playwright.config.js' 'vite.config.js' 'stryker.config.mjs' 'package.json'", + "format:check": "prettier --check 'resources/{src,tests}/**/*.js' 'e2e/**/*.js' 'tools/**/*.{mjs,json}' 'docs/**/*.md' 'playwright.config.js' 'vite.config.js' 'stryker.config.mjs' 'package.json'", "lint:css": "stylelint --config .github/linters/.stylelintrc.json --config-basedir . 'resources/src/**/*.css'", "lint:css:fix": "stylelint --config .github/linters/.stylelintrc.json --config-basedir . --fix 'resources/src/**/*.css'", - "lint:js": "eslint --config .github/linters/eslint.config.mjs resources", - "lint:js:fix": "eslint --config .github/linters/eslint.config.mjs --fix resources", + "lint:js": "eslint --config .github/linters/eslint.config.mjs resources e2e tools playwright.config.js", + "lint:js:fix": "eslint --config .github/linters/eslint.config.mjs --fix resources e2e tools playwright.config.js", "test:js": "node --test resources/tests/*.test.js", - "test:mutation": "stryker run" + "test:mutation": "stryker run", + "fixtures:seed": "php tools/seed-debug-fixtures.php", + "check:size": "node tools/check-asset-size.mjs", + "check:contrast": "node tools/check-token-contrast.mjs", + "check:contrast:strict": "node tools/check-token-contrast.mjs --strict", + "test:e2e": "playwright test e2e/smoke.spec.js e2e/security.spec.js", + "test:e2e:list": "DEBUG_UI_SEED_FIXTURES=0 playwright test --list", + "test:a11y": "playwright test e2e/accessibility.spec.js", + "test:security": "playwright test e2e/security.spec.js", + "test:visual": "playwright test e2e/visual.spec.js", + "test:visual:compare": "DEBUG_UI_VISUAL_COMPARE=1 playwright test e2e/visual.spec.js", + "test:visual:update": "DEBUG_UI_VISUAL_COMPARE=1 playwright test e2e/visual.spec.js --update-snapshots", + "test:perf": "DEBUG_UI_SEED_FIXTURES=0 playwright test e2e/large-data.spec.js --project=desktop-1440", + "test:perf:live": "playwright test e2e/live-performance.spec.js --project=desktop-1440", + "test:browser": "playwright test e2e/smoke.spec.js e2e/security.spec.js e2e/accessibility.spec.js e2e/visual.spec.js" }, "engines": { "node": ">=22.12.0" }, "devDependencies": { + "@axe-core/playwright": "^4.13.0", "@fontsource/ibm-plex-sans": "^5.3.0", "@fontsource/jetbrains-mono": "^5.3.0", + "@playwright/test": "^1.62.1", "@stryker-mutator/core": "^10.0.0", "eslint": "^10.8.0", "prettier": "^3.9.6", "stylelint": "^17.14.1", "stylelint-config-standard-scss": "^17.0.0", "vite": "^8.2.1" - } + }, + "license": "BSD-3-Clause" } diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000..1b623db --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,77 @@ +import { defineConfig } from "@playwright/test"; + +import { + fixtureApplicationPaths, + fixtureContract, +} from "./e2e/support/environment.js"; + +const startServers = process.env.DEBUG_UI_START_SERVERS === "1"; +const executablePath = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE; +const applicationPaths = fixtureApplicationPaths(); +const webServer = startServers + ? fixtureContract.apps.map((app, index) => { + const url = new URL(app.baseURL); + + return { + command: `php -S ${url.hostname}:${url.port} -t public public/router.php`, + cwd: applicationPaths[index], + url: app.baseURL, + reuseExistingServer: true, + timeout: 30_000, + stdout: "pipe", + stderr: "pipe", + }; + }) + : undefined; + +export default defineConfig({ + testDir: "./e2e", + testMatch: /.*\.spec\.js/, + globalSetup: "./e2e/global-setup.js", + outputDir: "./artifacts/playwright/results", + snapshotPathTemplate: "{testDir}/snapshots/{projectName}/{arg}{ext}", + fullyParallel: false, + forbidOnly: Boolean(process.env.CI), + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 2 : 4, + timeout: 45_000, + expect: { + timeout: 7_500, + toHaveScreenshot: { + animations: "disabled", + caret: "hide", + maxDiffPixelRatio: 0.003, + scale: "css", + }, + }, + reporter: [ + ["list"], + ["html", { outputFolder: "artifacts/playwright/report", open: "never" }], + ], + use: { + browserName: "chromium", + colorScheme: "light", + locale: "en-US", + timezoneId: "UTC", + reducedMotion: "reduce", + trace: "retain-on-failure", + screenshot: "only-on-failure", + video: executablePath ? "off" : "retain-on-failure", + launchOptions: executablePath ? { executablePath } : {}, + }, + projects: [ + { + name: "desktop-1440", + use: { viewport: { width: 1440, height: 900 } }, + }, + { + name: "tablet-1024", + use: { viewport: { width: 1024, height: 768 } }, + }, + { + name: "mobile-390", + use: { viewport: { width: 390, height: 844 }, isMobile: true }, + }, + ], + webServer, +}); diff --git a/resources/assets/dist/css/debug.min.css b/resources/assets/dist/css/debug.min.css index 332bc43..58f48c2 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-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,#0e8a5f)var(--lightningcss-dark,#7fe4b8);--yii-debug-panel-primary:var(--lightningcss-light,#0e7a55)var(--lightningcss-dark,#2fd08c);--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,#128a50)var(--lightningcss-dark,#34c97e);--yii-debug-warning:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#e8a33d);--yii-debug-danger:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-info:var(--lightningcss-light,#2467a8)var(--lightningcss-dark,#5fa8e8);--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-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-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-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;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:767px){.yii-debug .yii-debug-layout{grid-template-columns:1fr}}@media (min-width:768px){.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}.yii-debug .yii-debug-main>*+:is(h2,.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{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-side-section-link{color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-sm);text-decoration:none}.yii-debug .yii-debug-side-section-link:hover,.yii-debug .yii-debug-side-section-link:focus{color:var(--yii-debug-panel-link-hover);text-decoration:underline}.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);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-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-overview-label,.yii-debug .yii-debug-request-overview-status-label,.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-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{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-overview-status{text-align:right;min-width:72px}.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-request-overview-metrics{border-block:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);grid-template-columns:repeat(3,minmax(0,1fr));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{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-request-overview-meta{align-items:center;gap:var(--yii-debug-space-2) var(--yii-debug-space-4);padding:10px 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-meta-item{align-items:baseline;gap:6px;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;font-size:.625rem;font-weight:700}.yii-debug .yii-debug-request-overview-tag{max-width:34ch;color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.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-status-label{margin:0}.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{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-grid-2{gap:var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));display:grid}.yii-debug .yii-debug-card{padding:var(--yii-debug-space-4);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-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:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));color:#fff}:is(.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-nav-link[aria-current=page]):after{color:#ffffffd9}.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:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));color:#fff;border-color:#0000}.yii-debug .yii-debug-btn-primary:hover,.yii-debug .yii-debug-btn-primary:focus{background:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary-strong));color:#fff}.yii-debug .yii-debug-btn-ghost{border-color:var(--yii-debug-panel-border);background:0 0}.yii-debug .yii-debug-btn-subtle{background:var(--yii-debug-panel-surface-muted);border-color:#0000}.yii-debug .yii-debug-btn-sm{min-height:28px;font-size:var(--yii-debug-fs-xs);padding:4px 10px}.yii-debug .yii-debug-btn-group{gap:var(--yii-debug-space-1);flex-wrap:wrap;display:inline-flex}.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:#fff}.yii-debug .yii-debug-badge-info{background:var(--yii-debug-info);color:var(--yii-debug-panel-bg)}.yii-debug .yii-debug-badge-warning{background:var(--yii-debug-warning);color:#1c1917}.yii-debug .yii-debug-badge-danger{background:var(--yii-debug-danger);color:#fff}.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-level-chip,.yii-debug .yii-debug-db-type,.yii-debug .yii-debug-mail-status,.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-router-callout{flex-direction:column}.yii-debug .yii-debug-router-callout-message{margin:0}.yii-debug .yii-debug-router-summary{gap:4px var(--yii-debug-space-3);margin:0 0 var(--yii-debug-space-3);font-size:var(--yii-debug-fs-sm);grid-template-columns:max-content minmax(0,1fr);display:grid}.yii-debug .yii-debug-router-summary dt{color:var(--yii-debug-panel-muted);letter-spacing:.04em;text-transform:uppercase;font-weight:600;font-size:var(--yii-debug-fs-xs);align-self:center}.yii-debug .yii-debug-router-summary dd{overflow-wrap:anywhere;min-width:0;margin:0}.yii-debug .yii-debug-router-summary code{border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);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;padding:1px 8px;display:inline}.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{border-top:1px solid var(--yii-debug-panel-border);vertical-align:top;overflow-wrap:anywhere;padding:10px 12px}.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{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-hover)}.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: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,.yii-debug .yii-debug-sort-asc:after,.yii-debug .yii-debug-sort-desc:after{content:"↑";opacity:.78;margin-left:4px;font-size:.85em}.yii-debug a.desc:after,.yii-debug .yii-debug-sort-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{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);min-width:32px;height:32px;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}.yii-debug .yii-debug-pager-link:hover,.yii-debug .yii-debug-pager-link: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:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));color:#fff;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-field-grid{gap:var(--yii-debug-space-3) var(--yii-debug-space-4);margin-bottom:var(--yii-debug-space-3);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.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,.yii-debug .yii-debug-textarea{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,.yii-debug .yii-debug-textarea):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,.yii-debug .yii-debug-textarea):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,.yii-debug .yii-debug-textarea)::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-textarea{resize:vertical;min-height:96px;line-height:1.45}.yii-debug .yii-debug-grid .filters td,.yii-debug .yii-debug-grid td.yii-debug-filter-cell{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,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell select,.yii-debug .yii-debug-grid td.yii-debug-filter-cell 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,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell select,.yii-debug .yii-debug-grid td.yii-debug-filter-cell 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-collapsible{margin-top:var(--yii-debug-space-3);display:none}.yii-debug .yii-debug-collapsible.is-open{display:block}.yii-debug .yii-debug-dropdown{display:inline-block;position:relative}.yii-debug .yii-debug-dropdown-menu{z-index:100;border:var(--yii-debug-border-strong);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);min-width:220px;box-shadow:var(--yii-debug-shadow-md);margin:0;padding:4px;list-style:none;display:none;position:absolute;top:calc(100% + 4px);left:0}.yii-debug .yii-debug-dropdown.is-open .yii-debug-dropdown-menu{display:block}.yii-debug .yii-debug-dropdown-item{border-radius:var(--yii-debug-radius-sm);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);padding:6px 10px;text-decoration:none;display:block}.yii-debug .yii-debug-dropdown-item:hover,.yii-debug .yii-debug-dropdown-item:focus{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover);text-decoration:none}.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-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,.yii-debug .yii-debug-table-userswitch td.yii-debug-filter-cell 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-timeline-duration{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:.04em}.yii-debug .yii-debug-user{gap:var(--yii-debug-space-3);flex-direction:column;display:flex}.yii-debug .yii-debug-user-card{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4) var(--yii-debug-space-5);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:radial-gradient(circle at top right, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%), transparent 60%), var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);grid-template-columns:auto 1fr;align-items:center;display:grid;position:relative;overflow:hidden}.yii-debug .yii-debug-user-avatar{background:linear-gradient(135deg, var(--yii-debug-panel-primary), var(--yii-debug-info));width:64px;height:64px;box-shadow:0 4px 12px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%), inset 0 1px 0 #ffffff38;color:#fff;font-family:var(--yii-debug-font-mono);letter-spacing:-.02em;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:28px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-user-meta{flex-direction:column;gap:4px;min-width:0;display:flex}.yii-debug .yii-debug-user-name{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xl);letter-spacing:-.01em;margin:0;font-weight:700;line-height:1.2}.yii-debug .yii-debug-user-handle{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);margin:0}.yii-debug .yii-debug-user-tags{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.yii-debug .yii-debug-user-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;gap:6px;padding:4px 12px 4px 8px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-user-status:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px}.yii-debug .yii-debug-user-status-success{background:color-mix(in srgb, var(--yii-debug-success), transparent 84%);color:var(--yii-debug-success)}.yii-debug .yii-debug-user-status-success:before{box-shadow:0 0 0 0 color-mix(in srgb, var(--yii-debug-success), transparent 30%);animation:2.4s ease-in-out infinite yii-debug-user-pulse}.yii-debug .yii-debug-user-status-danger{background:color-mix(in srgb, var(--yii-debug-danger), transparent 84%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-user-status-warning{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-user-status-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-user-pill{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;align-items:center;padding:4px 10px;display:inline-flex}.yii-debug .yii-debug-user-section{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);overflow:hidden}.yii-debug .yii-debug-user-section>header{padding:10px var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);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:.06em;text-transform:uppercase;align-items:center;gap:10px;font-weight:700;display:flex}.yii-debug .yii-debug-user-section dl{margin:0;padding:0}.yii-debug .yii-debug-user-section-icon{width:18px;height:18px;color:var(--yii-debug-panel-primary);justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-user-section-icon svg{width:100%;height:100%}.yii-debug .yii-debug-user-row{gap:var(--yii-debug-space-3);padding:12px var(--yii-debug-space-3);border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);grid-template-columns:minmax(140px,22%) 1fr;display:grid}.yii-debug .yii-debug-user-row:last-child{border-bottom:0}.yii-debug .yii-debug-user-row dt{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;align-self:center}.yii-debug .yii-debug-user-row dd{min-width:0;margin:0}.yii-debug .yii-debug-user-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);word-break:break-all}.yii-debug .yii-debug-user-empty{color:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 35%);font-family:var(--yii-debug-font-mono)}.yii-debug .yii-debug-user-time{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);align-items:baseline;gap:10px;display:inline-flex}.yii-debug .yii-debug-user-time .yii-debug-user-time-rel{color:var(--yii-debug-panel-text);font-weight:600}.yii-debug .yii-debug-user-time .yii-debug-user-time-abs{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-user-reveal{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 80%, transparent);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font:inherit;cursor:pointer;text-align:left;align-items:center;gap:12px;padding:6px 6px 6px 14px;transition:border-color .14s,background .14s;display:inline-flex}.yii-debug .yii-debug-user-reveal:hover,.yii-debug .yii-debug-user-reveal:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-user-reveal .yii-debug-user-mask,.yii-debug .yii-debug-user-reveal .yii-debug-user-real{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm)}.yii-debug .yii-debug-user-reveal .yii-debug-user-mask{letter-spacing:.1em;color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-user-reveal .yii-debug-user-real{overflow-wrap:anywhere;max-width:60ch;color:var(--yii-debug-panel-text);display:none}.yii-debug .yii-debug-user-reveal .yii-debug-user-reveal-cta{border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%);color:var(--yii-debug-panel-primary);font-size:var(--yii-debug-fs-xs);letter-spacing:.08em;text-transform:uppercase;flex:none;padding:3px 10px;font-weight:700}.yii-debug .yii-debug-user-reveal .yii-debug-user-reveal-cta:before{content:"Reveal"}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-mask{display:none}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-real{display:inline}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-reveal-cta{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-reveal-cta:before{content:"Hide"}.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 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-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-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-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-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-summary-action{color:var(--yii-debug-panel-primary-strong);letter-spacing:0;text-transform:none;margin-left:auto;font-weight:700;text-decoration:none}.yii-debug .yii-debug-grid-summary-action:hover,.yii-debug .yii-debug-grid-summary-action:focus-visible{color:var(--yii-debug-panel-link-hover);text-decoration:underline}.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 tbody td:nth-child(2){white-space:nowrap}.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{margin-top:var(--yii-debug-space-2)}.yii-debug .yii-debug-db-explain-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{background:var(--yii-debug-panel-bg-accent);border-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-db-explain-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{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-mail-list{gap:var(--yii-debug-space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-mail-list-item{margin:0;padding:0;list-style:none;display:block}.yii-debug .yii-debug-mail-pager{margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-mail-card{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4) var(--yii-debug-space-4) var(--yii-debug-space-3);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);grid-template-columns:1fr;transition:transform .16s,border-color .16s,box-shadow .16s;display:grid;position:relative}.yii-debug .yii-debug-mail-card: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-mail-card-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:flex-start;display:grid}.yii-debug .yii-debug-mail-avatar{--mail-hue:210;background:linear-gradient(135deg, hsl(var(--mail-hue) 72% 52%), hsl(calc(var(--mail-hue) + 28) 65% 40%));width:44px;height:44px;box-shadow:0 2px 10px hsl(var(--mail-hue) 60% 40% / 32%), inset 0 1px 0 #ffffff38;color:#fff;font-family:var(--yii-debug-font-mono);letter-spacing:-.01em;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:16px;font-weight:800;display:inline-flex}.yii-debug .yii-debug-mail-headline{flex-direction:column;gap:4px;min-width:0;display:flex}.yii-debug .yii-debug-mail-from{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.yii-debug .yii-debug-mail-subject{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-lg);letter-spacing:-.01em;margin:0;font-weight:700;line-height:1.25}.yii-debug .yii-debug-mail-preview{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;margin:2px 0 0;line-height:1.4;display:-webkit-box;overflow:hidden}.yii-debug .yii-debug-mail-meta{flex-direction:column;flex:none;align-items:flex-end;gap:6px;display:flex}.yii-debug .yii-debug-mail-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;gap:6px;padding:3px 10px 3px 8px;font-weight:600;line-height:1;display:inline-flex}.yii-debug .yii-debug-mail-status-dot{background:var(--yii-debug-hue,var(--yii-debug-panel-muted));width:7px;height:7px;box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 80%);border-radius:50%;flex:none}.yii-debug .yii-debug-mail-status-ok{--yii-debug-hue:var(--yii-debug-success)}.yii-debug .yii-debug-mail-status-fail{--yii-debug-hue:var(--yii-debug-danger)}.yii-debug .yii-debug-mail-time{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;cursor:help}.yii-debug .yii-debug-mail-download{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);width:30px;height:30px;color:var(--yii-debug-panel-link);justify-content:center;align-items:center;text-decoration:none;transition:background-color .14s,border-color .14s,color .14s,transform .14s;display:inline-flex}.yii-debug .yii-debug-mail-download svg{width:16px;height:16px}.yii-debug .yii-debug-mail-download:hover,.yii-debug .yii-debug-mail-download:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%);color:var(--yii-debug-panel-primary-strong);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-mail-recipients{padding:var(--yii-debug-space-3);border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%);flex-direction:column;gap:8px;display:flex}.yii-debug .yii-debug-mail-recipient-group{gap:var(--yii-debug-space-3);grid-template-columns:64px 1fr;align-items:center;display:grid}.yii-debug .yii-debug-mail-recipient-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.14em;text-align:right;font-weight:700}.yii-debug .yii-debug-mail-recipient-label[data-role=reply]{color:var(--yii-debug-info)}.yii-debug .yii-debug-mail-recipient-label[data-role=bcc]{color:var(--yii-debug-warning)}.yii-debug .yii-debug-mail-recipient-pills{flex-wrap:wrap;gap:6px;min-width:0;display:flex}.yii-debug .yii-debug-mail-recipient-pill{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);max-width:100%;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);text-overflow:ellipsis;white-space:nowrap;align-items:center;padding:3px 10px;line-height:1.4;display:inline-flex;overflow:hidden}.yii-debug .yii-debug-mail-body{padding:var(--yii-debug-space-4);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);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.55}.yii-debug .yii-debug-mail-body-empty{color:var(--yii-debug-panel-muted);text-align:center;font-style:italic}.yii-debug .yii-debug-mail-tech{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 30%);overflow:hidden}.yii-debug .yii-debug-mail-tech>summary{padding:10px 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);letter-spacing:.06em;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;list-style:none;display:flex}.yii-debug .yii-debug-mail-tech>summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-mail-tech>summary:hover{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-mail-tech[open]>summary{border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-mail-tech[open] .yii-debug-mail-tech-chevron{transform:rotate(180deg)}.yii-debug .yii-debug-mail-tech-icon{width:14px;height:14px;color:var(--yii-debug-panel-primary);justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-mail-tech-icon svg{width:100%;height:100%}.yii-debug .yii-debug-mail-tech-label{text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-mail-tech-charset{border:1px solid var(--yii-debug-panel-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);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:none;margin-left:4px;padding:2px 8px;font-weight:600}.yii-debug .yii-debug-mail-tech-chevron{width:14px;height:14px;color:var(--yii-debug-panel-muted);justify-content:center;align-items:center;margin-left:auto;transition:transform .2s;display:inline-flex}.yii-debug .yii-debug-mail-tech-chevron svg{width:100%;height:100%}.yii-debug .yii-debug-mail-headers{padding:var(--yii-debug-space-3) var(--yii-debug-space-4);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-xs);white-space:pre-wrap;overflow-wrap:break-word;margin:0;line-height:1.5;overflow-x:auto}@media (max-width:640px){.yii-debug .yii-debug-mail-card-head{grid-template-columns:auto 1fr}.yii-debug .yii-debug-mail-meta{flex-direction:row;grid-column:1/-1;justify-content:flex-start;align-items:center}.yii-debug .yii-debug-mail-recipient-group{grid-template-columns:1fr;gap:4px}.yii-debug .yii-debug-mail-recipient-label{text-align:left}}.yii-debug .yii-debug-queue-grid-job{flex-direction:column;gap:2px;line-height:1.2;display:flex}.yii-debug .yii-debug-queue-grid-job-link{color:var(--yii-debug-text-strong);white-space:nowrap;font-weight:600;text-decoration:none}.yii-debug .yii-debug-queue-grid-job-link:hover{text-decoration:underline}.yii-debug .yii-debug-queue-grid-job-namespace{color:var(--yii-debug-text-muted);font-family:var(--yii-debug-font-mono);white-space:nowrap;font-size:.78rem}.yii-debug .yii-debug-grid-queue .yii-debug-queue-status,.yii-debug .yii-debug-grid-queue .yii-debug-queue-driver{white-space:nowrap}.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-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 .yii-debug-dump-body span[style*="color: #DD0000"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#DD0000"]{color:#fca5a5!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #0000BB"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#0000BB"]{color:#93c5fd!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #007700"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#007700"]{color:#86efac!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #FF8000"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#FF8000"]{color:#fdba74!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #000000"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#000000"]{color:var(--yii-debug-panel-text)!important}.yii-debug .yii-debug-asset-stats{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-asset-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-asset-stat[data-kind=bundles] .yii-debug-asset-stat-icon{color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-asset-stat[data-kind=css] .yii-debug-asset-stat-icon{color:var(--yii-debug-info)}.yii-debug .yii-debug-asset-stat[data-kind=js] .yii-debug-asset-stat-icon{color:var(--yii-debug-warning)}.yii-debug .yii-debug-asset-stat[data-kind=deps] .yii-debug-asset-stat-icon{color:var(--yii-debug-success)}.yii-debug .yii-debug-asset-stat-icon{flex:none;justify-content:center;align-items:center;width:26px;height:26px;display:inline-flex}.yii-debug .yii-debug-asset-stat-icon svg{width:100%;height:100%}.yii-debug .yii-debug-asset-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-asset-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-asset-list{gap:var(--yii-debug-space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-asset-list-item{margin:0;padding:0;list-style:none;display:block}.yii-debug .yii-debug-asset-card{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-asset-card: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-asset-card: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-asset-card-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:center;display:grid}.yii-debug .yii-debug-asset-card-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-asset-card-icon svg{width:22px;height:22px}.yii-debug .yii-debug-asset-card-title{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-asset-card-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-asset-card-fqcn{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-asset-card-meta{flex-wrap:nowrap;flex:none;justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.yii-debug .yii-debug-asset-chip{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:600;display:inline-flex}.yii-debug .yii-debug-asset-chip strong{color:var(--yii-debug-panel-text);font-weight:800}.yii-debug .yii-debug-asset-chip-css{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-asset-chip-css strong{color:var(--yii-debug-info)}.yii-debug .yii-debug-asset-chip-js{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-asset-chip-js strong{color:var(--yii-debug-warning)}.yii-debug .yii-debug-asset-chip-deps{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-asset-chip-deps strong{color:var(--yii-debug-success)}.yii-debug .yii-debug-asset-card-body{gap:var(--yii-debug-space-4);grid-template-columns:minmax(180px,2fr) minmax(0,3fr);display:grid}.yii-debug .yii-debug-asset-card-body[data-cols="1"]{grid-template-columns:1fr}.yii-debug .yii-debug-asset-section{gap:var(--yii-debug-space-3);flex-direction:column;min-width:0;display:flex}.yii-debug .yii-debug-asset-section-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-asset-files{flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-asset-files+.yii-debug-asset-files{margin-top:4px}.yii-debug .yii-debug-asset-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-asset-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-asset-file-type-css{background:color-mix(in srgb, var(--yii-debug-info), transparent 84%);color:var(--yii-debug-info)}.yii-debug .yii-debug-asset-file-type-js{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-asset-file-name{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.yii-debug .yii-debug-asset-wiring{flex-direction:column;gap:4px;margin:0;display:flex}.yii-debug .yii-debug-asset-wiring-row{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-asset-wiring-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-asset-wiring-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);word-break:break-all;margin:0}.yii-debug .yii-debug-asset-depends{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-asset-depends-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-asset-depends-list{flex-wrap:wrap;gap:6px;display:flex}.yii-debug .yii-debug-asset-depend{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);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-asset-depend:hover,.yii-debug .yii-debug-asset-depend: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)}.yii-debug .yii-debug-asset-depend-icon{opacity:.85;font-size:12px;line-height:1}.yii-debug .yii-debug-asset-depend-name{white-space:nowrap}@media (max-width:720px){.yii-debug .yii-debug-asset-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.yii-debug .yii-debug-asset-card-body{grid-template-columns:1fr}.yii-debug .yii-debug-asset-card-head{grid-template-columns:auto 1fr}.yii-debug .yii-debug-asset-card-meta{grid-column:1/-1;justify-content:flex-start;max-width:100%}}.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,.yii-debug .yii-debug-col-queue-id{white-space:nowrap;min-width:120px}.yii-debug .yii-debug-grid .filters input.yii-debug-col-id-input,.yii-debug .yii-debug-grid .filters input.yii-debug-col-queue-id-input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input.yii-debug-col-id-input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input.yii-debug-col-queue-id-input{box-sizing:border-box;width:104px}.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}@media (max-width:1366px){.yii-debug .yii-debug-grid-history .yii-debug-col-ip,.yii-debug .yii-debug-grid-history .yii-debug-col-mail{display:none}.yii-debug .yii-debug-grid-history .yii-debug-url-cell{max-width:200px}}.yii-debug .yii-debug-grid-event .yii-debug-table{min-width:0}@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 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,.yii-debug .yii-debug-grid-event .yii-debug-table td.yii-debug-filter-cell{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-muted{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-nowrap{white-space:nowrap}.yii-debug .yii-debug-break{word-break:break-all}.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-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-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{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-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-corner{border:1.5px solid color-mix(in srgb, var(--yii-debug-panel-primary), transparent 40%);pointer-events:none;width:9px;height:9px;transition:border-color .15s;position:absolute}.yii-debug .yii-debug-readout-corner[data-corner=tl]{border-bottom:0;border-right:0;top:8px;left:8px}.yii-debug .yii-debug-readout-corner[data-corner=tr]{border-bottom:0;border-left:0;top:8px;right:8px}.yii-debug .yii-debug-readout-corner[data-corner=bl]{border-top:0;border-right:0;bottom:8px;left:8px}.yii-debug .yii-debug-readout-corner[data-corner=br]{border-top:0;border-left:0;bottom:8px;right:8px}.yii-debug .yii-debug-readout-card:hover .yii-debug-readout-corner{border-color:var(--yii-debug-panel-primary)}.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-chip{border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%);color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);letter-spacing:.08em;text-transform:uppercase;align-items:center;padding:2px 7px;font-size:.625rem;font-weight:700;display:inline-flex}.yii-debug .yii-debug-readout-chip-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.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-dl{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);margin:0;padding:0;overflow:hidden}.yii-debug .yii-debug-dl-row{gap:var(--yii-debug-space-4);padding:10px var(--yii-debug-space-4);border-bottom:1px solid var(--yii-debug-panel-border);grid-template-columns:minmax(160px,200px) 1fr;align-items:baseline;display:grid}.yii-debug .yii-debug-dl-row:last-child{border-bottom:0}.yii-debug .yii-debug-dl-row dt{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.14em;text-transform:uppercase;margin:0;font-size:.6875rem;font-weight:500}.yii-debug .yii-debug-dl-row dd{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);overflow-wrap:break-word;margin:0;font-size:.8125rem}.yii-debug .yii-debug-packages{gap:var(--yii-debug-space-2);grid-template-columns:repeat(auto-fill,minmax(340px,1fr));display:grid}.yii-debug .yii-debug-package{gap:4px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);border-left:3px solid #0000;grid-template-rows:auto auto;grid-template-columns:auto 1fr;align-items:center;padding:10px 14px;transition:border-left-color .15s,transform .15s,background .15s;display:grid}.yii-debug .yii-debug-package:hover{border-left-color:var(--yii-debug-panel-primary);background:var(--yii-debug-panel-surface-hover);transform:translate(2px)}.yii-debug .yii-debug-package-glyph{color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 25%);grid-row:1/span 2;font-size:.8125rem;line-height:1}.yii-debug .yii-debug-package-name{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);overflow-wrap:anywhere;font-size:.8125rem;font-weight:500;line-height:1.2}.yii-debug .yii-debug-package-version{border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 85%);max-width:100%;color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;justify-self:start;padding:2px 8px;font-size:.625rem;font-weight:700;line-height:1.4;overflow:hidden}.yii-debug .yii-debug-cta{align-items:center;gap: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-family:var(--yii-debug-font-mono);letter-spacing:.02em;padding:10px 18px 10px 14px;font-size:.8125rem;font-weight:500;text-decoration:none;transition:border-color .15s,color .15s,transform .15s,box-shadow .15s;display:inline-flex}.yii-debug .yii-debug-cta:hover,.yii-debug .yii-debug-cta:focus{border-color:var(--yii-debug-panel-primary);color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 85%);text-decoration:none;transform:translate(3px)}:is(.yii-debug .yii-debug-cta:hover,.yii-debug .yii-debug-cta:focus) .yii-debug-cta-prompt{transform:translate(2px)}.yii-debug .yii-debug-cta-prompt{color:var(--yii-debug-panel-primary);font-weight:700;transition:transform .15s}.yii-debug .yii-debug-cta-external{color:var(--yii-debug-panel-muted);margin-left:auto;font-size:.875rem}.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:767px){.yii-debug .yii-debug-page{padding:var(--yii-debug-space-2)}.yii-debug .yii-debug-card{padding:var(--yii-debug-space-3)}.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 (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-user-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.85)}}@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{opacity:.85;background:currentColor;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:currentColor;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-row-app{color:var(--yii-debug-cat-app)}.yii-debug-tl-row-db{color:var(--yii-debug-cat-db)}.yii-debug-tl-row-view{color:var(--yii-debug-cat-view)}.yii-debug-tl-row-cache{color:var(--yii-debug-cat-cache)}.yii-debug-tl-row-mail{color:var(--yii-debug-cat-mail)}.yii-debug-tl-row-queue{color:var(--yii-debug-cat-queue)}.yii-debug-tl-row-other{color:color-mix(in srgb, var(--yii-debug-cat-other), var(--yii-debug-panel-text) 25%)}.yii-debug-tl-legend{flex-wrap:wrap;gap:6px 14px;padding:10px 14px 2px;display:flex}.yii-debug-tl-legend-item{font-size:var(--yii-debug-fs-xs,.75rem);align-items:center;gap:6px;display:inline-flex}.yii-debug-tl-legend-item .yii-debug-tl-dot{flex:none}.yii-debug-tl-legend-label{color:var(--yii-debug-panel-muted)}.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}} +: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-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-density=compact]{--yii-debug-space-2:6px;--yii-debug-space-3:9px;--yii-debug-space-4:12px;--yii-debug-space-5:18px;--yii-debug-space-6:24px;--yii-debug-control-min-size:32px;--yii-debug-panel-padding:var(--yii-debug-space-4);--yii-debug-row-padding-block:7px}: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{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){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{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-side-section-link{color:var(--yii-debug-panel-link);font-size:var(--yii-debug-fs-sm);text-decoration:none}.yii-debug .yii-debug-side-section-link:hover,.yii-debug .yii-debug-side-section-link:focus{color:var(--yii-debug-panel-link-hover);text-decoration:underline}.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-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-overview-label,.yii-debug .yii-debug-request-overview-status-label,.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-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{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-overview-status{text-align:right;min-width:72px}.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-request-overview-metrics{border-block:var(--yii-debug-border);background:var(--yii-debug-panel-surface-muted);grid-template-columns:repeat(3,minmax(0,1fr));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{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-request-overview-meta{align-items:center;gap:var(--yii-debug-space-2) var(--yii-debug-space-4);padding:10px 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-meta-item{align-items:baseline;gap:6px;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;font-size:.625rem;font-weight:700}.yii-debug .yii-debug-request-overview-tag{max-width:34ch;color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.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-status-label{margin:0}.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{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-grid-2{gap:var(--yii-debug-space-4);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));display:grid}.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-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:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));color:#fff}:is(.yii-debug .yii-debug-nav-link.is-active,.yii-debug .yii-debug-nav-link[aria-current=page]):after{color:#ffffffd9}.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:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));color:#fff;border-color:#0000}.yii-debug .yii-debug-btn-primary:hover,.yii-debug .yii-debug-btn-primary:focus{background:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary-strong));color:#fff}.yii-debug .yii-debug-btn-ghost{border-color:var(--yii-debug-panel-border);background:0 0}.yii-debug .yii-debug-btn-subtle{background:var(--yii-debug-panel-surface-muted);border-color:#0000}.yii-debug .yii-debug-btn-sm{min-height:28px;font-size:var(--yii-debug-fs-xs);padding:4px 10px}.yii-debug .yii-debug-btn-group{gap:var(--yii-debug-space-1);flex-wrap:wrap;display:inline-flex}.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-level-chip,.yii-debug .yii-debug-db-type,.yii-debug .yii-debug-mail-status,.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-router-callout{flex-direction:column}.yii-debug .yii-debug-router-callout-message{margin:0}.yii-debug .yii-debug-router-summary{gap:4px var(--yii-debug-space-3);margin:0 0 var(--yii-debug-space-3);font-size:var(--yii-debug-fs-sm);grid-template-columns:max-content minmax(0,1fr);display:grid}.yii-debug .yii-debug-router-summary dt{color:var(--yii-debug-panel-muted);letter-spacing:.04em;text-transform:uppercase;font-weight:600;font-size:var(--yii-debug-fs-xs);align-self:center}.yii-debug .yii-debug-router-summary dd{overflow-wrap:anywhere;min-width:0;margin:0}.yii-debug .yii-debug-router-summary code{border-radius:var(--yii-debug-radius-sm);background:var(--yii-debug-panel-surface);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;padding:1px 8px;display:inline}.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{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-hover)}.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,.yii-debug .yii-debug-sort-asc:after,.yii-debug .yii-debug-sort-desc:after{content:"↑";opacity:.78;margin-left:4px;font-size:.85em}.yii-debug a.desc:after,.yii-debug .yii-debug-sort-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:linear-gradient(135deg, var(--yii-debug-panel-primary-strong), var(--yii-debug-panel-primary));color:#fff;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-field-grid{gap:var(--yii-debug-space-3) var(--yii-debug-space-4);margin-bottom:var(--yii-debug-space-3);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.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,.yii-debug .yii-debug-textarea{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,.yii-debug .yii-debug-textarea):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,.yii-debug .yii-debug-textarea):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,.yii-debug .yii-debug-textarea)::placeholder{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-textarea{resize:vertical;min-height:96px;line-height:1.45}.yii-debug .yii-debug-grid .filters td,.yii-debug .yii-debug-grid td.yii-debug-filter-cell{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,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell select,.yii-debug .yii-debug-grid td.yii-debug-filter-cell 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,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell select,.yii-debug .yii-debug-grid td.yii-debug-filter-cell 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-collapsible{margin-top:var(--yii-debug-space-3);display:none}.yii-debug .yii-debug-collapsible.is-open{display:block}.yii-debug .yii-debug-dropdown{display:inline-block;position:relative}.yii-debug .yii-debug-dropdown-menu{z-index:100;border:var(--yii-debug-border-strong);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);min-width:220px;box-shadow:var(--yii-debug-shadow-md);margin:0;padding:4px;list-style:none;display:none;position:absolute;top:calc(100% + 4px);left:0}.yii-debug .yii-debug-dropdown.is-open .yii-debug-dropdown-menu{display:block}.yii-debug .yii-debug-dropdown-item{border-radius:var(--yii-debug-radius-sm);color:var(--yii-debug-panel-text);font-size:var(--yii-debug-fs-sm);padding:6px 10px;text-decoration:none;display:block}.yii-debug .yii-debug-dropdown-item:hover,.yii-debug .yii-debug-dropdown-item:focus{background:var(--yii-debug-panel-surface-hover);color:var(--yii-debug-panel-link-hover);text-decoration:none}.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-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,.yii-debug .yii-debug-table-userswitch td.yii-debug-filter-cell 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-timeline-duration{margin:0 0 var(--yii-debug-space-3);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);letter-spacing:.04em}.yii-debug .yii-debug-user{gap:var(--yii-debug-space-3);flex-direction:column;display:flex}.yii-debug .yii-debug-user-card{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4) var(--yii-debug-space-5);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-lg);background:radial-gradient(circle at top right, color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%), transparent 60%), var(--yii-debug-panel-surface);box-shadow:var(--yii-debug-shadow-sm);grid-template-columns:auto 1fr;align-items:center;display:grid;position:relative;overflow:hidden}.yii-debug .yii-debug-user-avatar{background:linear-gradient(135deg, var(--yii-debug-panel-primary), var(--yii-debug-info));width:64px;height:64px;box-shadow:0 4px 12px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%), inset 0 1px 0 #ffffff38;color:#fff;font-family:var(--yii-debug-font-mono);letter-spacing:-.02em;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:28px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-user-meta{flex-direction:column;gap:4px;min-width:0;display:flex}.yii-debug .yii-debug-user-name{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xl);letter-spacing:-.01em;margin:0;font-weight:700;line-height:1.2}.yii-debug .yii-debug-user-handle{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);margin:0}.yii-debug .yii-debug-user-tags{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.yii-debug .yii-debug-user-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;gap:6px;padding:4px 12px 4px 8px;font-weight:700;display:inline-flex}.yii-debug .yii-debug-user-status:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px}.yii-debug .yii-debug-user-status-success{background:color-mix(in srgb, var(--yii-debug-success), transparent 84%);color:var(--yii-debug-success)}.yii-debug .yii-debug-user-status-success:before{box-shadow:0 0 0 0 color-mix(in srgb, var(--yii-debug-success), transparent 30%);animation:2.4s ease-in-out infinite yii-debug-user-pulse}.yii-debug .yii-debug-user-status-danger{background:color-mix(in srgb, var(--yii-debug-danger), transparent 84%);color:var(--yii-debug-danger)}.yii-debug .yii-debug-user-status-warning{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-user-status-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-user-pill{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;align-items:center;padding:4px 10px;display:inline-flex}.yii-debug .yii-debug-user-section{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);overflow:hidden}.yii-debug .yii-debug-user-section>header{padding:10px var(--yii-debug-space-3);border-bottom:var(--yii-debug-border);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:.06em;text-transform:uppercase;align-items:center;gap:10px;font-weight:700;display:flex}.yii-debug .yii-debug-user-section dl{margin:0;padding:0}.yii-debug .yii-debug-user-section-icon{width:18px;height:18px;color:var(--yii-debug-panel-primary);justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-user-section-icon svg{width:100%;height:100%}.yii-debug .yii-debug-user-row{gap:var(--yii-debug-space-3);padding:12px var(--yii-debug-space-3);border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);grid-template-columns:minmax(140px,22%) 1fr;display:grid}.yii-debug .yii-debug-user-row:last-child{border-bottom:0}.yii-debug .yii-debug-user-row dt{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;align-self:center}.yii-debug .yii-debug-user-row dd{min-width:0;margin:0}.yii-debug .yii-debug-user-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);word-break:break-all}.yii-debug .yii-debug-user-empty{color:color-mix(in srgb, var(--yii-debug-panel-muted), transparent 35%);font-family:var(--yii-debug-font-mono)}.yii-debug .yii-debug-user-time{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm);align-items:baseline;gap:10px;display:inline-flex}.yii-debug .yii-debug-user-time .yii-debug-user-time-rel{color:var(--yii-debug-panel-text);font-weight:600}.yii-debug .yii-debug-user-time .yii-debug-user-time-abs{color:var(--yii-debug-panel-muted);font-size:var(--yii-debug-fs-xs)}.yii-debug .yii-debug-user-reveal{border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 80%, transparent);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-text);font:inherit;cursor:pointer;text-align:left;align-items:center;gap:12px;padding:6px 6px 6px 14px;transition:border-color .14s,background .14s;display:inline-flex}.yii-debug .yii-debug-user-reveal:hover,.yii-debug .yii-debug-user-reveal:focus{border-color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-user-reveal .yii-debug-user-mask,.yii-debug .yii-debug-user-reveal .yii-debug-user-real{font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-sm)}.yii-debug .yii-debug-user-reveal .yii-debug-user-mask{letter-spacing:.1em;color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-user-reveal .yii-debug-user-real{overflow-wrap:anywhere;max-width:60ch;color:var(--yii-debug-panel-text);display:none}.yii-debug .yii-debug-user-reveal .yii-debug-user-reveal-cta{border-radius:var(--yii-debug-radius-pill);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%);color:var(--yii-debug-panel-primary);font-size:var(--yii-debug-fs-xs);letter-spacing:.08em;text-transform:uppercase;flex:none;padding:3px 10px;font-weight:700}.yii-debug .yii-debug-user-reveal .yii-debug-user-reveal-cta:before{content:"Reveal"}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-mask{display:none}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-real{display:inline}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-reveal-cta{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-user-reveal.is-revealed .yii-debug-user-reveal-cta:before{content:"Hide"}.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 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-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-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-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-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-summary-action{color:var(--yii-debug-panel-primary-strong);letter-spacing:0;text-transform:none;margin-left:auto;font-weight:700;text-decoration:none}.yii-debug .yii-debug-grid-summary-action:hover,.yii-debug .yii-debug-grid-summary-action:focus-visible{color:var(--yii-debug-panel-link-hover);text-decoration:underline}.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 tbody td:nth-child(2){white-space:nowrap}.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{margin-top:var(--yii-debug-space-2)}.yii-debug .yii-debug-db-explain-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{background:var(--yii-debug-panel-bg-accent);border-color:var(--yii-debug-panel-primary);text-decoration:none}.yii-debug .yii-debug-db-explain-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{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-mail-list{gap:var(--yii-debug-space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-mail-list-item{margin:0;padding:0;list-style:none;display:block}.yii-debug .yii-debug-mail-pager{margin-top:var(--yii-debug-space-4)}.yii-debug .yii-debug-mail-card{gap:var(--yii-debug-space-4);padding:var(--yii-debug-space-4) var(--yii-debug-space-4) var(--yii-debug-space-3);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);grid-template-columns:1fr;transition:transform .16s,border-color .16s,box-shadow .16s;display:grid;position:relative}.yii-debug .yii-debug-mail-card: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-mail-card-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:flex-start;display:grid}.yii-debug .yii-debug-mail-avatar{--mail-hue:210;background:linear-gradient(135deg, hsl(var(--mail-hue) 72% 52%), hsl(calc(var(--mail-hue) + 28) 65% 40%));width:44px;height:44px;box-shadow:0 2px 10px hsl(var(--mail-hue) 60% 40% / 32%), inset 0 1px 0 #ffffff38;color:#fff;font-family:var(--yii-debug-font-mono);letter-spacing:-.01em;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:16px;font-weight:800;display:inline-flex}.yii-debug .yii-debug-mail-headline{flex-direction:column;gap:4px;min-width:0;display:flex}.yii-debug .yii-debug-mail-from{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.yii-debug .yii-debug-mail-subject{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-lg);letter-spacing:-.01em;margin:0;font-weight:700;line-height:1.25}.yii-debug .yii-debug-mail-preview{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-sans);font-size:var(--yii-debug-fs-sm);-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;margin:2px 0 0;line-height:1.4;display:-webkit-box;overflow:hidden}.yii-debug .yii-debug-mail-meta{flex-direction:column;flex:none;align-items:flex-end;gap:6px;display:flex}.yii-debug .yii-debug-mail-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;gap:6px;padding:3px 10px 3px 8px;font-weight:600;line-height:1;display:inline-flex}.yii-debug .yii-debug-mail-status-dot{background:var(--yii-debug-hue,var(--yii-debug-panel-muted));width:7px;height:7px;box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-hue,var(--yii-debug-panel-muted)), transparent 80%);border-radius:50%;flex:none}.yii-debug .yii-debug-mail-status-ok{--yii-debug-hue:var(--yii-debug-success)}.yii-debug .yii-debug-mail-status-fail{--yii-debug-hue:var(--yii-debug-danger)}.yii-debug .yii-debug-mail-time{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.02em;cursor:help}.yii-debug .yii-debug-mail-download{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface-muted);width:30px;height:30px;color:var(--yii-debug-panel-link);justify-content:center;align-items:center;text-decoration:none;transition:background-color .14s,border-color .14s,color .14s,transform .14s;display:inline-flex}.yii-debug .yii-debug-mail-download svg{width:16px;height:16px}.yii-debug .yii-debug-mail-download:hover,.yii-debug .yii-debug-mail-download:focus-visible{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 50%);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 88%);color:var(--yii-debug-panel-primary-strong);text-decoration:none;transform:translateY(-1px)}.yii-debug .yii-debug-mail-recipients{padding:var(--yii-debug-space-3);border:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 60%, transparent);border-radius:var(--yii-debug-radius-md);background:color-mix(in srgb, var(--yii-debug-panel-surface-muted), transparent 40%);flex-direction:column;gap:8px;display:flex}.yii-debug .yii-debug-mail-recipient-group{gap:var(--yii-debug-space-3);grid-template-columns:64px 1fr;align-items:center;display:grid}.yii-debug .yii-debug-mail-recipient-label{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);letter-spacing:.14em;text-align:right;font-weight:700}.yii-debug .yii-debug-mail-recipient-label[data-role=reply]{color:var(--yii-debug-info)}.yii-debug .yii-debug-mail-recipient-label[data-role=bcc]{color:var(--yii-debug-warning)}.yii-debug .yii-debug-mail-recipient-pills{flex-wrap:wrap;gap:6px;min-width:0;display:flex}.yii-debug .yii-debug-mail-recipient-pill{border:1px solid var(--yii-debug-panel-border);border-radius:var(--yii-debug-radius-pill);background:var(--yii-debug-panel-surface);max-width:100%;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);text-overflow:ellipsis;white-space:nowrap;align-items:center;padding:3px 10px;line-height:1.4;display:inline-flex;overflow:hidden}.yii-debug .yii-debug-mail-body{padding:var(--yii-debug-space-4);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);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.55}.yii-debug .yii-debug-mail-body-empty{color:var(--yii-debug-panel-muted);text-align:center;font-style:italic}.yii-debug .yii-debug-mail-tech{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 30%);overflow:hidden}.yii-debug .yii-debug-mail-tech>summary{padding:10px 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);letter-spacing:.06em;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;list-style:none;display:flex}.yii-debug .yii-debug-mail-tech>summary::-webkit-details-marker{display:none}.yii-debug .yii-debug-mail-tech>summary:hover{color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-mail-tech[open]>summary{border-bottom:1px solid color-mix(in srgb, var(--yii-debug-panel-border) 50%, transparent);color:var(--yii-debug-panel-text)}.yii-debug .yii-debug-mail-tech[open] .yii-debug-mail-tech-chevron{transform:rotate(180deg)}.yii-debug .yii-debug-mail-tech-icon{width:14px;height:14px;color:var(--yii-debug-panel-primary);justify-content:center;align-items:center;display:inline-flex}.yii-debug .yii-debug-mail-tech-icon svg{width:100%;height:100%}.yii-debug .yii-debug-mail-tech-label{text-transform:uppercase;font-weight:700}.yii-debug .yii-debug-mail-tech-charset{border:1px solid var(--yii-debug-panel-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);font-size:var(--yii-debug-fs-xs);letter-spacing:.04em;text-transform:none;margin-left:4px;padding:2px 8px;font-weight:600}.yii-debug .yii-debug-mail-tech-chevron{width:14px;height:14px;color:var(--yii-debug-panel-muted);justify-content:center;align-items:center;margin-left:auto;transition:transform .2s;display:inline-flex}.yii-debug .yii-debug-mail-tech-chevron svg{width:100%;height:100%}.yii-debug .yii-debug-mail-headers{padding:var(--yii-debug-space-3) var(--yii-debug-space-4);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-xs);white-space:pre-wrap;overflow-wrap:break-word;margin:0;line-height:1.5;overflow-x:auto}@media (max-width:640px){.yii-debug .yii-debug-mail-card-head{grid-template-columns:auto 1fr}.yii-debug .yii-debug-mail-meta{flex-direction:row;grid-column:1/-1;justify-content:flex-start;align-items:center}.yii-debug .yii-debug-mail-recipient-group{grid-template-columns:1fr;gap:4px}.yii-debug .yii-debug-mail-recipient-label{text-align:left}}.yii-debug .yii-debug-queue-grid-job{flex-direction:column;gap:2px;line-height:1.2;display:flex}.yii-debug .yii-debug-queue-grid-job-link{color:var(--yii-debug-text-strong);white-space:nowrap;font-weight:600;text-decoration:none}.yii-debug .yii-debug-queue-grid-job-link:hover{text-decoration:underline}.yii-debug .yii-debug-queue-grid-job-namespace{color:var(--yii-debug-text-muted);font-family:var(--yii-debug-font-mono);white-space:nowrap;font-size:.78rem}.yii-debug .yii-debug-grid-queue .yii-debug-queue-status,.yii-debug .yii-debug-grid-queue .yii-debug-queue-driver{white-space:nowrap}.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-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 .yii-debug-dump-body span[style*="color: #DD0000"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#DD0000"]{color:#fca5a5!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #0000BB"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#0000BB"]{color:#93c5fd!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #007700"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#007700"]{color:#86efac!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #FF8000"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#FF8000"]{color:#fdba74!important}[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color: #000000"],[data-yii-debug-theme=dark] .yii-debug .yii-debug-dump-body span[style*="color:#000000"]{color:var(--yii-debug-panel-text)!important}.yii-debug .yii-debug-asset-stats{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-asset-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-asset-stat[data-kind=bundles] .yii-debug-asset-stat-icon{color:var(--yii-debug-panel-primary)}.yii-debug .yii-debug-asset-stat[data-kind=css] .yii-debug-asset-stat-icon{color:var(--yii-debug-info)}.yii-debug .yii-debug-asset-stat[data-kind=js] .yii-debug-asset-stat-icon{color:var(--yii-debug-warning)}.yii-debug .yii-debug-asset-stat[data-kind=deps] .yii-debug-asset-stat-icon{color:var(--yii-debug-success)}.yii-debug .yii-debug-asset-stat-icon{flex:none;justify-content:center;align-items:center;width:26px;height:26px;display:inline-flex}.yii-debug .yii-debug-asset-stat-icon svg{width:100%;height:100%}.yii-debug .yii-debug-asset-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-asset-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-asset-list{gap:var(--yii-debug-space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.yii-debug .yii-debug-asset-list-item{margin:0;padding:0;list-style:none;display:block}.yii-debug .yii-debug-asset-card{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-asset-card: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-asset-card: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-asset-card-head{gap:var(--yii-debug-space-3);grid-template-columns:auto 1fr auto;align-items:center;display:grid}.yii-debug .yii-debug-asset-card-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-asset-card-icon svg{width:22px;height:22px}.yii-debug .yii-debug-asset-card-title{flex-direction:column;gap:2px;min-width:0;display:flex}.yii-debug .yii-debug-asset-card-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-asset-card-fqcn{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-asset-card-meta{flex-wrap:nowrap;flex:none;justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.yii-debug .yii-debug-asset-chip{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:600;display:inline-flex}.yii-debug .yii-debug-asset-chip strong{color:var(--yii-debug-panel-text);font-weight:800}.yii-debug .yii-debug-asset-chip-css{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-asset-chip-css strong{color:var(--yii-debug-info)}.yii-debug .yii-debug-asset-chip-js{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-asset-chip-js strong{color:var(--yii-debug-warning)}.yii-debug .yii-debug-asset-chip-deps{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-asset-chip-deps strong{color:var(--yii-debug-success)}.yii-debug .yii-debug-asset-card-body{gap:var(--yii-debug-space-4);grid-template-columns:minmax(180px,2fr) minmax(0,3fr);display:grid}.yii-debug .yii-debug-asset-card-body[data-cols="1"]{grid-template-columns:1fr}.yii-debug .yii-debug-asset-section{gap:var(--yii-debug-space-3);flex-direction:column;min-width:0;display:flex}.yii-debug .yii-debug-asset-section-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-asset-files{flex-direction:column;gap:4px;display:flex}.yii-debug .yii-debug-asset-files+.yii-debug-asset-files{margin-top:4px}.yii-debug .yii-debug-asset-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-asset-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-asset-file-type-css{background:color-mix(in srgb, var(--yii-debug-info), transparent 84%);color:var(--yii-debug-info)}.yii-debug .yii-debug-asset-file-type-js{background:color-mix(in srgb, var(--yii-debug-warning), transparent 84%);color:var(--yii-debug-warning)}.yii-debug .yii-debug-asset-file-name{color:var(--yii-debug-panel-text);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.yii-debug .yii-debug-asset-wiring{flex-direction:column;gap:4px;margin:0;display:flex}.yii-debug .yii-debug-asset-wiring-row{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-asset-wiring-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-asset-wiring-value{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);font-size:var(--yii-debug-fs-xs);word-break:break-all;margin:0}.yii-debug .yii-debug-asset-depends{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-asset-depends-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-asset-depends-list{flex-wrap:wrap;gap:6px;display:flex}.yii-debug .yii-debug-asset-depend{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);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-asset-depend:hover,.yii-debug .yii-debug-asset-depend: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)}.yii-debug .yii-debug-asset-depend-icon{opacity:.85;font-size:12px;line-height:1}.yii-debug .yii-debug-asset-depend-name{white-space:nowrap}@media (max-width:720px){.yii-debug .yii-debug-asset-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.yii-debug .yii-debug-asset-card-body{grid-template-columns:1fr}.yii-debug .yii-debug-asset-card-head{grid-template-columns:auto 1fr}.yii-debug .yii-debug-asset-card-meta{grid-column:1/-1;justify-content:flex-start;max-width:100%}}.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,.yii-debug .yii-debug-col-queue-id{white-space:nowrap;min-width:120px}.yii-debug .yii-debug-grid .filters input.yii-debug-col-id-input,.yii-debug .yii-debug-grid .filters input.yii-debug-col-queue-id-input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input.yii-debug-col-id-input,.yii-debug .yii-debug-grid td.yii-debug-filter-cell input.yii-debug-col-queue-id-input{box-sizing:border-box;width:104px}.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}@media (max-width:1366px){.yii-debug .yii-debug-grid-history .yii-debug-col-ip,.yii-debug .yii-debug-grid-history .yii-debug-col-mail{display:none}.yii-debug .yii-debug-grid-history .yii-debug-url-cell{max-width:200px}}.yii-debug .yii-debug-grid-event .yii-debug-table{min-width:0}@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 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,.yii-debug .yii-debug-grid-event .yii-debug-table td.yii-debug-filter-cell{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-muted{color:var(--yii-debug-panel-muted)}.yii-debug .yii-debug-nowrap{white-space:nowrap}.yii-debug .yii-debug-break{word-break:break-all}.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-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-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{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-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-corner{border:1.5px solid color-mix(in srgb, var(--yii-debug-panel-primary), transparent 40%);pointer-events:none;width:9px;height:9px;transition:border-color .15s;position:absolute}.yii-debug .yii-debug-readout-corner[data-corner=tl]{border-bottom:0;border-right:0;top:8px;left:8px}.yii-debug .yii-debug-readout-corner[data-corner=tr]{border-bottom:0;border-left:0;top:8px;right:8px}.yii-debug .yii-debug-readout-corner[data-corner=bl]{border-top:0;border-right:0;bottom:8px;left:8px}.yii-debug .yii-debug-readout-corner[data-corner=br]{border-top:0;border-left:0;bottom:8px;right:8px}.yii-debug .yii-debug-readout-card:hover .yii-debug-readout-corner{border-color:var(--yii-debug-panel-primary)}.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-chip{border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 80%);color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);letter-spacing:.08em;text-transform:uppercase;align-items:center;padding:2px 7px;font-size:.625rem;font-weight:700;display:inline-flex}.yii-debug .yii-debug-readout-chip-muted{background:var(--yii-debug-panel-surface-muted);color:var(--yii-debug-panel-muted)}.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-dl{border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);margin:0;padding:0;overflow:hidden}.yii-debug .yii-debug-dl-row{gap:var(--yii-debug-space-4);padding:10px var(--yii-debug-space-4);border-bottom:1px solid var(--yii-debug-panel-border);grid-template-columns:minmax(160px,200px) 1fr;align-items:baseline;display:grid}.yii-debug .yii-debug-dl-row:last-child{border-bottom:0}.yii-debug .yii-debug-dl-row dt{color:var(--yii-debug-panel-muted);font-family:var(--yii-debug-font-mono);letter-spacing:.14em;text-transform:uppercase;margin:0;font-size:.6875rem;font-weight:500}.yii-debug .yii-debug-dl-row dd{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);overflow-wrap:break-word;margin:0;font-size:.8125rem}.yii-debug .yii-debug-packages{gap:var(--yii-debug-space-2);grid-template-columns:repeat(auto-fill,minmax(340px,1fr));display:grid}.yii-debug .yii-debug-package{gap:4px var(--yii-debug-space-2);border:var(--yii-debug-border);border-radius:var(--yii-debug-radius-md);background:var(--yii-debug-panel-surface);border-left:3px solid #0000;grid-template-rows:auto auto;grid-template-columns:auto 1fr;align-items:center;padding:10px 14px;transition:border-left-color .15s,transform .15s,background .15s;display:grid}.yii-debug .yii-debug-package:hover{border-left-color:var(--yii-debug-panel-primary);background:var(--yii-debug-panel-surface-hover);transform:translate(2px)}.yii-debug .yii-debug-package-glyph{color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 25%);grid-row:1/span 2;font-size:.8125rem;line-height:1}.yii-debug .yii-debug-package-name{color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);overflow-wrap:anywhere;font-size:.8125rem;font-weight:500;line-height:1.2}.yii-debug .yii-debug-package-version{border-radius:var(--yii-debug-radius-sm);background:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 85%);max-width:100%;color:var(--yii-debug-panel-primary);font-family:var(--yii-debug-font-mono);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;justify-self:start;padding:2px 8px;font-size:.625rem;font-weight:700;line-height:1.4;overflow:hidden}.yii-debug .yii-debug-cta{align-items:center;gap: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-family:var(--yii-debug-font-mono);letter-spacing:.02em;padding:10px 18px 10px 14px;font-size:.8125rem;font-weight:500;text-decoration:none;transition:border-color .15s,color .15s,transform .15s,box-shadow .15s;display:inline-flex}.yii-debug .yii-debug-cta:hover,.yii-debug .yii-debug-cta:focus{border-color:var(--yii-debug-panel-primary);color:var(--yii-debug-panel-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--yii-debug-panel-primary), transparent 85%);text-decoration:none;transform:translate(3px)}:is(.yii-debug .yii-debug-cta:hover,.yii-debug .yii-debug-cta:focus) .yii-debug-cta-prompt{transform:translate(2px)}.yii-debug .yii-debug-cta-prompt{color:var(--yii-debug-panel-primary);font-weight:700;transition:transform .15s}.yii-debug .yii-debug-cta-external{color:var(--yii-debug-panel-muted);margin-left:auto;font-size:.875rem}.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-user-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.85)}}@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{opacity:.85;background:currentColor;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:currentColor;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-row-app{color:var(--yii-debug-cat-app)}.yii-debug-tl-row-db{color:var(--yii-debug-cat-db)}.yii-debug-tl-row-view{color:var(--yii-debug-cat-view)}.yii-debug-tl-row-cache{color:var(--yii-debug-cat-cache)}.yii-debug-tl-row-mail{color:var(--yii-debug-cat-mail)}.yii-debug-tl-row-queue{color:var(--yii-debug-cat-queue)}.yii-debug-tl-row-other{color:color-mix(in srgb, var(--yii-debug-cat-other), var(--yii-debug-panel-text) 25%)}.yii-debug-tl-legend{flex-wrap:wrap;gap:6px 14px;padding:10px 14px 2px;display:flex}.yii-debug-tl-legend-item{font-size:var(--yii-debug-fs-xs,.75rem);align-items:center;gap:6px;display:inline-flex}.yii-debug-tl-legend-item .yii-debug-tl-dot{flex:none}.yii-debug-tl-legend-label{color:var(--yii-debug-panel-muted)}.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 .yii-debug-brand-chip-density[aria-pressed=true]{border-color:color-mix(in srgb, var(--yii-debug-panel-primary), transparent 45%);background:var(--yii-debug-panel-bg-accent);color:var(--yii-debug-panel-primary-strong)}.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:var(--yii-debug-space-1);display:grid}.yii-debug .yii-debug-grid-db .yii-debug-trace a{min-height:32px;padding-block:var(--yii-debug-space-1);align-items:center;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 :is(.yii-debug-btn,.yii-debug-brand-chip,.yii-debug-cell-more-toggle,.yii-debug-dropdown-item,.yii-debug-heading-permalink,.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-brand-chip-density[aria-pressed=true],.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/assets/dist/js/db.min.js b/resources/assets/dist/js/db.min.js new file mode 100644 index 0000000..804fb8a --- /dev/null +++ b/resources/assets/dist/js/db.min.js @@ -0,0 +1 @@ +import{n as e,t}from"./dom.min.js";var n=`.yii-debug-db-explain-all-toggle, .yii-debug-db-explain-all a`,r=`Unable to load the EXPLAIN output. Try again.`,i=3;function a(e,t){return`Explaining `+e+`/`+t}function o(e,t,n){if(n&&n.completed0,s=0;s=a.total&&(a=null))}function h(e,t,n){e.finished||(e.finished=!0,d.delete(e.toggle),i.delete(e.toggle),e.container.classList.remove(`is-loading`,`is-requesting`),e.target.removeAttribute(`aria-busy`),t===`success`?(e.target.innerHTML=n.responseText,e.target.dataset.loaded=`1`,e.openRequested&&e.batchId!==null&&a!==null&&e.batchId===a.id||e.batchId===null&&e.openRequested?(e.container.classList.add(`is-open`),e.toggle.setAttribute(`aria-expanded`,`true`)):(e.container.classList.remove(`is-open`),e.toggle.setAttribute(`aria-expanded`,`false`))):t===`error`?(e.target.classList.add(`is-error`),e.target.setAttribute(`role`,`alert`),e.target.textContent=r,e.toggle.setAttribute(`aria-expanded`,`false`)):(e.container.classList.remove(`is-open`),e.toggle.setAttribute(`aria-expanded`,`false`)),m(e),_(),p())}function g(e){e.finished||e.cancelled||(e.container.classList.add(`is-requesting`),i.set(e.toggle,e),e.request=t(e.toggle.href,{success:function(t){h(e,`success`,t)},error:function(t){h(e,`error`,t)},abort:function(t){h(e,`abort`,t)}}))}function _(){if(!u)for(;i.size<3&&l.length>0;){var e=l.shift();e&&!e.finished&&!e.cancelled&&g(e)}}function v(e,t){var n=d.get(e);if(n)return t!==null&&(n.batchId=t),n.openRequested=!0,n;var r=f(e),i=r?r.querySelector(`.yii-debug-db-explain-text`):null;if(!r||!i)return null;var a={batchId:t,cancelled:!1,container:r,finished:!1,openRequested:!0,request:null,target:i,toggle:e};return d.set(e,a),l.push(a),r.classList.add(`is-loading`),i.classList.remove(`is-error`),i.removeAttribute(`role`),i.setAttribute(`aria-busy`,`true`),i.textContent=``,_(),a}function y(e){!e||e.finished||(e.cancelled=!0,e.request&&typeof e.request.abort==`function`&&e.request.abort(),h(e,`abort`,e.request))}function b(){a&&=(a.cancelled=!0,null),u=!0,l=[],Array.from(d.values()).forEach(y),document.querySelectorAll(`.yii-debug-db-explain-toggle`).forEach(function(e){var t=f(e),n=t?t.querySelector(`.yii-debug-db-explain-text`):null;t&&t.classList.remove(`is-open`,`is-loading`,`is-requesting`),n&&n.removeAttribute(`aria-busy`),e.setAttribute(`aria-expanded`,`false`)}),u=!1,p(!1)}function x(){var e=Array.from(document.querySelectorAll(`.yii-debug-db-explain-toggle`));a={cancelled:!1,completed:0,id:++c,total:e.length},e.forEach(function(e){var t=f(e),n=t?t.querySelector(`.yii-debug-db-explain-text`):null;if(!t||!n){a.completed+=1;return}if(n.dataset.loaded===`1`){t.classList.add(`is-open`),e.setAttribute(`aria-expanded`,`true`),a.completed+=1;return}v(e,a.id)}),a&&a.completed>=a.total&&(a=null),p(!0)}e(document.querySelectorAll(`.yii-debug-db-explain-toggle`),`click`,function(e){e.preventDefault();var t=f(this),n=t?t.querySelector(`.yii-debug-db-explain-text`):null;if(!(!t||!n)){if(t.classList.contains(`is-open`)){t.classList.remove(`is-open`),this.setAttribute(`aria-expanded`,`false`),p();return}if(n.dataset.loaded===`1`){t.classList.add(`is-open`),this.setAttribute(`aria-expanded`,`true`),p();return}v(this,null),p()}}),e(document.querySelectorAll(n),`click`,function(e){e.preventDefault(),a!==null||document.querySelectorAll(`.yii-debug-db-explain.is-open, .yii-debug-db-explain.is-loading`).length>0?b():x()}),p(),e(document.querySelectorAll(`[data-yii-debug-n1-filter]`),`click`,function(e){var t=this.getAttribute(`data-yii-debug-n1-filter`);if(e.preventDefault(),s(document,t),window.history&&t){var n=new URL(window.location.href);n.hash=t,window.history.pushState(null,``,n.href)}var r=t?document.getElementById(t):null;r&&typeof r.scrollIntoView==`function`&&r.scrollIntoView({block:`center`})}),e(document.querySelectorAll(`[data-yii-debug-n1-clear]`),`click`,function(e){e.preventDefault(),s(document,null)})})();export{i as EXPLAIN_CONCURRENCY,s as applyNPlusOneFilter,a as formatExplainProgress,o as updateExplainAllControl}; \ No newline at end of file diff --git a/resources/assets/dist/js/debug.min.js b/resources/assets/dist/js/debug.min.js index 8f665e9..3628e75 100644 --- a/resources/assets/dist/js/debug.min.js +++ b/resources/assets/dist/js/debug.min.js @@ -1 +1,2 @@ -import{a as e}from"./focus.min.js";(function(){var e=document.querySelector(`[data-yii-debug-history-cursor]`);if(!e)return;var t=Array.prototype.slice.call(document.querySelectorAll(`tr[data-yii-debug-tag]`));if(t.length===0)return;var n=[`2xx`,`3xx`,`4xx`,`5xx`,`none`],r=[`get`,`post`,`put`,`delete`,`other`],i=e.getAttribute(`data-yii-debug-cursor-init`)||``,a=0;if(i!==``){for(var o=0;o=500?`5xx`:e>=400?`4xx`:e>=300?`3xx`:e>=200?`2xx`:`none`}function u(e){var t=(e||``).toUpperCase();return t===`GET`||t===`HEAD`?`get`:t===`POST`?`post`:t===`PUT`||t===`PATCH`?`put`:t===`DELETE`?`delete`:`other`}function d(){t.forEach(function(e,t){e.classList.toggle(`is-cursor`,t===a)});var i=c(t[a]);e.querySelectorAll(`[data-snapshot-field]`).forEach(function(e){var t=e.getAttribute(`data-snapshot-field`);t===`method`?(e.textContent=i.method,r.forEach(function(t){e.classList.remove(`yii-debug-verb-`+t)}),e.classList.add(`yii-debug-verb-`+u(i.method))):t===`url`?(e.textContent=i.url,i.fullUrl&&e.setAttribute(`title`,i.fullUrl)):t===`status`?(e.textContent=i.status?String(i.status):`–`,n.forEach(function(t){e.classList.remove(`yii-debug-status-`+t)}),e.classList.add(`yii-debug-status-`+l(i.status))):t===`time`?(e.textContent=i.time,e.hidden=i.time===``):t===`ajax`&&(e.hidden=!i.ajax)});var o=e.querySelector(`.yii-debug-history-card`);o&&o.setAttribute(`title`,(i.method+` `+(i.fullUrl||i.url)).trim());var s=e.querySelector(`[data-yii-debug-cursor="newest"]`),d=e.querySelector(`[data-yii-debug-cursor="newer"]`),f=e.querySelector(`[data-yii-debug-cursor="older"]`),p=e.querySelector(`[data-yii-debug-cursor="oldest"]`),m=a===0,h=a===t.length-1;s&&(s.disabled=m),d&&(d.disabled=m),f&&(f.disabled=h),p&&(p.disabled=h)}function f(e){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(!(t.top>=0&&t.bottom<=n)){var r=window.scrollY+t.top-n/2+t.height/2;window.scrollTo({top:Math.max(0,r),behavior:`smooth`})}}function p(e){e<0||e>=t.length||e===a||(a=e,d(),f(t[a]))}e.addEventListener(`click`,function(n){var r=n.target.closest(`[data-yii-debug-cursor]`);if(r&&e.contains(r)){if(n.preventDefault(),r.disabled)return;var i=r.getAttribute(`data-yii-debug-cursor`);i===`newer`?p(a-1):i===`older`?p(a+1):i===`newest`?p(0):i===`oldest`&&p(t.length-1)}}),d(),a!==0&&f(t[a])})();var t=3e4;function n(e,t,n){if(e!=null)for(var r=typeof NodeList<`u`&&e instanceof NodeList||Array.isArray(e)?e:[e],i=0;i=0?n.timeout:t,r.onreadystatechange=function(){r.readyState===4&&(r.status>=200&&r.status<300?o():s())},r.ontimeout=s,r.send(n.data||``)}var i=`.yii-debug-db-explain-all-toggle, .yii-debug-db-explain-all a`,a=`Unable to load the EXPLAIN output. Try again.`;function o(e,t){e.textContent=t?`Collapse all`:`Explain all`,e.setAttribute(`aria-expanded`,t?`true`:`false`)}(function(){function e(e){for(var t=document.querySelectorAll(i),n=typeof e==`boolean`?e:document.querySelectorAll(`.yii-debug-db-explain.is-open, .yii-debug-db-explain.is-loading`).length>0,r=0;r0,a=0,o=r.length;a0&&r.push(u(t,`module`,`modules`)),n>0&&r.push(u(n,`extension`,`extensions`)),e>0&&r.push(u(e,`matching row`,`matching rows`)),r.join(` · `)}function f(e,t){return e+` of `+t}function p(e,t,n){var r=n===null?e:e.filter(function(e){return!!n[e]});return{hidden:r.length===0,open:n===null?e.indexOf(t)!==-1:r.length>0}}function m(e,t){e.hidden=t,e.parentElement&&e.parentElement.tagName===`LI`&&(e.parentElement.hidden=t)}function h(e){e.hidden=!1;var t=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(t){var n=t.getAttribute(`data-yii-debug-phpinfo-total`);n===null&&(n=t.textContent.trim(),t.setAttribute(`data-yii-debug-phpinfo-total`,n)),t.textContent=n}e.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(e.open=e.getAttribute(`data-yii-debug-phpinfo-default-open`)===`true`)}function g(e,t){var n=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(n){var r=n.getAttribute(`data-yii-debug-phpinfo-total`);r===null&&(r=n.textContent.trim(),n.setAttribute(`data-yii-debug-phpinfo-total`,r)),n.textContent=f(t,r)}}function _(e){s(e.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(e){h(e)}),s(e.querySelectorAll(`tr`)).forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)})}function v(e){e.forEach(function(e){s(e.querySelectorAll(`.yii-debug-phpinfo-table-section.is-directives tr`)).forEach(function(e){if(!e.classList.contains(`h`)){var t=e.querySelector(`th[scope="row"]`),n=s(e.querySelectorAll(`td`));t!==null&&n.length===2&&n[0].textContent.trim()!==n[1].textContent.trim()&&(e.classList.add(`has-local-override`),n[0].title=`Local value differs from master value`)}})})}function y(e){var t=e.querySelector(`[data-yii-debug-phpinfo-search]`),n=e.querySelector(`[data-yii-debug-phpinfo-clear]`),r=e.querySelector(`[data-yii-debug-phpinfo-status]`),i=e.querySelector(`[data-yii-debug-phpinfo-empty]`),a=s(e.querySelectorAll(`.yii-debug-phpinfo-section`)),o=s(e.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)),u=s(e.querySelectorAll(`.yii-debug-phpinfo-extension-group`)),h=e.querySelector(`[data-yii-debug-phpinfo-extensions]`),y=s(e.querySelectorAll(`#phpinfo-overview .yii-debug-phpinfo-overview-hero-section:not(.yii-debug-phpinfo-extensions)`)),b=e.querySelector(`#phpinfo-overview > .yii-debug-disclosure`),x=s(e.querySelectorAll(`.yii-debug-phpinfo-toc-link`)),S=s(e.querySelectorAll(`[data-yii-debug-phpinfo-toc-group]`)),C=Object.create(null),w=Object.create(null),T=!1,E=!1,D,O;if(!a.length)return;a.forEach(function(e){e.id!==``&&(C[e.id]=e)}),o.forEach(function(e){w[e.id]=e});function k(){o.forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)}),u.forEach(function(e){e.hidden=!1;var t=e.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);t&&(t.textContent=t.getAttribute(`data-yii-debug-phpinfo-total`))}),y.forEach(function(e){e.hidden=!1}),b&&(b.hidden=!1)}function A(){E||=(T=h?h.open:!1,!0)}function j(){E&&=(h&&(h.open=T),!1)}function M(e,t){x.forEach(function(n){var r=n.getAttribute(`data-toc-target`)||``,i=r===e;n.classList.toggle(`is-active`,i),i?n.setAttribute(`aria-current`,`page`):n.removeAttribute(`aria-current`),m(n,t!==null&&!t[r])}),S.forEach(function(n){var r=p(s(n.querySelectorAll(`.yii-debug-phpinfo-toc-link`)).map(function(e){return e.getAttribute(`data-toc-target`)||``}),e,t);n.hidden=r.hidden,n.open=r.open})}function N(){k(),a.forEach(function(e){_(e),e.hidden=e.id!==O}),M(O,null),r&&(r.textContent=``),i&&(i.hidden=!0),n&&(n.hidden=!0)}function P(e){!window.history||!window.history.replaceState||window.history.replaceState(null,``,`#`+e)}function F(e,n){j(),O=C[e]?e:a[0].id,t&&(t.value=``),N(),n&&P(O)}function I(){var e=c(t?t.value:``);if(!e){j(),N();return}A();var p=Object.create(null),m=0,v=0,x=0;k(),a.forEach(function(t){_(t);var n=c(t.getAttribute(`data-section`)).indexOf(e)!==-1,r=0,i=0;n?v++:t.id===`phpinfo-overview`?(o.forEach(function(t){var n=l(t.getAttribute(`data-section`),t.textContent,e);t.hidden=!n,t.classList.toggle(`is-search-match`,n),n&&i++}),u.forEach(function(e){var t=s(e.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)).filter(function(e){return!e.hidden}),n=e.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);e.hidden=t.length===0,n&&t.length>0&&(n.textContent=f(t.length,n.getAttribute(`data-yii-debug-phpinfo-total`)))}),h&&(h.open=i>0),y.forEach(function(e){e.hidden=!0}),b&&(b.hidden=!0)):t.classList.contains(`yii-debug-phpinfo-module`)&&s(t.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(t){var n=s(t.querySelectorAll(`tr`)),i=n.filter(function(t){var n=t.querySelector(`th[scope="row"], th.e, td.e`);return n!==null&&c(n.textContent).indexOf(e)!==-1});t.hidden=i.length===0,r+=i.length,g(t,i.length),t.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(t.open=i.length>0);var a=new Set(i);n.forEach(function(e){var t=a.has(e),n=e.classList.contains(`h`);e.hidden=!t&&!(n&&i.length>0),e.classList.toggle(`is-search-match`,t)})});var a=n||r>0||i>0;t.hidden=!a,a&&(p[t.id]=!0),m+=r,x+=i}),M(``,p),r&&(r.textContent=d(m,v,x)),i&&(i.hidden=m+v+x!==0),n&&(n.hidden=!1)}function L(){window.clearTimeout(D),t&&(t.value=``,t.focus()),j(),N()}function R(e,t){F(`phpinfo-overview`,!1),h&&(h.open=!0),t&&e&&typeof e.scrollIntoView==`function`&&window.setTimeout(function(){e.scrollIntoView({behavior:`smooth`,block:`center`})},0)}v(a);var z=window.location.hash.replace(/^#/,``),B=w[z]||null;O=C[z]?z:B?`phpinfo-overview`:a[0].id,N(),B&&R(B,!0),t&&(t.addEventListener(`input`,function(){window.clearTimeout(D),D=window.setTimeout(I,120)}),t.addEventListener(`keydown`,function(e){e.key===`Escape`&&t.value!==``&&(e.preventDefault(),L())})),n&&n.addEventListener(`click`,L),x.forEach(function(e){e.addEventListener(`click`,function(t){var n=e.getAttribute(`data-toc-target`)||``;C[n]&&(t.preventDefault(),F(n,!0))})}),window.addEventListener(`hashchange`,function(){var e=window.location.hash.replace(/^#/,``);C[e]?F(e,!1):w[e]&&R(w[e],!0)})}typeof document<`u`&&y(document),(function(){var e=function(e){if(!e||e.nodeName!==`FORM`)return``;var t=new URLSearchParams;return new FormData(e).forEach(function(e,n){typeof e==`string`&&t.append(n,e)}),t.toString()},t=function(e,t){var n=t.responseText||`Unable to switch user.`,r=e.querySelector(`.debug-userswitch__error`);r||(r=document.createElement(`div`),r.className=`debug-userswitch__error yii-debug-callout yii-debug-callout-danger`,r.setAttribute(`role`,`alert`),e.insertBefore(r,e.firstChild)),r.textContent=n},i=!1,a=function(n){i||(i=!0,r({url:n.action,method:`post`,data:e(n),success:function(){window.top.location.reload()},error:function(e){i=!1,t(n,e)}}))},o=function(e,t){return e&&e.nodeType!==1&&(e=e.parentElement),e&&typeof e.closest==`function`?e.closest(t):null},s=function(e,t){var n=o(t,`tbody tr[data-key]`);return n&&e.contains(n)?n:null},c=function(e,t){var n=o(t,`a, button, input, select, textarea, label, summary, [role="button"], [role="link"], [contenteditable="true"]`);return n!==null&&e.contains(n)},l=function(e,t){var n=s(e,t),r,i;return!n||c(n,t)||(r=document.getElementById(`debug-userswitch__set-identity`),i=document.getElementById(`user_id`),!r||!i)?!1:(i.value=n.dataset.key,a(r),!0)},u=document.getElementById(`debug-userswitch__filter`);n(u,`click`,function(e){l(u,e.target)&&e.stopPropagation()}),n(u,`keydown`,function(e){if(e.key===`Enter`||e.key===` `){var t=s(u,e.target);!t||e.target!==t||c(t,e.target)||(e.preventDefault(),l(u,t)&&e.stopPropagation())}}),n(document.getElementById(`debug-userswitch__reset-identity-button`),`click`,function(e){var t=document.getElementById(`debug-userswitch__reset-identity`);e.preventDefault(),e.stopPropagation(),a(t)})})();var b=`yii_debug_theme`,x=`yii-debug-toolbar-theme`;function S(e){if(!e)return null;let t=String(e).toLowerCase().trim().split(/\s+/),n=t.some(e=>[`dark`,`night`,`black`].includes(e));return n===t.some(e=>[`light`,`day`,`white`].includes(e))?null:n?`dark`:`light`}function C(e){return S(e)===`dark`?`Switch to light theme`:`Switch to dark theme`}function w(e,t){if(!e)return;let n=e.querySelector(`.yii-debug-brand-icon`),r=t=>{let r=S(t)||`light`,i=C(r);e.setAttribute(`data-current-theme`,r),e.setAttribute(`aria-label`,i),e.setAttribute(`aria-pressed`,r===`dark`?`true`:`false`),e.setAttribute(`title`,i),n&&(n.innerHTML=r===`dark`?e.getAttribute(`data-icon-sun`):e.getAttribute(`data-icon-moon`))};r(S(document.documentElement.getAttribute(`data-yii-debug-theme`))),e.addEventListener(`click`,()=>{let e=S(document.documentElement.getAttribute(`data-yii-debug-theme`))===`dark`?`light`:`dark`;document.documentElement.setAttribute(`data-yii-debug-theme`,e),r(e),D(e),A(e),t&&t(e)})}function T(e=x){try{return window.localStorage?S(localStorage.getItem(e)):null}catch{return null}}function E(){let e=`${x}=`,t=(document.cookie||``).split(`;`).map(e=>e.trim()).find(t=>t.startsWith(e));if(!t)return null;try{return S(decodeURIComponent(t.slice(e.length)))}catch{return null}}function D(e){let t=S(e);if(t){try{localStorage.setItem(x,t)}catch{}try{document.cookie=`${x}=${encodeURIComponent(t)};path=/;max-age=31536000;SameSite=Lax`}catch{}}}function O(e){let t;try{t=new URL(e,window.location.href)}catch{return null}if(t.origin!==window.location.origin)return null;let n=t.searchParams.get(`r`)||``;return!t.pathname.includes(`/debug/`)&&!t.pathname.endsWith(`/debug`)&&!n.startsWith(`debug/`)&&!n.startsWith(`debug%2F`)?null:t}function k(e,t){let n=S(t);if(!n)return e;let r=O(e);return r?(r.searchParams.set(b,n),r.href):e}function A(e){let t=document.querySelectorAll(`a[href]`),n=document.querySelectorAll(`form[action]`),r;for(let n=0;ni.map(i=>d[i]); +import{a as e}from"./focus.min.js";(function(){var e=document.querySelector(`[data-yii-debug-history-cursor]`);if(!e)return;var t=Array.prototype.slice.call(document.querySelectorAll(`tr[data-yii-debug-tag]`));if(t.length===0)return;var n=[`2xx`,`3xx`,`4xx`,`5xx`,`none`],r=[`get`,`post`,`put`,`delete`,`other`],i=e.getAttribute(`data-yii-debug-cursor-init`)||``,a=0;if(i!==``){for(var o=0;o=500?`5xx`:e>=400?`4xx`:e>=300?`3xx`:e>=200?`2xx`:`none`}function u(e){var t=(e||``).toUpperCase();return t===`GET`||t===`HEAD`?`get`:t===`POST`?`post`:t===`PUT`||t===`PATCH`?`put`:t===`DELETE`?`delete`:`other`}function d(){t.forEach(function(e,t){e.classList.toggle(`is-cursor`,t===a)});var i=c(t[a]);e.querySelectorAll(`[data-snapshot-field]`).forEach(function(e){var t=e.getAttribute(`data-snapshot-field`);t===`method`?(e.textContent=i.method,r.forEach(function(t){e.classList.remove(`yii-debug-verb-`+t)}),e.classList.add(`yii-debug-verb-`+u(i.method))):t===`url`?(e.textContent=i.url,i.fullUrl&&e.setAttribute(`title`,i.fullUrl)):t===`status`?(e.textContent=i.status?String(i.status):`–`,n.forEach(function(t){e.classList.remove(`yii-debug-status-`+t)}),e.classList.add(`yii-debug-status-`+l(i.status))):t===`time`?(e.textContent=i.time,e.hidden=i.time===``):t===`ajax`&&(e.hidden=!i.ajax)});var o=e.querySelector(`.yii-debug-history-card`);o&&o.setAttribute(`title`,(i.method+` `+(i.fullUrl||i.url)).trim());var s=e.querySelector(`[data-yii-debug-cursor="newest"]`),d=e.querySelector(`[data-yii-debug-cursor="newer"]`),f=e.querySelector(`[data-yii-debug-cursor="older"]`),p=e.querySelector(`[data-yii-debug-cursor="oldest"]`),m=a===0,h=a===t.length-1;s&&(s.disabled=m),d&&(d.disabled=m),f&&(f.disabled=h),p&&(p.disabled=h)}function f(e){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(!(t.top>=0&&t.bottom<=n)){var r=window.scrollY+t.top-n/2+t.height/2;window.scrollTo({top:Math.max(0,r),behavior:`smooth`})}}function p(e){e<0||e>=t.length||e===a||(a=e,d(),f(t[a]))}e.addEventListener(`click`,function(n){var r=n.target.closest(`[data-yii-debug-cursor]`);if(r&&e.contains(r)){if(n.preventDefault(),r.disabled)return;var i=r.getAttribute(`data-yii-debug-cursor`);i===`newer`?p(a-1):i===`older`?p(a+1):i===`newest`?p(0):i===`oldest`&&p(t.length-1)}}),d(),a!==0&&f(t[a])})();var t=0;function n(e,t){var n=(e.getAttribute(`aria-describedby`)||``).split(/\s+/).filter(Boolean);n.indexOf(t)===-1&&(n.push(t),e.setAttribute(`aria-describedby`,n.join(` `)))}function r(e){var r=e.ownerDocument.createElement(`span`);return t+=1,r.id=`yii-debug-copy-status-`+t,r.className=`yii-debug-sr-only`,r.setAttribute(`aria-atomic`,`true`),r.setAttribute(`aria-live`,`polite`),r.setAttribute(`data-yii-debug-copy-status`,`true`),e.after(r),n(e,r.id),r}function i(e){for(var t=(e.getAttribute(`aria-describedby`)||``).split(/\s+/).filter(Boolean),n=e.ownerDocument,i=0;i1?decodeURIComponent(t.slice(1)):``}catch{return``}}function l(e){return String(e||``).normalize(`NFKD`).replace(/[\u0300-\u036f]/g,``).toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`section`}function u(e){function t(e){return e.nodeType===3?e.textContent||``:e.nodeType!==1||e.matches&&e.matches(`.yii-debug-section-count, .yii-debug-badge, .yii-debug-panel-heading-kind, .yii-debug-heading-permalink, [data-yii-debug-count], [aria-hidden="true"]`)?``:Array.from(e.childNodes||[]).map(t).join(` `)}return(Array.from(e.childNodes||[]).map(t).join(` `)||e.textContent||``).replace(/\s+/g,` `).trim()}function d(e,t,n){for(var r=t,i=2;e.getElementById(r)&&e.getElementById(r)!==n;)r=t+`-`+i,i+=1;return r}function f(e){for(var t=e.querySelectorAll(`#yii-debug-main h2, #yii-debug-main h3`),n=0,r=0;r0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=w(t,n),t=s(t),t in T)return;T[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:C,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},D=Object.freeze({db:`.yii-debug-db-explain-toggle, [data-yii-debug-n1-filter]`,phpinfo:`[data-yii-debug-phpinfo-search]`,userswitch:`#debug-userswitch__filter, #debug-userswitch__reset-identity-button`}),O={db:()=>E(()=>import(`./db.min.js`),__vite__mapDeps([0,1]),import.meta.url),phpinfo:()=>E(()=>import(`./phpinfo-search.min.js`),[],import.meta.url),userswitch:()=>E(()=>import(`./userswitch.min.js`),__vite__mapDeps([2,1]),import.meta.url)};function k(e,t=O){var n=[];return Object.keys(D).forEach(function(r){e.querySelector(D[r])&&n.push(Promise.resolve().then(t[r]))}),Promise.all(n)}function A(e,t){return e&&e.nodeType!==1&&(e=e.parentElement),e&&typeof e.closest==`function`?e.closest(t):null}function j(e){var t=typeof e==`string`?new URL(e).hash:e&&e.hash?e.hash:``;if(!t||t===`#`)return``;try{return decodeURIComponent(t.slice(1))}catch{return``}}function M(e,t){var n=e.getAttribute(`aria-controls`);if(!n){var r=e.getAttribute(`href`)||``;n=r.charAt(0)===`#`?r.slice(1):``}return n&&t.getElementById?t.getElementById(n):null}function N(e,t){var n=M(e,t);if(!n)return!1;var r=A(e,`.yii-debug-tabs`),i=n.parentElement,a=r?r.querySelectorAll(`[data-yii-debug-toggle="tab"]`):[],o=i?i.children:[],s;for(s=0;s[`dark`,`night`,`black`].includes(e));return n===t.some(e=>[`light`,`day`,`white`].includes(e))?null:n?`dark`:`light`}function B(e){return z(e)===`dark`?`Switch to light theme`:`Switch to dark theme`}function V(e,t){if(!e)return;let n=e.querySelector(`.yii-debug-brand-icon`),r=t=>{let r=z(t)||`light`,i=B(r);e.setAttribute(`data-current-theme`,r),e.setAttribute(`aria-label`,i),e.setAttribute(`aria-pressed`,r===`dark`?`true`:`false`),e.setAttribute(`title`,i),n&&(n.innerHTML=r===`dark`?e.getAttribute(`data-icon-sun`):e.getAttribute(`data-icon-moon`))};r(z(document.documentElement.getAttribute(`data-yii-debug-theme`))),e.addEventListener(`click`,()=>{let e=z(document.documentElement.getAttribute(`data-yii-debug-theme`))===`dark`?`light`:`dark`;document.documentElement.setAttribute(`data-yii-debug-theme`,e),r(e),W(e),q(e),t&&t(e)})}function H(e=R){try{return window.localStorage?z(localStorage.getItem(e)):null}catch{return null}}function U(){let e=`${R}=`,t=(document.cookie||``).split(`;`).map(e=>e.trim()).find(t=>t.startsWith(e));if(!t)return null;try{return z(decodeURIComponent(t.slice(e.length)))}catch{return null}}function W(e){let t=z(e);if(t){try{localStorage.setItem(R,t)}catch{}try{document.cookie=`${R}=${encodeURIComponent(t)};path=/;max-age=31536000;SameSite=Lax`}catch{}}}function G(e){let t;try{t=new URL(e,window.location.href)}catch{return null}if(t.origin!==window.location.origin)return null;let n=t.searchParams.get(`r`)||``;return!t.pathname.includes(`/debug/`)&&!t.pathname.endsWith(`/debug`)&&!n.startsWith(`debug/`)&&!n.startsWith(`debug%2F`)?null:t}function K(e,t){let n=z(t);if(!n)return e;let r=G(e);return r?(r.searchParams.set(L,n),r.href):e}function q(e){let t=document.querySelectorAll(`a[href]`),n=document.querySelectorAll(`form[action]`),r;for(let n=0;n1);i.setAttribute(`aria-controls`,r.id),i.textContent=e[n].classList.contains(`is-open`)?`Show less`:`Show more`}}}function d(e){for(var t=e.closest(`header, .yii-debug-section-header`)||e,n=t.nextElementSibling;n&&!n.matches(`[data-yii-debug-filter-target]`);)n=n.nextElementSibling;if(n){for(var r=n.querySelectorAll(`tbody tr`),i=e.value.trim().toLowerCase(),a=0,o=0;o0?a[0]:null;!o||o.tagName!==`INPUT`||(o.focus({preventScroll:!0}),typeof o.setSelectionRange==`function`&&o.setSelectionRange(n.start,n.end))}}}function s(e){if(r(e)){var t=new URL(window.location.href);e.value===``||e.value===null?t.searchParams.delete(e.name):t.searchParams.set(e.name,e.value),t.searchParams.delete(`page`),t.toString()!==window.location.href&&(a(e),document.documentElement.setAttribute(`aria-busy`,`true`),window.location.href=t.toString())}}function c(e){n&&clearTimeout(n.timeout),n={input:e,timeout:setTimeout(function(){var e=n;n=null,s(e.input)},650)}}function l(){if(!n)return!1;clearTimeout(n.timeout);var e=n.input;return n=null,s(e),!0}document.addEventListener(`change`,function(e){r(e.target)&&(n&&n.input===e.target&&(clearTimeout(n.timeout),n=null),(e.target.tagName===`SELECT`||e.target.tagName===`INPUT`)&&s(e.target))}),document.addEventListener(`input`,function(e){e.target.tagName===`INPUT`&&e.target.type!==`submit`&&r(e.target)&&c(e.target)}),document.addEventListener(`keydown`,function(e){e.key===`Enter`&&e.target.tagName===`INPUT`&&e.target.type!==`submit`&&r(e.target)&&(e.preventDefault(),l()||s(e.target))}),document.addEventListener(`focusout`,function(e){e.target.tagName===`INPUT`&&e.target.type!==`submit`&&r(e.target)&&n&&n.input===e.target&&l()}),o()})(),m(document,window),I(document,window),s(document,window.navigator?window.navigator.clipboard:null,window.location),k(document).catch(function(){document.documentElement.setAttribute(`data-yii-debug-feature-load-error`,`true`);var e=document.createElement(`div`);e.className=`yii-debug-callout yii-debug-callout-danger`,e.setAttribute(`role`,`alert`),e.textContent=`An interactive debugger feature failed to load. Reload the page and try again.`;var t=document.getElementById(`yii-debug-main`);t&&t.prepend(e)})})(); \ No newline at end of file diff --git a/resources/assets/dist/js/dom.min.js b/resources/assets/dist/js/dom.min.js new file mode 100644 index 0000000..0f56932 --- /dev/null +++ b/resources/assets/dist/js/dom.min.js @@ -0,0 +1 @@ +function e(e,t,n){if(e!=null)for(var r=typeof NodeList<`u`&&e instanceof NodeList||Array.isArray(e)?e:[e],i=0;i=0?t.timeout:3e4,n.onreadystatechange=function(){n.readyState===4&&(n.status>=200&&n.status<300?a():o())},n.ontimeout=o,n.onabort=function(){i||(i=!0,t.abort&&t.abort(n))},n.send(t.data||``),n}export{e as n,t}; \ No newline at end of file diff --git a/resources/assets/dist/js/phpinfo-search.min.js b/resources/assets/dist/js/phpinfo-search.min.js new file mode 100644 index 0000000..5c5be24 --- /dev/null +++ b/resources/assets/dist/js/phpinfo-search.min.js @@ -0,0 +1 @@ +function e(e){return Array.prototype.slice.call(e)}function t(e){return String(e||``).trim().toLowerCase()}function n(e,n,r){return t(e).indexOf(r)!==-1||t(n).indexOf(r)!==-1}function r(e,t,n){return e+` `+(e===1?t:n)}function i(e,t,n){var i=[];return t>0&&i.push(r(t,`module`,`modules`)),n>0&&i.push(r(n,`extension`,`extensions`)),e>0&&i.push(r(e,`matching row`,`matching rows`)),i.join(` · `)}function a(e,t){return e+` of `+t}function o(e,t,n){var r=n===null?e:e.filter(function(e){return!!n[e]});return{hidden:r.length===0,open:n===null?e.indexOf(t)!==-1:r.length>0}}function s(e,t){e.hidden=t,e.parentElement&&e.parentElement.tagName===`LI`&&(e.parentElement.hidden=t)}function c(e){e.hidden=!1;var t=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(t){var n=t.getAttribute(`data-yii-debug-phpinfo-total`);n===null&&(n=t.textContent.trim(),t.setAttribute(`data-yii-debug-phpinfo-total`,n)),t.textContent=n}e.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(e.open=e.getAttribute(`data-yii-debug-phpinfo-default-open`)===`true`)}function l(e,t){var n=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(n){var r=n.getAttribute(`data-yii-debug-phpinfo-total`);r===null&&(r=n.textContent.trim(),n.setAttribute(`data-yii-debug-phpinfo-total`,r)),n.textContent=a(t,r)}}function u(t){e(t.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(e){c(e)}),e(t.querySelectorAll(`tr`)).forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)})}function d(t){t.forEach(function(t){e(t.querySelectorAll(`.yii-debug-phpinfo-table-section.is-directives tr`)).forEach(function(t){if(!t.classList.contains(`h`)){var n=t.querySelector(`th[scope="row"]`),r=e(t.querySelectorAll(`td`));n!==null&&r.length===2&&r[0].textContent.trim()!==r[1].textContent.trim()&&(t.classList.add(`has-local-override`),r[0].title=`Local value differs from master value`)}})})}function f(r){var c=r.querySelector(`[data-yii-debug-phpinfo-search]`),f=r.querySelector(`[data-yii-debug-phpinfo-clear]`),p=r.querySelector(`[data-yii-debug-phpinfo-status]`),m=r.querySelector(`[data-yii-debug-phpinfo-empty]`),h=e(r.querySelectorAll(`.yii-debug-phpinfo-section`)),g=e(r.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)),_=e(r.querySelectorAll(`.yii-debug-phpinfo-extension-group`)),v=r.querySelector(`[data-yii-debug-phpinfo-extensions]`),y=e(r.querySelectorAll(`#phpinfo-overview .yii-debug-phpinfo-overview-hero-section:not(.yii-debug-phpinfo-extensions)`)),b=r.querySelector(`#phpinfo-overview > .yii-debug-disclosure`),x=e(r.querySelectorAll(`.yii-debug-phpinfo-toc-link`)),S=e(r.querySelectorAll(`[data-yii-debug-phpinfo-toc-group]`)),C=Object.create(null),w=Object.create(null),T=!1,E=!1,D,O;if(!h.length)return;h.forEach(function(e){e.id!==``&&(C[e.id]=e)}),g.forEach(function(e){w[e.id]=e});function k(){g.forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)}),_.forEach(function(e){e.hidden=!1;var t=e.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);t&&(t.textContent=t.getAttribute(`data-yii-debug-phpinfo-total`))}),y.forEach(function(e){e.hidden=!1}),b&&(b.hidden=!1)}function A(){E||=(T=v?v.open:!1,!0)}function j(){E&&=(v&&(v.open=T),!1)}function M(t,n){x.forEach(function(e){var r=e.getAttribute(`data-toc-target`)||``,i=r===t;e.classList.toggle(`is-active`,i),i?e.setAttribute(`aria-current`,`page`):e.removeAttribute(`aria-current`),s(e,n!==null&&!n[r])}),S.forEach(function(r){var i=o(e(r.querySelectorAll(`.yii-debug-phpinfo-toc-link`)).map(function(e){return e.getAttribute(`data-toc-target`)||``}),t,n);r.hidden=i.hidden,r.open=i.open})}function N(){k(),h.forEach(function(e){u(e),e.hidden=e.id!==O}),M(O,null),p&&(p.textContent=``),m&&(m.hidden=!0),f&&(f.hidden=!0)}function P(e){!window.history||!window.history.replaceState||window.history.replaceState(null,``,`#`+e)}function F(e,t){j(),O=C[e]?e:h[0].id,c&&(c.value=``),N(),t&&P(O)}function I(){var r=t(c?c.value:``);if(!r){j(),N();return}A();var o=Object.create(null),s=0,d=0,x=0;k(),h.forEach(function(i){u(i);var c=t(i.getAttribute(`data-section`)).indexOf(r)!==-1,f=0,p=0;c?d++:i.id===`phpinfo-overview`?(g.forEach(function(e){var t=n(e.getAttribute(`data-section`),e.textContent,r);e.hidden=!t,e.classList.toggle(`is-search-match`,t),t&&p++}),_.forEach(function(t){var n=e(t.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)).filter(function(e){return!e.hidden}),r=t.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);t.hidden=n.length===0,r&&n.length>0&&(r.textContent=a(n.length,r.getAttribute(`data-yii-debug-phpinfo-total`)))}),v&&(v.open=p>0),y.forEach(function(e){e.hidden=!0}),b&&(b.hidden=!0)):i.classList.contains(`yii-debug-phpinfo-module`)&&e(i.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(n){var i=e(n.querySelectorAll(`tr`)),a=i.filter(function(e){var n=e.querySelector(`th[scope="row"], th.e, td.e`);return n!==null&&t(n.textContent).indexOf(r)!==-1});n.hidden=a.length===0,f+=a.length,l(n,a.length),n.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(n.open=a.length>0);var o=new Set(a);i.forEach(function(e){var t=o.has(e),n=e.classList.contains(`h`);e.hidden=!t&&!(n&&a.length>0),e.classList.toggle(`is-search-match`,t)})});var m=c||f>0||p>0;i.hidden=!m,m&&(o[i.id]=!0),s+=f,x+=p}),M(``,o),p&&(p.textContent=i(s,d,x)),m&&(m.hidden=s+d+x!==0),f&&(f.hidden=!1)}function L(){window.clearTimeout(D),c&&(c.value=``,c.focus()),j(),N()}function R(e,t){F(`phpinfo-overview`,!1),v&&(v.open=!0),t&&e&&typeof e.scrollIntoView==`function`&&window.setTimeout(function(){e.scrollIntoView({behavior:`smooth`,block:`center`})},0)}d(h);var z=window.location.hash.replace(/^#/,``),B=w[z]||null;O=C[z]?z:B?`phpinfo-overview`:h[0].id,N(),B&&R(B,!0),c&&(c.addEventListener(`input`,function(){window.clearTimeout(D),D=window.setTimeout(I,120)}),c.addEventListener(`keydown`,function(e){e.key===`Escape`&&c.value!==``&&(e.preventDefault(),L())})),f&&f.addEventListener(`click`,L),x.forEach(function(e){e.addEventListener(`click`,function(t){var n=e.getAttribute(`data-toc-target`)||``;C[n]&&(t.preventDefault(),F(n,!0))})}),window.addEventListener(`hashchange`,function(){var e=window.location.hash.replace(/^#/,``);C[e]?F(e,!1):w[e]&&R(w[e],!0)})}typeof document<`u`&&f(document);export{a as formatPhpInfoFilteredCount,i as formatPhpInfoSearchStatus,f as initPhpInfoSearch,n as matchesPhpInfoCompactModule,t as normalizePhpInfoQuery,o as resolvePhpInfoTocGroupState}; \ No newline at end of file diff --git a/resources/assets/dist/js/toolbar.min.js b/resources/assets/dist/js/toolbar.min.js index 639f7b9..3c94956 100644 --- a/resources/assets/dist/js/toolbar.min.js +++ b/resources/assets/dist/js/toolbar.min.js @@ -1 +1 @@ -import{i as e,n as t,o as n,r,t as i}from"./focus.min.js";var a=`yii-debug-toolbar`,o=`yii-debug-toolbar-expanded`,s=`yii_debug_theme`,c=`yii-debug-toolbar-theme`,l=[],u=[],d=[`class`,`data-theme`,`data-bs-theme`,`data-yii-debug-theme`,`data-color-mode`,`data-mode`,`data-theme-mode`],f=XMLHttpRequest.prototype.open,p=window.fetch;function m(e){try{var t=window.localStorage;return t?t.getItem(e):null}catch{return null}}function h(e,t){try{var n=window.localStorage;return n?(n.setItem(e,t),!0):!1}catch{return!1}}function g(e){return String(e??``).replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function _(e,t,n){var r=e.getAttribute(t);if(!r)return n;try{return JSON.parse(r)}catch{return n}}function v(e){try{return new URL(e,window.location.href)}catch{return null}}function y(e,t){var n=v(e),r=v(t);return n!==null&&r!==null&&n.href===r.href}function ee(){return u.length?u[0]:document.querySelector(a)}function b(e,t){for(e&&e.nodeType!==1&&(e=e.parentElement);e&&e.nodeType===1;){if(e.matches(t))return e;e=e.parentElement}return null}var x;function S(e){if(!e)return null;var t=String(e).toLowerCase().trim().split(/\s+/),n=[`dark`,`night`,`black`],r=[`light`,`day`,`white`],i=t.some(function(e){return n.indexOf(e)!==-1});return i===t.some(function(e){return r.indexOf(e)!==-1})?null:i?`dark`:`light`}function C(e){var t=[`data-yii-debug-theme`,`data-bs-theme`,`data-theme`,`data-color-mode`,`data-mode`,`data-theme-mode`],n,r,i;if(!e)return null;for(r=0;r0))return x=r,x;return x=null,x}function D(){return E()!==null}function O(e,t){var n=E();return!n||typeof n.click!=`function`?!1:(e!==t&&n.click(),!0)}function k(e){if(e)try{document.cookie=c+`=`+encodeURIComponent(e)+`;path=/;max-age=31536000;SameSite=Lax`}catch{}}function A(e,t){var n=v(e);if(!n||!t||n.origin!==window.location.origin)return e;var r=n.searchParams.get(`r`)||``;return n.pathname.indexOf(`/debug/`)===-1&&r.indexOf(`debug/`)!==0&&r.indexOf(`debug%2F`)!==0?e:(n.searchParams.set(s,t),n.href)}var j=Object.freeze({ajax:``,asset:``,"chevron-left":``,"chevron-right":``,clock:``,close:``,config:``,db:``,dots:``,dump:``,events:``,"external-link":``,identity:``,inertia:``,logs:``,mail:``,moon:``,"php-alt":``,profiling:``,queue:``,request:``,router:``,security:``,sun:``,timeline:``,user:``});function M(e){var t=j[e];return t?`data:image/svg+xml,`+encodeURIComponent(t):``}var N=Object.freeze([75,150,300,600,900]);function ne(e,t){return e!==404||!Number.isInteger(t)||t<0||t>=N.length?null:N[t]}function re(e,t){return typeof t==`number`?t:e+1}function P(e,t){return e===t}function F(e,t,n,r){var i=!!e;return{url:i?e:n,tag:i?t:r,reload:!i}}function I(e,t,n){if(!e||!t)return null;var r;try{r=new URL(e,n)}catch{return null}return r.searchParams.set(`tag`,t),r.href}function L(e,t,n,r){var i=n+(e?``+r(e)+``:``),a=e?`Yii `+e+` — open configuration`:`Open configuration`;if(!t)return``+i+``;var o=r(t);return``+i+``}function R(e,t,n,r){var i=n+``+r(e)+``;return t?``+i+``:``+i+``}function z(e){return e.some(function(e){return!!e.url})}function B(e,t,n,r){return t?``+r(e)+``:`n/a`}function V(e,t,n){return e?` href="`+n(t)+`" data-debug-url="`+n(e)+`"`:``}function H(e){return e.url&&!z(e.items)?`a`:`div`}function U(e){return e.url?`a`:`span`}function W(e,t){return!!(t&&e.button!==1&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey)}function G(e){return e===`top`||e===`upper`?`top`:`bottom`}function K(e,t,n,r){var i=G(e)===`top`;return r===null?i?t:n-t:i?t-r.top:r.bottom-t}function q(e,t,n,r,i=24){var a=120,o=Math.max(a,r-48);if(t===`Home`)return a;if(t===`End`)return o;if(t!==`ArrowUp`&&t!==`ArrowDown`)return null;var s=G(e)===`top`,c=n+(s&&t===`ArrowDown`||!s&&t===`ArrowUp`?i:-i);return Math.max(a,Math.min(o,c))}var J=`: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-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,#0e8a5f)var(--lightningcss-dark,#7fe4b8);--yii-debug-panel-primary:var(--lightningcss-light,#0e7a55)var(--lightningcss-dark,#2fd08c);--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,#128a50)var(--lightningcss-dark,#34c97e);--yii-debug-warning:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#e8a33d);--yii-debug-danger:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-info:var(--lightningcss-light,#2467a8)var(--lightningcss-dark,#5fa8e8);--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-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}:host{--yii-debug-toolbar-drawer-height:50vh;--accent-wash-strong:var(--lightningcss-light,#0e7a5524)var(--lightningcss-dark,#2fd08c29);--accent-wash-soft:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c1a);all:initial;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;z-index:2147483647;font-family:var(--yii-debug-font-sans);color:var(--yii-debug-panel-text);direction:ltr;font-size:12px;line-height:1.35;position:fixed;bottom:16px;right:16px}@media (prefers-color-scheme:dark){:host{--lightningcss-light: ;--lightningcss-dark:initial}}:focus-visible{outline:3px solid var(--yii-debug-focus-ring);outline-offset:3px}:host([data-position=top]),:host([data-position=upper]){top:16px;bottom:auto}:host([data-theme=dark]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:host([data-theme=light]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.toolbar{max-width:calc(100vw - 32px)}.bar{border:1px solid var(--yii-debug-panel-border);max-width:100%;box-shadow:var(--lightningcss-light,0 20px 60px #16211a2e)var(--lightningcss-dark,0 20px 60px #0006), 0 1px 0 var(--lightningcss-light,#ffffffd9)var(--lightningcss-dark,#ffffff0f) inset;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-sizing:border-box;background:var(--lightningcss-light,#fffffff5)var(--lightningcss-dark,#0d130ff2);border-radius:18px;align-items:center;gap:8px;padding:7px;display:flex;position:relative}.expanded .bar{border-radius:16px;width:calc(100vw - 32px);overflow:visible}.drawer-open .bar{border-bottom-color:#0000;border-radius:16px 16px 0 0}.brand{border:1px solid var(--yii-debug-panel-border);min-height:32px;color:var(--yii-debug-panel-text);background:linear-gradient(135deg, var(--accent-wash-strong), var(--lightningcss-light,#ffffffeb)var(--lightningcss-dark,#101813e0) 55%);white-space:nowrap;box-sizing:border-box;border-radius:999px;flex:none;align-items:center;gap:0;padding:3px 8px;text-decoration:none;transition:transform .16s,border-color .16s,box-shadow .16s;display:inline-flex;box-shadow:inset 0 1px var(--lightningcss-light,#ffffffd9)var(--lightningcss-dark,#ffffff14)}.brand:hover,.brand:focus{border-color:var(--yii-debug-panel-primary);transform:translateY(-1px);box-shadow:inset 0 1px var(--lightningcss-light,#ffffffe6)var(--lightningcss-dark,#ffffff1a),0 0 0 3px var(--lightningcss-light,#0e7a551f)var(--lightningcss-dark,#2fd08c24)}.brand-opener{cursor:pointer}.brand img,.brand-mark{flex:none;justify-content:center;align-items:center;width:18px;height:18px;display:inline-flex}.brand img{object-fit:contain}.brand-mark{background:linear-gradient(135deg, var(--yii-debug-panel-primary), var(--yii-debug-success));color:#fff;border-radius:999px;font-weight:800;box-shadow:inset 0 0 0 1px #ffffff29}.brand-text{display:none}.brand-link{color:var(--yii-debug-panel-text);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:10px;align-items:center;gap:6px;padding:2px 6px;text-decoration:none;transition:background .12s;display:inline-flex}.brand-link:hover,.brand-link:focus{color:var(--yii-debug-panel-text);background:var(--lightningcss-light,#16211a0f)var(--lightningcss-dark,#ffffff14);text-decoration:none}.brand-static,.brand-static:hover{cursor:default;background:0 0}.brand-divider{background:var(--yii-debug-panel-border-strong);width:1px;height:18px;margin:0 4px;display:inline-block}.brand-version{border:1px solid var(--yii-debug-panel-border);min-height:18px;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);letter-spacing:.01em;white-space:nowrap;background:var(--lightningcss-light,#16211a0d)var(--lightningcss-dark,#ffffff14);border-radius:999px;align-items:center;padding:0 7px;font-size:12px;font-weight:700;line-height:18px;display:inline-flex}.opener-icon{width:20px;height:24px;color:var(--yii-debug-panel-primary);justify-content:center;align-items:center;font-size:20px;font-weight:750;line-height:1;display:inline-flex}.panels{scrollbar-width:none;align-items:center;gap:6px;min-width:0;display:none;overflow:auto hidden}.panels::-webkit-scrollbar{width:0;height:0;display:none}.expanded .panels{flex:1;display:flex}.panel{border:1px solid var(--yii-debug-panel-border);max-width:260px;min-height:32px;color:var(--yii-debug-panel-text);white-space:nowrap;box-sizing:border-box;cursor:default;font:inherit;background:var(--lightningcss-light,#ffffffe0)var(--lightningcss-dark,#141d17d1);border-radius:999px;align-items:center;gap:6px;padding:3px 10px;text-decoration:none;transition:background-color .16s,border-color .16s,box-shadow .16s;display:inline-flex;position:relative;box-shadow:inset 0 1px var(--lightningcss-light,#fffc)var(--lightningcss-dark,#ffffff0f)}.panel[data-debug-url]{cursor:pointer}.panel[data-debug-url]:hover,.panel[data-debug-url]:focus,.panel:focus-within,.panel-active{border-color:var(--yii-debug-panel-primary);box-shadow:0 1px 0 var(--lightningcss-light,#ffffffdb)var(--lightningcss-dark,#ffffff14) inset, 0 0 0 3px var(--accent-wash-soft);background:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c1f)}.panel:has(.panel-link:hover){border-color:var(--yii-debug-panel-primary);box-shadow:0 1px 0 var(--lightningcss-light,#ffffffdb)var(--lightningcss-dark,#ffffff14) inset, 0 0 0 3px var(--accent-wash-soft);background:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c1f)}.panel-active{background:var(--lightningcss-light,#0e7a5529)var(--lightningcss-dark,#2fd08c2e)}.panel-link{min-width:0;color:inherit;align-items:center;gap:6px;text-decoration:none;display:inline-flex}.panel-title{letter-spacing:.005em;color:var(--yii-debug-panel-text);text-overflow:ellipsis;font-weight:600;overflow:hidden}.metric{min-width:0;color:inherit;align-items:center;gap:5px;text-decoration:none;display:inline-flex}.metric[data-debug-url]{cursor:pointer}.metric-label{color:var(--yii-debug-panel-muted);font-size:12px}.metric-icon,.panel-icon{background-color:currentColor;flex:none;width:14px;height:14px;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.panel-icon{color:var(--yii-debug-panel-primary);margin-right:2px}.metric-icon{color:var(--yii-debug-panel-muted)}.panel-icon-php{color:var(--lightningcss-light,#4f5b93)var(--lightningcss-dark,#a3aedb);width:32px}.metric-value{border:1px solid var(--yii-debug-panel-border);min-height:18px;color:var(--yii-debug-panel-text);background:var(--yii-debug-panel-pill);font-family:var(--yii-debug-font-mono);font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;padding:0 7px;font-size:12px;font-weight:700;line-height:18px;display:inline-flex;box-shadow:inset 0 1px var(--lightningcss-light,#ffffffd1)var(--lightningcss-dark,#ffffff14)}.badge{border:1px solid var(--yii-debug-panel-border);min-height:18px;font-family:var(--yii-debug-font-mono);font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;padding:0 7px;font-size:12px;font-weight:700;line-height:18px;display:inline-flex}.metric[data-debug-url]:hover .metric-value,.metric[data-debug-url]:focus .metric-value,.metric-active .metric-value{box-shadow:0 0 0 3px var(--accent-wash-strong), 0 1px 0 var(--lightningcss-light,#ffffffd1)var(--lightningcss-dark,#ffffff14) inset}.badge-status-2xx,.badge-success{--badge-hue:var(--yii-debug-status-2xx)}.badge-status-3xx{--badge-hue:var(--yii-debug-status-3xx)}.badge-status-4xx{--badge-hue:var(--yii-debug-status-4xx)}.badge-status-5xx{--badge-hue:var(--yii-debug-status-5xx)}.badge-info,.badge-loading{--badge-hue:var(--yii-debug-info)}.badge-warning{--badge-hue:var(--yii-debug-warning)}.badge-danger{--badge-hue:var(--yii-debug-danger)}.badge-cross-request{--badge-hue:var(--yii-debug-cat-mail)}.badge-status-2xx,.badge-status-3xx,.badge-status-4xx,.badge-status-5xx,.badge-success,.badge-info,.badge-loading,.badge-warning,.badge-danger,.badge-cross-request{border-color:color-mix(in srgb, var(--badge-hue), transparent 65%);background:color-mix(in srgb, var(--badge-hue), transparent 90%);color:color-mix(in srgb, var(--badge-hue) 80%, var(--yii-debug-panel-text))}.verb-get{color:color-mix(in srgb, var(--yii-debug-verb-get) 80%, var(--yii-debug-panel-text))}.verb-post{color:color-mix(in srgb, var(--yii-debug-verb-post) 80%, var(--yii-debug-panel-text))}.verb-put{color:color-mix(in srgb, var(--yii-debug-verb-put) 80%, var(--yii-debug-panel-text))}.verb-delete{color:color-mix(in srgb, var(--yii-debug-verb-delete) 80%, var(--yii-debug-panel-text))}.verb-other{color:color-mix(in srgb, var(--yii-debug-verb-other) 80%, var(--yii-debug-panel-text))}.badge-default{background:var(--yii-debug-panel-pill);color:var(--yii-debug-panel-text)}.ajax-panel{display:none;position:static}.expanded .ajax-panel{display:inline-flex}.ajax-popover{border:1px solid var(--yii-debug-panel-border);width:min(680px,100vw - 32px);max-height:360px;box-shadow:var(--lightningcss-light,0 20px 60px #16211a29)var(--lightningcss-dark,0 20px 60px #00000073);box-sizing:border-box;background:var(--lightningcss-light,#fffffffa)var(--lightningcss-dark,#0d130ffa);border-radius:16px;padding:10px;display:none;position:absolute;bottom:calc(100% + 10px);right:0;overflow:auto}.position-top .ajax-popover{top:calc(100% + 10px);bottom:auto}.ajax-panel:hover .ajax-popover,.ajax-panel:focus-within .ajax-popover{display:block}.ajax-popover table{border-spacing:0;border-collapse:collapse;width:100%;color:var(--yii-debug-panel-text)}.ajax-popover th,.ajax-popover td{border-bottom:1px solid var(--yii-debug-panel-border);text-align:left;vertical-align:top;padding:6px 8px}.ajax-popover th{color:var(--yii-debug-panel-muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px}.ajax-url{text-overflow:ellipsis;white-space:nowrap;max-width:280px;overflow:hidden}.ajax-link{color:var(--yii-debug-panel-link);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:none}.empty{color:var(--yii-debug-panel-muted);text-align:center}.controls{align-items:center;gap:4px;margin-left:auto;display:inline-flex}.control{border:1px solid var(--yii-debug-panel-border);width:34px;height:34px;color:var(--yii-debug-panel-text);cursor:pointer;box-sizing:border-box;background:var(--lightningcss-light,#ffffffe6)var(--lightningcss-dark,#18221bcc);border-radius:999px;justify-content:center;align-items:center;font:700 18px/1 ui-sans-serif,system-ui;text-decoration:none;transition:background-color .16s,border-color .16s,box-shadow .16s,color .16s;display:inline-flex;box-shadow:inset 0 1px var(--lightningcss-light,#ffffffd1)var(--lightningcss-dark,#ffffff0f)}.control:hover,.control:focus{border-color:var(--yii-debug-panel-primary);color:var(--yii-debug-panel-primary-strong);box-shadow:0 1px 0 var(--lightningcss-light,#ffffffe0)var(--lightningcss-dark,#ffffff14) inset, 0 0 0 3px var(--accent-wash-soft);background:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c24)}.control.disabled,.control.disabled:hover,.control.disabled:focus{border-color:var(--yii-debug-panel-border);box-shadow:none;color:var(--yii-debug-panel-muted);opacity:.6;cursor:default;background:var(--lightningcss-light,#16211a0a)var(--lightningcss-dark,#18221b80);transform:none}.control-icon{background-color:currentColor;flex:none;width:16px;height:16px;transition:transform .25s;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.toggle-theme:hover .control-icon{transform:rotate(20deg)}.drawer{width:calc(100vw - 32px);height:var(--yii-debug-toolbar-drawer-height);border:1px solid var(--yii-debug-panel-border);background:var(--yii-debug-panel-bg);box-shadow:var(--lightningcss-light,0 26px 70px #16211a2e)var(--lightningcss-dark,0 26px 70px #0000006b);box-sizing:border-box;border-top-color:#0000;border-radius:0 0 16px 16px;overflow:hidden}.drawer iframe{background:var(--yii-debug-panel-bg);border:0;width:100%;height:100%;display:block}.resize-handle{background:linear-gradient(90deg, transparent, var(--yii-debug-panel-primary) 30%, var(--yii-debug-success) 70%, transparent);opacity:.55;cursor:ns-resize;z-index:1;border:0;border-radius:999px;width:auto;height:6px;margin:0 18px -3px;padding:0;display:block;position:relative}.resize-handle:focus-visible{opacity:1}.position-top .resize-handle{margin:-3px 18px 0}.error-message{color:var(--yii-debug-danger);margin-left:8px}@media (max-width:767px){:host{bottom:8px;right:8px}.toolbar{max-width:calc(100vw - 16px)}.expanded .bar,.drawer{width:calc(100vw - 16px)}.expanded .bar{flex-wrap:wrap;align-items:flex-start}.expanded .panels{flex:0 0 100%;order:3;width:100%;padding-top:4px}.panel{max-width:100%}.drawer{height:min(var(--yii-debug-toolbar-drawer-height), 70vh)}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media print{:host{display:none!important}}`;function Y(){var e=Reflect.construct(HTMLElement,[],Y);return e.attachShadow({mode:`open`}),e.data=null,e.ajaxRequests=l,e.activeUrl=``,e.expanded=m(o)===`1`,e.drawerOpen=!1,e.restoreFocusUrl=null,e.resizing=!1,e.currentTag=null,e.lastLoadedTag=null,e.lastLoadedUrl=null,e.loadGeneration=0,e.boundPointerMove=e.onPointerMove.bind(e),e.boundPointerUp=e.onPointerUp.bind(e),e.boundHostThemeRefresh=e.refreshHostThemeControl.bind(e),e.boundThemeRefresh=e.refreshTheme.bind(e),e.theme=null,e.themeObserver=null,e.themeRefreshTimer=null,e.systemThemeQuery=null,e.ownsTheme=!1,e}Y.prototype=Object.create(HTMLElement.prototype),Y.prototype.constructor=Y,Object.setPrototypeOf(Y,HTMLElement),Y.prototype.connectedCallback=function(){u.indexOf(this)===-1&&u.push(this),T(),this.ownsTheme=!D(),this.refreshTheme(),this.watchTheme(),this.load(),window.addEventListener(`load`,this.boundHostThemeRefresh,!1),this.themeRefreshTimer=window.setTimeout(this.boundHostThemeRefresh,1500)},Y.prototype.disconnectedCallback=function(){var e=u.indexOf(this);e!==-1&&u.splice(e,1),this.themeObserver&&=(this.themeObserver.disconnect(),null),this.systemThemeQuery&&=(this.systemThemeQuery.removeEventListener?this.systemThemeQuery.removeEventListener(`change`,this.boundThemeRefresh):this.systemThemeQuery.removeListener&&this.systemThemeQuery.removeListener(this.boundThemeRefresh),null),window.removeEventListener(`storage`,this.boundThemeRefresh,!1),window.removeEventListener(`load`,this.boundHostThemeRefresh,!1),this.themeRefreshTimer!==null&&(window.clearTimeout(this.themeRefreshTimer),this.themeRefreshTimer=null),this.boundThemeMessage&&=(window.removeEventListener(`message`,this.boundThemeMessage,!1),null),this.resizing=!1,document.removeEventListener(`pointermove`,this.boundPointerMove,!1),document.removeEventListener(`pointerup`,this.boundPointerUp,!1)},Y.prototype.setAjaxRequests=function(e){this.ajaxRequests=e,this.render()},Y.prototype.detectTheme=function(){return C(document.documentElement)||C(document.body)||(this.ownsTheme?S(this.getAttribute(`data-yii-debug-theme`))||S(m(`yii-debug-toolbar-theme`))||te()||w()||(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`):w()||`light`)},Y.prototype.toggleTheme=function(){var e=this.theme===`dark`?`light`:`dark`;if(O(e,this.detectTheme())){this.refreshTheme(),i(this.shadowRoot,`.toggle-theme`);return}this.theme=e,this.setAttribute(`data-theme`,e),this.setAttribute(`data-yii-debug-theme`,e),h(c,e),k(e),this.propagateThemeToHost(e),this.render(),i(this.shadowRoot,`.toggle-theme`)},Y.prototype.propagateThemeToHost=function(e){var t=document.documentElement,n=e===`dark`?`light`:`dark`,r=[`theme`,`color-theme`,`color-scheme`,`vueuse-color-scheme`,`vite-ui-theme`],i;for(t&&(t.classList&&(t.classList.add(e),t.classList.remove(n)),t.setAttribute(`data-theme`,e),t.setAttribute(`data-bs-theme`,e),t.style.colorScheme=e),i=0;i
Yii Debugger`+g(e)+`
`},Y.prototype.getPosition=function(){return G(this.getAttribute(`data-position`)||this.data&&this.data.position)},Y.prototype.render=function(){if(this.data){this.ensureShadowSkeleton();var e=this.getPosition();this.setAttribute(`data-position`,e);var t=[`toolbar`,`position-`+e];this.expanded&&t.push(`expanded`),this.drawerOpen&&t.push(`drawer-open`);var n=(this.data.items||[]).find(function(e){return e&&e.id===`profiling`}),r=n?this.renderPanel(n):``;this.contentRoot.innerHTML=`
`+(this.expanded?this.renderBrand()+r+this.renderAjaxPanel()+this.renderPanels([`profiling`])+this.renderControls():this.renderCollapsedOpener())+`
`+this.renderDrawer(e)+`
`,this.bindEvents(),this.applyDrawerHeight()}},Y.prototype.renderLogo=function(){var e=this.data.logo||this.data.logoFallback;return e?``:`Y`},Y.prototype.renderCollapsedOpener=function(){var e=g(this.data.title||`Yii Debugger`);return``},Y.prototype.renderBrand=function(){var e=this.data.configUrl||this.data.indexUrl,t=L(this.data.yiiVersion,e?this.withTheme(e):null,this.renderLogo(),g),n=``;this.data.phpVersion&&(n=R(this.data.phpVersion,this.data.phpInfoUrl?this.withTheme(this.data.phpInfoUrl):null,this.iconHtml(`php-alt`,`panel-icon panel-icon-php`),g));var r=n?``:``;return`
`+t+r+n+`
`};function ie(e){if(e.loading)return`badge-loading`;var t=parseInt(e.statusCode,10);return t>=500?`badge-status-5xx`:t>=400?`badge-status-4xx`:t>=300?`badge-status-3xx`:t>=200?`badge-status-2xx`:`badge-danger`}function ae(e){var t=(e||``).toUpperCase();return t===`GET`||t===`HEAD`?`verb-get`:t===`POST`?`verb-post`:t===`PUT`||t===`PATCH`?`verb-put`:t===`DELETE`?`verb-delete`:`verb-other`}Y.prototype.renderAjaxPanel=function(){var e=`success`,t=this.ajaxRequests||[],n=t.slice(Math.max(0,t.length-20)),r=``,i=this.iconHtml(`ajax`,`panel-icon`);return t.forEach(function(n,r){n.loading?e=`loading`:n.error&&r>t.length-4&&(e=`danger`)}),n.forEach(function(e){var t=e.profilerUrl,n=B(e.profile,t,t?this.withTheme(t):null,g);r+=``+g(e.method||`GET`)+``+g(e.statusCode||`-`)+``+g(e.url)+``+g(e.duration?e.duration+` ms`:`-`)+``+n+``},this),r===``&&(r=`No AJAX requests tracked yet.`),`
`+i+`AJAX`+t.length+`
`+r+`
MethodStatusURLTimeProfile
`},Y.prototype.renderPanels=function(e){var t=``,n=this.data.items||[],r=e||[];return n.forEach(function(e){!e||r.indexOf(e.id)!==-1||(t+=this.renderPanel(e))},this),`
`+t+`
`},Y.prototype.isPanelActive=function(e){var t=e.items||[];if(!this.activeUrl)return!1;if(e.url&&y(e.url,this.activeUrl))return!0;for(var n=0;n