Changeset 3753587
- Timestamp:
- 10/18/2026 08:24:09 PM (2 weeks ago)
- Location:
- lumn-analytics
- Files:
-
- 2 added
- 22 edited
- 1 copied
-
tags/1.1.1 (copied) (copied from lumn-analytics/trunk )
-
tags/1.1.1/assets/dist/admin.css (modified) (1 diff)
-
tags/1.1.1/assets/dist/admin.js (modified) (1 diff)
-
tags/1.1.1/assets/src/admin.css (modified) (1 diff)
-
tags/1.1.1/assets/src/admin.js (modified) (3 diffs)
-
tags/1.1.1/includes/Admin/Admin.php (modified) (2 diffs)
-
tags/1.1.1/includes/Admin/UiRoutes.php (modified) (2 diffs)
-
tags/1.1.1/includes/Admin/View.php (modified) (1 diff)
-
tags/1.1.1/lumn.php (modified) (2 diffs)
-
tags/1.1.1/readme.txt (modified) (3 diffs)
-
tags/1.1.1/templates/partials/donate-nag.php (modified) (1 diff)
-
tags/1.1.1/templates/partials/review-nag.php (added)
-
tags/1.1.1/uninstall.php (modified) (1 diff)
-
trunk/assets/dist/admin.css (modified) (1 diff)
-
trunk/assets/dist/admin.js (modified) (1 diff)
-
trunk/assets/src/admin.css (modified) (1 diff)
-
trunk/assets/src/admin.js (modified) (3 diffs)
-
trunk/includes/Admin/Admin.php (modified) (2 diffs)
-
trunk/includes/Admin/UiRoutes.php (modified) (2 diffs)
-
trunk/includes/Admin/View.php (modified) (1 diff)
-
trunk/lumn.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/templates/partials/donate-nag.php (modified) (1 diff)
-
trunk/templates/partials/review-nag.php (added)
-
trunk/uninstall.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lumn-analytics/tags/1.1.1/assets/dist/admin.css
r3748978 r3753587 1 1 /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ 2 @layer theme;@font-face{font-family:LUMN Onest;src:url(../fonts/onest-latin-wght-normal.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}.lumn{--l-font:"LUMN Onest", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--l-navy:#0b1f3a;--l-navy-2:#16325a;--l-slate:#8a94a6;--l-grey:#c5ccd6;--l-bg:#e9edf3;--l-surface:#fff;--l-surface-2:#f5f7fa;--l-border:#e3e7ed;--l-border-strong:#6b7588;--l-text:#0b1f3a;--l-text-2:#2a3a52;--l-muted:#5a6478;--l-link:#0a5db0;--l-focus:#0b6bcb;--l-accent:#0b6bcb;--l-good:#067647;--l-good-bg:#e6f4ec;--l-bad:#b42318;--l-bad-bg:#fdecea;--l-warn:#b54708;--l-warn-bg:#fdf2e6;--l-chip-bg:#ebeff5;--l-chip-fg:#0b1f3a;--l-bar:#0b6bcb;--l-bar-2:#8a94a6;--l-grid:#ebeef3;--l-area:#0b6bcb1a;--l-track:#e6eaf0;--l-tip-bg:#0b1f3a;--l-tip-fg:#fff;--l-seg-on:#0b1f3a;--l-seg-on-fg:#fff;--l-c0:#0b1f3a;--l-c1:#2b5bd7;--l-c2:#0f7b6c;--l-c3:#b54708;--l-c4:#8a94a6;--l-c5:#6941c6;--l-tile:#0b1f3a;--l-tile-2:#16325a;--l-tile-border:#24406a;--l-tile-muted:#c9d3e3;--l-radius:28px;--l-radius-sm:18px;--l-shadow:0 30px 60px -30px #0b1f3a2e, 0 1px 0 #fffc inset;--l-lift:0 24px 48px -16px #0b1f3a47;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%235A6478' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:light}.lumn[data-theme=dark]{--l-bg:#08111f;--l-surface:#0f1b2e;--l-surface-2:#15243b;--l-border:#21324b;--l-border-strong:#6a7a94;--l-text:#e9eef6;--l-text-2:#cad3e1;--l-muted:#a3aec0;--l-link:#8ec8ff;--l-focus:#7cc0ff;--l-accent:#7cc0ff;--l-good:#5ad7a6;--l-good-bg:#5ad7a61f;--l-bad:#ff948a;--l-bad-bg:#ff948a1f;--l-warn:#f5b062;--l-warn-bg:#f5b0621f;--l-chip-bg:#1b2d49;--l-chip-fg:#dce6f6;--l-bar:#7cc0ff;--l-bar-2:#5d7090;--l-grid:#1a2a42;--l-area:#7cc0ff1f;--l-track:#1f3049;--l-tip-bg:#dce6f6;--l-tip-fg:#0b1f3a;--l-seg-on:#dce6f6;--l-seg-on-fg:#0b1f3a;--l-c0:#dce6f6;--l-c1:#6e98ff;--l-c2:#3cc6a0;--l-c3:#f5b062;--l-c4:#7f8fa9;--l-c5:#b69cff;--l-tile:#13294a;--l-tile-2:#1b3560;--l-tile-border:#2a4878;--l-shadow:0 1px 0 #ffffff08 inset, 0 12px 28px -18px #0009;--l-lift:0 28px 56px -18px #000000b3;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%23A9B3C4' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:dark}@media (max-width:782px){html:has(body.lumn-screen){scroll-padding-top:72px}}.lumn-wrap{margin:10px 20px 0 2px}.lumn,.lumn *,.lumn :before,.lumn :after{box-sizing:border-box}.lumn{background:var(--l-bg);color:var(--l-text);font-family:var(--l-font);-webkit-font-smoothing:antialiased;border-radius:24px;min-height:calc(100vh - 120px);padding:14px 20px 28px;font-size:15px;line-height:1.5}.lumn h1,.lumn h2,.lumn h3,.lumn p,.lumn ul,.lumn ol,.lumn dl,.lumn dd,.lumn figure{margin:0;padding:0}.lumn h1,.lumn h2,.lumn h3{color:var(--l-text);font-family:var(--l-font)}.lumn a,.lumn a:hover{color:var(--l-link)}.lumn button,.lumn input,.lumn select,.lumn textarea{font:inherit;color:inherit}.lumn button{cursor:pointer}.lumn svg{overflow:visible}.lumn table{border-collapse:collapse}.lumn :focus{box-shadow:none;outline:none}.lumn :focus-visible{outline:3px solid var(--l-focus);outline-offset:2px;box-shadow:none}@media (forced-colors:active){.lumn :focus-visible{outline-color:canvastext}}.lumn .lumn-sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.lumn .lumn-ico{flex:none;width:20px;height:20px}.lumn .lumn-ico-sm{flex:none;width:16px;height:16px}.lumn .lumn-ico-xs{flex:none;width:12px;height:12px}.lumn .lumn-muted{color:var(--l-muted)}.lumn .lumn-strong{font-weight:650}.lumn .lumn-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86rem}.lumn .lumn-topbar{background:var(--l-surface);border-radius:999px;align-items:center;gap:16px;padding:8px 10px 8px 14px;display:flex}@supports (color:color-mix(in lab, red, red)){.lumn .lumn-topbar{background:color-mix(in oklab, var(--l-surface) 86%, transparent)}}.lumn .lumn-topbar{border:1px solid var(--l-border);z-index:30;-webkit-backdrop-filter:blur(14px);position:sticky;top:46px;box-shadow:0 12px 30px -18px #0b1f3a59}@media (max-width:782px){.lumn .lumn-topbar{position:relative;top:0}}.lumn .lumn-brand{color:var(--l-text);border-radius:12px;align-items:center;gap:10px;min-height:40px;text-decoration:none;display:flex}.lumn .lumn-mark{background:var(--l-navy);border-radius:6px;flex:none;width:34px;height:34px;display:block;overflow:hidden}.lumn[data-theme=dark] .lumn-mark{background:#1b3560}.lumn .lumn-mark svg{width:34px;height:34px;display:block}.lumn .lumn-word{letter-spacing:.14em;font-size:1.02rem;font-weight:750}.lumn .lumn-nav{flex:1;min-width:0}.lumn .lumn-nav ul{flex-wrap:wrap;justify-content:end;gap:4px;margin:0;list-style:none;display:flex}.lumn .lumn-nav li{margin:0}.lumn .lumn-nav-link{min-height:40px;color:var(--l-text-2);border-radius:999px;align-items:center;gap:8px;padding:0 14px;font-size:.9rem;font-weight:540;text-decoration:none;display:inline-flex}.lumn .lumn-nav-link:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-link[aria-current=page]{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-link[aria-current=page]{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav-group{position:relative}.lumn .lumn-nav-btn{cursor:pointer;background:0 0;border:0}.lumn .lumn-nav .lumn-nav-btn .lumn-nav-chev{width:16px;height:16px;transition:transform .15s;display:inline-block}.lumn .lumn-nav-btn[aria-expanded=true] .lumn-nav-chev{transform:rotate(180deg)}.lumn .lumn-nav-btn[aria-expanded=true]{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-btn.is-current{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-btn.is-current{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav .lumn-nav-menu{z-index:60;border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:14rem;max-width:calc(100vw - 32px);box-shadow:var(--l-lift);border-radius:18px;justify-content:stretch;gap:2px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px);left:0}.lumn .lumn-nav .lumn-nav-menu[hidden]{display:none}.lumn .lumn-nav .lumn-nav-menu.is-right{left:auto;right:0}.lumn .lumn-nav-menu .lumn-nav-link{border-radius:12px;width:100%;display:flex}.lumn .lumn-nav-menu .lumn-nav-link .lumn-ico{display:inline-block}@media (prefers-reduced-motion:reduce){.lumn .lumn-nav-btn .lumn-nav-chev{transition:none}}@media (forced-colors:active){.lumn .lumn-nav-btn.is-current,.lumn .lumn-nav-link[aria-current=page]{border:2px solid highlight}}.lumn .lumn-icon-btn{border:1px solid var(--l-border-strong);background:var(--l-surface);width:42px;height:42px;color:var(--l-text);border-radius:999px;flex:none;place-items:center;display:grid}.lumn .lumn-icon-btn:hover{background:var(--l-surface-2)}.lumn .lumn-theme-btn .lumn-sun{display:none}.lumn[data-theme=dark] .lumn-theme-btn .lumn-sun{display:block}.lumn[data-theme=dark] .lumn-theme-btn .lumn-moon{display:none}.lumn .lumn-main{padding-top:24px}.lumn .lumn-page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin:0 4px 20px;display:flex}.lumn .lumn-page-head h1{letter-spacing:-.03em;padding:0;font-size:2rem;font-weight:650;line-height:1.15}.lumn .lumn-lede{color:var(--l-muted);margin-top:4px}.lumn .lumn-head-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline{align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline label{color:var(--l-muted);font-size:.85rem;font-weight:550}.lumn .lumn-btn,.lumn .lumn-btn-ghost{border-radius:999px;align-items:center;gap:8px;min-height:40px;padding:0 16px;font-size:.9rem;font-weight:600;line-height:1.2;text-decoration:none;display:inline-flex}.lumn .lumn-btn{background:var(--l-navy);color:#fff;border:1px solid #0000}.lumn .lumn-btn:hover{background:var(--l-navy-2);color:#fff}.lumn[data-theme=dark] .lumn-btn{color:#0b1f3a;background:#dce6f6}.lumn[data-theme=dark] .lumn-btn:hover{background:#c6d5ee}.lumn .lumn-btn-danger{background:var(--l-bad)}.lumn .lumn-btn-danger:hover{background:#912018}.lumn[data-theme=dark] .lumn-btn-danger{color:#08111f;background:#ff948a}.lumn .lumn-btn-ghost{background:var(--l-surface);color:var(--l-text);border:1px solid var(--l-border-strong)}.lumn .lumn-btn-ghost:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn form.htmx-request .lumn-btn,.lumn form.htmx-request .lumn-btn-ghost{opacity:.7;pointer-events:none;cursor:progress}.lumn .lumn-btn-sm{min-height:36px;padding:0 12px;font-size:.82rem}.lumn .lumn-btn:active,.lumn .lumn-btn-ghost:active,.lumn .lumn-tool:active,.lumn .lumn-icon-btn:active{transform:translateY(1px)}.lumn .lumn-btn[disabled],.lumn .lumn-btn-ghost[disabled]{cursor:not-allowed;background:var(--l-surface-2);color:var(--l-muted);border:1px dashed var(--l-border-strong)}.lumn .lumn-select,.lumn .lumn-input{border:1px solid var(--l-border-strong);background-color:var(--l-surface);min-height:40px;color:var(--l-text);box-shadow:none;border-radius:12px;max-width:100%;padding:8px 12px;line-height:1.4}.lumn textarea.lumn-input{resize:vertical;width:100%;min-height:88px}.lumn input.lumn-input[type=text],.lumn input.lumn-input[type=url]{width:100%}.lumn .lumn-select{appearance:none;background-image:var(--l-select-caret);background-position:right .9rem center;background-repeat:no-repeat;background-size:.7rem;border-radius:999px;padding:0 2.5rem 0 14px}.lumn .lumn-select::-ms-expand{display:none}@media (forced-colors:active){.lumn .lumn-select{appearance:auto;padding-right:revert;background-image:none}}.lumn .lumn-select:focus,.lumn .lumn-input:focus{border-color:var(--l-focus);box-shadow:none;outline:none}.lumn .lumn-select:focus-visible,.lumn .lumn-input:focus-visible{outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-input[aria-invalid=true]{border-color:var(--l-bad);border-width:2px}.lumn .lumn-input[readonly]{background:var(--l-surface-2)}.lumn .lumn-board{grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-flow:row;gap:16px;display:grid}.lumn .lumn-board.htmx-request{opacity:.6;transition:opacity .2s}.lumn .lumn-panel{grid-column:span var(--span,6);background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);flex-direction:column;min-width:0;padding:24px;display:flex;position:relative}.lumn .lumn-panel[data-span="12"]{--span:12}.lumn .lumn-panel[data-span="8"]{--span:8}.lumn .lumn-panel[data-span="7"]{--span:7}.lumn .lumn-panel[data-span="6"]{--span:6}.lumn .lumn-panel[data-span="5"]{--span:5}.lumn .lumn-panel[data-span="4"]{--span:4}.lumn .lumn-panel-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 12px;margin-bottom:14px;display:flex}.lumn .lumn-panel-titles{flex:180px;min-width:0}.lumn .lumn-panel-head h2{letter-spacing:-.01em;font-size:1rem;font-weight:640;line-height:1.3}.lumn .lumn-panel-sub{color:var(--l-muted);margin-top:2px;font-size:.8rem}.lumn .lumn-panel-tools{flex:none;align-items:center;gap:4px;display:flex}.lumn .lumn-tool{width:32px;height:32px;color:var(--l-muted);background:0 0;border:1px solid #0000;border-radius:10px;place-items:center;padding:0;display:grid}.lumn .lumn-tool:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-drag-handle{cursor:grab;touch-action:none}.lumn .lumn-panel-body{flex:1;min-width:0}.lumn .lumn-panel.is-dragging{z-index:20;box-shadow:var(--l-lift);cursor:grabbing;transition:none}.lumn .lumn-panel.is-grabbed{outline:3px dashed var(--l-focus);outline-offset:3px}.lumn .lumn-board.is-dragging{-webkit-user-select:none;user-select:none}.lumn .lumn-empty{color:var(--l-muted);padding:8px 0;font-size:.88rem}.lumn .lumn-move-menu{border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:210px;color:var(--l-text);box-shadow:var(--l-lift);border-radius:14px;margin:0;padding:6px;position:fixed;inset:auto}.lumn .lumn-move-menu button{text-align:left;width:100%;min-height:36px;color:var(--l-text);background:0 0;border:0;border-radius:9px;align-items:center;padding:0 10px;font-size:.88rem;display:flex}.lumn .lumn-move-menu button:hover,.lumn .lumn-move-menu button:focus-visible{background:var(--l-surface-2)}.lumn .lumn-move-menu button:disabled{color:var(--l-muted);cursor:not-allowed;text-decoration:line-through}.lumn .lumn-menu-label{text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);padding:8px 10px 4px;font-size:.72rem;font-weight:600}.lumn .lumn-kpi-grid{grid-template-rows:auto auto;grid-template-columns:1.5fr 1fr 1fr;gap:14px;display:grid}.lumn .lumn-kpi{background:var(--l-surface-2);border-radius:20px;min-width:0;padding:16px}.lumn .lumn-kpi.is-hero{background:var(--l-tile);color:#fff;flex-direction:column;grid-row:span 2;justify-content:space-between;display:flex}.lumn .lumn-kpi.is-hero .lumn-kpi-label,.lumn .lumn-kpi.is-hero .lumn-kpi-note{color:var(--l-tile-muted)}.lumn .lumn-kpi.is-hero .lumn-kpi-icon{color:#fff;background:#ffffff1f}.lumn .lumn-kpi.is-hero .lumn-kpi-value{color:#fff;font-size:3.2rem}.lumn .lumn-kpi.is-hero .lumn-delta.is-good{color:#7fe6bc;background:#5ad7a629}.lumn .lumn-kpi.is-hero .lumn-delta.is-bad{color:#ffb3ab;background:#ff948a29}.lumn .lumn-kpi.is-hero .lumn-delta.is-flat{color:#dce6f6;background:#ffffff1a}.lumn .lumn-kpi-top{align-items:center;gap:10px;display:flex}.lumn .lumn-kpi-icon{background:var(--l-chip-bg);width:36px;height:36px;color:var(--l-chip-fg);border-radius:10px;flex:none;place-items:center;display:grid}.lumn .lumn-kpi-label{color:var(--l-text-2);overflow-wrap:anywhere;min-width:0;font-size:.88rem;font-weight:560}.lumn .lumn-kpi-value{letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--l-text);margin:12px 0 6px;font-size:1.9rem;font-weight:620;line-height:1.05}.lumn .lumn-kpi-meta{flex-wrap:wrap;align-items:center;gap:6px;font-size:.78rem;display:flex}.lumn .lumn-kpi-note{color:var(--l-muted)}.lumn .lumn-delta{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:3px;padding:2px 7px;font-weight:650;display:inline-flex}.lumn .lumn-delta.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-delta.is-bad{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-delta.is-flat{color:var(--l-muted);background:var(--l-chip-bg)}.lumn .lumn-live-dot{background:0 0}.lumn .lumn-live-dot:after{content:"";background:var(--l-good);border-radius:50%;width:10px;height:10px;animation:2.4s ease-out infinite lumn-breathe}@keyframes lumn-breathe{0%{box-shadow:0 0 0 0 color-mix(in oklab, var(--l-good) 55%, transparent)}70%{box-shadow:0 0 0 10px #0000}to{box-shadow:0 0 #0000}}.lumn .lumn-chart-slot{width:100%;position:relative;overflow:hidden}.lumn .lumn-tip{z-index:2;pointer-events:none;background:var(--l-text);min-width:120px;color:var(--l-surface);white-space:nowrap;border-radius:10px;flex-direction:column;gap:2px;padding:8px 10px;font-size:12.5px;line-height:1.35;display:flex;position:absolute;box-shadow:0 8px 24px #0b1f3a38}.lumn .lumn-tip strong{opacity:.85;font-weight:650}.lumn .lumn-tip .lumn-tip-main{font-variant-numeric:tabular-nums;font-size:14px;font-weight:700}.lumn .lumn-hit{cursor:crosshair}.lumn .lumn-chart-slot.is-holding .lumn-day-chart{max-width:none}.lumn .lumn-cross{stroke:var(--l-muted);stroke-width:1px;stroke-dasharray:3 3;pointer-events:none}.lumn .lumn-cross.is-on{stroke-opacity:1}.lumn .lumn-bar.is-hover{fill:var(--l-bar)}.lumn .lumn-pt.is-hover{fill:var(--l-bar);r:5px}.lumn .lumn-day-chart:focus-visible{outline:2px solid var(--l-focus,#0b6bcb);outline-offset:4px;border-radius:6px}.lumn .lumn-day-chart{width:auto;max-width:100%;height:auto;display:block;overflow:visible}.lumn .lumn-grid-line{stroke:var(--l-grid);stroke-width:1px}.lumn .lumn-axis{fill:var(--l-muted);font-size:11.5px;font-family:var(--l-font)}.lumn .lumn-bar{fill:var(--l-bar-2)}.lumn .lumn-bar.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart .lumn-bar{transform-box:fill-box;transform-origin:bottom;animation:.7s cubic-bezier(.16,1,.3,1) both lumn-grow}@keyframes lumn-grow{0%{transform:scaleY(.04)}to{transform:scaleY(1)}}.lumn .lumn-chart-slot.is-still .lumn-bar{animation:none}.lumn .lumn-line{fill:none;stroke:var(--l-bar);stroke-width:2.5px;stroke-linejoin:round}.lumn .lumn-area{fill:var(--l-area)}.lumn .lumn-pt{fill:var(--l-surface);stroke:var(--l-bar);stroke-width:2px}.lumn .lumn-pt.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart[data-kind=bar] .lumn-as-line,.lumn .lumn-day-chart[data-kind=line] .lumn-as-bars{display:none}.lumn .lumn-avg-line{stroke:var(--l-muted);stroke-dasharray:4 5;stroke-width:1.2px}.lumn .lumn-peak-label rect{fill:var(--l-tip-bg)}.lumn .lumn-peak-label text{fill:var(--l-tip-fg);font-size:12px;font-weight:700;font-family:var(--l-font)}.lumn .lumn-cmp-halo{fill:none;stroke:var(--l-surface);stroke-width:5px;stroke-linejoin:round}.lumn .lumn-cmp-line{fill:none;stroke:var(--l-c5);stroke-width:2px;stroke-dasharray:7 5;stroke-linejoin:round}.lumn .lumn-note-pin line{stroke:var(--l-warn);stroke-width:1.5px;stroke-dasharray:2 4}.lumn .lumn-note-pin circle{fill:var(--l-warn);stroke:var(--l-surface);stroke-width:2px}.lumn .lumn-chart-key{color:var(--l-text-2);flex-wrap:wrap;gap:6px 18px;margin:10px 0 0;padding:0;font-size:.82rem;list-style:none;display:flex}.lumn .lumn-chart-key li{align-items:center;gap:8px;margin:0;display:flex}.lumn .lumn-key-solid,.lumn .lumn-key-dash{border-top:3px solid var(--l-bar);width:22px;height:0}.lumn .lumn-key-dash{border-top:2px dashed var(--l-c5)}.lumn .lumn-key-pin{background:var(--l-warn);border-radius:50%;width:10px;height:10px}.lumn .lumn-notes{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-notes-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.lumn .lumn-h3{color:var(--l-text);margin:0;font-size:.95rem;font-weight:650}.lumn .lumn-note-list{margin:10px 0 0;padding:0;list-style:none}.lumn .lumn-note-list li{border-bottom:1px solid var(--l-grid);align-items:center;gap:12px;margin:0;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-note-list li:last-child{border-bottom:0}.lumn .lumn-note-list form{margin:0 0 0 auto}.lumn .lumn-note-day{min-width:52px;color:var(--l-warn);font-variant-numeric:tabular-nums;flex:none;font-weight:600}.lumn .lumn-note-text{overflow-wrap:anywhere;min-width:0}.lumn .lumn-dialog{border:1px solid var(--l-border);background:var(--l-surface);width:min(440px,100vw - 32px);color:var(--l-text);border-radius:20px;padding:22px;box-shadow:0 24px 60px #0b1f3a47}.lumn .lumn-dialog::backdrop{background:#08111f73}.lumn .lumn-dialog .lumn-field:first-of-type{margin-top:14px}.lumn .lumn-dialog .lumn-input{width:100%}.lumn .lumn-dialog-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.lumn .lumn-chart-foot{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;margin-top:12px;display:flex}.lumn .lumn-seg{border:1px solid var(--l-border-strong);border-radius:999px;gap:2px;margin-right:4px;padding:2px;display:inline-flex}.lumn .lumn-seg-btn{min-height:28px;color:var(--l-muted);background:0 0;border:0;border-radius:999px;padding:0 12px;font-size:.8rem;font-weight:560}.lumn .lumn-seg-btn[aria-pressed=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg)}.lumn .lumn-seg-wide{flex-wrap:wrap;max-width:100%;margin:0 0 14px}.lumn .lumn-seg-wide .lumn-seg-btn{min-height:32px}.lumn .lumn-table-toggle{border:1px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px;font-size:.84rem;font-weight:600;display:inline-flex}.lumn .lumn-table-toggle:hover{background:var(--l-surface-2)}.lumn .lumn-table-toggle[aria-expanded=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg);border-color:#0000}.lumn .lumn-data-table{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;width:100%;max-height:340px;margin-top:14px;position:relative;overflow:auto}.lumn .lumn-data-table[hidden]{display:none}.lumn .lumn-data-table table{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums;width:100%;font-size:.86rem}.lumn .lumn-data-table caption{text-align:left;color:var(--l-text-2);padding:12px 16px 4px;font-size:.82rem;font-weight:650}.lumn .lumn-data-table thead th{z-index:1;background:var(--l-surface);text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:10px 16px;font-size:.72rem;font-weight:600;position:sticky;top:0}.lumn .lumn-data-table tbody th,.lumn .lumn-data-table td,.lumn .lumn-data-table tfoot th{border-bottom:1px solid var(--l-border);text-align:left;white-space:nowrap;padding:9px 16px;font-weight:500}.lumn .lumn-data-table tbody tr:nth-child(2n){background:var(--l-surface-2)}.lumn .lumn-data-table tbody tr:hover{background:var(--l-chip-bg)}.lumn .lumn-data-table tr.is-peak th,.lumn .lumn-data-table tr.is-peak td:nth-child(2){font-weight:700}.lumn .lumn-data-table tfoot th,.lumn .lumn-data-table tfoot td{background:var(--l-surface);border-top:1px solid var(--l-border-strong);border-bottom:0;font-weight:700;position:sticky;bottom:0}.lumn .lumn-num{white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right!important}.lumn .lumn-wd{width:2.6em;color:var(--l-muted);font-weight:500;display:inline-block}.lumn .lumn-bar-cell{width:30%;min-width:80px}.lumn .lumn-bar-cell .lumn-meter{margin:0}.lumn .lumn-chg{align-items:center;gap:3px;font-weight:600;display:inline-flex}.lumn .lumn-chg.is-good{color:var(--l-good)}.lumn .lumn-chg.is-bad{color:var(--l-bad)}.lumn .lumn-chg.is-flat{color:var(--l-muted)}.lumn .lumn-table{width:100%;font-size:.88rem}.lumn .lumn-table thead th{text-transform:uppercase;letter-spacing:.05em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:0 0 8px;font-size:.75rem;font-weight:600}.lumn .lumn-table thead th:not(:first-child),.lumn .lumn-table td{text-align:right;font-variant-numeric:tabular-nums}.lumn .lumn-table tbody th{text-align:left;border-bottom:1px solid var(--l-border);padding:10px 12px 10px 0;font-weight:500}.lumn .lumn-table td{border-bottom:1px solid var(--l-border);white-space:nowrap;vertical-align:top;padding:10px 0 10px 12px}.lumn .lumn-table-text td{text-align:left;white-space:normal}.lumn .lumn-table-text thead th{text-align:left!important}.lumn .lumn-table-scroll{position:relative;overflow-x:auto}.lumn .lumn-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.84rem}.lumn .lumn-row-sub{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-badge{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;align-items:center;gap:4px;margin-left:8px;padding:1px 8px;font-size:.7rem;font-weight:650;display:inline-flex}.lumn .lumn-meter{background:var(--l-track);border-radius:4px;height:4px;margin-top:7px;display:block;overflow:hidden}.lumn .lumn-meter>span{background:var(--l-bar);border-radius:4px;height:100%;display:block}.lumn .lumn-meter-lg{height:8px}.lumn .lumn-bars-list{gap:14px;margin:0;list-style:none;display:grid}.lumn .lumn-bars-list li{margin:0}.lumn .lumn-dv-row{justify-content:space-between;gap:12px;font-size:.88rem;font-weight:550;display:flex}.lumn .lumn-dv-val{font-variant-numeric:tabular-nums}.lumn .lumn-mini-stats{border-top:1px solid var(--l-border);grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px;padding-top:14px;display:grid}.lumn .lumn-mini-stats dt{color:var(--l-muted);font-size:.72rem}.lumn .lumn-mini-stats dd{margin:2px 0 0;font-size:.86rem;font-weight:600}.lumn .lumn-donut-wrap{flex-wrap:wrap;align-items:center;gap:20px;display:flex}.lumn .lumn-donut-box{flex:none;width:168px;position:relative}.lumn .lumn-donut{width:168px;height:168px;display:block}.lumn .lumn-donut-track{stroke:var(--l-track)}.lumn .lumn-seg-0{stroke:var(--l-c0)}.lumn .lumn-sw-0{background:var(--l-c0)}.lumn .lumn-seg-1{stroke:var(--l-c1)}.lumn .lumn-sw-1{background:var(--l-c1)}.lumn .lumn-seg-2{stroke:var(--l-c2)}.lumn .lumn-sw-2{background:var(--l-c2)}.lumn .lumn-seg-3{stroke:var(--l-c3)}.lumn .lumn-sw-3{background:var(--l-c3)}.lumn .lumn-seg-4{stroke:var(--l-c4)}.lumn .lumn-sw-4{background:var(--l-c4)}.lumn .lumn-seg-5{stroke:var(--l-c5)}.lumn .lumn-sw-5{background:var(--l-c5)}.lumn .lumn-donut-center{background:var(--l-surface);text-align:center;border-radius:50%;place-content:center;display:grid;position:absolute;inset:22px}.lumn .lumn-dc-num{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:650}.lumn .lumn-dc-lbl{color:var(--l-muted);font-size:.72rem}.lumn .lumn-legend{flex:180px;font-size:.86rem}.lumn .lumn-legend th{text-align:left;align-items:center;gap:10px;padding:4px 8px 4px 0;font-weight:500;display:flex}.lumn .lumn-legend td{padding:4px 0 4px 10px}.lumn .lumn-sw{border-radius:4px;flex:none;width:12px;height:12px;display:inline-block}.lumn #lumn-panel-privacy{background:var(--l-tile);color:#fff;border:none}.lumn #lumn-panel-privacy h2{color:#fff}.lumn #lumn-panel-privacy .lumn-panel-sub,.lumn #lumn-panel-privacy .lumn-preset-k,.lumn #lumn-panel-privacy .lumn-pv-foot,.lumn #lumn-panel-privacy .lumn-tool{color:var(--l-tile-muted)}.lumn #lumn-panel-privacy .lumn-tool:hover{background:var(--l-tile-2);color:#fff}.lumn #lumn-panel-privacy :focus-visible{outline-color:#9ccbff}.lumn #lumn-panel-privacy .lumn-btn-ghost{color:#fff;border-color:var(--l-slate);background:0 0}.lumn #lumn-panel-privacy .lumn-btn-ghost:hover{background:var(--l-tile-2)}.lumn .lumn-preset{background:var(--l-surface-2);border:1px solid var(--l-border);border-radius:16px;align-items:center;gap:12px;padding:12px;display:flex}.lumn #lumn-panel-privacy .lumn-preset{background:var(--l-tile-2);border-color:var(--l-tile-border)}.lumn .lumn-preset-icon{color:#0b1f3a;background:#fff;border-radius:10px;flex:none;place-items:center;width:40px;height:40px;display:grid}.lumn .lumn-preset-k{font-size:.75rem}.lumn .lumn-preset-v{font-size:1.05rem;font-weight:700}.lumn .lumn-preset-mod{color:var(--l-tile-muted);font-size:.82rem;font-weight:500}.lumn .lumn-preset .lumn-btn-ghost{margin-left:auto}.lumn .lumn-pv-list{margin:12px 0 0;list-style:none;display:grid}.lumn .lumn-pv-list li{border-bottom:1px solid var(--l-tile-border);grid-template-columns:16px 1fr auto;align-items:center;gap:10px;margin:0;padding:8px 0;font-size:.86rem;display:grid}.lumn .lumn-pv-list .lumn-ico-sm{color:#7fe6bc}.lumn .lumn-pv-v{text-align:right;font-weight:600}.lumn .lumn-pv-foot{margin-top:10px;font-size:.8rem}.lumn .lumn-rt-count{color:var(--l-muted);margin-bottom:10px;font-size:.86rem}.lumn .lumn-rt-feed{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-rt-feed li{background:var(--l-surface-2);border-radius:16px;grid-template-rows:auto auto;grid-template-columns:1fr auto;column-gap:10px;margin:0;padding:12px 14px;font-size:.85rem;display:grid}.lumn .lumn-rt-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem}.lumn .lumn-rt-src{color:var(--l-muted);grid-row:2;font-size:.78rem}.lumn .lumn-rt-time{color:var(--l-muted);font-variant-numeric:tabular-nums;grid-row:1/3;align-self:center;font-size:.78rem}.lumn .lumn-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:16px;margin-top:16px;display:grid}.lumn .lumn-card{background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);min-width:0;padding:24px}.lumn .lumn-card>h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-card.is-danger{border-color:var(--l-bad);border-width:2px}.lumn .lumn-span-all{grid-column:1/-1}.lumn #lumn-settings>.lumn-card{margin-top:0}.lumn .lumn-help{color:var(--l-muted);margin:2px 0 8px;font-size:.82rem}.lumn .lumn-legal{margin-top:12px}.lumn .lumn-field{margin:16px 0}.lumn .lumn-field-row{grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:0 16px;display:grid}.lumn .lumn-field-row>.lumn-field{margin:16px 0 0}.lumn .lumn-field>label,.lumn .lumn-label{margin-bottom:4px;font-size:.9rem;font-weight:600;display:block}.lumn .lumn-fieldset{border:0;min-width:0;margin:16px 0;padding:0}.lumn .lumn-fieldset legend{margin-bottom:6px;padding:0;font-size:.9rem;font-weight:600}.lumn .lumn-radio{align-items:flex-start;gap:10px;min-height:28px;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-radio input[type=radio],.lumn .lumn-radio input[type=checkbox]{flex:none;width:18px;height:18px}.lumn .lumn-radio input{margin-top:3px}.lumn .lumn-check{align-items:flex-start;gap:12px;margin:14px 0;display:flex}.lumn .lumn-check input[type=checkbox]{flex:none;width:18px;height:18px;margin-top:3px}.lumn .lumn-check label{font-size:.9rem;font-weight:600}.lumn .lumn-check .lumn-help{margin:2px 0 0}.lumn input[type=checkbox],.lumn input[type=radio]{accent-color:var(--l-navy)}.lumn[data-theme=dark] input[type=checkbox],.lumn[data-theme=dark] input[type=radio]{accent-color:#7cc0ff}.lumn .lumn-input-suffix{align-items:center;gap:8px;display:flex}.lumn .lumn-input-suffix .lumn-input{width:120px}.lumn .lumn-preset-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:8px 0 14px;display:grid}.lumn .lumn-radio-card{border:1px solid var(--l-border-strong);background:var(--l-surface);cursor:pointer;border-radius:18px;gap:6px;padding:14px;display:grid;position:relative}.lumn .lumn-radio-card input{position:absolute;top:16px;right:14px}.lumn .lumn-radio-card:has(input:checked){border-width:2px;border-color:var(--l-navy);background:var(--l-surface-2)}.lumn[data-theme=dark] .lumn-radio-card:has(input:checked){border-color:#7cc0ff}.lumn .lumn-radio-card:has(input:focus-visible){outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-radio-title{padding-right:24px;font-weight:700}.lumn .lumn-radio-text{color:var(--l-muted);font-size:.8rem}.lumn .lumn-tag{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;margin-left:4px;padding:1px 8px;font-size:.68rem;font-weight:650}.lumn .lumn-form-actions{grid-column:1/-1;justify-content:flex-end;display:flex}.lumn .lumn-inline-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.lumn .lumn-rules-count{color:var(--l-text-2);margin-top:6px;font-size:.82rem}.lumn .lumn-rules-count ul{margin:4px 0 0 18px;list-style:outside}.lumn .lumn-error{color:var(--l-bad);align-items:center;gap:6px;margin-top:6px;font-size:.82rem;font-weight:600;display:flex}.lumn .lumn-error-summary{background:var(--l-bad-bg);border:2px solid var(--l-bad);border-radius:18px;margin-bottom:16px;padding:16px 18px}.lumn .lumn-error-summary h2{margin-bottom:6px;font-size:1rem}.lumn .lumn-error-summary ul{margin-left:18px;list-style:outside}.lumn .lumn-callout{background:var(--l-surface);border:1px solid var(--l-border-strong);border-radius:16px;align-items:flex-start;gap:10px;margin-bottom:16px;padding:12px 16px;font-size:.9rem;display:flex}.lumn .lumn-callout .lumn-ico-sm{margin-top:3px}.lumn .lumn-callout.is-good{border-color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-callout.is-good .lumn-ico-sm{color:var(--l-good)}.lumn .lumn-callout.is-warn{border-color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-callout.is-warn .lumn-ico-sm{color:var(--l-warn)}.lumn .lumn-dl{gap:0;display:grid}.lumn .lumn-dl>div{border-bottom:1px solid var(--l-border);justify-content:space-between;gap:12px;padding:9px 0;font-size:.88rem;display:flex}.lumn .lumn-dl dt{color:var(--l-muted)}.lumn .lumn-dl dd{text-align:right;font-weight:600}.lumn .lumn-check-list{gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-check-list li{align-items:flex-start;gap:10px;margin:0;font-size:.88rem;display:flex}.lumn .lumn-check-list .lumn-ico-sm{color:var(--l-bad);margin-top:3px}.lumn .lumn-toast{z-index:100000;background:var(--l-tip-bg);max-width:360px;color:var(--l-tip-fg);box-shadow:var(--l-lift);border-radius:14px;padding:12px 16px;font-size:.88rem;position:fixed;bottom:24px;right:24px}.lumn .lumn-toast[hidden]{display:none}.lumn .lumn-a11y-k-error{--k:var(--l-bad)}.lumn .lumn-a11y-k-alert{--k:var(--l-warn)}.lumn .lumn-a11y-k-pass{--k:var(--l-good)}.lumn .lumn-a11y-k-review{--k:var(--l-link)}.lumn .lumn-a11y-reason{border-left:4px solid var(--k);background:var(--l-surface);border-radius:0 10px 10px 0;padding:8px 12px}.lumn .lumn-a11y-shape{width:18px;height:18px;color:var(--k,currentColor);flex:none}.lumn .lumn-a11y-status{min-height:1.5em;margin:12px 0 4px;font-weight:600}.lumn .lumn-a11y-status.is-error{color:var(--l-bad)}.lumn .lumn-a11y-results>h2{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.lumn .lumn-a11y-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:6px 0 4px;display:flex}.lumn .lumn-a11y-toolbar .lumn-inline-actions{margin-top:0}.lumn .lumn-a11y-filters{flex-wrap:wrap;gap:8px;display:flex}.lumn .lumn-a11y-filter{border:2px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px 0 10px;font-size:.88rem;font-weight:600;display:inline-flex}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:var(--k);background:var(--l-surface-2)}.lumn .lumn-a11y-filter[aria-pressed=false],.lumn .lumn-a11y-filter[aria-pressed=false] .lumn-a11y-shape{color:var(--l-muted)}.lumn .lumn-a11y-filter[aria-pressed=false]>span:first-of-type{text-decoration:line-through}.lumn .lumn-a11y-count{font-variant-numeric:tabular-nums;background:var(--l-chip-bg);color:var(--l-chip-fg);border-radius:999px;padding:1px 8px;font-size:.78rem}.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1.55fr) minmax(300px,1fr);align-items:start;gap:20px;margin-top:12px;display:grid}.lumn .lumn-a11y-layout.is-list-only{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-frame{border:1px solid var(--l-border-strong);border-radius:var(--l-radius-sm);background:#fff;width:100%;height:clamp(420px,72vh,920px);display:block}.lumn .lumn-a11y-key{flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:8px;display:flex}.lumn .lumn-a11y-key>span{align-items:center;gap:4px;display:inline-flex}.lumn .lumn-a11y-side{min-width:0}.lumn .lumn-a11y-list{max-height:clamp(260px,60vh,760px);margin-top:6px;padding:2px 4px 2px 2px;overflow-y:auto}.lumn .lumn-a11y-group{align-items:center;gap:6px;margin:14px 0 6px;font-size:.9rem;font-weight:650;display:flex}.lumn .lumn-a11y-group svg{width:18px;height:18px;color:var(--k)}.lumn .lumn-a11y-group:first-child{margin-top:0}.lumn .lumn-a11y-items{gap:6px;margin:0;list-style:none;display:grid}.lumn .lumn-a11y-items li{margin:0}.lumn .lumn-a11y-item{text-align:left;border:1px solid var(--l-border);border-left:4px solid var(--k);background:var(--l-surface);width:100%;color:var(--l-text);border-radius:14px;align-items:flex-start;gap:10px;min-height:44px;padding:9px 12px;font-size:.88rem;line-height:1.4;display:flex}.lumn .lumn-a11y-item:hover{background:var(--l-surface-2)}.lumn .lumn-a11y-item[aria-current=true]{background:var(--l-surface-2);border-color:var(--k);box-shadow:inset 0 0 0 1px var(--k)}.lumn .lumn-a11y-num{background:var(--k,var(--l-navy));min-width:24px;height:24px;color:var(--l-surface);border-radius:12px;flex:none;place-items:center;padding:0 6px;font-size:.75rem;font-weight:700;display:inline-grid}.lumn .lumn-a11y-n{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-a11y-detail{border-radius:var(--l-radius-sm);border:2px solid var(--k,var(--l-border-strong));background:var(--l-surface-2);margin-top:16px;padding:18px}.lumn .lumn-a11y-detail h3{align-items:flex-start;gap:8px;margin:4px 0 8px;font-size:1.05rem;line-height:1.35;display:flex}.lumn .lumn-a11y-detail h4{margin:14px 0 4px;font-size:.9rem}.lumn .lumn-a11y-detail h5{color:var(--l-text-2);margin:12px 0 4px;font-size:.82rem}.lumn .lumn-a11y-detail p{margin:6px 0;font-size:.9rem}.lumn .lumn-a11y-detail ul{margin:0 0 0 18px;font-size:.88rem;list-style:outside}.lumn .lumn-a11y-badge{color:var(--k);align-items:center;gap:6px;font-size:.8rem;font-weight:700;display:inline-flex}.lumn .lumn-a11y-badge svg{width:18px;height:18px}.lumn .lumn-a11y-cols{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:0 16px;display:grid}.lumn .lumn-a11y-code{border:1px solid var(--l-border);background:var(--l-surface);white-space:pre-wrap;word-break:break-word;border-radius:12px;max-height:14rem;margin:4px 0 8px;padding:10px 12px;font:.8rem/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.lumn .lumn-a11y-fix{border-top:1px solid var(--l-border-strong);margin-top:16px;padding-top:12px}.lumn .lumn-a11y-fix .lumn-field{margin:10px 0}.lumn .lumn-a11y-fix .lumn-input{width:100%}.lumn .lumn-a11y-fix .lumn-btn-sm{margin-top:8px}.lumn .lumn-a11y-color{border:1px solid var(--l-border-strong);background:var(--l-surface);border-radius:10px;width:64px;height:40px;padding:2px}.lumn .lumn-a11y-export{border-top:1px solid var(--l-border);flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;padding-top:14px;display:flex}.lumn .lumn-a11y-export[hidden]{display:none}.lumn .lumn-a11y-export .lumn-btn-ghost{align-items:center;gap:6px;display:inline-flex}.lumn .lumn-a11y-row-actions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.lumn .lumn-a11y-row-actions form{display:contents}.lumn .lumn-a11y-row-actions .lumn-btn-ghost{align-items:center;text-decoration:none;display:inline-flex}.lumn .lumn-a11y-tile-stats{border-top:0;margin-top:0;padding-top:0}.lumn .lumn-a11y-tile-stats dd{font-variant-numeric:tabular-nums;font-size:1.4rem;font-weight:700}@media (max-width:1100px){.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-list{max-height:none}}@media (forced-colors:active){.lumn .lumn-a11y-shape,.lumn .lumn-a11y-group svg,.lumn .lumn-a11y-badge svg{forced-color-adjust:none;color:canvastext}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:highlight}.lumn .lumn-a11y-item,.lumn .lumn-a11y-num{border:1px solid canvastext}}.lumn .lumn-delete-box{border-top:1px solid var(--l-border);margin-top:16px;padding-top:14px}.lumn .lumn-delete-box .lumn-inline-actions form{display:inline}.lumn .lumn-inline-form{margin-left:6px;display:inline-block}.lumn .lumn-back{margin:14px 0 0;font-weight:600}.lumn .lumn-scan-runs th[scope=row] a{font-weight:600}.lumn .lumn-scan-confirm .lumn-inline-actions form{display:inline}@media (max-width:1280px){.lumn .lumn-panel[data-span="4"],.lumn .lumn-panel[data-span="5"]{--span:6}.lumn .lumn-panel[data-span="7"],.lumn .lumn-panel[data-span="8"]{--span:12}.lumn .lumn-preset-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:960px){.lumn .lumn-board{grid-template-columns:minmax(0,1fr)}.lumn .lumn-panel{grid-column:1/-1!important}.lumn .lumn-settings-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi-grid{grid-template-columns:1fr 1fr}.lumn .lumn-kpi.is-hero{grid-area:auto/1/auto/-1}.lumn .lumn-nav-link .lumn-ico{display:none}}@media (max-width:600px){.lumn-wrap{margin:10px 10px 0 0}.lumn{border-radius:18px;padding:10px 10px 20px}.lumn .lumn-topbar{border-radius:22px;flex-wrap:wrap}.lumn .lumn-nav{flex-basis:100%;order:3}.lumn .lumn-theme-btn{margin-left:auto}.lumn .lumn-panel,.lumn .lumn-card{border-radius:22px;padding:18px}.lumn .lumn-preset-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi.is-hero .lumn-kpi-value{font-size:2.4rem}.lumn .lumn-data-table .lumn-bar-cell{display:none}.lumn .lumn-page-head h1{font-size:1.6rem}}@media (prefers-reduced-motion:reduce){.lumn *,.lumn :before,.lumn :after{transition:none!important;animation:none!important}::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}.lumn #lumn-tags-form{gap:20px;display:grid}.lumn .lumn-auto-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0 24px;display:grid}.lumn .lumn-card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.lumn .lumn-card-head h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-check-bar{background:var(--l-surface-2);border-radius:14px;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:14px 0 6px;padding:14px 16px;display:flex}.lumn .lumn-check-bar .lumn-input{width:220px;max-width:100%}.lumn .lumn-check-bar .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-rules{counter-reset:none;gap:14px;margin:16px 0;padding:0;list-style:none;display:grid}.lumn .lumn-rule{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;margin:0;padding:4px 18px 10px}.lumn .lumn-rule fieldset{border:0;min-width:0;margin:0;padding:0}.lumn .lumn-rule.is-off{background:var(--l-surface-2)}.lumn .lumn-rule-legend{margin:0;padding:14px 0 0;font-size:.92rem;font-weight:650;display:block}.lumn .lumn-rule-top{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;padding-top:6px;display:flex}@media (min-width:600px){.lumn .lumn-rule-top{margin-top:-38px;margin-left:120px}}.lumn .lumn-rule-top .lumn-check{align-items:center;margin:0}.lumn .lumn-rule-top .lumn-check input[type=checkbox]{margin-top:0}.lumn .lumn-rule-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 16px;display:grid}.lumn .lumn-rule-grid .lumn-field{margin:10px 0}.lumn .lumn-rule-grid .lumn-select,.lumn .lumn-rule-grid .lumn-input{width:100%}.lumn .lumn-rule-target{grid-column:span 2}@media (max-width:640px){.lumn .lumn-rule-target{grid-column:auto}}.lumn .lumn-rule-once{align-self:end;margin:10px 0 18px}.lumn .lumn-match{margin:4px 0 0;font-size:.82rem;font-weight:600}.lumn .lumn-match:empty{display:none}.lumn .lumn-match.is-good{color:var(--l-good)}.lumn .lumn-match.is-warn{color:var(--l-warn)}.lumn [data-check-selectors][aria-disabled=true]{opacity:.6;pointer-events:none}.lumn [hidden]{display:none!important}.lumn .lumn-filter{flex-wrap:wrap;align-items:center;gap:10px 14px;margin:8px 0 16px;display:flex}.lumn .lumn-filter .lumn-input{width:240px;max-width:100%}.lumn .lumn-filter .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-scroll-x{overflow-x:auto}.lumn .lumn-table .lumn-left{text-align:left}.lumn .lumn-sessions td,.lumn .lumn-sessions th{vertical-align:middle}.lumn .lumn-pager{color:var(--l-text-2);justify-content:center;align-items:center;gap:14px;margin-top:16px;font-size:.88rem;display:flex}.lumn .lumn-dialog-wide{width:min(640px,100vw - 32px);max-height:min(80vh,760px)}.lumn .lumn-dialog-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.lumn .lumn-steps{margin:0;padding:0;list-style:none}.lumn .lumn-steps li{border-bottom:1px solid var(--l-grid);grid-template-columns:76px 1fr;gap:12px;margin:0;padding:10px 0;font-size:.88rem;display:grid}.lumn .lumn-steps li.is-event{color:var(--l-text-2);padding-left:18px}.lumn .lumn-step-time{color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn .lumn-step-body{overflow-wrap:anywhere;min-width:0}.lumn .lumn-funnels{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:24px;margin:8px 0 16px;display:grid}.lumn .lumn-funnel caption{text-align:left;color:var(--l-text);padding-bottom:10px;font-size:.95rem;font-weight:650}.lumn .lumn-step-n{background:var(--l-chip-bg);width:22px;height:22px;color:var(--l-chip-fg);border-radius:50%;place-items:center;margin-right:6px;font-size:.72rem;font-weight:650;display:inline-grid}.lumn .lumn-details{border-top:1px solid var(--l-border);margin-top:12px;padding-top:12px}.lumn .lumn-details summary{cursor:pointer;min-height:24px;font-size:.9rem;font-weight:600}.lumn .lumn-rejected{color:var(--l-warn);margin:4px 0 0 18px;font-size:.82rem;list-style:outside}.lumn .lumn-head-actions form.lumn-field-inline{gap:8px}.lumn .lumn-vitals{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:0 0 8px;padding:0;list-style:none;display:grid}.lumn .lumn-vital{background:var(--l-surface-2);border-radius:16px;align-content:start;gap:4px;margin:0;padding:14px 16px;display:grid}.lumn .lumn-vital-name{color:var(--l-muted);font-size:.82rem;font-weight:600}.lumn .lumn-vital-name abbr{font-weight:500;text-decoration:none}.lumn .lumn-vital-val{font-variant-numeric:tabular-nums;font-size:1.15rem;font-weight:650}.lumn .lumn-rate{border:1px solid;border-radius:999px;justify-self:start;padding:2px 10px;font-size:.74rem;font-weight:650}.lumn .lumn-rate.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-rate.is-fair{color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-rate.is-poor{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-cap-left{text-align:left;padding:8px 0 10px}.lumn .lumn-wrap{white-space:normal;overflow-wrap:anywhere}.lumn abbr[title]{cursor:help}.lumn .lumn-rate-sm{width:fit-content;margin:3px 0 0 auto;padding:0 7px;font-size:.68rem;display:block}.lumn .lumn-path-min{min-width:12ch;display:inline-block}.lumn .lumn-table thead th+th{padding-left:12px}.lumn .lumn-check-cols{grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:0 16px;display:grid}.lumn .lumn-alert-grid{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:0 24px;display:grid}.lumn #lumn-test-result:empty{display:none}.lumn #lumn-test-result .lumn-callout{margin-top:14px}.lumn .lumn-error-summary li+li{margin-top:6px}.lumn .lumn-error-summary a{min-height:24px;padding:2px 0;display:inline-block}.lumn .lumn-scan-progress{gap:8px;margin:4px 0 14px;display:grid}.lumn .lumn-scan-progress p{margin:0}.lumn .lumn-progress{appearance:none;background:var(--l-track);border:0;border-radius:6px;width:100%;max-width:560px;height:10px;overflow:hidden}.lumn .lumn-progress::-webkit-progress-bar{background:var(--l-track);border-radius:6px}.lumn .lumn-progress::-webkit-progress-value{background:var(--l-bar);border-radius:6px}.lumn .lumn-progress::-moz-progress-bar{background:var(--l-bar);border-radius:6px}.lumn .lumn-scan-counts{border-top:0;border-bottom:1px solid var(--l-border);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));margin:0 0 14px;padding:0 0 14px}.lumn .lumn-scan-counts dd{font-size:1.1rem}.lumn .lumn-queue td,.lumn .lumn-queue th{vertical-align:top}.lumn .lumn-queue .lumn-rate{margin-top:4px;display:inline-block}.lumn .lumn-rate:not(.is-good):not(.is-fair):not(.is-poor){color:var(--l-text-2);background:var(--l-chip-bg)}.lumn .lumn-break{overflow-wrap:anywhere}.lumn .lumn-nowrap{white-space:nowrap;display:block}.lumn .lumn-queue-export{margin-top:14px}.lumn .lumn-settings-grid>*{min-width:0}.lumn .lumn-scroll-x{max-width:100%;position:relative}.lumn.lumn-dash{background:var(--l-surface);border-radius:0;min-height:0;padding:0;font-size:14px}.lumn .lumn-dash-range{color:var(--l-muted);margin:0 0 10px;font-size:.8rem}.lumn .lumn-dash-foot{border-top:1px solid var(--l-border);margin:14px 0 0;padding-top:10px;font-weight:600}.lumn.lumn-dash .lumn-table-toggle{display:none}.lumn .lumn-dash-list{margin:6px 0 0;padding:0;list-style:none}.lumn .lumn-dash-list li{border-bottom:1px solid var(--l-border);overflow-wrap:anywhere;gap:2px;margin:0;padding:6px 0;display:grid}.lumn .lumn-dash-list .lumn-path{color:var(--l-muted);font-size:.8rem}.lumn.lumn-dash .lumn-h3{margin-top:4px;font-size:.9rem}.lumn .lumn-survey-q+.lumn-survey-q{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-survey-q .lumn-h3{margin-bottom:10px}.lumn .lumn-geo-grid{grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:20px;display:grid}.lumn .lumn-tile-map{width:100%;height:auto;max-height:440px;margin:6px 0 8px;display:block}.lumn .lumn-tile-map text{font:600 13px var(--l-font);pointer-events:none}.lumn .lumn-geo-regions{border-top:1px solid var(--l-tile-border);margin-top:20px;padding-top:16px}.lumn .lumn-geo-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:4px;display:flex}.lumn .lumn-geo-head .lumn-h3{margin:0}.lumn .lumn-geo-head .lumn-field-inline{min-width:0;max-width:100%}.lumn .lumn-geo-head .lumn-select{flex:auto;min-width:0;max-width:100%}.lumn .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo;margin-top:4px}.lumn .lumn-pv-list.lumn-geo-list li{counter-increment:lumn-geo;grid-template-columns:2.2em 1fr auto}.lumn .lumn-pv-list.lumn-geo-list li:before{content:counter(lumn-geo) ".";color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn details .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo 10}.lumn .lumn-geo-0 rect,.lumn i.lumn-geo-0{fill:var(--l-track);background:var(--l-track)}.lumn .lumn-geo-1 rect,.lumn i.lumn-geo-1{fill:#dbe8f8;background:#dbe8f8}.lumn .lumn-geo-2 rect,.lumn i.lumn-geo-2{fill:#a9c8ef;background:#a9c8ef}.lumn .lumn-geo-3 rect,.lumn i.lumn-geo-3{fill:#6fa3e3;background:#6fa3e3}.lumn .lumn-geo-4 rect,.lumn i.lumn-geo-4{fill:#2f6fc6;background:#2f6fc6}.lumn .lumn-geo-5 rect,.lumn i.lumn-geo-5{fill:#0b3f8a;background:#0b3f8a}.lumn .lumn-geo-0 text,.lumn .lumn-geo-1 text,.lumn .lumn-geo-2 text,.lumn .lumn-geo-3 text{fill:#0b1f3a}.lumn .lumn-geo-4 text,.lumn .lumn-geo-5 text{fill:#fff}.lumn[data-theme=dark] .lumn-geo-0 rect{fill:#22324c}.lumn[data-theme=dark] .lumn-geo-0 text{fill:#c5ccd6}.lumn .lumn-geo-key{color:var(--l-muted);align-items:center;gap:4px;margin:0 0 6px;font-size:.75rem;display:flex}.lumn .lumn-geo-key i{border-radius:3px;width:18px;height:10px;display:inline-block}.lumn .lumn-geo-key span:first-child{margin-right:4px}.lumn .lumn-geo-key span:last-child{margin-left:4px}html:has(body.lumn-screen){scroll-padding-top:130px}.lumn input[type=file]{min-width:0;max-width:100%;font:inherit;font-size:.88rem}.lumn .lumn-field-inline:has(input[type=file]){flex-wrap:wrap;min-width:0;max-width:100%}.lumn .lumn-preset-diffs{margin:14px 0 12px}.lumn .lumn-preset-diffs .lumn-strong{margin:0 0 6px}.lumn .lumn-diff-list{font-size:inherit;margin:0 0 8px;padding-left:18px}.lumn .lumn-diff-list li{font-size:inherit;margin:0 0 4px}.lumn .lumn-diff-tag{background:var(--l-good-bg);color:var(--l-good);border:1px solid;border-radius:999px;margin-left:6px;padding:1px 8px;font-size:.72rem;font-weight:600;display:inline-block}.lumn .lumn-diff-tag.is-looser{background:var(--l-bad-bg);color:var(--l-bad)}.lumn .lumn-preset-diffs .lumn-help{margin:0}.lumn .lumn-savebar{z-index:99990;background:var(--l-surface);width:min(760px,100% - 32px);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:999px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:0 auto;padding:10px 12px 10px 18px;display:flex;position:fixed;bottom:16px;box-shadow:0 18px 40px -16px #0b1f3a73}.lumn .lumn-savebar[hidden]{display:none}.lumn .lumn-savebar-msg{align-items:center;gap:8px;margin:0;font-size:.92rem;font-weight:600;display:flex}.lumn .lumn-savebar-msg .lumn-ico-sm{color:var(--l-warn);flex:none}.lumn .lumn-savebar-actions{flex-wrap:wrap;gap:8px;display:flex}.lumn.has-savebar .lumn-main{padding-bottom:96px}.lumn.has-savebar .lumn-toast{bottom:96px}@media (prefers-reduced-motion:no-preference){.lumn .lumn-savebar{animation:.18s ease-out lumn-savebar-in}@keyframes lumn-savebar-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}}@media (max-width:600px){.lumn .lumn-savebar{border-radius:18px;width:calc(100% - 16px);padding:12px;bottom:8px}.lumn .lumn-savebar-actions{width:100%}.lumn .lumn-savebar-actions .lumn-btn,.lumn .lumn-savebar-actions .lumn-btn-ghost{flex:1}}.lumn .lumn-license-facts{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px 20px;margin:4px 0 14px;display:grid}.lumn .lumn-license-facts dt{color:var(--l-muted);margin-bottom:2px;font-size:.78rem;font-weight:600}.lumn .lumn-license-facts dd{overflow-wrap:anywhere;margin:0;font-weight:600}.lumn .lumn-license-facts .lumn-tag{margin-left:0;padding:2px 10px;font-size:.78rem}.lumn .lumn-tag.is-good{background:var(--l-good-bg);color:var(--l-good)}.lumn .lumn-tag.is-warn{background:var(--l-warn-bg);color:var(--l-text);outline:1px solid var(--l-warn)}.lumn .lumn-license-form .lumn-input{letter-spacing:.04em;max-width:26rem}.lumn .lumn-locked{text-align:left;max-width:40rem}.lumn .lumn-locked .lumn-inline-actions{margin-top:12px}.lumn #lumn-license-card{margin-bottom:16px}.lumn .lumn-license-nag{align-items:center}.lumn .lumn-license-nag p{flex:1;margin:0}.lumn .lumn-license-facts dd.lumn-mono{white-space:nowrap;overflow-wrap:normal}.lumn .lumn-migrate-list{gap:1rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.lumn .lumn-migrate-list>li{border:1px solid var(--l-border);background:var(--l-surface-2);border-radius:10px;padding:.9rem 1rem}.lumn .lumn-migrate-list p{margin:0 0 .35rem}.lumn .lumn-migrate-list .lumn-inline-actions{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;display:flex}.lumn .lumn-views{position:relative}.lumn .lumn-views>summary{cursor:pointer;list-style:none}.lumn .lumn-views>summary::-webkit-details-marker{display:none}.lumn .lumn-views-pop{z-index:30;background:var(--l-surface);width:min(22rem,90vw);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:10px;padding:.9rem;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 12px 32px #0b1f3a2e}.lumn .lumn-views-list{gap:.5rem;margin:0 0 .75rem;padding:0;list-style:none;display:grid}.lumn .lumn-views-list>li{border-bottom:1px solid var(--l-border);justify-content:space-between;align-items:flex-start;gap:.5rem;padding-bottom:.5rem;display:flex}.lumn .lumn-views-list form:first-child{gap:.1rem;display:grid}.lumn .lumn-link-btn{color:var(--l-text);font:inherit;text-align:left;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.lumn .lumn-link-btn:focus-visible{outline:2px solid var(--l-navy);outline-offset:2px;border-radius:3px}.lumn .lumn-views-save{gap:.4rem;display:grid}.lumn .lumn-ai-total{flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin:0 0 .75rem;display:flex}.lumn .lumn-ai-total+.lumn-table,.lumn .lumn-table+.lumn-table{margin-top:.75rem}.lumn .lumn-table caption.lumn-strong{text-align:left;caption-side:top;padding:.5rem 0 .35rem}.lumn .lumn-views-pop .lumn-callout{margin:0 0 .75rem}.lumn .lumn-views-pop form{margin:0} 2 @layer theme;@font-face{font-family:LUMN Onest;src:url(../fonts/onest-latin-wght-normal.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}.lumn{--l-font:"LUMN Onest", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--l-navy:#0b1f3a;--l-navy-2:#16325a;--l-slate:#8a94a6;--l-grey:#c5ccd6;--l-bg:#e9edf3;--l-surface:#fff;--l-surface-2:#f5f7fa;--l-border:#e3e7ed;--l-border-strong:#6b7588;--l-text:#0b1f3a;--l-text-2:#2a3a52;--l-muted:#5a6478;--l-link:#0a5db0;--l-focus:#0b6bcb;--l-accent:#0b6bcb;--l-good:#067647;--l-good-bg:#e6f4ec;--l-bad:#b42318;--l-bad-bg:#fdecea;--l-warn:#b54708;--l-warn-bg:#fdf2e6;--l-chip-bg:#ebeff5;--l-chip-fg:#0b1f3a;--l-bar:#0b6bcb;--l-bar-2:#8a94a6;--l-grid:#ebeef3;--l-area:#0b6bcb1a;--l-track:#e6eaf0;--l-tip-bg:#0b1f3a;--l-tip-fg:#fff;--l-seg-on:#0b1f3a;--l-seg-on-fg:#fff;--l-c0:#0b1f3a;--l-c1:#2b5bd7;--l-c2:#0f7b6c;--l-c3:#b54708;--l-c4:#8a94a6;--l-c5:#6941c6;--l-tile:#0b1f3a;--l-tile-2:#16325a;--l-tile-border:#24406a;--l-tile-muted:#c9d3e3;--l-radius:28px;--l-radius-sm:18px;--l-shadow:0 30px 60px -30px #0b1f3a2e, 0 1px 0 #fffc inset;--l-lift:0 24px 48px -16px #0b1f3a47;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%235A6478' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:light}.lumn[data-theme=dark]{--l-bg:#08111f;--l-surface:#0f1b2e;--l-surface-2:#15243b;--l-border:#21324b;--l-border-strong:#6a7a94;--l-text:#e9eef6;--l-text-2:#cad3e1;--l-muted:#a3aec0;--l-link:#8ec8ff;--l-focus:#7cc0ff;--l-accent:#7cc0ff;--l-good:#5ad7a6;--l-good-bg:#5ad7a61f;--l-bad:#ff948a;--l-bad-bg:#ff948a1f;--l-warn:#f5b062;--l-warn-bg:#f5b0621f;--l-chip-bg:#1b2d49;--l-chip-fg:#dce6f6;--l-bar:#7cc0ff;--l-bar-2:#5d7090;--l-grid:#1a2a42;--l-area:#7cc0ff1f;--l-track:#1f3049;--l-tip-bg:#dce6f6;--l-tip-fg:#0b1f3a;--l-seg-on:#dce6f6;--l-seg-on-fg:#0b1f3a;--l-c0:#dce6f6;--l-c1:#6e98ff;--l-c2:#3cc6a0;--l-c3:#f5b062;--l-c4:#7f8fa9;--l-c5:#b69cff;--l-tile:#13294a;--l-tile-2:#1b3560;--l-tile-border:#2a4878;--l-shadow:0 1px 0 #ffffff08 inset, 0 12px 28px -18px #0009;--l-lift:0 28px 56px -18px #000000b3;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%23A9B3C4' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:dark}@media (max-width:782px){html:has(body.lumn-screen){scroll-padding-top:72px}}.lumn-wrap{margin:10px 20px 0 2px}.lumn,.lumn *,.lumn :before,.lumn :after{box-sizing:border-box}.lumn{background:var(--l-bg);color:var(--l-text);font-family:var(--l-font);-webkit-font-smoothing:antialiased;border-radius:24px;min-height:calc(100vh - 120px);padding:14px 20px 28px;font-size:15px;line-height:1.5}.lumn h1,.lumn h2,.lumn h3,.lumn p,.lumn ul,.lumn ol,.lumn dl,.lumn dd,.lumn figure{margin:0;padding:0}.lumn h1,.lumn h2,.lumn h3{color:var(--l-text);font-family:var(--l-font)}.lumn a,.lumn a:hover{color:var(--l-link)}.lumn button,.lumn input,.lumn select,.lumn textarea{font:inherit;color:inherit}.lumn button{cursor:pointer}.lumn svg{overflow:visible}.lumn table{border-collapse:collapse}.lumn :focus{box-shadow:none;outline:none}.lumn :focus-visible{outline:3px solid var(--l-focus);outline-offset:2px;box-shadow:none}@media (forced-colors:active){.lumn :focus-visible{outline-color:canvastext}}.lumn .lumn-sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.lumn .lumn-ico{flex:none;width:20px;height:20px}.lumn .lumn-ico-sm{flex:none;width:16px;height:16px}.lumn .lumn-ico-xs{flex:none;width:12px;height:12px}.lumn .lumn-muted{color:var(--l-muted)}.lumn .lumn-strong{font-weight:650}.lumn .lumn-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86rem}.lumn .lumn-topbar{background:var(--l-surface);border-radius:999px;align-items:center;gap:16px;padding:8px 10px 8px 14px;display:flex}@supports (color:color-mix(in lab, red, red)){.lumn .lumn-topbar{background:color-mix(in oklab, var(--l-surface) 86%, transparent)}}.lumn .lumn-topbar{border:1px solid var(--l-border);z-index:30;-webkit-backdrop-filter:blur(14px);position:sticky;top:46px;box-shadow:0 12px 30px -18px #0b1f3a59}@media (max-width:782px){.lumn .lumn-topbar{position:relative;top:0}}.lumn .lumn-brand{color:var(--l-text);border-radius:12px;align-items:center;gap:10px;min-height:40px;text-decoration:none;display:flex}.lumn .lumn-mark{background:var(--l-navy);border-radius:6px;flex:none;width:34px;height:34px;display:block;overflow:hidden}.lumn[data-theme=dark] .lumn-mark{background:#1b3560}.lumn .lumn-mark svg{width:34px;height:34px;display:block}.lumn .lumn-word{letter-spacing:.14em;font-size:1.02rem;font-weight:750}.lumn .lumn-nav{flex:1;min-width:0}.lumn .lumn-nav ul{flex-wrap:wrap;justify-content:end;gap:4px;margin:0;list-style:none;display:flex}.lumn .lumn-nav li{margin:0}.lumn .lumn-nav-link{min-height:40px;color:var(--l-text-2);border-radius:999px;align-items:center;gap:8px;padding:0 14px;font-size:.9rem;font-weight:540;text-decoration:none;display:inline-flex}.lumn .lumn-nav-link:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-link[aria-current=page]{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-link[aria-current=page]{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav-group{position:relative}.lumn .lumn-nav-btn{cursor:pointer;background:0 0;border:0}.lumn .lumn-nav .lumn-nav-btn .lumn-nav-chev{width:16px;height:16px;transition:transform .15s;display:inline-block}.lumn .lumn-nav-btn[aria-expanded=true] .lumn-nav-chev{transform:rotate(180deg)}.lumn .lumn-nav-btn[aria-expanded=true]{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-btn.is-current{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-btn.is-current{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav .lumn-nav-menu{z-index:60;border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:14rem;max-width:calc(100vw - 32px);box-shadow:var(--l-lift);border-radius:18px;justify-content:stretch;gap:2px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px);left:0}.lumn .lumn-nav .lumn-nav-menu[hidden]{display:none}.lumn .lumn-nav .lumn-nav-menu.is-right{left:auto;right:0}.lumn .lumn-nav-menu .lumn-nav-link{border-radius:12px;width:100%;display:flex}.lumn .lumn-nav-menu .lumn-nav-link .lumn-ico{display:inline-block}@media (prefers-reduced-motion:reduce){.lumn .lumn-nav-btn .lumn-nav-chev{transition:none}}@media (forced-colors:active){.lumn .lumn-nav-btn.is-current,.lumn .lumn-nav-link[aria-current=page]{border:2px solid highlight}}.lumn .lumn-icon-btn{border:1px solid var(--l-border-strong);background:var(--l-surface);width:42px;height:42px;color:var(--l-text);border-radius:999px;flex:none;place-items:center;display:grid}.lumn .lumn-icon-btn:hover{background:var(--l-surface-2)}.lumn .lumn-theme-btn .lumn-sun{display:none}.lumn[data-theme=dark] .lumn-theme-btn .lumn-sun{display:block}.lumn[data-theme=dark] .lumn-theme-btn .lumn-moon{display:none}.lumn .lumn-main{padding-top:24px}.lumn .lumn-page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin:0 4px 20px;display:flex}.lumn .lumn-page-head h1{letter-spacing:-.03em;padding:0;font-size:2rem;font-weight:650;line-height:1.15}.lumn .lumn-lede{color:var(--l-muted);margin-top:4px}.lumn .lumn-head-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline{align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline label{color:var(--l-muted);font-size:.85rem;font-weight:550}.lumn .lumn-btn,.lumn .lumn-btn-ghost{border-radius:999px;align-items:center;gap:8px;min-height:40px;padding:0 16px;font-size:.9rem;font-weight:600;line-height:1.2;text-decoration:none;display:inline-flex}.lumn .lumn-btn{background:var(--l-navy);color:#fff;border:1px solid #0000}.lumn .lumn-btn:hover{background:var(--l-navy-2);color:#fff}.lumn[data-theme=dark] .lumn-btn{color:#0b1f3a;background:#dce6f6}.lumn[data-theme=dark] .lumn-btn:hover{background:#c6d5ee}.lumn .lumn-btn-danger{background:var(--l-bad)}.lumn .lumn-btn-danger:hover{background:#912018}.lumn[data-theme=dark] .lumn-btn-danger{color:#08111f;background:#ff948a}.lumn .lumn-btn-ghost{background:var(--l-surface);color:var(--l-text);border:1px solid var(--l-border-strong)}.lumn .lumn-btn-ghost:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn form.htmx-request .lumn-btn,.lumn form.htmx-request .lumn-btn-ghost{opacity:.7;pointer-events:none;cursor:progress}.lumn .lumn-btn-sm{min-height:36px;padding:0 12px;font-size:.82rem}.lumn .lumn-btn:active,.lumn .lumn-btn-ghost:active,.lumn .lumn-tool:active,.lumn .lumn-icon-btn:active{transform:translateY(1px)}.lumn .lumn-btn[disabled],.lumn .lumn-btn-ghost[disabled]{cursor:not-allowed;background:var(--l-surface-2);color:var(--l-muted);border:1px dashed var(--l-border-strong)}.lumn .lumn-select,.lumn .lumn-input{border:1px solid var(--l-border-strong);background-color:var(--l-surface);min-height:40px;color:var(--l-text);box-shadow:none;border-radius:12px;max-width:100%;padding:8px 12px;line-height:1.4}.lumn textarea.lumn-input{resize:vertical;width:100%;min-height:88px}.lumn input.lumn-input[type=text],.lumn input.lumn-input[type=url]{width:100%}.lumn .lumn-select{appearance:none;background-image:var(--l-select-caret);background-position:right .9rem center;background-repeat:no-repeat;background-size:.7rem;border-radius:999px;padding:0 2.5rem 0 14px}.lumn .lumn-select::-ms-expand{display:none}@media (forced-colors:active){.lumn .lumn-select{appearance:auto;padding-right:revert;background-image:none}}.lumn .lumn-select:focus,.lumn .lumn-input:focus{border-color:var(--l-focus);box-shadow:none;outline:none}.lumn .lumn-select:focus-visible,.lumn .lumn-input:focus-visible{outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-input[aria-invalid=true]{border-color:var(--l-bad);border-width:2px}.lumn .lumn-input[readonly]{background:var(--l-surface-2)}.lumn .lumn-board{grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-flow:row;gap:16px;display:grid}.lumn .lumn-board.htmx-request{opacity:.6;transition:opacity .2s}.lumn .lumn-panel{grid-column:span var(--span,6);background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);flex-direction:column;min-width:0;padding:24px;display:flex;position:relative}.lumn .lumn-panel[data-span="12"]{--span:12}.lumn .lumn-panel[data-span="8"]{--span:8}.lumn .lumn-panel[data-span="7"]{--span:7}.lumn .lumn-panel[data-span="6"]{--span:6}.lumn .lumn-panel[data-span="5"]{--span:5}.lumn .lumn-panel[data-span="4"]{--span:4}.lumn .lumn-panel-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 12px;margin-bottom:14px;display:flex}.lumn .lumn-panel-titles{flex:180px;min-width:0}.lumn .lumn-panel-head h2{letter-spacing:-.01em;font-size:1rem;font-weight:640;line-height:1.3}.lumn .lumn-panel-sub{color:var(--l-muted);margin-top:2px;font-size:.8rem}.lumn .lumn-panel-tools{flex:none;align-items:center;gap:4px;display:flex}.lumn .lumn-tool{width:32px;height:32px;color:var(--l-muted);background:0 0;border:1px solid #0000;border-radius:10px;place-items:center;padding:0;display:grid}.lumn .lumn-tool:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-drag-handle{cursor:grab;touch-action:none}.lumn .lumn-panel-body{flex:1;min-width:0}.lumn .lumn-panel.is-dragging{z-index:20;box-shadow:var(--l-lift);cursor:grabbing;transition:none}.lumn .lumn-panel.is-grabbed{outline:3px dashed var(--l-focus);outline-offset:3px}.lumn .lumn-board.is-dragging{-webkit-user-select:none;user-select:none}.lumn .lumn-empty{color:var(--l-muted);padding:8px 0;font-size:.88rem}.lumn .lumn-move-menu{border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:210px;color:var(--l-text);box-shadow:var(--l-lift);border-radius:14px;margin:0;padding:6px;position:fixed;inset:auto}.lumn .lumn-move-menu button{text-align:left;width:100%;min-height:36px;color:var(--l-text);background:0 0;border:0;border-radius:9px;align-items:center;padding:0 10px;font-size:.88rem;display:flex}.lumn .lumn-move-menu button:hover,.lumn .lumn-move-menu button:focus-visible{background:var(--l-surface-2)}.lumn .lumn-move-menu button:disabled{color:var(--l-muted);cursor:not-allowed;text-decoration:line-through}.lumn .lumn-menu-label{text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);padding:8px 10px 4px;font-size:.72rem;font-weight:600}.lumn .lumn-kpi-grid{grid-template-rows:auto auto;grid-template-columns:1.5fr 1fr 1fr;gap:14px;display:grid}.lumn .lumn-kpi{background:var(--l-surface-2);border-radius:20px;min-width:0;padding:16px}.lumn .lumn-kpi.is-hero{background:var(--l-tile);color:#fff;flex-direction:column;grid-row:span 2;justify-content:space-between;display:flex}.lumn .lumn-kpi.is-hero .lumn-kpi-label,.lumn .lumn-kpi.is-hero .lumn-kpi-note{color:var(--l-tile-muted)}.lumn .lumn-kpi.is-hero .lumn-kpi-icon{color:#fff;background:#ffffff1f}.lumn .lumn-kpi.is-hero .lumn-kpi-value{color:#fff;font-size:3.2rem}.lumn .lumn-kpi.is-hero .lumn-delta.is-good{color:#7fe6bc;background:#5ad7a629}.lumn .lumn-kpi.is-hero .lumn-delta.is-bad{color:#ffb3ab;background:#ff948a29}.lumn .lumn-kpi.is-hero .lumn-delta.is-flat{color:#dce6f6;background:#ffffff1a}.lumn .lumn-kpi-top{align-items:center;gap:10px;display:flex}.lumn .lumn-kpi-icon{background:var(--l-chip-bg);width:36px;height:36px;color:var(--l-chip-fg);border-radius:10px;flex:none;place-items:center;display:grid}.lumn .lumn-kpi-label{color:var(--l-text-2);overflow-wrap:anywhere;min-width:0;font-size:.88rem;font-weight:560}.lumn .lumn-kpi-value{letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--l-text);margin:12px 0 6px;font-size:1.9rem;font-weight:620;line-height:1.05}.lumn .lumn-kpi-meta{flex-wrap:wrap;align-items:center;gap:6px;font-size:.78rem;display:flex}.lumn .lumn-kpi-note{color:var(--l-muted)}.lumn .lumn-delta{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:3px;padding:2px 7px;font-weight:650;display:inline-flex}.lumn .lumn-delta.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-delta.is-bad{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-delta.is-flat{color:var(--l-muted);background:var(--l-chip-bg)}.lumn .lumn-live-dot{background:0 0}.lumn .lumn-live-dot:after{content:"";background:var(--l-good);border-radius:50%;width:10px;height:10px;animation:2.4s ease-out infinite lumn-breathe}@keyframes lumn-breathe{0%{box-shadow:0 0 0 0 color-mix(in oklab, var(--l-good) 55%, transparent)}70%{box-shadow:0 0 0 10px #0000}to{box-shadow:0 0 #0000}}.lumn .lumn-chart-slot{width:100%;position:relative;overflow:hidden}.lumn .lumn-tip{z-index:2;pointer-events:none;background:var(--l-text);min-width:120px;color:var(--l-surface);white-space:nowrap;border-radius:10px;flex-direction:column;gap:2px;padding:8px 10px;font-size:12.5px;line-height:1.35;display:flex;position:absolute;box-shadow:0 8px 24px #0b1f3a38}.lumn .lumn-tip strong{opacity:.85;font-weight:650}.lumn .lumn-tip .lumn-tip-main{font-variant-numeric:tabular-nums;font-size:14px;font-weight:700}.lumn .lumn-hit{cursor:crosshair}.lumn .lumn-chart-slot.is-holding .lumn-day-chart{max-width:none}.lumn .lumn-cross{stroke:var(--l-muted);stroke-width:1px;stroke-dasharray:3 3;pointer-events:none}.lumn .lumn-cross.is-on{stroke-opacity:1}.lumn .lumn-bar.is-hover{fill:var(--l-bar)}.lumn .lumn-pt.is-hover{fill:var(--l-bar);r:5px}.lumn .lumn-day-chart:focus-visible{outline:2px solid var(--l-focus,#0b6bcb);outline-offset:4px;border-radius:6px}.lumn .lumn-day-chart{width:auto;max-width:100%;height:auto;display:block;overflow:visible}.lumn .lumn-grid-line{stroke:var(--l-grid);stroke-width:1px}.lumn .lumn-axis{fill:var(--l-muted);font-size:11.5px;font-family:var(--l-font)}.lumn .lumn-bar{fill:var(--l-bar-2)}.lumn .lumn-bar.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart .lumn-bar{transform-box:fill-box;transform-origin:bottom;animation:.7s cubic-bezier(.16,1,.3,1) both lumn-grow}@keyframes lumn-grow{0%{transform:scaleY(.04)}to{transform:scaleY(1)}}.lumn .lumn-chart-slot.is-still .lumn-bar{animation:none}.lumn .lumn-line{fill:none;stroke:var(--l-bar);stroke-width:2.5px;stroke-linejoin:round}.lumn .lumn-area{fill:var(--l-area)}.lumn .lumn-pt{fill:var(--l-surface);stroke:var(--l-bar);stroke-width:2px}.lumn .lumn-pt.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart[data-kind=bar] .lumn-as-line,.lumn .lumn-day-chart[data-kind=line] .lumn-as-bars{display:none}.lumn .lumn-avg-line{stroke:var(--l-muted);stroke-dasharray:4 5;stroke-width:1.2px}.lumn .lumn-peak-label rect{fill:var(--l-tip-bg)}.lumn .lumn-peak-label text{fill:var(--l-tip-fg);font-size:12px;font-weight:700;font-family:var(--l-font)}.lumn .lumn-cmp-halo{fill:none;stroke:var(--l-surface);stroke-width:5px;stroke-linejoin:round}.lumn .lumn-cmp-line{fill:none;stroke:var(--l-c5);stroke-width:2px;stroke-dasharray:7 5;stroke-linejoin:round}.lumn .lumn-note-pin line{stroke:var(--l-warn);stroke-width:1.5px;stroke-dasharray:2 4}.lumn .lumn-note-pin circle{fill:var(--l-warn);stroke:var(--l-surface);stroke-width:2px}.lumn .lumn-chart-key{color:var(--l-text-2);flex-wrap:wrap;gap:6px 18px;margin:10px 0 0;padding:0;font-size:.82rem;list-style:none;display:flex}.lumn .lumn-chart-key li{align-items:center;gap:8px;margin:0;display:flex}.lumn .lumn-key-solid,.lumn .lumn-key-dash{border-top:3px solid var(--l-bar);width:22px;height:0}.lumn .lumn-key-dash{border-top:2px dashed var(--l-c5)}.lumn .lumn-key-pin{background:var(--l-warn);border-radius:50%;width:10px;height:10px}.lumn .lumn-notes{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-notes-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.lumn .lumn-h3{color:var(--l-text);margin:0;font-size:.95rem;font-weight:650}.lumn .lumn-note-list{margin:10px 0 0;padding:0;list-style:none}.lumn .lumn-note-list li{border-bottom:1px solid var(--l-grid);align-items:center;gap:12px;margin:0;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-note-list li:last-child{border-bottom:0}.lumn .lumn-note-list form{margin:0 0 0 auto}.lumn .lumn-note-day{min-width:52px;color:var(--l-warn);font-variant-numeric:tabular-nums;flex:none;font-weight:600}.lumn .lumn-note-text{overflow-wrap:anywhere;min-width:0}.lumn .lumn-dialog{border:1px solid var(--l-border);background:var(--l-surface);width:min(440px,100vw - 32px);color:var(--l-text);border-radius:20px;padding:22px;box-shadow:0 24px 60px #0b1f3a47}.lumn .lumn-dialog::backdrop{background:#08111f73}.lumn .lumn-dialog .lumn-field:first-of-type{margin-top:14px}.lumn .lumn-dialog .lumn-input{width:100%}.lumn .lumn-dialog-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.lumn .lumn-chart-foot{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;margin-top:12px;display:flex}.lumn .lumn-seg{border:1px solid var(--l-border-strong);border-radius:999px;gap:2px;margin-right:4px;padding:2px;display:inline-flex}.lumn .lumn-seg-btn{min-height:28px;color:var(--l-muted);background:0 0;border:0;border-radius:999px;padding:0 12px;font-size:.8rem;font-weight:560}.lumn .lumn-seg-btn[aria-pressed=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg)}.lumn .lumn-seg-wide{flex-wrap:wrap;max-width:100%;margin:0 0 14px}.lumn .lumn-seg-wide .lumn-seg-btn{min-height:32px}.lumn .lumn-table-toggle{border:1px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px;font-size:.84rem;font-weight:600;display:inline-flex}.lumn .lumn-table-toggle:hover{background:var(--l-surface-2)}.lumn .lumn-table-toggle[aria-expanded=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg);border-color:#0000}.lumn .lumn-data-table{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;width:100%;max-height:340px;margin-top:14px;position:relative;overflow:auto}.lumn .lumn-data-table[hidden]{display:none}.lumn .lumn-data-table table{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums;width:100%;font-size:.86rem}.lumn .lumn-data-table caption{text-align:left;color:var(--l-text-2);padding:12px 16px 4px;font-size:.82rem;font-weight:650}.lumn .lumn-data-table thead th{z-index:1;background:var(--l-surface);text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:10px 16px;font-size:.72rem;font-weight:600;position:sticky;top:0}.lumn .lumn-data-table tbody th,.lumn .lumn-data-table td,.lumn .lumn-data-table tfoot th{border-bottom:1px solid var(--l-border);text-align:left;white-space:nowrap;padding:9px 16px;font-weight:500}.lumn .lumn-data-table tbody tr:nth-child(2n){background:var(--l-surface-2)}.lumn .lumn-data-table tbody tr:hover{background:var(--l-chip-bg)}.lumn .lumn-data-table tr.is-peak th,.lumn .lumn-data-table tr.is-peak td:nth-child(2){font-weight:700}.lumn .lumn-data-table tfoot th,.lumn .lumn-data-table tfoot td{background:var(--l-surface);border-top:1px solid var(--l-border-strong);border-bottom:0;font-weight:700;position:sticky;bottom:0}.lumn .lumn-num{white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right!important}.lumn .lumn-wd{width:2.6em;color:var(--l-muted);font-weight:500;display:inline-block}.lumn .lumn-bar-cell{width:30%;min-width:80px}.lumn .lumn-bar-cell .lumn-meter{margin:0}.lumn .lumn-chg{align-items:center;gap:3px;font-weight:600;display:inline-flex}.lumn .lumn-chg.is-good{color:var(--l-good)}.lumn .lumn-chg.is-bad{color:var(--l-bad)}.lumn .lumn-chg.is-flat{color:var(--l-muted)}.lumn .lumn-table{width:100%;font-size:.88rem}.lumn .lumn-table thead th{text-transform:uppercase;letter-spacing:.05em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:0 0 8px;font-size:.75rem;font-weight:600}.lumn .lumn-table thead th:not(:first-child),.lumn .lumn-table td{text-align:right;font-variant-numeric:tabular-nums}.lumn .lumn-table tbody th{text-align:left;border-bottom:1px solid var(--l-border);padding:10px 12px 10px 0;font-weight:500}.lumn .lumn-table td{border-bottom:1px solid var(--l-border);white-space:nowrap;vertical-align:top;padding:10px 0 10px 12px}.lumn .lumn-table-text td{text-align:left;white-space:normal}.lumn .lumn-table-text thead th{text-align:left!important}.lumn .lumn-table-scroll{position:relative;overflow-x:auto}.lumn .lumn-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.84rem}.lumn .lumn-row-sub{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-badge{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;align-items:center;gap:4px;margin-left:8px;padding:1px 8px;font-size:.7rem;font-weight:650;display:inline-flex}.lumn .lumn-meter{background:var(--l-track);border-radius:4px;height:4px;margin-top:7px;display:block;overflow:hidden}.lumn .lumn-meter>span{background:var(--l-bar);border-radius:4px;height:100%;display:block}.lumn .lumn-meter-lg{height:8px}.lumn .lumn-bars-list{gap:14px;margin:0;list-style:none;display:grid}.lumn .lumn-bars-list li{margin:0}.lumn .lumn-dv-row{justify-content:space-between;gap:12px;font-size:.88rem;font-weight:550;display:flex}.lumn .lumn-dv-val{font-variant-numeric:tabular-nums}.lumn .lumn-mini-stats{border-top:1px solid var(--l-border);grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px;padding-top:14px;display:grid}.lumn .lumn-mini-stats dt{color:var(--l-muted);font-size:.72rem}.lumn .lumn-mini-stats dd{margin:2px 0 0;font-size:.86rem;font-weight:600}.lumn .lumn-donut-wrap{flex-wrap:wrap;align-items:center;gap:20px;display:flex}.lumn .lumn-donut-box{flex:none;width:168px;position:relative}.lumn .lumn-donut{width:168px;height:168px;display:block}.lumn .lumn-donut-track{stroke:var(--l-track)}.lumn .lumn-seg-0{stroke:var(--l-c0)}.lumn .lumn-sw-0{background:var(--l-c0)}.lumn .lumn-seg-1{stroke:var(--l-c1)}.lumn .lumn-sw-1{background:var(--l-c1)}.lumn .lumn-seg-2{stroke:var(--l-c2)}.lumn .lumn-sw-2{background:var(--l-c2)}.lumn .lumn-seg-3{stroke:var(--l-c3)}.lumn .lumn-sw-3{background:var(--l-c3)}.lumn .lumn-seg-4{stroke:var(--l-c4)}.lumn .lumn-sw-4{background:var(--l-c4)}.lumn .lumn-seg-5{stroke:var(--l-c5)}.lumn .lumn-sw-5{background:var(--l-c5)}.lumn .lumn-donut-center{background:var(--l-surface);text-align:center;border-radius:50%;place-content:center;display:grid;position:absolute;inset:22px}.lumn .lumn-dc-num{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:650}.lumn .lumn-dc-lbl{color:var(--l-muted);font-size:.72rem}.lumn .lumn-legend{flex:180px;font-size:.86rem}.lumn .lumn-legend th{text-align:left;align-items:center;gap:10px;padding:4px 8px 4px 0;font-weight:500;display:flex}.lumn .lumn-legend td{padding:4px 0 4px 10px}.lumn .lumn-sw{border-radius:4px;flex:none;width:12px;height:12px;display:inline-block}.lumn #lumn-panel-privacy{background:var(--l-tile);color:#fff;border:none}.lumn #lumn-panel-privacy h2{color:#fff}.lumn #lumn-panel-privacy .lumn-panel-sub,.lumn #lumn-panel-privacy .lumn-preset-k,.lumn #lumn-panel-privacy .lumn-pv-foot,.lumn #lumn-panel-privacy .lumn-tool{color:var(--l-tile-muted)}.lumn #lumn-panel-privacy .lumn-tool:hover{background:var(--l-tile-2);color:#fff}.lumn #lumn-panel-privacy :focus-visible{outline-color:#9ccbff}.lumn #lumn-panel-privacy .lumn-btn-ghost{color:#fff;border-color:var(--l-slate);background:0 0}.lumn #lumn-panel-privacy .lumn-btn-ghost:hover{background:var(--l-tile-2)}.lumn .lumn-preset{background:var(--l-surface-2);border:1px solid var(--l-border);border-radius:16px;align-items:center;gap:12px;padding:12px;display:flex}.lumn #lumn-panel-privacy .lumn-preset{background:var(--l-tile-2);border-color:var(--l-tile-border)}.lumn .lumn-preset-icon{color:#0b1f3a;background:#fff;border-radius:10px;flex:none;place-items:center;width:40px;height:40px;display:grid}.lumn .lumn-preset-k{font-size:.75rem}.lumn .lumn-preset-v{font-size:1.05rem;font-weight:700}.lumn .lumn-preset-mod{color:var(--l-tile-muted);font-size:.82rem;font-weight:500}.lumn .lumn-preset .lumn-btn-ghost{margin-left:auto}.lumn .lumn-pv-list{margin:12px 0 0;list-style:none;display:grid}.lumn .lumn-pv-list li{border-bottom:1px solid var(--l-tile-border);grid-template-columns:16px 1fr auto;align-items:center;gap:10px;margin:0;padding:8px 0;font-size:.86rem;display:grid}.lumn .lumn-pv-list .lumn-ico-sm{color:#7fe6bc}.lumn .lumn-pv-v{text-align:right;font-weight:600}.lumn .lumn-pv-foot{margin-top:10px;font-size:.8rem}.lumn .lumn-rt-count{color:var(--l-muted);margin-bottom:10px;font-size:.86rem}.lumn .lumn-rt-feed{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-rt-feed li{background:var(--l-surface-2);border-radius:16px;grid-template-rows:auto auto;grid-template-columns:1fr auto;column-gap:10px;margin:0;padding:12px 14px;font-size:.85rem;display:grid}.lumn .lumn-rt-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem}.lumn .lumn-rt-src{color:var(--l-muted);grid-row:2;font-size:.78rem}.lumn .lumn-rt-time{color:var(--l-muted);font-variant-numeric:tabular-nums;grid-row:1/3;align-self:center;font-size:.78rem}.lumn .lumn-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:16px;margin-top:16px;display:grid}.lumn .lumn-card{background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);min-width:0;padding:24px}.lumn .lumn-card>h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-card.is-danger{border-color:var(--l-bad);border-width:2px}.lumn .lumn-span-all{grid-column:1/-1}.lumn #lumn-settings>.lumn-card{margin-top:0}.lumn .lumn-help{color:var(--l-muted);margin:2px 0 8px;font-size:.82rem}.lumn .lumn-legal{margin-top:12px}.lumn .lumn-field{margin:16px 0}.lumn .lumn-field-row{grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:0 16px;display:grid}.lumn .lumn-field-row>.lumn-field{margin:16px 0 0}.lumn .lumn-field>label,.lumn .lumn-label{margin-bottom:4px;font-size:.9rem;font-weight:600;display:block}.lumn .lumn-fieldset{border:0;min-width:0;margin:16px 0;padding:0}.lumn .lumn-fieldset legend{margin-bottom:6px;padding:0;font-size:.9rem;font-weight:600}.lumn .lumn-radio{align-items:flex-start;gap:10px;min-height:28px;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-radio input[type=radio],.lumn .lumn-radio input[type=checkbox]{flex:none;width:18px;height:18px}.lumn .lumn-radio input{margin-top:3px}.lumn .lumn-check{align-items:flex-start;gap:12px;margin:14px 0;display:flex}.lumn .lumn-check input[type=checkbox]{flex:none;width:18px;height:18px;margin-top:3px}.lumn .lumn-check label{font-size:.9rem;font-weight:600}.lumn .lumn-check .lumn-help{margin:2px 0 0}.lumn input[type=checkbox],.lumn input[type=radio]{accent-color:var(--l-navy)}.lumn[data-theme=dark] input[type=checkbox],.lumn[data-theme=dark] input[type=radio]{accent-color:#7cc0ff}.lumn .lumn-input-suffix{align-items:center;gap:8px;display:flex}.lumn .lumn-input-suffix .lumn-input{width:120px}.lumn .lumn-preset-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:8px 0 14px;display:grid}.lumn .lumn-radio-card{border:1px solid var(--l-border-strong);background:var(--l-surface);cursor:pointer;border-radius:18px;gap:6px;padding:14px;display:grid;position:relative}.lumn .lumn-radio-card input{position:absolute;top:16px;right:14px}.lumn .lumn-radio-card:has(input:checked){border-width:2px;border-color:var(--l-navy);background:var(--l-surface-2)}.lumn[data-theme=dark] .lumn-radio-card:has(input:checked){border-color:#7cc0ff}.lumn .lumn-radio-card:has(input:focus-visible){outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-radio-title{padding-right:24px;font-weight:700}.lumn .lumn-radio-text{color:var(--l-muted);font-size:.8rem}.lumn .lumn-tag{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;margin-left:4px;padding:1px 8px;font-size:.68rem;font-weight:650}.lumn .lumn-form-actions{grid-column:1/-1;justify-content:flex-end;display:flex}.lumn .lumn-inline-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.lumn .lumn-rules-count{color:var(--l-text-2);margin-top:6px;font-size:.82rem}.lumn .lumn-rules-count ul{margin:4px 0 0 18px;list-style:outside}.lumn .lumn-error{color:var(--l-bad);align-items:center;gap:6px;margin-top:6px;font-size:.82rem;font-weight:600;display:flex}.lumn .lumn-error-summary{background:var(--l-bad-bg);border:2px solid var(--l-bad);border-radius:18px;margin-bottom:16px;padding:16px 18px}.lumn .lumn-error-summary h2{margin-bottom:6px;font-size:1rem}.lumn .lumn-error-summary ul{margin-left:18px;list-style:outside}.lumn .lumn-callout{background:var(--l-surface);border:1px solid var(--l-border-strong);border-radius:16px;align-items:flex-start;gap:10px;margin-bottom:16px;padding:12px 16px;font-size:.9rem;display:flex}.lumn .lumn-callout .lumn-ico-sm{margin-top:3px}.lumn .lumn-callout.is-good{border-color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-callout.is-good .lumn-ico-sm{color:var(--l-good)}.lumn .lumn-callout.is-warn{border-color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-callout.is-warn .lumn-ico-sm{color:var(--l-warn)}.lumn .lumn-dl{gap:0;display:grid}.lumn .lumn-dl>div{border-bottom:1px solid var(--l-border);justify-content:space-between;gap:12px;padding:9px 0;font-size:.88rem;display:flex}.lumn .lumn-dl dt{color:var(--l-muted)}.lumn .lumn-dl dd{text-align:right;font-weight:600}.lumn .lumn-check-list{gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-check-list li{align-items:flex-start;gap:10px;margin:0;font-size:.88rem;display:flex}.lumn .lumn-check-list .lumn-ico-sm{color:var(--l-bad);margin-top:3px}.lumn .lumn-toast{z-index:100000;background:var(--l-tip-bg);max-width:360px;color:var(--l-tip-fg);box-shadow:var(--l-lift);border-radius:14px;padding:12px 16px;font-size:.88rem;position:fixed;bottom:24px;right:24px}.lumn .lumn-toast[hidden]{display:none}.lumn .lumn-a11y-k-error{--k:var(--l-bad)}.lumn .lumn-a11y-k-alert{--k:var(--l-warn)}.lumn .lumn-a11y-k-pass{--k:var(--l-good)}.lumn .lumn-a11y-k-review{--k:var(--l-link)}.lumn .lumn-a11y-reason{border-left:4px solid var(--k);background:var(--l-surface);border-radius:0 10px 10px 0;padding:8px 12px}.lumn .lumn-a11y-shape{width:18px;height:18px;color:var(--k,currentColor);flex:none}.lumn .lumn-a11y-status{min-height:1.5em;margin:12px 0 4px;font-weight:600}.lumn .lumn-a11y-status.is-error{color:var(--l-bad)}.lumn .lumn-a11y-results>h2{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.lumn .lumn-a11y-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:6px 0 4px;display:flex}.lumn .lumn-a11y-toolbar .lumn-inline-actions{margin-top:0}.lumn .lumn-a11y-filters{flex-wrap:wrap;gap:8px;display:flex}.lumn .lumn-a11y-filter{border:2px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px 0 10px;font-size:.88rem;font-weight:600;display:inline-flex}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:var(--k);background:var(--l-surface-2)}.lumn .lumn-a11y-filter[aria-pressed=false],.lumn .lumn-a11y-filter[aria-pressed=false] .lumn-a11y-shape{color:var(--l-muted)}.lumn .lumn-a11y-filter[aria-pressed=false]>span:first-of-type{text-decoration:line-through}.lumn .lumn-a11y-count{font-variant-numeric:tabular-nums;background:var(--l-chip-bg);color:var(--l-chip-fg);border-radius:999px;padding:1px 8px;font-size:.78rem}.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1.55fr) minmax(300px,1fr);align-items:start;gap:20px;margin-top:12px;display:grid}.lumn .lumn-a11y-layout.is-list-only{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-frame{border:1px solid var(--l-border-strong);border-radius:var(--l-radius-sm);background:#fff;width:100%;height:clamp(420px,72vh,920px);display:block}.lumn .lumn-a11y-key{flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:8px;display:flex}.lumn .lumn-a11y-key>span{align-items:center;gap:4px;display:inline-flex}.lumn .lumn-a11y-side{min-width:0}.lumn .lumn-a11y-list{max-height:clamp(260px,60vh,760px);margin-top:6px;padding:2px 4px 2px 2px;overflow-y:auto}.lumn .lumn-a11y-group{align-items:center;gap:6px;margin:14px 0 6px;font-size:.9rem;font-weight:650;display:flex}.lumn .lumn-a11y-group svg{width:18px;height:18px;color:var(--k)}.lumn .lumn-a11y-group:first-child{margin-top:0}.lumn .lumn-a11y-items{gap:6px;margin:0;list-style:none;display:grid}.lumn .lumn-a11y-items li{margin:0}.lumn .lumn-a11y-item{text-align:left;border:1px solid var(--l-border);border-left:4px solid var(--k);background:var(--l-surface);width:100%;color:var(--l-text);border-radius:14px;align-items:flex-start;gap:10px;min-height:44px;padding:9px 12px;font-size:.88rem;line-height:1.4;display:flex}.lumn .lumn-a11y-item:hover{background:var(--l-surface-2)}.lumn .lumn-a11y-item[aria-current=true]{background:var(--l-surface-2);border-color:var(--k);box-shadow:inset 0 0 0 1px var(--k)}.lumn .lumn-a11y-num{background:var(--k,var(--l-navy));min-width:24px;height:24px;color:var(--l-surface);border-radius:12px;flex:none;place-items:center;padding:0 6px;font-size:.75rem;font-weight:700;display:inline-grid}.lumn .lumn-a11y-n{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-a11y-detail{border-radius:var(--l-radius-sm);border:2px solid var(--k,var(--l-border-strong));background:var(--l-surface-2);margin-top:16px;padding:18px}.lumn .lumn-a11y-detail h3{align-items:flex-start;gap:8px;margin:4px 0 8px;font-size:1.05rem;line-height:1.35;display:flex}.lumn .lumn-a11y-detail h4{margin:14px 0 4px;font-size:.9rem}.lumn .lumn-a11y-detail h5{color:var(--l-text-2);margin:12px 0 4px;font-size:.82rem}.lumn .lumn-a11y-detail p{margin:6px 0;font-size:.9rem}.lumn .lumn-a11y-detail ul{margin:0 0 0 18px;font-size:.88rem;list-style:outside}.lumn .lumn-a11y-badge{color:var(--k);align-items:center;gap:6px;font-size:.8rem;font-weight:700;display:inline-flex}.lumn .lumn-a11y-badge svg{width:18px;height:18px}.lumn .lumn-a11y-cols{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:0 16px;display:grid}.lumn .lumn-a11y-code{border:1px solid var(--l-border);background:var(--l-surface);white-space:pre-wrap;word-break:break-word;border-radius:12px;max-height:14rem;margin:4px 0 8px;padding:10px 12px;font:.8rem/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.lumn .lumn-a11y-fix{border-top:1px solid var(--l-border-strong);margin-top:16px;padding-top:12px}.lumn .lumn-a11y-fix .lumn-field{margin:10px 0}.lumn .lumn-a11y-fix .lumn-input{width:100%}.lumn .lumn-a11y-fix .lumn-btn-sm{margin-top:8px}.lumn .lumn-a11y-color{border:1px solid var(--l-border-strong);background:var(--l-surface);border-radius:10px;width:64px;height:40px;padding:2px}.lumn .lumn-a11y-export{border-top:1px solid var(--l-border);flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;padding-top:14px;display:flex}.lumn .lumn-a11y-export[hidden]{display:none}.lumn .lumn-a11y-export .lumn-btn-ghost{align-items:center;gap:6px;display:inline-flex}.lumn .lumn-a11y-row-actions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.lumn .lumn-a11y-row-actions form{display:contents}.lumn .lumn-a11y-row-actions .lumn-btn-ghost{align-items:center;text-decoration:none;display:inline-flex}.lumn .lumn-a11y-tile-stats{border-top:0;margin-top:0;padding-top:0}.lumn .lumn-a11y-tile-stats dd{font-variant-numeric:tabular-nums;font-size:1.4rem;font-weight:700}@media (max-width:1100px){.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-list{max-height:none}}@media (forced-colors:active){.lumn .lumn-a11y-shape,.lumn .lumn-a11y-group svg,.lumn .lumn-a11y-badge svg{forced-color-adjust:none;color:canvastext}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:highlight}.lumn .lumn-a11y-item,.lumn .lumn-a11y-num{border:1px solid canvastext}}.lumn .lumn-delete-box{border-top:1px solid var(--l-border);margin-top:16px;padding-top:14px}.lumn .lumn-delete-box .lumn-inline-actions form{display:inline}.lumn .lumn-inline-form{margin-left:6px;display:inline-block}.lumn .lumn-back{margin:14px 0 0;font-weight:600}.lumn .lumn-scan-runs th[scope=row] a{font-weight:600}.lumn .lumn-scan-confirm .lumn-inline-actions form{display:inline}@media (max-width:1280px){.lumn .lumn-panel[data-span="4"],.lumn .lumn-panel[data-span="5"]{--span:6}.lumn .lumn-panel[data-span="7"],.lumn .lumn-panel[data-span="8"]{--span:12}.lumn .lumn-preset-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:960px){.lumn .lumn-board{grid-template-columns:minmax(0,1fr)}.lumn .lumn-panel{grid-column:1/-1!important}.lumn .lumn-settings-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi-grid{grid-template-columns:1fr 1fr}.lumn .lumn-kpi.is-hero{grid-area:auto/1/auto/-1}.lumn .lumn-nav-link .lumn-ico{display:none}}@media (max-width:600px){.lumn-wrap{margin:10px 10px 0 0}.lumn{border-radius:18px;padding:10px 10px 20px}.lumn .lumn-topbar{border-radius:22px;flex-wrap:wrap}.lumn .lumn-nav{flex-basis:100%;order:3}.lumn .lumn-theme-btn{margin-left:auto}.lumn .lumn-panel,.lumn .lumn-card{border-radius:22px;padding:18px}.lumn .lumn-preset-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi.is-hero .lumn-kpi-value{font-size:2.4rem}.lumn .lumn-data-table .lumn-bar-cell{display:none}.lumn .lumn-page-head h1{font-size:1.6rem}}@media (prefers-reduced-motion:reduce){.lumn *,.lumn :before,.lumn :after{transition:none!important;animation:none!important}::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}.lumn #lumn-tags-form{gap:20px;display:grid}.lumn .lumn-auto-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0 24px;display:grid}.lumn .lumn-card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.lumn .lumn-card-head h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-check-bar{background:var(--l-surface-2);border-radius:14px;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:14px 0 6px;padding:14px 16px;display:flex}.lumn .lumn-check-bar .lumn-input{width:220px;max-width:100%}.lumn .lumn-check-bar .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-rules{counter-reset:none;gap:14px;margin:16px 0;padding:0;list-style:none;display:grid}.lumn .lumn-rule{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;margin:0;padding:4px 18px 10px}.lumn .lumn-rule fieldset{border:0;min-width:0;margin:0;padding:0}.lumn .lumn-rule.is-off{background:var(--l-surface-2)}.lumn .lumn-rule-legend{margin:0;padding:14px 0 0;font-size:.92rem;font-weight:650;display:block}.lumn .lumn-rule-top{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;padding-top:6px;display:flex}@media (min-width:600px){.lumn .lumn-rule-top{margin-top:-38px;margin-left:120px}}.lumn .lumn-rule-top .lumn-check{align-items:center;margin:0}.lumn .lumn-rule-top .lumn-check input[type=checkbox]{margin-top:0}.lumn .lumn-rule-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 16px;display:grid}.lumn .lumn-rule-grid .lumn-field{margin:10px 0}.lumn .lumn-rule-grid .lumn-select,.lumn .lumn-rule-grid .lumn-input{width:100%}.lumn .lumn-rule-target{grid-column:span 2}@media (max-width:640px){.lumn .lumn-rule-target{grid-column:auto}}.lumn .lumn-rule-once{align-self:end;margin:10px 0 18px}.lumn .lumn-match{margin:4px 0 0;font-size:.82rem;font-weight:600}.lumn .lumn-match:empty{display:none}.lumn .lumn-match.is-good{color:var(--l-good)}.lumn .lumn-match.is-warn{color:var(--l-warn)}.lumn [data-check-selectors][aria-disabled=true]{opacity:.6;pointer-events:none}.lumn [hidden]{display:none!important}.lumn .lumn-filter{flex-wrap:wrap;align-items:center;gap:10px 14px;margin:8px 0 16px;display:flex}.lumn .lumn-filter .lumn-input{width:240px;max-width:100%}.lumn .lumn-filter .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-scroll-x{overflow-x:auto}.lumn .lumn-table .lumn-left{text-align:left}.lumn .lumn-sessions td,.lumn .lumn-sessions th{vertical-align:middle}.lumn .lumn-pager{color:var(--l-text-2);justify-content:center;align-items:center;gap:14px;margin-top:16px;font-size:.88rem;display:flex}.lumn .lumn-dialog-wide{width:min(640px,100vw - 32px);max-height:min(80vh,760px)}.lumn .lumn-dialog-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.lumn .lumn-steps{margin:0;padding:0;list-style:none}.lumn .lumn-steps li{border-bottom:1px solid var(--l-grid);grid-template-columns:76px 1fr;gap:12px;margin:0;padding:10px 0;font-size:.88rem;display:grid}.lumn .lumn-steps li.is-event{color:var(--l-text-2);padding-left:18px}.lumn .lumn-step-time{color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn .lumn-step-body{overflow-wrap:anywhere;min-width:0}.lumn .lumn-funnels{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:24px;margin:8px 0 16px;display:grid}.lumn .lumn-funnel caption{text-align:left;color:var(--l-text);padding-bottom:10px;font-size:.95rem;font-weight:650}.lumn .lumn-step-n{background:var(--l-chip-bg);width:22px;height:22px;color:var(--l-chip-fg);border-radius:50%;place-items:center;margin-right:6px;font-size:.72rem;font-weight:650;display:inline-grid}.lumn .lumn-details{border-top:1px solid var(--l-border);margin-top:12px;padding-top:12px}.lumn .lumn-details summary{cursor:pointer;min-height:24px;font-size:.9rem;font-weight:600}.lumn .lumn-rejected{color:var(--l-warn);margin:4px 0 0 18px;font-size:.82rem;list-style:outside}.lumn .lumn-head-actions form.lumn-field-inline{gap:8px}.lumn .lumn-vitals{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:0 0 8px;padding:0;list-style:none;display:grid}.lumn .lumn-vital{background:var(--l-surface-2);border-radius:16px;align-content:start;gap:4px;margin:0;padding:14px 16px;display:grid}.lumn .lumn-vital-name{color:var(--l-muted);font-size:.82rem;font-weight:600}.lumn .lumn-vital-name abbr{font-weight:500;text-decoration:none}.lumn .lumn-vital-val{font-variant-numeric:tabular-nums;font-size:1.15rem;font-weight:650}.lumn .lumn-rate{border:1px solid;border-radius:999px;justify-self:start;padding:2px 10px;font-size:.74rem;font-weight:650}.lumn .lumn-rate.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-rate.is-fair{color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-rate.is-poor{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-cap-left{text-align:left;padding:8px 0 10px}.lumn .lumn-wrap{white-space:normal;overflow-wrap:anywhere}.lumn abbr[title]{cursor:help}.lumn .lumn-rate-sm{width:fit-content;margin:3px 0 0 auto;padding:0 7px;font-size:.68rem;display:block}.lumn .lumn-path-min{min-width:12ch;display:inline-block}.lumn .lumn-table thead th+th{padding-left:12px}.lumn .lumn-check-cols{grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:0 16px;display:grid}.lumn .lumn-alert-grid{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:0 24px;display:grid}.lumn #lumn-test-result:empty{display:none}.lumn #lumn-test-result .lumn-callout{margin-top:14px}.lumn .lumn-error-summary li+li{margin-top:6px}.lumn .lumn-error-summary a{min-height:24px;padding:2px 0;display:inline-block}.lumn .lumn-scan-progress{gap:8px;margin:4px 0 14px;display:grid}.lumn .lumn-scan-progress p{margin:0}.lumn .lumn-progress{appearance:none;background:var(--l-track);border:0;border-radius:6px;width:100%;max-width:560px;height:10px;overflow:hidden}.lumn .lumn-progress::-webkit-progress-bar{background:var(--l-track);border-radius:6px}.lumn .lumn-progress::-webkit-progress-value{background:var(--l-bar);border-radius:6px}.lumn .lumn-progress::-moz-progress-bar{background:var(--l-bar);border-radius:6px}.lumn .lumn-scan-counts{border-top:0;border-bottom:1px solid var(--l-border);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));margin:0 0 14px;padding:0 0 14px}.lumn .lumn-scan-counts dd{font-size:1.1rem}.lumn .lumn-queue td,.lumn .lumn-queue th{vertical-align:top}.lumn .lumn-queue .lumn-rate{margin-top:4px;display:inline-block}.lumn .lumn-rate:not(.is-good):not(.is-fair):not(.is-poor){color:var(--l-text-2);background:var(--l-chip-bg)}.lumn .lumn-break{overflow-wrap:anywhere}.lumn .lumn-nowrap{white-space:nowrap;display:block}.lumn .lumn-queue-export{margin-top:14px}.lumn .lumn-settings-grid>*{min-width:0}.lumn .lumn-scroll-x{max-width:100%;position:relative}.lumn.lumn-dash{background:var(--l-surface);border-radius:0;min-height:0;padding:0;font-size:14px}.lumn .lumn-dash-range{color:var(--l-muted);margin:0 0 10px;font-size:.8rem}.lumn .lumn-dash-foot{border-top:1px solid var(--l-border);margin:14px 0 0;padding-top:10px;font-weight:600}.lumn.lumn-dash .lumn-table-toggle{display:none}.lumn .lumn-dash-list{margin:6px 0 0;padding:0;list-style:none}.lumn .lumn-dash-list li{border-bottom:1px solid var(--l-border);overflow-wrap:anywhere;gap:2px;margin:0;padding:6px 0;display:grid}.lumn .lumn-dash-list .lumn-path{color:var(--l-muted);font-size:.8rem}.lumn.lumn-dash .lumn-h3{margin-top:4px;font-size:.9rem}.lumn .lumn-survey-q+.lumn-survey-q{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-survey-q .lumn-h3{margin-bottom:10px}.lumn .lumn-geo-grid{grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:20px;display:grid}.lumn .lumn-tile-map{width:100%;height:auto;max-height:440px;margin:6px 0 8px;display:block}.lumn .lumn-tile-map text{font:600 13px var(--l-font);pointer-events:none}.lumn .lumn-geo-regions{border-top:1px solid var(--l-tile-border);margin-top:20px;padding-top:16px}.lumn .lumn-geo-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:4px;display:flex}.lumn .lumn-geo-head .lumn-h3{margin:0}.lumn .lumn-geo-head .lumn-field-inline{min-width:0;max-width:100%}.lumn .lumn-geo-head .lumn-select{flex:auto;min-width:0;max-width:100%}.lumn .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo;margin-top:4px}.lumn .lumn-pv-list.lumn-geo-list li{counter-increment:lumn-geo;grid-template-columns:2.2em 1fr auto}.lumn .lumn-pv-list.lumn-geo-list li:before{content:counter(lumn-geo) ".";color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn details .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo 10}.lumn .lumn-geo-0 rect,.lumn i.lumn-geo-0{fill:var(--l-track);background:var(--l-track)}.lumn .lumn-geo-1 rect,.lumn i.lumn-geo-1{fill:#dbe8f8;background:#dbe8f8}.lumn .lumn-geo-2 rect,.lumn i.lumn-geo-2{fill:#a9c8ef;background:#a9c8ef}.lumn .lumn-geo-3 rect,.lumn i.lumn-geo-3{fill:#6fa3e3;background:#6fa3e3}.lumn .lumn-geo-4 rect,.lumn i.lumn-geo-4{fill:#2f6fc6;background:#2f6fc6}.lumn .lumn-geo-5 rect,.lumn i.lumn-geo-5{fill:#0b3f8a;background:#0b3f8a}.lumn .lumn-geo-0 text,.lumn .lumn-geo-1 text,.lumn .lumn-geo-2 text,.lumn .lumn-geo-3 text{fill:#0b1f3a}.lumn .lumn-geo-4 text,.lumn .lumn-geo-5 text{fill:#fff}.lumn[data-theme=dark] .lumn-geo-0 rect{fill:#22324c}.lumn[data-theme=dark] .lumn-geo-0 text{fill:#c5ccd6}.lumn .lumn-geo-key{color:var(--l-muted);align-items:center;gap:4px;margin:0 0 6px;font-size:.75rem;display:flex}.lumn .lumn-geo-key i{border-radius:3px;width:18px;height:10px;display:inline-block}.lumn .lumn-geo-key span:first-child{margin-right:4px}.lumn .lumn-geo-key span:last-child{margin-left:4px}html:has(body.lumn-screen){scroll-padding-top:130px}.lumn input[type=file]{min-width:0;max-width:100%;font:inherit;font-size:.88rem}.lumn .lumn-field-inline:has(input[type=file]){flex-wrap:wrap;min-width:0;max-width:100%}.lumn .lumn-preset-diffs{margin:14px 0 12px}.lumn .lumn-preset-diffs .lumn-strong{margin:0 0 6px}.lumn .lumn-diff-list{font-size:inherit;margin:0 0 8px;padding-left:18px}.lumn .lumn-diff-list li{font-size:inherit;margin:0 0 4px}.lumn .lumn-diff-tag{background:var(--l-good-bg);color:var(--l-good);border:1px solid;border-radius:999px;margin-left:6px;padding:1px 8px;font-size:.72rem;font-weight:600;display:inline-block}.lumn .lumn-diff-tag.is-looser{background:var(--l-bad-bg);color:var(--l-bad)}.lumn .lumn-preset-diffs .lumn-help{margin:0}.lumn .lumn-savebar{z-index:99990;background:var(--l-surface);width:min(760px,100% - 32px);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:999px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:0 auto;padding:10px 12px 10px 18px;display:flex;position:fixed;bottom:16px;box-shadow:0 18px 40px -16px #0b1f3a73}.lumn .lumn-savebar[hidden]{display:none}.lumn .lumn-savebar-msg{align-items:center;gap:8px;margin:0;font-size:.92rem;font-weight:600;display:flex}.lumn .lumn-savebar-msg .lumn-ico-sm{color:var(--l-warn);flex:none}.lumn .lumn-savebar-actions{flex-wrap:wrap;gap:8px;display:flex}.lumn.has-savebar .lumn-main{padding-bottom:96px}.lumn.has-savebar .lumn-toast{bottom:96px}@media (prefers-reduced-motion:no-preference){.lumn .lumn-savebar{animation:.18s ease-out lumn-savebar-in}@keyframes lumn-savebar-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}}@media (max-width:600px){.lumn .lumn-savebar{border-radius:18px;width:calc(100% - 16px);padding:12px;bottom:8px}.lumn .lumn-savebar-actions{width:100%}.lumn .lumn-savebar-actions .lumn-btn,.lumn .lumn-savebar-actions .lumn-btn-ghost{flex:1}}.lumn .lumn-license-facts{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px 20px;margin:4px 0 14px;display:grid}.lumn .lumn-license-facts dt{color:var(--l-muted);margin-bottom:2px;font-size:.78rem;font-weight:600}.lumn .lumn-license-facts dd{overflow-wrap:anywhere;margin:0;font-weight:600}.lumn .lumn-license-facts .lumn-tag{margin-left:0;padding:2px 10px;font-size:.78rem}.lumn .lumn-tag.is-good{background:var(--l-good-bg);color:var(--l-good)}.lumn .lumn-tag.is-warn{background:var(--l-warn-bg);color:var(--l-text);outline:1px solid var(--l-warn)}.lumn .lumn-license-form .lumn-input{letter-spacing:.04em;max-width:26rem}.lumn .lumn-locked{text-align:left;max-width:40rem}.lumn .lumn-locked .lumn-inline-actions{margin-top:12px}.lumn #lumn-license-card{margin-bottom:16px}.lumn .lumn-license-nag{align-items:center}.lumn .lumn-license-nag p{flex:1;margin:0}.lumn .lumn-license-facts dd.lumn-mono{white-space:nowrap;overflow-wrap:normal}.lumn .lumn-migrate-list{gap:1rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.lumn .lumn-migrate-list>li{border:1px solid var(--l-border);background:var(--l-surface-2);border-radius:10px;padding:.9rem 1rem}.lumn .lumn-migrate-list p{margin:0 0 .35rem}.lumn .lumn-migrate-list .lumn-inline-actions{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;display:flex}.lumn .lumn-views{position:relative}.lumn .lumn-views>summary{cursor:pointer;list-style:none}.lumn .lumn-views>summary::-webkit-details-marker{display:none}.lumn .lumn-views-pop{z-index:30;background:var(--l-surface);width:min(22rem,90vw);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:10px;padding:.9rem;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 12px 32px #0b1f3a2e}.lumn .lumn-views-list{gap:.5rem;margin:0 0 .75rem;padding:0;list-style:none;display:grid}.lumn .lumn-views-list>li{border-bottom:1px solid var(--l-border);justify-content:space-between;align-items:flex-start;gap:.5rem;padding-bottom:.5rem;display:flex}.lumn .lumn-views-list form:first-child{gap:.1rem;display:grid}.lumn .lumn-link-btn{color:var(--l-text);font:inherit;text-align:left;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.lumn .lumn-link-btn:focus-visible{outline:2px solid var(--l-navy);outline-offset:2px;border-radius:3px}.lumn .lumn-views-save{gap:.4rem;display:grid}.lumn .lumn-ai-total{flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin:0 0 .75rem;display:flex}.lumn .lumn-ai-total+.lumn-table,.lumn .lumn-table+.lumn-table{margin-top:.75rem}.lumn .lumn-table caption.lumn-strong{text-align:left;caption-side:top;padding:.5rem 0 .35rem}.lumn .lumn-views-pop .lumn-callout{margin:0 0 .75rem}.lumn .lumn-views-pop form{margin:0}.lumn .lumn-review-nag{align-items:flex-start}.lumn .lumn-review-body{flex:1}.lumn .lumn-review-body p{margin:0}.lumn .lumn-review-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:10px;display:flex} -
lumn-analytics/tags/1.1.1/assets/dist/admin.js
r3744314 r3753587 1 (function(){"use strict";var T=window.lumnAdmin||{},l=T.i18n||{},o=document.getElementById("lumn-app");if(!o)return;var _=window.matchMedia("(prefers-reduced-motion: reduce)"), Y=document.getElementById("lumn-live"),K=[4,5,6,7,8,12];function d(e){var t=Array.prototype.slice.call(arguments,1),r=0;return String(e||"").replace(/%(\d+\$)?[sd]/g,function(n,a){var i=a?t[parseInt(a,10)-1]:t[r++];return i===void 0?"":String(i)})}function v(e){Y&&(Y.textContent="",setTimeout(function(){Y.textContent=e},40))}function O(e){var t=document.getElementById("lumn-toast");t&&(t.textContent=e,t.hidden=!1,clearTimeout(O.timer),O.timer=setTimeout(function(){t.hidden=!0},6e3))}function X(e,t){return fetch(e,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":T.nonce},body:JSON.stringify(t||{})})}o.addEventListener("click",function(e){var t=e.target.closest("[data-theme-toggle]");if(t){var r=o.getAttribute("data-theme")!=="dark";o.setAttribute("data-theme",r?"dark":"light"),t.setAttribute("aria-pressed",String(r)),v(r?l.darkOn:l.lightOn),X(T.theme,{theme:r?"dark":"light"})}});function ge(e){(e||o).querySelectorAll("textarea[data-lumn-snippet]").forEach(function(t){var r;try{r=JSON.parse(t.getAttribute("data-lumn-snippet"))}catch{return}if(!(!r||!r.src)){var n="script";t.value="<"+n+">window.lumnConfig="+JSON.stringify(r.config||{})+";</"+n+`>2 <`+n+' src="'+r.src+'" defer></'+n+">"}})}function he(e,t,r){var n=e.closest(".lumn-chart-slot");if(!(!n||!t)){var a=n.querySelector(".lumn-tip");a||(a=document.createElement("div"),a.className="lumn-tip",a.setAttribute("aria-hidden","true"),n.appendChild(a));var i=t.dataset,c=Q()==="year"?l.tipYear:l.tipPrev,u=[d(l.tipViews,i.v)];i.p&&u.push(d(c,i.p)+(i.pct?" ("+i.pct+")":"")),i.note&&u.push(i.note),a.textContent="";var s=document.createElement("strong");s.textContent=i.day,a.appendChild(s),u.forEach(function(R,Fe){var pe=document.createElement("span");pe.textContent=R,Fe===0&&(pe.className="lumn-tip-main"),a.appendChild(pe)}),a.hidden=!1;var y=e.viewBox.baseVal,m=e.getBoundingClientRect(),g=n.getBoundingClientRect(),p=y&&y.width?m.width/y.width:1,b=m.left-g.left+parseFloat(i.cx)*p,S=m.top-g.top+parseFloat(i.cy)*p;a.style.left=Math.max(0,Math.min(g.width-a.offsetWidth,b-a.offsetWidth/2))+"px",a.style.top=Math.max(0,S-a.offsetHeight-12)+"px";var L=e.querySelector(".lumn-cross");L&&(L.setAttribute("x1",i.cx),L.setAttribute("x2",i.cx),L.classList.add("is-on")),e.querySelectorAll(".lumn-bar.is-hover, .lumn-pt.is-hover").forEach(function(R){R.classList.remove("is-hover")});var C=parseInt(i.i,10),I=e.querySelectorAll(".lumn-as-bars .lumn-bar")[C],W=e.querySelectorAll(".lumn-as-line .lumn-pt")[C];I&&I.classList.add("is-hover"),W&&W.classList.add("is-hover"),e.setAttribute("data-active",String(C)),r&&v(i.day+": "+u.join(". "))}}function G(e){var t=e.closest(".lumn-chart-slot"),r=t&&t.querySelector(".lumn-tip");r&&(r.hidden=!0);var n=e.querySelector(".lumn-cross");n&&n.classList.remove("is-on"),e.querySelectorAll(".is-hover").forEach(function(a){a.classList.remove("is-hover")})}o.addEventListener("pointermove",function(e){var t=e.target.closest&&e.target.closest(".lumn-hit");t&&t.ownerSVGElement&&he(t.ownerSVGElement,t,!1)}),o.addEventListener("pointerout",function(e){var t=e.target.closest&&e.target.closest(".lumn-day-chart");t&&!(e.relatedTarget&&t.contains(e.relatedTarget))&&document.activeElement!==t&&G(t)}),o.addEventListener("keydown",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-day-chart"))){var r=t.querySelectorAll(".lumn-hit");if(r.length){var n=parseInt(t.getAttribute("data-active"),10);isNaN(n)&&(n=r.length-1);var a={ArrowLeft:n-1,ArrowRight:n+1,Home:0,End:r.length-1}[e.key];if(a===void 0){e.key==="Escape"&&G(t);return}e.preventDefault(),he(t,r[Math.max(0,Math.min(r.length-1,a))],!0)}}}),o.addEventListener("focusout",function(e){e.target.classList&&e.target.classList.contains("lumn-day-chart")&&G(e.target)}),o.addEventListener("click",function(e){var t=e.target.closest("[data-copy]");if(t){var r=o.querySelector(t.getAttribute("data-copy"));if(r){var n=function(){O(l.copied)};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(r.value).then(n,function(){r.select()}):r.select()}}}),o.addEventListener("click",function(e){var t=e.target.closest('[data-error-summary] a[href^="#"]');if(t){var r=document.getElementById(t.getAttribute("href").slice(1));r&&(e.preventDefault(),r.focus({preventScroll:!0}),r.scrollIntoView({block:"center",behavior:_.matches?"auto":"smooth"}))}});function ye(e){(e||o).querySelectorAll(".lumn-table-toggle:not([data-ready])").forEach(function(t){t.setAttribute("data-ready","1");var r=document.getElementById(t.getAttribute("aria-controls"));if(r){var n=t.getAttribute("data-open")==="1";J(t,r,n)}})}function J(e,t,r){t.hidden=!r,e.setAttribute("aria-expanded",String(r)),e.setAttribute("data-open",r?"1":"0");var n=e.querySelector("span");n&&(n.textContent=r?e.getAttribute("data-label-hide"):e.getAttribute("data-label-show"))}var $={};o.addEventListener("click",function(e){var t=e.target.closest(".lumn-table-toggle");if(t){var r=t.getAttribute("aria-controls"),n=document.getElementById(r);if(n){var a=n.hidden;$[r]=a,J(t,n,a),a&&n.focus({preventScroll:!0}),v(a?l.tableShown:l.tableHidden)}}});var D="bar";o.addEventListener("click",function(e){var t=e.target.closest(".lumn-seg-btn[data-kind]");if(t){var r=t.closest(".lumn-seg");r.querySelectorAll(".lumn-seg-btn").forEach(function(a){a.setAttribute("aria-pressed",String(a===t))}),D=t.getAttribute("data-kind");var n=t.closest(".lumn-panel").querySelector(".lumn-day-chart");n&&n.setAttribute("data-kind",D),v(d(l.showing,t.textContent.trim().toLowerCase()))}});function Oe(){var e=document.getElementById("lumn-range");return e?e.value:""}function Q(){var e=document.getElementById("lumn-compare");return e?e.value:""}function Me(){var e=o.querySelector("#lumn-body-traffic .lumn-chart-slot");if(!(!e||!window.htmx)&&!o.querySelector("#lumn-body-traffic dialog[open]")){var t=parseInt(e.getAttribute("data-chart-width"),10)||0,r=Math.round(e.clientWidth);if(r<200||t&&Math.abs(r-t)/t<.12){e.classList.remove("is-holding");return}e.setAttribute("data-chart-width",String(r));var n=T.panel+(T.panel.indexOf("?")>-1?"&":"?")+"w="+r+"&kind="+encodeURIComponent(D)+"&range="+encodeURIComponent(Oe())+"&compare="+encodeURIComponent(Q())+"&still=1";window.htmx.ajax("GET",n,{target:"#lumn-body-traffic",swap:"innerHTML"})}}var be;function N(){clearTimeout(be),be=setTimeout(Me,120)}if(window.ResizeObserver){var Se=o.querySelector("[data-board]");Se&&new ResizeObserver(N).observe(Se)}var x=o.querySelector("[data-board]");function E(){return x?Array.prototype.slice.call(x.querySelectorAll(":scope > .lumn-panel")):[]}function k(e){var t=e.querySelector("h2");return t?t.textContent.trim():""}function j(){var e=E().map(function(t){return{id:t.getAttribute("data-panel"),span:parseInt(t.getAttribute("data-span"),10)}});X(T.layout,{layout:e}).then(function(t){t.ok||O(l.saveError)},function(){O(l.saveError)})}var F=!1;function Be(e,t){F=!0;var r=function(){F=!1,t&&t()};document.startViewTransition&&!_.matches?document.startViewTransition(e).updateCallbackDone.then(r,r):(e(),r())}function Z(e,t,r){var n=E(),a=n.indexOf(e);if(t=Math.max(0,Math.min(n.length-1,t)),t===a){v(d(l.already,k(e),a+1,n.length));return}Be(function(){var i=n.filter(function(c){return c!==e});x.insertBefore(e,i[t]||null)},function(){j(),r&&r.focus(),e.scrollIntoView({block:"nearest",behavior:_.matches?"auto":"smooth"})}),v(d(l.moved,k(e),t+1,n.length))}function Re(e,t){var r=K.indexOf(parseInt(e.getAttribute("data-span"),10)),n=K[Math.max(0,Math.min(K.length-1,r+t))];if(n===parseInt(e.getAttribute("data-span"),10)){v(d(t>0?l.maxWide:l.minWide,k(e)));return}var a=e.getBoundingClientRect().width,i=e.querySelector(".lumn-chart-slot");i&&t<0&&i.classList.add("is-holding");var c=function(u,s){u(),s&&s()};c(function(){e.setAttribute("data-span",String(n))},function(){j();var u=e.getBoundingClientRect().width,s=Math.round(u/x.getBoundingClientRect().width*100);Math.abs(u-a)<2?v(d(l.sameWidth,k(e))):v(d(l.width,k(e),s>=97?l.fullWidth:d(l.pctWidth,s))),N()})}function Ee(e){var t=e.closest(".lumn-panel"),r=t.querySelector('[popovertarget="'+e.id+'"]'),n=r.getBoundingClientRect(),a=e.offsetWidth,i=e.offsetHeight,c=Math.max(8,Math.min(n.right-a,window.innerWidth-a-8)),u=n.bottom+6;u+i>window.innerHeight-8&&(u=Math.max(8,n.top-i-6)),e.style.left=c+"px",e.style.top=u+"px"}o.addEventListener("toggle",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-move-menu")||e.newState!=="open")){var r=t.closest(".lumn-panel");Ee(t);var n=E().indexOf(r),a=E().length-1,i=parseInt(r.getAttribute("data-span"),10);t.querySelector('[data-move="first"]').disabled=n===0,t.querySelector('[data-move="prev"]').disabled=n===0,t.querySelector('[data-move="next"]').disabled=n===a,t.querySelector('[data-move="last"]').disabled=n===a,t.querySelector('[data-size="wider"]').disabled=i===12,t.querySelector('[data-size="narrower"]').disabled=i===4;var c=t.querySelector("button:not(:disabled)");c&&c.focus()}},!0),o.addEventListener("click",function(e){var t=e.target.closest(".lumn-move-menu button");if(!(!t||t.disabled)){var r=t.closest(".lumn-move-menu"),n=r.closest(".lumn-panel"),a=n.querySelector('[popovertarget="'+r.id+'"]'),i=E().indexOf(n),c=E().length-1;r.hidePopover();var u=t.getAttribute("data-move");u&&Z(n,{first:0,prev:i-1,next:i+1,last:c}[u],a);var s=t.getAttribute("data-size");s&&(Re(n,s==="wider"?1:-1),a.focus())}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");t&&t.matches(":popover-open")&&!t.contains(e.relatedTarget)&&t.hidePopover()}),window.addEventListener("scroll",function(){o.querySelectorAll(".lumn-move-menu").forEach(function(e){e.matches(":popover-open")&&Ee(e)})},{passive:!0}),o.addEventListener("keydown",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");if(!(!t||e.key!=="ArrowDown"&&e.key!=="ArrowUp")){var r=Array.prototype.slice.call(t.querySelectorAll("button:not(:disabled)")),n=r.indexOf(document.activeElement);n<0||(e.preventDefault(),r[(n+(e.key==="ArrowDown"?1:r.length-1))%r.length].focus())}});var w=null,P=-1;function ee(e){if(F){setTimeout(function(){ee(e)},50);return}v(d(l.dropped,k(e),E().indexOf(e)+1,E().length))}x&&(x.addEventListener("keydown",function(e){var t=e.target.closest(".lumn-drag-handle");if(t){var r=t.closest(".lumn-panel");if(e.key===" "||e.key==="Enter"){e.preventDefault(),w===r?(r.classList.remove("is-grabbed"),w=null,j(),ee(r)):(w&&w.classList.remove("is-grabbed"),w=r,P=E().indexOf(r),r.classList.add("is-grabbed"),v(d(l.pickedUp,k(r))));return}if(w===r){var n=E().indexOf(r),a={ArrowUp:n-1,ArrowLeft:n-1,ArrowDown:n+1,ArrowRight:n+1,Home:0,End:E().length-1};e.key in a&&(e.preventDefault(),Z(r,a[e.key],t)),e.key==="Escape"&&(e.preventDefault(),r.classList.remove("is-grabbed"),w=null,n!==P&&Z(r,P,t),setTimeout(function(){v(d(l.cancelled,k(r),P+1))},60))}}}),x.addEventListener("focusout",function(e){if(!F&&w&&!w.contains(e.relatedTarget)){var t=w;t.classList.remove("is-grabbed"),w=null,j(),ee(t)}}));var f=null;function qe(e){var t=f.p;t.style.transform="";var r=t.getBoundingClientRect();t.style.transform="translate("+(e.clientX-f.ox-r.left)+"px,"+(e.clientY-f.oy-r.top)+"px)"}function _e(e){var t=E().filter(function(n){return n!==f.p}),r=t.map(function(n){return n.getBoundingClientRect()});e(),!_.matches&&t.forEach(function(n,a){var i=r[a],c=n.getBoundingClientRect(),u=i.left-c.left,s=i.top-c.top;(u||s)&&n.animate([{transform:"translate("+u+"px,"+s+"px)"},{transform:"none"}],{duration:260,easing:"cubic-bezier(.16,1,.3,1)"})})}if(x){x.addEventListener("pointerdown",function(e){var t=e.target.closest(".lumn-drag-handle");if(!(!t||e.button!==0)){var r=t.closest(".lumn-panel"),n=r.getBoundingClientRect();f={p:r,id:e.pointerId,sx:e.clientX,sy:e.clientY,ox:e.clientX-n.left,oy:e.clientY-n.top,on:!1,from:E().indexOf(r)},e.preventDefault()}}),document.addEventListener("pointermove",function(e){if(!(!f||e.pointerId!==f.id)){if(!f.on){if(Math.abs(e.clientX-f.sx)+Math.abs(e.clientY-f.sy)<6)return;f.on=!0,f.p.classList.add("is-dragging"),x.classList.add("is-dragging")}qe(e),f.p.style.pointerEvents="none";var t=document.elementFromPoint(e.clientX,e.clientY);f.p.style.pointerEvents="";var r=t&&t.closest(".lumn-panel");if(r&&r!==f.p&&r.parentElement===x){var n=r.getBoundingClientRect(),a=e.clientY>n.top+n.height/2,i=a?r.nextElementSibling:r;i!==f.p&&f.p.nextElementSibling!==i&&(_e(function(){x.insertBefore(f.p,i)}),qe(e))}}});var xe=function(e){if(!(!f||e.pointerId!==f.id)){var t=f.p,r=f.on,n=f.from;if(t.classList.remove("is-dragging"),x.classList.remove("is-dragging"),r){var a=t.style.transform;t.style.transform="",!_.matches&&a&&t.animate([{transform:a},{transform:"none"}],{duration:240,easing:"cubic-bezier(.16,1,.3,1)"});var i=E().indexOf(t);j(),v(i===n?d(l.leftInPlace,k(t)):d(l.moved,k(t),i+1,E().length)),N()}f=null}};document.addEventListener("pointerup",xe),document.addEventListener("pointercancel",xe)}o.addEventListener("click",function(e){var t=e.target.closest("[data-reset]");t&&X(T.reset).then(function(){var r=document.getElementById("lumn-range"),n=r?r.getAttribute("hx-get"):"";n&&window.htmx&&window.htmx.ajax("GET",n+(n.indexOf("?")>-1?"&":"?")+"range="+encodeURIComponent(r.value)+"&compare="+encodeURIComponent(Q()),{target:"#lumn-board",swap:"innerHTML"}).then(function(){v(l.reset)})})});var te=null,H=null,B=null;o.addEventListener("click",function(e){var t=e.target.closest("[data-dialog-opener], [data-open-dialog]");t&&(H=t);var r=e.target.closest("[data-focus-after]");r&&(B=r.getAttribute("data-focus-after"))},!0),o.addEventListener("change",function(e){var t=e.target.closest&&e.target.closest("select[data-focus-after]");t&&(B=t.getAttribute("data-focus-after"))},!0),o.addEventListener("click",function(e){var t=e.target.closest("[data-open-dialog]");if(t){var r=document.getElementById(t.getAttribute("data-open-dialog"));if(r&&typeof r.showModal=="function"){te=t.getAttribute("data-open-dialog"),r.showModal();var n=r.querySelector("[data-initial-focus]");n&&n.focus()}return}var a=e.target.closest("[data-close-dialog]");if(a){var i=a.closest("dialog");i&&i.close()}});function De(){if(H&&document.contains(H))return H.focus(),H;var e=te&&o.querySelector('[data-open-dialog="'+te+'"]');return e&&e.focus(),e}o.addEventListener("close",function(e){if(!(!e.target||e.target.tagName!=="DIALOG")){var t=document.activeElement;(!t||t===document.body||e.target.contains(t))&&De()}},!0);var z=null;o.addEventListener("submit",function(e){var t=e.target.closest(".lumn-note-list li");t&&(z=Array.prototype.indexOf.call(t.parentNode.children,t))},!0);function Ae(){return o.querySelector("[data-rules]")}function re(){var e=Ae();if(e){var t=e.querySelectorAll("[data-rule]");t.forEach(function(c,u){var s=c.querySelector(".lumn-rule-legend");s&&(s.textContent=d(l.ruleN,u+1));var y=c.querySelector("[data-rule-num]");y&&(y.textContent=" "+d(l.ruleNLower,u+1))});var r=o.querySelector("[data-rule-count]"),n=o.querySelector("[data-add-rule]"),a=n?parseInt(n.getAttribute("data-max"),10):40;r&&(r.textContent=d(l.ruleCount,t.length,a));var i=o.querySelector("[data-rules-empty]");return i&&(i.hidden=t.length>0),t.length}}function we(e){var t=e.querySelector("[data-rule-action]"),r=t&&t.options[t.selectedIndex],n=r&&r.getAttribute("data-kind")||"selector",a=l.kinds&&l.kinds[n]||["",""],i=e.querySelector("[data-target-label]"),c=e.querySelector("[data-target-help]"),u=e.querySelector("[data-rule-target]");i&&(i.textContent=a[0]),c&&(c.textContent=a[1]),u&&(n==="selector"?u.removeAttribute("inputmode"):u.setAttribute("inputmode","numeric"));var s=e.querySelector("[data-once-wrap]");s&&(s.hidden=n!=="selector");var y=e.querySelector("[data-match]");y&&n!=="selector"&&(y.textContent="");var m=e.querySelector("[data-rule-name]"),g=e.querySelector("[data-custom-wrap]");m&&g&&(g.hidden=m.value!=="custom");var p=e.querySelector("[data-rule-on]");e.classList.toggle("is-off",!!p&&!p.checked)}var U={click:"cta_click",hover:"cta_click",form_start:"form_start",form_submit:"form_submit",seen:"section_view",scroll:"scroll_depth",time:"engaged",video:"video_play"};function Ne(e,t){var r=e.querySelector("[data-rule-name]"),n=e.querySelector('select[name$="[label]"]'),a=Object.keys(U).map(function(i){return U[i]});r&&a.indexOf(r.value)>-1&&U[t]&&(r.value=U[t]),n&&(t==="scroll"||t==="time")&&(n.value="none"),n&&t==="form_start"&&n.value==="text"&&(n.value="field")}o.addEventListener("change",function(e){var t=e.target.closest("[data-rule]");if(t&&(e.target.matches("[data-rule-action]")&&Ne(t,e.target.value),e.target.matches("[data-rule-action], [data-rule-name], [data-rule-on]")&&we(t),e.target.matches("[data-rule-name]")&&e.target.value==="custom")){var r=t.querySelector("[data-custom-wrap] input");r&&r.focus()}}),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule]");if(t){var r=Ae(),n=o.querySelector("[data-rule-template]");if(!r||!n)return;var a=parseInt(t.getAttribute("data-max"),10)||40;if(r.querySelectorAll("[data-rule]").length>=a){v(d(l.maxRules,a));return}var i="n"+Date.now().toString(36)+Math.floor(Math.random()*1e4).toString(36),c=n.innerHTML.split("__KEY__").join(i).split("__N__").join("0"),u=document.createElement("ol");u.innerHTML=c;var s=u.firstElementChild;r.appendChild(s);var y=re(),m=s.querySelector("[data-rule-action]");m&&m.focus(),v(d(l.ruleAdded,y));return}var g=e.target.closest("[data-remove-rule]");if(g){var p=g.closest("[data-rule]");if(!p)return;var b=p.nextElementSibling||p.previousElementSibling;p.parentNode.removeChild(p);var S=re(),L=b?b.querySelector("[data-remove-rule]"):o.querySelector("[data-add-rule]");L&&L.focus(),v(d(S===1?l.ruleRemoved1:l.ruleRemoved,S));return}var C=e.target.closest("[data-check-selectors]");C&&je(C)});function ne(e){var t=document.getElementById("lumn-test-path"),r=document.getElementById("lumn-test-err");r&&(r.textContent=e||"",r.hidden=!e),t&&(e?t.setAttribute("aria-invalid","true"):t.removeAttribute("aria-invalid")),e&&v(e)}function je(e){var t=document.getElementById("lumn-test-path"),r=t?t.value.trim():"/",n;try{n=new URL(r,window.location.origin)}catch{n=null}if(!n||r.charAt(0)!=="/"||r.indexOf("//")===0||n.origin!==window.location.origin){ne(l.badPath),t&&t.focus();return}e.setAttribute("aria-disabled","true"),ne(""),v(l.checking),fetch(n.pathname+n.search,{credentials:"omit",redirect:"follow"}).then(function(a){if(!a.ok)throw new Error("status");return a.text()}).then(function(a){var i=new DOMParser().parseFromString(a,"text/html"),c=0,u=[];o.querySelectorAll("[data-rules] [data-rule]").forEach(function(s,y){var m=s.querySelector("[data-rule-action]"),g=m&&m.options[m.selectedIndex],p=s.querySelector("[data-match]");if(!(!p||!g||g.getAttribute("data-kind")!=="selector")){var b=s.querySelector("[data-rule-target]").value.trim();if(!b){p.textContent="";return}c++;var S=-1;try{S=i.querySelectorAll(b).length}catch{S=-1}S<1&&u.push(y+1),p.className="lumn-match "+(S>0?"is-good":"is-warn"),p.textContent=S<0?l.badSelector:S===0?d(l.noMatch,n.pathname):S===1?d(l.matchOne,n.pathname):d(l.matches,S,n.pathname)}}),v(d(l.checked,c,n.pathname)+(u.length?" "+d(l.noMatchRules,u.join(", ")):""))}).catch(function(){ne(l.pathFailed)}).then(function(){e.removeAttribute("aria-disabled")})}var A=document.getElementById("lumn-savebar"),He=A&&A.querySelector("[data-savebar-text]"),Le=A&&A.querySelector("[data-savebar-save]"),M={},q={},h=null,ae=!1,ie=!1;function oe(e){if(!e.dataset.saveKey){var t=e.parentElement&&e.parentElement.closest("[id]");e.dataset.saveKey=e.id||(t?t.id:"form")}return e.dataset.saveKey}function ke(e){var t=[];return Array.prototype.forEach.call(e.elements,function(r){if(!(!r.name||r.disabled||r.type==="file"||r.type==="submit"||r.type==="button")&&!(r.name.indexOf("__KEY__")>-1||r.name==="_wpnonce")&&!((r.type==="checkbox"||r.type==="radio")&&!r.checked)){if(r.tagName==="SELECT"&&r.multiple){Array.prototype.forEach.call(r.selectedOptions,function(n){t.push(r.name+"="+n.value)});return}t.push(r.name+"="+r.value)}}),t.join("&")}function Ce(){return o.querySelectorAll("form[data-save-bar]")}function V(e){var t=null;return Ce().forEach(function(r){oe(r)===e&&(t=r)}),t}function le(){Ce().forEach(function(e){var t=oe(e);e.querySelector('[data-error-summary], [aria-invalid="true"]')&&q[t]||M[t]&&M[t].form===e||(M[t]={form:e,state:ke(e),html:e.innerHTML},delete q[t])}),Object.keys(q).forEach(function(e){V(e)||delete q[e]}),h&&!q[h]&&(h=Object.keys(q)[0]||null),ue()}function We(e){var t=e.closest("section"),r=t&&t.querySelector("h2");return r||(r=o.querySelector("h1")),r?r.textContent.replace(/\s+/g," ").trim():""}function Ie(e){return e.querySelector('button[type="submit"]:not([name])')||e.querySelector('button[type="submit"]')}function ue(){if(A){var e=h&&q[h]?V(h):null,t=!1;if(e){var r=Ie(e);if(r){var n=r.getBoundingClientRect(),a=n.bottom>0&&n.top<window.innerHeight-8&&n.height>0;t=!a,Le.textContent=r.textContent.replace(/\s+/g," ").trim()}var i=Object.keys(q).length,c=We(e);He.textContent=i>1||!c?l.unsavedPlain:d(l.unsavedIn,c)}if(t&&A.hidden){var u=o.getBoundingClientRect();A.style.left=Math.max(0,u.left)+"px",A.style.right=Math.max(0,window.innerWidth-u.right)+"px"}A.hidden=!t,o.classList.toggle("has-savebar",t),t&&!ae&&(ae=!0,v(l.unsaved)),e||(ae=!1)}}var ce=!1;function se(){ce||(ce=!0,requestAnimationFrame(function(){ce=!1,ue()}))}function de(e){var t=e.target.closest&&e.target.closest("form[data-save-bar]");if(t){var r=oe(t);M[r]||le();var n=ke(t)!==M[r].state;n?(q[r]=!0,h=r):(delete q[r],h===r&&(h=Object.keys(q)[0]||null)),se()}}A&&(o.addEventListener("input",de),o.addEventListener("change",de),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule], [data-remove-rule]")&&document.getElementById("lumn-tags-form");t&&setTimeout(function(){de({target:t})},0)}),window.addEventListener("scroll",se,{passive:!0}),window.addEventListener("resize",function(){A.hidden=!0,se()}),Le.addEventListener("click",function(){var e=h&&V(h);if(e){var t=Ie(e);typeof e.requestSubmit=="function"?e.requestSubmit(t||void 0):t&&t.click()}}),A.querySelector("[data-savebar-undo]").addEventListener("click",function(){var e=h&&V(h);if(!(!e||!M[h])){e.innerHTML=M[h].html,window.htmx&&window.htmx.process&&window.htmx.process(e),e.querySelectorAll("[data-rule]").forEach(function(r){we(r)}),re(),delete q[h],h=Object.keys(q)[0]||null,ue(),v(l.undone);var t=e.querySelector('input:not([type="hidden"]), select, textarea, button');t&&t.focus()}}),o.addEventListener("submit",function(e){!e.target.matches("form[data-save-bar]")&&!e.target.hasAttribute("hx-post")&&(ie=!0,setTimeout(function(){ie=!1},1500))}),window.addEventListener("beforeunload",function(e){ie||!Object.keys(q).length||(e.preventDefault(),e.returnValue="")}),le(),document.addEventListener("htmx:after:settle",function(){setTimeout(le,0)}));var fe=!1;document.addEventListener("htmx:before:swap",function(){var e=document.activeElement;fe=!!(e&&e.closest&&e.closest("#lumn-scan-actions"))}),document.addEventListener("htmx:after:settle",function(e){if(fe){var t=document.activeElement;if(!t||t===document.body||!document.contains(t)){var r=document.querySelector("#lumn-scan-actions button");r&&r.focus()}fe=!1}ye(),ge();var n=e.target;if(n&&n.nodeType===1){var a=n.querySelector("dialog[data-reopen]");if(a&&!a.open&&typeof a.showModal=="function"){a.removeAttribute("data-reopen"),a.showModal();var i=a.querySelector("[data-error-summary]");i&&i.focus()}}var c=n&&n.nodeType===1&&n.querySelector?n.querySelector("[data-filter-state]"):null;if(c){var u=c.getAttribute("data-error")||"",s=document.getElementById("lumn-entry"),y=document.getElementById("lumn-entry-err");y&&(y.textContent=u,y.hidden=!u),s&&(u?s.setAttribute("aria-invalid","true"):s.removeAttribute("aria-invalid"))}if(n&&n.nodeType===1&&o.contains(n)){var m=n.querySelector("[data-announce]:not([data-announced])");m&&m.setAttribute("data-announced","1");var g=document.activeElement,p=!g||g===document.body||!document.contains(g)||!!(g.closest&&g.closest("dialog:not([open])")),b=null;if(p&&n.querySelector(".lumn-notes")&&!n.querySelector("dialog[open]")){var S=n.querySelectorAll('.lumn-note-list button[type="submit"]');z!==null&&S.length&&(b=S[Math.min(z,S.length-1)]),b||(b=n.querySelector("[data-open-dialog]"))}else p&&B&&n.querySelector(B)?b=n.querySelector(B):p&&(b=n.querySelector("[data-error-summary]")||n.querySelector('[aria-invalid="true"]')||(m&&!m.hasAttribute("data-no-focus")?m:null)||n.querySelector('button[type="submit"]'));var L=n.querySelector("[data-take-focus]");L&&(b=L),z=null,B=null,b&&b.focus(),m&&b!==m&&v(m.textContent.replace(/\s+/g," ").trim())}Object.keys($).forEach(function(I){var W=document.getElementById(I),R=W&&o.querySelector('[aria-controls="'+I+'"]');R&&$[I]&&J(R,W,!0)});var C=o.querySelector(".lumn-day-chart");C&&C.setAttribute("data-kind",D),o.querySelectorAll(".lumn-seg-btn[data-kind]").forEach(function(I){I.setAttribute("aria-pressed",String(I.getAttribute("data-kind")===D))}),N()}),document.addEventListener("htmx:response:error",function(e){var t=e.detail&&e.detail.ctx&&e.detail.ctx.response?e.detail.ctx.response.status:0;t!==422&&O(l.loadError)}),document.addEventListener("htmx:error",function(){O(l.loadError)});function ve(e,t){var r=e.querySelector(".lumn-nav-btn"),n=e.querySelector(".lumn-nav-menu");!n||n.hidden||(n.hidden=!0,r.setAttribute("aria-expanded","false"),t&&r.focus())}function me(e){o.querySelectorAll("[data-nav-group]").forEach(function(t){t!==e&&ve(t,!1)})}o.addEventListener("click",function(e){var t=e.target.closest(".lumn-nav-btn");if(!t){e.target.closest("[data-nav-group]")||me(null);return}var r=t.closest("[data-nav-group]"),n=r.querySelector(".lumn-nav-menu"),a=n.hidden;me(r),n.hidden=!a,t.setAttribute("aria-expanded",String(a)),a&&(n.classList.remove("is-right"),n.getBoundingClientRect().right>document.documentElement.clientWidth-8&&n.classList.add("is-right"))}),document.addEventListener("click",function(e){o.contains(e.target)||me(null)}),o.addEventListener("keydown",function(e){if(e.key==="Escape"){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&!t.querySelector(".lumn-nav-menu").hidden&&(e.preventDefault(),ve(t,!0))}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&e.relatedTarget&&!t.contains(e.relatedTarget)&&ve(t,!1)}),ye(),ge(),N();var Te=o.querySelector("[data-focus-on-load]");Te&&Te.focus()})();1 (function(){"use strict";var T=window.lumnAdmin||{},l=T.i18n||{},o=document.getElementById("lumn-app");if(!o)return;var _=window.matchMedia("(prefers-reduced-motion: reduce)"),G=document.getElementById("lumn-live"),J=[4,5,6,7,8,12];function d(e){var t=Array.prototype.slice.call(arguments,1),r=0;return String(e||"").replace(/%(\d+\$)?[sd]/g,function(n,a){var i=a?t[parseInt(a,10)-1]:t[r++];return i===void 0?"":String(i)})}function m(e){G&&(G.textContent="",setTimeout(function(){G.textContent=e},40))}function O(e){var t=document.getElementById("lumn-toast");t&&(t.textContent=e,t.hidden=!1,clearTimeout(O.timer),O.timer=setTimeout(function(){t.hidden=!0},6e3))}function $(e,t){return fetch(e,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":T.nonce},body:JSON.stringify(t||{})})}o.addEventListener("click",function(e){var t=e.target.closest("[data-theme-toggle]");if(t){var r=o.getAttribute("data-theme")!=="dark";o.setAttribute("data-theme",r?"dark":"light"),t.setAttribute("aria-pressed",String(r)),m(r?l.darkOn:l.lightOn),$(T.theme,{theme:r?"dark":"light"})}});function ye(e){(e||o).querySelectorAll("textarea[data-lumn-snippet]").forEach(function(t){var r;try{r=JSON.parse(t.getAttribute("data-lumn-snippet"))}catch{return}if(!(!r||!r.src)){var n="script";t.value="<"+n+">window.lumnConfig="+JSON.stringify(r.config||{})+";</"+n+`> 2 <`+n+' src="'+r.src+'" defer></'+n+">"}})}function be(e,t,r){var n=e.closest(".lumn-chart-slot");if(!(!n||!t)){var a=n.querySelector(".lumn-tip");a||(a=document.createElement("div"),a.className="lumn-tip",a.setAttribute("aria-hidden","true"),n.appendChild(a));var i=t.dataset,c=te()==="year"?l.tipYear:l.tipPrev,u=[d(l.tipViews,i.v)];i.p&&u.push(d(c,i.p)+(i.pct?" ("+i.pct+")":"")),i.note&&u.push(i.note),a.textContent="";var s=document.createElement("strong");s.textContent=i.day,a.appendChild(s),u.forEach(function(I,X){var R=document.createElement("span");R.textContent=I,X===0&&(R.className="lumn-tip-main"),a.appendChild(R)}),a.hidden=!1;var h=e.viewBox.baseVal,y=e.getBoundingClientRect(),S=n.getBoundingClientRect(),f=h&&h.width?y.width/h.width:1,A=y.left-S.left+parseFloat(i.cx)*f,b=y.top-S.top+parseFloat(i.cy)*f;a.style.left=Math.max(0,Math.min(S.width-a.offsetWidth,A-a.offsetWidth/2))+"px",a.style.top=Math.max(0,b-a.offsetHeight-12)+"px";var g=e.querySelector(".lumn-cross");g&&(g.setAttribute("x1",i.cx),g.setAttribute("x2",i.cx),g.classList.add("is-on")),e.querySelectorAll(".lumn-bar.is-hover, .lumn-pt.is-hover").forEach(function(I){I.classList.remove("is-hover")});var C=parseInt(i.i,10),W=e.querySelectorAll(".lumn-as-bars .lumn-bar")[C],F=e.querySelectorAll(".lumn-as-line .lumn-pt")[C];W&&W.classList.add("is-hover"),F&&F.classList.add("is-hover"),e.setAttribute("data-active",String(C)),r&&m(i.day+": "+u.join(". "))}}function Q(e){var t=e.closest(".lumn-chart-slot"),r=t&&t.querySelector(".lumn-tip");r&&(r.hidden=!0);var n=e.querySelector(".lumn-cross");n&&n.classList.remove("is-on"),e.querySelectorAll(".is-hover").forEach(function(a){a.classList.remove("is-hover")})}o.addEventListener("pointermove",function(e){var t=e.target.closest&&e.target.closest(".lumn-hit");t&&t.ownerSVGElement&&be(t.ownerSVGElement,t,!1)}),o.addEventListener("pointerout",function(e){var t=e.target.closest&&e.target.closest(".lumn-day-chart");t&&!(e.relatedTarget&&t.contains(e.relatedTarget))&&document.activeElement!==t&&Q(t)}),o.addEventListener("keydown",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-day-chart"))){var r=t.querySelectorAll(".lumn-hit");if(r.length){var n=parseInt(t.getAttribute("data-active"),10);isNaN(n)&&(n=r.length-1);var a={ArrowLeft:n-1,ArrowRight:n+1,Home:0,End:r.length-1}[e.key];if(a===void 0){e.key==="Escape"&&Q(t);return}e.preventDefault(),be(t,r[Math.max(0,Math.min(r.length-1,a))],!0)}}}),o.addEventListener("focusout",function(e){e.target.classList&&e.target.classList.contains("lumn-day-chart")&&Q(e.target)}),o.addEventListener("click",function(e){var t=e.target.closest("[data-copy]");if(t){var r=o.querySelector(t.getAttribute("data-copy"));if(r){var n=function(){O(l.copied)};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(r.value).then(n,function(){r.select()}):r.select()}}}),o.addEventListener("click",function(e){var t=e.target.closest('[data-error-summary] a[href^="#"]');if(t){var r=document.getElementById(t.getAttribute("href").slice(1));r&&(e.preventDefault(),r.focus({preventScroll:!0}),r.scrollIntoView({block:"center",behavior:_.matches?"auto":"smooth"}))}});function Se(e){(e||o).querySelectorAll(".lumn-table-toggle:not([data-ready])").forEach(function(t){t.setAttribute("data-ready","1");var r=document.getElementById(t.getAttribute("aria-controls"));if(r){var n=t.getAttribute("data-open")==="1";Z(t,r,n)}})}function Z(e,t,r){t.hidden=!r,e.setAttribute("aria-expanded",String(r)),e.setAttribute("data-open",r?"1":"0");var n=e.querySelector("span");n&&(n.textContent=r?e.getAttribute("data-label-hide"):e.getAttribute("data-label-show"))}var ee={};o.addEventListener("click",function(e){var t=e.target.closest(".lumn-table-toggle");if(t){var r=t.getAttribute("aria-controls"),n=document.getElementById(r);if(n){var a=n.hidden;ee[r]=a,Z(t,n,a),a&&n.focus({preventScroll:!0}),m(a?l.tableShown:l.tableHidden)}}});var D="bar";o.addEventListener("click",function(e){var t=e.target.closest(".lumn-seg-btn[data-kind]");if(t){var r=t.closest(".lumn-seg");r.querySelectorAll(".lumn-seg-btn").forEach(function(a){a.setAttribute("aria-pressed",String(a===t))}),D=t.getAttribute("data-kind");var n=t.closest(".lumn-panel").querySelector(".lumn-day-chart");n&&n.setAttribute("data-kind",D),m(d(l.showing,t.textContent.trim().toLowerCase()))}});function Be(){var e=document.getElementById("lumn-range");return e?e.value:""}function te(){var e=document.getElementById("lumn-compare");return e?e.value:""}function Re(){var e=o.querySelector("#lumn-body-traffic .lumn-chart-slot");if(!(!e||!window.htmx)&&!o.querySelector("#lumn-body-traffic dialog[open]")){var t=parseInt(e.getAttribute("data-chart-width"),10)||0,r=Math.round(e.clientWidth);if(r<200||t&&Math.abs(r-t)/t<.12){e.classList.remove("is-holding");return}e.setAttribute("data-chart-width",String(r));var n=T.panel+(T.panel.indexOf("?")>-1?"&":"?")+"w="+r+"&kind="+encodeURIComponent(D)+"&range="+encodeURIComponent(Be())+"&compare="+encodeURIComponent(te())+"&still=1";window.htmx.ajax("GET",n,{target:"#lumn-body-traffic",swap:"innerHTML"})}}var Ee;function N(){clearTimeout(Ee),Ee=setTimeout(Re,120)}if(window.ResizeObserver){var we=o.querySelector("[data-board]");we&&new ResizeObserver(N).observe(we)}var x=o.querySelector("[data-board]");function E(){return x?Array.prototype.slice.call(x.querySelectorAll(":scope > .lumn-panel")):[]}function k(e){var t=e.querySelector("h2");return t?t.textContent.trim():""}function j(){var e=E().map(function(t){return{id:t.getAttribute("data-panel"),span:parseInt(t.getAttribute("data-span"),10)}});$(T.layout,{layout:e}).then(function(t){t.ok||O(l.saveError)},function(){O(l.saveError)})}var P=!1;function _e(e,t){P=!0;var r=function(){P=!1,t&&t()};document.startViewTransition&&!_.matches?document.startViewTransition(e).updateCallbackDone.then(r,r):(e(),r())}function re(e,t,r){var n=E(),a=n.indexOf(e);if(t=Math.max(0,Math.min(n.length-1,t)),t===a){m(d(l.already,k(e),a+1,n.length));return}_e(function(){var i=n.filter(function(c){return c!==e});x.insertBefore(e,i[t]||null)},function(){j(),r&&r.focus(),e.scrollIntoView({block:"nearest",behavior:_.matches?"auto":"smooth"})}),m(d(l.moved,k(e),t+1,n.length))}function De(e,t){var r=J.indexOf(parseInt(e.getAttribute("data-span"),10)),n=J[Math.max(0,Math.min(J.length-1,r+t))];if(n===parseInt(e.getAttribute("data-span"),10)){m(d(t>0?l.maxWide:l.minWide,k(e)));return}var a=e.getBoundingClientRect().width,i=e.querySelector(".lumn-chart-slot");i&&t<0&&i.classList.add("is-holding");var c=function(u,s){u(),s&&s()};c(function(){e.setAttribute("data-span",String(n))},function(){j();var u=e.getBoundingClientRect().width,s=Math.round(u/x.getBoundingClientRect().width*100);Math.abs(u-a)<2?m(d(l.sameWidth,k(e))):m(d(l.width,k(e),s>=97?l.fullWidth:d(l.pctWidth,s))),N()})}function xe(e){var t=e.closest(".lumn-panel"),r=t.querySelector('[popovertarget="'+e.id+'"]'),n=r.getBoundingClientRect(),a=e.offsetWidth,i=e.offsetHeight,c=Math.max(8,Math.min(n.right-a,window.innerWidth-a-8)),u=n.bottom+6;u+i>window.innerHeight-8&&(u=Math.max(8,n.top-i-6)),e.style.left=c+"px",e.style.top=u+"px"}o.addEventListener("toggle",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-move-menu")||e.newState!=="open")){var r=t.closest(".lumn-panel");xe(t);var n=E().indexOf(r),a=E().length-1,i=parseInt(r.getAttribute("data-span"),10);t.querySelector('[data-move="first"]').disabled=n===0,t.querySelector('[data-move="prev"]').disabled=n===0,t.querySelector('[data-move="next"]').disabled=n===a,t.querySelector('[data-move="last"]').disabled=n===a,t.querySelector('[data-size="wider"]').disabled=i===12,t.querySelector('[data-size="narrower"]').disabled=i===4;var c=t.querySelector("button:not(:disabled)");c&&c.focus()}},!0),o.addEventListener("click",function(e){var t=e.target.closest(".lumn-move-menu button");if(!(!t||t.disabled)){var r=t.closest(".lumn-move-menu"),n=r.closest(".lumn-panel"),a=n.querySelector('[popovertarget="'+r.id+'"]'),i=E().indexOf(n),c=E().length-1;r.hidePopover();var u=t.getAttribute("data-move");u&&re(n,{first:0,prev:i-1,next:i+1,last:c}[u],a);var s=t.getAttribute("data-size");s&&(De(n,s==="wider"?1:-1),a.focus())}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");t&&t.matches(":popover-open")&&!t.contains(e.relatedTarget)&&t.hidePopover()}),window.addEventListener("scroll",function(){o.querySelectorAll(".lumn-move-menu").forEach(function(e){e.matches(":popover-open")&&xe(e)})},{passive:!0}),o.addEventListener("keydown",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");if(!(!t||e.key!=="ArrowDown"&&e.key!=="ArrowUp")){var r=Array.prototype.slice.call(t.querySelectorAll("button:not(:disabled)")),n=r.indexOf(document.activeElement);n<0||(e.preventDefault(),r[(n+(e.key==="ArrowDown"?1:r.length-1))%r.length].focus())}});var L=null,z=-1;function ne(e){if(P){setTimeout(function(){ne(e)},50);return}m(d(l.dropped,k(e),E().indexOf(e)+1,E().length))}x&&(x.addEventListener("keydown",function(e){var t=e.target.closest(".lumn-drag-handle");if(t){var r=t.closest(".lumn-panel");if(e.key===" "||e.key==="Enter"){e.preventDefault(),L===r?(r.classList.remove("is-grabbed"),L=null,j(),ne(r)):(L&&L.classList.remove("is-grabbed"),L=r,z=E().indexOf(r),r.classList.add("is-grabbed"),m(d(l.pickedUp,k(r))));return}if(L===r){var n=E().indexOf(r),a={ArrowUp:n-1,ArrowLeft:n-1,ArrowDown:n+1,ArrowRight:n+1,Home:0,End:E().length-1};e.key in a&&(e.preventDefault(),re(r,a[e.key],t)),e.key==="Escape"&&(e.preventDefault(),r.classList.remove("is-grabbed"),L=null,n!==z&&re(r,z,t),setTimeout(function(){m(d(l.cancelled,k(r),z+1))},60))}}}),x.addEventListener("focusout",function(e){if(!P&&L&&!L.contains(e.relatedTarget)){var t=L;t.classList.remove("is-grabbed"),L=null,j(),ne(t)}}));var v=null;function Ae(e){var t=v.p;t.style.transform="";var r=t.getBoundingClientRect();t.style.transform="translate("+(e.clientX-v.ox-r.left)+"px,"+(e.clientY-v.oy-r.top)+"px)"}function Ne(e){var t=E().filter(function(n){return n!==v.p}),r=t.map(function(n){return n.getBoundingClientRect()});e(),!_.matches&&t.forEach(function(n,a){var i=r[a],c=n.getBoundingClientRect(),u=i.left-c.left,s=i.top-c.top;(u||s)&&n.animate([{transform:"translate("+u+"px,"+s+"px)"},{transform:"none"}],{duration:260,easing:"cubic-bezier(.16,1,.3,1)"})})}if(x){x.addEventListener("pointerdown",function(e){var t=e.target.closest(".lumn-drag-handle");if(!(!t||e.button!==0)){var r=t.closest(".lumn-panel"),n=r.getBoundingClientRect();v={p:r,id:e.pointerId,sx:e.clientX,sy:e.clientY,ox:e.clientX-n.left,oy:e.clientY-n.top,on:!1,from:E().indexOf(r)},e.preventDefault()}}),document.addEventListener("pointermove",function(e){if(!(!v||e.pointerId!==v.id)){if(!v.on){if(Math.abs(e.clientX-v.sx)+Math.abs(e.clientY-v.sy)<6)return;v.on=!0,v.p.classList.add("is-dragging"),x.classList.add("is-dragging")}Ae(e),v.p.style.pointerEvents="none";var t=document.elementFromPoint(e.clientX,e.clientY);v.p.style.pointerEvents="";var r=t&&t.closest(".lumn-panel");if(r&&r!==v.p&&r.parentElement===x){var n=r.getBoundingClientRect(),a=e.clientY>n.top+n.height/2,i=a?r.nextElementSibling:r;i!==v.p&&v.p.nextElementSibling!==i&&(Ne(function(){x.insertBefore(v.p,i)}),Ae(e))}}});var qe=function(e){if(!(!v||e.pointerId!==v.id)){var t=v.p,r=v.on,n=v.from;if(t.classList.remove("is-dragging"),x.classList.remove("is-dragging"),r){var a=t.style.transform;t.style.transform="",!_.matches&&a&&t.animate([{transform:a},{transform:"none"}],{duration:240,easing:"cubic-bezier(.16,1,.3,1)"});var i=E().indexOf(t);j(),m(i===n?d(l.leftInPlace,k(t)):d(l.moved,k(t),i+1,E().length)),N()}v=null}};document.addEventListener("pointerup",qe),document.addEventListener("pointercancel",qe)}o.addEventListener("click",function(e){var t=e.target.closest("[data-reset]");t&&$(T.reset).then(function(){var r=document.getElementById("lumn-range"),n=r?r.getAttribute("hx-get"):"";n&&window.htmx&&window.htmx.ajax("GET",n+(n.indexOf("?")>-1?"&":"?")+"range="+encodeURIComponent(r.value)+"&compare="+encodeURIComponent(te()),{target:"#lumn-board",swap:"innerHTML"}).then(function(){m(l.reset)})})});var ae=null,H=null,B=null,U=null;o.addEventListener("click",function(e){var t=e.target.closest("[data-dialog-opener], [data-open-dialog]");t&&(H=t);var r=e.target.closest("[data-focus-after]");r&&(B=r.getAttribute("data-focus-after"));var n=e.target.closest("[data-gone-focus]");n&&(U=n.getAttribute("data-gone-focus"))},!0),o.addEventListener("click",function(e){var t=e.target.closest("a[data-ping]");if(!(!t||!window.htmx)){var r=t.getAttribute("data-ping"),n=t.getAttribute("data-ping-target");setTimeout(function(){window.htmx.ajax("POST",r,{target:n,swap:"outerHTML"})},300)}}),o.addEventListener("change",function(e){var t=e.target.closest&&e.target.closest("select[data-focus-after]");t&&(B=t.getAttribute("data-focus-after"))},!0),o.addEventListener("click",function(e){var t=e.target.closest("[data-open-dialog]");if(t){var r=document.getElementById(t.getAttribute("data-open-dialog"));if(r&&typeof r.showModal=="function"){ae=t.getAttribute("data-open-dialog"),r.showModal();var n=r.querySelector("[data-initial-focus]");n&&n.focus()}return}var a=e.target.closest("[data-close-dialog]");if(a){var i=a.closest("dialog");i&&i.close()}});function je(){if(H&&document.contains(H))return H.focus(),H;var e=ae&&o.querySelector('[data-open-dialog="'+ae+'"]');return e&&e.focus(),e}o.addEventListener("close",function(e){if(!(!e.target||e.target.tagName!=="DIALOG")){var t=document.activeElement;(!t||t===document.body||e.target.contains(t))&&je()}},!0);var V=null;o.addEventListener("submit",function(e){var t=e.target.closest(".lumn-note-list li");t&&(V=Array.prototype.indexOf.call(t.parentNode.children,t))},!0);function Le(){return o.querySelector("[data-rules]")}function ie(){var e=Le();if(e){var t=e.querySelectorAll("[data-rule]");t.forEach(function(c,u){var s=c.querySelector(".lumn-rule-legend");s&&(s.textContent=d(l.ruleN,u+1));var h=c.querySelector("[data-rule-num]");h&&(h.textContent=" "+d(l.ruleNLower,u+1))});var r=o.querySelector("[data-rule-count]"),n=o.querySelector("[data-add-rule]"),a=n?parseInt(n.getAttribute("data-max"),10):40;r&&(r.textContent=d(l.ruleCount,t.length,a));var i=o.querySelector("[data-rules-empty]");return i&&(i.hidden=t.length>0),t.length}}function ke(e){var t=e.querySelector("[data-rule-action]"),r=t&&t.options[t.selectedIndex],n=r&&r.getAttribute("data-kind")||"selector",a=l.kinds&&l.kinds[n]||["",""],i=e.querySelector("[data-target-label]"),c=e.querySelector("[data-target-help]"),u=e.querySelector("[data-rule-target]");i&&(i.textContent=a[0]),c&&(c.textContent=a[1]),u&&(n==="selector"?u.removeAttribute("inputmode"):u.setAttribute("inputmode","numeric"));var s=e.querySelector("[data-once-wrap]");s&&(s.hidden=n!=="selector");var h=e.querySelector("[data-match]");h&&n!=="selector"&&(h.textContent="");var y=e.querySelector("[data-rule-name]"),S=e.querySelector("[data-custom-wrap]");y&&S&&(S.hidden=y.value!=="custom");var f=e.querySelector("[data-rule-on]");e.classList.toggle("is-off",!!f&&!f.checked)}var Y={click:"cta_click",hover:"cta_click",form_start:"form_start",form_submit:"form_submit",seen:"section_view",scroll:"scroll_depth",time:"engaged",video:"video_play"};function He(e,t){var r=e.querySelector("[data-rule-name]"),n=e.querySelector('select[name$="[label]"]'),a=Object.keys(Y).map(function(i){return Y[i]});r&&a.indexOf(r.value)>-1&&Y[t]&&(r.value=Y[t]),n&&(t==="scroll"||t==="time")&&(n.value="none"),n&&t==="form_start"&&n.value==="text"&&(n.value="field")}o.addEventListener("change",function(e){var t=e.target.closest("[data-rule]");if(t&&(e.target.matches("[data-rule-action]")&&He(t,e.target.value),e.target.matches("[data-rule-action], [data-rule-name], [data-rule-on]")&&ke(t),e.target.matches("[data-rule-name]")&&e.target.value==="custom")){var r=t.querySelector("[data-custom-wrap] input");r&&r.focus()}}),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule]");if(t){var r=Le(),n=o.querySelector("[data-rule-template]");if(!r||!n)return;var a=parseInt(t.getAttribute("data-max"),10)||40;if(r.querySelectorAll("[data-rule]").length>=a){m(d(l.maxRules,a));return}var i="n"+Date.now().toString(36)+Math.floor(Math.random()*1e4).toString(36),c=n.innerHTML.split("__KEY__").join(i).split("__N__").join("0"),u=document.createElement("ol");u.innerHTML=c;var s=u.firstElementChild;r.appendChild(s);var h=ie(),y=s.querySelector("[data-rule-action]");y&&y.focus(),m(d(l.ruleAdded,h));return}var S=e.target.closest("[data-remove-rule]");if(S){var f=S.closest("[data-rule]");if(!f)return;var A=f.nextElementSibling||f.previousElementSibling;f.parentNode.removeChild(f);var b=ie(),g=A?A.querySelector("[data-remove-rule]"):o.querySelector("[data-add-rule]");g&&g.focus(),m(d(b===1?l.ruleRemoved1:l.ruleRemoved,b));return}var C=e.target.closest("[data-check-selectors]");C&&We(C)});function oe(e){var t=document.getElementById("lumn-test-path"),r=document.getElementById("lumn-test-err");r&&(r.textContent=e||"",r.hidden=!e),t&&(e?t.setAttribute("aria-invalid","true"):t.removeAttribute("aria-invalid")),e&&m(e)}function We(e){var t=document.getElementById("lumn-test-path"),r=t?t.value.trim():"/",n;try{n=new URL(r,window.location.origin)}catch{n=null}if(!n||r.charAt(0)!=="/"||r.indexOf("//")===0||n.origin!==window.location.origin){oe(l.badPath),t&&t.focus();return}e.setAttribute("aria-disabled","true"),oe(""),m(l.checking),fetch(n.pathname+n.search,{credentials:"omit",redirect:"follow"}).then(function(a){if(!a.ok)throw new Error("status");return a.text()}).then(function(a){var i=new DOMParser().parseFromString(a,"text/html"),c=0,u=[];o.querySelectorAll("[data-rules] [data-rule]").forEach(function(s,h){var y=s.querySelector("[data-rule-action]"),S=y&&y.options[y.selectedIndex],f=s.querySelector("[data-match]");if(!(!f||!S||S.getAttribute("data-kind")!=="selector")){var A=s.querySelector("[data-rule-target]").value.trim();if(!A){f.textContent="";return}c++;var b=-1;try{b=i.querySelectorAll(A).length}catch{b=-1}b<1&&u.push(h+1),f.className="lumn-match "+(b>0?"is-good":"is-warn"),f.textContent=b<0?l.badSelector:b===0?d(l.noMatch,n.pathname):b===1?d(l.matchOne,n.pathname):d(l.matches,b,n.pathname)}}),m(d(l.checked,c,n.pathname)+(u.length?" "+d(l.noMatchRules,u.join(", ")):""))}).catch(function(){oe(l.pathFailed)}).then(function(){e.removeAttribute("aria-disabled")})}var q=document.getElementById("lumn-savebar"),Fe=q&&q.querySelector("[data-savebar-text]"),Ce=q&&q.querySelector("[data-savebar-save]"),M={},w={},p=null,le=!1,ue=!1;function ce(e){if(!e.dataset.saveKey){var t=e.parentElement&&e.parentElement.closest("[id]");e.dataset.saveKey=e.id||(t?t.id:"form")}return e.dataset.saveKey}function Ie(e){var t=[];return Array.prototype.forEach.call(e.elements,function(r){if(!(!r.name||r.disabled||r.type==="file"||r.type==="submit"||r.type==="button")&&!(r.name.indexOf("__KEY__")>-1||r.name==="_wpnonce")&&!((r.type==="checkbox"||r.type==="radio")&&!r.checked)){if(r.tagName==="SELECT"&&r.multiple){Array.prototype.forEach.call(r.selectedOptions,function(n){t.push(r.name+"="+n.value)});return}t.push(r.name+"="+r.value)}}),t.join("&")}function Te(){return o.querySelectorAll("form[data-save-bar]")}function K(e){var t=null;return Te().forEach(function(r){ce(r)===e&&(t=r)}),t}function se(){Te().forEach(function(e){var t=ce(e);e.querySelector('[data-error-summary], [aria-invalid="true"]')&&w[t]||M[t]&&M[t].form===e||(M[t]={form:e,state:Ie(e),html:e.innerHTML},delete w[t])}),Object.keys(w).forEach(function(e){K(e)||delete w[e]}),p&&!w[p]&&(p=Object.keys(w)[0]||null),de()}function Pe(e){var t=e.closest("section"),r=t&&t.querySelector("h2");return r||(r=o.querySelector("h1")),r?r.textContent.replace(/\s+/g," ").trim():""}function Oe(e){return e.querySelector('button[type="submit"]:not([name])')||e.querySelector('button[type="submit"]')}function de(){if(q){var e=p&&w[p]?K(p):null,t=!1;if(e){var r=Oe(e);if(r){var n=r.getBoundingClientRect(),a=n.bottom>0&&n.top<window.innerHeight-8&&n.height>0;t=!a,Ce.textContent=r.textContent.replace(/\s+/g," ").trim()}var i=Object.keys(w).length,c=Pe(e);Fe.textContent=i>1||!c?l.unsavedPlain:d(l.unsavedIn,c)}if(t&&q.hidden){var u=o.getBoundingClientRect();q.style.left=Math.max(0,u.left)+"px",q.style.right=Math.max(0,window.innerWidth-u.right)+"px"}q.hidden=!t,o.classList.toggle("has-savebar",t),t&&!le&&(le=!0,m(l.unsaved)),e||(le=!1)}}var fe=!1;function ve(){fe||(fe=!0,requestAnimationFrame(function(){fe=!1,de()}))}function me(e){var t=e.target.closest&&e.target.closest("form[data-save-bar]");if(t){var r=ce(t);M[r]||se();var n=Ie(t)!==M[r].state;n?(w[r]=!0,p=r):(delete w[r],p===r&&(p=Object.keys(w)[0]||null)),ve()}}q&&(o.addEventListener("input",me),o.addEventListener("change",me),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule], [data-remove-rule]")&&document.getElementById("lumn-tags-form");t&&setTimeout(function(){me({target:t})},0)}),window.addEventListener("scroll",ve,{passive:!0}),window.addEventListener("resize",function(){q.hidden=!0,ve()}),Ce.addEventListener("click",function(){var e=p&&K(p);if(e){var t=Oe(e);typeof e.requestSubmit=="function"?e.requestSubmit(t||void 0):t&&t.click()}}),q.querySelector("[data-savebar-undo]").addEventListener("click",function(){var e=p&&K(p);if(!(!e||!M[p])){e.innerHTML=M[p].html,window.htmx&&window.htmx.process&&window.htmx.process(e),e.querySelectorAll("[data-rule]").forEach(function(r){ke(r)}),ie(),delete w[p],p=Object.keys(w)[0]||null,de(),m(l.undone);var t=e.querySelector('input:not([type="hidden"]), select, textarea, button');t&&t.focus()}}),o.addEventListener("submit",function(e){!e.target.matches("form[data-save-bar]")&&!e.target.hasAttribute("hx-post")&&(ue=!0,setTimeout(function(){ue=!1},1500))}),window.addEventListener("beforeunload",function(e){ue||!Object.keys(w).length||(e.preventDefault(),e.returnValue="")}),se(),document.addEventListener("htmx:after:settle",function(){setTimeout(se,0)}));var ge=!1;document.addEventListener("htmx:before:swap",function(){var e=document.activeElement;ge=!!(e&&e.closest&&e.closest("#lumn-scan-actions"))}),document.addEventListener("htmx:after:settle",function(e){if(U){var t=document.activeElement;if(!t||t===document.body||!document.contains(t)){var r=document.querySelector(U);r&&r.focus()}U=null}if(ge){var n=document.activeElement;if(!n||n===document.body||!document.contains(n)){var a=document.querySelector("#lumn-scan-actions button");a&&a.focus()}ge=!1}Se(),ye();var i=e.target;if(i&&i.nodeType===1){var c=i.querySelector("dialog[data-reopen]");if(c&&!c.open&&typeof c.showModal=="function"){c.removeAttribute("data-reopen"),c.showModal();var u=c.querySelector("[data-error-summary]");u&&u.focus()}}var s=i&&i.nodeType===1&&i.querySelector?i.querySelector("[data-filter-state]"):null;if(s){var h=s.getAttribute("data-error")||"",y=document.getElementById("lumn-entry"),S=document.getElementById("lumn-entry-err");S&&(S.textContent=h,S.hidden=!h),y&&(h?y.setAttribute("aria-invalid","true"):y.removeAttribute("aria-invalid"))}if(i&&i.nodeType===1&&o.contains(i)){var f=i.querySelector("[data-announce]:not([data-announced])");f&&f.setAttribute("data-announced","1");var A=document.activeElement,b=!A||A===document.body||!document.contains(A)||!!(A.closest&&A.closest("dialog:not([open])")),g=null;if(b&&i.querySelector(".lumn-notes")&&!i.querySelector("dialog[open]")){var C=i.querySelectorAll('.lumn-note-list button[type="submit"]');V!==null&&C.length&&(g=C[Math.min(V,C.length-1)]),g||(g=i.querySelector("[data-open-dialog]"))}else b&&B&&i.querySelector(B)?g=i.querySelector(B):b&&(g=i.querySelector("[data-error-summary]")||i.querySelector('[aria-invalid="true"]')||(f&&!f.hasAttribute("data-no-focus")?f:null)||i.querySelector('button[type="submit"]'));var W=i.querySelector("[data-take-focus]");W&&(g=W),V=null,B=null,g&&g.focus(),f&&g!==f&&m(f.textContent.replace(/\s+/g," ").trim())}Object.keys(ee).forEach(function(I){var X=document.getElementById(I),R=X&&o.querySelector('[aria-controls="'+I+'"]');R&&ee[I]&&Z(R,X,!0)});var F=o.querySelector(".lumn-day-chart");F&&F.setAttribute("data-kind",D),o.querySelectorAll(".lumn-seg-btn[data-kind]").forEach(function(I){I.setAttribute("aria-pressed",String(I.getAttribute("data-kind")===D))}),N()}),document.addEventListener("htmx:response:error",function(e){var t=e.detail&&e.detail.ctx&&e.detail.ctx.response?e.detail.ctx.response.status:0;t!==422&&O(l.loadError)}),document.addEventListener("htmx:error",function(){O(l.loadError)});function pe(e,t){var r=e.querySelector(".lumn-nav-btn"),n=e.querySelector(".lumn-nav-menu");!n||n.hidden||(n.hidden=!0,r.setAttribute("aria-expanded","false"),t&&r.focus())}function he(e){o.querySelectorAll("[data-nav-group]").forEach(function(t){t!==e&&pe(t,!1)})}o.addEventListener("click",function(e){var t=e.target.closest(".lumn-nav-btn");if(!t){e.target.closest("[data-nav-group]")||he(null);return}var r=t.closest("[data-nav-group]"),n=r.querySelector(".lumn-nav-menu"),a=n.hidden;he(r),n.hidden=!a,t.setAttribute("aria-expanded",String(a)),a&&(n.classList.remove("is-right"),n.getBoundingClientRect().right>document.documentElement.clientWidth-8&&n.classList.add("is-right"))}),document.addEventListener("click",function(e){o.contains(e.target)||he(null)}),o.addEventListener("keydown",function(e){if(e.key==="Escape"){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&!t.querySelector(".lumn-nav-menu").hidden&&(e.preventDefault(),pe(t,!0))}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&e.relatedTarget&&!t.contains(e.relatedTarget)&&pe(t,!1)}),Se(),ye(),N();var Me=o.querySelector("[data-focus-on-load]");Me&&Me.focus()})(); -
lumn-analytics/tags/1.1.1/assets/src/admin.css
r3748978 r3753587 850 850 .lumn .lumn-views-pop .lumn-callout { margin: 0 0 0.75rem; } 851 851 .lumn .lumn-views-pop form { margin: 0; } 852 853 /* Review note on the Overview */ 854 .lumn .lumn-review-nag { align-items: flex-start; } 855 .lumn .lumn-review-body { flex: 1; } 856 .lumn .lumn-review-body p { margin: 0; } 857 .lumn .lumn-review-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 10px; } -
lumn-analytics/tags/1.1.1/assets/src/admin.js
r3744314 r3753587 538 538 var openerEl = null; 539 539 var pendingFocus = null; 540 var goneFocus = null; 540 541 app.addEventListener('click', function (e) { 541 542 var opener = e.target.closest('[data-dialog-opener], [data-open-dialog]'); … … 543 544 var fa = e.target.closest('[data-focus-after]'); 544 545 if (fa) pendingFocus = fa.getAttribute('data-focus-after'); 546 // A control that removes its own note: where focus goes once the note is gone. 547 var gf = e.target.closest('[data-gone-focus]'); 548 if (gf) goneFocus = gf.getAttribute('data-gone-focus'); 545 549 }, true); 550 // A link that opens somewhere else and also tells LUMN it was used (like "Leave a review"). 551 // The link opens normally; the note it belongs to is removed once the new tab has opened. 552 app.addEventListener('click', function (e) { 553 var ping = e.target.closest('a[data-ping]'); 554 if (!ping || !window.htmx) return; 555 var url = ping.getAttribute('data-ping'); 556 var tgt = ping.getAttribute('data-ping-target'); 557 setTimeout(function () { window.htmx.ajax('POST', url, { target: tgt, swap: 'outerHTML' }); }, 300); 558 }); 546 559 // A select that reloads its own panel (like the region map's country picker) keeps focus too. 547 560 app.addEventListener('change', function (e) { … … 893 906 }); 894 907 document.addEventListener('htmx:after:settle', function (e) { 908 if (goneFocus) { 909 var a0 = document.activeElement; 910 if (!a0 || a0 === document.body || !document.contains(a0)) { 911 var g = document.querySelector(goneFocus); 912 if (g) g.focus(); 913 } 914 goneFocus = null; 915 } 895 916 if (focusInScanActions) { 896 917 var act = document.activeElement; -
lumn-analytics/tags/1.1.1/includes/Admin/Admin.php
r3744314 r3753587 215 215 ) 216 216 ); 217 if ( self::show_donate() ) { 217 // One note at a time: the review request first, then (free only) the donation note. 218 if ( self::show_review() ) { 219 echo wp_kses( View::render( 'partials/review-nag' ), \Lumn\Admin\View::allowed_html() ); 220 } elseif ( self::show_donate() ) { 218 221 echo wp_kses( View::render( 'partials/donate-nag' ), \Lumn\Admin\View::allowed_html() ); 219 222 } 220 223 echo wp_kses( View::render( 'pages/overview', array( 'reports' => $reports ) ), \Lumn\Admin\View::allowed_html() ); 221 224 self::close(); 225 } 226 227 /** Where the review note sends people: the new-review form on WordPress.org. */ 228 const REVIEW_URL = 'https://wordpress.org/support/plugin/lumn-analytics/reviews/#new-post'; 229 230 /** Days LUMN must be in use, and pageviews it must have counted, before asking for a review. */ 231 const REVIEW_AFTER_DAYS = 14; 232 const REVIEW_MIN_VIEWS = 100; 233 234 /** Days "Maybe later" hides the review note. */ 235 const REVIEW_SNOOZE_DAYS = 30; 236 237 /** Seconds since LUMN was first set up here, or 0 when unknown (sites from before 0.12.3 start counting now). */ 238 public static function days_in_use() { 239 $since = (int) get_option( 'lumn_installed', 0 ); 240 if ( ! $since ) { 241 add_option( 'lumn_installed', time(), '', false ); 242 return 0; 243 } 244 return (int) floor( ( time() - $since ) / DAY_IN_SECONDS ); 245 } 246 247 /** 248 * The review note: managers only, after two weeks of real use (not demo data), until they leave a 249 * review or say no. "Maybe later" hides it for 30 days. 250 */ 251 public static function show_review() { 252 if ( ! UiRoutes::can_manage() || \Lumn\Data\Demo::active() ) { 253 return false; 254 } 255 $state = get_user_meta( get_current_user_id(), 'lumn_review_nag', true ); 256 if ( 'done' === $state || ( is_numeric( $state ) && (int) $state > time() ) ) { 257 return false; 258 } 259 if ( self::days_in_use() < self::REVIEW_AFTER_DAYS ) { 260 return false; 261 } 262 global $wpdb; 263 $views = (int) $wpdb->get_var( "SELECT COALESCE(SUM(value), 0) FROM {$wpdb->prefix}lumn_daily WHERE kind = 'pv' AND demo = 0" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery 264 return $views >= self::REVIEW_MIN_VIEWS; 222 265 } 223 266 … … 233 276 return false; 234 277 } 235 $since = (int) get_option( 'lumn_installed', 0 ); 236 if ( ! $since ) { 237 add_option( 'lumn_installed', time(), '', false ); // Sites from before 0.12.3 start counting now. 238 return false; 239 } 240 return time() - $since >= self::DONATE_AFTER_DAYS * DAY_IN_SECONDS; 278 return self::days_in_use() >= self::DONATE_AFTER_DAYS; 241 279 } 242 280 -
lumn-analytics/tags/1.1.1/includes/Admin/UiRoutes.php
r3748978 r3753587 50 50 self::route( '/weekly/test', 'POST', 'weekly_test', $manage ); 51 51 self::route( '/geo/status', 'GET', 'geo_status', $manage ); 52 self::route( '/review/later', 'POST', 'review_later', $manage ); 53 self::route( '/review/done', 'POST', 'review_done', $manage ); 52 54 self::route( '/donate/dismiss', 'POST', 'donate_dismiss', $manage ); 53 55 … … 111 113 } 112 114 115 116 /** "Maybe later" on the review note: hide it for this user for 30 days. */ 117 public static function review_later() { 118 update_user_meta( get_current_user_id(), 'lumn_review_nag', (string) ( time() + Admin::REVIEW_SNOOZE_DAYS * DAY_IN_SECONDS ) ); 119 return self::html( '' ); 120 } 121 122 /** "Leave a review" or "Don't ask again": hide the review note for this user for good. */ 123 public static function review_done() { 124 update_user_meta( get_current_user_id(), 'lumn_review_nag', 'done' ); 125 return self::html( '' ); 126 } 113 127 114 128 /** Hide the donation note on the Overview for this user, for good. */ -
lumn-analytics/tags/1.1.1/includes/Admin/View.php
r3744314 r3753587 49 49 } 50 50 ); 51 $attrs = array_fill_keys( array( 'accept', 'action', 'alt', 'aria-atomic', 'aria-busy', 'aria-checked', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'autocapitalize', 'autocomplete', 'autofocus', 'charset', 'checked', 'class', 'clip-path', 'cols', 'colspan', 'content', 'contenteditable', 'cx', 'cy', 'd', 'datetime', 'decoding', 'dir', 'disabled', 'dominant-baseline', 'download', 'draggable', 'enctype', 'fill', 'fill-opacity', 'fill-rule', 'focusable', 'font-size', 'font-weight', 'for', 'form', 'gradienttransform', 'gradientunits', 'headers', 'height', 'hidden', 'href', 'hreflang', 'hx-boost', 'hx-config', 'hx-confirm', 'hx-delete', 'hx-disable d-elt', 'hx-ext', 'hx-get', 'hx-headers', 'hx-headers:inherited', 'hx-include', 'hx-indicator', 'hx-on', 'hx-params', 'hx-patch', 'hx-post', 'hx-push-url', 'hx-put', 'hx-select', 'hx-select-oob', 'hx-status', 'hx-swap', 'hx-swap-oob', 'hx-sync', 'hx-target', 'hx-trigger', 'hx-vals', 'id', 'inert', 'inputmode', 'lang', 'list', 'loading', 'max', 'maxlength', 'method', 'min', 'minlength', 'multiple', 'name', 'novalidate', 'offset', 'opacity', 'open', 'pattern', 'placeholder', 'points', 'popover', 'popovertarget', 'popovertargetaction', 'preserveaspectratio', 'r', 'readonly', 'referrerpolicy', 'rel', 'required', 'reversed', 'role', 'rows', 'rowspan', 'rx', 'ry', 'sandbox', 'scope', 'selected', 'size', 'sizes', 'span', 'spellcheck', 'src', 'srcset', 'start', 'step', 'stop-color', 'stop-opacity', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-opacity', 'stroke-width', 'style', 'tabindex', 'target', 'text-anchor', 'title', 'transform', 'translate', 'type', 'value', 'vector-effect', 'viewbox', 'width', 'wrap', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2' ), true );51 $attrs = array_fill_keys( array( 'accept', 'action', 'alt', 'aria-atomic', 'aria-busy', 'aria-checked', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'autocapitalize', 'autocomplete', 'autofocus', 'charset', 'checked', 'class', 'clip-path', 'cols', 'colspan', 'content', 'contenteditable', 'cx', 'cy', 'd', 'datetime', 'decoding', 'dir', 'disabled', 'dominant-baseline', 'download', 'draggable', 'enctype', 'fill', 'fill-opacity', 'fill-rule', 'focusable', 'font-size', 'font-weight', 'for', 'form', 'gradienttransform', 'gradientunits', 'headers', 'height', 'hidden', 'href', 'hreflang', 'hx-boost', 'hx-config', 'hx-confirm', 'hx-delete', 'hx-disable', 'hx-get', 'hx-headers', 'hx-headers:inherited', 'hx-ignore', 'hx-include', 'hx-indicator', 'hx-patch', 'hx-post', 'hx-push-url', 'hx-put', 'hx-select', 'hx-select-oob', 'hx-status', 'hx-swap', 'hx-swap-oob', 'hx-sync', 'hx-target', 'hx-trigger', 'hx-vals', 'id', 'inert', 'inputmode', 'lang', 'list', 'loading', 'max', 'maxlength', 'method', 'min', 'minlength', 'multiple', 'name', 'novalidate', 'offset', 'opacity', 'open', 'pattern', 'placeholder', 'points', 'popover', 'popovertarget', 'popovertargetaction', 'preserveaspectratio', 'r', 'readonly', 'referrerpolicy', 'rel', 'required', 'reversed', 'role', 'rows', 'rowspan', 'rx', 'ry', 'sandbox', 'scope', 'selected', 'size', 'sizes', 'span', 'spellcheck', 'src', 'srcset', 'start', 'step', 'stop-color', 'stop-opacity', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-opacity', 'stroke-width', 'style', 'tabindex', 'target', 'text-anchor', 'title', 'transform', 'translate', 'type', 'value', 'vector-effect', 'viewbox', 'width', 'wrap', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2' ), true ); 52 52 $attrs['data-*'] = true; 53 53 $allowed = array_fill_keys( array( 'a', 'abbr', 'article', 'aside', 'b', 'blockquote', 'br', 'button', 'caption', 'circle', 'clippath', 'code', 'col', 'colgroup', 'dd', 'defs', 'del', 'desc', 'details', 'dialog', 'div', 'dl', 'dt', 'ellipse', 'em', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'g', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'line', 'lineargradient', 'main', 'mark', 'meter', 'nav', 'ol', 'optgroup', 'option', 'output', 'p', 'path', 'polygon', 'polyline', 'pre', 'progress', 'radialgradient', 'rect', 's', 'section', 'select', 'small', 'span', 'stop', 'strong', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template', 'text', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'tspan', 'u', 'ul', 'use' ), $attrs ); -
lumn-analytics/tags/1.1.1/lumn.php
r3748978 r3753587 1 1 <?php 2 2 /** 3 * Plugin Name: LUMN Analytics 3 * Plugin Name: LUMN Analytics: Privacy-First, Cookieless Google Analytics Alternative 4 4 * Plugin URI: https://envsnstudios.com/lumn 5 5 * Description: Self-hosted, privacy-first analytics for WordPress. Cookieless, no stored IP addresses, and nothing leaves your server. Designed to support HIPAA and GDPR programs. 6 * Version: 1.1. 06 * Version: 1.1.1 7 7 * Requires at least: 6.9 8 8 * Requires PHP: 8.1 … … 34 34 } 35 35 36 define( 'LUMN_VERSION', '1.1. 0' );36 define( 'LUMN_VERSION', '1.1.1' ); 37 37 define( 'LUMN_DB_VERSION', 14 ); 38 38 define( 'LUMN_FILE', __FILE__ ); -
lumn-analytics/tags/1.1.1/readme.txt
r3748978 r3753587 1 === LUMN Analytics ===1 === LUMN Analytics: Privacy-First, Cookieless Google Analytics Alternative === 2 2 Contributors: envsnstudios 3 3 Donate link: https://licenses.envsnstudios.com/donate 4 Tags: analytics, privacy, cookieless, statistics, gdpr4 Tags: analytics, google analytics, privacy, cookieless, gdpr 5 5 Requires at least: 6.9 6 6 Tested up to: 7.1 7 7 Requires PHP: 8.1 8 Stable tag: 1.1. 08 Stable tag: 1.1.1 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 Self-hosted, privacy-first analytics. Cookieless, no stored IP addresses, and nothingleaves your server.12 Privacy-first Google Analytics alternative for WordPress. Cookieless, no stored IP addresses, and your data never leaves your server. 13 13 14 14 == Description == … … 41 41 LUMN (free) includes the dashboard (key numbers, pageviews by day, sources, top pages, content by type, author or category, devices, live view, events, countries and AI assistant visits), a weekly summary email, imports from other analytics plugins, a Popular posts block, a tracking health check, tag rules for clicks, scrolling, time on page and sections seen, the privacy presets and records page, chart notes, post stats in the editor, CSV downloads, one-click demo data and a built-in consent notice. 42 42 43 LUMN Analytics Pro adds LUMN cards on the WordPress Dashboard, journeys and funnels, campaigns, site speed, broken links, JavaScript errors and form analytics, location, WooCommerce revenue, survey capture, visitor labels, Site health (the site-quality scanner with saved scan records, and page accessibility checks with markers on the page, quick fixes, saved page copies and developer exports), PDF and Excel reports, designed emailed reports and alerts, states and regions with maps, site search, saved dashboard views, Google Search Console data (off until you connect your own account), an audit log and Google Analytics import. Agency tools (client share links, a rollup of all your sites, white-label branding, branded client report emails and a MainWP add-on) come with LUMN Analytics Pro on the Agency plan.43 LUMN Analytics Pro adds LUMN cards on the WordPress Dashboard, journeys and funnels, campaigns, site speed, broken links, JavaScript errors and form analytics, location, WooCommerce revenue, survey capture, visitor labels, Site health (the site-quality scanner with saved scan records, and page accessibility checks with markers on the page, quick fixes, saved page copies and developer exports), PDF and Excel reports, designed emailed reports and alerts, states and regions with maps, site search, saved dashboard views, Google Search Console data (off until you connect your own account), an audit log and Google Analytics import. Agency tools (client share links, a rollup of all your sites, white-label branding, branded client report emails and MainWP support) come with LUMN Analytics Pro on the Agency plan. 44 44 45 45 Moving from free to Pro keeps all your data. Turning on Pro turns the free plugin off. … … 127 127 128 128 == Changelog == 129 130 = 1.1.1 = 131 * New: after two weeks of real use, the Overview asks once for a review on WordPress.org. "Maybe later" hides it for 30 days, and "Don't ask again" hides it for good. Only people who manage LUMN see it, and it never shows with demo data on. 132 * Better: after you close a note on the Overview, keyboard focus moves to the date range instead of the top of the page. 129 133 130 134 = 1.1.0 = -
lumn-analytics/tags/1.1.1/templates/partials/donate-nag.php
r3744314 r3753587 19 19 <a href="<?php echo esc_url( Admin::DONATE_URL ); ?>" target="_blank" rel="noopener"><?php esc_html_e( 'Support LUMN', 'lumn-analytics' ); ?><span class="lumn-sr-only"> <?php esc_html_e( '(opens in a new tab)', 'lumn-analytics' ); ?></span></a> 20 20 </p> 21 <button type="button" class="lumn-icon-btn lumn-nag-close" hx-post="<?php echo esc_url( UiRoutes::url( 'donate/dismiss' ) ); ?>" hx-target="#lumn-donate-nag" hx-swap="outerHTML"><?php echo wp_kses( View::icon( 'x', 'lumn-ico-sm' ), \Lumn\Admin\View::allowed_html() ); ?><span class="lumn-sr-only"><?php esc_html_e( 'Dismiss donation note', 'lumn-analytics' ); ?></span></button>21 <button type="button" class="lumn-icon-btn lumn-nag-close" data-gone-focus="#lumn-range" hx-post="<?php echo esc_url( UiRoutes::url( 'donate/dismiss' ) ); ?>" hx-target="#lumn-donate-nag" hx-swap="outerHTML"><?php echo wp_kses( View::icon( 'x', 'lumn-ico-sm' ), \Lumn\Admin\View::allowed_html() ); ?><span class="lumn-sr-only"><?php esc_html_e( 'Dismiss donation note', 'lumn-analytics' ); ?></span></button> 22 22 </div> -
lumn-analytics/tags/1.1.1/uninstall.php
r3748978 r3753587 64 64 $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_lumn\_%' OR option_name LIKE '\_transient\_timeout\_lumn\_%'" ); // phpcs:ignore WordPress.DB 65 65 // lumn_visitor_label maps a person to a label code: the most identifying thing linked to LUMN. 66 foreach ( array( 'lumn_layout', 'lumn_theme', 'lumn_range', 'lumn_compare', 'lumn_visitor_label', 'lumn_license_nag', 'lumn_donate_nag' ) as $meta ) {66 foreach ( array( 'lumn_layout', 'lumn_theme', 'lumn_range', 'lumn_compare', 'lumn_visitor_label', 'lumn_license_nag', 'lumn_donate_nag', 'lumn_review_nag' ) as $meta ) { 67 67 delete_metadata( 'user', 0, $meta, '', true ); 68 68 } -
lumn-analytics/trunk/assets/dist/admin.css
r3748978 r3753587 1 1 /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ 2 @layer theme;@font-face{font-family:LUMN Onest;src:url(../fonts/onest-latin-wght-normal.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}.lumn{--l-font:"LUMN Onest", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--l-navy:#0b1f3a;--l-navy-2:#16325a;--l-slate:#8a94a6;--l-grey:#c5ccd6;--l-bg:#e9edf3;--l-surface:#fff;--l-surface-2:#f5f7fa;--l-border:#e3e7ed;--l-border-strong:#6b7588;--l-text:#0b1f3a;--l-text-2:#2a3a52;--l-muted:#5a6478;--l-link:#0a5db0;--l-focus:#0b6bcb;--l-accent:#0b6bcb;--l-good:#067647;--l-good-bg:#e6f4ec;--l-bad:#b42318;--l-bad-bg:#fdecea;--l-warn:#b54708;--l-warn-bg:#fdf2e6;--l-chip-bg:#ebeff5;--l-chip-fg:#0b1f3a;--l-bar:#0b6bcb;--l-bar-2:#8a94a6;--l-grid:#ebeef3;--l-area:#0b6bcb1a;--l-track:#e6eaf0;--l-tip-bg:#0b1f3a;--l-tip-fg:#fff;--l-seg-on:#0b1f3a;--l-seg-on-fg:#fff;--l-c0:#0b1f3a;--l-c1:#2b5bd7;--l-c2:#0f7b6c;--l-c3:#b54708;--l-c4:#8a94a6;--l-c5:#6941c6;--l-tile:#0b1f3a;--l-tile-2:#16325a;--l-tile-border:#24406a;--l-tile-muted:#c9d3e3;--l-radius:28px;--l-radius-sm:18px;--l-shadow:0 30px 60px -30px #0b1f3a2e, 0 1px 0 #fffc inset;--l-lift:0 24px 48px -16px #0b1f3a47;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%235A6478' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:light}.lumn[data-theme=dark]{--l-bg:#08111f;--l-surface:#0f1b2e;--l-surface-2:#15243b;--l-border:#21324b;--l-border-strong:#6a7a94;--l-text:#e9eef6;--l-text-2:#cad3e1;--l-muted:#a3aec0;--l-link:#8ec8ff;--l-focus:#7cc0ff;--l-accent:#7cc0ff;--l-good:#5ad7a6;--l-good-bg:#5ad7a61f;--l-bad:#ff948a;--l-bad-bg:#ff948a1f;--l-warn:#f5b062;--l-warn-bg:#f5b0621f;--l-chip-bg:#1b2d49;--l-chip-fg:#dce6f6;--l-bar:#7cc0ff;--l-bar-2:#5d7090;--l-grid:#1a2a42;--l-area:#7cc0ff1f;--l-track:#1f3049;--l-tip-bg:#dce6f6;--l-tip-fg:#0b1f3a;--l-seg-on:#dce6f6;--l-seg-on-fg:#0b1f3a;--l-c0:#dce6f6;--l-c1:#6e98ff;--l-c2:#3cc6a0;--l-c3:#f5b062;--l-c4:#7f8fa9;--l-c5:#b69cff;--l-tile:#13294a;--l-tile-2:#1b3560;--l-tile-border:#2a4878;--l-shadow:0 1px 0 #ffffff08 inset, 0 12px 28px -18px #0009;--l-lift:0 28px 56px -18px #000000b3;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%23A9B3C4' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:dark}@media (max-width:782px){html:has(body.lumn-screen){scroll-padding-top:72px}}.lumn-wrap{margin:10px 20px 0 2px}.lumn,.lumn *,.lumn :before,.lumn :after{box-sizing:border-box}.lumn{background:var(--l-bg);color:var(--l-text);font-family:var(--l-font);-webkit-font-smoothing:antialiased;border-radius:24px;min-height:calc(100vh - 120px);padding:14px 20px 28px;font-size:15px;line-height:1.5}.lumn h1,.lumn h2,.lumn h3,.lumn p,.lumn ul,.lumn ol,.lumn dl,.lumn dd,.lumn figure{margin:0;padding:0}.lumn h1,.lumn h2,.lumn h3{color:var(--l-text);font-family:var(--l-font)}.lumn a,.lumn a:hover{color:var(--l-link)}.lumn button,.lumn input,.lumn select,.lumn textarea{font:inherit;color:inherit}.lumn button{cursor:pointer}.lumn svg{overflow:visible}.lumn table{border-collapse:collapse}.lumn :focus{box-shadow:none;outline:none}.lumn :focus-visible{outline:3px solid var(--l-focus);outline-offset:2px;box-shadow:none}@media (forced-colors:active){.lumn :focus-visible{outline-color:canvastext}}.lumn .lumn-sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.lumn .lumn-ico{flex:none;width:20px;height:20px}.lumn .lumn-ico-sm{flex:none;width:16px;height:16px}.lumn .lumn-ico-xs{flex:none;width:12px;height:12px}.lumn .lumn-muted{color:var(--l-muted)}.lumn .lumn-strong{font-weight:650}.lumn .lumn-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86rem}.lumn .lumn-topbar{background:var(--l-surface);border-radius:999px;align-items:center;gap:16px;padding:8px 10px 8px 14px;display:flex}@supports (color:color-mix(in lab, red, red)){.lumn .lumn-topbar{background:color-mix(in oklab, var(--l-surface) 86%, transparent)}}.lumn .lumn-topbar{border:1px solid var(--l-border);z-index:30;-webkit-backdrop-filter:blur(14px);position:sticky;top:46px;box-shadow:0 12px 30px -18px #0b1f3a59}@media (max-width:782px){.lumn .lumn-topbar{position:relative;top:0}}.lumn .lumn-brand{color:var(--l-text);border-radius:12px;align-items:center;gap:10px;min-height:40px;text-decoration:none;display:flex}.lumn .lumn-mark{background:var(--l-navy);border-radius:6px;flex:none;width:34px;height:34px;display:block;overflow:hidden}.lumn[data-theme=dark] .lumn-mark{background:#1b3560}.lumn .lumn-mark svg{width:34px;height:34px;display:block}.lumn .lumn-word{letter-spacing:.14em;font-size:1.02rem;font-weight:750}.lumn .lumn-nav{flex:1;min-width:0}.lumn .lumn-nav ul{flex-wrap:wrap;justify-content:end;gap:4px;margin:0;list-style:none;display:flex}.lumn .lumn-nav li{margin:0}.lumn .lumn-nav-link{min-height:40px;color:var(--l-text-2);border-radius:999px;align-items:center;gap:8px;padding:0 14px;font-size:.9rem;font-weight:540;text-decoration:none;display:inline-flex}.lumn .lumn-nav-link:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-link[aria-current=page]{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-link[aria-current=page]{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav-group{position:relative}.lumn .lumn-nav-btn{cursor:pointer;background:0 0;border:0}.lumn .lumn-nav .lumn-nav-btn .lumn-nav-chev{width:16px;height:16px;transition:transform .15s;display:inline-block}.lumn .lumn-nav-btn[aria-expanded=true] .lumn-nav-chev{transform:rotate(180deg)}.lumn .lumn-nav-btn[aria-expanded=true]{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-btn.is-current{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-btn.is-current{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav .lumn-nav-menu{z-index:60;border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:14rem;max-width:calc(100vw - 32px);box-shadow:var(--l-lift);border-radius:18px;justify-content:stretch;gap:2px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px);left:0}.lumn .lumn-nav .lumn-nav-menu[hidden]{display:none}.lumn .lumn-nav .lumn-nav-menu.is-right{left:auto;right:0}.lumn .lumn-nav-menu .lumn-nav-link{border-radius:12px;width:100%;display:flex}.lumn .lumn-nav-menu .lumn-nav-link .lumn-ico{display:inline-block}@media (prefers-reduced-motion:reduce){.lumn .lumn-nav-btn .lumn-nav-chev{transition:none}}@media (forced-colors:active){.lumn .lumn-nav-btn.is-current,.lumn .lumn-nav-link[aria-current=page]{border:2px solid highlight}}.lumn .lumn-icon-btn{border:1px solid var(--l-border-strong);background:var(--l-surface);width:42px;height:42px;color:var(--l-text);border-radius:999px;flex:none;place-items:center;display:grid}.lumn .lumn-icon-btn:hover{background:var(--l-surface-2)}.lumn .lumn-theme-btn .lumn-sun{display:none}.lumn[data-theme=dark] .lumn-theme-btn .lumn-sun{display:block}.lumn[data-theme=dark] .lumn-theme-btn .lumn-moon{display:none}.lumn .lumn-main{padding-top:24px}.lumn .lumn-page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin:0 4px 20px;display:flex}.lumn .lumn-page-head h1{letter-spacing:-.03em;padding:0;font-size:2rem;font-weight:650;line-height:1.15}.lumn .lumn-lede{color:var(--l-muted);margin-top:4px}.lumn .lumn-head-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline{align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline label{color:var(--l-muted);font-size:.85rem;font-weight:550}.lumn .lumn-btn,.lumn .lumn-btn-ghost{border-radius:999px;align-items:center;gap:8px;min-height:40px;padding:0 16px;font-size:.9rem;font-weight:600;line-height:1.2;text-decoration:none;display:inline-flex}.lumn .lumn-btn{background:var(--l-navy);color:#fff;border:1px solid #0000}.lumn .lumn-btn:hover{background:var(--l-navy-2);color:#fff}.lumn[data-theme=dark] .lumn-btn{color:#0b1f3a;background:#dce6f6}.lumn[data-theme=dark] .lumn-btn:hover{background:#c6d5ee}.lumn .lumn-btn-danger{background:var(--l-bad)}.lumn .lumn-btn-danger:hover{background:#912018}.lumn[data-theme=dark] .lumn-btn-danger{color:#08111f;background:#ff948a}.lumn .lumn-btn-ghost{background:var(--l-surface);color:var(--l-text);border:1px solid var(--l-border-strong)}.lumn .lumn-btn-ghost:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn form.htmx-request .lumn-btn,.lumn form.htmx-request .lumn-btn-ghost{opacity:.7;pointer-events:none;cursor:progress}.lumn .lumn-btn-sm{min-height:36px;padding:0 12px;font-size:.82rem}.lumn .lumn-btn:active,.lumn .lumn-btn-ghost:active,.lumn .lumn-tool:active,.lumn .lumn-icon-btn:active{transform:translateY(1px)}.lumn .lumn-btn[disabled],.lumn .lumn-btn-ghost[disabled]{cursor:not-allowed;background:var(--l-surface-2);color:var(--l-muted);border:1px dashed var(--l-border-strong)}.lumn .lumn-select,.lumn .lumn-input{border:1px solid var(--l-border-strong);background-color:var(--l-surface);min-height:40px;color:var(--l-text);box-shadow:none;border-radius:12px;max-width:100%;padding:8px 12px;line-height:1.4}.lumn textarea.lumn-input{resize:vertical;width:100%;min-height:88px}.lumn input.lumn-input[type=text],.lumn input.lumn-input[type=url]{width:100%}.lumn .lumn-select{appearance:none;background-image:var(--l-select-caret);background-position:right .9rem center;background-repeat:no-repeat;background-size:.7rem;border-radius:999px;padding:0 2.5rem 0 14px}.lumn .lumn-select::-ms-expand{display:none}@media (forced-colors:active){.lumn .lumn-select{appearance:auto;padding-right:revert;background-image:none}}.lumn .lumn-select:focus,.lumn .lumn-input:focus{border-color:var(--l-focus);box-shadow:none;outline:none}.lumn .lumn-select:focus-visible,.lumn .lumn-input:focus-visible{outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-input[aria-invalid=true]{border-color:var(--l-bad);border-width:2px}.lumn .lumn-input[readonly]{background:var(--l-surface-2)}.lumn .lumn-board{grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-flow:row;gap:16px;display:grid}.lumn .lumn-board.htmx-request{opacity:.6;transition:opacity .2s}.lumn .lumn-panel{grid-column:span var(--span,6);background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);flex-direction:column;min-width:0;padding:24px;display:flex;position:relative}.lumn .lumn-panel[data-span="12"]{--span:12}.lumn .lumn-panel[data-span="8"]{--span:8}.lumn .lumn-panel[data-span="7"]{--span:7}.lumn .lumn-panel[data-span="6"]{--span:6}.lumn .lumn-panel[data-span="5"]{--span:5}.lumn .lumn-panel[data-span="4"]{--span:4}.lumn .lumn-panel-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 12px;margin-bottom:14px;display:flex}.lumn .lumn-panel-titles{flex:180px;min-width:0}.lumn .lumn-panel-head h2{letter-spacing:-.01em;font-size:1rem;font-weight:640;line-height:1.3}.lumn .lumn-panel-sub{color:var(--l-muted);margin-top:2px;font-size:.8rem}.lumn .lumn-panel-tools{flex:none;align-items:center;gap:4px;display:flex}.lumn .lumn-tool{width:32px;height:32px;color:var(--l-muted);background:0 0;border:1px solid #0000;border-radius:10px;place-items:center;padding:0;display:grid}.lumn .lumn-tool:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-drag-handle{cursor:grab;touch-action:none}.lumn .lumn-panel-body{flex:1;min-width:0}.lumn .lumn-panel.is-dragging{z-index:20;box-shadow:var(--l-lift);cursor:grabbing;transition:none}.lumn .lumn-panel.is-grabbed{outline:3px dashed var(--l-focus);outline-offset:3px}.lumn .lumn-board.is-dragging{-webkit-user-select:none;user-select:none}.lumn .lumn-empty{color:var(--l-muted);padding:8px 0;font-size:.88rem}.lumn .lumn-move-menu{border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:210px;color:var(--l-text);box-shadow:var(--l-lift);border-radius:14px;margin:0;padding:6px;position:fixed;inset:auto}.lumn .lumn-move-menu button{text-align:left;width:100%;min-height:36px;color:var(--l-text);background:0 0;border:0;border-radius:9px;align-items:center;padding:0 10px;font-size:.88rem;display:flex}.lumn .lumn-move-menu button:hover,.lumn .lumn-move-menu button:focus-visible{background:var(--l-surface-2)}.lumn .lumn-move-menu button:disabled{color:var(--l-muted);cursor:not-allowed;text-decoration:line-through}.lumn .lumn-menu-label{text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);padding:8px 10px 4px;font-size:.72rem;font-weight:600}.lumn .lumn-kpi-grid{grid-template-rows:auto auto;grid-template-columns:1.5fr 1fr 1fr;gap:14px;display:grid}.lumn .lumn-kpi{background:var(--l-surface-2);border-radius:20px;min-width:0;padding:16px}.lumn .lumn-kpi.is-hero{background:var(--l-tile);color:#fff;flex-direction:column;grid-row:span 2;justify-content:space-between;display:flex}.lumn .lumn-kpi.is-hero .lumn-kpi-label,.lumn .lumn-kpi.is-hero .lumn-kpi-note{color:var(--l-tile-muted)}.lumn .lumn-kpi.is-hero .lumn-kpi-icon{color:#fff;background:#ffffff1f}.lumn .lumn-kpi.is-hero .lumn-kpi-value{color:#fff;font-size:3.2rem}.lumn .lumn-kpi.is-hero .lumn-delta.is-good{color:#7fe6bc;background:#5ad7a629}.lumn .lumn-kpi.is-hero .lumn-delta.is-bad{color:#ffb3ab;background:#ff948a29}.lumn .lumn-kpi.is-hero .lumn-delta.is-flat{color:#dce6f6;background:#ffffff1a}.lumn .lumn-kpi-top{align-items:center;gap:10px;display:flex}.lumn .lumn-kpi-icon{background:var(--l-chip-bg);width:36px;height:36px;color:var(--l-chip-fg);border-radius:10px;flex:none;place-items:center;display:grid}.lumn .lumn-kpi-label{color:var(--l-text-2);overflow-wrap:anywhere;min-width:0;font-size:.88rem;font-weight:560}.lumn .lumn-kpi-value{letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--l-text);margin:12px 0 6px;font-size:1.9rem;font-weight:620;line-height:1.05}.lumn .lumn-kpi-meta{flex-wrap:wrap;align-items:center;gap:6px;font-size:.78rem;display:flex}.lumn .lumn-kpi-note{color:var(--l-muted)}.lumn .lumn-delta{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:3px;padding:2px 7px;font-weight:650;display:inline-flex}.lumn .lumn-delta.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-delta.is-bad{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-delta.is-flat{color:var(--l-muted);background:var(--l-chip-bg)}.lumn .lumn-live-dot{background:0 0}.lumn .lumn-live-dot:after{content:"";background:var(--l-good);border-radius:50%;width:10px;height:10px;animation:2.4s ease-out infinite lumn-breathe}@keyframes lumn-breathe{0%{box-shadow:0 0 0 0 color-mix(in oklab, var(--l-good) 55%, transparent)}70%{box-shadow:0 0 0 10px #0000}to{box-shadow:0 0 #0000}}.lumn .lumn-chart-slot{width:100%;position:relative;overflow:hidden}.lumn .lumn-tip{z-index:2;pointer-events:none;background:var(--l-text);min-width:120px;color:var(--l-surface);white-space:nowrap;border-radius:10px;flex-direction:column;gap:2px;padding:8px 10px;font-size:12.5px;line-height:1.35;display:flex;position:absolute;box-shadow:0 8px 24px #0b1f3a38}.lumn .lumn-tip strong{opacity:.85;font-weight:650}.lumn .lumn-tip .lumn-tip-main{font-variant-numeric:tabular-nums;font-size:14px;font-weight:700}.lumn .lumn-hit{cursor:crosshair}.lumn .lumn-chart-slot.is-holding .lumn-day-chart{max-width:none}.lumn .lumn-cross{stroke:var(--l-muted);stroke-width:1px;stroke-dasharray:3 3;pointer-events:none}.lumn .lumn-cross.is-on{stroke-opacity:1}.lumn .lumn-bar.is-hover{fill:var(--l-bar)}.lumn .lumn-pt.is-hover{fill:var(--l-bar);r:5px}.lumn .lumn-day-chart:focus-visible{outline:2px solid var(--l-focus,#0b6bcb);outline-offset:4px;border-radius:6px}.lumn .lumn-day-chart{width:auto;max-width:100%;height:auto;display:block;overflow:visible}.lumn .lumn-grid-line{stroke:var(--l-grid);stroke-width:1px}.lumn .lumn-axis{fill:var(--l-muted);font-size:11.5px;font-family:var(--l-font)}.lumn .lumn-bar{fill:var(--l-bar-2)}.lumn .lumn-bar.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart .lumn-bar{transform-box:fill-box;transform-origin:bottom;animation:.7s cubic-bezier(.16,1,.3,1) both lumn-grow}@keyframes lumn-grow{0%{transform:scaleY(.04)}to{transform:scaleY(1)}}.lumn .lumn-chart-slot.is-still .lumn-bar{animation:none}.lumn .lumn-line{fill:none;stroke:var(--l-bar);stroke-width:2.5px;stroke-linejoin:round}.lumn .lumn-area{fill:var(--l-area)}.lumn .lumn-pt{fill:var(--l-surface);stroke:var(--l-bar);stroke-width:2px}.lumn .lumn-pt.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart[data-kind=bar] .lumn-as-line,.lumn .lumn-day-chart[data-kind=line] .lumn-as-bars{display:none}.lumn .lumn-avg-line{stroke:var(--l-muted);stroke-dasharray:4 5;stroke-width:1.2px}.lumn .lumn-peak-label rect{fill:var(--l-tip-bg)}.lumn .lumn-peak-label text{fill:var(--l-tip-fg);font-size:12px;font-weight:700;font-family:var(--l-font)}.lumn .lumn-cmp-halo{fill:none;stroke:var(--l-surface);stroke-width:5px;stroke-linejoin:round}.lumn .lumn-cmp-line{fill:none;stroke:var(--l-c5);stroke-width:2px;stroke-dasharray:7 5;stroke-linejoin:round}.lumn .lumn-note-pin line{stroke:var(--l-warn);stroke-width:1.5px;stroke-dasharray:2 4}.lumn .lumn-note-pin circle{fill:var(--l-warn);stroke:var(--l-surface);stroke-width:2px}.lumn .lumn-chart-key{color:var(--l-text-2);flex-wrap:wrap;gap:6px 18px;margin:10px 0 0;padding:0;font-size:.82rem;list-style:none;display:flex}.lumn .lumn-chart-key li{align-items:center;gap:8px;margin:0;display:flex}.lumn .lumn-key-solid,.lumn .lumn-key-dash{border-top:3px solid var(--l-bar);width:22px;height:0}.lumn .lumn-key-dash{border-top:2px dashed var(--l-c5)}.lumn .lumn-key-pin{background:var(--l-warn);border-radius:50%;width:10px;height:10px}.lumn .lumn-notes{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-notes-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.lumn .lumn-h3{color:var(--l-text);margin:0;font-size:.95rem;font-weight:650}.lumn .lumn-note-list{margin:10px 0 0;padding:0;list-style:none}.lumn .lumn-note-list li{border-bottom:1px solid var(--l-grid);align-items:center;gap:12px;margin:0;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-note-list li:last-child{border-bottom:0}.lumn .lumn-note-list form{margin:0 0 0 auto}.lumn .lumn-note-day{min-width:52px;color:var(--l-warn);font-variant-numeric:tabular-nums;flex:none;font-weight:600}.lumn .lumn-note-text{overflow-wrap:anywhere;min-width:0}.lumn .lumn-dialog{border:1px solid var(--l-border);background:var(--l-surface);width:min(440px,100vw - 32px);color:var(--l-text);border-radius:20px;padding:22px;box-shadow:0 24px 60px #0b1f3a47}.lumn .lumn-dialog::backdrop{background:#08111f73}.lumn .lumn-dialog .lumn-field:first-of-type{margin-top:14px}.lumn .lumn-dialog .lumn-input{width:100%}.lumn .lumn-dialog-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.lumn .lumn-chart-foot{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;margin-top:12px;display:flex}.lumn .lumn-seg{border:1px solid var(--l-border-strong);border-radius:999px;gap:2px;margin-right:4px;padding:2px;display:inline-flex}.lumn .lumn-seg-btn{min-height:28px;color:var(--l-muted);background:0 0;border:0;border-radius:999px;padding:0 12px;font-size:.8rem;font-weight:560}.lumn .lumn-seg-btn[aria-pressed=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg)}.lumn .lumn-seg-wide{flex-wrap:wrap;max-width:100%;margin:0 0 14px}.lumn .lumn-seg-wide .lumn-seg-btn{min-height:32px}.lumn .lumn-table-toggle{border:1px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px;font-size:.84rem;font-weight:600;display:inline-flex}.lumn .lumn-table-toggle:hover{background:var(--l-surface-2)}.lumn .lumn-table-toggle[aria-expanded=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg);border-color:#0000}.lumn .lumn-data-table{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;width:100%;max-height:340px;margin-top:14px;position:relative;overflow:auto}.lumn .lumn-data-table[hidden]{display:none}.lumn .lumn-data-table table{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums;width:100%;font-size:.86rem}.lumn .lumn-data-table caption{text-align:left;color:var(--l-text-2);padding:12px 16px 4px;font-size:.82rem;font-weight:650}.lumn .lumn-data-table thead th{z-index:1;background:var(--l-surface);text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:10px 16px;font-size:.72rem;font-weight:600;position:sticky;top:0}.lumn .lumn-data-table tbody th,.lumn .lumn-data-table td,.lumn .lumn-data-table tfoot th{border-bottom:1px solid var(--l-border);text-align:left;white-space:nowrap;padding:9px 16px;font-weight:500}.lumn .lumn-data-table tbody tr:nth-child(2n){background:var(--l-surface-2)}.lumn .lumn-data-table tbody tr:hover{background:var(--l-chip-bg)}.lumn .lumn-data-table tr.is-peak th,.lumn .lumn-data-table tr.is-peak td:nth-child(2){font-weight:700}.lumn .lumn-data-table tfoot th,.lumn .lumn-data-table tfoot td{background:var(--l-surface);border-top:1px solid var(--l-border-strong);border-bottom:0;font-weight:700;position:sticky;bottom:0}.lumn .lumn-num{white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right!important}.lumn .lumn-wd{width:2.6em;color:var(--l-muted);font-weight:500;display:inline-block}.lumn .lumn-bar-cell{width:30%;min-width:80px}.lumn .lumn-bar-cell .lumn-meter{margin:0}.lumn .lumn-chg{align-items:center;gap:3px;font-weight:600;display:inline-flex}.lumn .lumn-chg.is-good{color:var(--l-good)}.lumn .lumn-chg.is-bad{color:var(--l-bad)}.lumn .lumn-chg.is-flat{color:var(--l-muted)}.lumn .lumn-table{width:100%;font-size:.88rem}.lumn .lumn-table thead th{text-transform:uppercase;letter-spacing:.05em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:0 0 8px;font-size:.75rem;font-weight:600}.lumn .lumn-table thead th:not(:first-child),.lumn .lumn-table td{text-align:right;font-variant-numeric:tabular-nums}.lumn .lumn-table tbody th{text-align:left;border-bottom:1px solid var(--l-border);padding:10px 12px 10px 0;font-weight:500}.lumn .lumn-table td{border-bottom:1px solid var(--l-border);white-space:nowrap;vertical-align:top;padding:10px 0 10px 12px}.lumn .lumn-table-text td{text-align:left;white-space:normal}.lumn .lumn-table-text thead th{text-align:left!important}.lumn .lumn-table-scroll{position:relative;overflow-x:auto}.lumn .lumn-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.84rem}.lumn .lumn-row-sub{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-badge{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;align-items:center;gap:4px;margin-left:8px;padding:1px 8px;font-size:.7rem;font-weight:650;display:inline-flex}.lumn .lumn-meter{background:var(--l-track);border-radius:4px;height:4px;margin-top:7px;display:block;overflow:hidden}.lumn .lumn-meter>span{background:var(--l-bar);border-radius:4px;height:100%;display:block}.lumn .lumn-meter-lg{height:8px}.lumn .lumn-bars-list{gap:14px;margin:0;list-style:none;display:grid}.lumn .lumn-bars-list li{margin:0}.lumn .lumn-dv-row{justify-content:space-between;gap:12px;font-size:.88rem;font-weight:550;display:flex}.lumn .lumn-dv-val{font-variant-numeric:tabular-nums}.lumn .lumn-mini-stats{border-top:1px solid var(--l-border);grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px;padding-top:14px;display:grid}.lumn .lumn-mini-stats dt{color:var(--l-muted);font-size:.72rem}.lumn .lumn-mini-stats dd{margin:2px 0 0;font-size:.86rem;font-weight:600}.lumn .lumn-donut-wrap{flex-wrap:wrap;align-items:center;gap:20px;display:flex}.lumn .lumn-donut-box{flex:none;width:168px;position:relative}.lumn .lumn-donut{width:168px;height:168px;display:block}.lumn .lumn-donut-track{stroke:var(--l-track)}.lumn .lumn-seg-0{stroke:var(--l-c0)}.lumn .lumn-sw-0{background:var(--l-c0)}.lumn .lumn-seg-1{stroke:var(--l-c1)}.lumn .lumn-sw-1{background:var(--l-c1)}.lumn .lumn-seg-2{stroke:var(--l-c2)}.lumn .lumn-sw-2{background:var(--l-c2)}.lumn .lumn-seg-3{stroke:var(--l-c3)}.lumn .lumn-sw-3{background:var(--l-c3)}.lumn .lumn-seg-4{stroke:var(--l-c4)}.lumn .lumn-sw-4{background:var(--l-c4)}.lumn .lumn-seg-5{stroke:var(--l-c5)}.lumn .lumn-sw-5{background:var(--l-c5)}.lumn .lumn-donut-center{background:var(--l-surface);text-align:center;border-radius:50%;place-content:center;display:grid;position:absolute;inset:22px}.lumn .lumn-dc-num{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:650}.lumn .lumn-dc-lbl{color:var(--l-muted);font-size:.72rem}.lumn .lumn-legend{flex:180px;font-size:.86rem}.lumn .lumn-legend th{text-align:left;align-items:center;gap:10px;padding:4px 8px 4px 0;font-weight:500;display:flex}.lumn .lumn-legend td{padding:4px 0 4px 10px}.lumn .lumn-sw{border-radius:4px;flex:none;width:12px;height:12px;display:inline-block}.lumn #lumn-panel-privacy{background:var(--l-tile);color:#fff;border:none}.lumn #lumn-panel-privacy h2{color:#fff}.lumn #lumn-panel-privacy .lumn-panel-sub,.lumn #lumn-panel-privacy .lumn-preset-k,.lumn #lumn-panel-privacy .lumn-pv-foot,.lumn #lumn-panel-privacy .lumn-tool{color:var(--l-tile-muted)}.lumn #lumn-panel-privacy .lumn-tool:hover{background:var(--l-tile-2);color:#fff}.lumn #lumn-panel-privacy :focus-visible{outline-color:#9ccbff}.lumn #lumn-panel-privacy .lumn-btn-ghost{color:#fff;border-color:var(--l-slate);background:0 0}.lumn #lumn-panel-privacy .lumn-btn-ghost:hover{background:var(--l-tile-2)}.lumn .lumn-preset{background:var(--l-surface-2);border:1px solid var(--l-border);border-radius:16px;align-items:center;gap:12px;padding:12px;display:flex}.lumn #lumn-panel-privacy .lumn-preset{background:var(--l-tile-2);border-color:var(--l-tile-border)}.lumn .lumn-preset-icon{color:#0b1f3a;background:#fff;border-radius:10px;flex:none;place-items:center;width:40px;height:40px;display:grid}.lumn .lumn-preset-k{font-size:.75rem}.lumn .lumn-preset-v{font-size:1.05rem;font-weight:700}.lumn .lumn-preset-mod{color:var(--l-tile-muted);font-size:.82rem;font-weight:500}.lumn .lumn-preset .lumn-btn-ghost{margin-left:auto}.lumn .lumn-pv-list{margin:12px 0 0;list-style:none;display:grid}.lumn .lumn-pv-list li{border-bottom:1px solid var(--l-tile-border);grid-template-columns:16px 1fr auto;align-items:center;gap:10px;margin:0;padding:8px 0;font-size:.86rem;display:grid}.lumn .lumn-pv-list .lumn-ico-sm{color:#7fe6bc}.lumn .lumn-pv-v{text-align:right;font-weight:600}.lumn .lumn-pv-foot{margin-top:10px;font-size:.8rem}.lumn .lumn-rt-count{color:var(--l-muted);margin-bottom:10px;font-size:.86rem}.lumn .lumn-rt-feed{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-rt-feed li{background:var(--l-surface-2);border-radius:16px;grid-template-rows:auto auto;grid-template-columns:1fr auto;column-gap:10px;margin:0;padding:12px 14px;font-size:.85rem;display:grid}.lumn .lumn-rt-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem}.lumn .lumn-rt-src{color:var(--l-muted);grid-row:2;font-size:.78rem}.lumn .lumn-rt-time{color:var(--l-muted);font-variant-numeric:tabular-nums;grid-row:1/3;align-self:center;font-size:.78rem}.lumn .lumn-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:16px;margin-top:16px;display:grid}.lumn .lumn-card{background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);min-width:0;padding:24px}.lumn .lumn-card>h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-card.is-danger{border-color:var(--l-bad);border-width:2px}.lumn .lumn-span-all{grid-column:1/-1}.lumn #lumn-settings>.lumn-card{margin-top:0}.lumn .lumn-help{color:var(--l-muted);margin:2px 0 8px;font-size:.82rem}.lumn .lumn-legal{margin-top:12px}.lumn .lumn-field{margin:16px 0}.lumn .lumn-field-row{grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:0 16px;display:grid}.lumn .lumn-field-row>.lumn-field{margin:16px 0 0}.lumn .lumn-field>label,.lumn .lumn-label{margin-bottom:4px;font-size:.9rem;font-weight:600;display:block}.lumn .lumn-fieldset{border:0;min-width:0;margin:16px 0;padding:0}.lumn .lumn-fieldset legend{margin-bottom:6px;padding:0;font-size:.9rem;font-weight:600}.lumn .lumn-radio{align-items:flex-start;gap:10px;min-height:28px;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-radio input[type=radio],.lumn .lumn-radio input[type=checkbox]{flex:none;width:18px;height:18px}.lumn .lumn-radio input{margin-top:3px}.lumn .lumn-check{align-items:flex-start;gap:12px;margin:14px 0;display:flex}.lumn .lumn-check input[type=checkbox]{flex:none;width:18px;height:18px;margin-top:3px}.lumn .lumn-check label{font-size:.9rem;font-weight:600}.lumn .lumn-check .lumn-help{margin:2px 0 0}.lumn input[type=checkbox],.lumn input[type=radio]{accent-color:var(--l-navy)}.lumn[data-theme=dark] input[type=checkbox],.lumn[data-theme=dark] input[type=radio]{accent-color:#7cc0ff}.lumn .lumn-input-suffix{align-items:center;gap:8px;display:flex}.lumn .lumn-input-suffix .lumn-input{width:120px}.lumn .lumn-preset-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:8px 0 14px;display:grid}.lumn .lumn-radio-card{border:1px solid var(--l-border-strong);background:var(--l-surface);cursor:pointer;border-radius:18px;gap:6px;padding:14px;display:grid;position:relative}.lumn .lumn-radio-card input{position:absolute;top:16px;right:14px}.lumn .lumn-radio-card:has(input:checked){border-width:2px;border-color:var(--l-navy);background:var(--l-surface-2)}.lumn[data-theme=dark] .lumn-radio-card:has(input:checked){border-color:#7cc0ff}.lumn .lumn-radio-card:has(input:focus-visible){outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-radio-title{padding-right:24px;font-weight:700}.lumn .lumn-radio-text{color:var(--l-muted);font-size:.8rem}.lumn .lumn-tag{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;margin-left:4px;padding:1px 8px;font-size:.68rem;font-weight:650}.lumn .lumn-form-actions{grid-column:1/-1;justify-content:flex-end;display:flex}.lumn .lumn-inline-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.lumn .lumn-rules-count{color:var(--l-text-2);margin-top:6px;font-size:.82rem}.lumn .lumn-rules-count ul{margin:4px 0 0 18px;list-style:outside}.lumn .lumn-error{color:var(--l-bad);align-items:center;gap:6px;margin-top:6px;font-size:.82rem;font-weight:600;display:flex}.lumn .lumn-error-summary{background:var(--l-bad-bg);border:2px solid var(--l-bad);border-radius:18px;margin-bottom:16px;padding:16px 18px}.lumn .lumn-error-summary h2{margin-bottom:6px;font-size:1rem}.lumn .lumn-error-summary ul{margin-left:18px;list-style:outside}.lumn .lumn-callout{background:var(--l-surface);border:1px solid var(--l-border-strong);border-radius:16px;align-items:flex-start;gap:10px;margin-bottom:16px;padding:12px 16px;font-size:.9rem;display:flex}.lumn .lumn-callout .lumn-ico-sm{margin-top:3px}.lumn .lumn-callout.is-good{border-color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-callout.is-good .lumn-ico-sm{color:var(--l-good)}.lumn .lumn-callout.is-warn{border-color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-callout.is-warn .lumn-ico-sm{color:var(--l-warn)}.lumn .lumn-dl{gap:0;display:grid}.lumn .lumn-dl>div{border-bottom:1px solid var(--l-border);justify-content:space-between;gap:12px;padding:9px 0;font-size:.88rem;display:flex}.lumn .lumn-dl dt{color:var(--l-muted)}.lumn .lumn-dl dd{text-align:right;font-weight:600}.lumn .lumn-check-list{gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-check-list li{align-items:flex-start;gap:10px;margin:0;font-size:.88rem;display:flex}.lumn .lumn-check-list .lumn-ico-sm{color:var(--l-bad);margin-top:3px}.lumn .lumn-toast{z-index:100000;background:var(--l-tip-bg);max-width:360px;color:var(--l-tip-fg);box-shadow:var(--l-lift);border-radius:14px;padding:12px 16px;font-size:.88rem;position:fixed;bottom:24px;right:24px}.lumn .lumn-toast[hidden]{display:none}.lumn .lumn-a11y-k-error{--k:var(--l-bad)}.lumn .lumn-a11y-k-alert{--k:var(--l-warn)}.lumn .lumn-a11y-k-pass{--k:var(--l-good)}.lumn .lumn-a11y-k-review{--k:var(--l-link)}.lumn .lumn-a11y-reason{border-left:4px solid var(--k);background:var(--l-surface);border-radius:0 10px 10px 0;padding:8px 12px}.lumn .lumn-a11y-shape{width:18px;height:18px;color:var(--k,currentColor);flex:none}.lumn .lumn-a11y-status{min-height:1.5em;margin:12px 0 4px;font-weight:600}.lumn .lumn-a11y-status.is-error{color:var(--l-bad)}.lumn .lumn-a11y-results>h2{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.lumn .lumn-a11y-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:6px 0 4px;display:flex}.lumn .lumn-a11y-toolbar .lumn-inline-actions{margin-top:0}.lumn .lumn-a11y-filters{flex-wrap:wrap;gap:8px;display:flex}.lumn .lumn-a11y-filter{border:2px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px 0 10px;font-size:.88rem;font-weight:600;display:inline-flex}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:var(--k);background:var(--l-surface-2)}.lumn .lumn-a11y-filter[aria-pressed=false],.lumn .lumn-a11y-filter[aria-pressed=false] .lumn-a11y-shape{color:var(--l-muted)}.lumn .lumn-a11y-filter[aria-pressed=false]>span:first-of-type{text-decoration:line-through}.lumn .lumn-a11y-count{font-variant-numeric:tabular-nums;background:var(--l-chip-bg);color:var(--l-chip-fg);border-radius:999px;padding:1px 8px;font-size:.78rem}.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1.55fr) minmax(300px,1fr);align-items:start;gap:20px;margin-top:12px;display:grid}.lumn .lumn-a11y-layout.is-list-only{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-frame{border:1px solid var(--l-border-strong);border-radius:var(--l-radius-sm);background:#fff;width:100%;height:clamp(420px,72vh,920px);display:block}.lumn .lumn-a11y-key{flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:8px;display:flex}.lumn .lumn-a11y-key>span{align-items:center;gap:4px;display:inline-flex}.lumn .lumn-a11y-side{min-width:0}.lumn .lumn-a11y-list{max-height:clamp(260px,60vh,760px);margin-top:6px;padding:2px 4px 2px 2px;overflow-y:auto}.lumn .lumn-a11y-group{align-items:center;gap:6px;margin:14px 0 6px;font-size:.9rem;font-weight:650;display:flex}.lumn .lumn-a11y-group svg{width:18px;height:18px;color:var(--k)}.lumn .lumn-a11y-group:first-child{margin-top:0}.lumn .lumn-a11y-items{gap:6px;margin:0;list-style:none;display:grid}.lumn .lumn-a11y-items li{margin:0}.lumn .lumn-a11y-item{text-align:left;border:1px solid var(--l-border);border-left:4px solid var(--k);background:var(--l-surface);width:100%;color:var(--l-text);border-radius:14px;align-items:flex-start;gap:10px;min-height:44px;padding:9px 12px;font-size:.88rem;line-height:1.4;display:flex}.lumn .lumn-a11y-item:hover{background:var(--l-surface-2)}.lumn .lumn-a11y-item[aria-current=true]{background:var(--l-surface-2);border-color:var(--k);box-shadow:inset 0 0 0 1px var(--k)}.lumn .lumn-a11y-num{background:var(--k,var(--l-navy));min-width:24px;height:24px;color:var(--l-surface);border-radius:12px;flex:none;place-items:center;padding:0 6px;font-size:.75rem;font-weight:700;display:inline-grid}.lumn .lumn-a11y-n{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-a11y-detail{border-radius:var(--l-radius-sm);border:2px solid var(--k,var(--l-border-strong));background:var(--l-surface-2);margin-top:16px;padding:18px}.lumn .lumn-a11y-detail h3{align-items:flex-start;gap:8px;margin:4px 0 8px;font-size:1.05rem;line-height:1.35;display:flex}.lumn .lumn-a11y-detail h4{margin:14px 0 4px;font-size:.9rem}.lumn .lumn-a11y-detail h5{color:var(--l-text-2);margin:12px 0 4px;font-size:.82rem}.lumn .lumn-a11y-detail p{margin:6px 0;font-size:.9rem}.lumn .lumn-a11y-detail ul{margin:0 0 0 18px;font-size:.88rem;list-style:outside}.lumn .lumn-a11y-badge{color:var(--k);align-items:center;gap:6px;font-size:.8rem;font-weight:700;display:inline-flex}.lumn .lumn-a11y-badge svg{width:18px;height:18px}.lumn .lumn-a11y-cols{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:0 16px;display:grid}.lumn .lumn-a11y-code{border:1px solid var(--l-border);background:var(--l-surface);white-space:pre-wrap;word-break:break-word;border-radius:12px;max-height:14rem;margin:4px 0 8px;padding:10px 12px;font:.8rem/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.lumn .lumn-a11y-fix{border-top:1px solid var(--l-border-strong);margin-top:16px;padding-top:12px}.lumn .lumn-a11y-fix .lumn-field{margin:10px 0}.lumn .lumn-a11y-fix .lumn-input{width:100%}.lumn .lumn-a11y-fix .lumn-btn-sm{margin-top:8px}.lumn .lumn-a11y-color{border:1px solid var(--l-border-strong);background:var(--l-surface);border-radius:10px;width:64px;height:40px;padding:2px}.lumn .lumn-a11y-export{border-top:1px solid var(--l-border);flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;padding-top:14px;display:flex}.lumn .lumn-a11y-export[hidden]{display:none}.lumn .lumn-a11y-export .lumn-btn-ghost{align-items:center;gap:6px;display:inline-flex}.lumn .lumn-a11y-row-actions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.lumn .lumn-a11y-row-actions form{display:contents}.lumn .lumn-a11y-row-actions .lumn-btn-ghost{align-items:center;text-decoration:none;display:inline-flex}.lumn .lumn-a11y-tile-stats{border-top:0;margin-top:0;padding-top:0}.lumn .lumn-a11y-tile-stats dd{font-variant-numeric:tabular-nums;font-size:1.4rem;font-weight:700}@media (max-width:1100px){.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-list{max-height:none}}@media (forced-colors:active){.lumn .lumn-a11y-shape,.lumn .lumn-a11y-group svg,.lumn .lumn-a11y-badge svg{forced-color-adjust:none;color:canvastext}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:highlight}.lumn .lumn-a11y-item,.lumn .lumn-a11y-num{border:1px solid canvastext}}.lumn .lumn-delete-box{border-top:1px solid var(--l-border);margin-top:16px;padding-top:14px}.lumn .lumn-delete-box .lumn-inline-actions form{display:inline}.lumn .lumn-inline-form{margin-left:6px;display:inline-block}.lumn .lumn-back{margin:14px 0 0;font-weight:600}.lumn .lumn-scan-runs th[scope=row] a{font-weight:600}.lumn .lumn-scan-confirm .lumn-inline-actions form{display:inline}@media (max-width:1280px){.lumn .lumn-panel[data-span="4"],.lumn .lumn-panel[data-span="5"]{--span:6}.lumn .lumn-panel[data-span="7"],.lumn .lumn-panel[data-span="8"]{--span:12}.lumn .lumn-preset-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:960px){.lumn .lumn-board{grid-template-columns:minmax(0,1fr)}.lumn .lumn-panel{grid-column:1/-1!important}.lumn .lumn-settings-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi-grid{grid-template-columns:1fr 1fr}.lumn .lumn-kpi.is-hero{grid-area:auto/1/auto/-1}.lumn .lumn-nav-link .lumn-ico{display:none}}@media (max-width:600px){.lumn-wrap{margin:10px 10px 0 0}.lumn{border-radius:18px;padding:10px 10px 20px}.lumn .lumn-topbar{border-radius:22px;flex-wrap:wrap}.lumn .lumn-nav{flex-basis:100%;order:3}.lumn .lumn-theme-btn{margin-left:auto}.lumn .lumn-panel,.lumn .lumn-card{border-radius:22px;padding:18px}.lumn .lumn-preset-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi.is-hero .lumn-kpi-value{font-size:2.4rem}.lumn .lumn-data-table .lumn-bar-cell{display:none}.lumn .lumn-page-head h1{font-size:1.6rem}}@media (prefers-reduced-motion:reduce){.lumn *,.lumn :before,.lumn :after{transition:none!important;animation:none!important}::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}.lumn #lumn-tags-form{gap:20px;display:grid}.lumn .lumn-auto-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0 24px;display:grid}.lumn .lumn-card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.lumn .lumn-card-head h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-check-bar{background:var(--l-surface-2);border-radius:14px;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:14px 0 6px;padding:14px 16px;display:flex}.lumn .lumn-check-bar .lumn-input{width:220px;max-width:100%}.lumn .lumn-check-bar .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-rules{counter-reset:none;gap:14px;margin:16px 0;padding:0;list-style:none;display:grid}.lumn .lumn-rule{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;margin:0;padding:4px 18px 10px}.lumn .lumn-rule fieldset{border:0;min-width:0;margin:0;padding:0}.lumn .lumn-rule.is-off{background:var(--l-surface-2)}.lumn .lumn-rule-legend{margin:0;padding:14px 0 0;font-size:.92rem;font-weight:650;display:block}.lumn .lumn-rule-top{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;padding-top:6px;display:flex}@media (min-width:600px){.lumn .lumn-rule-top{margin-top:-38px;margin-left:120px}}.lumn .lumn-rule-top .lumn-check{align-items:center;margin:0}.lumn .lumn-rule-top .lumn-check input[type=checkbox]{margin-top:0}.lumn .lumn-rule-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 16px;display:grid}.lumn .lumn-rule-grid .lumn-field{margin:10px 0}.lumn .lumn-rule-grid .lumn-select,.lumn .lumn-rule-grid .lumn-input{width:100%}.lumn .lumn-rule-target{grid-column:span 2}@media (max-width:640px){.lumn .lumn-rule-target{grid-column:auto}}.lumn .lumn-rule-once{align-self:end;margin:10px 0 18px}.lumn .lumn-match{margin:4px 0 0;font-size:.82rem;font-weight:600}.lumn .lumn-match:empty{display:none}.lumn .lumn-match.is-good{color:var(--l-good)}.lumn .lumn-match.is-warn{color:var(--l-warn)}.lumn [data-check-selectors][aria-disabled=true]{opacity:.6;pointer-events:none}.lumn [hidden]{display:none!important}.lumn .lumn-filter{flex-wrap:wrap;align-items:center;gap:10px 14px;margin:8px 0 16px;display:flex}.lumn .lumn-filter .lumn-input{width:240px;max-width:100%}.lumn .lumn-filter .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-scroll-x{overflow-x:auto}.lumn .lumn-table .lumn-left{text-align:left}.lumn .lumn-sessions td,.lumn .lumn-sessions th{vertical-align:middle}.lumn .lumn-pager{color:var(--l-text-2);justify-content:center;align-items:center;gap:14px;margin-top:16px;font-size:.88rem;display:flex}.lumn .lumn-dialog-wide{width:min(640px,100vw - 32px);max-height:min(80vh,760px)}.lumn .lumn-dialog-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.lumn .lumn-steps{margin:0;padding:0;list-style:none}.lumn .lumn-steps li{border-bottom:1px solid var(--l-grid);grid-template-columns:76px 1fr;gap:12px;margin:0;padding:10px 0;font-size:.88rem;display:grid}.lumn .lumn-steps li.is-event{color:var(--l-text-2);padding-left:18px}.lumn .lumn-step-time{color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn .lumn-step-body{overflow-wrap:anywhere;min-width:0}.lumn .lumn-funnels{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:24px;margin:8px 0 16px;display:grid}.lumn .lumn-funnel caption{text-align:left;color:var(--l-text);padding-bottom:10px;font-size:.95rem;font-weight:650}.lumn .lumn-step-n{background:var(--l-chip-bg);width:22px;height:22px;color:var(--l-chip-fg);border-radius:50%;place-items:center;margin-right:6px;font-size:.72rem;font-weight:650;display:inline-grid}.lumn .lumn-details{border-top:1px solid var(--l-border);margin-top:12px;padding-top:12px}.lumn .lumn-details summary{cursor:pointer;min-height:24px;font-size:.9rem;font-weight:600}.lumn .lumn-rejected{color:var(--l-warn);margin:4px 0 0 18px;font-size:.82rem;list-style:outside}.lumn .lumn-head-actions form.lumn-field-inline{gap:8px}.lumn .lumn-vitals{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:0 0 8px;padding:0;list-style:none;display:grid}.lumn .lumn-vital{background:var(--l-surface-2);border-radius:16px;align-content:start;gap:4px;margin:0;padding:14px 16px;display:grid}.lumn .lumn-vital-name{color:var(--l-muted);font-size:.82rem;font-weight:600}.lumn .lumn-vital-name abbr{font-weight:500;text-decoration:none}.lumn .lumn-vital-val{font-variant-numeric:tabular-nums;font-size:1.15rem;font-weight:650}.lumn .lumn-rate{border:1px solid;border-radius:999px;justify-self:start;padding:2px 10px;font-size:.74rem;font-weight:650}.lumn .lumn-rate.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-rate.is-fair{color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-rate.is-poor{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-cap-left{text-align:left;padding:8px 0 10px}.lumn .lumn-wrap{white-space:normal;overflow-wrap:anywhere}.lumn abbr[title]{cursor:help}.lumn .lumn-rate-sm{width:fit-content;margin:3px 0 0 auto;padding:0 7px;font-size:.68rem;display:block}.lumn .lumn-path-min{min-width:12ch;display:inline-block}.lumn .lumn-table thead th+th{padding-left:12px}.lumn .lumn-check-cols{grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:0 16px;display:grid}.lumn .lumn-alert-grid{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:0 24px;display:grid}.lumn #lumn-test-result:empty{display:none}.lumn #lumn-test-result .lumn-callout{margin-top:14px}.lumn .lumn-error-summary li+li{margin-top:6px}.lumn .lumn-error-summary a{min-height:24px;padding:2px 0;display:inline-block}.lumn .lumn-scan-progress{gap:8px;margin:4px 0 14px;display:grid}.lumn .lumn-scan-progress p{margin:0}.lumn .lumn-progress{appearance:none;background:var(--l-track);border:0;border-radius:6px;width:100%;max-width:560px;height:10px;overflow:hidden}.lumn .lumn-progress::-webkit-progress-bar{background:var(--l-track);border-radius:6px}.lumn .lumn-progress::-webkit-progress-value{background:var(--l-bar);border-radius:6px}.lumn .lumn-progress::-moz-progress-bar{background:var(--l-bar);border-radius:6px}.lumn .lumn-scan-counts{border-top:0;border-bottom:1px solid var(--l-border);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));margin:0 0 14px;padding:0 0 14px}.lumn .lumn-scan-counts dd{font-size:1.1rem}.lumn .lumn-queue td,.lumn .lumn-queue th{vertical-align:top}.lumn .lumn-queue .lumn-rate{margin-top:4px;display:inline-block}.lumn .lumn-rate:not(.is-good):not(.is-fair):not(.is-poor){color:var(--l-text-2);background:var(--l-chip-bg)}.lumn .lumn-break{overflow-wrap:anywhere}.lumn .lumn-nowrap{white-space:nowrap;display:block}.lumn .lumn-queue-export{margin-top:14px}.lumn .lumn-settings-grid>*{min-width:0}.lumn .lumn-scroll-x{max-width:100%;position:relative}.lumn.lumn-dash{background:var(--l-surface);border-radius:0;min-height:0;padding:0;font-size:14px}.lumn .lumn-dash-range{color:var(--l-muted);margin:0 0 10px;font-size:.8rem}.lumn .lumn-dash-foot{border-top:1px solid var(--l-border);margin:14px 0 0;padding-top:10px;font-weight:600}.lumn.lumn-dash .lumn-table-toggle{display:none}.lumn .lumn-dash-list{margin:6px 0 0;padding:0;list-style:none}.lumn .lumn-dash-list li{border-bottom:1px solid var(--l-border);overflow-wrap:anywhere;gap:2px;margin:0;padding:6px 0;display:grid}.lumn .lumn-dash-list .lumn-path{color:var(--l-muted);font-size:.8rem}.lumn.lumn-dash .lumn-h3{margin-top:4px;font-size:.9rem}.lumn .lumn-survey-q+.lumn-survey-q{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-survey-q .lumn-h3{margin-bottom:10px}.lumn .lumn-geo-grid{grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:20px;display:grid}.lumn .lumn-tile-map{width:100%;height:auto;max-height:440px;margin:6px 0 8px;display:block}.lumn .lumn-tile-map text{font:600 13px var(--l-font);pointer-events:none}.lumn .lumn-geo-regions{border-top:1px solid var(--l-tile-border);margin-top:20px;padding-top:16px}.lumn .lumn-geo-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:4px;display:flex}.lumn .lumn-geo-head .lumn-h3{margin:0}.lumn .lumn-geo-head .lumn-field-inline{min-width:0;max-width:100%}.lumn .lumn-geo-head .lumn-select{flex:auto;min-width:0;max-width:100%}.lumn .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo;margin-top:4px}.lumn .lumn-pv-list.lumn-geo-list li{counter-increment:lumn-geo;grid-template-columns:2.2em 1fr auto}.lumn .lumn-pv-list.lumn-geo-list li:before{content:counter(lumn-geo) ".";color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn details .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo 10}.lumn .lumn-geo-0 rect,.lumn i.lumn-geo-0{fill:var(--l-track);background:var(--l-track)}.lumn .lumn-geo-1 rect,.lumn i.lumn-geo-1{fill:#dbe8f8;background:#dbe8f8}.lumn .lumn-geo-2 rect,.lumn i.lumn-geo-2{fill:#a9c8ef;background:#a9c8ef}.lumn .lumn-geo-3 rect,.lumn i.lumn-geo-3{fill:#6fa3e3;background:#6fa3e3}.lumn .lumn-geo-4 rect,.lumn i.lumn-geo-4{fill:#2f6fc6;background:#2f6fc6}.lumn .lumn-geo-5 rect,.lumn i.lumn-geo-5{fill:#0b3f8a;background:#0b3f8a}.lumn .lumn-geo-0 text,.lumn .lumn-geo-1 text,.lumn .lumn-geo-2 text,.lumn .lumn-geo-3 text{fill:#0b1f3a}.lumn .lumn-geo-4 text,.lumn .lumn-geo-5 text{fill:#fff}.lumn[data-theme=dark] .lumn-geo-0 rect{fill:#22324c}.lumn[data-theme=dark] .lumn-geo-0 text{fill:#c5ccd6}.lumn .lumn-geo-key{color:var(--l-muted);align-items:center;gap:4px;margin:0 0 6px;font-size:.75rem;display:flex}.lumn .lumn-geo-key i{border-radius:3px;width:18px;height:10px;display:inline-block}.lumn .lumn-geo-key span:first-child{margin-right:4px}.lumn .lumn-geo-key span:last-child{margin-left:4px}html:has(body.lumn-screen){scroll-padding-top:130px}.lumn input[type=file]{min-width:0;max-width:100%;font:inherit;font-size:.88rem}.lumn .lumn-field-inline:has(input[type=file]){flex-wrap:wrap;min-width:0;max-width:100%}.lumn .lumn-preset-diffs{margin:14px 0 12px}.lumn .lumn-preset-diffs .lumn-strong{margin:0 0 6px}.lumn .lumn-diff-list{font-size:inherit;margin:0 0 8px;padding-left:18px}.lumn .lumn-diff-list li{font-size:inherit;margin:0 0 4px}.lumn .lumn-diff-tag{background:var(--l-good-bg);color:var(--l-good);border:1px solid;border-radius:999px;margin-left:6px;padding:1px 8px;font-size:.72rem;font-weight:600;display:inline-block}.lumn .lumn-diff-tag.is-looser{background:var(--l-bad-bg);color:var(--l-bad)}.lumn .lumn-preset-diffs .lumn-help{margin:0}.lumn .lumn-savebar{z-index:99990;background:var(--l-surface);width:min(760px,100% - 32px);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:999px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:0 auto;padding:10px 12px 10px 18px;display:flex;position:fixed;bottom:16px;box-shadow:0 18px 40px -16px #0b1f3a73}.lumn .lumn-savebar[hidden]{display:none}.lumn .lumn-savebar-msg{align-items:center;gap:8px;margin:0;font-size:.92rem;font-weight:600;display:flex}.lumn .lumn-savebar-msg .lumn-ico-sm{color:var(--l-warn);flex:none}.lumn .lumn-savebar-actions{flex-wrap:wrap;gap:8px;display:flex}.lumn.has-savebar .lumn-main{padding-bottom:96px}.lumn.has-savebar .lumn-toast{bottom:96px}@media (prefers-reduced-motion:no-preference){.lumn .lumn-savebar{animation:.18s ease-out lumn-savebar-in}@keyframes lumn-savebar-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}}@media (max-width:600px){.lumn .lumn-savebar{border-radius:18px;width:calc(100% - 16px);padding:12px;bottom:8px}.lumn .lumn-savebar-actions{width:100%}.lumn .lumn-savebar-actions .lumn-btn,.lumn .lumn-savebar-actions .lumn-btn-ghost{flex:1}}.lumn .lumn-license-facts{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px 20px;margin:4px 0 14px;display:grid}.lumn .lumn-license-facts dt{color:var(--l-muted);margin-bottom:2px;font-size:.78rem;font-weight:600}.lumn .lumn-license-facts dd{overflow-wrap:anywhere;margin:0;font-weight:600}.lumn .lumn-license-facts .lumn-tag{margin-left:0;padding:2px 10px;font-size:.78rem}.lumn .lumn-tag.is-good{background:var(--l-good-bg);color:var(--l-good)}.lumn .lumn-tag.is-warn{background:var(--l-warn-bg);color:var(--l-text);outline:1px solid var(--l-warn)}.lumn .lumn-license-form .lumn-input{letter-spacing:.04em;max-width:26rem}.lumn .lumn-locked{text-align:left;max-width:40rem}.lumn .lumn-locked .lumn-inline-actions{margin-top:12px}.lumn #lumn-license-card{margin-bottom:16px}.lumn .lumn-license-nag{align-items:center}.lumn .lumn-license-nag p{flex:1;margin:0}.lumn .lumn-license-facts dd.lumn-mono{white-space:nowrap;overflow-wrap:normal}.lumn .lumn-migrate-list{gap:1rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.lumn .lumn-migrate-list>li{border:1px solid var(--l-border);background:var(--l-surface-2);border-radius:10px;padding:.9rem 1rem}.lumn .lumn-migrate-list p{margin:0 0 .35rem}.lumn .lumn-migrate-list .lumn-inline-actions{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;display:flex}.lumn .lumn-views{position:relative}.lumn .lumn-views>summary{cursor:pointer;list-style:none}.lumn .lumn-views>summary::-webkit-details-marker{display:none}.lumn .lumn-views-pop{z-index:30;background:var(--l-surface);width:min(22rem,90vw);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:10px;padding:.9rem;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 12px 32px #0b1f3a2e}.lumn .lumn-views-list{gap:.5rem;margin:0 0 .75rem;padding:0;list-style:none;display:grid}.lumn .lumn-views-list>li{border-bottom:1px solid var(--l-border);justify-content:space-between;align-items:flex-start;gap:.5rem;padding-bottom:.5rem;display:flex}.lumn .lumn-views-list form:first-child{gap:.1rem;display:grid}.lumn .lumn-link-btn{color:var(--l-text);font:inherit;text-align:left;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.lumn .lumn-link-btn:focus-visible{outline:2px solid var(--l-navy);outline-offset:2px;border-radius:3px}.lumn .lumn-views-save{gap:.4rem;display:grid}.lumn .lumn-ai-total{flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin:0 0 .75rem;display:flex}.lumn .lumn-ai-total+.lumn-table,.lumn .lumn-table+.lumn-table{margin-top:.75rem}.lumn .lumn-table caption.lumn-strong{text-align:left;caption-side:top;padding:.5rem 0 .35rem}.lumn .lumn-views-pop .lumn-callout{margin:0 0 .75rem}.lumn .lumn-views-pop form{margin:0} 2 @layer theme;@font-face{font-family:LUMN Onest;src:url(../fonts/onest-latin-wght-normal.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}.lumn{--l-font:"LUMN Onest", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--l-navy:#0b1f3a;--l-navy-2:#16325a;--l-slate:#8a94a6;--l-grey:#c5ccd6;--l-bg:#e9edf3;--l-surface:#fff;--l-surface-2:#f5f7fa;--l-border:#e3e7ed;--l-border-strong:#6b7588;--l-text:#0b1f3a;--l-text-2:#2a3a52;--l-muted:#5a6478;--l-link:#0a5db0;--l-focus:#0b6bcb;--l-accent:#0b6bcb;--l-good:#067647;--l-good-bg:#e6f4ec;--l-bad:#b42318;--l-bad-bg:#fdecea;--l-warn:#b54708;--l-warn-bg:#fdf2e6;--l-chip-bg:#ebeff5;--l-chip-fg:#0b1f3a;--l-bar:#0b6bcb;--l-bar-2:#8a94a6;--l-grid:#ebeef3;--l-area:#0b6bcb1a;--l-track:#e6eaf0;--l-tip-bg:#0b1f3a;--l-tip-fg:#fff;--l-seg-on:#0b1f3a;--l-seg-on-fg:#fff;--l-c0:#0b1f3a;--l-c1:#2b5bd7;--l-c2:#0f7b6c;--l-c3:#b54708;--l-c4:#8a94a6;--l-c5:#6941c6;--l-tile:#0b1f3a;--l-tile-2:#16325a;--l-tile-border:#24406a;--l-tile-muted:#c9d3e3;--l-radius:28px;--l-radius-sm:18px;--l-shadow:0 30px 60px -30px #0b1f3a2e, 0 1px 0 #fffc inset;--l-lift:0 24px 48px -16px #0b1f3a47;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%235A6478' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:light}.lumn[data-theme=dark]{--l-bg:#08111f;--l-surface:#0f1b2e;--l-surface-2:#15243b;--l-border:#21324b;--l-border-strong:#6a7a94;--l-text:#e9eef6;--l-text-2:#cad3e1;--l-muted:#a3aec0;--l-link:#8ec8ff;--l-focus:#7cc0ff;--l-accent:#7cc0ff;--l-good:#5ad7a6;--l-good-bg:#5ad7a61f;--l-bad:#ff948a;--l-bad-bg:#ff948a1f;--l-warn:#f5b062;--l-warn-bg:#f5b0621f;--l-chip-bg:#1b2d49;--l-chip-fg:#dce6f6;--l-bar:#7cc0ff;--l-bar-2:#5d7090;--l-grid:#1a2a42;--l-area:#7cc0ff1f;--l-track:#1f3049;--l-tip-bg:#dce6f6;--l-tip-fg:#0b1f3a;--l-seg-on:#dce6f6;--l-seg-on-fg:#0b1f3a;--l-c0:#dce6f6;--l-c1:#6e98ff;--l-c2:#3cc6a0;--l-c3:#f5b062;--l-c4:#7f8fa9;--l-c5:#b69cff;--l-tile:#13294a;--l-tile-2:#1b3560;--l-tile-border:#2a4878;--l-shadow:0 1px 0 #ffffff08 inset, 0 12px 28px -18px #0009;--l-lift:0 28px 56px -18px #000000b3;--l-select-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%23A9B3C4' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E");color-scheme:dark}@media (max-width:782px){html:has(body.lumn-screen){scroll-padding-top:72px}}.lumn-wrap{margin:10px 20px 0 2px}.lumn,.lumn *,.lumn :before,.lumn :after{box-sizing:border-box}.lumn{background:var(--l-bg);color:var(--l-text);font-family:var(--l-font);-webkit-font-smoothing:antialiased;border-radius:24px;min-height:calc(100vh - 120px);padding:14px 20px 28px;font-size:15px;line-height:1.5}.lumn h1,.lumn h2,.lumn h3,.lumn p,.lumn ul,.lumn ol,.lumn dl,.lumn dd,.lumn figure{margin:0;padding:0}.lumn h1,.lumn h2,.lumn h3{color:var(--l-text);font-family:var(--l-font)}.lumn a,.lumn a:hover{color:var(--l-link)}.lumn button,.lumn input,.lumn select,.lumn textarea{font:inherit;color:inherit}.lumn button{cursor:pointer}.lumn svg{overflow:visible}.lumn table{border-collapse:collapse}.lumn :focus{box-shadow:none;outline:none}.lumn :focus-visible{outline:3px solid var(--l-focus);outline-offset:2px;box-shadow:none}@media (forced-colors:active){.lumn :focus-visible{outline-color:canvastext}}.lumn .lumn-sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.lumn .lumn-ico{flex:none;width:20px;height:20px}.lumn .lumn-ico-sm{flex:none;width:16px;height:16px}.lumn .lumn-ico-xs{flex:none;width:12px;height:12px}.lumn .lumn-muted{color:var(--l-muted)}.lumn .lumn-strong{font-weight:650}.lumn .lumn-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86rem}.lumn .lumn-topbar{background:var(--l-surface);border-radius:999px;align-items:center;gap:16px;padding:8px 10px 8px 14px;display:flex}@supports (color:color-mix(in lab, red, red)){.lumn .lumn-topbar{background:color-mix(in oklab, var(--l-surface) 86%, transparent)}}.lumn .lumn-topbar{border:1px solid var(--l-border);z-index:30;-webkit-backdrop-filter:blur(14px);position:sticky;top:46px;box-shadow:0 12px 30px -18px #0b1f3a59}@media (max-width:782px){.lumn .lumn-topbar{position:relative;top:0}}.lumn .lumn-brand{color:var(--l-text);border-radius:12px;align-items:center;gap:10px;min-height:40px;text-decoration:none;display:flex}.lumn .lumn-mark{background:var(--l-navy);border-radius:6px;flex:none;width:34px;height:34px;display:block;overflow:hidden}.lumn[data-theme=dark] .lumn-mark{background:#1b3560}.lumn .lumn-mark svg{width:34px;height:34px;display:block}.lumn .lumn-word{letter-spacing:.14em;font-size:1.02rem;font-weight:750}.lumn .lumn-nav{flex:1;min-width:0}.lumn .lumn-nav ul{flex-wrap:wrap;justify-content:end;gap:4px;margin:0;list-style:none;display:flex}.lumn .lumn-nav li{margin:0}.lumn .lumn-nav-link{min-height:40px;color:var(--l-text-2);border-radius:999px;align-items:center;gap:8px;padding:0 14px;font-size:.9rem;font-weight:540;text-decoration:none;display:inline-flex}.lumn .lumn-nav-link:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-link[aria-current=page]{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-link[aria-current=page]{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav-group{position:relative}.lumn .lumn-nav-btn{cursor:pointer;background:0 0;border:0}.lumn .lumn-nav .lumn-nav-btn .lumn-nav-chev{width:16px;height:16px;transition:transform .15s;display:inline-block}.lumn .lumn-nav-btn[aria-expanded=true] .lumn-nav-chev{transform:rotate(180deg)}.lumn .lumn-nav-btn[aria-expanded=true]{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-nav-btn.is-current{background:var(--l-navy);color:#fff;font-weight:650}.lumn[data-theme=dark] .lumn-nav-btn.is-current{color:#0b1f3a;background:#dce6f6}.lumn .lumn-nav .lumn-nav-menu{z-index:60;border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:14rem;max-width:calc(100vw - 32px);box-shadow:var(--l-lift);border-radius:18px;justify-content:stretch;gap:2px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px);left:0}.lumn .lumn-nav .lumn-nav-menu[hidden]{display:none}.lumn .lumn-nav .lumn-nav-menu.is-right{left:auto;right:0}.lumn .lumn-nav-menu .lumn-nav-link{border-radius:12px;width:100%;display:flex}.lumn .lumn-nav-menu .lumn-nav-link .lumn-ico{display:inline-block}@media (prefers-reduced-motion:reduce){.lumn .lumn-nav-btn .lumn-nav-chev{transition:none}}@media (forced-colors:active){.lumn .lumn-nav-btn.is-current,.lumn .lumn-nav-link[aria-current=page]{border:2px solid highlight}}.lumn .lumn-icon-btn{border:1px solid var(--l-border-strong);background:var(--l-surface);width:42px;height:42px;color:var(--l-text);border-radius:999px;flex:none;place-items:center;display:grid}.lumn .lumn-icon-btn:hover{background:var(--l-surface-2)}.lumn .lumn-theme-btn .lumn-sun{display:none}.lumn[data-theme=dark] .lumn-theme-btn .lumn-sun{display:block}.lumn[data-theme=dark] .lumn-theme-btn .lumn-moon{display:none}.lumn .lumn-main{padding-top:24px}.lumn .lumn-page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin:0 4px 20px;display:flex}.lumn .lumn-page-head h1{letter-spacing:-.03em;padding:0;font-size:2rem;font-weight:650;line-height:1.15}.lumn .lumn-lede{color:var(--l-muted);margin-top:4px}.lumn .lumn-head-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline{align-items:center;gap:8px;display:flex}.lumn .lumn-field-inline label{color:var(--l-muted);font-size:.85rem;font-weight:550}.lumn .lumn-btn,.lumn .lumn-btn-ghost{border-radius:999px;align-items:center;gap:8px;min-height:40px;padding:0 16px;font-size:.9rem;font-weight:600;line-height:1.2;text-decoration:none;display:inline-flex}.lumn .lumn-btn{background:var(--l-navy);color:#fff;border:1px solid #0000}.lumn .lumn-btn:hover{background:var(--l-navy-2);color:#fff}.lumn[data-theme=dark] .lumn-btn{color:#0b1f3a;background:#dce6f6}.lumn[data-theme=dark] .lumn-btn:hover{background:#c6d5ee}.lumn .lumn-btn-danger{background:var(--l-bad)}.lumn .lumn-btn-danger:hover{background:#912018}.lumn[data-theme=dark] .lumn-btn-danger{color:#08111f;background:#ff948a}.lumn .lumn-btn-ghost{background:var(--l-surface);color:var(--l-text);border:1px solid var(--l-border-strong)}.lumn .lumn-btn-ghost:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn form.htmx-request .lumn-btn,.lumn form.htmx-request .lumn-btn-ghost{opacity:.7;pointer-events:none;cursor:progress}.lumn .lumn-btn-sm{min-height:36px;padding:0 12px;font-size:.82rem}.lumn .lumn-btn:active,.lumn .lumn-btn-ghost:active,.lumn .lumn-tool:active,.lumn .lumn-icon-btn:active{transform:translateY(1px)}.lumn .lumn-btn[disabled],.lumn .lumn-btn-ghost[disabled]{cursor:not-allowed;background:var(--l-surface-2);color:var(--l-muted);border:1px dashed var(--l-border-strong)}.lumn .lumn-select,.lumn .lumn-input{border:1px solid var(--l-border-strong);background-color:var(--l-surface);min-height:40px;color:var(--l-text);box-shadow:none;border-radius:12px;max-width:100%;padding:8px 12px;line-height:1.4}.lumn textarea.lumn-input{resize:vertical;width:100%;min-height:88px}.lumn input.lumn-input[type=text],.lumn input.lumn-input[type=url]{width:100%}.lumn .lumn-select{appearance:none;background-image:var(--l-select-caret);background-position:right .9rem center;background-repeat:no-repeat;background-size:.7rem;border-radius:999px;padding:0 2.5rem 0 14px}.lumn .lumn-select::-ms-expand{display:none}@media (forced-colors:active){.lumn .lumn-select{appearance:auto;padding-right:revert;background-image:none}}.lumn .lumn-select:focus,.lumn .lumn-input:focus{border-color:var(--l-focus);box-shadow:none;outline:none}.lumn .lumn-select:focus-visible,.lumn .lumn-input:focus-visible{outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-input[aria-invalid=true]{border-color:var(--l-bad);border-width:2px}.lumn .lumn-input[readonly]{background:var(--l-surface-2)}.lumn .lumn-board{grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-flow:row;gap:16px;display:grid}.lumn .lumn-board.htmx-request{opacity:.6;transition:opacity .2s}.lumn .lumn-panel{grid-column:span var(--span,6);background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);flex-direction:column;min-width:0;padding:24px;display:flex;position:relative}.lumn .lumn-panel[data-span="12"]{--span:12}.lumn .lumn-panel[data-span="8"]{--span:8}.lumn .lumn-panel[data-span="7"]{--span:7}.lumn .lumn-panel[data-span="6"]{--span:6}.lumn .lumn-panel[data-span="5"]{--span:5}.lumn .lumn-panel[data-span="4"]{--span:4}.lumn .lumn-panel-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 12px;margin-bottom:14px;display:flex}.lumn .lumn-panel-titles{flex:180px;min-width:0}.lumn .lumn-panel-head h2{letter-spacing:-.01em;font-size:1rem;font-weight:640;line-height:1.3}.lumn .lumn-panel-sub{color:var(--l-muted);margin-top:2px;font-size:.8rem}.lumn .lumn-panel-tools{flex:none;align-items:center;gap:4px;display:flex}.lumn .lumn-tool{width:32px;height:32px;color:var(--l-muted);background:0 0;border:1px solid #0000;border-radius:10px;place-items:center;padding:0;display:grid}.lumn .lumn-tool:hover{background:var(--l-surface-2);color:var(--l-text)}.lumn .lumn-drag-handle{cursor:grab;touch-action:none}.lumn .lumn-panel-body{flex:1;min-width:0}.lumn .lumn-panel.is-dragging{z-index:20;box-shadow:var(--l-lift);cursor:grabbing;transition:none}.lumn .lumn-panel.is-grabbed{outline:3px dashed var(--l-focus);outline-offset:3px}.lumn .lumn-board.is-dragging{-webkit-user-select:none;user-select:none}.lumn .lumn-empty{color:var(--l-muted);padding:8px 0;font-size:.88rem}.lumn .lumn-move-menu{border:1px solid var(--l-border-strong);background:var(--l-surface);min-width:210px;color:var(--l-text);box-shadow:var(--l-lift);border-radius:14px;margin:0;padding:6px;position:fixed;inset:auto}.lumn .lumn-move-menu button{text-align:left;width:100%;min-height:36px;color:var(--l-text);background:0 0;border:0;border-radius:9px;align-items:center;padding:0 10px;font-size:.88rem;display:flex}.lumn .lumn-move-menu button:hover,.lumn .lumn-move-menu button:focus-visible{background:var(--l-surface-2)}.lumn .lumn-move-menu button:disabled{color:var(--l-muted);cursor:not-allowed;text-decoration:line-through}.lumn .lumn-menu-label{text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);padding:8px 10px 4px;font-size:.72rem;font-weight:600}.lumn .lumn-kpi-grid{grid-template-rows:auto auto;grid-template-columns:1.5fr 1fr 1fr;gap:14px;display:grid}.lumn .lumn-kpi{background:var(--l-surface-2);border-radius:20px;min-width:0;padding:16px}.lumn .lumn-kpi.is-hero{background:var(--l-tile);color:#fff;flex-direction:column;grid-row:span 2;justify-content:space-between;display:flex}.lumn .lumn-kpi.is-hero .lumn-kpi-label,.lumn .lumn-kpi.is-hero .lumn-kpi-note{color:var(--l-tile-muted)}.lumn .lumn-kpi.is-hero .lumn-kpi-icon{color:#fff;background:#ffffff1f}.lumn .lumn-kpi.is-hero .lumn-kpi-value{color:#fff;font-size:3.2rem}.lumn .lumn-kpi.is-hero .lumn-delta.is-good{color:#7fe6bc;background:#5ad7a629}.lumn .lumn-kpi.is-hero .lumn-delta.is-bad{color:#ffb3ab;background:#ff948a29}.lumn .lumn-kpi.is-hero .lumn-delta.is-flat{color:#dce6f6;background:#ffffff1a}.lumn .lumn-kpi-top{align-items:center;gap:10px;display:flex}.lumn .lumn-kpi-icon{background:var(--l-chip-bg);width:36px;height:36px;color:var(--l-chip-fg);border-radius:10px;flex:none;place-items:center;display:grid}.lumn .lumn-kpi-label{color:var(--l-text-2);overflow-wrap:anywhere;min-width:0;font-size:.88rem;font-weight:560}.lumn .lumn-kpi-value{letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--l-text);margin:12px 0 6px;font-size:1.9rem;font-weight:620;line-height:1.05}.lumn .lumn-kpi-meta{flex-wrap:wrap;align-items:center;gap:6px;font-size:.78rem;display:flex}.lumn .lumn-kpi-note{color:var(--l-muted)}.lumn .lumn-delta{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:3px;padding:2px 7px;font-weight:650;display:inline-flex}.lumn .lumn-delta.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-delta.is-bad{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-delta.is-flat{color:var(--l-muted);background:var(--l-chip-bg)}.lumn .lumn-live-dot{background:0 0}.lumn .lumn-live-dot:after{content:"";background:var(--l-good);border-radius:50%;width:10px;height:10px;animation:2.4s ease-out infinite lumn-breathe}@keyframes lumn-breathe{0%{box-shadow:0 0 0 0 color-mix(in oklab, var(--l-good) 55%, transparent)}70%{box-shadow:0 0 0 10px #0000}to{box-shadow:0 0 #0000}}.lumn .lumn-chart-slot{width:100%;position:relative;overflow:hidden}.lumn .lumn-tip{z-index:2;pointer-events:none;background:var(--l-text);min-width:120px;color:var(--l-surface);white-space:nowrap;border-radius:10px;flex-direction:column;gap:2px;padding:8px 10px;font-size:12.5px;line-height:1.35;display:flex;position:absolute;box-shadow:0 8px 24px #0b1f3a38}.lumn .lumn-tip strong{opacity:.85;font-weight:650}.lumn .lumn-tip .lumn-tip-main{font-variant-numeric:tabular-nums;font-size:14px;font-weight:700}.lumn .lumn-hit{cursor:crosshair}.lumn .lumn-chart-slot.is-holding .lumn-day-chart{max-width:none}.lumn .lumn-cross{stroke:var(--l-muted);stroke-width:1px;stroke-dasharray:3 3;pointer-events:none}.lumn .lumn-cross.is-on{stroke-opacity:1}.lumn .lumn-bar.is-hover{fill:var(--l-bar)}.lumn .lumn-pt.is-hover{fill:var(--l-bar);r:5px}.lumn .lumn-day-chart:focus-visible{outline:2px solid var(--l-focus,#0b6bcb);outline-offset:4px;border-radius:6px}.lumn .lumn-day-chart{width:auto;max-width:100%;height:auto;display:block;overflow:visible}.lumn .lumn-grid-line{stroke:var(--l-grid);stroke-width:1px}.lumn .lumn-axis{fill:var(--l-muted);font-size:11.5px;font-family:var(--l-font)}.lumn .lumn-bar{fill:var(--l-bar-2)}.lumn .lumn-bar.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart .lumn-bar{transform-box:fill-box;transform-origin:bottom;animation:.7s cubic-bezier(.16,1,.3,1) both lumn-grow}@keyframes lumn-grow{0%{transform:scaleY(.04)}to{transform:scaleY(1)}}.lumn .lumn-chart-slot.is-still .lumn-bar{animation:none}.lumn .lumn-line{fill:none;stroke:var(--l-bar);stroke-width:2.5px;stroke-linejoin:round}.lumn .lumn-area{fill:var(--l-area)}.lumn .lumn-pt{fill:var(--l-surface);stroke:var(--l-bar);stroke-width:2px}.lumn .lumn-pt.is-peak{fill:var(--l-bar)}.lumn .lumn-day-chart[data-kind=bar] .lumn-as-line,.lumn .lumn-day-chart[data-kind=line] .lumn-as-bars{display:none}.lumn .lumn-avg-line{stroke:var(--l-muted);stroke-dasharray:4 5;stroke-width:1.2px}.lumn .lumn-peak-label rect{fill:var(--l-tip-bg)}.lumn .lumn-peak-label text{fill:var(--l-tip-fg);font-size:12px;font-weight:700;font-family:var(--l-font)}.lumn .lumn-cmp-halo{fill:none;stroke:var(--l-surface);stroke-width:5px;stroke-linejoin:round}.lumn .lumn-cmp-line{fill:none;stroke:var(--l-c5);stroke-width:2px;stroke-dasharray:7 5;stroke-linejoin:round}.lumn .lumn-note-pin line{stroke:var(--l-warn);stroke-width:1.5px;stroke-dasharray:2 4}.lumn .lumn-note-pin circle{fill:var(--l-warn);stroke:var(--l-surface);stroke-width:2px}.lumn .lumn-chart-key{color:var(--l-text-2);flex-wrap:wrap;gap:6px 18px;margin:10px 0 0;padding:0;font-size:.82rem;list-style:none;display:flex}.lumn .lumn-chart-key li{align-items:center;gap:8px;margin:0;display:flex}.lumn .lumn-key-solid,.lumn .lumn-key-dash{border-top:3px solid var(--l-bar);width:22px;height:0}.lumn .lumn-key-dash{border-top:2px dashed var(--l-c5)}.lumn .lumn-key-pin{background:var(--l-warn);border-radius:50%;width:10px;height:10px}.lumn .lumn-notes{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-notes-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.lumn .lumn-h3{color:var(--l-text);margin:0;font-size:.95rem;font-weight:650}.lumn .lumn-note-list{margin:10px 0 0;padding:0;list-style:none}.lumn .lumn-note-list li{border-bottom:1px solid var(--l-grid);align-items:center;gap:12px;margin:0;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-note-list li:last-child{border-bottom:0}.lumn .lumn-note-list form{margin:0 0 0 auto}.lumn .lumn-note-day{min-width:52px;color:var(--l-warn);font-variant-numeric:tabular-nums;flex:none;font-weight:600}.lumn .lumn-note-text{overflow-wrap:anywhere;min-width:0}.lumn .lumn-dialog{border:1px solid var(--l-border);background:var(--l-surface);width:min(440px,100vw - 32px);color:var(--l-text);border-radius:20px;padding:22px;box-shadow:0 24px 60px #0b1f3a47}.lumn .lumn-dialog::backdrop{background:#08111f73}.lumn .lumn-dialog .lumn-field:first-of-type{margin-top:14px}.lumn .lumn-dialog .lumn-input{width:100%}.lumn .lumn-dialog-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.lumn .lumn-chart-foot{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;margin-top:12px;display:flex}.lumn .lumn-seg{border:1px solid var(--l-border-strong);border-radius:999px;gap:2px;margin-right:4px;padding:2px;display:inline-flex}.lumn .lumn-seg-btn{min-height:28px;color:var(--l-muted);background:0 0;border:0;border-radius:999px;padding:0 12px;font-size:.8rem;font-weight:560}.lumn .lumn-seg-btn[aria-pressed=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg)}.lumn .lumn-seg-wide{flex-wrap:wrap;max-width:100%;margin:0 0 14px}.lumn .lumn-seg-wide .lumn-seg-btn{min-height:32px}.lumn .lumn-table-toggle{border:1px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px;font-size:.84rem;font-weight:600;display:inline-flex}.lumn .lumn-table-toggle:hover{background:var(--l-surface-2)}.lumn .lumn-table-toggle[aria-expanded=true]{background:var(--l-seg-on);color:var(--l-seg-on-fg);border-color:#0000}.lumn .lumn-data-table{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;width:100%;max-height:340px;margin-top:14px;position:relative;overflow:auto}.lumn .lumn-data-table[hidden]{display:none}.lumn .lumn-data-table table{border-collapse:separate;border-spacing:0;font-variant-numeric:tabular-nums;width:100%;font-size:.86rem}.lumn .lumn-data-table caption{text-align:left;color:var(--l-text-2);padding:12px 16px 4px;font-size:.82rem;font-weight:650}.lumn .lumn-data-table thead th{z-index:1;background:var(--l-surface);text-transform:uppercase;letter-spacing:.06em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:10px 16px;font-size:.72rem;font-weight:600;position:sticky;top:0}.lumn .lumn-data-table tbody th,.lumn .lumn-data-table td,.lumn .lumn-data-table tfoot th{border-bottom:1px solid var(--l-border);text-align:left;white-space:nowrap;padding:9px 16px;font-weight:500}.lumn .lumn-data-table tbody tr:nth-child(2n){background:var(--l-surface-2)}.lumn .lumn-data-table tbody tr:hover{background:var(--l-chip-bg)}.lumn .lumn-data-table tr.is-peak th,.lumn .lumn-data-table tr.is-peak td:nth-child(2){font-weight:700}.lumn .lumn-data-table tfoot th,.lumn .lumn-data-table tfoot td{background:var(--l-surface);border-top:1px solid var(--l-border-strong);border-bottom:0;font-weight:700;position:sticky;bottom:0}.lumn .lumn-num{white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right!important}.lumn .lumn-wd{width:2.6em;color:var(--l-muted);font-weight:500;display:inline-block}.lumn .lumn-bar-cell{width:30%;min-width:80px}.lumn .lumn-bar-cell .lumn-meter{margin:0}.lumn .lumn-chg{align-items:center;gap:3px;font-weight:600;display:inline-flex}.lumn .lumn-chg.is-good{color:var(--l-good)}.lumn .lumn-chg.is-bad{color:var(--l-bad)}.lumn .lumn-chg.is-flat{color:var(--l-muted)}.lumn .lumn-table{width:100%;font-size:.88rem}.lumn .lumn-table thead th{text-transform:uppercase;letter-spacing:.05em;color:var(--l-muted);text-align:left;border-bottom:1px solid var(--l-border);padding:0 0 8px;font-size:.75rem;font-weight:600}.lumn .lumn-table thead th:not(:first-child),.lumn .lumn-table td{text-align:right;font-variant-numeric:tabular-nums}.lumn .lumn-table tbody th{text-align:left;border-bottom:1px solid var(--l-border);padding:10px 12px 10px 0;font-weight:500}.lumn .lumn-table td{border-bottom:1px solid var(--l-border);white-space:nowrap;vertical-align:top;padding:10px 0 10px 12px}.lumn .lumn-table-text td{text-align:left;white-space:normal}.lumn .lumn-table-text thead th{text-align:left!important}.lumn .lumn-table-scroll{position:relative;overflow-x:auto}.lumn .lumn-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.84rem}.lumn .lumn-row-sub{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-badge{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;align-items:center;gap:4px;margin-left:8px;padding:1px 8px;font-size:.7rem;font-weight:650;display:inline-flex}.lumn .lumn-meter{background:var(--l-track);border-radius:4px;height:4px;margin-top:7px;display:block;overflow:hidden}.lumn .lumn-meter>span{background:var(--l-bar);border-radius:4px;height:100%;display:block}.lumn .lumn-meter-lg{height:8px}.lumn .lumn-bars-list{gap:14px;margin:0;list-style:none;display:grid}.lumn .lumn-bars-list li{margin:0}.lumn .lumn-dv-row{justify-content:space-between;gap:12px;font-size:.88rem;font-weight:550;display:flex}.lumn .lumn-dv-val{font-variant-numeric:tabular-nums}.lumn .lumn-mini-stats{border-top:1px solid var(--l-border);grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px;padding-top:14px;display:grid}.lumn .lumn-mini-stats dt{color:var(--l-muted);font-size:.72rem}.lumn .lumn-mini-stats dd{margin:2px 0 0;font-size:.86rem;font-weight:600}.lumn .lumn-donut-wrap{flex-wrap:wrap;align-items:center;gap:20px;display:flex}.lumn .lumn-donut-box{flex:none;width:168px;position:relative}.lumn .lumn-donut{width:168px;height:168px;display:block}.lumn .lumn-donut-track{stroke:var(--l-track)}.lumn .lumn-seg-0{stroke:var(--l-c0)}.lumn .lumn-sw-0{background:var(--l-c0)}.lumn .lumn-seg-1{stroke:var(--l-c1)}.lumn .lumn-sw-1{background:var(--l-c1)}.lumn .lumn-seg-2{stroke:var(--l-c2)}.lumn .lumn-sw-2{background:var(--l-c2)}.lumn .lumn-seg-3{stroke:var(--l-c3)}.lumn .lumn-sw-3{background:var(--l-c3)}.lumn .lumn-seg-4{stroke:var(--l-c4)}.lumn .lumn-sw-4{background:var(--l-c4)}.lumn .lumn-seg-5{stroke:var(--l-c5)}.lumn .lumn-sw-5{background:var(--l-c5)}.lumn .lumn-donut-center{background:var(--l-surface);text-align:center;border-radius:50%;place-content:center;display:grid;position:absolute;inset:22px}.lumn .lumn-dc-num{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:650}.lumn .lumn-dc-lbl{color:var(--l-muted);font-size:.72rem}.lumn .lumn-legend{flex:180px;font-size:.86rem}.lumn .lumn-legend th{text-align:left;align-items:center;gap:10px;padding:4px 8px 4px 0;font-weight:500;display:flex}.lumn .lumn-legend td{padding:4px 0 4px 10px}.lumn .lumn-sw{border-radius:4px;flex:none;width:12px;height:12px;display:inline-block}.lumn #lumn-panel-privacy{background:var(--l-tile);color:#fff;border:none}.lumn #lumn-panel-privacy h2{color:#fff}.lumn #lumn-panel-privacy .lumn-panel-sub,.lumn #lumn-panel-privacy .lumn-preset-k,.lumn #lumn-panel-privacy .lumn-pv-foot,.lumn #lumn-panel-privacy .lumn-tool{color:var(--l-tile-muted)}.lumn #lumn-panel-privacy .lumn-tool:hover{background:var(--l-tile-2);color:#fff}.lumn #lumn-panel-privacy :focus-visible{outline-color:#9ccbff}.lumn #lumn-panel-privacy .lumn-btn-ghost{color:#fff;border-color:var(--l-slate);background:0 0}.lumn #lumn-panel-privacy .lumn-btn-ghost:hover{background:var(--l-tile-2)}.lumn .lumn-preset{background:var(--l-surface-2);border:1px solid var(--l-border);border-radius:16px;align-items:center;gap:12px;padding:12px;display:flex}.lumn #lumn-panel-privacy .lumn-preset{background:var(--l-tile-2);border-color:var(--l-tile-border)}.lumn .lumn-preset-icon{color:#0b1f3a;background:#fff;border-radius:10px;flex:none;place-items:center;width:40px;height:40px;display:grid}.lumn .lumn-preset-k{font-size:.75rem}.lumn .lumn-preset-v{font-size:1.05rem;font-weight:700}.lumn .lumn-preset-mod{color:var(--l-tile-muted);font-size:.82rem;font-weight:500}.lumn .lumn-preset .lumn-btn-ghost{margin-left:auto}.lumn .lumn-pv-list{margin:12px 0 0;list-style:none;display:grid}.lumn .lumn-pv-list li{border-bottom:1px solid var(--l-tile-border);grid-template-columns:16px 1fr auto;align-items:center;gap:10px;margin:0;padding:8px 0;font-size:.86rem;display:grid}.lumn .lumn-pv-list .lumn-ico-sm{color:#7fe6bc}.lumn .lumn-pv-v{text-align:right;font-weight:600}.lumn .lumn-pv-foot{margin-top:10px;font-size:.8rem}.lumn .lumn-rt-count{color:var(--l-muted);margin-bottom:10px;font-size:.86rem}.lumn .lumn-rt-feed{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-rt-feed li{background:var(--l-surface-2);border-radius:16px;grid-template-rows:auto auto;grid-template-columns:1fr auto;column-gap:10px;margin:0;padding:12px 14px;font-size:.85rem;display:grid}.lumn .lumn-rt-path{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem}.lumn .lumn-rt-src{color:var(--l-muted);grid-row:2;font-size:.78rem}.lumn .lumn-rt-time{color:var(--l-muted);font-variant-numeric:tabular-nums;grid-row:1/3;align-self:center;font-size:.78rem}.lumn .lumn-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:16px;margin-top:16px;display:grid}.lumn .lumn-card{background:var(--l-surface);border:1px solid var(--l-border);border-radius:var(--l-radius);box-shadow:var(--l-shadow);min-width:0;padding:24px}.lumn .lumn-card>h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-card.is-danger{border-color:var(--l-bad);border-width:2px}.lumn .lumn-span-all{grid-column:1/-1}.lumn #lumn-settings>.lumn-card{margin-top:0}.lumn .lumn-help{color:var(--l-muted);margin:2px 0 8px;font-size:.82rem}.lumn .lumn-legal{margin-top:12px}.lumn .lumn-field{margin:16px 0}.lumn .lumn-field-row{grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:0 16px;display:grid}.lumn .lumn-field-row>.lumn-field{margin:16px 0 0}.lumn .lumn-field>label,.lumn .lumn-label{margin-bottom:4px;font-size:.9rem;font-weight:600;display:block}.lumn .lumn-fieldset{border:0;min-width:0;margin:16px 0;padding:0}.lumn .lumn-fieldset legend{margin-bottom:6px;padding:0;font-size:.9rem;font-weight:600}.lumn .lumn-radio{align-items:flex-start;gap:10px;min-height:28px;padding:6px 0;font-size:.88rem;display:flex}.lumn .lumn-radio input[type=radio],.lumn .lumn-radio input[type=checkbox]{flex:none;width:18px;height:18px}.lumn .lumn-radio input{margin-top:3px}.lumn .lumn-check{align-items:flex-start;gap:12px;margin:14px 0;display:flex}.lumn .lumn-check input[type=checkbox]{flex:none;width:18px;height:18px;margin-top:3px}.lumn .lumn-check label{font-size:.9rem;font-weight:600}.lumn .lumn-check .lumn-help{margin:2px 0 0}.lumn input[type=checkbox],.lumn input[type=radio]{accent-color:var(--l-navy)}.lumn[data-theme=dark] input[type=checkbox],.lumn[data-theme=dark] input[type=radio]{accent-color:#7cc0ff}.lumn .lumn-input-suffix{align-items:center;gap:8px;display:flex}.lumn .lumn-input-suffix .lumn-input{width:120px}.lumn .lumn-preset-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:8px 0 14px;display:grid}.lumn .lumn-radio-card{border:1px solid var(--l-border-strong);background:var(--l-surface);cursor:pointer;border-radius:18px;gap:6px;padding:14px;display:grid;position:relative}.lumn .lumn-radio-card input{position:absolute;top:16px;right:14px}.lumn .lumn-radio-card:has(input:checked){border-width:2px;border-color:var(--l-navy);background:var(--l-surface-2)}.lumn[data-theme=dark] .lumn-radio-card:has(input:checked){border-color:#7cc0ff}.lumn .lumn-radio-card:has(input:focus-visible){outline:3px solid var(--l-focus);outline-offset:2px}.lumn .lumn-radio-title{padding-right:24px;font-weight:700}.lumn .lumn-radio-text{color:var(--l-muted);font-size:.8rem}.lumn .lumn-tag{background:var(--l-chip-bg);color:var(--l-chip-fg);vertical-align:2px;border-radius:999px;margin-left:4px;padding:1px 8px;font-size:.68rem;font-weight:650}.lumn .lumn-form-actions{grid-column:1/-1;justify-content:flex-end;display:flex}.lumn .lumn-inline-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.lumn .lumn-rules-count{color:var(--l-text-2);margin-top:6px;font-size:.82rem}.lumn .lumn-rules-count ul{margin:4px 0 0 18px;list-style:outside}.lumn .lumn-error{color:var(--l-bad);align-items:center;gap:6px;margin-top:6px;font-size:.82rem;font-weight:600;display:flex}.lumn .lumn-error-summary{background:var(--l-bad-bg);border:2px solid var(--l-bad);border-radius:18px;margin-bottom:16px;padding:16px 18px}.lumn .lumn-error-summary h2{margin-bottom:6px;font-size:1rem}.lumn .lumn-error-summary ul{margin-left:18px;list-style:outside}.lumn .lumn-callout{background:var(--l-surface);border:1px solid var(--l-border-strong);border-radius:16px;align-items:flex-start;gap:10px;margin-bottom:16px;padding:12px 16px;font-size:.9rem;display:flex}.lumn .lumn-callout .lumn-ico-sm{margin-top:3px}.lumn .lumn-callout.is-good{border-color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-callout.is-good .lumn-ico-sm{color:var(--l-good)}.lumn .lumn-callout.is-warn{border-color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-callout.is-warn .lumn-ico-sm{color:var(--l-warn)}.lumn .lumn-dl{gap:0;display:grid}.lumn .lumn-dl>div{border-bottom:1px solid var(--l-border);justify-content:space-between;gap:12px;padding:9px 0;font-size:.88rem;display:flex}.lumn .lumn-dl dt{color:var(--l-muted)}.lumn .lumn-dl dd{text-align:right;font-weight:600}.lumn .lumn-check-list{gap:10px;margin:0;list-style:none;display:grid}.lumn .lumn-check-list li{align-items:flex-start;gap:10px;margin:0;font-size:.88rem;display:flex}.lumn .lumn-check-list .lumn-ico-sm{color:var(--l-bad);margin-top:3px}.lumn .lumn-toast{z-index:100000;background:var(--l-tip-bg);max-width:360px;color:var(--l-tip-fg);box-shadow:var(--l-lift);border-radius:14px;padding:12px 16px;font-size:.88rem;position:fixed;bottom:24px;right:24px}.lumn .lumn-toast[hidden]{display:none}.lumn .lumn-a11y-k-error{--k:var(--l-bad)}.lumn .lumn-a11y-k-alert{--k:var(--l-warn)}.lumn .lumn-a11y-k-pass{--k:var(--l-good)}.lumn .lumn-a11y-k-review{--k:var(--l-link)}.lumn .lumn-a11y-reason{border-left:4px solid var(--k);background:var(--l-surface);border-radius:0 10px 10px 0;padding:8px 12px}.lumn .lumn-a11y-shape{width:18px;height:18px;color:var(--k,currentColor);flex:none}.lumn .lumn-a11y-status{min-height:1.5em;margin:12px 0 4px;font-weight:600}.lumn .lumn-a11y-status.is-error{color:var(--l-bad)}.lumn .lumn-a11y-results>h2{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.lumn .lumn-a11y-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:6px 0 4px;display:flex}.lumn .lumn-a11y-toolbar .lumn-inline-actions{margin-top:0}.lumn .lumn-a11y-filters{flex-wrap:wrap;gap:8px;display:flex}.lumn .lumn-a11y-filter{border:2px solid var(--l-border-strong);background:var(--l-surface);min-height:40px;color:var(--l-text);border-radius:999px;align-items:center;gap:6px;padding:0 14px 0 10px;font-size:.88rem;font-weight:600;display:inline-flex}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:var(--k);background:var(--l-surface-2)}.lumn .lumn-a11y-filter[aria-pressed=false],.lumn .lumn-a11y-filter[aria-pressed=false] .lumn-a11y-shape{color:var(--l-muted)}.lumn .lumn-a11y-filter[aria-pressed=false]>span:first-of-type{text-decoration:line-through}.lumn .lumn-a11y-count{font-variant-numeric:tabular-nums;background:var(--l-chip-bg);color:var(--l-chip-fg);border-radius:999px;padding:1px 8px;font-size:.78rem}.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1.55fr) minmax(300px,1fr);align-items:start;gap:20px;margin-top:12px;display:grid}.lumn .lumn-a11y-layout.is-list-only{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-frame{border:1px solid var(--l-border-strong);border-radius:var(--l-radius-sm);background:#fff;width:100%;height:clamp(420px,72vh,920px);display:block}.lumn .lumn-a11y-key{flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:8px;display:flex}.lumn .lumn-a11y-key>span{align-items:center;gap:4px;display:inline-flex}.lumn .lumn-a11y-side{min-width:0}.lumn .lumn-a11y-list{max-height:clamp(260px,60vh,760px);margin-top:6px;padding:2px 4px 2px 2px;overflow-y:auto}.lumn .lumn-a11y-group{align-items:center;gap:6px;margin:14px 0 6px;font-size:.9rem;font-weight:650;display:flex}.lumn .lumn-a11y-group svg{width:18px;height:18px;color:var(--k)}.lumn .lumn-a11y-group:first-child{margin-top:0}.lumn .lumn-a11y-items{gap:6px;margin:0;list-style:none;display:grid}.lumn .lumn-a11y-items li{margin:0}.lumn .lumn-a11y-item{text-align:left;border:1px solid var(--l-border);border-left:4px solid var(--k);background:var(--l-surface);width:100%;color:var(--l-text);border-radius:14px;align-items:flex-start;gap:10px;min-height:44px;padding:9px 12px;font-size:.88rem;line-height:1.4;display:flex}.lumn .lumn-a11y-item:hover{background:var(--l-surface-2)}.lumn .lumn-a11y-item[aria-current=true]{background:var(--l-surface-2);border-color:var(--k);box-shadow:inset 0 0 0 1px var(--k)}.lumn .lumn-a11y-num{background:var(--k,var(--l-navy));min-width:24px;height:24px;color:var(--l-surface);border-radius:12px;flex:none;place-items:center;padding:0 6px;font-size:.75rem;font-weight:700;display:inline-grid}.lumn .lumn-a11y-n{color:var(--l-muted);margin-top:2px;font-size:.78rem;display:block}.lumn .lumn-a11y-detail{border-radius:var(--l-radius-sm);border:2px solid var(--k,var(--l-border-strong));background:var(--l-surface-2);margin-top:16px;padding:18px}.lumn .lumn-a11y-detail h3{align-items:flex-start;gap:8px;margin:4px 0 8px;font-size:1.05rem;line-height:1.35;display:flex}.lumn .lumn-a11y-detail h4{margin:14px 0 4px;font-size:.9rem}.lumn .lumn-a11y-detail h5{color:var(--l-text-2);margin:12px 0 4px;font-size:.82rem}.lumn .lumn-a11y-detail p{margin:6px 0;font-size:.9rem}.lumn .lumn-a11y-detail ul{margin:0 0 0 18px;font-size:.88rem;list-style:outside}.lumn .lumn-a11y-badge{color:var(--k);align-items:center;gap:6px;font-size:.8rem;font-weight:700;display:inline-flex}.lumn .lumn-a11y-badge svg{width:18px;height:18px}.lumn .lumn-a11y-cols{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:0 16px;display:grid}.lumn .lumn-a11y-code{border:1px solid var(--l-border);background:var(--l-surface);white-space:pre-wrap;word-break:break-word;border-radius:12px;max-height:14rem;margin:4px 0 8px;padding:10px 12px;font:.8rem/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.lumn .lumn-a11y-fix{border-top:1px solid var(--l-border-strong);margin-top:16px;padding-top:12px}.lumn .lumn-a11y-fix .lumn-field{margin:10px 0}.lumn .lumn-a11y-fix .lumn-input{width:100%}.lumn .lumn-a11y-fix .lumn-btn-sm{margin-top:8px}.lumn .lumn-a11y-color{border:1px solid var(--l-border-strong);background:var(--l-surface);border-radius:10px;width:64px;height:40px;padding:2px}.lumn .lumn-a11y-export{border-top:1px solid var(--l-border);flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;padding-top:14px;display:flex}.lumn .lumn-a11y-export[hidden]{display:none}.lumn .lumn-a11y-export .lumn-btn-ghost{align-items:center;gap:6px;display:inline-flex}.lumn .lumn-a11y-row-actions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.lumn .lumn-a11y-row-actions form{display:contents}.lumn .lumn-a11y-row-actions .lumn-btn-ghost{align-items:center;text-decoration:none;display:inline-flex}.lumn .lumn-a11y-tile-stats{border-top:0;margin-top:0;padding-top:0}.lumn .lumn-a11y-tile-stats dd{font-variant-numeric:tabular-nums;font-size:1.4rem;font-weight:700}@media (max-width:1100px){.lumn .lumn-a11y-layout{grid-template-columns:minmax(0,1fr)}.lumn .lumn-a11y-list{max-height:none}}@media (forced-colors:active){.lumn .lumn-a11y-shape,.lumn .lumn-a11y-group svg,.lumn .lumn-a11y-badge svg{forced-color-adjust:none;color:canvastext}.lumn .lumn-a11y-filter[aria-pressed=true]{border-color:highlight}.lumn .lumn-a11y-item,.lumn .lumn-a11y-num{border:1px solid canvastext}}.lumn .lumn-delete-box{border-top:1px solid var(--l-border);margin-top:16px;padding-top:14px}.lumn .lumn-delete-box .lumn-inline-actions form{display:inline}.lumn .lumn-inline-form{margin-left:6px;display:inline-block}.lumn .lumn-back{margin:14px 0 0;font-weight:600}.lumn .lumn-scan-runs th[scope=row] a{font-weight:600}.lumn .lumn-scan-confirm .lumn-inline-actions form{display:inline}@media (max-width:1280px){.lumn .lumn-panel[data-span="4"],.lumn .lumn-panel[data-span="5"]{--span:6}.lumn .lumn-panel[data-span="7"],.lumn .lumn-panel[data-span="8"]{--span:12}.lumn .lumn-preset-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:960px){.lumn .lumn-board{grid-template-columns:minmax(0,1fr)}.lumn .lumn-panel{grid-column:1/-1!important}.lumn .lumn-settings-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi-grid{grid-template-columns:1fr 1fr}.lumn .lumn-kpi.is-hero{grid-area:auto/1/auto/-1}.lumn .lumn-nav-link .lumn-ico{display:none}}@media (max-width:600px){.lumn-wrap{margin:10px 10px 0 0}.lumn{border-radius:18px;padding:10px 10px 20px}.lumn .lumn-topbar{border-radius:22px;flex-wrap:wrap}.lumn .lumn-nav{flex-basis:100%;order:3}.lumn .lumn-theme-btn{margin-left:auto}.lumn .lumn-panel,.lumn .lumn-card{border-radius:22px;padding:18px}.lumn .lumn-preset-grid{grid-template-columns:minmax(0,1fr)}.lumn .lumn-kpi.is-hero .lumn-kpi-value{font-size:2.4rem}.lumn .lumn-data-table .lumn-bar-cell{display:none}.lumn .lumn-page-head h1{font-size:1.6rem}}@media (prefers-reduced-motion:reduce){.lumn *,.lumn :before,.lumn :after{transition:none!important;animation:none!important}::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}.lumn #lumn-tags-form{gap:20px;display:grid}.lumn .lumn-auto-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0 24px;display:grid}.lumn .lumn-card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.lumn .lumn-card-head h2{margin-bottom:10px;font-size:1.05rem;font-weight:650}.lumn .lumn-check-bar{background:var(--l-surface-2);border-radius:14px;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:14px 0 6px;padding:14px 16px;display:flex}.lumn .lumn-check-bar .lumn-input{width:220px;max-width:100%}.lumn .lumn-check-bar .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-rules{counter-reset:none;gap:14px;margin:16px 0;padding:0;list-style:none;display:grid}.lumn .lumn-rule{border:1px solid var(--l-border);background:var(--l-surface);border-radius:16px;margin:0;padding:4px 18px 10px}.lumn .lumn-rule fieldset{border:0;min-width:0;margin:0;padding:0}.lumn .lumn-rule.is-off{background:var(--l-surface-2)}.lumn .lumn-rule-legend{margin:0;padding:14px 0 0;font-size:.92rem;font-weight:650;display:block}.lumn .lumn-rule-top{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;padding-top:6px;display:flex}@media (min-width:600px){.lumn .lumn-rule-top{margin-top:-38px;margin-left:120px}}.lumn .lumn-rule-top .lumn-check{align-items:center;margin:0}.lumn .lumn-rule-top .lumn-check input[type=checkbox]{margin-top:0}.lumn .lumn-rule-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 16px;display:grid}.lumn .lumn-rule-grid .lumn-field{margin:10px 0}.lumn .lumn-rule-grid .lumn-select,.lumn .lumn-rule-grid .lumn-input{width:100%}.lumn .lumn-rule-target{grid-column:span 2}@media (max-width:640px){.lumn .lumn-rule-target{grid-column:auto}}.lumn .lumn-rule-once{align-self:end;margin:10px 0 18px}.lumn .lumn-match{margin:4px 0 0;font-size:.82rem;font-weight:600}.lumn .lumn-match:empty{display:none}.lumn .lumn-match.is-good{color:var(--l-good)}.lumn .lumn-match.is-warn{color:var(--l-warn)}.lumn [data-check-selectors][aria-disabled=true]{opacity:.6;pointer-events:none}.lumn [hidden]{display:none!important}.lumn .lumn-filter{flex-wrap:wrap;align-items:center;gap:10px 14px;margin:8px 0 16px;display:flex}.lumn .lumn-filter .lumn-input{width:240px;max-width:100%}.lumn .lumn-filter .lumn-help{flex-basis:100%;margin:0}.lumn .lumn-scroll-x{overflow-x:auto}.lumn .lumn-table .lumn-left{text-align:left}.lumn .lumn-sessions td,.lumn .lumn-sessions th{vertical-align:middle}.lumn .lumn-pager{color:var(--l-text-2);justify-content:center;align-items:center;gap:14px;margin-top:16px;font-size:.88rem;display:flex}.lumn .lumn-dialog-wide{width:min(640px,100vw - 32px);max-height:min(80vh,760px)}.lumn .lumn-dialog-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.lumn .lumn-steps{margin:0;padding:0;list-style:none}.lumn .lumn-steps li{border-bottom:1px solid var(--l-grid);grid-template-columns:76px 1fr;gap:12px;margin:0;padding:10px 0;font-size:.88rem;display:grid}.lumn .lumn-steps li.is-event{color:var(--l-text-2);padding-left:18px}.lumn .lumn-step-time{color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn .lumn-step-body{overflow-wrap:anywhere;min-width:0}.lumn .lumn-funnels{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:24px;margin:8px 0 16px;display:grid}.lumn .lumn-funnel caption{text-align:left;color:var(--l-text);padding-bottom:10px;font-size:.95rem;font-weight:650}.lumn .lumn-step-n{background:var(--l-chip-bg);width:22px;height:22px;color:var(--l-chip-fg);border-radius:50%;place-items:center;margin-right:6px;font-size:.72rem;font-weight:650;display:inline-grid}.lumn .lumn-details{border-top:1px solid var(--l-border);margin-top:12px;padding-top:12px}.lumn .lumn-details summary{cursor:pointer;min-height:24px;font-size:.9rem;font-weight:600}.lumn .lumn-rejected{color:var(--l-warn);margin:4px 0 0 18px;font-size:.82rem;list-style:outside}.lumn .lumn-head-actions form.lumn-field-inline{gap:8px}.lumn .lumn-vitals{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:0 0 8px;padding:0;list-style:none;display:grid}.lumn .lumn-vital{background:var(--l-surface-2);border-radius:16px;align-content:start;gap:4px;margin:0;padding:14px 16px;display:grid}.lumn .lumn-vital-name{color:var(--l-muted);font-size:.82rem;font-weight:600}.lumn .lumn-vital-name abbr{font-weight:500;text-decoration:none}.lumn .lumn-vital-val{font-variant-numeric:tabular-nums;font-size:1.15rem;font-weight:650}.lumn .lumn-rate{border:1px solid;border-radius:999px;justify-self:start;padding:2px 10px;font-size:.74rem;font-weight:650}.lumn .lumn-rate.is-good{color:var(--l-good);background:var(--l-good-bg)}.lumn .lumn-rate.is-fair{color:var(--l-warn);background:var(--l-warn-bg)}.lumn .lumn-rate.is-poor{color:var(--l-bad);background:var(--l-bad-bg)}.lumn .lumn-cap-left{text-align:left;padding:8px 0 10px}.lumn .lumn-wrap{white-space:normal;overflow-wrap:anywhere}.lumn abbr[title]{cursor:help}.lumn .lumn-rate-sm{width:fit-content;margin:3px 0 0 auto;padding:0 7px;font-size:.68rem;display:block}.lumn .lumn-path-min{min-width:12ch;display:inline-block}.lumn .lumn-table thead th+th{padding-left:12px}.lumn .lumn-check-cols{grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:0 16px;display:grid}.lumn .lumn-alert-grid{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:0 24px;display:grid}.lumn #lumn-test-result:empty{display:none}.lumn #lumn-test-result .lumn-callout{margin-top:14px}.lumn .lumn-error-summary li+li{margin-top:6px}.lumn .lumn-error-summary a{min-height:24px;padding:2px 0;display:inline-block}.lumn .lumn-scan-progress{gap:8px;margin:4px 0 14px;display:grid}.lumn .lumn-scan-progress p{margin:0}.lumn .lumn-progress{appearance:none;background:var(--l-track);border:0;border-radius:6px;width:100%;max-width:560px;height:10px;overflow:hidden}.lumn .lumn-progress::-webkit-progress-bar{background:var(--l-track);border-radius:6px}.lumn .lumn-progress::-webkit-progress-value{background:var(--l-bar);border-radius:6px}.lumn .lumn-progress::-moz-progress-bar{background:var(--l-bar);border-radius:6px}.lumn .lumn-scan-counts{border-top:0;border-bottom:1px solid var(--l-border);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));margin:0 0 14px;padding:0 0 14px}.lumn .lumn-scan-counts dd{font-size:1.1rem}.lumn .lumn-queue td,.lumn .lumn-queue th{vertical-align:top}.lumn .lumn-queue .lumn-rate{margin-top:4px;display:inline-block}.lumn .lumn-rate:not(.is-good):not(.is-fair):not(.is-poor){color:var(--l-text-2);background:var(--l-chip-bg)}.lumn .lumn-break{overflow-wrap:anywhere}.lumn .lumn-nowrap{white-space:nowrap;display:block}.lumn .lumn-queue-export{margin-top:14px}.lumn .lumn-settings-grid>*{min-width:0}.lumn .lumn-scroll-x{max-width:100%;position:relative}.lumn.lumn-dash{background:var(--l-surface);border-radius:0;min-height:0;padding:0;font-size:14px}.lumn .lumn-dash-range{color:var(--l-muted);margin:0 0 10px;font-size:.8rem}.lumn .lumn-dash-foot{border-top:1px solid var(--l-border);margin:14px 0 0;padding-top:10px;font-weight:600}.lumn.lumn-dash .lumn-table-toggle{display:none}.lumn .lumn-dash-list{margin:6px 0 0;padding:0;list-style:none}.lumn .lumn-dash-list li{border-bottom:1px solid var(--l-border);overflow-wrap:anywhere;gap:2px;margin:0;padding:6px 0;display:grid}.lumn .lumn-dash-list .lumn-path{color:var(--l-muted);font-size:.8rem}.lumn.lumn-dash .lumn-h3{margin-top:4px;font-size:.9rem}.lumn .lumn-survey-q+.lumn-survey-q{border-top:1px solid var(--l-border);margin-top:18px;padding-top:14px}.lumn .lumn-survey-q .lumn-h3{margin-bottom:10px}.lumn .lumn-geo-grid{grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:20px;display:grid}.lumn .lumn-tile-map{width:100%;height:auto;max-height:440px;margin:6px 0 8px;display:block}.lumn .lumn-tile-map text{font:600 13px var(--l-font);pointer-events:none}.lumn .lumn-geo-regions{border-top:1px solid var(--l-tile-border);margin-top:20px;padding-top:16px}.lumn .lumn-geo-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:4px;display:flex}.lumn .lumn-geo-head .lumn-h3{margin:0}.lumn .lumn-geo-head .lumn-field-inline{min-width:0;max-width:100%}.lumn .lumn-geo-head .lumn-select{flex:auto;min-width:0;max-width:100%}.lumn .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo;margin-top:4px}.lumn .lumn-pv-list.lumn-geo-list li{counter-increment:lumn-geo;grid-template-columns:2.2em 1fr auto}.lumn .lumn-pv-list.lumn-geo-list li:before{content:counter(lumn-geo) ".";color:var(--l-muted);font-variant-numeric:tabular-nums}.lumn details .lumn-pv-list.lumn-geo-list{counter-reset:lumn-geo 10}.lumn .lumn-geo-0 rect,.lumn i.lumn-geo-0{fill:var(--l-track);background:var(--l-track)}.lumn .lumn-geo-1 rect,.lumn i.lumn-geo-1{fill:#dbe8f8;background:#dbe8f8}.lumn .lumn-geo-2 rect,.lumn i.lumn-geo-2{fill:#a9c8ef;background:#a9c8ef}.lumn .lumn-geo-3 rect,.lumn i.lumn-geo-3{fill:#6fa3e3;background:#6fa3e3}.lumn .lumn-geo-4 rect,.lumn i.lumn-geo-4{fill:#2f6fc6;background:#2f6fc6}.lumn .lumn-geo-5 rect,.lumn i.lumn-geo-5{fill:#0b3f8a;background:#0b3f8a}.lumn .lumn-geo-0 text,.lumn .lumn-geo-1 text,.lumn .lumn-geo-2 text,.lumn .lumn-geo-3 text{fill:#0b1f3a}.lumn .lumn-geo-4 text,.lumn .lumn-geo-5 text{fill:#fff}.lumn[data-theme=dark] .lumn-geo-0 rect{fill:#22324c}.lumn[data-theme=dark] .lumn-geo-0 text{fill:#c5ccd6}.lumn .lumn-geo-key{color:var(--l-muted);align-items:center;gap:4px;margin:0 0 6px;font-size:.75rem;display:flex}.lumn .lumn-geo-key i{border-radius:3px;width:18px;height:10px;display:inline-block}.lumn .lumn-geo-key span:first-child{margin-right:4px}.lumn .lumn-geo-key span:last-child{margin-left:4px}html:has(body.lumn-screen){scroll-padding-top:130px}.lumn input[type=file]{min-width:0;max-width:100%;font:inherit;font-size:.88rem}.lumn .lumn-field-inline:has(input[type=file]){flex-wrap:wrap;min-width:0;max-width:100%}.lumn .lumn-preset-diffs{margin:14px 0 12px}.lumn .lumn-preset-diffs .lumn-strong{margin:0 0 6px}.lumn .lumn-diff-list{font-size:inherit;margin:0 0 8px;padding-left:18px}.lumn .lumn-diff-list li{font-size:inherit;margin:0 0 4px}.lumn .lumn-diff-tag{background:var(--l-good-bg);color:var(--l-good);border:1px solid;border-radius:999px;margin-left:6px;padding:1px 8px;font-size:.72rem;font-weight:600;display:inline-block}.lumn .lumn-diff-tag.is-looser{background:var(--l-bad-bg);color:var(--l-bad)}.lumn .lumn-preset-diffs .lumn-help{margin:0}.lumn .lumn-savebar{z-index:99990;background:var(--l-surface);width:min(760px,100% - 32px);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:999px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:0 auto;padding:10px 12px 10px 18px;display:flex;position:fixed;bottom:16px;box-shadow:0 18px 40px -16px #0b1f3a73}.lumn .lumn-savebar[hidden]{display:none}.lumn .lumn-savebar-msg{align-items:center;gap:8px;margin:0;font-size:.92rem;font-weight:600;display:flex}.lumn .lumn-savebar-msg .lumn-ico-sm{color:var(--l-warn);flex:none}.lumn .lumn-savebar-actions{flex-wrap:wrap;gap:8px;display:flex}.lumn.has-savebar .lumn-main{padding-bottom:96px}.lumn.has-savebar .lumn-toast{bottom:96px}@media (prefers-reduced-motion:no-preference){.lumn .lumn-savebar{animation:.18s ease-out lumn-savebar-in}@keyframes lumn-savebar-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}}@media (max-width:600px){.lumn .lumn-savebar{border-radius:18px;width:calc(100% - 16px);padding:12px;bottom:8px}.lumn .lumn-savebar-actions{width:100%}.lumn .lumn-savebar-actions .lumn-btn,.lumn .lumn-savebar-actions .lumn-btn-ghost{flex:1}}.lumn .lumn-license-facts{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px 20px;margin:4px 0 14px;display:grid}.lumn .lumn-license-facts dt{color:var(--l-muted);margin-bottom:2px;font-size:.78rem;font-weight:600}.lumn .lumn-license-facts dd{overflow-wrap:anywhere;margin:0;font-weight:600}.lumn .lumn-license-facts .lumn-tag{margin-left:0;padding:2px 10px;font-size:.78rem}.lumn .lumn-tag.is-good{background:var(--l-good-bg);color:var(--l-good)}.lumn .lumn-tag.is-warn{background:var(--l-warn-bg);color:var(--l-text);outline:1px solid var(--l-warn)}.lumn .lumn-license-form .lumn-input{letter-spacing:.04em;max-width:26rem}.lumn .lumn-locked{text-align:left;max-width:40rem}.lumn .lumn-locked .lumn-inline-actions{margin-top:12px}.lumn #lumn-license-card{margin-bottom:16px}.lumn .lumn-license-nag{align-items:center}.lumn .lumn-license-nag p{flex:1;margin:0}.lumn .lumn-license-facts dd.lumn-mono{white-space:nowrap;overflow-wrap:normal}.lumn .lumn-migrate-list{gap:1rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.lumn .lumn-migrate-list>li{border:1px solid var(--l-border);background:var(--l-surface-2);border-radius:10px;padding:.9rem 1rem}.lumn .lumn-migrate-list p{margin:0 0 .35rem}.lumn .lumn-migrate-list .lumn-inline-actions{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;display:flex}.lumn .lumn-views{position:relative}.lumn .lumn-views>summary{cursor:pointer;list-style:none}.lumn .lumn-views>summary::-webkit-details-marker{display:none}.lumn .lumn-views-pop{z-index:30;background:var(--l-surface);width:min(22rem,90vw);color:var(--l-text);border:1px solid var(--l-border-strong);border-radius:10px;padding:.9rem;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 12px 32px #0b1f3a2e}.lumn .lumn-views-list{gap:.5rem;margin:0 0 .75rem;padding:0;list-style:none;display:grid}.lumn .lumn-views-list>li{border-bottom:1px solid var(--l-border);justify-content:space-between;align-items:flex-start;gap:.5rem;padding-bottom:.5rem;display:flex}.lumn .lumn-views-list form:first-child{gap:.1rem;display:grid}.lumn .lumn-link-btn{color:var(--l-text);font:inherit;text-align:left;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.lumn .lumn-link-btn:focus-visible{outline:2px solid var(--l-navy);outline-offset:2px;border-radius:3px}.lumn .lumn-views-save{gap:.4rem;display:grid}.lumn .lumn-ai-total{flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin:0 0 .75rem;display:flex}.lumn .lumn-ai-total+.lumn-table,.lumn .lumn-table+.lumn-table{margin-top:.75rem}.lumn .lumn-table caption.lumn-strong{text-align:left;caption-side:top;padding:.5rem 0 .35rem}.lumn .lumn-views-pop .lumn-callout{margin:0 0 .75rem}.lumn .lumn-views-pop form{margin:0}.lumn .lumn-review-nag{align-items:flex-start}.lumn .lumn-review-body{flex:1}.lumn .lumn-review-body p{margin:0}.lumn .lumn-review-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:10px;display:flex} -
lumn-analytics/trunk/assets/dist/admin.js
r3744314 r3753587 1 (function(){"use strict";var T=window.lumnAdmin||{},l=T.i18n||{},o=document.getElementById("lumn-app");if(!o)return;var _=window.matchMedia("(prefers-reduced-motion: reduce)"), Y=document.getElementById("lumn-live"),K=[4,5,6,7,8,12];function d(e){var t=Array.prototype.slice.call(arguments,1),r=0;return String(e||"").replace(/%(\d+\$)?[sd]/g,function(n,a){var i=a?t[parseInt(a,10)-1]:t[r++];return i===void 0?"":String(i)})}function v(e){Y&&(Y.textContent="",setTimeout(function(){Y.textContent=e},40))}function O(e){var t=document.getElementById("lumn-toast");t&&(t.textContent=e,t.hidden=!1,clearTimeout(O.timer),O.timer=setTimeout(function(){t.hidden=!0},6e3))}function X(e,t){return fetch(e,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":T.nonce},body:JSON.stringify(t||{})})}o.addEventListener("click",function(e){var t=e.target.closest("[data-theme-toggle]");if(t){var r=o.getAttribute("data-theme")!=="dark";o.setAttribute("data-theme",r?"dark":"light"),t.setAttribute("aria-pressed",String(r)),v(r?l.darkOn:l.lightOn),X(T.theme,{theme:r?"dark":"light"})}});function ge(e){(e||o).querySelectorAll("textarea[data-lumn-snippet]").forEach(function(t){var r;try{r=JSON.parse(t.getAttribute("data-lumn-snippet"))}catch{return}if(!(!r||!r.src)){var n="script";t.value="<"+n+">window.lumnConfig="+JSON.stringify(r.config||{})+";</"+n+`>2 <`+n+' src="'+r.src+'" defer></'+n+">"}})}function he(e,t,r){var n=e.closest(".lumn-chart-slot");if(!(!n||!t)){var a=n.querySelector(".lumn-tip");a||(a=document.createElement("div"),a.className="lumn-tip",a.setAttribute("aria-hidden","true"),n.appendChild(a));var i=t.dataset,c=Q()==="year"?l.tipYear:l.tipPrev,u=[d(l.tipViews,i.v)];i.p&&u.push(d(c,i.p)+(i.pct?" ("+i.pct+")":"")),i.note&&u.push(i.note),a.textContent="";var s=document.createElement("strong");s.textContent=i.day,a.appendChild(s),u.forEach(function(R,Fe){var pe=document.createElement("span");pe.textContent=R,Fe===0&&(pe.className="lumn-tip-main"),a.appendChild(pe)}),a.hidden=!1;var y=e.viewBox.baseVal,m=e.getBoundingClientRect(),g=n.getBoundingClientRect(),p=y&&y.width?m.width/y.width:1,b=m.left-g.left+parseFloat(i.cx)*p,S=m.top-g.top+parseFloat(i.cy)*p;a.style.left=Math.max(0,Math.min(g.width-a.offsetWidth,b-a.offsetWidth/2))+"px",a.style.top=Math.max(0,S-a.offsetHeight-12)+"px";var L=e.querySelector(".lumn-cross");L&&(L.setAttribute("x1",i.cx),L.setAttribute("x2",i.cx),L.classList.add("is-on")),e.querySelectorAll(".lumn-bar.is-hover, .lumn-pt.is-hover").forEach(function(R){R.classList.remove("is-hover")});var C=parseInt(i.i,10),I=e.querySelectorAll(".lumn-as-bars .lumn-bar")[C],W=e.querySelectorAll(".lumn-as-line .lumn-pt")[C];I&&I.classList.add("is-hover"),W&&W.classList.add("is-hover"),e.setAttribute("data-active",String(C)),r&&v(i.day+": "+u.join(". "))}}function G(e){var t=e.closest(".lumn-chart-slot"),r=t&&t.querySelector(".lumn-tip");r&&(r.hidden=!0);var n=e.querySelector(".lumn-cross");n&&n.classList.remove("is-on"),e.querySelectorAll(".is-hover").forEach(function(a){a.classList.remove("is-hover")})}o.addEventListener("pointermove",function(e){var t=e.target.closest&&e.target.closest(".lumn-hit");t&&t.ownerSVGElement&&he(t.ownerSVGElement,t,!1)}),o.addEventListener("pointerout",function(e){var t=e.target.closest&&e.target.closest(".lumn-day-chart");t&&!(e.relatedTarget&&t.contains(e.relatedTarget))&&document.activeElement!==t&&G(t)}),o.addEventListener("keydown",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-day-chart"))){var r=t.querySelectorAll(".lumn-hit");if(r.length){var n=parseInt(t.getAttribute("data-active"),10);isNaN(n)&&(n=r.length-1);var a={ArrowLeft:n-1,ArrowRight:n+1,Home:0,End:r.length-1}[e.key];if(a===void 0){e.key==="Escape"&&G(t);return}e.preventDefault(),he(t,r[Math.max(0,Math.min(r.length-1,a))],!0)}}}),o.addEventListener("focusout",function(e){e.target.classList&&e.target.classList.contains("lumn-day-chart")&&G(e.target)}),o.addEventListener("click",function(e){var t=e.target.closest("[data-copy]");if(t){var r=o.querySelector(t.getAttribute("data-copy"));if(r){var n=function(){O(l.copied)};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(r.value).then(n,function(){r.select()}):r.select()}}}),o.addEventListener("click",function(e){var t=e.target.closest('[data-error-summary] a[href^="#"]');if(t){var r=document.getElementById(t.getAttribute("href").slice(1));r&&(e.preventDefault(),r.focus({preventScroll:!0}),r.scrollIntoView({block:"center",behavior:_.matches?"auto":"smooth"}))}});function ye(e){(e||o).querySelectorAll(".lumn-table-toggle:not([data-ready])").forEach(function(t){t.setAttribute("data-ready","1");var r=document.getElementById(t.getAttribute("aria-controls"));if(r){var n=t.getAttribute("data-open")==="1";J(t,r,n)}})}function J(e,t,r){t.hidden=!r,e.setAttribute("aria-expanded",String(r)),e.setAttribute("data-open",r?"1":"0");var n=e.querySelector("span");n&&(n.textContent=r?e.getAttribute("data-label-hide"):e.getAttribute("data-label-show"))}var $={};o.addEventListener("click",function(e){var t=e.target.closest(".lumn-table-toggle");if(t){var r=t.getAttribute("aria-controls"),n=document.getElementById(r);if(n){var a=n.hidden;$[r]=a,J(t,n,a),a&&n.focus({preventScroll:!0}),v(a?l.tableShown:l.tableHidden)}}});var D="bar";o.addEventListener("click",function(e){var t=e.target.closest(".lumn-seg-btn[data-kind]");if(t){var r=t.closest(".lumn-seg");r.querySelectorAll(".lumn-seg-btn").forEach(function(a){a.setAttribute("aria-pressed",String(a===t))}),D=t.getAttribute("data-kind");var n=t.closest(".lumn-panel").querySelector(".lumn-day-chart");n&&n.setAttribute("data-kind",D),v(d(l.showing,t.textContent.trim().toLowerCase()))}});function Oe(){var e=document.getElementById("lumn-range");return e?e.value:""}function Q(){var e=document.getElementById("lumn-compare");return e?e.value:""}function Me(){var e=o.querySelector("#lumn-body-traffic .lumn-chart-slot");if(!(!e||!window.htmx)&&!o.querySelector("#lumn-body-traffic dialog[open]")){var t=parseInt(e.getAttribute("data-chart-width"),10)||0,r=Math.round(e.clientWidth);if(r<200||t&&Math.abs(r-t)/t<.12){e.classList.remove("is-holding");return}e.setAttribute("data-chart-width",String(r));var n=T.panel+(T.panel.indexOf("?")>-1?"&":"?")+"w="+r+"&kind="+encodeURIComponent(D)+"&range="+encodeURIComponent(Oe())+"&compare="+encodeURIComponent(Q())+"&still=1";window.htmx.ajax("GET",n,{target:"#lumn-body-traffic",swap:"innerHTML"})}}var be;function N(){clearTimeout(be),be=setTimeout(Me,120)}if(window.ResizeObserver){var Se=o.querySelector("[data-board]");Se&&new ResizeObserver(N).observe(Se)}var x=o.querySelector("[data-board]");function E(){return x?Array.prototype.slice.call(x.querySelectorAll(":scope > .lumn-panel")):[]}function k(e){var t=e.querySelector("h2");return t?t.textContent.trim():""}function j(){var e=E().map(function(t){return{id:t.getAttribute("data-panel"),span:parseInt(t.getAttribute("data-span"),10)}});X(T.layout,{layout:e}).then(function(t){t.ok||O(l.saveError)},function(){O(l.saveError)})}var F=!1;function Be(e,t){F=!0;var r=function(){F=!1,t&&t()};document.startViewTransition&&!_.matches?document.startViewTransition(e).updateCallbackDone.then(r,r):(e(),r())}function Z(e,t,r){var n=E(),a=n.indexOf(e);if(t=Math.max(0,Math.min(n.length-1,t)),t===a){v(d(l.already,k(e),a+1,n.length));return}Be(function(){var i=n.filter(function(c){return c!==e});x.insertBefore(e,i[t]||null)},function(){j(),r&&r.focus(),e.scrollIntoView({block:"nearest",behavior:_.matches?"auto":"smooth"})}),v(d(l.moved,k(e),t+1,n.length))}function Re(e,t){var r=K.indexOf(parseInt(e.getAttribute("data-span"),10)),n=K[Math.max(0,Math.min(K.length-1,r+t))];if(n===parseInt(e.getAttribute("data-span"),10)){v(d(t>0?l.maxWide:l.minWide,k(e)));return}var a=e.getBoundingClientRect().width,i=e.querySelector(".lumn-chart-slot");i&&t<0&&i.classList.add("is-holding");var c=function(u,s){u(),s&&s()};c(function(){e.setAttribute("data-span",String(n))},function(){j();var u=e.getBoundingClientRect().width,s=Math.round(u/x.getBoundingClientRect().width*100);Math.abs(u-a)<2?v(d(l.sameWidth,k(e))):v(d(l.width,k(e),s>=97?l.fullWidth:d(l.pctWidth,s))),N()})}function Ee(e){var t=e.closest(".lumn-panel"),r=t.querySelector('[popovertarget="'+e.id+'"]'),n=r.getBoundingClientRect(),a=e.offsetWidth,i=e.offsetHeight,c=Math.max(8,Math.min(n.right-a,window.innerWidth-a-8)),u=n.bottom+6;u+i>window.innerHeight-8&&(u=Math.max(8,n.top-i-6)),e.style.left=c+"px",e.style.top=u+"px"}o.addEventListener("toggle",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-move-menu")||e.newState!=="open")){var r=t.closest(".lumn-panel");Ee(t);var n=E().indexOf(r),a=E().length-1,i=parseInt(r.getAttribute("data-span"),10);t.querySelector('[data-move="first"]').disabled=n===0,t.querySelector('[data-move="prev"]').disabled=n===0,t.querySelector('[data-move="next"]').disabled=n===a,t.querySelector('[data-move="last"]').disabled=n===a,t.querySelector('[data-size="wider"]').disabled=i===12,t.querySelector('[data-size="narrower"]').disabled=i===4;var c=t.querySelector("button:not(:disabled)");c&&c.focus()}},!0),o.addEventListener("click",function(e){var t=e.target.closest(".lumn-move-menu button");if(!(!t||t.disabled)){var r=t.closest(".lumn-move-menu"),n=r.closest(".lumn-panel"),a=n.querySelector('[popovertarget="'+r.id+'"]'),i=E().indexOf(n),c=E().length-1;r.hidePopover();var u=t.getAttribute("data-move");u&&Z(n,{first:0,prev:i-1,next:i+1,last:c}[u],a);var s=t.getAttribute("data-size");s&&(Re(n,s==="wider"?1:-1),a.focus())}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");t&&t.matches(":popover-open")&&!t.contains(e.relatedTarget)&&t.hidePopover()}),window.addEventListener("scroll",function(){o.querySelectorAll(".lumn-move-menu").forEach(function(e){e.matches(":popover-open")&&Ee(e)})},{passive:!0}),o.addEventListener("keydown",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");if(!(!t||e.key!=="ArrowDown"&&e.key!=="ArrowUp")){var r=Array.prototype.slice.call(t.querySelectorAll("button:not(:disabled)")),n=r.indexOf(document.activeElement);n<0||(e.preventDefault(),r[(n+(e.key==="ArrowDown"?1:r.length-1))%r.length].focus())}});var w=null,P=-1;function ee(e){if(F){setTimeout(function(){ee(e)},50);return}v(d(l.dropped,k(e),E().indexOf(e)+1,E().length))}x&&(x.addEventListener("keydown",function(e){var t=e.target.closest(".lumn-drag-handle");if(t){var r=t.closest(".lumn-panel");if(e.key===" "||e.key==="Enter"){e.preventDefault(),w===r?(r.classList.remove("is-grabbed"),w=null,j(),ee(r)):(w&&w.classList.remove("is-grabbed"),w=r,P=E().indexOf(r),r.classList.add("is-grabbed"),v(d(l.pickedUp,k(r))));return}if(w===r){var n=E().indexOf(r),a={ArrowUp:n-1,ArrowLeft:n-1,ArrowDown:n+1,ArrowRight:n+1,Home:0,End:E().length-1};e.key in a&&(e.preventDefault(),Z(r,a[e.key],t)),e.key==="Escape"&&(e.preventDefault(),r.classList.remove("is-grabbed"),w=null,n!==P&&Z(r,P,t),setTimeout(function(){v(d(l.cancelled,k(r),P+1))},60))}}}),x.addEventListener("focusout",function(e){if(!F&&w&&!w.contains(e.relatedTarget)){var t=w;t.classList.remove("is-grabbed"),w=null,j(),ee(t)}}));var f=null;function qe(e){var t=f.p;t.style.transform="";var r=t.getBoundingClientRect();t.style.transform="translate("+(e.clientX-f.ox-r.left)+"px,"+(e.clientY-f.oy-r.top)+"px)"}function _e(e){var t=E().filter(function(n){return n!==f.p}),r=t.map(function(n){return n.getBoundingClientRect()});e(),!_.matches&&t.forEach(function(n,a){var i=r[a],c=n.getBoundingClientRect(),u=i.left-c.left,s=i.top-c.top;(u||s)&&n.animate([{transform:"translate("+u+"px,"+s+"px)"},{transform:"none"}],{duration:260,easing:"cubic-bezier(.16,1,.3,1)"})})}if(x){x.addEventListener("pointerdown",function(e){var t=e.target.closest(".lumn-drag-handle");if(!(!t||e.button!==0)){var r=t.closest(".lumn-panel"),n=r.getBoundingClientRect();f={p:r,id:e.pointerId,sx:e.clientX,sy:e.clientY,ox:e.clientX-n.left,oy:e.clientY-n.top,on:!1,from:E().indexOf(r)},e.preventDefault()}}),document.addEventListener("pointermove",function(e){if(!(!f||e.pointerId!==f.id)){if(!f.on){if(Math.abs(e.clientX-f.sx)+Math.abs(e.clientY-f.sy)<6)return;f.on=!0,f.p.classList.add("is-dragging"),x.classList.add("is-dragging")}qe(e),f.p.style.pointerEvents="none";var t=document.elementFromPoint(e.clientX,e.clientY);f.p.style.pointerEvents="";var r=t&&t.closest(".lumn-panel");if(r&&r!==f.p&&r.parentElement===x){var n=r.getBoundingClientRect(),a=e.clientY>n.top+n.height/2,i=a?r.nextElementSibling:r;i!==f.p&&f.p.nextElementSibling!==i&&(_e(function(){x.insertBefore(f.p,i)}),qe(e))}}});var xe=function(e){if(!(!f||e.pointerId!==f.id)){var t=f.p,r=f.on,n=f.from;if(t.classList.remove("is-dragging"),x.classList.remove("is-dragging"),r){var a=t.style.transform;t.style.transform="",!_.matches&&a&&t.animate([{transform:a},{transform:"none"}],{duration:240,easing:"cubic-bezier(.16,1,.3,1)"});var i=E().indexOf(t);j(),v(i===n?d(l.leftInPlace,k(t)):d(l.moved,k(t),i+1,E().length)),N()}f=null}};document.addEventListener("pointerup",xe),document.addEventListener("pointercancel",xe)}o.addEventListener("click",function(e){var t=e.target.closest("[data-reset]");t&&X(T.reset).then(function(){var r=document.getElementById("lumn-range"),n=r?r.getAttribute("hx-get"):"";n&&window.htmx&&window.htmx.ajax("GET",n+(n.indexOf("?")>-1?"&":"?")+"range="+encodeURIComponent(r.value)+"&compare="+encodeURIComponent(Q()),{target:"#lumn-board",swap:"innerHTML"}).then(function(){v(l.reset)})})});var te=null,H=null,B=null;o.addEventListener("click",function(e){var t=e.target.closest("[data-dialog-opener], [data-open-dialog]");t&&(H=t);var r=e.target.closest("[data-focus-after]");r&&(B=r.getAttribute("data-focus-after"))},!0),o.addEventListener("change",function(e){var t=e.target.closest&&e.target.closest("select[data-focus-after]");t&&(B=t.getAttribute("data-focus-after"))},!0),o.addEventListener("click",function(e){var t=e.target.closest("[data-open-dialog]");if(t){var r=document.getElementById(t.getAttribute("data-open-dialog"));if(r&&typeof r.showModal=="function"){te=t.getAttribute("data-open-dialog"),r.showModal();var n=r.querySelector("[data-initial-focus]");n&&n.focus()}return}var a=e.target.closest("[data-close-dialog]");if(a){var i=a.closest("dialog");i&&i.close()}});function De(){if(H&&document.contains(H))return H.focus(),H;var e=te&&o.querySelector('[data-open-dialog="'+te+'"]');return e&&e.focus(),e}o.addEventListener("close",function(e){if(!(!e.target||e.target.tagName!=="DIALOG")){var t=document.activeElement;(!t||t===document.body||e.target.contains(t))&&De()}},!0);var z=null;o.addEventListener("submit",function(e){var t=e.target.closest(".lumn-note-list li");t&&(z=Array.prototype.indexOf.call(t.parentNode.children,t))},!0);function Ae(){return o.querySelector("[data-rules]")}function re(){var e=Ae();if(e){var t=e.querySelectorAll("[data-rule]");t.forEach(function(c,u){var s=c.querySelector(".lumn-rule-legend");s&&(s.textContent=d(l.ruleN,u+1));var y=c.querySelector("[data-rule-num]");y&&(y.textContent=" "+d(l.ruleNLower,u+1))});var r=o.querySelector("[data-rule-count]"),n=o.querySelector("[data-add-rule]"),a=n?parseInt(n.getAttribute("data-max"),10):40;r&&(r.textContent=d(l.ruleCount,t.length,a));var i=o.querySelector("[data-rules-empty]");return i&&(i.hidden=t.length>0),t.length}}function we(e){var t=e.querySelector("[data-rule-action]"),r=t&&t.options[t.selectedIndex],n=r&&r.getAttribute("data-kind")||"selector",a=l.kinds&&l.kinds[n]||["",""],i=e.querySelector("[data-target-label]"),c=e.querySelector("[data-target-help]"),u=e.querySelector("[data-rule-target]");i&&(i.textContent=a[0]),c&&(c.textContent=a[1]),u&&(n==="selector"?u.removeAttribute("inputmode"):u.setAttribute("inputmode","numeric"));var s=e.querySelector("[data-once-wrap]");s&&(s.hidden=n!=="selector");var y=e.querySelector("[data-match]");y&&n!=="selector"&&(y.textContent="");var m=e.querySelector("[data-rule-name]"),g=e.querySelector("[data-custom-wrap]");m&&g&&(g.hidden=m.value!=="custom");var p=e.querySelector("[data-rule-on]");e.classList.toggle("is-off",!!p&&!p.checked)}var U={click:"cta_click",hover:"cta_click",form_start:"form_start",form_submit:"form_submit",seen:"section_view",scroll:"scroll_depth",time:"engaged",video:"video_play"};function Ne(e,t){var r=e.querySelector("[data-rule-name]"),n=e.querySelector('select[name$="[label]"]'),a=Object.keys(U).map(function(i){return U[i]});r&&a.indexOf(r.value)>-1&&U[t]&&(r.value=U[t]),n&&(t==="scroll"||t==="time")&&(n.value="none"),n&&t==="form_start"&&n.value==="text"&&(n.value="field")}o.addEventListener("change",function(e){var t=e.target.closest("[data-rule]");if(t&&(e.target.matches("[data-rule-action]")&&Ne(t,e.target.value),e.target.matches("[data-rule-action], [data-rule-name], [data-rule-on]")&&we(t),e.target.matches("[data-rule-name]")&&e.target.value==="custom")){var r=t.querySelector("[data-custom-wrap] input");r&&r.focus()}}),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule]");if(t){var r=Ae(),n=o.querySelector("[data-rule-template]");if(!r||!n)return;var a=parseInt(t.getAttribute("data-max"),10)||40;if(r.querySelectorAll("[data-rule]").length>=a){v(d(l.maxRules,a));return}var i="n"+Date.now().toString(36)+Math.floor(Math.random()*1e4).toString(36),c=n.innerHTML.split("__KEY__").join(i).split("__N__").join("0"),u=document.createElement("ol");u.innerHTML=c;var s=u.firstElementChild;r.appendChild(s);var y=re(),m=s.querySelector("[data-rule-action]");m&&m.focus(),v(d(l.ruleAdded,y));return}var g=e.target.closest("[data-remove-rule]");if(g){var p=g.closest("[data-rule]");if(!p)return;var b=p.nextElementSibling||p.previousElementSibling;p.parentNode.removeChild(p);var S=re(),L=b?b.querySelector("[data-remove-rule]"):o.querySelector("[data-add-rule]");L&&L.focus(),v(d(S===1?l.ruleRemoved1:l.ruleRemoved,S));return}var C=e.target.closest("[data-check-selectors]");C&&je(C)});function ne(e){var t=document.getElementById("lumn-test-path"),r=document.getElementById("lumn-test-err");r&&(r.textContent=e||"",r.hidden=!e),t&&(e?t.setAttribute("aria-invalid","true"):t.removeAttribute("aria-invalid")),e&&v(e)}function je(e){var t=document.getElementById("lumn-test-path"),r=t?t.value.trim():"/",n;try{n=new URL(r,window.location.origin)}catch{n=null}if(!n||r.charAt(0)!=="/"||r.indexOf("//")===0||n.origin!==window.location.origin){ne(l.badPath),t&&t.focus();return}e.setAttribute("aria-disabled","true"),ne(""),v(l.checking),fetch(n.pathname+n.search,{credentials:"omit",redirect:"follow"}).then(function(a){if(!a.ok)throw new Error("status");return a.text()}).then(function(a){var i=new DOMParser().parseFromString(a,"text/html"),c=0,u=[];o.querySelectorAll("[data-rules] [data-rule]").forEach(function(s,y){var m=s.querySelector("[data-rule-action]"),g=m&&m.options[m.selectedIndex],p=s.querySelector("[data-match]");if(!(!p||!g||g.getAttribute("data-kind")!=="selector")){var b=s.querySelector("[data-rule-target]").value.trim();if(!b){p.textContent="";return}c++;var S=-1;try{S=i.querySelectorAll(b).length}catch{S=-1}S<1&&u.push(y+1),p.className="lumn-match "+(S>0?"is-good":"is-warn"),p.textContent=S<0?l.badSelector:S===0?d(l.noMatch,n.pathname):S===1?d(l.matchOne,n.pathname):d(l.matches,S,n.pathname)}}),v(d(l.checked,c,n.pathname)+(u.length?" "+d(l.noMatchRules,u.join(", ")):""))}).catch(function(){ne(l.pathFailed)}).then(function(){e.removeAttribute("aria-disabled")})}var A=document.getElementById("lumn-savebar"),He=A&&A.querySelector("[data-savebar-text]"),Le=A&&A.querySelector("[data-savebar-save]"),M={},q={},h=null,ae=!1,ie=!1;function oe(e){if(!e.dataset.saveKey){var t=e.parentElement&&e.parentElement.closest("[id]");e.dataset.saveKey=e.id||(t?t.id:"form")}return e.dataset.saveKey}function ke(e){var t=[];return Array.prototype.forEach.call(e.elements,function(r){if(!(!r.name||r.disabled||r.type==="file"||r.type==="submit"||r.type==="button")&&!(r.name.indexOf("__KEY__")>-1||r.name==="_wpnonce")&&!((r.type==="checkbox"||r.type==="radio")&&!r.checked)){if(r.tagName==="SELECT"&&r.multiple){Array.prototype.forEach.call(r.selectedOptions,function(n){t.push(r.name+"="+n.value)});return}t.push(r.name+"="+r.value)}}),t.join("&")}function Ce(){return o.querySelectorAll("form[data-save-bar]")}function V(e){var t=null;return Ce().forEach(function(r){oe(r)===e&&(t=r)}),t}function le(){Ce().forEach(function(e){var t=oe(e);e.querySelector('[data-error-summary], [aria-invalid="true"]')&&q[t]||M[t]&&M[t].form===e||(M[t]={form:e,state:ke(e),html:e.innerHTML},delete q[t])}),Object.keys(q).forEach(function(e){V(e)||delete q[e]}),h&&!q[h]&&(h=Object.keys(q)[0]||null),ue()}function We(e){var t=e.closest("section"),r=t&&t.querySelector("h2");return r||(r=o.querySelector("h1")),r?r.textContent.replace(/\s+/g," ").trim():""}function Ie(e){return e.querySelector('button[type="submit"]:not([name])')||e.querySelector('button[type="submit"]')}function ue(){if(A){var e=h&&q[h]?V(h):null,t=!1;if(e){var r=Ie(e);if(r){var n=r.getBoundingClientRect(),a=n.bottom>0&&n.top<window.innerHeight-8&&n.height>0;t=!a,Le.textContent=r.textContent.replace(/\s+/g," ").trim()}var i=Object.keys(q).length,c=We(e);He.textContent=i>1||!c?l.unsavedPlain:d(l.unsavedIn,c)}if(t&&A.hidden){var u=o.getBoundingClientRect();A.style.left=Math.max(0,u.left)+"px",A.style.right=Math.max(0,window.innerWidth-u.right)+"px"}A.hidden=!t,o.classList.toggle("has-savebar",t),t&&!ae&&(ae=!0,v(l.unsaved)),e||(ae=!1)}}var ce=!1;function se(){ce||(ce=!0,requestAnimationFrame(function(){ce=!1,ue()}))}function de(e){var t=e.target.closest&&e.target.closest("form[data-save-bar]");if(t){var r=oe(t);M[r]||le();var n=ke(t)!==M[r].state;n?(q[r]=!0,h=r):(delete q[r],h===r&&(h=Object.keys(q)[0]||null)),se()}}A&&(o.addEventListener("input",de),o.addEventListener("change",de),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule], [data-remove-rule]")&&document.getElementById("lumn-tags-form");t&&setTimeout(function(){de({target:t})},0)}),window.addEventListener("scroll",se,{passive:!0}),window.addEventListener("resize",function(){A.hidden=!0,se()}),Le.addEventListener("click",function(){var e=h&&V(h);if(e){var t=Ie(e);typeof e.requestSubmit=="function"?e.requestSubmit(t||void 0):t&&t.click()}}),A.querySelector("[data-savebar-undo]").addEventListener("click",function(){var e=h&&V(h);if(!(!e||!M[h])){e.innerHTML=M[h].html,window.htmx&&window.htmx.process&&window.htmx.process(e),e.querySelectorAll("[data-rule]").forEach(function(r){we(r)}),re(),delete q[h],h=Object.keys(q)[0]||null,ue(),v(l.undone);var t=e.querySelector('input:not([type="hidden"]), select, textarea, button');t&&t.focus()}}),o.addEventListener("submit",function(e){!e.target.matches("form[data-save-bar]")&&!e.target.hasAttribute("hx-post")&&(ie=!0,setTimeout(function(){ie=!1},1500))}),window.addEventListener("beforeunload",function(e){ie||!Object.keys(q).length||(e.preventDefault(),e.returnValue="")}),le(),document.addEventListener("htmx:after:settle",function(){setTimeout(le,0)}));var fe=!1;document.addEventListener("htmx:before:swap",function(){var e=document.activeElement;fe=!!(e&&e.closest&&e.closest("#lumn-scan-actions"))}),document.addEventListener("htmx:after:settle",function(e){if(fe){var t=document.activeElement;if(!t||t===document.body||!document.contains(t)){var r=document.querySelector("#lumn-scan-actions button");r&&r.focus()}fe=!1}ye(),ge();var n=e.target;if(n&&n.nodeType===1){var a=n.querySelector("dialog[data-reopen]");if(a&&!a.open&&typeof a.showModal=="function"){a.removeAttribute("data-reopen"),a.showModal();var i=a.querySelector("[data-error-summary]");i&&i.focus()}}var c=n&&n.nodeType===1&&n.querySelector?n.querySelector("[data-filter-state]"):null;if(c){var u=c.getAttribute("data-error")||"",s=document.getElementById("lumn-entry"),y=document.getElementById("lumn-entry-err");y&&(y.textContent=u,y.hidden=!u),s&&(u?s.setAttribute("aria-invalid","true"):s.removeAttribute("aria-invalid"))}if(n&&n.nodeType===1&&o.contains(n)){var m=n.querySelector("[data-announce]:not([data-announced])");m&&m.setAttribute("data-announced","1");var g=document.activeElement,p=!g||g===document.body||!document.contains(g)||!!(g.closest&&g.closest("dialog:not([open])")),b=null;if(p&&n.querySelector(".lumn-notes")&&!n.querySelector("dialog[open]")){var S=n.querySelectorAll('.lumn-note-list button[type="submit"]');z!==null&&S.length&&(b=S[Math.min(z,S.length-1)]),b||(b=n.querySelector("[data-open-dialog]"))}else p&&B&&n.querySelector(B)?b=n.querySelector(B):p&&(b=n.querySelector("[data-error-summary]")||n.querySelector('[aria-invalid="true"]')||(m&&!m.hasAttribute("data-no-focus")?m:null)||n.querySelector('button[type="submit"]'));var L=n.querySelector("[data-take-focus]");L&&(b=L),z=null,B=null,b&&b.focus(),m&&b!==m&&v(m.textContent.replace(/\s+/g," ").trim())}Object.keys($).forEach(function(I){var W=document.getElementById(I),R=W&&o.querySelector('[aria-controls="'+I+'"]');R&&$[I]&&J(R,W,!0)});var C=o.querySelector(".lumn-day-chart");C&&C.setAttribute("data-kind",D),o.querySelectorAll(".lumn-seg-btn[data-kind]").forEach(function(I){I.setAttribute("aria-pressed",String(I.getAttribute("data-kind")===D))}),N()}),document.addEventListener("htmx:response:error",function(e){var t=e.detail&&e.detail.ctx&&e.detail.ctx.response?e.detail.ctx.response.status:0;t!==422&&O(l.loadError)}),document.addEventListener("htmx:error",function(){O(l.loadError)});function ve(e,t){var r=e.querySelector(".lumn-nav-btn"),n=e.querySelector(".lumn-nav-menu");!n||n.hidden||(n.hidden=!0,r.setAttribute("aria-expanded","false"),t&&r.focus())}function me(e){o.querySelectorAll("[data-nav-group]").forEach(function(t){t!==e&&ve(t,!1)})}o.addEventListener("click",function(e){var t=e.target.closest(".lumn-nav-btn");if(!t){e.target.closest("[data-nav-group]")||me(null);return}var r=t.closest("[data-nav-group]"),n=r.querySelector(".lumn-nav-menu"),a=n.hidden;me(r),n.hidden=!a,t.setAttribute("aria-expanded",String(a)),a&&(n.classList.remove("is-right"),n.getBoundingClientRect().right>document.documentElement.clientWidth-8&&n.classList.add("is-right"))}),document.addEventListener("click",function(e){o.contains(e.target)||me(null)}),o.addEventListener("keydown",function(e){if(e.key==="Escape"){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&!t.querySelector(".lumn-nav-menu").hidden&&(e.preventDefault(),ve(t,!0))}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&e.relatedTarget&&!t.contains(e.relatedTarget)&&ve(t,!1)}),ye(),ge(),N();var Te=o.querySelector("[data-focus-on-load]");Te&&Te.focus()})();1 (function(){"use strict";var T=window.lumnAdmin||{},l=T.i18n||{},o=document.getElementById("lumn-app");if(!o)return;var _=window.matchMedia("(prefers-reduced-motion: reduce)"),G=document.getElementById("lumn-live"),J=[4,5,6,7,8,12];function d(e){var t=Array.prototype.slice.call(arguments,1),r=0;return String(e||"").replace(/%(\d+\$)?[sd]/g,function(n,a){var i=a?t[parseInt(a,10)-1]:t[r++];return i===void 0?"":String(i)})}function m(e){G&&(G.textContent="",setTimeout(function(){G.textContent=e},40))}function O(e){var t=document.getElementById("lumn-toast");t&&(t.textContent=e,t.hidden=!1,clearTimeout(O.timer),O.timer=setTimeout(function(){t.hidden=!0},6e3))}function $(e,t){return fetch(e,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":T.nonce},body:JSON.stringify(t||{})})}o.addEventListener("click",function(e){var t=e.target.closest("[data-theme-toggle]");if(t){var r=o.getAttribute("data-theme")!=="dark";o.setAttribute("data-theme",r?"dark":"light"),t.setAttribute("aria-pressed",String(r)),m(r?l.darkOn:l.lightOn),$(T.theme,{theme:r?"dark":"light"})}});function ye(e){(e||o).querySelectorAll("textarea[data-lumn-snippet]").forEach(function(t){var r;try{r=JSON.parse(t.getAttribute("data-lumn-snippet"))}catch{return}if(!(!r||!r.src)){var n="script";t.value="<"+n+">window.lumnConfig="+JSON.stringify(r.config||{})+";</"+n+`> 2 <`+n+' src="'+r.src+'" defer></'+n+">"}})}function be(e,t,r){var n=e.closest(".lumn-chart-slot");if(!(!n||!t)){var a=n.querySelector(".lumn-tip");a||(a=document.createElement("div"),a.className="lumn-tip",a.setAttribute("aria-hidden","true"),n.appendChild(a));var i=t.dataset,c=te()==="year"?l.tipYear:l.tipPrev,u=[d(l.tipViews,i.v)];i.p&&u.push(d(c,i.p)+(i.pct?" ("+i.pct+")":"")),i.note&&u.push(i.note),a.textContent="";var s=document.createElement("strong");s.textContent=i.day,a.appendChild(s),u.forEach(function(I,X){var R=document.createElement("span");R.textContent=I,X===0&&(R.className="lumn-tip-main"),a.appendChild(R)}),a.hidden=!1;var h=e.viewBox.baseVal,y=e.getBoundingClientRect(),S=n.getBoundingClientRect(),f=h&&h.width?y.width/h.width:1,A=y.left-S.left+parseFloat(i.cx)*f,b=y.top-S.top+parseFloat(i.cy)*f;a.style.left=Math.max(0,Math.min(S.width-a.offsetWidth,A-a.offsetWidth/2))+"px",a.style.top=Math.max(0,b-a.offsetHeight-12)+"px";var g=e.querySelector(".lumn-cross");g&&(g.setAttribute("x1",i.cx),g.setAttribute("x2",i.cx),g.classList.add("is-on")),e.querySelectorAll(".lumn-bar.is-hover, .lumn-pt.is-hover").forEach(function(I){I.classList.remove("is-hover")});var C=parseInt(i.i,10),W=e.querySelectorAll(".lumn-as-bars .lumn-bar")[C],F=e.querySelectorAll(".lumn-as-line .lumn-pt")[C];W&&W.classList.add("is-hover"),F&&F.classList.add("is-hover"),e.setAttribute("data-active",String(C)),r&&m(i.day+": "+u.join(". "))}}function Q(e){var t=e.closest(".lumn-chart-slot"),r=t&&t.querySelector(".lumn-tip");r&&(r.hidden=!0);var n=e.querySelector(".lumn-cross");n&&n.classList.remove("is-on"),e.querySelectorAll(".is-hover").forEach(function(a){a.classList.remove("is-hover")})}o.addEventListener("pointermove",function(e){var t=e.target.closest&&e.target.closest(".lumn-hit");t&&t.ownerSVGElement&&be(t.ownerSVGElement,t,!1)}),o.addEventListener("pointerout",function(e){var t=e.target.closest&&e.target.closest(".lumn-day-chart");t&&!(e.relatedTarget&&t.contains(e.relatedTarget))&&document.activeElement!==t&&Q(t)}),o.addEventListener("keydown",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-day-chart"))){var r=t.querySelectorAll(".lumn-hit");if(r.length){var n=parseInt(t.getAttribute("data-active"),10);isNaN(n)&&(n=r.length-1);var a={ArrowLeft:n-1,ArrowRight:n+1,Home:0,End:r.length-1}[e.key];if(a===void 0){e.key==="Escape"&&Q(t);return}e.preventDefault(),be(t,r[Math.max(0,Math.min(r.length-1,a))],!0)}}}),o.addEventListener("focusout",function(e){e.target.classList&&e.target.classList.contains("lumn-day-chart")&&Q(e.target)}),o.addEventListener("click",function(e){var t=e.target.closest("[data-copy]");if(t){var r=o.querySelector(t.getAttribute("data-copy"));if(r){var n=function(){O(l.copied)};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(r.value).then(n,function(){r.select()}):r.select()}}}),o.addEventListener("click",function(e){var t=e.target.closest('[data-error-summary] a[href^="#"]');if(t){var r=document.getElementById(t.getAttribute("href").slice(1));r&&(e.preventDefault(),r.focus({preventScroll:!0}),r.scrollIntoView({block:"center",behavior:_.matches?"auto":"smooth"}))}});function Se(e){(e||o).querySelectorAll(".lumn-table-toggle:not([data-ready])").forEach(function(t){t.setAttribute("data-ready","1");var r=document.getElementById(t.getAttribute("aria-controls"));if(r){var n=t.getAttribute("data-open")==="1";Z(t,r,n)}})}function Z(e,t,r){t.hidden=!r,e.setAttribute("aria-expanded",String(r)),e.setAttribute("data-open",r?"1":"0");var n=e.querySelector("span");n&&(n.textContent=r?e.getAttribute("data-label-hide"):e.getAttribute("data-label-show"))}var ee={};o.addEventListener("click",function(e){var t=e.target.closest(".lumn-table-toggle");if(t){var r=t.getAttribute("aria-controls"),n=document.getElementById(r);if(n){var a=n.hidden;ee[r]=a,Z(t,n,a),a&&n.focus({preventScroll:!0}),m(a?l.tableShown:l.tableHidden)}}});var D="bar";o.addEventListener("click",function(e){var t=e.target.closest(".lumn-seg-btn[data-kind]");if(t){var r=t.closest(".lumn-seg");r.querySelectorAll(".lumn-seg-btn").forEach(function(a){a.setAttribute("aria-pressed",String(a===t))}),D=t.getAttribute("data-kind");var n=t.closest(".lumn-panel").querySelector(".lumn-day-chart");n&&n.setAttribute("data-kind",D),m(d(l.showing,t.textContent.trim().toLowerCase()))}});function Be(){var e=document.getElementById("lumn-range");return e?e.value:""}function te(){var e=document.getElementById("lumn-compare");return e?e.value:""}function Re(){var e=o.querySelector("#lumn-body-traffic .lumn-chart-slot");if(!(!e||!window.htmx)&&!o.querySelector("#lumn-body-traffic dialog[open]")){var t=parseInt(e.getAttribute("data-chart-width"),10)||0,r=Math.round(e.clientWidth);if(r<200||t&&Math.abs(r-t)/t<.12){e.classList.remove("is-holding");return}e.setAttribute("data-chart-width",String(r));var n=T.panel+(T.panel.indexOf("?")>-1?"&":"?")+"w="+r+"&kind="+encodeURIComponent(D)+"&range="+encodeURIComponent(Be())+"&compare="+encodeURIComponent(te())+"&still=1";window.htmx.ajax("GET",n,{target:"#lumn-body-traffic",swap:"innerHTML"})}}var Ee;function N(){clearTimeout(Ee),Ee=setTimeout(Re,120)}if(window.ResizeObserver){var we=o.querySelector("[data-board]");we&&new ResizeObserver(N).observe(we)}var x=o.querySelector("[data-board]");function E(){return x?Array.prototype.slice.call(x.querySelectorAll(":scope > .lumn-panel")):[]}function k(e){var t=e.querySelector("h2");return t?t.textContent.trim():""}function j(){var e=E().map(function(t){return{id:t.getAttribute("data-panel"),span:parseInt(t.getAttribute("data-span"),10)}});$(T.layout,{layout:e}).then(function(t){t.ok||O(l.saveError)},function(){O(l.saveError)})}var P=!1;function _e(e,t){P=!0;var r=function(){P=!1,t&&t()};document.startViewTransition&&!_.matches?document.startViewTransition(e).updateCallbackDone.then(r,r):(e(),r())}function re(e,t,r){var n=E(),a=n.indexOf(e);if(t=Math.max(0,Math.min(n.length-1,t)),t===a){m(d(l.already,k(e),a+1,n.length));return}_e(function(){var i=n.filter(function(c){return c!==e});x.insertBefore(e,i[t]||null)},function(){j(),r&&r.focus(),e.scrollIntoView({block:"nearest",behavior:_.matches?"auto":"smooth"})}),m(d(l.moved,k(e),t+1,n.length))}function De(e,t){var r=J.indexOf(parseInt(e.getAttribute("data-span"),10)),n=J[Math.max(0,Math.min(J.length-1,r+t))];if(n===parseInt(e.getAttribute("data-span"),10)){m(d(t>0?l.maxWide:l.minWide,k(e)));return}var a=e.getBoundingClientRect().width,i=e.querySelector(".lumn-chart-slot");i&&t<0&&i.classList.add("is-holding");var c=function(u,s){u(),s&&s()};c(function(){e.setAttribute("data-span",String(n))},function(){j();var u=e.getBoundingClientRect().width,s=Math.round(u/x.getBoundingClientRect().width*100);Math.abs(u-a)<2?m(d(l.sameWidth,k(e))):m(d(l.width,k(e),s>=97?l.fullWidth:d(l.pctWidth,s))),N()})}function xe(e){var t=e.closest(".lumn-panel"),r=t.querySelector('[popovertarget="'+e.id+'"]'),n=r.getBoundingClientRect(),a=e.offsetWidth,i=e.offsetHeight,c=Math.max(8,Math.min(n.right-a,window.innerWidth-a-8)),u=n.bottom+6;u+i>window.innerHeight-8&&(u=Math.max(8,n.top-i-6)),e.style.left=c+"px",e.style.top=u+"px"}o.addEventListener("toggle",function(e){var t=e.target;if(!(!t.classList||!t.classList.contains("lumn-move-menu")||e.newState!=="open")){var r=t.closest(".lumn-panel");xe(t);var n=E().indexOf(r),a=E().length-1,i=parseInt(r.getAttribute("data-span"),10);t.querySelector('[data-move="first"]').disabled=n===0,t.querySelector('[data-move="prev"]').disabled=n===0,t.querySelector('[data-move="next"]').disabled=n===a,t.querySelector('[data-move="last"]').disabled=n===a,t.querySelector('[data-size="wider"]').disabled=i===12,t.querySelector('[data-size="narrower"]').disabled=i===4;var c=t.querySelector("button:not(:disabled)");c&&c.focus()}},!0),o.addEventListener("click",function(e){var t=e.target.closest(".lumn-move-menu button");if(!(!t||t.disabled)){var r=t.closest(".lumn-move-menu"),n=r.closest(".lumn-panel"),a=n.querySelector('[popovertarget="'+r.id+'"]'),i=E().indexOf(n),c=E().length-1;r.hidePopover();var u=t.getAttribute("data-move");u&&re(n,{first:0,prev:i-1,next:i+1,last:c}[u],a);var s=t.getAttribute("data-size");s&&(De(n,s==="wider"?1:-1),a.focus())}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");t&&t.matches(":popover-open")&&!t.contains(e.relatedTarget)&&t.hidePopover()}),window.addEventListener("scroll",function(){o.querySelectorAll(".lumn-move-menu").forEach(function(e){e.matches(":popover-open")&&xe(e)})},{passive:!0}),o.addEventListener("keydown",function(e){var t=e.target.closest&&e.target.closest(".lumn-move-menu");if(!(!t||e.key!=="ArrowDown"&&e.key!=="ArrowUp")){var r=Array.prototype.slice.call(t.querySelectorAll("button:not(:disabled)")),n=r.indexOf(document.activeElement);n<0||(e.preventDefault(),r[(n+(e.key==="ArrowDown"?1:r.length-1))%r.length].focus())}});var L=null,z=-1;function ne(e){if(P){setTimeout(function(){ne(e)},50);return}m(d(l.dropped,k(e),E().indexOf(e)+1,E().length))}x&&(x.addEventListener("keydown",function(e){var t=e.target.closest(".lumn-drag-handle");if(t){var r=t.closest(".lumn-panel");if(e.key===" "||e.key==="Enter"){e.preventDefault(),L===r?(r.classList.remove("is-grabbed"),L=null,j(),ne(r)):(L&&L.classList.remove("is-grabbed"),L=r,z=E().indexOf(r),r.classList.add("is-grabbed"),m(d(l.pickedUp,k(r))));return}if(L===r){var n=E().indexOf(r),a={ArrowUp:n-1,ArrowLeft:n-1,ArrowDown:n+1,ArrowRight:n+1,Home:0,End:E().length-1};e.key in a&&(e.preventDefault(),re(r,a[e.key],t)),e.key==="Escape"&&(e.preventDefault(),r.classList.remove("is-grabbed"),L=null,n!==z&&re(r,z,t),setTimeout(function(){m(d(l.cancelled,k(r),z+1))},60))}}}),x.addEventListener("focusout",function(e){if(!P&&L&&!L.contains(e.relatedTarget)){var t=L;t.classList.remove("is-grabbed"),L=null,j(),ne(t)}}));var v=null;function Ae(e){var t=v.p;t.style.transform="";var r=t.getBoundingClientRect();t.style.transform="translate("+(e.clientX-v.ox-r.left)+"px,"+(e.clientY-v.oy-r.top)+"px)"}function Ne(e){var t=E().filter(function(n){return n!==v.p}),r=t.map(function(n){return n.getBoundingClientRect()});e(),!_.matches&&t.forEach(function(n,a){var i=r[a],c=n.getBoundingClientRect(),u=i.left-c.left,s=i.top-c.top;(u||s)&&n.animate([{transform:"translate("+u+"px,"+s+"px)"},{transform:"none"}],{duration:260,easing:"cubic-bezier(.16,1,.3,1)"})})}if(x){x.addEventListener("pointerdown",function(e){var t=e.target.closest(".lumn-drag-handle");if(!(!t||e.button!==0)){var r=t.closest(".lumn-panel"),n=r.getBoundingClientRect();v={p:r,id:e.pointerId,sx:e.clientX,sy:e.clientY,ox:e.clientX-n.left,oy:e.clientY-n.top,on:!1,from:E().indexOf(r)},e.preventDefault()}}),document.addEventListener("pointermove",function(e){if(!(!v||e.pointerId!==v.id)){if(!v.on){if(Math.abs(e.clientX-v.sx)+Math.abs(e.clientY-v.sy)<6)return;v.on=!0,v.p.classList.add("is-dragging"),x.classList.add("is-dragging")}Ae(e),v.p.style.pointerEvents="none";var t=document.elementFromPoint(e.clientX,e.clientY);v.p.style.pointerEvents="";var r=t&&t.closest(".lumn-panel");if(r&&r!==v.p&&r.parentElement===x){var n=r.getBoundingClientRect(),a=e.clientY>n.top+n.height/2,i=a?r.nextElementSibling:r;i!==v.p&&v.p.nextElementSibling!==i&&(Ne(function(){x.insertBefore(v.p,i)}),Ae(e))}}});var qe=function(e){if(!(!v||e.pointerId!==v.id)){var t=v.p,r=v.on,n=v.from;if(t.classList.remove("is-dragging"),x.classList.remove("is-dragging"),r){var a=t.style.transform;t.style.transform="",!_.matches&&a&&t.animate([{transform:a},{transform:"none"}],{duration:240,easing:"cubic-bezier(.16,1,.3,1)"});var i=E().indexOf(t);j(),m(i===n?d(l.leftInPlace,k(t)):d(l.moved,k(t),i+1,E().length)),N()}v=null}};document.addEventListener("pointerup",qe),document.addEventListener("pointercancel",qe)}o.addEventListener("click",function(e){var t=e.target.closest("[data-reset]");t&&$(T.reset).then(function(){var r=document.getElementById("lumn-range"),n=r?r.getAttribute("hx-get"):"";n&&window.htmx&&window.htmx.ajax("GET",n+(n.indexOf("?")>-1?"&":"?")+"range="+encodeURIComponent(r.value)+"&compare="+encodeURIComponent(te()),{target:"#lumn-board",swap:"innerHTML"}).then(function(){m(l.reset)})})});var ae=null,H=null,B=null,U=null;o.addEventListener("click",function(e){var t=e.target.closest("[data-dialog-opener], [data-open-dialog]");t&&(H=t);var r=e.target.closest("[data-focus-after]");r&&(B=r.getAttribute("data-focus-after"));var n=e.target.closest("[data-gone-focus]");n&&(U=n.getAttribute("data-gone-focus"))},!0),o.addEventListener("click",function(e){var t=e.target.closest("a[data-ping]");if(!(!t||!window.htmx)){var r=t.getAttribute("data-ping"),n=t.getAttribute("data-ping-target");setTimeout(function(){window.htmx.ajax("POST",r,{target:n,swap:"outerHTML"})},300)}}),o.addEventListener("change",function(e){var t=e.target.closest&&e.target.closest("select[data-focus-after]");t&&(B=t.getAttribute("data-focus-after"))},!0),o.addEventListener("click",function(e){var t=e.target.closest("[data-open-dialog]");if(t){var r=document.getElementById(t.getAttribute("data-open-dialog"));if(r&&typeof r.showModal=="function"){ae=t.getAttribute("data-open-dialog"),r.showModal();var n=r.querySelector("[data-initial-focus]");n&&n.focus()}return}var a=e.target.closest("[data-close-dialog]");if(a){var i=a.closest("dialog");i&&i.close()}});function je(){if(H&&document.contains(H))return H.focus(),H;var e=ae&&o.querySelector('[data-open-dialog="'+ae+'"]');return e&&e.focus(),e}o.addEventListener("close",function(e){if(!(!e.target||e.target.tagName!=="DIALOG")){var t=document.activeElement;(!t||t===document.body||e.target.contains(t))&&je()}},!0);var V=null;o.addEventListener("submit",function(e){var t=e.target.closest(".lumn-note-list li");t&&(V=Array.prototype.indexOf.call(t.parentNode.children,t))},!0);function Le(){return o.querySelector("[data-rules]")}function ie(){var e=Le();if(e){var t=e.querySelectorAll("[data-rule]");t.forEach(function(c,u){var s=c.querySelector(".lumn-rule-legend");s&&(s.textContent=d(l.ruleN,u+1));var h=c.querySelector("[data-rule-num]");h&&(h.textContent=" "+d(l.ruleNLower,u+1))});var r=o.querySelector("[data-rule-count]"),n=o.querySelector("[data-add-rule]"),a=n?parseInt(n.getAttribute("data-max"),10):40;r&&(r.textContent=d(l.ruleCount,t.length,a));var i=o.querySelector("[data-rules-empty]");return i&&(i.hidden=t.length>0),t.length}}function ke(e){var t=e.querySelector("[data-rule-action]"),r=t&&t.options[t.selectedIndex],n=r&&r.getAttribute("data-kind")||"selector",a=l.kinds&&l.kinds[n]||["",""],i=e.querySelector("[data-target-label]"),c=e.querySelector("[data-target-help]"),u=e.querySelector("[data-rule-target]");i&&(i.textContent=a[0]),c&&(c.textContent=a[1]),u&&(n==="selector"?u.removeAttribute("inputmode"):u.setAttribute("inputmode","numeric"));var s=e.querySelector("[data-once-wrap]");s&&(s.hidden=n!=="selector");var h=e.querySelector("[data-match]");h&&n!=="selector"&&(h.textContent="");var y=e.querySelector("[data-rule-name]"),S=e.querySelector("[data-custom-wrap]");y&&S&&(S.hidden=y.value!=="custom");var f=e.querySelector("[data-rule-on]");e.classList.toggle("is-off",!!f&&!f.checked)}var Y={click:"cta_click",hover:"cta_click",form_start:"form_start",form_submit:"form_submit",seen:"section_view",scroll:"scroll_depth",time:"engaged",video:"video_play"};function He(e,t){var r=e.querySelector("[data-rule-name]"),n=e.querySelector('select[name$="[label]"]'),a=Object.keys(Y).map(function(i){return Y[i]});r&&a.indexOf(r.value)>-1&&Y[t]&&(r.value=Y[t]),n&&(t==="scroll"||t==="time")&&(n.value="none"),n&&t==="form_start"&&n.value==="text"&&(n.value="field")}o.addEventListener("change",function(e){var t=e.target.closest("[data-rule]");if(t&&(e.target.matches("[data-rule-action]")&&He(t,e.target.value),e.target.matches("[data-rule-action], [data-rule-name], [data-rule-on]")&&ke(t),e.target.matches("[data-rule-name]")&&e.target.value==="custom")){var r=t.querySelector("[data-custom-wrap] input");r&&r.focus()}}),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule]");if(t){var r=Le(),n=o.querySelector("[data-rule-template]");if(!r||!n)return;var a=parseInt(t.getAttribute("data-max"),10)||40;if(r.querySelectorAll("[data-rule]").length>=a){m(d(l.maxRules,a));return}var i="n"+Date.now().toString(36)+Math.floor(Math.random()*1e4).toString(36),c=n.innerHTML.split("__KEY__").join(i).split("__N__").join("0"),u=document.createElement("ol");u.innerHTML=c;var s=u.firstElementChild;r.appendChild(s);var h=ie(),y=s.querySelector("[data-rule-action]");y&&y.focus(),m(d(l.ruleAdded,h));return}var S=e.target.closest("[data-remove-rule]");if(S){var f=S.closest("[data-rule]");if(!f)return;var A=f.nextElementSibling||f.previousElementSibling;f.parentNode.removeChild(f);var b=ie(),g=A?A.querySelector("[data-remove-rule]"):o.querySelector("[data-add-rule]");g&&g.focus(),m(d(b===1?l.ruleRemoved1:l.ruleRemoved,b));return}var C=e.target.closest("[data-check-selectors]");C&&We(C)});function oe(e){var t=document.getElementById("lumn-test-path"),r=document.getElementById("lumn-test-err");r&&(r.textContent=e||"",r.hidden=!e),t&&(e?t.setAttribute("aria-invalid","true"):t.removeAttribute("aria-invalid")),e&&m(e)}function We(e){var t=document.getElementById("lumn-test-path"),r=t?t.value.trim():"/",n;try{n=new URL(r,window.location.origin)}catch{n=null}if(!n||r.charAt(0)!=="/"||r.indexOf("//")===0||n.origin!==window.location.origin){oe(l.badPath),t&&t.focus();return}e.setAttribute("aria-disabled","true"),oe(""),m(l.checking),fetch(n.pathname+n.search,{credentials:"omit",redirect:"follow"}).then(function(a){if(!a.ok)throw new Error("status");return a.text()}).then(function(a){var i=new DOMParser().parseFromString(a,"text/html"),c=0,u=[];o.querySelectorAll("[data-rules] [data-rule]").forEach(function(s,h){var y=s.querySelector("[data-rule-action]"),S=y&&y.options[y.selectedIndex],f=s.querySelector("[data-match]");if(!(!f||!S||S.getAttribute("data-kind")!=="selector")){var A=s.querySelector("[data-rule-target]").value.trim();if(!A){f.textContent="";return}c++;var b=-1;try{b=i.querySelectorAll(A).length}catch{b=-1}b<1&&u.push(h+1),f.className="lumn-match "+(b>0?"is-good":"is-warn"),f.textContent=b<0?l.badSelector:b===0?d(l.noMatch,n.pathname):b===1?d(l.matchOne,n.pathname):d(l.matches,b,n.pathname)}}),m(d(l.checked,c,n.pathname)+(u.length?" "+d(l.noMatchRules,u.join(", ")):""))}).catch(function(){oe(l.pathFailed)}).then(function(){e.removeAttribute("aria-disabled")})}var q=document.getElementById("lumn-savebar"),Fe=q&&q.querySelector("[data-savebar-text]"),Ce=q&&q.querySelector("[data-savebar-save]"),M={},w={},p=null,le=!1,ue=!1;function ce(e){if(!e.dataset.saveKey){var t=e.parentElement&&e.parentElement.closest("[id]");e.dataset.saveKey=e.id||(t?t.id:"form")}return e.dataset.saveKey}function Ie(e){var t=[];return Array.prototype.forEach.call(e.elements,function(r){if(!(!r.name||r.disabled||r.type==="file"||r.type==="submit"||r.type==="button")&&!(r.name.indexOf("__KEY__")>-1||r.name==="_wpnonce")&&!((r.type==="checkbox"||r.type==="radio")&&!r.checked)){if(r.tagName==="SELECT"&&r.multiple){Array.prototype.forEach.call(r.selectedOptions,function(n){t.push(r.name+"="+n.value)});return}t.push(r.name+"="+r.value)}}),t.join("&")}function Te(){return o.querySelectorAll("form[data-save-bar]")}function K(e){var t=null;return Te().forEach(function(r){ce(r)===e&&(t=r)}),t}function se(){Te().forEach(function(e){var t=ce(e);e.querySelector('[data-error-summary], [aria-invalid="true"]')&&w[t]||M[t]&&M[t].form===e||(M[t]={form:e,state:Ie(e),html:e.innerHTML},delete w[t])}),Object.keys(w).forEach(function(e){K(e)||delete w[e]}),p&&!w[p]&&(p=Object.keys(w)[0]||null),de()}function Pe(e){var t=e.closest("section"),r=t&&t.querySelector("h2");return r||(r=o.querySelector("h1")),r?r.textContent.replace(/\s+/g," ").trim():""}function Oe(e){return e.querySelector('button[type="submit"]:not([name])')||e.querySelector('button[type="submit"]')}function de(){if(q){var e=p&&w[p]?K(p):null,t=!1;if(e){var r=Oe(e);if(r){var n=r.getBoundingClientRect(),a=n.bottom>0&&n.top<window.innerHeight-8&&n.height>0;t=!a,Ce.textContent=r.textContent.replace(/\s+/g," ").trim()}var i=Object.keys(w).length,c=Pe(e);Fe.textContent=i>1||!c?l.unsavedPlain:d(l.unsavedIn,c)}if(t&&q.hidden){var u=o.getBoundingClientRect();q.style.left=Math.max(0,u.left)+"px",q.style.right=Math.max(0,window.innerWidth-u.right)+"px"}q.hidden=!t,o.classList.toggle("has-savebar",t),t&&!le&&(le=!0,m(l.unsaved)),e||(le=!1)}}var fe=!1;function ve(){fe||(fe=!0,requestAnimationFrame(function(){fe=!1,de()}))}function me(e){var t=e.target.closest&&e.target.closest("form[data-save-bar]");if(t){var r=ce(t);M[r]||se();var n=Ie(t)!==M[r].state;n?(w[r]=!0,p=r):(delete w[r],p===r&&(p=Object.keys(w)[0]||null)),ve()}}q&&(o.addEventListener("input",me),o.addEventListener("change",me),o.addEventListener("click",function(e){var t=e.target.closest("[data-add-rule], [data-remove-rule]")&&document.getElementById("lumn-tags-form");t&&setTimeout(function(){me({target:t})},0)}),window.addEventListener("scroll",ve,{passive:!0}),window.addEventListener("resize",function(){q.hidden=!0,ve()}),Ce.addEventListener("click",function(){var e=p&&K(p);if(e){var t=Oe(e);typeof e.requestSubmit=="function"?e.requestSubmit(t||void 0):t&&t.click()}}),q.querySelector("[data-savebar-undo]").addEventListener("click",function(){var e=p&&K(p);if(!(!e||!M[p])){e.innerHTML=M[p].html,window.htmx&&window.htmx.process&&window.htmx.process(e),e.querySelectorAll("[data-rule]").forEach(function(r){ke(r)}),ie(),delete w[p],p=Object.keys(w)[0]||null,de(),m(l.undone);var t=e.querySelector('input:not([type="hidden"]), select, textarea, button');t&&t.focus()}}),o.addEventListener("submit",function(e){!e.target.matches("form[data-save-bar]")&&!e.target.hasAttribute("hx-post")&&(ue=!0,setTimeout(function(){ue=!1},1500))}),window.addEventListener("beforeunload",function(e){ue||!Object.keys(w).length||(e.preventDefault(),e.returnValue="")}),se(),document.addEventListener("htmx:after:settle",function(){setTimeout(se,0)}));var ge=!1;document.addEventListener("htmx:before:swap",function(){var e=document.activeElement;ge=!!(e&&e.closest&&e.closest("#lumn-scan-actions"))}),document.addEventListener("htmx:after:settle",function(e){if(U){var t=document.activeElement;if(!t||t===document.body||!document.contains(t)){var r=document.querySelector(U);r&&r.focus()}U=null}if(ge){var n=document.activeElement;if(!n||n===document.body||!document.contains(n)){var a=document.querySelector("#lumn-scan-actions button");a&&a.focus()}ge=!1}Se(),ye();var i=e.target;if(i&&i.nodeType===1){var c=i.querySelector("dialog[data-reopen]");if(c&&!c.open&&typeof c.showModal=="function"){c.removeAttribute("data-reopen"),c.showModal();var u=c.querySelector("[data-error-summary]");u&&u.focus()}}var s=i&&i.nodeType===1&&i.querySelector?i.querySelector("[data-filter-state]"):null;if(s){var h=s.getAttribute("data-error")||"",y=document.getElementById("lumn-entry"),S=document.getElementById("lumn-entry-err");S&&(S.textContent=h,S.hidden=!h),y&&(h?y.setAttribute("aria-invalid","true"):y.removeAttribute("aria-invalid"))}if(i&&i.nodeType===1&&o.contains(i)){var f=i.querySelector("[data-announce]:not([data-announced])");f&&f.setAttribute("data-announced","1");var A=document.activeElement,b=!A||A===document.body||!document.contains(A)||!!(A.closest&&A.closest("dialog:not([open])")),g=null;if(b&&i.querySelector(".lumn-notes")&&!i.querySelector("dialog[open]")){var C=i.querySelectorAll('.lumn-note-list button[type="submit"]');V!==null&&C.length&&(g=C[Math.min(V,C.length-1)]),g||(g=i.querySelector("[data-open-dialog]"))}else b&&B&&i.querySelector(B)?g=i.querySelector(B):b&&(g=i.querySelector("[data-error-summary]")||i.querySelector('[aria-invalid="true"]')||(f&&!f.hasAttribute("data-no-focus")?f:null)||i.querySelector('button[type="submit"]'));var W=i.querySelector("[data-take-focus]");W&&(g=W),V=null,B=null,g&&g.focus(),f&&g!==f&&m(f.textContent.replace(/\s+/g," ").trim())}Object.keys(ee).forEach(function(I){var X=document.getElementById(I),R=X&&o.querySelector('[aria-controls="'+I+'"]');R&&ee[I]&&Z(R,X,!0)});var F=o.querySelector(".lumn-day-chart");F&&F.setAttribute("data-kind",D),o.querySelectorAll(".lumn-seg-btn[data-kind]").forEach(function(I){I.setAttribute("aria-pressed",String(I.getAttribute("data-kind")===D))}),N()}),document.addEventListener("htmx:response:error",function(e){var t=e.detail&&e.detail.ctx&&e.detail.ctx.response?e.detail.ctx.response.status:0;t!==422&&O(l.loadError)}),document.addEventListener("htmx:error",function(){O(l.loadError)});function pe(e,t){var r=e.querySelector(".lumn-nav-btn"),n=e.querySelector(".lumn-nav-menu");!n||n.hidden||(n.hidden=!0,r.setAttribute("aria-expanded","false"),t&&r.focus())}function he(e){o.querySelectorAll("[data-nav-group]").forEach(function(t){t!==e&&pe(t,!1)})}o.addEventListener("click",function(e){var t=e.target.closest(".lumn-nav-btn");if(!t){e.target.closest("[data-nav-group]")||he(null);return}var r=t.closest("[data-nav-group]"),n=r.querySelector(".lumn-nav-menu"),a=n.hidden;he(r),n.hidden=!a,t.setAttribute("aria-expanded",String(a)),a&&(n.classList.remove("is-right"),n.getBoundingClientRect().right>document.documentElement.clientWidth-8&&n.classList.add("is-right"))}),document.addEventListener("click",function(e){o.contains(e.target)||he(null)}),o.addEventListener("keydown",function(e){if(e.key==="Escape"){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&!t.querySelector(".lumn-nav-menu").hidden&&(e.preventDefault(),pe(t,!0))}}),o.addEventListener("focusout",function(e){var t=e.target.closest&&e.target.closest("[data-nav-group]");t&&e.relatedTarget&&!t.contains(e.relatedTarget)&&pe(t,!1)}),Se(),ye(),N();var Me=o.querySelector("[data-focus-on-load]");Me&&Me.focus()})(); -
lumn-analytics/trunk/assets/src/admin.css
r3748978 r3753587 850 850 .lumn .lumn-views-pop .lumn-callout { margin: 0 0 0.75rem; } 851 851 .lumn .lumn-views-pop form { margin: 0; } 852 853 /* Review note on the Overview */ 854 .lumn .lumn-review-nag { align-items: flex-start; } 855 .lumn .lumn-review-body { flex: 1; } 856 .lumn .lumn-review-body p { margin: 0; } 857 .lumn .lumn-review-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 10px; } -
lumn-analytics/trunk/assets/src/admin.js
r3744314 r3753587 538 538 var openerEl = null; 539 539 var pendingFocus = null; 540 var goneFocus = null; 540 541 app.addEventListener('click', function (e) { 541 542 var opener = e.target.closest('[data-dialog-opener], [data-open-dialog]'); … … 543 544 var fa = e.target.closest('[data-focus-after]'); 544 545 if (fa) pendingFocus = fa.getAttribute('data-focus-after'); 546 // A control that removes its own note: where focus goes once the note is gone. 547 var gf = e.target.closest('[data-gone-focus]'); 548 if (gf) goneFocus = gf.getAttribute('data-gone-focus'); 545 549 }, true); 550 // A link that opens somewhere else and also tells LUMN it was used (like "Leave a review"). 551 // The link opens normally; the note it belongs to is removed once the new tab has opened. 552 app.addEventListener('click', function (e) { 553 var ping = e.target.closest('a[data-ping]'); 554 if (!ping || !window.htmx) return; 555 var url = ping.getAttribute('data-ping'); 556 var tgt = ping.getAttribute('data-ping-target'); 557 setTimeout(function () { window.htmx.ajax('POST', url, { target: tgt, swap: 'outerHTML' }); }, 300); 558 }); 546 559 // A select that reloads its own panel (like the region map's country picker) keeps focus too. 547 560 app.addEventListener('change', function (e) { … … 893 906 }); 894 907 document.addEventListener('htmx:after:settle', function (e) { 908 if (goneFocus) { 909 var a0 = document.activeElement; 910 if (!a0 || a0 === document.body || !document.contains(a0)) { 911 var g = document.querySelector(goneFocus); 912 if (g) g.focus(); 913 } 914 goneFocus = null; 915 } 895 916 if (focusInScanActions) { 896 917 var act = document.activeElement; -
lumn-analytics/trunk/includes/Admin/Admin.php
r3744314 r3753587 215 215 ) 216 216 ); 217 if ( self::show_donate() ) { 217 // One note at a time: the review request first, then (free only) the donation note. 218 if ( self::show_review() ) { 219 echo wp_kses( View::render( 'partials/review-nag' ), \Lumn\Admin\View::allowed_html() ); 220 } elseif ( self::show_donate() ) { 218 221 echo wp_kses( View::render( 'partials/donate-nag' ), \Lumn\Admin\View::allowed_html() ); 219 222 } 220 223 echo wp_kses( View::render( 'pages/overview', array( 'reports' => $reports ) ), \Lumn\Admin\View::allowed_html() ); 221 224 self::close(); 225 } 226 227 /** Where the review note sends people: the new-review form on WordPress.org. */ 228 const REVIEW_URL = 'https://wordpress.org/support/plugin/lumn-analytics/reviews/#new-post'; 229 230 /** Days LUMN must be in use, and pageviews it must have counted, before asking for a review. */ 231 const REVIEW_AFTER_DAYS = 14; 232 const REVIEW_MIN_VIEWS = 100; 233 234 /** Days "Maybe later" hides the review note. */ 235 const REVIEW_SNOOZE_DAYS = 30; 236 237 /** Seconds since LUMN was first set up here, or 0 when unknown (sites from before 0.12.3 start counting now). */ 238 public static function days_in_use() { 239 $since = (int) get_option( 'lumn_installed', 0 ); 240 if ( ! $since ) { 241 add_option( 'lumn_installed', time(), '', false ); 242 return 0; 243 } 244 return (int) floor( ( time() - $since ) / DAY_IN_SECONDS ); 245 } 246 247 /** 248 * The review note: managers only, after two weeks of real use (not demo data), until they leave a 249 * review or say no. "Maybe later" hides it for 30 days. 250 */ 251 public static function show_review() { 252 if ( ! UiRoutes::can_manage() || \Lumn\Data\Demo::active() ) { 253 return false; 254 } 255 $state = get_user_meta( get_current_user_id(), 'lumn_review_nag', true ); 256 if ( 'done' === $state || ( is_numeric( $state ) && (int) $state > time() ) ) { 257 return false; 258 } 259 if ( self::days_in_use() < self::REVIEW_AFTER_DAYS ) { 260 return false; 261 } 262 global $wpdb; 263 $views = (int) $wpdb->get_var( "SELECT COALESCE(SUM(value), 0) FROM {$wpdb->prefix}lumn_daily WHERE kind = 'pv' AND demo = 0" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery 264 return $views >= self::REVIEW_MIN_VIEWS; 222 265 } 223 266 … … 233 276 return false; 234 277 } 235 $since = (int) get_option( 'lumn_installed', 0 ); 236 if ( ! $since ) { 237 add_option( 'lumn_installed', time(), '', false ); // Sites from before 0.12.3 start counting now. 238 return false; 239 } 240 return time() - $since >= self::DONATE_AFTER_DAYS * DAY_IN_SECONDS; 278 return self::days_in_use() >= self::DONATE_AFTER_DAYS; 241 279 } 242 280 -
lumn-analytics/trunk/includes/Admin/UiRoutes.php
r3748978 r3753587 50 50 self::route( '/weekly/test', 'POST', 'weekly_test', $manage ); 51 51 self::route( '/geo/status', 'GET', 'geo_status', $manage ); 52 self::route( '/review/later', 'POST', 'review_later', $manage ); 53 self::route( '/review/done', 'POST', 'review_done', $manage ); 52 54 self::route( '/donate/dismiss', 'POST', 'donate_dismiss', $manage ); 53 55 … … 111 113 } 112 114 115 116 /** "Maybe later" on the review note: hide it for this user for 30 days. */ 117 public static function review_later() { 118 update_user_meta( get_current_user_id(), 'lumn_review_nag', (string) ( time() + Admin::REVIEW_SNOOZE_DAYS * DAY_IN_SECONDS ) ); 119 return self::html( '' ); 120 } 121 122 /** "Leave a review" or "Don't ask again": hide the review note for this user for good. */ 123 public static function review_done() { 124 update_user_meta( get_current_user_id(), 'lumn_review_nag', 'done' ); 125 return self::html( '' ); 126 } 113 127 114 128 /** Hide the donation note on the Overview for this user, for good. */ -
lumn-analytics/trunk/includes/Admin/View.php
r3744314 r3753587 49 49 } 50 50 ); 51 $attrs = array_fill_keys( array( 'accept', 'action', 'alt', 'aria-atomic', 'aria-busy', 'aria-checked', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'autocapitalize', 'autocomplete', 'autofocus', 'charset', 'checked', 'class', 'clip-path', 'cols', 'colspan', 'content', 'contenteditable', 'cx', 'cy', 'd', 'datetime', 'decoding', 'dir', 'disabled', 'dominant-baseline', 'download', 'draggable', 'enctype', 'fill', 'fill-opacity', 'fill-rule', 'focusable', 'font-size', 'font-weight', 'for', 'form', 'gradienttransform', 'gradientunits', 'headers', 'height', 'hidden', 'href', 'hreflang', 'hx-boost', 'hx-config', 'hx-confirm', 'hx-delete', 'hx-disable d-elt', 'hx-ext', 'hx-get', 'hx-headers', 'hx-headers:inherited', 'hx-include', 'hx-indicator', 'hx-on', 'hx-params', 'hx-patch', 'hx-post', 'hx-push-url', 'hx-put', 'hx-select', 'hx-select-oob', 'hx-status', 'hx-swap', 'hx-swap-oob', 'hx-sync', 'hx-target', 'hx-trigger', 'hx-vals', 'id', 'inert', 'inputmode', 'lang', 'list', 'loading', 'max', 'maxlength', 'method', 'min', 'minlength', 'multiple', 'name', 'novalidate', 'offset', 'opacity', 'open', 'pattern', 'placeholder', 'points', 'popover', 'popovertarget', 'popovertargetaction', 'preserveaspectratio', 'r', 'readonly', 'referrerpolicy', 'rel', 'required', 'reversed', 'role', 'rows', 'rowspan', 'rx', 'ry', 'sandbox', 'scope', 'selected', 'size', 'sizes', 'span', 'spellcheck', 'src', 'srcset', 'start', 'step', 'stop-color', 'stop-opacity', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-opacity', 'stroke-width', 'style', 'tabindex', 'target', 'text-anchor', 'title', 'transform', 'translate', 'type', 'value', 'vector-effect', 'viewbox', 'width', 'wrap', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2' ), true );51 $attrs = array_fill_keys( array( 'accept', 'action', 'alt', 'aria-atomic', 'aria-busy', 'aria-checked', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'autocapitalize', 'autocomplete', 'autofocus', 'charset', 'checked', 'class', 'clip-path', 'cols', 'colspan', 'content', 'contenteditable', 'cx', 'cy', 'd', 'datetime', 'decoding', 'dir', 'disabled', 'dominant-baseline', 'download', 'draggable', 'enctype', 'fill', 'fill-opacity', 'fill-rule', 'focusable', 'font-size', 'font-weight', 'for', 'form', 'gradienttransform', 'gradientunits', 'headers', 'height', 'hidden', 'href', 'hreflang', 'hx-boost', 'hx-config', 'hx-confirm', 'hx-delete', 'hx-disable', 'hx-get', 'hx-headers', 'hx-headers:inherited', 'hx-ignore', 'hx-include', 'hx-indicator', 'hx-patch', 'hx-post', 'hx-push-url', 'hx-put', 'hx-select', 'hx-select-oob', 'hx-status', 'hx-swap', 'hx-swap-oob', 'hx-sync', 'hx-target', 'hx-trigger', 'hx-vals', 'id', 'inert', 'inputmode', 'lang', 'list', 'loading', 'max', 'maxlength', 'method', 'min', 'minlength', 'multiple', 'name', 'novalidate', 'offset', 'opacity', 'open', 'pattern', 'placeholder', 'points', 'popover', 'popovertarget', 'popovertargetaction', 'preserveaspectratio', 'r', 'readonly', 'referrerpolicy', 'rel', 'required', 'reversed', 'role', 'rows', 'rowspan', 'rx', 'ry', 'sandbox', 'scope', 'selected', 'size', 'sizes', 'span', 'spellcheck', 'src', 'srcset', 'start', 'step', 'stop-color', 'stop-opacity', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-opacity', 'stroke-width', 'style', 'tabindex', 'target', 'text-anchor', 'title', 'transform', 'translate', 'type', 'value', 'vector-effect', 'viewbox', 'width', 'wrap', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2' ), true ); 52 52 $attrs['data-*'] = true; 53 53 $allowed = array_fill_keys( array( 'a', 'abbr', 'article', 'aside', 'b', 'blockquote', 'br', 'button', 'caption', 'circle', 'clippath', 'code', 'col', 'colgroup', 'dd', 'defs', 'del', 'desc', 'details', 'dialog', 'div', 'dl', 'dt', 'ellipse', 'em', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'g', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'line', 'lineargradient', 'main', 'mark', 'meter', 'nav', 'ol', 'optgroup', 'option', 'output', 'p', 'path', 'polygon', 'polyline', 'pre', 'progress', 'radialgradient', 'rect', 's', 'section', 'select', 'small', 'span', 'stop', 'strong', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template', 'text', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'tspan', 'u', 'ul', 'use' ), $attrs ); -
lumn-analytics/trunk/lumn.php
r3748978 r3753587 1 1 <?php 2 2 /** 3 * Plugin Name: LUMN Analytics 3 * Plugin Name: LUMN Analytics: Privacy-First, Cookieless Google Analytics Alternative 4 4 * Plugin URI: https://envsnstudios.com/lumn 5 5 * Description: Self-hosted, privacy-first analytics for WordPress. Cookieless, no stored IP addresses, and nothing leaves your server. Designed to support HIPAA and GDPR programs. 6 * Version: 1.1. 06 * Version: 1.1.1 7 7 * Requires at least: 6.9 8 8 * Requires PHP: 8.1 … … 34 34 } 35 35 36 define( 'LUMN_VERSION', '1.1. 0' );36 define( 'LUMN_VERSION', '1.1.1' ); 37 37 define( 'LUMN_DB_VERSION', 14 ); 38 38 define( 'LUMN_FILE', __FILE__ ); -
lumn-analytics/trunk/readme.txt
r3748978 r3753587 1 === LUMN Analytics ===1 === LUMN Analytics: Privacy-First, Cookieless Google Analytics Alternative === 2 2 Contributors: envsnstudios 3 3 Donate link: https://licenses.envsnstudios.com/donate 4 Tags: analytics, privacy, cookieless, statistics, gdpr4 Tags: analytics, google analytics, privacy, cookieless, gdpr 5 5 Requires at least: 6.9 6 6 Tested up to: 7.1 7 7 Requires PHP: 8.1 8 Stable tag: 1.1. 08 Stable tag: 1.1.1 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 Self-hosted, privacy-first analytics. Cookieless, no stored IP addresses, and nothingleaves your server.12 Privacy-first Google Analytics alternative for WordPress. Cookieless, no stored IP addresses, and your data never leaves your server. 13 13 14 14 == Description == … … 41 41 LUMN (free) includes the dashboard (key numbers, pageviews by day, sources, top pages, content by type, author or category, devices, live view, events, countries and AI assistant visits), a weekly summary email, imports from other analytics plugins, a Popular posts block, a tracking health check, tag rules for clicks, scrolling, time on page and sections seen, the privacy presets and records page, chart notes, post stats in the editor, CSV downloads, one-click demo data and a built-in consent notice. 42 42 43 LUMN Analytics Pro adds LUMN cards on the WordPress Dashboard, journeys and funnels, campaigns, site speed, broken links, JavaScript errors and form analytics, location, WooCommerce revenue, survey capture, visitor labels, Site health (the site-quality scanner with saved scan records, and page accessibility checks with markers on the page, quick fixes, saved page copies and developer exports), PDF and Excel reports, designed emailed reports and alerts, states and regions with maps, site search, saved dashboard views, Google Search Console data (off until you connect your own account), an audit log and Google Analytics import. Agency tools (client share links, a rollup of all your sites, white-label branding, branded client report emails and a MainWP add-on) come with LUMN Analytics Pro on the Agency plan.43 LUMN Analytics Pro adds LUMN cards on the WordPress Dashboard, journeys and funnels, campaigns, site speed, broken links, JavaScript errors and form analytics, location, WooCommerce revenue, survey capture, visitor labels, Site health (the site-quality scanner with saved scan records, and page accessibility checks with markers on the page, quick fixes, saved page copies and developer exports), PDF and Excel reports, designed emailed reports and alerts, states and regions with maps, site search, saved dashboard views, Google Search Console data (off until you connect your own account), an audit log and Google Analytics import. Agency tools (client share links, a rollup of all your sites, white-label branding, branded client report emails and MainWP support) come with LUMN Analytics Pro on the Agency plan. 44 44 45 45 Moving from free to Pro keeps all your data. Turning on Pro turns the free plugin off. … … 127 127 128 128 == Changelog == 129 130 = 1.1.1 = 131 * New: after two weeks of real use, the Overview asks once for a review on WordPress.org. "Maybe later" hides it for 30 days, and "Don't ask again" hides it for good. Only people who manage LUMN see it, and it never shows with demo data on. 132 * Better: after you close a note on the Overview, keyboard focus moves to the date range instead of the top of the page. 129 133 130 134 = 1.1.0 = -
lumn-analytics/trunk/templates/partials/donate-nag.php
r3744314 r3753587 19 19 <a href="<?php echo esc_url( Admin::DONATE_URL ); ?>" target="_blank" rel="noopener"><?php esc_html_e( 'Support LUMN', 'lumn-analytics' ); ?><span class="lumn-sr-only"> <?php esc_html_e( '(opens in a new tab)', 'lumn-analytics' ); ?></span></a> 20 20 </p> 21 <button type="button" class="lumn-icon-btn lumn-nag-close" hx-post="<?php echo esc_url( UiRoutes::url( 'donate/dismiss' ) ); ?>" hx-target="#lumn-donate-nag" hx-swap="outerHTML"><?php echo wp_kses( View::icon( 'x', 'lumn-ico-sm' ), \Lumn\Admin\View::allowed_html() ); ?><span class="lumn-sr-only"><?php esc_html_e( 'Dismiss donation note', 'lumn-analytics' ); ?></span></button>21 <button type="button" class="lumn-icon-btn lumn-nag-close" data-gone-focus="#lumn-range" hx-post="<?php echo esc_url( UiRoutes::url( 'donate/dismiss' ) ); ?>" hx-target="#lumn-donate-nag" hx-swap="outerHTML"><?php echo wp_kses( View::icon( 'x', 'lumn-ico-sm' ), \Lumn\Admin\View::allowed_html() ); ?><span class="lumn-sr-only"><?php esc_html_e( 'Dismiss donation note', 'lumn-analytics' ); ?></span></button> 22 22 </div> -
lumn-analytics/trunk/uninstall.php
r3748978 r3753587 64 64 $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_lumn\_%' OR option_name LIKE '\_transient\_timeout\_lumn\_%'" ); // phpcs:ignore WordPress.DB 65 65 // lumn_visitor_label maps a person to a label code: the most identifying thing linked to LUMN. 66 foreach ( array( 'lumn_layout', 'lumn_theme', 'lumn_range', 'lumn_compare', 'lumn_visitor_label', 'lumn_license_nag', 'lumn_donate_nag' ) as $meta ) {66 foreach ( array( 'lumn_layout', 'lumn_theme', 'lumn_range', 'lumn_compare', 'lumn_visitor_label', 'lumn_license_nag', 'lumn_donate_nag', 'lumn_review_nag' ) as $meta ) { 67 67 delete_metadata( 'user', 0, $meta, '', true ); 68 68 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)