Plugin Directory

Changeset 3778434


Ignore:
Timestamp:
11/01/2026 06:58:35 PM (4 hours ago)
Author:
codersaleh
Message:

version update 1.1.1 to 1.1.2

Location:
coderembassy-order-vanguard
Files:
79 added
17 edited

Legend:

Unmodified
Added
Removed
  • coderembassy-order-vanguard/trunk/build/index.asset.php

    r3701248 r3778434  
    1 <?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-api-fetch', 'wp-element', 'wp-i18n'), 'version' => '01b16efc32bf314bce11');
     1<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-api-fetch', 'wp-element', 'wp-i18n'), 'version' => 'af9cabead1659cf9c5ec');
  • coderembassy-order-vanguard/trunk/build/index.js

    r3701248 r3778434  
    1 (()=>{"use strict";var e={266(e,a,r){const s=window.wp.element,o=window.wp.i18n,d=window.wp.apiFetch;var n=r.n(d);const t=window.ceogBoot||{};t.nonce&&n().use(n().createNonceMiddleware(t.nonce));const i=e=>"/ceog/v1/"+e,c=()=>n()({path:i("settings")}),l=e=>n()({path:i("settings"),method:"POST",data:{settings:e}}),g=e=>n()({path:i("mode"),method:"POST",data:{mode:e}});function h(e){const a=Number(e?.data?.status||e?.status||0);return 401===a||403===a?(0,o.__)("Your admin session expired. Please refresh the page and try again.","coderembassy-order-vanguard"):e?.message||(0,o.__)("Order Vanguard could not load this data. Please try again.","coderembassy-order-vanguard")}const u=window.React,m=(...e)=>e.filter((e,a,r)=>Boolean(e)&&""!==e.trim()&&r.indexOf(e)===a).join(" ").trim(),_=e=>{const a=(e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,a,r)=>r?r.toUpperCase():a.toLowerCase()))(e);return a.charAt(0).toUpperCase()+a.slice(1)};var b={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const y=e=>{for(const a in e)if(a.startsWith("aria-")||"role"===a||"title"===a)return!0;return!1},p=(0,u.createContext)({}),v=(0,u.forwardRef)(({color:e,size:a,strokeWidth:r,absoluteStrokeWidth:s,className:o="",children:d,iconNode:n,...t},i)=>{const{size:c=24,strokeWidth:l=2,absoluteStrokeWidth:g=!1,color:h="currentColor",className:_=""}=(0,u.useContext)(p)??{},v=s??g?24*Number(r??l)/Number(a??c):r??l;return(0,u.createElement)("svg",{ref:i,...b,width:a??c??b.width,height:a??c??b.height,stroke:e??h,strokeWidth:v,className:m("lucide",_,o),...!d&&!y(t)&&{"aria-hidden":"true"},...t},[...n.map(([e,a])=>(0,u.createElement)(e,a)),...Array.isArray(d)?d:[d]])}),x=(e,a)=>{const r=(0,u.forwardRef)(({className:r,...s},o)=>{return(0,u.createElement)(v,{ref:o,iconNode:a,className:m(`lucide-${d=_(e),d.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,r),...s});var d});return r.displayName=_(e),r},j=x("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]),k=x("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]),w=window.ReactJSXRuntime;function f({message:e,onRetry:a}){return(0,w.jsxs)("div",{className:"ceog-error",role:"alert",children:[(0,w.jsx)(j,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:(0,o.__)("Order Vanguard could not connect","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:e})]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:a,children:[(0,w.jsx)(k,{size:16,"aria-hidden":"true"}),(0,o.__)("Retry","coderembassy-order-vanguard")]})]})}const N=x("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),C=x("layout-dashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]),S=x("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]),M=x("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]),P=x("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]),z=x("blocks",[["path",{d:"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2",key:"1ah6g2"}],["rect",{x:"14",y:"2",width:"8",height:"8",rx:"1",key:"88lufb"}]]),E=x("cloud",[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]]),A=x("bell-ring",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M22 8c0-2.3-.8-4.3-2-6",key:"5bb3ad"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}],["path",{d:"M4 2C2.8 3.7 2 5.7 2 8",key:"tap9e0"}]]),I=x("list-filter",[["path",{d:"M2 5h20",key:"1fs1ex"}],["path",{d:"M6 12h12",key:"8npq4p"}],["path",{d:"M9 19h6",key:"456am0"}]]),O=x("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),B=x("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]),R=x("badge-question-mark",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["line",{x1:"12",x2:"12.01",y1:"17",y2:"17",key:"io3f8k"}]]),L=x("shield-ban",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m4.243 5.21 14.39 12.472",key:"1c9a7c"}]]),V=x("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]),T=x("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]),D=[{id:"dashboard",label:()=>(0,o.__)("Dashboard","coderembassy-order-vanguard"),icon:C},{id:"activity-log",label:()=>(0,o.__)("Activity Log","coderembassy-order-vanguard"),icon:S},{id:"history-reporting",label:()=>(0,o.__)("History & Reports","coderembassy-order-vanguard"),icon:M,proOnly:!0},{id:"circuit-breakers",label:()=>(0,o.__)("Circuit Breakers","coderembassy-order-vanguard"),icon:P},{id:"store-api",label:()=>(0,o.__)("Store API Guard","coderembassy-order-vanguard"),icon:z},{id:"turnstile",label:()=>(0,o.__)("Turnstile","coderembassy-order-vanguard"),icon:E,proOnly:!0},{id:"alerts",label:()=>(0,o.__)("Alerts","coderembassy-order-vanguard"),icon:A,proOnly:!0},{id:"lists",label:()=>(0,o.__)("Lists","coderembassy-order-vanguard"),icon:I},{id:"settings",label:()=>(0,o.__)("Settings","coderembassy-order-vanguard"),icon:O},{id:"privacy-logs",label:()=>(0,o.__)("Privacy & Logs","coderembassy-order-vanguard"),icon:B},{id:"help",label:()=>(0,o.__)("Help","coderembassy-order-vanguard"),icon:R},{id:"auto-blocklist",label:()=>(0,o.__)("Auto Blocklisting","coderembassy-order-vanguard"),icon:L,proOnly:!0},{id:"attack-cleanup",label:()=>(0,o.__)("Attack Cleanup","coderembassy-order-vanguard"),icon:V,proOnly:!0},{id:"pro-license",label:()=>(0,o.__)("Pro License","coderembassy-order-vanguard"),icon:T,proOnly:!0}];function q(e=!1){const a=window.location.hash.replace(/^#\/?/,"").split("?")[0],r=D.find(e=>e.id===a);return!r||r.proOnly&&!e?"dashboard":a}function F(e){window.location.hash="#/"+e}function W({route:e,theme:a,boot:r,mobileOpen:s,onDismiss:d,onNavigate:n}){const t="dark"===a?r.logoDark:r.logoLight;return(0,w.jsxs)(w.Fragment,{children:[s&&(0,w.jsx)("button",{type:"button",className:"ceog-sidebar-overlay",onClick:d,"aria-label":(0,o.__)("Close navigation","coderembassy-order-vanguard"),tabIndex:"-1"}),(0,w.jsxs)("aside",{id:"ceog-mobile-navigation",className:"ceog-sidebar"+(s?" is-mobile-open":""),"aria-label":(0,o.__)("Order Vanguard navigation","coderembassy-order-vanguard"),children:[(0,w.jsxs)("div",{className:"ceog-sidebar__header",children:[t?(0,w.jsx)("img",{className:"ceog-sidebar__logo",src:t,alt:(0,o.__)("CoderEmbassy","coderembassy-order-vanguard")}):(0,w.jsx)("strong",{className:"ceog-sidebar__brand",children:(0,o.__)("CoderEmbassy","coderembassy-order-vanguard")}),s&&(0,w.jsx)("button",{type:"button",className:"ceog-icon-button ceog-sidebar__close",onClick:d,"aria-label":(0,o.__)("Close navigation","coderembassy-order-vanguard"),title:(0,o.__)("Close navigation","coderembassy-order-vanguard"),children:(0,w.jsx)(N,{size:20,"aria-hidden":"true"})})]}),(0,w.jsx)("nav",{className:"ceog-sidebar__nav","aria-label":(0,o.__)("Order Vanguard","coderembassy-order-vanguard"),children:D.filter(e=>!e.proOnly||r.isPro).map(a=>{const r=a.icon,s=e===a.id;return(0,w.jsxs)("button",{type:"button",className:"ceog-nav-item"+(s?" is-active":""),onClick:()=>{F(a.id),n()},"aria-current":s?"page":void 0,children:[(0,w.jsx)(r,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:a.label()})]},a.id)})}),(0,w.jsxs)("div",{className:"ceog-sidebar__footer",children:[(0,w.jsx)("span",{className:"ceog-badge ceog-badge--free",children:r.isPro?(0,o.__)("Pro active","coderembassy-order-vanguard"):(0,o.__)("Free","coderembassy-order-vanguard")}),(0,w.jsxs)("span",{children:[(0,o.__)("Version","coderembassy-order-vanguard")," ",r.version||"1.0.16"]})]})]})]})}const U=x("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),H=x("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),$=x("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]),G=e=>{const a=String(e||"").trim().split(/\s+/).filter(Boolean);return a.length>1?(a[0][0]+a[1][0]).toUpperCase():a[0]?.slice(0,2).toUpperCase()||"AD"};function X({route:e,theme:a,boot:r,onToggleTheme:s,user:d,mobileMenuOpen:n,onOpenMenu:t}){const i=function(e){return D.find(a=>a.id===e)||D[0]}(e),c=i.label(),l="dark"===a,g=l?U:H,h=l?(0,o.__)("Use light mode","coderembassy-order-vanguard"):(0,o.__)("Use dark mode","coderembassy-order-vanguard");return(0,w.jsxs)("header",{className:"ceog-topbar",children:[(0,w.jsxs)("div",{className:"ceog-topbar__leading",children:[(0,w.jsx)("button",{id:"ceog-mobile-menu-trigger",type:"button",className:"ceog-icon-button ceog-mobile-menu-trigger",onClick:t,"aria-label":(0,o.__)("Open navigation","coderembassy-order-vanguard"),"aria-expanded":n,"aria-controls":"ceog-mobile-navigation",title:(0,o.__)("Open navigation","coderembassy-order-vanguard"),children:(0,w.jsx)($,{size:21,"aria-hidden":"true"})}),(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-topbar__eyebrow",children:(0,o.__)("Order Vanguard","coderembassy-order-vanguard")}),(0,w.jsx)("h1",{className:"ceog-topbar__title",children:c})]})]}),(0,w.jsxs)("div",{className:"ceog-topbar__actions",children:[(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:s,"aria-label":h,"aria-pressed":l,title:h,children:(0,w.jsx)(g,{size:18,"aria-hidden":"true"})}),(0,w.jsxs)("div",{className:"ceog-user",children:[d?.avatarUrl?(0,w.jsx)("img",{className:"ceog-user__avatar",src:d.avatarUrl,alt:""}):(0,w.jsx)("span",{className:"ceog-user__initial","aria-hidden":"true",children:G(d?.displayName)}),(0,w.jsx)("span",{className:"ceog-user__name",children:d?.displayName||(0,o.__)("Admin","coderembassy-order-vanguard")})]})]})]})}const Y="ceog_license_banner_dismissed",K=()=>{try{return"1"===window.sessionStorage.getItem(Y)}catch(e){return!1}};function Z({boot:e}){const a=e?.licenseStatus,[r,d]=(0,s.useState)(K);if(!e?.isPro||!a)return null;const n=a.enforcementState||"INACTIVE",t=Boolean(a.gate?.locked),i=Number(a.gate?.nagDaysRemaining||0);if(!(!a.hasKey||t||i>0||["EXPIRED","GRACE_PERIOD","INVALID","UNREACHABLE"].includes(n))||r&&!t)return null;let c="warning",l=(0,o.__)("Order Vanguard Pro requires a license key for commercial updates and continued Pro workspace access.","coderembassy-order-vanguard"),g=(0,o.__)("Activate license","coderembassy-order-vanguard");return t?(c="locked",l=(0,o.__)("A license key is required to continue managing Order Vanguard Pro workspaces. Free protection remains available.","coderembassy-order-vanguard")):i>0?l=(0,o.sprintf)(/* translators: %d: trial days remaining */ /* translators: %d: trial days remaining */
    2 (0,o.__)("%d days remain to activate Order Vanguard Pro.","coderembassy-order-vanguard"),i):"GRACE_PERIOD"===n?(l=(0,o.__)("Your Order Vanguard Pro license is in its grace period. Renew soon to keep updates and Pro workspace access.","coderembassy-order-vanguard"),g=(0,o.__)("Renew license","coderembassy-order-vanguard")):"EXPIRED"===n?(c="error",l=(0,o.__)("Your Order Vanguard Pro license has expired. Renew it to restore updates and Pro workspace access.","coderembassy-order-vanguard"),g=(0,o.__)("Renew license","coderembassy-order-vanguard")):"INVALID"===n?(c="error",l=(0,o.__)("Your Order Vanguard Pro license could not be verified. Review the saved key.","coderembassy-order-vanguard"),g=(0,o.__)("Check license","coderembassy-order-vanguard")):"UNREACHABLE"===n&&(l=(0,o.__)("The license server is temporarily unreachable. Order Vanguard Pro is using its last known status.","coderembassy-order-vanguard"),g=(0,o.__)("Review license","coderembassy-order-vanguard")),(0,w.jsxs)("div",{className:"ceog-license-banner is-"+c,role:t?"alert":"status",children:[(0,w.jsx)(P,{size:19,"aria-hidden":"true"}),(0,w.jsx)("span",{children:l}),(0,w.jsxs)("button",{type:"button",className:"ceog-license-banner__action",onClick:()=>F("pro-license"),children:[(0,w.jsx)(T,{size:16,"aria-hidden":"true"}),g]}),!t&&(0,w.jsx)("button",{type:"button",className:"ceog-license-banner__dismiss",onClick:()=>{try{window.sessionStorage.setItem(Y,"1")}catch(e){}d(!0)},"aria-label":(0,o.__)("Dismiss license notice","coderembassy-order-vanguard"),title:(0,o.__)("Dismiss license notice","coderembassy-order-vanguard"),children:(0,w.jsx)(N,{size:17,"aria-hidden":"true"})})]})}function J({boot:e}){const a=e?.expiredModal,r=Math.max(1,Number(a?.autoCloseSeconds||15)),[d,n]=(0,s.useState)(Boolean(e?.isPro&&a?.show)),[t,i]=(0,s.useState)(r);return(0,s.useEffect)(()=>{if(!d)return;const a=e=>{"Escape"===e.key&&n(!1)},r=window.setInterval(()=>{i(e=>e<=1?(window.clearInterval(r),n(!1),0):e-1)},1e3);return document.addEventListener("keydown",a),window.setTimeout(()=>document.getElementById("ceog-license-renew")?.focus(),50),e.licenseApi?.modalShownUrl&&window.fetch(e.licenseApi.modalShownUrl,{method:"POST",credentials:"same-origin",headers:{"X-WP-Nonce":e.nonce||""}}).catch(()=>{}),()=>{window.clearInterval(r),document.removeEventListener("keydown",a)}},[d]),d?(0,w.jsx)("div",{className:"ceog-license-modal",onMouseDown:e=>e.target===e.currentTarget&&n(!1),children:(0,w.jsxs)("div",{className:"ceog-license-modal__card",role:"alertdialog","aria-modal":"true","aria-labelledby":"ceog-license-expired-title","aria-describedby":"ceog-license-expired-body",children:[(0,w.jsx)("button",{type:"button",className:"ceog-license-modal__close",onClick:()=>n(!1),"aria-label":(0,o.__)("Close","coderembassy-order-vanguard"),children:(0,w.jsx)(N,{size:18,"aria-hidden":"true"})}),(0,w.jsx)("div",{className:"ceog-license-modal__icon",children:(0,w.jsx)(P,{size:30,"aria-hidden":"true"})}),(0,w.jsx)("h2",{id:"ceog-license-expired-title",children:(0,o.__)("Your Order Vanguard Pro license has expired","coderembassy-order-vanguard")}),(0,w.jsx)("p",{id:"ceog-license-expired-body",children:(0,o.__)("The grace period is over. Renew now to restore private updates and Pro workspace access. Existing Free protection remains available.","coderembassy-order-vanguard")}),(0,w.jsx)("a",{id:"ceog-license-renew",className:"ceog-button ceog-button--primary",href:a.renewUrl,target:"_blank",rel:"noopener noreferrer",children:(0,o.__)("Renew license","coderembassy-order-vanguard")}),(0,w.jsx)("small",{"aria-live":"polite",children:(0,o.sprintf)(/* translators: %d: seconds until the modal closes */ /* translators: %d: seconds until the modal closes */
    3 (0,o.__)("This reminder closes in %d seconds.","coderembassy-order-vanguard"),t)})]})}):null}const Q=x("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]),ee=x("search-x",[["path",{d:"m13.5 8.5-5 5",key:"1cs55j"}],["path",{d:"m8.5 8.5 5 5",key:"a8mexj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]),ae=x("fingerprint-pattern",[["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M2 12a10 10 0 0 1 18-6",key:"ydlgp0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2",key:"1tidbn"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2",key:"1fr1j5"}]]),re=x("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),se=x("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]),oe=x("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),de=x("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]),ne={type:"",after:"",before:"",ip_hash:""},te=["breaker_ip_trip","breaker_email_trip","breaker_global_trip","blocked_add_item","blocked_checkout","blocked_batch_op","flagged_order","honeypot_hit","blocklist_hit","monitor_would_block","auto_block_added","auto_block_expired"],ie=e=>{switch(e){case"breaker_ip_trip":return(0,o.__)("Per-IP breaker tripped","coderembassy-order-vanguard");case"breaker_email_trip":return(0,o.__)("Email breaker tripped","coderembassy-order-vanguard");case"breaker_global_trip":return(0,o.__)("Global breaker tripped","coderembassy-order-vanguard");case"blocked_add_item":return(0,o.__)("Add-to-cart blocked","coderembassy-order-vanguard");case"blocked_checkout":return(0,o.__)("Checkout blocked","coderembassy-order-vanguard");case"blocked_batch_op":return(0,o.__)("Batch operation blocked","coderembassy-order-vanguard");case"flagged_order":return(0,o.__)("Order flagged","coderembassy-order-vanguard");case"honeypot_hit":return(0,o.__)("Honeypot triggered","coderembassy-order-vanguard");case"blocklist_hit":return(0,o.__)("Blocklist matched","coderembassy-order-vanguard");case"monitor_would_block":return(0,o.__)("Monitor decision","coderembassy-order-vanguard");case"auto_block_added":return(0,o.__)("Temporary block added","coderembassy-order-vanguard");case"auto_block_expired":return(0,o.__)("Temporary block expired","coderembassy-order-vanguard");default:return e||(0,o.__)("Unknown event","coderembassy-order-vanguard")}};function ce({isPro:e=!1}){const[a,r]=(0,s.useState)(ne),[d,t]=(0,s.useState)(ne),[c,l]=(0,s.useState)(1),[g,u]=(0,s.useState)({rows:[],total:0,pages:0}),[m,_]=(0,s.useState)([]),[b,y]=(0,s.useState)(!0),[p,v]=(0,s.useState)(!1),[x,j]=(0,s.useState)(!1),[C,M]=(0,s.useState)(""),[P,z]=(0,s.useState)(""),[E,A]=(0,s.useState)(0);(0,s.useEffect)(()=>{let e=!0;return(async()=>{y(!0),z("");try{const a=await((e={})=>{const a=new URLSearchParams;Object.entries(e).forEach(([e,r])=>{""!==r&&null!=r&&a.set(e,String(r))});const r=a.toString();return n()({path:i("log")+(r?"?"+r:"")})})({...d,page:c,per_page:25});e&&(u({rows:Array.isArray(a?.rows)?a.rows:[],total:Number(a?.total||0),pages:Number(a?.pages||0)}),_([]))}catch(a){e&&z(h(a))}finally{e&&y(!1)}})(),()=>{e=!1}},[d,c,E]);const I=(e,a)=>{r(r=>({...r,[e]:a}))},O=()=>{M(""),r(ne),t(ne),l(1)},B=g.rows.length>0&&g.rows.every(e=>m.includes(e.id));return(0,w.jsxs)("div",{className:"ceog-page ceog-log-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Protection history","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Activity Log","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Review monitor decisions and enforced actions without loading the full log into your browser.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:"ceog-status ceog-status--success",children:[(0,w.jsx)(S,{size:15,"aria-hidden":"true"}),(0,o.sprintf)(/* translators: %d: number of matching protection events. */ /* translators: %d: number of matching protection events. */
    4 (0,o.__)("%d events","coderembassy-order-vanguard"),g.total)]})]}),(0,w.jsxs)("form",{className:"ceog-log-filters",onSubmit:e=>{e.preventDefault(),M(""),l(1),t({...a})},children:[(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-log-type",children:[(0,w.jsx)("span",{children:(0,o.__)("Event type","coderembassy-order-vanguard")}),(0,w.jsxs)("select",{id:"ceog-log-type",value:a.type,onChange:e=>I("type",e.target.value),children:[(0,w.jsx)("option",{value:"",children:(0,o.__)("All events","coderembassy-order-vanguard")}),te.map(e=>(0,w.jsx)("option",{value:e,children:ie(e)},e))]})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-log-after",children:[(0,w.jsx)("span",{children:(0,o.__)("From date","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-log-after",type:"date",value:a.after,max:a.before||void 0,onChange:e=>I("after",e.target.value)})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-log-before",children:[(0,w.jsx)("span",{children:(0,o.__)("To date","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-log-before",type:"date",value:a.before,min:a.after||void 0,onChange:e=>I("before",e.target.value)})]}),(0,w.jsxs)("div",{className:"ceog-log-filter-actions",children:[(0,w.jsxs)("button",{type:"submit",className:"ceog-button ceog-button--primary",children:[(0,w.jsx)(Q,{size:16,"aria-hidden":"true"}),(0,o.__)("Apply filters","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:O,children:[(0,w.jsx)(ee,{size:16,"aria-hidden":"true"}),(0,o.__)("Clear","coderembassy-order-vanguard")]})]})]}),d.ip_hash&&(0,w.jsxs)("div",{className:"ceog-correlation-filter",role:"status",children:[(0,w.jsx)(ae,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Showing events from the same attacker","coderembassy-order-vanguard")}),(0,w.jsx)("code",{children:d.ip_hash.slice(0,12)+"..."}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:O,"aria-label":(0,o.__)("Clear attacker filter","coderembassy-order-vanguard"),title:(0,o.__)("Clear attacker filter","coderembassy-order-vanguard"),children:(0,w.jsx)(N,{size:16,"aria-hidden":"true"})})]}),C&&(0,w.jsxs)("div",{className:"ceog-log-export-notice",role:"status",children:[(0,w.jsx)(re,{size:17,"aria-hidden":"true"}),(0,w.jsx)("span",{children:C})]}),P&&(0,w.jsx)(f,{message:P,onRetry:()=>A(e=>e+1)}),(0,w.jsxs)("section",{className:"ceog-log-panel","aria-busy":b,children:[(0,w.jsxs)("div",{className:"ceog-log-actions",children:[(0,w.jsx)("span",{children:m.length>0?(0,o.sprintf)(/* translators: %d: number of selected log rows. */ /* translators: %d: number of selected log rows. */
    5 (0,o.__)("%d selected","coderembassy-order-vanguard"),m.length):(0,o.__)("Select rows to delete","coderembassy-order-vanguard")}),(0,w.jsxs)("div",{children:[e&&(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:async()=>{j(!0),z(""),M("");try{const e=await(e=>n()({path:"/ceog-pro/v1/reports/export",method:"POST",data:{filters:e}}))(d);if("string"!=typeof e?.content)throw new Error((0,o.__)("Order Vanguard returned an invalid CSV export.","coderembassy-order-vanguard"));const a=new window.Blob([e.content],{type:e.mimeType||"text/csv;charset=utf-8"}),r=window.URL.createObjectURL(a),s=document.createElement("a");s.href=r,s.download=e.filename||"order-guard-activity.csv",document.body.appendChild(s),s.click(),s.remove(),window.setTimeout(()=>window.URL.revokeObjectURL(r),0),M(e.truncated?(0,o.sprintf)(/* translators: 1: exported rows, 2: total matching rows. */ /* translators: 1: exported rows, 2: total matching rows. */
    6 (0,o.__)("Exported the first %1$d of %2$d matching events.","coderembassy-order-vanguard"),Number(e.rows||0),Number(e.total||0)):(0,o.sprintf)(/* translators: %d: exported rows. */ /* translators: %d: exported rows. */
    7 (0,o.__)("Exported %d matching events.","coderembassy-order-vanguard"),Number(e.rows||0)))}catch(e){z(h(e))}finally{j(!1)}},disabled:b||x,children:[(0,w.jsx)(re,{size:16,"aria-hidden":"true"}),x?(0,o.__)("Preparing CSV...","coderembassy-order-vanguard"):(0,o.__)("Export filtered CSV","coderembassy-order-vanguard")]}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:()=>A(e=>e+1),disabled:b,"aria-label":(0,o.__)("Refresh events","coderembassy-order-vanguard"),title:(0,o.__)("Refresh events","coderembassy-order-vanguard"),children:(0,w.jsx)(k,{size:16,"aria-hidden":"true"})}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--danger",onClick:async()=>{if(!(m.length<1)&&window.confirm((0,o.sprintf)(/* translators: %d: number of selected log rows. */ /* translators: %d: number of selected log rows. */
    8 (0,o.__)("Permanently delete %d selected event(s)?","coderembassy-order-vanguard"),m.length))){v(!0),z("");try{await(e=m,n()({path:i("log/delete"),method:"POST",data:{ids:e}}));const a=m.length===g.rows.length&&c>1;_([]),a?l(c-1):A(e=>e+1)}catch(e){z(h(e))}finally{v(!1)}var e}},disabled:m.length<1||p,children:[(0,w.jsx)(V,{size:16,"aria-hidden":"true"}),p?(0,o.__)("Deleting...","coderembassy-order-vanguard"):(0,o.__)("Delete selected","coderembassy-order-vanguard")]})]})]}),b&&g.rows.length<1?(0,w.jsxs)("div",{className:"ceog-log-loading",children:[(0,w.jsx)(k,{size:22,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Loading protection events...","coderembassy-order-vanguard")})]}):g.rows.length<1?(0,w.jsxs)("div",{className:"ceog-log-empty",children:[(0,w.jsx)(S,{size:26,"aria-hidden":"true"}),(0,w.jsx)("h3",{children:(0,o.__)("No matching protection events","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Events recorded by future protection rules will appear here. Adjust the filters if you expected existing rows.","coderembassy-order-vanguard")})]}):(0,w.jsx)("div",{className:"ceog-log-table-wrap",children:(0,w.jsxs)("table",{className:"ceog-log-table",children:[(0,w.jsx)("thead",{children:(0,w.jsxs)("tr",{children:[(0,w.jsx)("th",{className:"ceog-log-table__select",children:(0,w.jsx)("input",{type:"checkbox",checked:B,onChange:()=>{_(B?[]:g.rows.map(e=>e.id))},"aria-label":(0,o.__)("Select this page","coderembassy-order-vanguard")})}),(0,w.jsx)("th",{children:(0,o.__)("Time","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Type","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Mode","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("IP","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Route","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Reason","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Order","coderembassy-order-vanguard")})]})}),(0,w.jsx)("tbody",{children:g.rows.map(e=>(0,w.jsxs)("tr",{children:[(0,w.jsx)("td",{className:"ceog-log-table__select",children:(0,w.jsx)("input",{type:"checkbox",checked:m.includes(e.id),onChange:()=>{return a=e.id,void _(e=>e.includes(a)?e.filter(e=>e!==a):[...e,a]);var a},"aria-label":(0,o.sprintf)(/* translators: %d: log row ID. */ /* translators: %d: log row ID. */
    9 (0,o.__)("Select event %d","coderembassy-order-vanguard"),e.id)})}),(0,w.jsx)("td",{className:"ceog-log-table__time",children:e.event_time}),(0,w.jsx)("td",{children:(0,w.jsx)("span",{className:"ceog-event-type",children:ie(e.event_type)})}),(0,w.jsx)("td",{children:(0,w.jsx)("span",{className:"ceog-mode-badge ceog-mode-badge--"+e.mode,children:"enforce"===e.mode?(0,o.__)("Enforce","coderembassy-order-vanguard"):(0,o.__)("Monitor","coderembassy-order-vanguard")})}),(0,w.jsx)("td",{children:(0,w.jsxs)("div",{className:"ceog-log-ip",children:[(0,w.jsx)("code",{children:e.ip_display||"-"}),e.ip_hash&&(0,w.jsx)("button",{type:"button",className:"ceog-icon-button ceog-icon-button--small",onClick:()=>(e=>{M("");const a={...ne,ip_hash:e};r(a),t(a),l(1)})(e.ip_hash),"aria-label":(0,o.__)("Show the same attacker","coderembassy-order-vanguard"),title:(0,o.__)("Show the same attacker","coderembassy-order-vanguard"),children:(0,w.jsx)(ae,{size:14,"aria-hidden":"true"})})]})}),(0,w.jsx)("td",{className:"ceog-log-table__route",children:e.route||"-"}),(0,w.jsx)("td",{className:"ceog-log-table__reason",children:e.reason||"-"}),(0,w.jsx)("td",{children:e.order_id>0&&e.order_url?(0,w.jsxs)("a",{href:e.order_url,target:"_blank",rel:"noreferrer",children:["#"+e.order_id,(0,w.jsx)(se,{size:13,"aria-hidden":"true"})]}):e.order_id>0?"#"+e.order_id:"-"})]},e.id))})]})}),(0,w.jsxs)("div",{className:"ceog-log-pagination",children:[(0,w.jsx)("span",{children:g.pages>0?(0,o.sprintf)(/* translators: 1: current page, 2: total pages. */ /* translators: 1: current page, 2: total pages. */
    10 (0,o.__)("Page %1$d of %2$d","coderembassy-order-vanguard"),c,g.pages):(0,o.__)("No pages","coderembassy-order-vanguard")}),(0,w.jsxs)("div",{children:[(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:()=>l(Math.max(1,c-1)),disabled:c<=1||b,children:[(0,w.jsx)(oe,{size:16,"aria-hidden":"true"}),(0,o.__)("Previous","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:()=>l(c+1),disabled:c>=g.pages||b,children:[(0,o.__)("Next","coderembassy-order-vanguard"),(0,w.jsx)(de,{size:16,"aria-hidden":"true"})]})]})]})]})]})}const le=x("network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]),ge=x("mail",[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]]),he=x("earth",[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),ue=x("clock-3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6h4",key:"135r8i"}]]),me=x("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),_e=x("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),be=x("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);function ye({id:e,label:a,description:r,checked:s,onChange:o,disabled:d=!1,tone:n="default"}){return(0,w.jsxs)("label",{className:"ceog-toggle-row ceog-toggle-row--"+n+(d?" is-disabled":""),htmlFor:e,children:[(0,w.jsxs)("span",{className:"ceog-toggle-row__copy",children:[(0,w.jsx)("strong",{children:a}),(0,w.jsx)("small",{children:r})]}),(0,w.jsx)("input",{id:e,type:"checkbox",checked:s,onChange:e=>o(e.target.checked),disabled:d}),(0,w.jsx)("span",{className:"ceog-switch","aria-hidden":"true"})]})}const pe=(e={})=>({breaker_ip_enabled:!1!==e.breaker_ip_enabled,breaker_ip_threshold:String(e.breaker_ip_threshold||5),breaker_ip_window:String(e.breaker_ip_window||300),breaker_ip_block:String(e.breaker_ip_block||600),breaker_email_enabled:!1!==e.breaker_email_enabled,breaker_email_threshold:String(e.breaker_email_threshold||3),breaker_email_window:String(e.breaker_email_window||600),breaker_email_block:String(e.breaker_email_block||900),breaker_global_enabled:!1!==e.breaker_global_enabled,breaker_global_threshold:String(e.breaker_global_threshold||20),breaker_global_window:String(e.breaker_global_window||300),breaker_global_cooldown:String(e.breaker_global_cooldown||120)}),ve={ip:{Icon:le,title:()=>(0,o.__)("Per-IP breaker","coderembassy-order-vanguard"),description:()=>(0,o.__)("Stops repeated failed orders from one IPv4 address or IPv6 /64 network.","coderembassy-order-vanguard"),enabled:"breaker_ip_enabled",threshold:"breaker_ip_threshold",window:"breaker_ip_window",duration:"breaker_ip_block",durationLabel:()=>(0,o.__)("Block duration (seconds)","coderembassy-order-vanguard"),note:()=>(0,o.__)("Shared mobile, office, and CGNAT connections can represent several customers. Keep this block short.","coderembassy-order-vanguard")},email:{Icon:ge,title:()=>(0,o.__)("Per-email breaker","coderembassy-order-vanguard"),description:()=>(0,o.__)("Links rotating IPs when repeated failures use the same billing email.","coderembassy-order-vanguard"),enabled:"breaker_email_enabled",threshold:"breaker_email_threshold",window:"breaker_email_window",duration:"breaker_email_block",durationLabel:()=>(0,o.__)("Block duration (seconds)","coderembassy-order-vanguard"),note:()=>(0,o.__)("A shared household or team billing email may affect more than one shopper. The default requires three failures.","coderembassy-order-vanguard")},global:{Icon:he,title:()=>(0,o.__)("Global breaker","coderembassy-order-vanguard"),description:()=>(0,o.__)("Pauses non-whitelisted checkout when failures arrive across the whole store.","coderembassy-order-vanguard"),enabled:"breaker_global_enabled",threshold:"breaker_global_threshold",window:"breaker_global_window",duration:"breaker_global_cooldown",durationLabel:()=>(0,o.__)("Cooldown (seconds)","coderembassy-order-vanguard"),note:()=>(0,o.__)("This temporarily pauses all non-whitelisted checkout. A short cooldown is the primary defense against distributed attacks.","coderembassy-order-vanguard")}},xe=e=>{const a=Math.max(0,Number(e)||0),r=Math.floor(a/60),s=a%60;return r>0?(0,o.sprintf)(/* translators: 1: minutes, 2: seconds */ /* translators: 1: minutes, 2: seconds */
    11 (0,o.__)("%1$dm %2$ds remaining","coderembassy-order-vanguard"),r,s):(0,o.sprintf)(/* translators: %d: seconds */ /* translators: %d: seconds */
    12 (0,o.__)("%d seconds remaining","coderembassy-order-vanguard"),s)};function je({tier:e}){return e?.enabled?"cooling_down"===e.state?(0,w.jsxs)("div",{className:e.blocking?"ceog-breaker-live ceog-breaker-live--danger":"ceog-breaker-live ceog-breaker-live--warning",children:[(0,w.jsx)(ue,{size:17,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Cooling down","coderembassy-order-vanguard")}),(0,w.jsx)("small",{children:xe(e.cooldownSeconds)})]}),(0,w.jsx)("strong",{children:e.blocking?(0,o.__)("Blocking","coderembassy-order-vanguard"):(0,o.__)("Logging","coderembassy-order-vanguard")})]}):(0,w.jsxs)("div",{className:"ceog-breaker-live ceog-breaker-live--ready",children:[(0,w.jsx)(me,{size:17,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Ready","coderembassy-order-vanguard")}),(0,w.jsx)("small",{children:(0,o.__)("Protection active","coderembassy-order-vanguard")})]})]}):(0,w.jsxs)("div",{className:"ceog-breaker-live ceog-breaker-live--muted",children:[(0,w.jsx)("span",{children:(0,o.__)("Disabled","coderembassy-order-vanguard")}),(0,w.jsx)("small",{children:(0,o.__)("Protection inactive","coderembassy-order-vanguard")})]})}function ke({name:e,draft:a,status:r,onUpdate:s}){const d=ve[e],n=d.Icon,t=Boolean(a[d.enabled]);return(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-breaker-panel ceog-breaker-panel--"+e,children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(n,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsxs)("div",{className:"ceog-breaker-title-row",children:[(0,w.jsx)("h3",{children:d.title()}),"global"===e&&(0,w.jsx)("span",{className:"ceog-badge ceog-badge--primary",children:(0,o.__)("Distributed defense","coderembassy-order-vanguard")})]}),(0,w.jsx)("p",{children:d.description()})]})]}),(0,w.jsx)(je,{tier:r}),(0,w.jsx)(ye,{id:"ceog-"+e+"-breaker-enabled",label:(0,o.__)("Enable this breaker","coderembassy-order-vanguard"),description:(0,o.__)("Failed orders feed this sliding window in both Monitor and Enforce modes.","coderembassy-order-vanguard"),checked:t,onChange:e=>s(d.enabled,e)}),(0,w.jsxs)("div",{className:"ceog-breaker-fields",children:[(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-"+e+"-threshold",children:[(0,w.jsx)("span",{children:(0,o.__)("Failed orders","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-"+e+"-threshold",type:"number",min:"1",max:"global"===e?"10000":"1000",value:a[d.threshold],onChange:e=>s(d.threshold,e.target.value),disabled:!t})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-"+e+"-window",children:[(0,w.jsx)("span",{children:(0,o.__)("Window (seconds)","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-"+e+"-window",type:"number",min:"30",max:"86400",value:a[d.window],onChange:e=>s(d.window,e.target.value),disabled:!t})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-"+e+"-duration",children:[(0,w.jsx)("span",{children:d.durationLabel()}),(0,w.jsx)("input",{id:"ceog-"+e+"-duration",type:"number",min:"30",max:"86400",value:a[d.duration],onChange:e=>s(d.duration,e.target.value),disabled:!t})]})]}),(0,w.jsxs)("div",{className:"ceog-breaker-note",children:[(0,w.jsx)(j,{size:17,"aria-hidden":"true"}),(0,w.jsx)("p",{children:d.note()})]})]})}function we({payload:e,loading:a,settingsBusy:r,onSave:d}){const[t,c]=(0,s.useState)(pe(e?.settings)),[l,g]=(0,s.useState)(null),[u,m]=(0,s.useState)(!0),[_,b]=(0,s.useState)(""),[y,p]=(0,s.useState)(!1),v=(0,s.useCallback)(async(e=!1)=>{e&&m(!0),b("");try{g(await n()({path:i("breakers")}))}catch(e){b(h(e))}finally{m(!1)}},[]);(0,s.useEffect)(()=>{c(pe(e?.settings)),p(!1)},[e?.settings]),(0,s.useEffect)(()=>{v(!0)},[v]),(0,s.useEffect)(()=>{const e=window.setInterval(()=>{document.hidden||v()},15e3);return()=>window.clearInterval(e)},[v]),(0,s.useEffect)(()=>{const e=window.setInterval(()=>{g(e=>{if(!e?.tiers)return e;const a=Object.fromEntries(Object.entries(e.tiers).map(([e,a])=>{const r=Math.max(0,Number(a.cooldownSeconds||0)-1);return[e,{...a,cooldownSeconds:r,state:r>0?a.state:a.enabled?"ready":"disabled",blocking:r>0&&a.blocking,activeEntities:r>0?a.activeEntities:0}]}));return{...e,tiers:a}})},1e3);return()=>window.clearInterval(e)},[]);const x=(e,a)=>{c(r=>({...r,[e]:a})),p(!1)};if(a||!e)return(0,w.jsxs)("div",{className:"ceog-loading","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--store-api"}),(0,w.jsxs)("div",{className:"ceog-breaker-grid",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"})]})]});const f=l?.tiers?Object.values(l.tiers).filter(e=>"cooling_down"===e.state).length:0;return(0,w.jsxs)("div",{className:"ceog-page ceog-breakers-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Failed-order protection","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Circuit Breakers","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Three short sliding windows stop repeated payment failures with the smallest practical checkout impact.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-breaker-header-status",children:[(0,w.jsxs)("span",{className:f>0?"ceog-status ceog-status--warning":"ceog-status ceog-status--success",children:[(0,w.jsx)(_e,{size:15,"aria-hidden":"true"}),f>0?(0,o.sprintf)(/* translators: %d: active breaker tiers */ /* translators: %d: active breaker tiers */
    13 (0,o.__)("%d cooling down","coderembassy-order-vanguard"),f):(0,o.__)("All ready","coderembassy-order-vanguard")]}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:()=>v(!0),disabled:u,"aria-label":(0,o.__)("Refresh breaker status","coderembassy-order-vanguard"),title:(0,o.__)("Refresh breaker status","coderembassy-order-vanguard"),children:(0,w.jsx)(k,{size:17,"aria-hidden":"true"})})]})]}),_&&(0,w.jsxs)("div",{className:"ceog-warning",role:"alert",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:_})]}),e.meta?.safeMode&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Safe Mode keeps breaker counters and logging active while all checkout blocking remains suspended.","coderembassy-order-vanguard")})]}),(0,w.jsx)("div",{className:"ceog-breaker-grid",children:["ip","email","global"].map(e=>(0,w.jsx)(ke,{name:e,draft:t,status:l?.tiers?.[e],onUpdate:x},e))}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[y&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(me,{size:15,"aria-hidden":"true"}),(0,o.__)("Circuit breaker settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{const e=Object.fromEntries(Object.entries(t).map(([e,a])=>[e,"boolean"==typeof a?a:Number(a)])),a=await d(e);p(Boolean(a)),a&&v()},disabled:r,children:[(0,w.jsx)(be,{size:16,"aria-hidden":"true"}),r?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save breaker settings","coderembassy-order-vanguard")]})]})]})}const fe=x("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]),Ne=x("chart-column",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]),Ce=x("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);function Se({mode:e,onChange:a,busy:r=!1,compact:s=!1}){return(0,w.jsxs)("div",{className:"ceog-mode-control"+(s?" ceog-mode-control--compact":""),role:"group","aria-label":(0,o.__)("Protection mode","coderembassy-order-vanguard"),children:[(0,w.jsxs)("button",{type:"button",className:"monitor"===e?"is-active":"",onClick:()=>a("monitor"),"aria-pressed":"monitor"===e,disabled:r,children:[(0,w.jsx)(Ce,{size:16,"aria-hidden":"true"}),(0,o.__)("Monitor","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"enforce"===e?"is-active":"",onClick:()=>a("enforce"),"aria-pressed":"enforce"===e,disabled:r,children:[(0,w.jsx)(_e,{size:16,"aria-hidden":"true"}),(0,o.__)("Enforce","coderembassy-order-vanguard")]})]})}const Me="ceog_pro_cleanup_dismissed_v1",Pe=()=>{try{return window.localStorage.getItem(Me)||""}catch(e){return""}},ze=e=>{switch(e){case"breaker_ip_trip":return(0,o.__)("Per-IP breaker tripped","coderembassy-order-vanguard");case"breaker_email_trip":return(0,o.__)("Email breaker tripped","coderembassy-order-vanguard");case"breaker_global_trip":return(0,o.__)("Global breaker tripped","coderembassy-order-vanguard");case"blocked_add_item":return(0,o.__)("Add-to-cart blocked","coderembassy-order-vanguard");case"blocked_checkout":return(0,o.__)("Checkout blocked","coderembassy-order-vanguard");case"blocked_batch_op":return(0,o.__)("Batch operation blocked","coderembassy-order-vanguard");case"flagged_order":return(0,o.__)("Order flagged","coderembassy-order-vanguard");case"honeypot_hit":return(0,o.__)("Honeypot triggered","coderembassy-order-vanguard");case"blocklist_hit":return(0,o.__)("Blocklist matched","coderembassy-order-vanguard");case"monitor_would_block":return(0,o.__)("Monitor decision","coderembassy-order-vanguard");default:return e||(0,o.__)("Protection event","coderembassy-order-vanguard")}},Ee=new Intl.NumberFormat,Ae=e=>Ee.format(Number(e||0)),Ie=e=>{const a=Math.max(0,Number(e||0));return Math.floor(a/60)+":"+String(a%60).padStart(2,"0")},Oe=e=>{const a=new Date(e+"T12:00:00");return Number.isNaN(a.getTime())?e:a.toLocaleDateString(void 0,{weekday:"short"})},Be=e=>{const a=new Date(String(e||"").replace(" ","T"));return Number.isNaN(a.getTime())?e:a.toLocaleString()};function Re({payload:e,modeBusy:a,onModeChange:r,loading:d,isPro:t=!1}){const[c,l]=(0,s.useState)(null),[g,u]=(0,s.useState)(!0),[m,_]=(0,s.useState)(""),[b,y]=(0,s.useState)(0),[p,v]=(0,s.useState)(0),[x,C]=(0,s.useState)(Date.now()),[M,P]=(0,s.useState)(Pe);(0,s.useEffect)(()=>{let e=!0,a=null,r=!1,s=0;const o=async()=>{if(e&&!document.hidden&&!r){r=!0;try{const a=await n()({path:i("dashboard")});e&&(l(a),v(Date.now()),_(""),s=0)}catch(a){e&&(s+=1,_(h(a)))}finally{r=!1,e&&(u(!1),d=s?Math.min(3e4*2**(s-1),24e4):3e4,window.clearTimeout(a),e&&!document.hidden&&(a=window.setTimeout(o,d)))}}var d},d=()=>{window.clearTimeout(a),document.hidden||o()};return document.addEventListener("visibilitychange",d),o(),()=>{e=!1,window.clearTimeout(a),document.removeEventListener("visibilitychange",d)}},[b]),(0,s.useEffect)(()=>{if(!c)return;const e=window.setInterval(()=>C(Date.now()),1e3);return()=>window.clearInterval(e)},[c]);const z=p?Math.floor((x-p)/1e3):0,E=(0,s.useMemo)(()=>{let e="",a=0;return Object.entries(c?.breakers||{}).forEach(([r,s])=>{const o=Math.max(0,Number(s?.cooldownSeconds||0)-z);o>a&&(e=r,a=o)}),{tier:e,remaining:a}},[c,z]);if((g||d)&&!c)return(0,w.jsxs)("div",{className:"ceog-loading","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--hero"}),(0,w.jsx)("div",{className:"ceog-stat-grid",children:[1,2,3,4].map(e=>(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"},e))})]});if(m&&!c)return(0,w.jsx)(f,{message:m,onRetry:()=>y(e=>e+1)});const A=e?.settings||{},I=c?.configured_mode||A.mode||"monitor",O=Boolean(c?.safe_mode||e?.meta?.safeMode),B=O?"monitor":c?.mode||I,R=c?.protection_enabled??!1!==A.enabled,L=R&&"enforce"===B,V=Array.isArray(c?.weekly_series)?c.weekly_series:[],T=Math.max(1,...V.map(e=>Number(e.count||0))),D=Array.isArray(c?.recent_events)?c.recent_events:[],q=c?.pro_context||{},W=q.show?String(q.blocked_attempts)+":"+String(q.remaining_orders):"",U=Boolean(q.show&&M!==W);return(0,w.jsxs)("div",{className:"ceog-dashboard",children:[m&&(0,w.jsxs)("div",{className:"ceog-dashboard-sync-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:m}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:()=>y(e=>e+1),"aria-label":(0,o.__)("Retry dashboard update","coderembassy-order-vanguard"),title:(0,o.__)("Retry dashboard update","coderembassy-order-vanguard"),children:(0,w.jsx)(k,{size:17,"aria-hidden":"true"})})]}),O&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Order Vanguard Safe Mode is active - protection is monitoring only.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("section",{className:"ceog-hero","aria-labelledby":"ceog-hero-title",children:[(0,w.jsxs)("div",{className:"ceog-hero__copy",children:[(0,w.jsxs)("div",{className:"ceog-hero__badges",children:[(0,w.jsx)("span",{className:"ceog-badge ceog-badge--light",children:t?(0,o.__)("Pro","coderembassy-order-vanguard"):(0,o.__)("Free","coderembassy-order-vanguard")}),(0,w.jsxs)("span",{className:"ceog-hero__status",children:[(0,w.jsx)(me,{size:15,"aria-hidden":"true"}),R?L?(0,o.__)("Protection active","coderembassy-order-vanguard"):(0,o.__)("Monitoring traffic","coderembassy-order-vanguard"):(0,o.__)("Protection disabled","coderembassy-order-vanguard")]})]}),(0,w.jsx)("h2",{id:"ceog-hero-title",children:(0,o.__)("CoderEmbassy Order Vanguard","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("API-level protection against card testing, bot orders, and fake checkouts.","coderembassy-order-vanguard")}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--hero",onClick:()=>F("activity-log"),children:[(0,w.jsx)(S,{size:16,"aria-hidden":"true"}),(0,o.__)("View activity log","coderembassy-order-vanguard"),(0,w.jsx)(fe,{size:16,"aria-hidden":"true"})]})]}),(0,w.jsxs)("div",{className:"ceog-hero__mode",children:[(0,w.jsx)("span",{children:(0,o.__)("Protection mode","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:L?(0,o.__)("Enforcing","coderembassy-order-vanguard"):(0,o.__)("Monitoring","coderembassy-order-vanguard")}),(0,w.jsx)(Se,{mode:I,onChange:async e=>{await r(e),y(e=>e+1)},busy:a})]})]}),(0,w.jsxs)("section",{className:"ceog-stat-grid","aria-label":(0,o.__)("Protection summary","coderembassy-order-vanguard"),children:[(0,w.jsxs)("div",{className:"ceog-stat ceog-stat--green",children:[(0,w.jsx)(_e,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:Ae(c?.blocked_today)}),(0,w.jsx)("span",{children:(0,o.__)("Blocked today","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-stat ceog-stat--amber",children:[(0,w.jsx)(S,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:Ae(c?.suspicious_7d)}),(0,w.jsx)("span",{children:(0,o.__)("Suspicious (7d)","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-stat ceog-stat--purple",children:[(0,w.jsx)(me,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:L?(0,o.__)("Enforce","coderembassy-order-vanguard"):(0,o.__)("Monitor","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("Protection mode","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-stat "+(E.remaining>0?"ceog-stat--danger":"ceog-stat--blue"),children:[(0,w.jsx)(ue,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:E.remaining>0?Ie(E.remaining):(0,o.__)("Ready","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:E.remaining>0&&L?(0,o.__)("Checkout paused","coderembassy-order-vanguard"):(0,o.__)("Circuit breakers","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("section",{className:"ceog-quickstart",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{className:"ceog-section-kicker",children:(0,o.__)("Monitor first","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Start with a clear baseline","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Keep Monitor mode on while Order Vanguard records traffic. Switch to Enforce after the activity log matches what you expect.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:()=>F("settings"),children:[(0,o.__)("Review settings","coderembassy-order-vanguard"),(0,w.jsx)(fe,{size:16,"aria-hidden":"true"})]})]}),(0,w.jsxs)("div",{className:"ceog-dashboard-grid",children:[(0,w.jsxs)("section",{className:"ceog-dashboard-panel","aria-labelledby":"ceog-weekly-title",children:[(0,w.jsxs)("div",{className:"ceog-dashboard-panel__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)(Ne,{size:19,"aria-hidden":"true"}),(0,w.jsx)("h2",{id:"ceog-weekly-title",children:(0,o.__)("Threat activity this week","coderembassy-order-vanguard")})]}),(0,w.jsx)("span",{children:Ae(c?.suspicious_7d)})]}),(0,w.jsx)("div",{className:"ceog-weekly-chart",children:V.map(e=>(0,w.jsxs)("div",{className:"ceog-weekly-chart__day",children:[(0,w.jsx)("span",{className:"ceog-weekly-chart__value",children:Ae(e.count)}),(0,w.jsx)("div",{className:"ceog-weekly-chart__track",children:(0,w.jsx)("span",{style:{height:Number(e.count)>0?Math.max(8,Number(e.count)/T*100)+"%":"0%"}})}),(0,w.jsx)("strong",{children:Oe(e.date)})]},e.date))})]}),(0,w.jsxs)("section",{className:"ceog-dashboard-panel","aria-labelledby":"ceog-recent-title",children:[(0,w.jsxs)("div",{className:"ceog-dashboard-panel__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)(S,{size:19,"aria-hidden":"true"}),(0,w.jsx)("h2",{id:"ceog-recent-title",children:(0,o.__)("Recent protection events","coderembassy-order-vanguard")})]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--quiet",onClick:()=>F("activity-log"),children:[(0,o.__)("View all","coderembassy-order-vanguard"),(0,w.jsx)(fe,{size:15,"aria-hidden":"true"})]})]}),D.length?(0,w.jsx)("ul",{className:"ceog-recent-events",children:D.map(e=>(0,w.jsxs)("li",{children:[(0,w.jsx)("span",{className:"ceog-event-dot ceog-event-dot--"+("enforce"===e.mode?"enforce":"monitor")}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:ze(e.event_type)}),(0,w.jsx)("small",{children:Be(e.event_time)})]}),e.order_url&&(0,w.jsx)("a",{href:e.order_url,"aria-label":(0,o.__)("Open order","coderembassy-order-vanguard"),title:(0,o.__)("Open order","coderembassy-order-vanguard"),children:(0,w.jsx)(se,{size:16,"aria-hidden":"true"})})]},e.id))}):(0,w.jsxs)("div",{className:"ceog-dashboard-empty",children:[(0,w.jsx)(_e,{size:22,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("No protection events yet","coderembassy-order-vanguard")})]})]})]}),U&&(0,w.jsxs)("section",{className:"ceog-pro-context","aria-labelledby":"ceog-pro-context-title",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{className:"ceog-badge",children:(0,o.__)("Pro","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{id:"ceog-pro-context-title",children:(0,o.__)("Attack cleanup is available","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.sprintf)((0,o.__)("Order Vanguard blocked %1$s attempts. %2$s failed or junk orders remain - Pro can clean these up automatically.","coderembassy-order-vanguard"),Ae(q.blocked_attempts),Ae(q.remaining_orders))})]}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:()=>{P(W);try{window.localStorage.setItem(Me,W)}catch(e){}},"aria-label":(0,o.__)("Dismiss cleanup suggestion","coderembassy-order-vanguard"),title:(0,o.__)("Dismiss cleanup suggestion","coderembassy-order-vanguard"),children:(0,w.jsx)(N,{size:18,"aria-hidden":"true"})})]})]})}const Le=x("ban",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}]]),Ve=x("user-round-check",[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"m16 19 2 2 4-4",key:"1b14m6"}]]),Te=x("credit-card",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]),De=x("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),qe=x("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]),Fe=x("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]),We=x("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);function Ue({id:e,label:a,description:r,icon:d,options:n=[],value:t=[],onChange:i,searchPlaceholder:c,emptyText:l,allowManual:g=!1,manualPlaceholder:h=""}){const u=(0,s.useRef)(null),[m,_]=(0,s.useState)(!1),[b,y]=(0,s.useState)(""),[p,v]=(0,s.useState)(""),x=Array.isArray(t)?t:[],j=Array.isArray(n)?n:[];(0,s.useEffect)(()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&_(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);const k=(0,s.useMemo)(()=>{const e=b.trim().toLowerCase();return j.filter(a=>!e||[a.label,a.value].some(a=>String(a||"").toLowerCase().includes(e)))},[j,b]),f=(0,s.useMemo)(()=>{const e={};return j.forEach(a=>{e[a.value]=a.label}),e},[j]),C=e=>{i(x.includes(e)?x.filter(a=>a!==e):[...x,e])};return(0,w.jsxs)("div",{className:"ceog-choice-field",ref:u,children:[(0,w.jsxs)("div",{className:"ceog-choice-field__heading",children:[d&&(0,w.jsx)(d,{size:17,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{id:e+"-label",children:a}),(0,w.jsx)("small",{children:r})]})]}),x.length>0&&(0,w.jsx)("div",{className:"ceog-choice-tokens","aria-label":(0,o.__)("Selected values","coderembassy-order-vanguard"),children:x.map(e=>(0,w.jsxs)("span",{className:"ceog-choice-token",children:[(0,w.jsx)("span",{children:f[e]||e}),(0,w.jsx)("code",{children:e}),(0,w.jsx)("button",{type:"button",onClick:()=>C(e),"aria-label":(0,o.sprintf)(/* translators: %s: selected role or payment-method key. */ /* translators: %s: selected role or payment-method key. */
     1(()=>{"use strict";var e={658(e,a,s){const r=window.wp.element,o=window.wp.i18n,d=window.wp.apiFetch;var n=s.n(d);const t=window.ceogBoot||{};t.nonce&&n().use(n().createNonceMiddleware(t.nonce));const i=e=>"/ceog/v1/"+e,c=()=>n()({path:i("settings")}),l=e=>n()({path:i("settings"),method:"POST",data:{settings:e}}),g=e=>n()({path:i("mode"),method:"POST",data:{mode:e}});function h(e){const a=Number(e?.data?.status||e?.status||0);return 401===a||403===a?(0,o.__)("Your admin session expired. Please refresh the page and try again.","coderembassy-order-vanguard"):e?.message||(0,o.__)("Order Vanguard could not load this data. Please try again.","coderembassy-order-vanguard")}const u=window.React,m=(...e)=>e.filter((e,a,s)=>Boolean(e)&&""!==e.trim()&&s.indexOf(e)===a).join(" ").trim(),_=e=>{const a=(e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,a,s)=>s?s.toUpperCase():a.toLowerCase()))(e);return a.charAt(0).toUpperCase()+a.slice(1)};var b={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const y=e=>{for(const a in e)if(a.startsWith("aria-")||"role"===a||"title"===a)return!0;return!1},v=(0,u.createContext)({}),p=(0,u.forwardRef)(({color:e,size:a,strokeWidth:s,absoluteStrokeWidth:r,className:o="",children:d,iconNode:n,...t},i)=>{const{size:c=24,strokeWidth:l=2,absoluteStrokeWidth:g=!1,color:h="currentColor",className:_=""}=(0,u.useContext)(v)??{},p=r??g?24*Number(s??l)/Number(a??c):s??l;return(0,u.createElement)("svg",{ref:i,...b,width:a??c??b.width,height:a??c??b.height,stroke:e??h,strokeWidth:p,className:m("lucide",_,o),...!d&&!y(t)&&{"aria-hidden":"true"},...t},[...n.map(([e,a])=>(0,u.createElement)(e,a)),...Array.isArray(d)?d:[d]])}),x=(e,a)=>{const s=(0,u.forwardRef)(({className:s,...r},o)=>{return(0,u.createElement)(p,{ref:o,iconNode:a,className:m(`lucide-${d=_(e),d.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,s),...r});var d});return s.displayName=_(e),s},j=x("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]),k=x("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]),w=window.ReactJSXRuntime;function f({message:e,onRetry:a}){return(0,w.jsxs)("div",{className:"ceog-error",role:"alert",children:[(0,w.jsx)(j,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:(0,o.__)("Order Vanguard could not connect","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:e})]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:a,children:[(0,w.jsx)(k,{size:16,"aria-hidden":"true"}),(0,o.__)("Retry","coderembassy-order-vanguard")]})]})}const N=x("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),C=x("layout-dashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]),S=x("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]),M=x("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]),z=x("blocks",[["path",{d:"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2",key:"1ah6g2"}],["rect",{x:"14",y:"2",width:"8",height:"8",rx:"1",key:"88lufb"}]]),P=x("list-filter",[["path",{d:"M2 5h20",key:"1fs1ex"}],["path",{d:"M6 12h12",key:"8npq4p"}],["path",{d:"M9 19h6",key:"456am0"}]]),E=x("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),A=x("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]),I=x("badge-question-mark",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["line",{x1:"12",x2:"12.01",y1:"17",y2:"17",key:"io3f8k"}]]),O=[{id:"dashboard",label:()=>(0,o.__)("Dashboard","coderembassy-order-vanguard"),icon:C},{id:"activity-log",label:()=>(0,o.__)("Activity Log","coderembassy-order-vanguard"),icon:S},{id:"circuit-breakers",label:()=>(0,o.__)("Circuit Breakers","coderembassy-order-vanguard"),icon:M},{id:"store-api",label:()=>(0,o.__)("Store API Guard","coderembassy-order-vanguard"),icon:z},{id:"lists",label:()=>(0,o.__)("Lists","coderembassy-order-vanguard"),icon:P},{id:"settings",label:()=>(0,o.__)("Settings","coderembassy-order-vanguard"),icon:E},{id:"privacy-logs",label:()=>(0,o.__)("Privacy & Logs","coderembassy-order-vanguard"),icon:A},{id:"help",label:()=>(0,o.__)("Help","coderembassy-order-vanguard"),icon:I}];function B(e=O){const a=window.location.hash.replace(/^#\/?/,"").split("?")[0];return e.some(e=>e.id===a)?a:"dashboard"}function L(e){window.location.hash="#/"+e}function R({route:e,theme:a,boot:s,items:r=O,mobileOpen:d,onDismiss:n,onNavigate:t}){const i="dark"===a?s.logoDark:s.logoLight;return(0,w.jsxs)(w.Fragment,{children:[d&&(0,w.jsx)("button",{type:"button",className:"ceog-sidebar-overlay",onClick:n,"aria-label":(0,o.__)("Close navigation","coderembassy-order-vanguard"),tabIndex:"-1"}),(0,w.jsxs)("aside",{id:"ceog-mobile-navigation",className:"ceog-sidebar"+(d?" is-mobile-open":""),"aria-label":(0,o.__)("Order Vanguard navigation","coderembassy-order-vanguard"),children:[(0,w.jsxs)("div",{className:"ceog-sidebar__header",children:[i?(0,w.jsx)("img",{className:"ceog-sidebar__logo",src:i,alt:(0,o.__)("CoderEmbassy","coderembassy-order-vanguard")}):(0,w.jsx)("strong",{className:"ceog-sidebar__brand",children:(0,o.__)("CoderEmbassy","coderembassy-order-vanguard")}),d&&(0,w.jsx)("button",{type:"button",className:"ceog-icon-button ceog-sidebar__close",onClick:n,"aria-label":(0,o.__)("Close navigation","coderembassy-order-vanguard"),title:(0,o.__)("Close navigation","coderembassy-order-vanguard"),children:(0,w.jsx)(N,{size:20,"aria-hidden":"true"})})]}),(0,w.jsx)("nav",{className:"ceog-sidebar__nav","aria-label":(0,o.__)("Order Vanguard","coderembassy-order-vanguard"),children:r.map(a=>{const s=a.icon,r=e===a.id;return(0,w.jsxs)("button",{type:"button",className:"ceog-nav-item"+(r?" is-active":""),onClick:()=>{L(a.id),t()},"aria-current":r?"page":void 0,children:[(0,w.jsx)(s,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:a.label()}),a.badge&&(0,w.jsx)("small",{className:"ceog-nav-item__badge",children:"function"==typeof a.badge?a.badge():a.badge})]},a.id)})}),(0,w.jsx)("div",{className:"ceog-sidebar__footer",children:(0,w.jsxs)("span",{children:[(0,o.__)("Version","coderembassy-order-vanguard")," ",s.version||"1.1.1"]})})]})]})}const T=x("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),D=x("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),V=x("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]),q=e=>{const a=String(e||"").trim().split(/\s+/).filter(Boolean);return a.length>1?(a[0][0]+a[1][0]).toUpperCase():a[0]?.slice(0,2).toUpperCase()||"AD"};function W({route:e,theme:a,boot:s,items:r,onToggleTheme:d,user:n,mobileMenuOpen:t,onOpenMenu:i}){const c=function(e,a=O){return a.find(a=>a.id===e)||O[0]}(e,r),l=c.label(),g="dark"===a,h=g?T:D,u=g?(0,o.__)("Use light mode","coderembassy-order-vanguard"):(0,o.__)("Use dark mode","coderembassy-order-vanguard");return(0,w.jsxs)("header",{className:"ceog-topbar",children:[(0,w.jsxs)("div",{className:"ceog-topbar__leading",children:[(0,w.jsx)("button",{id:"ceog-mobile-menu-trigger",type:"button",className:"ceog-icon-button ceog-mobile-menu-trigger",onClick:i,"aria-label":(0,o.__)("Open navigation","coderembassy-order-vanguard"),"aria-expanded":t,"aria-controls":"ceog-mobile-navigation",title:(0,o.__)("Open navigation","coderembassy-order-vanguard"),children:(0,w.jsx)(V,{size:21,"aria-hidden":"true"})}),(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-topbar__eyebrow",children:(0,o.__)("Order Vanguard","coderembassy-order-vanguard")}),(0,w.jsx)("h1",{className:"ceog-topbar__title",children:l})]})]}),(0,w.jsxs)("div",{className:"ceog-topbar__actions",children:[(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:d,"aria-label":u,"aria-pressed":g,title:u,children:(0,w.jsx)(h,{size:18,"aria-hidden":"true"})}),(0,w.jsxs)("div",{className:"ceog-user",children:[n?.avatarUrl?(0,w.jsx)("img",{className:"ceog-user__avatar",src:n.avatarUrl,alt:""}):(0,w.jsx)("span",{className:"ceog-user__initial","aria-hidden":"true",children:q(n?.displayName)}),(0,w.jsx)("span",{className:"ceog-user__name",children:n?.displayName||(0,o.__)("Admin","coderembassy-order-vanguard")})]})]})]})}const F=x("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]),U=x("search-x",[["path",{d:"m13.5 8.5-5 5",key:"1cs55j"}],["path",{d:"m8.5 8.5 5 5",key:"a8mexj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]),H=x("fingerprint-pattern",[["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M2 12a10 10 0 0 1 18-6",key:"ydlgp0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2",key:"1tidbn"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2",key:"1fr1j5"}]]),$=x("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]),G=x("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]),K=x("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),Z=x("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]),X={type:"",after:"",before:"",ip_hash:""},J=["breaker_ip_trip","breaker_email_trip","breaker_global_trip","blocked_add_item","blocked_checkout","blocked_batch_op","flagged_order","honeypot_hit","blocklist_hit","monitor_would_block","auto_block_added","auto_block_expired"],Y=e=>{switch(e){case"breaker_ip_trip":return(0,o.__)("Per-IP breaker tripped","coderembassy-order-vanguard");case"breaker_email_trip":return(0,o.__)("Email breaker tripped","coderembassy-order-vanguard");case"breaker_global_trip":return(0,o.__)("Global breaker tripped","coderembassy-order-vanguard");case"blocked_add_item":return(0,o.__)("Add-to-cart blocked","coderembassy-order-vanguard");case"blocked_checkout":return(0,o.__)("Checkout blocked","coderembassy-order-vanguard");case"blocked_batch_op":return(0,o.__)("Batch operation blocked","coderembassy-order-vanguard");case"flagged_order":return(0,o.__)("Order flagged","coderembassy-order-vanguard");case"honeypot_hit":return(0,o.__)("Honeypot triggered","coderembassy-order-vanguard");case"blocklist_hit":return(0,o.__)("Blocklist matched","coderembassy-order-vanguard");case"monitor_would_block":return(0,o.__)("Monitor decision","coderembassy-order-vanguard");case"auto_block_added":return(0,o.__)("Temporary block added","coderembassy-order-vanguard");case"auto_block_expired":return(0,o.__)("Temporary block expired","coderembassy-order-vanguard");default:return e||(0,o.__)("Unknown event","coderembassy-order-vanguard")}};function Q(){const[e,a]=(0,r.useState)(X),[s,d]=(0,r.useState)(X),[t,c]=(0,r.useState)(1),[l,g]=(0,r.useState)({rows:[],total:0,pages:0}),[u,m]=(0,r.useState)([]),[_,b]=(0,r.useState)(!0),[y,v]=(0,r.useState)(!1),[p,x]=(0,r.useState)(""),[j,C]=(0,r.useState)(0);(0,r.useEffect)(()=>{let e=!0;return(async()=>{b(!0),x("");try{const a=await((e={})=>{const a=new URLSearchParams;Object.entries(e).forEach(([e,s])=>{""!==s&&null!=s&&a.set(e,String(s))});const s=a.toString();return n()({path:i("log")+(s?"?"+s:"")})})({...s,page:t,per_page:25});e&&(g({rows:Array.isArray(a?.rows)?a.rows:[],total:Number(a?.total||0),pages:Number(a?.pages||0)}),m([]))}catch(a){e&&x(h(a))}finally{e&&b(!1)}})(),()=>{e=!1}},[s,t,j]);const M=(e,s)=>{a(a=>({...a,[e]:s}))},z=()=>{a(X),d(X),c(1)},P=l.rows.length>0&&l.rows.every(e=>u.includes(e.id));return(0,w.jsxs)("div",{className:"ceog-page ceog-log-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Protection history","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Activity Log","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Review monitor decisions and enforced actions without loading the full log into your browser.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:"ceog-status ceog-status--success",children:[(0,w.jsx)(S,{size:15,"aria-hidden":"true"}),(0,o.sprintf)(/* translators: %d: number of matching protection events. */ /* translators: %d: number of matching protection events. */
     2(0,o.__)("%d events","coderembassy-order-vanguard"),l.total)]})]}),(0,w.jsxs)("form",{className:"ceog-log-filters",onSubmit:a=>{a.preventDefault(),c(1),d({...e})},children:[(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-log-type",children:[(0,w.jsx)("span",{children:(0,o.__)("Event type","coderembassy-order-vanguard")}),(0,w.jsxs)("select",{id:"ceog-log-type",value:e.type,onChange:e=>M("type",e.target.value),children:[(0,w.jsx)("option",{value:"",children:(0,o.__)("All events","coderembassy-order-vanguard")}),J.map(e=>(0,w.jsx)("option",{value:e,children:Y(e)},e))]})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-log-after",children:[(0,w.jsx)("span",{children:(0,o.__)("From date","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-log-after",type:"date",value:e.after,max:e.before||void 0,onChange:e=>M("after",e.target.value)})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-log-before",children:[(0,w.jsx)("span",{children:(0,o.__)("To date","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-log-before",type:"date",value:e.before,min:e.after||void 0,onChange:e=>M("before",e.target.value)})]}),(0,w.jsxs)("div",{className:"ceog-log-filter-actions",children:[(0,w.jsxs)("button",{type:"submit",className:"ceog-button ceog-button--primary",children:[(0,w.jsx)(F,{size:16,"aria-hidden":"true"}),(0,o.__)("Apply filters","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:z,children:[(0,w.jsx)(U,{size:16,"aria-hidden":"true"}),(0,o.__)("Clear","coderembassy-order-vanguard")]})]})]}),s.ip_hash&&(0,w.jsxs)("div",{className:"ceog-correlation-filter",role:"status",children:[(0,w.jsx)(H,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Showing events from the same attacker","coderembassy-order-vanguard")}),(0,w.jsx)("code",{children:s.ip_hash.slice(0,12)+"..."}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:z,"aria-label":(0,o.__)("Clear attacker filter","coderembassy-order-vanguard"),title:(0,o.__)("Clear attacker filter","coderembassy-order-vanguard"),children:(0,w.jsx)(N,{size:16,"aria-hidden":"true"})})]}),p&&(0,w.jsx)(f,{message:p,onRetry:()=>C(e=>e+1)}),(0,w.jsxs)("section",{className:"ceog-log-panel","aria-busy":_,children:[(0,w.jsxs)("div",{className:"ceog-log-actions",children:[(0,w.jsx)("span",{children:u.length>0?(0,o.sprintf)(/* translators: %d: number of selected log rows. */ /* translators: %d: number of selected log rows. */
     3(0,o.__)("%d selected","coderembassy-order-vanguard"),u.length):(0,o.__)("Select rows to delete","coderembassy-order-vanguard")}),(0,w.jsxs)("div",{children:[(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:()=>C(e=>e+1),disabled:_,"aria-label":(0,o.__)("Refresh events","coderembassy-order-vanguard"),title:(0,o.__)("Refresh events","coderembassy-order-vanguard"),children:(0,w.jsx)(k,{size:16,"aria-hidden":"true"})}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--danger",onClick:async()=>{if(!(u.length<1)&&window.confirm((0,o.sprintf)(/* translators: %d: number of selected log rows. */ /* translators: %d: number of selected log rows. */
     4(0,o.__)("Permanently delete %d selected event(s)?","coderembassy-order-vanguard"),u.length))){v(!0),x("");try{await(e=u,n()({path:i("log/delete"),method:"POST",data:{ids:e}}));const a=u.length===l.rows.length&&t>1;m([]),a?c(t-1):C(e=>e+1)}catch(e){x(h(e))}finally{v(!1)}var e}},disabled:u.length<1||y,children:[(0,w.jsx)($,{size:16,"aria-hidden":"true"}),y?(0,o.__)("Deleting...","coderembassy-order-vanguard"):(0,o.__)("Delete selected","coderembassy-order-vanguard")]})]})]}),_&&l.rows.length<1?(0,w.jsxs)("div",{className:"ceog-log-loading",children:[(0,w.jsx)(k,{size:22,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Loading protection events...","coderembassy-order-vanguard")})]}):l.rows.length<1?(0,w.jsxs)("div",{className:"ceog-log-empty",children:[(0,w.jsx)(S,{size:26,"aria-hidden":"true"}),(0,w.jsx)("h3",{children:(0,o.__)("No matching protection events","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("New protection events will appear here. Adjust the filters if you expected existing rows.","coderembassy-order-vanguard")})]}):(0,w.jsx)("div",{className:"ceog-log-table-wrap",children:(0,w.jsxs)("table",{className:"ceog-log-table",children:[(0,w.jsx)("thead",{children:(0,w.jsxs)("tr",{children:[(0,w.jsx)("th",{className:"ceog-log-table__select",children:(0,w.jsx)("input",{type:"checkbox",checked:P,onChange:()=>{m(P?[]:l.rows.map(e=>e.id))},"aria-label":(0,o.__)("Select this page","coderembassy-order-vanguard")})}),(0,w.jsx)("th",{children:(0,o.__)("Time","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Type","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Mode","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("IP","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Route","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Reason","coderembassy-order-vanguard")}),(0,w.jsx)("th",{children:(0,o.__)("Order","coderembassy-order-vanguard")})]})}),(0,w.jsx)("tbody",{children:l.rows.map(e=>(0,w.jsxs)("tr",{children:[(0,w.jsx)("td",{className:"ceog-log-table__select",children:(0,w.jsx)("input",{type:"checkbox",checked:u.includes(e.id),onChange:()=>{return a=e.id,void m(e=>e.includes(a)?e.filter(e=>e!==a):[...e,a]);var a},"aria-label":(0,o.sprintf)(/* translators: %d: log row ID. */ /* translators: %d: log row ID. */
     5(0,o.__)("Select event %d","coderembassy-order-vanguard"),e.id)})}),(0,w.jsx)("td",{className:"ceog-log-table__time",children:e.event_time}),(0,w.jsx)("td",{children:(0,w.jsx)("span",{className:"ceog-event-type",children:Y(e.event_type)})}),(0,w.jsx)("td",{children:(0,w.jsx)("span",{className:"ceog-mode-badge ceog-mode-badge--"+e.mode,children:"enforce"===e.mode?(0,o.__)("Enforce","coderembassy-order-vanguard"):(0,o.__)("Monitor","coderembassy-order-vanguard")})}),(0,w.jsx)("td",{children:(0,w.jsxs)("div",{className:"ceog-log-ip",children:[(0,w.jsx)("code",{children:e.ip_display||"-"}),e.ip_hash&&(0,w.jsx)("button",{type:"button",className:"ceog-icon-button ceog-icon-button--small",onClick:()=>(e=>{const s={...X,ip_hash:e};a(s),d(s),c(1)})(e.ip_hash),"aria-label":(0,o.__)("Show the same attacker","coderembassy-order-vanguard"),title:(0,o.__)("Show the same attacker","coderembassy-order-vanguard"),children:(0,w.jsx)(H,{size:14,"aria-hidden":"true"})})]})}),(0,w.jsx)("td",{className:"ceog-log-table__route",children:e.route||"-"}),(0,w.jsx)("td",{className:"ceog-log-table__reason",children:e.reason||"-"}),(0,w.jsx)("td",{children:e.order_id>0&&e.order_url?(0,w.jsxs)("a",{href:e.order_url,target:"_blank",rel:"noreferrer",children:["#"+e.order_id,(0,w.jsx)(G,{size:13,"aria-hidden":"true"})]}):e.order_id>0?"#"+e.order_id:"-"})]},e.id))})]})}),(0,w.jsxs)("div",{className:"ceog-log-pagination",children:[(0,w.jsx)("span",{children:l.pages>0?(0,o.sprintf)(/* translators: 1: current page, 2: total pages. */ /* translators: 1: current page, 2: total pages. */
     6(0,o.__)("Page %1$d of %2$d","coderembassy-order-vanguard"),t,l.pages):(0,o.__)("No pages","coderembassy-order-vanguard")}),(0,w.jsxs)("div",{children:[(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:()=>c(Math.max(1,t-1)),disabled:t<=1||_,children:[(0,w.jsx)(K,{size:16,"aria-hidden":"true"}),(0,o.__)("Previous","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:()=>c(t+1),disabled:t>=l.pages||_,children:[(0,o.__)("Next","coderembassy-order-vanguard"),(0,w.jsx)(Z,{size:16,"aria-hidden":"true"})]})]})]})]})]})}const ee=x("network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]),ae=x("mail",[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]]),se=x("earth",[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),re=x("clock-3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6h4",key:"135r8i"}]]),oe=x("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),de=x("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),ne=x("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);function te({id:e,label:a,description:s,checked:r,onChange:o,disabled:d=!1,tone:n="default"}){return(0,w.jsxs)("label",{className:"ceog-toggle-row ceog-toggle-row--"+n+(d?" is-disabled":""),htmlFor:e,children:[(0,w.jsxs)("span",{className:"ceog-toggle-row__copy",children:[(0,w.jsx)("strong",{children:a}),(0,w.jsx)("small",{children:s})]}),(0,w.jsx)("input",{id:e,type:"checkbox",checked:r,onChange:e=>o(e.target.checked),disabled:d}),(0,w.jsx)("span",{className:"ceog-switch","aria-hidden":"true"})]})}const ie=(e={})=>({breaker_ip_enabled:!1!==e.breaker_ip_enabled,breaker_ip_threshold:String(e.breaker_ip_threshold||5),breaker_ip_window:String(e.breaker_ip_window||300),breaker_ip_block:String(e.breaker_ip_block||600),breaker_email_enabled:!1!==e.breaker_email_enabled,breaker_email_threshold:String(e.breaker_email_threshold||3),breaker_email_window:String(e.breaker_email_window||600),breaker_email_block:String(e.breaker_email_block||900),breaker_global_enabled:!1!==e.breaker_global_enabled,breaker_global_threshold:String(e.breaker_global_threshold||20),breaker_global_window:String(e.breaker_global_window||300),breaker_global_cooldown:String(e.breaker_global_cooldown||120)}),ce={ip:{Icon:ee,title:()=>(0,o.__)("Per-IP breaker","coderembassy-order-vanguard"),description:()=>(0,o.__)("Stops repeated failed orders from one IPv4 address or IPv6 /64 network.","coderembassy-order-vanguard"),enabled:"breaker_ip_enabled",threshold:"breaker_ip_threshold",window:"breaker_ip_window",duration:"breaker_ip_block",durationLabel:()=>(0,o.__)("Block duration (seconds)","coderembassy-order-vanguard"),note:()=>(0,o.__)("Shared mobile, office, and CGNAT connections can represent several customers. Keep this block short.","coderembassy-order-vanguard")},email:{Icon:ae,title:()=>(0,o.__)("Per-email breaker","coderembassy-order-vanguard"),description:()=>(0,o.__)("Links rotating IPs when repeated failures use the same billing email.","coderembassy-order-vanguard"),enabled:"breaker_email_enabled",threshold:"breaker_email_threshold",window:"breaker_email_window",duration:"breaker_email_block",durationLabel:()=>(0,o.__)("Block duration (seconds)","coderembassy-order-vanguard"),note:()=>(0,o.__)("A shared household or team billing email may affect more than one shopper. The default requires three failures.","coderembassy-order-vanguard")},global:{Icon:se,title:()=>(0,o.__)("Global breaker","coderembassy-order-vanguard"),description:()=>(0,o.__)("Pauses non-whitelisted checkout when failures arrive across the whole store.","coderembassy-order-vanguard"),enabled:"breaker_global_enabled",threshold:"breaker_global_threshold",window:"breaker_global_window",duration:"breaker_global_cooldown",durationLabel:()=>(0,o.__)("Cooldown (seconds)","coderembassy-order-vanguard"),note:()=>(0,o.__)("This temporarily pauses all non-whitelisted checkout. A short cooldown is the primary defense against distributed attacks.","coderembassy-order-vanguard")}},le=e=>{const a=Math.max(0,Number(e)||0),s=Math.floor(a/60),r=a%60;return s>0?(0,o.sprintf)(/* translators: 1: minutes, 2: seconds */ /* translators: 1: minutes, 2: seconds */
     7(0,o.__)("%1$dm %2$ds remaining","coderembassy-order-vanguard"),s,r):(0,o.sprintf)(/* translators: %d: seconds */ /* translators: %d: seconds */
     8(0,o.__)("%d seconds remaining","coderembassy-order-vanguard"),r)};function ge({tier:e}){return e?.enabled?"cooling_down"===e.state?(0,w.jsxs)("div",{className:e.blocking?"ceog-breaker-live ceog-breaker-live--danger":"ceog-breaker-live ceog-breaker-live--warning",children:[(0,w.jsx)(re,{size:17,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Cooling down","coderembassy-order-vanguard")}),(0,w.jsx)("small",{children:le(e.cooldownSeconds)})]}),(0,w.jsx)("strong",{children:e.blocking?(0,o.__)("Blocking","coderembassy-order-vanguard"):(0,o.__)("Logging","coderembassy-order-vanguard")})]}):(0,w.jsxs)("div",{className:"ceog-breaker-live ceog-breaker-live--ready",children:[(0,w.jsx)(oe,{size:17,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Ready","coderembassy-order-vanguard")}),(0,w.jsx)("small",{children:(0,o.__)("Protection active","coderembassy-order-vanguard")})]})]}):(0,w.jsxs)("div",{className:"ceog-breaker-live ceog-breaker-live--muted",children:[(0,w.jsx)("span",{children:(0,o.__)("Disabled","coderembassy-order-vanguard")}),(0,w.jsx)("small",{children:(0,o.__)("Protection inactive","coderembassy-order-vanguard")})]})}function he({name:e,draft:a,status:s,onUpdate:r}){const d=ce[e],n=d.Icon,t=Boolean(a[d.enabled]);return(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-breaker-panel ceog-breaker-panel--"+e,children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(n,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsxs)("div",{className:"ceog-breaker-title-row",children:[(0,w.jsx)("h3",{children:d.title()}),"global"===e&&(0,w.jsx)("span",{className:"ceog-badge ceog-badge--primary",children:(0,o.__)("Distributed defense","coderembassy-order-vanguard")})]}),(0,w.jsx)("p",{children:d.description()})]})]}),(0,w.jsx)(ge,{tier:s}),(0,w.jsx)(te,{id:"ceog-"+e+"-breaker-enabled",label:(0,o.__)("Enable this breaker","coderembassy-order-vanguard"),description:(0,o.__)("Failed orders feed this sliding window in both Monitor and Enforce modes.","coderembassy-order-vanguard"),checked:t,onChange:e=>r(d.enabled,e)}),(0,w.jsxs)("div",{className:"ceog-breaker-fields",children:[(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-"+e+"-threshold",children:[(0,w.jsx)("span",{children:(0,o.__)("Failed orders","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-"+e+"-threshold",type:"number",min:"1",max:"global"===e?"10000":"1000",value:a[d.threshold],onChange:e=>r(d.threshold,e.target.value),disabled:!t})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-"+e+"-window",children:[(0,w.jsx)("span",{children:(0,o.__)("Window (seconds)","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-"+e+"-window",type:"number",min:"30",max:"86400",value:a[d.window],onChange:e=>r(d.window,e.target.value),disabled:!t})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-"+e+"-duration",children:[(0,w.jsx)("span",{children:d.durationLabel()}),(0,w.jsx)("input",{id:"ceog-"+e+"-duration",type:"number",min:"30",max:"86400",value:a[d.duration],onChange:e=>r(d.duration,e.target.value),disabled:!t})]})]}),(0,w.jsxs)("div",{className:"ceog-breaker-note",children:[(0,w.jsx)(j,{size:17,"aria-hidden":"true"}),(0,w.jsx)("p",{children:d.note()})]})]})}function ue({payload:e,loading:a,settingsBusy:s,onSave:d}){const[t,c]=(0,r.useState)(ie(e?.settings)),[l,g]=(0,r.useState)(null),[u,m]=(0,r.useState)(!0),[_,b]=(0,r.useState)(""),[y,v]=(0,r.useState)(!1),p=(0,r.useCallback)(async(e=!1)=>{e&&m(!0),b("");try{g(await n()({path:i("breakers")}))}catch(e){b(h(e))}finally{m(!1)}},[]);(0,r.useEffect)(()=>{c(ie(e?.settings)),v(!1)},[e?.settings]),(0,r.useEffect)(()=>{p(!0)},[p]),(0,r.useEffect)(()=>{const e=window.setInterval(()=>{document.hidden||p()},15e3);return()=>window.clearInterval(e)},[p]),(0,r.useEffect)(()=>{const e=window.setInterval(()=>{g(e=>{if(!e?.tiers)return e;const a=Object.fromEntries(Object.entries(e.tiers).map(([e,a])=>{const s=Math.max(0,Number(a.cooldownSeconds||0)-1);return[e,{...a,cooldownSeconds:s,state:s>0?a.state:a.enabled?"ready":"disabled",blocking:s>0&&a.blocking,activeEntities:s>0?a.activeEntities:0}]}));return{...e,tiers:a}})},1e3);return()=>window.clearInterval(e)},[]);const x=(e,a)=>{c(s=>({...s,[e]:a})),v(!1)};if(a||!e)return(0,w.jsxs)("div",{className:"ceog-loading","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--store-api"}),(0,w.jsxs)("div",{className:"ceog-breaker-grid",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"})]})]});const f=l?.tiers?Object.values(l.tiers).filter(e=>"cooling_down"===e.state).length:0;return(0,w.jsxs)("div",{className:"ceog-page ceog-breakers-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Failed-order protection","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Circuit Breakers","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Three short sliding windows stop repeated payment failures with the smallest practical checkout impact.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-breaker-header-status",children:[(0,w.jsxs)("span",{className:f>0?"ceog-status ceog-status--warning":"ceog-status ceog-status--success",children:[(0,w.jsx)(de,{size:15,"aria-hidden":"true"}),f>0?(0,o.sprintf)(/* translators: %d: active breaker tiers */ /* translators: %d: active breaker tiers */
     9(0,o.__)("%d cooling down","coderembassy-order-vanguard"),f):(0,o.__)("All ready","coderembassy-order-vanguard")]}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:()=>p(!0),disabled:u,"aria-label":(0,o.__)("Refresh breaker status","coderembassy-order-vanguard"),title:(0,o.__)("Refresh breaker status","coderembassy-order-vanguard"),children:(0,w.jsx)(k,{size:17,"aria-hidden":"true"})})]})]}),_&&(0,w.jsxs)("div",{className:"ceog-warning",role:"alert",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:_})]}),e.meta?.safeMode&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Safe Mode keeps breaker counters and logging active while all checkout blocking remains suspended.","coderembassy-order-vanguard")})]}),(0,w.jsx)("div",{className:"ceog-breaker-grid",children:["ip","email","global"].map(e=>(0,w.jsx)(he,{name:e,draft:t,status:l?.tiers?.[e],onUpdate:x},e))}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[y&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(oe,{size:15,"aria-hidden":"true"}),(0,o.__)("Circuit breaker settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{const e=Object.fromEntries(Object.entries(t).map(([e,a])=>[e,"boolean"==typeof a?a:Number(a)])),a=await d(e);v(Boolean(a)),a&&p()},disabled:s,children:[(0,w.jsx)(ne,{size:16,"aria-hidden":"true"}),s?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save breaker settings","coderembassy-order-vanguard")]})]})]})}const me=x("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]),_e=x("chart-column",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]),be=x("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);function ye({mode:e,onChange:a,busy:s=!1,compact:r=!1}){return(0,w.jsxs)("div",{className:"ceog-mode-control"+(r?" ceog-mode-control--compact":""),role:"group","aria-label":(0,o.__)("Protection mode","coderembassy-order-vanguard"),children:[(0,w.jsxs)("button",{type:"button",className:"monitor"===e?"is-active":"",onClick:()=>a("monitor"),"aria-pressed":"monitor"===e,disabled:s,children:[(0,w.jsx)(be,{size:16,"aria-hidden":"true"}),(0,o.__)("Monitor","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"enforce"===e?"is-active":"",onClick:()=>a("enforce"),"aria-pressed":"enforce"===e,disabled:s,children:[(0,w.jsx)(de,{size:16,"aria-hidden":"true"}),(0,o.__)("Enforce","coderembassy-order-vanguard")]})]})}const ve=e=>{switch(e){case"breaker_ip_trip":return(0,o.__)("Per-IP breaker tripped","coderembassy-order-vanguard");case"breaker_email_trip":return(0,o.__)("Email breaker tripped","coderembassy-order-vanguard");case"breaker_global_trip":return(0,o.__)("Global breaker tripped","coderembassy-order-vanguard");case"blocked_add_item":return(0,o.__)("Add-to-cart blocked","coderembassy-order-vanguard");case"blocked_checkout":return(0,o.__)("Checkout blocked","coderembassy-order-vanguard");case"blocked_batch_op":return(0,o.__)("Batch operation blocked","coderembassy-order-vanguard");case"flagged_order":return(0,o.__)("Order flagged","coderembassy-order-vanguard");case"honeypot_hit":return(0,o.__)("Honeypot triggered","coderembassy-order-vanguard");case"blocklist_hit":return(0,o.__)("Blocklist matched","coderembassy-order-vanguard");case"monitor_would_block":return(0,o.__)("Monitor decision","coderembassy-order-vanguard");default:return e||(0,o.__)("Protection event","coderembassy-order-vanguard")}},pe=new Intl.NumberFormat,xe=e=>pe.format(Number(e||0)),je=e=>{const a=Math.max(0,Number(e||0));return Math.floor(a/60)+":"+String(a%60).padStart(2,"0")},ke=e=>{const a=new Date(e+"T12:00:00");return Number.isNaN(a.getTime())?e:a.toLocaleDateString(void 0,{weekday:"short"})},we=e=>{const a=new Date(String(e||"").replace(" ","T"));return Number.isNaN(a.getTime())?e:a.toLocaleString()};function fe({payload:e,modeBusy:a,onModeChange:s,loading:d}){const[t,c]=(0,r.useState)(null),[l,g]=(0,r.useState)(!0),[u,m]=(0,r.useState)(""),[_,b]=(0,r.useState)(0),[y,v]=(0,r.useState)(0),[p,x]=(0,r.useState)(Date.now());(0,r.useEffect)(()=>{let e=!0,a=null,s=!1,r=0;const o=async()=>{if(e&&!document.hidden&&!s){s=!0;try{const a=await n()({path:i("dashboard")});e&&(c(a),v(Date.now()),m(""),r=0)}catch(a){e&&(r+=1,m(h(a)))}finally{s=!1,e&&(g(!1),d=r?Math.min(3e4*2**(r-1),24e4):3e4,window.clearTimeout(a),e&&!document.hidden&&(a=window.setTimeout(o,d)))}}var d},d=()=>{window.clearTimeout(a),document.hidden||o()};return document.addEventListener("visibilitychange",d),o(),()=>{e=!1,window.clearTimeout(a),document.removeEventListener("visibilitychange",d)}},[_]),(0,r.useEffect)(()=>{if(!t)return;const e=window.setInterval(()=>x(Date.now()),1e3);return()=>window.clearInterval(e)},[t]);const N=y?Math.floor((p-y)/1e3):0,C=(0,r.useMemo)(()=>{let e="",a=0;return Object.entries(t?.breakers||{}).forEach(([s,r])=>{const o=Math.max(0,Number(r?.cooldownSeconds||0)-N);o>a&&(e=s,a=o)}),{tier:e,remaining:a}},[t,N]);if((l||d)&&!t)return(0,w.jsxs)("div",{className:"ceog-loading","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--hero"}),(0,w.jsx)("div",{className:"ceog-stat-grid",children:[1,2,3,4].map(e=>(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"},e))})]});if(u&&!t)return(0,w.jsx)(f,{message:u,onRetry:()=>b(e=>e+1)});const M=e?.settings||{},z=t?.configured_mode||M.mode||"monitor",P=Boolean(t?.safe_mode||e?.meta?.safeMode),E=P?"monitor":t?.mode||z,A=t?.protection_enabled??!1!==M.enabled,I=A&&"enforce"===E,O=Array.isArray(t?.weekly_series)?t.weekly_series:[],B=Math.max(1,...O.map(e=>Number(e.count||0))),R=Array.isArray(t?.recent_events)?t.recent_events:[];return(0,w.jsxs)("div",{className:"ceog-dashboard",children:[u&&(0,w.jsxs)("div",{className:"ceog-dashboard-sync-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:u}),(0,w.jsx)("button",{type:"button",className:"ceog-icon-button",onClick:()=>b(e=>e+1),"aria-label":(0,o.__)("Retry dashboard update","coderembassy-order-vanguard"),title:(0,o.__)("Retry dashboard update","coderembassy-order-vanguard"),children:(0,w.jsx)(k,{size:17,"aria-hidden":"true"})})]}),P&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Order Vanguard Safe Mode is active - protection is monitoring only.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("section",{className:"ceog-hero","aria-labelledby":"ceog-hero-title",children:[(0,w.jsxs)("div",{className:"ceog-hero__copy",children:[(0,w.jsxs)("div",{className:"ceog-hero__badges",children:[(0,w.jsx)("span",{className:"ceog-badge ceog-badge--light",children:(0,o.__)("WooCommerce protection","coderembassy-order-vanguard")}),(0,w.jsxs)("span",{className:"ceog-hero__status",children:[(0,w.jsx)(oe,{size:15,"aria-hidden":"true"}),A?I?(0,o.__)("Protection active","coderembassy-order-vanguard"):(0,o.__)("Monitoring traffic","coderembassy-order-vanguard"):(0,o.__)("Protection disabled","coderembassy-order-vanguard")]})]}),(0,w.jsx)("h2",{id:"ceog-hero-title",children:(0,o.__)("CoderEmbassy Order Vanguard","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("API-level protection against card testing, bot orders, and fake checkouts.","coderembassy-order-vanguard")}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--hero",onClick:()=>L("activity-log"),children:[(0,w.jsx)(S,{size:16,"aria-hidden":"true"}),(0,o.__)("View activity log","coderembassy-order-vanguard"),(0,w.jsx)(me,{size:16,"aria-hidden":"true"})]})]}),(0,w.jsxs)("div",{className:"ceog-hero__mode",children:[(0,w.jsx)("span",{children:(0,o.__)("Protection mode","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:I?(0,o.__)("Enforcing","coderembassy-order-vanguard"):(0,o.__)("Monitoring","coderembassy-order-vanguard")}),(0,w.jsx)(ye,{mode:z,onChange:async e=>{await s(e),b(e=>e+1)},busy:a})]})]}),(0,w.jsxs)("section",{className:"ceog-stat-grid","aria-label":(0,o.__)("Protection summary","coderembassy-order-vanguard"),children:[(0,w.jsxs)("div",{className:"ceog-stat ceog-stat--green",children:[(0,w.jsx)(de,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:xe(t?.blocked_today)}),(0,w.jsx)("span",{children:(0,o.__)("Blocked today","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-stat ceog-stat--amber",children:[(0,w.jsx)(S,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:xe(t?.suspicious_7d)}),(0,w.jsx)("span",{children:(0,o.__)("Suspicious (7d)","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-stat ceog-stat--purple",children:[(0,w.jsx)(oe,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:I?(0,o.__)("Enforce","coderembassy-order-vanguard"):(0,o.__)("Monitor","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("Protection mode","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-stat "+(C.remaining>0?"ceog-stat--danger":"ceog-stat--blue"),children:[(0,w.jsx)(re,{size:19,"aria-hidden":"true"}),(0,w.jsx)("strong",{children:C.remaining>0?je(C.remaining):(0,o.__)("Ready","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:C.remaining>0&&I?(0,o.__)("Checkout paused","coderembassy-order-vanguard"):(0,o.__)("Circuit breakers","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("section",{className:"ceog-quickstart",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{className:"ceog-section-kicker",children:(0,o.__)("Monitor first","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Start with a clear baseline","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Keep Monitor mode on while Order Vanguard records traffic. Switch to Enforce after the activity log matches what you expect.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button",onClick:()=>L("settings"),children:[(0,o.__)("Review settings","coderembassy-order-vanguard"),(0,w.jsx)(me,{size:16,"aria-hidden":"true"})]})]}),(0,w.jsxs)("div",{className:"ceog-dashboard-grid",children:[(0,w.jsxs)("section",{className:"ceog-dashboard-panel","aria-labelledby":"ceog-weekly-title",children:[(0,w.jsxs)("div",{className:"ceog-dashboard-panel__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)(_e,{size:19,"aria-hidden":"true"}),(0,w.jsx)("h2",{id:"ceog-weekly-title",children:(0,o.__)("Threat activity this week","coderembassy-order-vanguard")})]}),(0,w.jsx)("span",{children:xe(t?.suspicious_7d)})]}),(0,w.jsx)("div",{className:"ceog-weekly-chart",children:O.map(e=>(0,w.jsxs)("div",{className:"ceog-weekly-chart__day",children:[(0,w.jsx)("span",{className:"ceog-weekly-chart__value",children:xe(e.count)}),(0,w.jsx)("div",{className:"ceog-weekly-chart__track",children:(0,w.jsx)("span",{style:{height:Number(e.count)>0?Math.max(8,Number(e.count)/B*100)+"%":"0%"}})}),(0,w.jsx)("strong",{children:ke(e.date)})]},e.date))})]}),(0,w.jsxs)("section",{className:"ceog-dashboard-panel","aria-labelledby":"ceog-recent-title",children:[(0,w.jsxs)("div",{className:"ceog-dashboard-panel__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)(S,{size:19,"aria-hidden":"true"}),(0,w.jsx)("h2",{id:"ceog-recent-title",children:(0,o.__)("Recent protection events","coderembassy-order-vanguard")})]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--quiet",onClick:()=>L("activity-log"),children:[(0,o.__)("View all","coderembassy-order-vanguard"),(0,w.jsx)(me,{size:15,"aria-hidden":"true"})]})]}),R.length?(0,w.jsx)("ul",{className:"ceog-recent-events",children:R.map(e=>(0,w.jsxs)("li",{children:[(0,w.jsx)("span",{className:"ceog-event-dot ceog-event-dot--"+("enforce"===e.mode?"enforce":"monitor")}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:ve(e.event_type)}),(0,w.jsx)("small",{children:we(e.event_time)})]}),e.order_url&&(0,w.jsx)("a",{href:e.order_url,"aria-label":(0,o.__)("Open order","coderembassy-order-vanguard"),title:(0,o.__)("Open order","coderembassy-order-vanguard"),children:(0,w.jsx)(G,{size:16,"aria-hidden":"true"})})]},e.id))}):(0,w.jsxs)("div",{className:"ceog-dashboard-empty",children:[(0,w.jsx)(de,{size:22,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("No protection events yet","coderembassy-order-vanguard")})]})]})]})]})}const Ne=x("ban",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}]]),Ce=x("user-round-check",[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"m16 19 2 2 4-4",key:"1b14m6"}]]),Se=x("credit-card",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]),Me=x("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),ze=x("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]),Pe=x("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]),Ee=x("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);function Ae({id:e,label:a,description:s,icon:d,options:n=[],value:t=[],onChange:i,searchPlaceholder:c,emptyText:l,allowManual:g=!1,manualPlaceholder:h=""}){const u=(0,r.useRef)(null),[m,_]=(0,r.useState)(!1),[b,y]=(0,r.useState)(""),[v,p]=(0,r.useState)(""),x=Array.isArray(t)?t:[],j=Array.isArray(n)?n:[];(0,r.useEffect)(()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&_(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);const k=(0,r.useMemo)(()=>{const e=b.trim().toLowerCase();return j.filter(a=>!e||[a.label,a.value].some(a=>String(a||"").toLowerCase().includes(e)))},[j,b]),f=(0,r.useMemo)(()=>{const e={};return j.forEach(a=>{e[a.value]=a.label}),e},[j]),C=e=>{i(x.includes(e)?x.filter(a=>a!==e):[...x,e])};return(0,w.jsxs)("div",{className:"ceog-choice-field",ref:u,children:[(0,w.jsxs)("div",{className:"ceog-choice-field__heading",children:[d&&(0,w.jsx)(d,{size:17,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{id:e+"-label",children:a}),(0,w.jsx)("small",{children:s})]})]}),x.length>0&&(0,w.jsx)("div",{className:"ceog-choice-tokens","aria-label":(0,o.__)("Selected values","coderembassy-order-vanguard"),children:x.map(e=>(0,w.jsxs)("span",{className:"ceog-choice-token",children:[(0,w.jsx)("span",{children:f[e]||e}),(0,w.jsx)("code",{children:e}),(0,w.jsx)("button",{type:"button",onClick:()=>C(e),"aria-label":(0,o.sprintf)(/* translators: %s: selected role or payment-method key. */ /* translators: %s: selected role or payment-method key. */
    1410(0,o.__)("Remove %s","coderembassy-order-vanguard"),e),title:(0,o.sprintf)(/* translators: %s: selected role or payment-method key. */ /* translators: %s: selected role or payment-method key. */
    15 (0,o.__)("Remove %s","coderembassy-order-vanguard"),e),children:(0,w.jsx)(N,{size:13,"aria-hidden":"true"})})]},e))}),(0,w.jsxs)("div",{className:"ceog-choice-menu",children:[(0,w.jsxs)("div",{className:"ceog-choice-search",children:[(0,w.jsx)(De,{size:16,"aria-hidden":"true"}),(0,w.jsx)("input",{id:e,type:"search",role:"combobox",value:b,placeholder:c,"aria-labelledby":e+"-label","aria-expanded":m,"aria-controls":e+"-options","aria-autocomplete":"list",onFocus:()=>_(!0),onChange:e=>{y(e.target.value),_(!0)},onKeyDown:e=>{"Escape"===e.key&&_(!1)}}),(0,w.jsx)("button",{type:"button",onClick:()=>_(!m),"aria-label":(0,o.__)("Toggle options","coderembassy-order-vanguard"),title:(0,o.__)("Toggle options","coderembassy-order-vanguard"),children:(0,w.jsx)(qe,{size:16,"aria-hidden":"true"})})]}),m&&(0,w.jsx)("div",{id:e+"-options",className:"ceog-choice-options",children:k.length>0?k.map(e=>{const a=x.includes(e.value);return(0,w.jsxs)("label",{className:a?"is-selected":"",children:[(0,w.jsx)("input",{type:"checkbox",checked:a,onChange:()=>C(e.value)}),(0,w.jsxs)("span",{children:[(0,w.jsx)("strong",{children:e.label}),(0,w.jsx)("code",{children:e.value})]}),a&&(0,w.jsx)(Fe,{size:15,"aria-hidden":"true"})]},e.value)}):(0,w.jsx)("p",{children:l})})]}),g&&(0,w.jsxs)("form",{className:"ceog-choice-manual",onSubmit:e=>{e.preventDefault();const a=p.trim().toLowerCase().replace(/[^a-z0-9_-]/g,"");a&&!x.includes(a)&&i([...x,a]),v("")},children:[(0,w.jsx)("input",{type:"text",value:p,placeholder:h,autoCapitalize:"none",autoCorrect:"off",spellCheck:"false",onChange:e=>v(e.target.value)}),(0,w.jsxs)("button",{type:"submit",className:"ceog-button",disabled:!p.trim(),children:[(0,w.jsx)(We,{size:15,"aria-hidden":"true"}),(0,o.__)("Add key","coderembassy-order-vanguard")]})]})]})}const He={blockEmails:"",blockDomains:"",blockIps:"",allowIps:"",allowRoles:[],allowPayments:[]},$e=e=>Array.isArray(e)?e.join("\n"):"",Ge=(e={})=>({blockEmails:$e(e.blocklist?.emails),blockDomains:$e(e.blocklist?.domains),blockIps:$e(e.blocklist?.ips),allowIps:$e(e.whitelist?.ips),allowRoles:Array.isArray(e.whitelist?.roles)?e.whitelist.roles:[],allowPayments:Array.isArray(e.whitelist?.payment_methods)?e.whitelist.payment_methods:[]}),Xe=e=>String(e).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);function Ye({id:e,label:a,description:r,value:s,onChange:o,placeholder:d}){return(0,w.jsxs)("label",{className:"ceog-list-field",htmlFor:e,children:[(0,w.jsx)("span",{children:a}),(0,w.jsx)("small",{children:r}),(0,w.jsx)("textarea",{id:e,rows:5,value:s,placeholder:d,autoCapitalize:"none",autoCorrect:"off",spellCheck:"false",onChange:e=>o(e.target.value)})]})}function Ke(){const[e,a]=(0,s.useState)(null),[r,d]=(0,s.useState)(He),[t,c]=(0,s.useState)(!0),[l,g]=(0,s.useState)(!1),[u,m]=(0,s.useState)(!1),[_,b]=(0,s.useState)(""),[y,p]=(0,s.useState)(0);(0,s.useEffect)(()=>{let e=!0;return(async()=>{c(!0),b("");try{const r=await n()({path:i("lists")});e&&(a(r),d(Ge(r)),m(!1))}catch(a){e&&b(h(a))}finally{e&&c(!1)}})(),()=>{e=!1}},[y]);const v=(e,a)=>{d(r=>({...r,[e]:a})),m(!1)};return(0,w.jsxs)("div",{className:"ceog-page ceog-lists-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Access controls","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Lists","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Manually block known sources and preserve trusted checkout paths.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-list-counts",children:[(0,w.jsxs)("span",{className:"ceog-status ceog-status--warning",children:[(0,w.jsx)(Le,{size:15,"aria-hidden":"true"}),(0,o.sprintf)(/* translators: %d: number of blocklist entries. */ /* translators: %d: number of blocklist entries. */
    16 (0,o.__)("%d blocked","coderembassy-order-vanguard"),Number(e?.counts?.blocked||0))]}),(0,w.jsxs)("span",{className:"ceog-status ceog-status--success",children:[(0,w.jsx)(_e,{size:15,"aria-hidden":"true"}),(0,o.sprintf)(/* translators: %d: number of whitelist entries. */ /* translators: %d: number of whitelist entries. */
    17 (0,o.__)("%d allowed","coderembassy-order-vanguard"),Number(e?.counts?.allowed||0))]})]})]}),(0,w.jsxs)("div",{className:"ceog-list-precedence",role:"status",children:[(0,w.jsx)(_e,{size:19,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:(0,o.__)("Whitelist always wins","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("A matching role, IP, or payment method bypasses blocklists and future protection rules.","coderembassy-order-vanguard")})]})]}),_&&(0,w.jsx)(f,{message:_,onRetry:()=>p(e=>e+1)}),t?(0,w.jsxs)("div",{className:"ceog-list-grid","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--list"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--list"})]}):(0,w.jsxs)("div",{className:"ceog-list-grid",children:[(0,w.jsxs)("section",{className:"ceog-list-panel ceog-list-panel--block",children:[(0,w.jsxs)("div",{className:"ceog-list-panel__heading",children:[(0,w.jsx)(Le,{size:21,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Blocklist","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Matches are logged in Monitor mode and stopped in Enforce mode.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(Ye,{id:"ceog-block-emails",label:(0,o.__)("Billing emails","coderembassy-order-vanguard"),description:(0,o.__)("Exact email addresses, one per line.","coderembassy-order-vanguard"),value:r.blockEmails,onChange:e=>v("blockEmails",e),placeholder:"bot@example.com"}),(0,w.jsx)(Ye,{id:"ceog-block-domains",label:(0,o.__)("Email domains","coderembassy-order-vanguard"),description:(0,o.__)("Domain names without @, one per line.","coderembassy-order-vanguard"),value:r.blockDomains,onChange:e=>v("blockDomains",e),placeholder:"example.com"}),(0,w.jsx)(Ye,{id:"ceog-block-ips",label:(0,o.__)("IP addresses","coderembassy-order-vanguard"),description:(0,o.__)("IPv4 matches exactly; IPv6 matches its entire /64 network.","coderembassy-order-vanguard"),value:r.blockIps,onChange:e=>v("blockIps",e),placeholder:"198.51.100.20"})]}),(0,w.jsxs)("section",{className:"ceog-list-panel ceog-list-panel--allow",children:[(0,w.jsxs)("div",{className:"ceog-list-panel__heading",children:[(0,w.jsx)(_e,{size:21,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Whitelist","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Use narrow exceptions for trusted staff, infrastructure, and checkout methods.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-list-field-icon",children:[(0,w.jsx)(he,{size:17,"aria-hidden":"true"}),(0,w.jsx)(Ye,{id:"ceog-allow-ips",label:(0,o.__)("Trusted IP addresses","coderembassy-order-vanguard"),description:(0,o.__)("IPv6 exceptions cover the entered /64 network.","coderembassy-order-vanguard"),value:r.allowIps,onChange:e=>v("allowIps",e),placeholder:"203.0.113.10"})]}),(0,w.jsx)(Ue,{id:"ceog-allow-roles",label:(0,o.__)("WordPress roles","coderembassy-order-vanguard"),description:(0,o.__)("Search and select the roles that should always bypass protection.","coderembassy-order-vanguard"),icon:Ve,options:e?.options?.roles,value:r.allowRoles,onChange:e=>v("allowRoles",e),searchPlaceholder:(0,o.__)("Search WordPress roles...","coderembassy-order-vanguard"),emptyText:(0,o.__)("No matching WordPress roles.","coderembassy-order-vanguard")}),(0,w.jsx)(Ue,{id:"ceog-allow-payments",label:(0,o.__)("Payment methods","coderembassy-order-vanguard"),description:(0,o.__)("Search installed gateways or add a custom gateway key manually.","coderembassy-order-vanguard"),icon:Te,options:e?.options?.payment_methods,value:r.allowPayments,onChange:e=>v("allowPayments",e),searchPlaceholder:(0,o.__)("Search payment methods...","coderembassy-order-vanguard"),emptyText:(0,o.__)("No matching payment methods.","coderembassy-order-vanguard"),allowManual:!0,manualPlaceholder:(0,o.__)("Custom gateway key","coderembassy-order-vanguard")}),(0,w.jsxs)("div",{className:"ceog-list-compatibility",children:[(0,w.jsx)(ge,{size:17,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Confirm gateway keys in WooCommerce payment settings before adding an exception.","coderembassy-order-vanguard")})]})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[u&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(me,{size:15,"aria-hidden":"true"}),(0,o.__)("Lists saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{g(!0),b("");try{const s=await(e={blocklist_emails:Xe(r.blockEmails),blocklist_email_domains:Xe(r.blockDomains),blocklist_ips:Xe(r.blockIps),whitelist_ips:Xe(r.allowIps),whitelist_roles:r.allowRoles,whitelist_payment_methods:r.allowPayments},n()({path:i("lists"),method:"POST",data:{lists:e}}));a(s),d(Ge(s)),m(!0)}catch(e){b(h(e)),m(!1)}finally{g(!1)}var e},disabled:t||l,children:[(0,w.jsx)(be,{size:16,"aria-hidden":"true"}),l?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save lists","coderembassy-order-vanguard")]})]})]})}const Ze={"activity-log":{icon:S,title:()=>(0,o.__)("No protection events yet","coderembassy-order-vanguard"),description:()=>(0,o.__)("Monitor and blocked events will appear here with server-side filters and pagination.","coderembassy-order-vanguard")},"circuit-breakers":{icon:P,title:()=>(0,o.__)("Circuit breakers are standing by","coderembassy-order-vanguard"),description:()=>(0,o.__)("Per-IP, per-email, and global checkout protection will report their live state here.","coderembassy-order-vanguard")},"store-api":{icon:z,title:()=>(0,o.__)("Store API Guard","coderembassy-order-vanguard"),description:()=>(0,o.__)("Store API rate limits, batch inspection, and advanced emergency controls will appear here.","coderembassy-order-vanguard")},lists:{icon:I,title:()=>(0,o.__)("No list entries yet","coderembassy-order-vanguard"),description:()=>(0,o.__)("Blocklist and whitelist entries will be managed from this workspace.","coderembassy-order-vanguard")},"privacy-logs":{icon:B,title:()=>(0,o.__)("Privacy-first logging","coderembassy-order-vanguard"),description:()=>(0,o.__)("IP anonymization, trusted proxy handling, retention, and uninstall controls will live here.","coderembassy-order-vanguard")},help:{icon:R,title:()=>(0,o.__)("Order Vanguard help","coderembassy-order-vanguard"),description:()=>(0,o.__)("Monitoring guidance and checkout compatibility notes will be available here.","coderembassy-order-vanguard")},"pro-license":{icon:T,title:()=>(0,o.__)("Order Vanguard Pro","coderembassy-order-vanguard"),description:()=>(0,o.__)("Attack cleanup, automated blocking, longer history, and advanced alerts are planned for Pro.","coderembassy-order-vanguard")}};function Je({route:e,boot:a={}}){const r=Ze[e]||Ze.help,s=r.icon,d="pro-license"===e&&Boolean(a.isPro);return(0,w.jsx)("div",{className:"ceog-page",children:(0,w.jsxs)("section",{className:"ceog-empty",children:[(0,w.jsx)("div",{className:"ceog-empty__icon",children:(0,w.jsx)(s,{size:25,"aria-hidden":"true"})}),(0,w.jsx)("h2",{children:d?(0,o.__)("Order Vanguard Pro is active","coderembassy-order-vanguard"):r.title()}),(0,w.jsx)("p",{children:d?(0,o.__)("Attack Cleanup and Pro automation tools are ready from the Order Vanguard navigation.","coderembassy-order-vanguard"):r.description()}),d&&a.proUrl&&(0,w.jsx)("a",{className:"ceog-button ceog-button--primary",href:a.proUrl,children:(0,o.__)("Open Attack Cleanup","coderembassy-order-vanguard")}),(0,w.jsx)("span",{className:"ceog-badge",children:d?(0,o.__)("Active","coderembassy-order-vanguard"):(0,o.__)("Workspace ready","coderembassy-order-vanguard")})]})})}const Qe=(e={})=>({log_full_ip:Boolean(e.log_full_ip),trusted_proxy:e.trusted_proxy||"none",delete_data_on_uninstall:Boolean(e.delete_data_on_uninstall)});function ea({payload:e,settingsBusy:a,onSave:r}){const d=e?.settings||{},[n,t]=(0,s.useState)(Qe(d)),[i,c]=(0,s.useState)(!1);(0,s.useEffect)(()=>{t(Qe(e?.settings)),c(!1)},[e?.settings]);const l=(e,a)=>{t(r=>({...r,[e]:a})),c(!1)};return(0,w.jsxs)("div",{className:"ceog-page ceog-settings-stack",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Privacy & Logs","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Local, privacy-first records","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Order Vanguard stores protection events on this WordPress site and sends nothing to external services.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:"ceog-status ceog-status--success",children:[(0,w.jsx)(_e,{size:15,"aria-hidden":"true"}),(0,o.__)("Local only","coderembassy-order-vanguard")]})]}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(B,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("IP display","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Repeat-attacker correlation always uses a one-way HMAC hash.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{id:"ceog-log-full-ip",label:(0,o.__)("Store full IP addresses","coderembassy-order-vanguard"),description:n.log_full_ip?(0,o.__)("Full addresses will be visible in new log rows.","coderembassy-order-vanguard"):(0,o.__)("IP addresses are anonymized for display.","coderembassy-order-vanguard"),checked:n.log_full_ip,onChange:e=>l("log_full_ip",e),tone:n.log_full_ip?"warning":"default"}),n.log_full_ip&&(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:(0,o.__)("Full IP addresses are personal data. Enable this only when your privacy policy and legal basis cover the additional storage.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(le,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Trusted proxy","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Proxy headers remain untrusted unless you explicitly select your infrastructure.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-trusted-proxy",children:[(0,w.jsx)("span",{children:(0,o.__)("Client IP source","coderembassy-order-vanguard")}),(0,w.jsxs)("select",{id:"ceog-trusted-proxy",value:n.trusted_proxy,onChange:e=>l("trusted_proxy",e.target.value),children:[(0,w.jsx)("option",{value:"none",children:(0,o.__)("Server connection (recommended)","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:"cloudflare",children:(0,o.__)("Cloudflare CF-Connecting-IP","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:"xff",children:(0,o.__)("X-Forwarded-For first hop","coderembassy-order-vanguard")})]})]}),(0,w.jsx)("p",{className:"ceog-field-note",children:(0,o.__)("Selecting the wrong proxy can let attackers spoof their source address.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(ue,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Retention","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Daily pruning keeps the attack-volume table bounded.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-readonly-value",children:[(0,w.jsx)("strong",{children:7}),(0,w.jsx)("span",{children:(0,o.__)("days","coderembassy-order-vanguard")})]}),(0,w.jsx)("p",{className:"ceog-field-note",children:(0,o.__)("Activity history is retained for 7 days, with daily background pruning.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(V,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Uninstall cleanup","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Choose whether uninstalling Order Vanguard removes its local records.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{id:"ceog-delete-data",label:(0,o.__)("Delete all data on uninstall","coderembassy-order-vanguard"),description:(0,o.__)("Removes the log table and plugin options permanently.","coderembassy-order-vanguard"),checked:n.delete_data_on_uninstall,onChange:e=>l("delete_data_on_uninstall",e),tone:"danger"})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[i&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(_e,{size:15,"aria-hidden":"true"}),(0,o.__)("Privacy settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{c(Boolean(await r(n)))},disabled:a,children:[(0,w.jsx)(be,{size:16,"aria-hidden":"true"}),a?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save privacy settings","coderembassy-order-vanguard")]})]})]})}function aa({view:e="cleanup"}){return(0,s.useEffect)(()=>(window.dispatchEvent(new CustomEvent("ceog-pro-mount",{detail:{view:e}})),()=>{window.dispatchEvent(new CustomEvent("ceog-pro-unmount"))}),[e]),(0,w.jsx)("div",{id:"ceog-pro-app",className:"ceog-pro-app ceog-pro-app--embedded","data-ceog-pro-view":e})}const ra=x("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]),sa=x("shopping-cart",[["circle",{cx:"8",cy:"21",r:"1",key:"jimo8o"}],["circle",{cx:"19",cy:"21",r:"1",key:"13723u"}],["path",{d:"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",key:"9zh506"}]]),oa=x("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]),da=x("lock-keyhole",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]]),na=(e={})=>({enabled:!1!==e.enabled,honeypot_enabled:!1!==e.honeypot_enabled,unknown_origin_action:e.unknown_origin_action||"flag",unknown_origin_onhold:Boolean(e.unknown_origin_onhold),alert_email_enabled:!1!==e.alert_email_enabled,alert_email:e.alert_email||"",strict_session:Boolean(e.strict_session),emergency_lockdown:Boolean(e.emergency_lockdown)});function ta({payload:e,modeBusy:a,settingsBusy:r,onModeChange:d,onSave:n}){const t=e?.settings||{},i=e?.meta||{},[c,l]=(0,s.useState)(na(t)),[g,h]=(0,s.useState)(!1),[u,m]=(0,s.useState)(!1),[_,b]=(0,s.useState)(!1);(0,s.useEffect)(()=>{l(na(e?.settings)),h(!1),m(!1),b(!1)},[e?.settings]);const y=(e,a)=>{l(r=>({...r,[e]:a})),b(!1)};return(0,w.jsxs)("div",{className:"ceog-page ceog-settings-stack",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("General","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Protection settings","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Choose what Order Vanguard records and how it responds to suspicious checkout traffic.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:i.safeMode?"ceog-status ceog-status--warning":"ceog-status ceog-status--success",children:[(0,w.jsx)(ra,{size:15,"aria-hidden":"true"}),i.safeMode?(0,o.__)("Safe Mode","coderembassy-order-vanguard"):(0,o.__)("Ready","coderembassy-order-vanguard")]})]}),i.safeMode&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Safe Mode overrides these settings and keeps all protection in Monitor mode. Settings remain available and logging stays active.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(ra,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Global protection","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Disabling this keeps your configuration while suspending all blocking.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{id:"ceog-enabled",label:(0,o.__)("Enable Order Vanguard","coderembassy-order-vanguard"),description:c.enabled?(0,o.__)("Protection is enabled","coderembassy-order-vanguard"):(0,o.__)("Protection is disabled","coderembassy-order-vanguard"),checked:c.enabled,onChange:e=>y("enabled",e)})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(me,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Protection mode","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Monitor records decisions. Enforce applies them at checkout.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(Se,{mode:t.mode||"monitor",onChange:d,busy:a}),(0,w.jsxs)("dl",{className:"ceog-settings-meta",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Effective mode","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:i.enforcing?(0,o.__)("Enforcing","coderembassy-order-vanguard"):(0,o.__)("Monitoring","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Plugin version","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:i.version||"1.0.3"})]})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(sa,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Order rules","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Collect low-friction signals without changing legitimate checkout fields.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{id:"ceog-honeypot",label:(0,o.__)("Classic checkout honeypot","coderembassy-order-vanguard"),description:(0,o.__)("Adds an invisible field that human shoppers never interact with.","coderembassy-order-vanguard"),checked:c.honeypot_enabled,onChange:e=>y("honeypot_enabled",e)}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-unknown-origin",children:[(0,w.jsx)("span",{children:(0,o.__)("Unknown-origin orders","coderembassy-order-vanguard")}),(0,w.jsxs)("select",{id:"ceog-unknown-origin",value:c.unknown_origin_action,onChange:e=>y("unknown_origin_action",e.target.value),children:[(0,w.jsx)("option",{value:"flag",children:(0,o.__)("Flag for review","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:"off",children:(0,o.__)("Do not flag","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{id:"ceog-unknown-origin-onhold",label:(0,o.__)("Place unpaid flagged orders on hold","coderembassy-order-vanguard"),description:(0,o.__)("Paid orders are never moved; this rule does not block checkout.","coderembassy-order-vanguard"),checked:c.unknown_origin_onhold,onChange:e=>y("unknown_origin_onhold",e),disabled:"off"===c.unknown_origin_action})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(oa,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Alert email","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Choose where important protection notices will be delivered.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{id:"ceog-alerts",label:(0,o.__)("Enable email alerts","coderembassy-order-vanguard"),description:(0,o.__)("Uses the WordPress administrator email when the field below is empty.","coderembassy-order-vanguard"),checked:c.alert_email_enabled,onChange:e=>y("alert_email_enabled",e)}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-alert-email",children:[(0,w.jsx)("span",{children:(0,o.__)("Recipient","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-alert-email",type:"email",value:c.alert_email,placeholder:(0,o.__)("WordPress administrator email","coderembassy-order-vanguard"),onChange:e=>y("alert_email",e.target.value),disabled:!c.alert_email_enabled})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-settings-panel--wide",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(da,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Advanced Store API controls","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("These opt-in controls can affect headless, app, block, and express checkout flows.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-environment-row",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("WooCommerce Checkout","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.checkoutBlockDetected?(0,o.__)("Checkout block detected","coderembassy-order-vanguard"):(0,o.__)("Classic checkout detected","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Native checkout limiter","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.nativeRateLimitEnabled?(0,o.__)("Enabled in WooCommerce","coderembassy-order-vanguard"):(0,o.__)("Not enabled","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(ye,{id:"ceog-strict-session",label:(0,o.__)("Strict Session Requirement","coderembassy-order-vanguard"),description:(0,o.__)("Requires an existing WooCommerce session for Store API cart mutations.","coderembassy-order-vanguard"),checked:c.strict_session,onChange:e=>y("strict_session",e),disabled:!c.strict_session&&!g,tone:"warning"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--warning",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:(0,o.__)("This may break headless, custom, mobile-app, and some express checkout flows. Use Monitor Mode first.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:g,onChange:e=>h(e.target.checked)}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(ye,{id:"ceog-emergency-lockdown",label:(0,o.__)("Emergency Store API Checkout Lockdown","coderembassy-order-vanguard"),description:(0,o.__)("Returns 404 for Store API checkout requests, including checkout operations inside batch requests.","coderembassy-order-vanguard"),checked:c.emergency_lockdown,onChange:e=>y("emergency_lockdown",e),disabled:i.checkoutBlockDetected||!c.emergency_lockdown&&!u,tone:"danger"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--danger",role:c.emergency_lockdown?"alert":void 0,children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:i.checkoutBlockDetected?(0,o.__)("Emergency Lockdown cannot be enabled while the WooCommerce Checkout block is active.","coderembassy-order-vanguard"):(0,o.__)("For classic-checkout stores under active attack only. This stops Store API checkout and must never be used as normal protection.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:u,onChange:e=>m(e.target.checked),disabled:i.checkoutBlockDetected}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[_&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(me,{size:15,"aria-hidden":"true"}),(0,o.__)("Protection settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{b(Boolean(await n(c)))},disabled:r,children:[(0,w.jsx)(be,{size:16,"aria-hidden":"true"}),r?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save protection settings","coderembassy-order-vanguard")]})]})]})}const ia=x("gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]),ca=x("list-checks",[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]]),la=(e={})=>({rate_limit_enabled:!1!==e.rate_limit_enabled,rate_limit_limit:String(e.rate_limit_limit||25),rate_limit_seconds:String(e.rate_limit_seconds||10),strict_session:Boolean(e.strict_session),emergency_lockdown:Boolean(e.emergency_lockdown)});function ga({payload:e,loading:a,settingsBusy:r,onSave:d,isPro:n=!1}){const t=e?.settings||{},i=e?.meta||{},[c,l]=(0,s.useState)(la(t)),[g,h]=(0,s.useState)(!1),[u,m]=(0,s.useState)(!1),[_,b]=(0,s.useState)(!1);(0,s.useEffect)(()=>{l(la(e?.settings)),h(!1),m(!1),b(!1)},[e?.settings]);const y=(e,a)=>{l(r=>({...r,[e]:a})),b(!1)};return a||!e?(0,w.jsxs)("div",{className:"ceog-loading","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--store-api"}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"})]})]}):(0,w.jsxs)("div",{className:"ceog-page ceog-store-api-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Store API protection","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Store API Guard","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Protect cart mutations, checkout requests, and every operation embedded in a Store API batch.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:i.safeMode||!i.enforcing?"ceog-status ceog-status--warning":"ceog-status ceog-status--success",children:[(0,w.jsx)(_e,{size:15,"aria-hidden":"true"}),i.safeMode?(0,o.__)("Safe Mode","coderembassy-order-vanguard"):i.enforcing?(0,o.__)("Enforcing","coderembassy-order-vanguard"):(0,o.__)("Monitoring","coderembassy-order-vanguard")]})]}),i.safeMode&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Safe Mode keeps Store API blocking and Order Vanguard rate limiting suspended while logging stays active.","coderembassy-order-vanguard")})]}),t.emergency_lockdown&&(0,w.jsxs)("div",{className:"ceog-emergency-banner",role:"alert",children:[(0,w.jsx)(j,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:(0,o.__)("Emergency Lockdown is enabled","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("Store API checkout returns 404 whenever Order Vanguard is enforcing. Disable this after the active attack has passed.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-store-api-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(ia,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Cart mutation rate limit","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Uses WooCommerce's native Store API limiter for POST cart and batch traffic.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{id:"ceog-store-rate-limit",label:(0,o.__)("Enable Order Vanguard rate limiting","coderembassy-order-vanguard"),description:(0,o.__)("Configured in Monitor mode and activated only while Enforce mode is effective.","coderembassy-order-vanguard"),checked:c.rate_limit_enabled,onChange:e=>y("rate_limit_enabled",e)}),(0,w.jsxs)("div",{className:"ceog-number-grid",children:[(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-rate-limit-count",children:[(0,w.jsx)("span",{children:(0,o.__)("Requests","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-rate-limit-count",type:"number",min:"1",max:"1000",value:c.rate_limit_limit,onChange:e=>y("rate_limit_limit",e.target.value),disabled:!c.rate_limit_enabled})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-rate-limit-seconds",children:[(0,w.jsx)("span",{children:(0,o.__)("Time window (seconds)","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-rate-limit-seconds",type:"number",min:"1",max:"3600",value:c.rate_limit_seconds,onChange:e=>y("rate_limit_seconds",e.target.value),disabled:!c.rate_limit_enabled})]})]}),(0,w.jsxs)("div",{className:"ceog-limiter-status",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Cart and batch","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:c.rate_limit_enabled?(0,o.__)("Order Vanguard configured","coderembassy-order-vanguard"):(0,o.__)("Order Vanguard disabled","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Place order","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.nativeRateLimitEnabled?(0,o.__)("WooCommerce limiter enabled","coderembassy-order-vanguard"):(0,o.__)("WooCommerce limiter not enabled","coderembassy-order-vanguard")})]})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-store-api-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(z,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Batch inspection","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Prevents protected operations from being hidden inside one Store API request.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-batch-state",children:[(0,w.jsx)(me,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:i.batchInspectionActive?(0,o.__)("Inspection active","coderembassy-order-vanguard"):(0,o.__)("Inspection unavailable","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("Every embedded path and method is checked before WooCommerce executes the batch.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("dl",{className:"ceog-store-api-facts",children:[(0,w.jsxs)("div",{children:[(0,w.jsxs)("dt",{children:[(0,w.jsx)(ca,{size:16,"aria-hidden":"true"}),(0,o.__)("Maximum operations","coderembassy-order-vanguard")]}),(0,w.jsx)("dd",{children:"25"})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Malformed batches","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:i.enforcing?(0,o.__)("Rejected","coderembassy-order-vanguard"):(0,o.__)("Logged","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Whitelist precedence","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:(0,o.__)("Always","coderembassy-order-vanguard")})]})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-settings-panel--wide ceog-store-api-advanced",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(da,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Advanced request controls","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Opt-in compatibility-sensitive rules for stores under elevated attack pressure.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-environment-row",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("WooCommerce Checkout","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.checkoutBlockDetected?(0,o.__)("Checkout block detected","coderembassy-order-vanguard"):(0,o.__)("Classic checkout detected","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Effective behavior","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.enforcing?(0,o.__)("Blocking enabled","coderembassy-order-vanguard"):(0,o.__)("Logging only","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Checkout Block field","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:n?(0,o.__)("Pro honeypot active","coderembassy-order-vanguard"):(0,o.__)("Available in Pro","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(ye,{id:"ceog-store-strict-session",label:(0,o.__)("Strict Session Requirement","coderembassy-order-vanguard"),description:(0,o.__)("Requires an existing WooCommerce session for Store API cart mutations and batch equivalents.","coderembassy-order-vanguard"),checked:c.strict_session,onChange:e=>y("strict_session",e),disabled:!c.strict_session&&!g,tone:"warning"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--warning",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:(0,o.__)("This may break headless, custom, mobile-app, and some express checkout flows. Use Monitor Mode first.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:g,onChange:e=>h(e.target.checked)}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(ye,{id:"ceog-store-emergency-lockdown",label:(0,o.__)("Emergency Store API Checkout Lockdown","coderembassy-order-vanguard"),description:(0,o.__)("Returns 404 for direct and batch-wrapped Store API checkout operations.","coderembassy-order-vanguard"),checked:c.emergency_lockdown,onChange:e=>y("emergency_lockdown",e),disabled:i.checkoutBlockDetected||!c.emergency_lockdown&&!u,tone:"danger"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--danger",role:c.emergency_lockdown?"alert":void 0,children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:i.checkoutBlockDetected?(0,o.__)("Emergency Lockdown cannot be enabled while the WooCommerce Checkout block is active.","coderembassy-order-vanguard"):(0,o.__)("For classic-checkout stores under active attack only. This stops Store API checkout and must never be used as normal protection.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:u,onChange:e=>m(e.target.checked),disabled:i.checkoutBlockDetected}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[_&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(me,{size:15,"aria-hidden":"true"}),(0,o.__)("Store API settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{const e=await d({rate_limit_enabled:c.rate_limit_enabled,rate_limit_limit:Number(c.rate_limit_limit),rate_limit_seconds:Number(c.rate_limit_seconds),strict_session:c.strict_session,emergency_lockdown:c.emergency_lockdown});b(Boolean(e))},disabled:r,children:[(0,w.jsx)(be,{size:16,"aria-hidden":"true"}),r?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save Store API settings","coderembassy-order-vanguard")]})]})]})}const ha="ceog_admin_theme",ua=()=>{try{return window.localStorage.getItem(ha)||"light"}catch(e){return"light"}};function ma({boot:e}){const[a,r]=(0,s.useState)(()=>q(Boolean(e.isPro))),[d,n]=(0,s.useState)(ua),[t,i]=(0,s.useState)(null),[u,m]=(0,s.useState)(!0),[_,b]=(0,s.useState)(""),[y,p]=(0,s.useState)(!1),[v,x]=(0,s.useState)(!1),[j,k]=(0,s.useState)(!1),[N,C]=(0,s.useState)(e.licenseStatus||null),S=(0,s.useCallback)(async()=>{m(!0),b("");try{i(await c())}catch(e){b(h(e))}finally{m(!1)}},[]);(0,s.useEffect)(()=>{S()},[S]),(0,s.useEffect)(()=>{const a=()=>r(q(Boolean(e.isPro)));return window.addEventListener("hashchange",a),a(),()=>window.removeEventListener("hashchange",a)},[e.isPro]),(0,s.useEffect)(()=>{const e=e=>{e?.detail?.license&&C(e.detail.license)};return window.addEventListener("ceog-license-updated",e),()=>window.removeEventListener("ceog-license-updated",e)},[]),(0,s.useEffect)(()=>{N?.gate?.locked&&["history-reporting","auto-blocklist","attack-cleanup","turnstile"].includes(a)&&F("pro-license")},[N,a]);const M=(0,s.useCallback)((e=!1)=>{k(!1),e&&window.setTimeout(()=>{document.getElementById("ceog-mobile-menu-trigger")?.focus()},50)},[]);(0,s.useEffect)(()=>{k(!1)},[a]),(0,s.useEffect)(()=>{if(!j)return;const e=window.matchMedia("(min-width: 783px)"),a=e=>{"Escape"===e.key&&M(!0)},r=e=>{e.matches&&M()};document.body.classList.add("ceog-mobile-menu-open");const s=document.body.style.overflow;document.body.style.overflow="hidden";const o=document.getElementById("ceog-main");o?.setAttribute("inert",""),o?.setAttribute("aria-hidden","true");const d=window.setTimeout(()=>{document.querySelector(".ceog-sidebar__close")?.focus()},80);return document.addEventListener("keydown",a),e.addEventListener("change",r),()=>{window.clearTimeout(d),document.body.classList.remove("ceog-mobile-menu-open"),document.body.style.overflow=s,o?.removeAttribute("inert"),o?.removeAttribute("aria-hidden"),document.removeEventListener("keydown",a),e.removeEventListener("change",r)}},[M,j]),(0,s.useEffect)(()=>{const e=document.getElementById("ceog-app");e?.setAttribute("data-theme",d);try{window.localStorage.setItem(ha,d)}catch(e){}},[d]);const P=async e=>{if("enforce"!==e||window.confirm((0,o.__)("We recommend reviewing the Activity Log first. Switch to Enforce mode?","coderembassy-order-vanguard"))){p(!0),b("");try{const a=await g(e);i(e=>{const r=e||{settings:{},meta:{}};return{...r,settings:{...r.settings,mode:a.mode},meta:{...r.meta,enforcing:a.enforcing,safeMode:a.safeMode}}})}catch(e){b(h(e))}finally{p(!1)}}},z=async e=>{x(!0),b("");try{return i(await l(e)),!0}catch(e){return b(h(e)),!1}finally{x(!1)}};let E=(0,w.jsx)(Je,{route:a,boot:e});return"dashboard"===a?E=(0,w.jsx)(Re,{payload:t,loading:u,modeBusy:y,onModeChange:P,isPro:Boolean(e.isPro)}):"activity-log"===a?E=(0,w.jsx)(ce,{isPro:Boolean(e.isPro)}):"history-reporting"===a&&e.isPro?E=(0,w.jsx)(aa,{view:"history-reporting"}):"circuit-breakers"===a?E=(0,w.jsx)(we,{payload:t,loading:u,settingsBusy:v,onSave:z}):"lists"===a?E=(0,w.jsx)(Ke,{}):"store-api"===a?E=(0,w.jsx)(ga,{payload:t,loading:u,settingsBusy:v,onSave:z,isPro:Boolean(e.isPro)}):"turnstile"===a&&e.isPro?E=(0,w.jsx)(aa,{view:"turnstile"}):"alerts"===a&&e.isPro?E=(0,w.jsx)(aa,{view:"alerts"}):"settings"===a?E=(0,w.jsx)(ta,{payload:t,modeBusy:y,settingsBusy:v,onModeChange:P,onSave:z}):"privacy-logs"===a?E=(0,w.jsx)(ea,{payload:t,settingsBusy:v,onSave:z}):"attack-cleanup"===a&&e.isPro?E=(0,w.jsx)(aa,{view:"cleanup"}):"pro-license"===a&&e.isPro?E=(0,w.jsx)(aa,{view:"license"}):"auto-blocklist"===a&&e.isPro&&(E=(0,w.jsx)(aa,{view:"auto-blocklist"})),(0,w.jsxs)("div",{className:"ceog-shell",children:[(0,w.jsx)(J,{boot:{...e,licenseStatus:N}}),(0,w.jsx)(W,{route:a,theme:d,boot:e,mobileOpen:j,onDismiss:()=>M(!0),onNavigate:()=>M()}),(0,w.jsxs)("main",{id:"ceog-main",className:"ceog-main",children:[(0,w.jsx)(X,{route:a,theme:d,boot:e,onToggleTheme:()=>n("dark"===d?"light":"dark"),user:e.user,mobileMenuOpen:j,onOpenMenu:()=>k(!0)}),(0,w.jsx)(Z,{boot:{...e,licenseStatus:N}}),(0,w.jsxs)("div",{className:"ceog-content",children:[_&&(0,w.jsx)(f,{message:_,onRetry:S}),E]})]})]})}const _a=document.getElementById("ceog-app");_a&&(0,s.render)((0,w.jsx)(ma,{boot:window.ceogBoot||{}}),_a)}};const a={};function r(s){const o=a[s];if(void 0!==o)return o.exports;const d=a[s]={exports:{}};return e[s](d,d.exports,r),d.exports}r.m=e,(()=>{const e=[];r.O=(a,s,o,d)=>{if(s){d=d||0;for(var n=e.length;n>0&&e[n-1][2]>d;n--)e[n]=e[n-1];return void(e[n]=[s,o,d])}let t=1/0;for(n=0;n<e.length;n++){let[s,o,d]=e[n],c=!0;for(var i=0;i<s.length;i++)(!1&d||t>=d)&&Object.keys(r.O).every(e=>r.O[e](s[i]))?s.splice(i--,1):(c=!1,d<t&&(t=d));if(c){e.splice(n--,1);const r=o();void 0!==r&&(a=r)}}return a}})(),r.n=e=>{const a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a}),a},r.d=(e,a)=>{if(Array.isArray(a))for(var s=0;s<a.length;){var o=a[s++],d=a[s++];r.o(e,o)?0===d&&s++:0===d?Object.defineProperty(e,o,{enumerable:!0,value:a[s++]}):Object.defineProperty(e,o,{enumerable:!0,get:d})}else for(var o in a)r.o(a,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})},r.o=(e,a)=>Object.hasOwn(e,a),(()=>{const e={57:0,350:0};r.O.j=a=>0===e[a];const a=(a,s)=>{let[o,d,n]=s;var t,i,c=0;if(o.some(a=>0!==e[a])){for(t in d)r.o(d,t)&&(r.m[t]=d[t]);if(n)var l=n(r)}for(a&&a(s);c<o.length;c++)i=o[c],r.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return r.O(l)},s=globalThis.webpackChunkcoderembassy_order_vanguard||=[];s.forEach(a.bind(null,0)),s.push=a.bind(null,s.push.bind(s))})();let s=r.O(void 0,[350],()=>r(266));s=r.O(s)})();
     11(0,o.__)("Remove %s","coderembassy-order-vanguard"),e),children:(0,w.jsx)(N,{size:13,"aria-hidden":"true"})})]},e))}),(0,w.jsxs)("div",{className:"ceog-choice-menu",children:[(0,w.jsxs)("div",{className:"ceog-choice-search",children:[(0,w.jsx)(Me,{size:16,"aria-hidden":"true"}),(0,w.jsx)("input",{id:e,type:"search",role:"combobox",value:b,placeholder:c,"aria-labelledby":e+"-label","aria-expanded":m,"aria-controls":e+"-options","aria-autocomplete":"list",onFocus:()=>_(!0),onChange:e=>{y(e.target.value),_(!0)},onKeyDown:e=>{"Escape"===e.key&&_(!1)}}),(0,w.jsx)("button",{type:"button",onClick:()=>_(!m),"aria-label":(0,o.__)("Toggle options","coderembassy-order-vanguard"),title:(0,o.__)("Toggle options","coderembassy-order-vanguard"),children:(0,w.jsx)(ze,{size:16,"aria-hidden":"true"})})]}),m&&(0,w.jsx)("div",{id:e+"-options",className:"ceog-choice-options",children:k.length>0?k.map(e=>{const a=x.includes(e.value);return(0,w.jsxs)("label",{className:a?"is-selected":"",children:[(0,w.jsx)("input",{type:"checkbox",checked:a,onChange:()=>C(e.value)}),(0,w.jsxs)("span",{children:[(0,w.jsx)("strong",{children:e.label}),(0,w.jsx)("code",{children:e.value})]}),a&&(0,w.jsx)(Pe,{size:15,"aria-hidden":"true"})]},e.value)}):(0,w.jsx)("p",{children:l})})]}),g&&(0,w.jsxs)("form",{className:"ceog-choice-manual",onSubmit:e=>{e.preventDefault();const a=v.trim().toLowerCase().replace(/[^a-z0-9_-]/g,"");a&&!x.includes(a)&&i([...x,a]),p("")},children:[(0,w.jsx)("input",{type:"text",value:v,placeholder:h,autoCapitalize:"none",autoCorrect:"off",spellCheck:"false",onChange:e=>p(e.target.value)}),(0,w.jsxs)("button",{type:"submit",className:"ceog-button",disabled:!v.trim(),children:[(0,w.jsx)(Ee,{size:15,"aria-hidden":"true"}),(0,o.__)("Add key","coderembassy-order-vanguard")]})]})]})}const Ie={blockEmails:"",blockDomains:"",blockIps:"",allowIps:"",allowRoles:[],allowPayments:[]},Oe=e=>Array.isArray(e)?e.join("\n"):"",Be=(e={})=>({blockEmails:Oe(e.blocklist?.emails),blockDomains:Oe(e.blocklist?.domains),blockIps:Oe(e.blocklist?.ips),allowIps:Oe(e.whitelist?.ips),allowRoles:Array.isArray(e.whitelist?.roles)?e.whitelist.roles:[],allowPayments:Array.isArray(e.whitelist?.payment_methods)?e.whitelist.payment_methods:[]}),Le=e=>String(e).split(/\r?\n/).map(e=>e.trim()).filter(Boolean);function Re({id:e,label:a,description:s,value:r,onChange:o,placeholder:d}){return(0,w.jsxs)("label",{className:"ceog-list-field",htmlFor:e,children:[(0,w.jsx)("span",{children:a}),(0,w.jsx)("small",{children:s}),(0,w.jsx)("textarea",{id:e,rows:5,value:r,placeholder:d,autoCapitalize:"none",autoCorrect:"off",spellCheck:"false",onChange:e=>o(e.target.value)})]})}function Te(){const[e,a]=(0,r.useState)(null),[s,d]=(0,r.useState)(Ie),[t,c]=(0,r.useState)(!0),[l,g]=(0,r.useState)(!1),[u,m]=(0,r.useState)(!1),[_,b]=(0,r.useState)(""),[y,v]=(0,r.useState)(0);(0,r.useEffect)(()=>{let e=!0;return(async()=>{c(!0),b("");try{const s=await n()({path:i("lists")});e&&(a(s),d(Be(s)),m(!1))}catch(a){e&&b(h(a))}finally{e&&c(!1)}})(),()=>{e=!1}},[y]);const p=(e,a)=>{d(s=>({...s,[e]:a})),m(!1)};return(0,w.jsxs)("div",{className:"ceog-page ceog-lists-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Access controls","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Lists","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Manually block known sources and preserve trusted checkout paths.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-list-counts",children:[(0,w.jsxs)("span",{className:"ceog-status ceog-status--warning",children:[(0,w.jsx)(Ne,{size:15,"aria-hidden":"true"}),(0,o.sprintf)(/* translators: %d: number of blocklist entries. */ /* translators: %d: number of blocklist entries. */
     12(0,o.__)("%d blocked","coderembassy-order-vanguard"),Number(e?.counts?.blocked||0))]}),(0,w.jsxs)("span",{className:"ceog-status ceog-status--success",children:[(0,w.jsx)(de,{size:15,"aria-hidden":"true"}),(0,o.sprintf)(/* translators: %d: number of whitelist entries. */ /* translators: %d: number of whitelist entries. */
     13(0,o.__)("%d allowed","coderembassy-order-vanguard"),Number(e?.counts?.allowed||0))]})]})]}),(0,w.jsxs)("div",{className:"ceog-list-precedence",role:"status",children:[(0,w.jsx)(de,{size:19,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:(0,o.__)("Whitelist always wins","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("A matching role, IP, or payment method bypasses blocklists and future protection rules.","coderembassy-order-vanguard")})]})]}),_&&(0,w.jsx)(f,{message:_,onRetry:()=>v(e=>e+1)}),t?(0,w.jsxs)("div",{className:"ceog-list-grid","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--list"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--list"})]}):(0,w.jsxs)("div",{className:"ceog-list-grid",children:[(0,w.jsxs)("section",{className:"ceog-list-panel ceog-list-panel--block",children:[(0,w.jsxs)("div",{className:"ceog-list-panel__heading",children:[(0,w.jsx)(Ne,{size:21,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Blocklist","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Matches are logged in Monitor mode and stopped in Enforce mode.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(Re,{id:"ceog-block-emails",label:(0,o.__)("Billing emails","coderembassy-order-vanguard"),description:(0,o.__)("Exact email addresses, one per line.","coderembassy-order-vanguard"),value:s.blockEmails,onChange:e=>p("blockEmails",e),placeholder:"bot@example.com"}),(0,w.jsx)(Re,{id:"ceog-block-domains",label:(0,o.__)("Email domains","coderembassy-order-vanguard"),description:(0,o.__)("Domain names without @, one per line.","coderembassy-order-vanguard"),value:s.blockDomains,onChange:e=>p("blockDomains",e),placeholder:"example.com"}),(0,w.jsx)(Re,{id:"ceog-block-ips",label:(0,o.__)("IP addresses","coderembassy-order-vanguard"),description:(0,o.__)("IPv4 matches exactly; IPv6 matches its entire /64 network.","coderembassy-order-vanguard"),value:s.blockIps,onChange:e=>p("blockIps",e),placeholder:"198.51.100.20"})]}),(0,w.jsxs)("section",{className:"ceog-list-panel ceog-list-panel--allow",children:[(0,w.jsxs)("div",{className:"ceog-list-panel__heading",children:[(0,w.jsx)(de,{size:21,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Whitelist","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Use narrow exceptions for trusted staff, infrastructure, and checkout methods.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-list-field-icon",children:[(0,w.jsx)(se,{size:17,"aria-hidden":"true"}),(0,w.jsx)(Re,{id:"ceog-allow-ips",label:(0,o.__)("Trusted IP addresses","coderembassy-order-vanguard"),description:(0,o.__)("IPv6 exceptions cover the entered /64 network.","coderembassy-order-vanguard"),value:s.allowIps,onChange:e=>p("allowIps",e),placeholder:"203.0.113.10"})]}),(0,w.jsx)(Ae,{id:"ceog-allow-roles",label:(0,o.__)("WordPress roles","coderembassy-order-vanguard"),description:(0,o.__)("Search and select the roles that should always bypass protection.","coderembassy-order-vanguard"),icon:Ce,options:e?.options?.roles,value:s.allowRoles,onChange:e=>p("allowRoles",e),searchPlaceholder:(0,o.__)("Search WordPress roles...","coderembassy-order-vanguard"),emptyText:(0,o.__)("No matching WordPress roles.","coderembassy-order-vanguard")}),(0,w.jsx)(Ae,{id:"ceog-allow-payments",label:(0,o.__)("Payment methods","coderembassy-order-vanguard"),description:(0,o.__)("Search installed gateways or add a custom gateway key manually.","coderembassy-order-vanguard"),icon:Se,options:e?.options?.payment_methods,value:s.allowPayments,onChange:e=>p("allowPayments",e),searchPlaceholder:(0,o.__)("Search payment methods...","coderembassy-order-vanguard"),emptyText:(0,o.__)("No matching payment methods.","coderembassy-order-vanguard"),allowManual:!0,manualPlaceholder:(0,o.__)("Custom gateway key","coderembassy-order-vanguard")}),(0,w.jsxs)("div",{className:"ceog-list-compatibility",children:[(0,w.jsx)(ae,{size:17,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Confirm gateway keys in WooCommerce payment settings before adding an exception.","coderembassy-order-vanguard")})]})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[u&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(oe,{size:15,"aria-hidden":"true"}),(0,o.__)("Lists saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{g(!0),b("");try{const r=await(e={blocklist_emails:Le(s.blockEmails),blocklist_email_domains:Le(s.blockDomains),blocklist_ips:Le(s.blockIps),whitelist_ips:Le(s.allowIps),whitelist_roles:s.allowRoles,whitelist_payment_methods:s.allowPayments},n()({path:i("lists"),method:"POST",data:{lists:e}}));a(r),d(Be(r)),m(!0)}catch(e){b(h(e)),m(!1)}finally{g(!1)}var e},disabled:t||l,children:[(0,w.jsx)(ne,{size:16,"aria-hidden":"true"}),l?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save lists","coderembassy-order-vanguard")]})]})]})}function De(){return(0,w.jsx)("div",{className:"ceog-page",children:(0,w.jsxs)("section",{className:"ceog-empty",children:[(0,w.jsx)("div",{className:"ceog-empty__icon",children:(0,w.jsx)(I,{size:25,"aria-hidden":"true"})}),(0,w.jsx)("h2",{children:(0,o.__)("Order Vanguard help","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Review the monitoring guidance, privacy controls, and checkout compatibility notes in the plugin documentation.","coderembassy-order-vanguard")})]})})}const Ve=(e={})=>({log_full_ip:Boolean(e.log_full_ip),log_retention_days:Number(e.log_retention_days||30),trusted_proxy:e.trusted_proxy||"none",delete_data_on_uninstall:Boolean(e.delete_data_on_uninstall)});function qe({payload:e,settingsBusy:a,onSave:s}){const d=e?.settings||{},[n,t]=(0,r.useState)(Ve(d)),[i,c]=(0,r.useState)(!1);(0,r.useEffect)(()=>{t(Ve(e?.settings)),c(!1)},[e?.settings]);const l=(e,a)=>{t(s=>({...s,[e]:a})),c(!1)};return(0,w.jsxs)("div",{className:"ceog-page ceog-settings-stack",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Privacy & Logs","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Local, privacy-first records","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Order Vanguard stores protection events on this WordPress site and sends nothing to external services.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:"ceog-status ceog-status--success",children:[(0,w.jsx)(de,{size:15,"aria-hidden":"true"}),(0,o.__)("Local only","coderembassy-order-vanguard")]})]}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(A,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("IP display","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Repeat-attacker correlation always uses a one-way HMAC hash.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(te,{id:"ceog-log-full-ip",label:(0,o.__)("Store full IP addresses","coderembassy-order-vanguard"),description:n.log_full_ip?(0,o.__)("Full addresses will be visible in new log rows.","coderembassy-order-vanguard"):(0,o.__)("IP addresses are anonymized for display.","coderembassy-order-vanguard"),checked:n.log_full_ip,onChange:e=>l("log_full_ip",e),tone:n.log_full_ip?"warning":"default"}),n.log_full_ip&&(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:(0,o.__)("Full IP addresses are personal data. Enable this only when your privacy policy and legal basis cover the additional storage.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(ee,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Trusted proxy","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Proxy headers remain untrusted unless you explicitly select your infrastructure.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-trusted-proxy",children:[(0,w.jsx)("span",{children:(0,o.__)("Client IP source","coderembassy-order-vanguard")}),(0,w.jsxs)("select",{id:"ceog-trusted-proxy",value:n.trusted_proxy,onChange:e=>l("trusted_proxy",e.target.value),children:[(0,w.jsx)("option",{value:"none",children:(0,o.__)("Server connection (recommended)","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:"cloudflare",children:(0,o.__)("Cloudflare CF-Connecting-IP","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:"xff",children:(0,o.__)("X-Forwarded-For first hop","coderembassy-order-vanguard")})]})]}),(0,w.jsx)("p",{className:"ceog-field-note",children:(0,o.__)("Selecting the wrong proxy can let attackers spoof their source address.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(re,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Retention","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Daily pruning keeps the attack-volume table bounded.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-log-retention",children:[(0,w.jsx)("span",{children:(0,o.__)("Retention period","coderembassy-order-vanguard")}),(0,w.jsxs)("select",{id:"ceog-log-retention",value:n.log_retention_days,onChange:e=>l("log_retention_days",Number(e.target.value)),children:[(0,w.jsx)("option",{value:7,children:(0,o.__)("7 days","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:30,children:(0,o.__)("30 days","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:90,children:(0,o.__)("90 days","coderembassy-order-vanguard")})]})]}),(0,w.jsx)("p",{className:"ceog-field-note",children:(0,o.__)("Daily background pruning permanently removes activity rows older than the selected period.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)($,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Uninstall cleanup","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Choose whether uninstalling Order Vanguard removes its local records.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(te,{id:"ceog-delete-data",label:(0,o.__)("Delete all data on uninstall","coderembassy-order-vanguard"),description:(0,o.__)("Removes the log table and plugin options permanently.","coderembassy-order-vanguard"),checked:n.delete_data_on_uninstall,onChange:e=>l("delete_data_on_uninstall",e),tone:"danger"})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[i&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(de,{size:15,"aria-hidden":"true"}),(0,o.__)("Privacy settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{c(Boolean(await s(n)))},disabled:a,children:[(0,w.jsx)(ne,{size:16,"aria-hidden":"true"}),a?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save privacy settings","coderembassy-order-vanguard")]})]})]})}const We=x("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]),Fe=x("shopping-cart",[["circle",{cx:"8",cy:"21",r:"1",key:"jimo8o"}],["circle",{cx:"19",cy:"21",r:"1",key:"13723u"}],["path",{d:"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",key:"9zh506"}]]),Ue=x("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]),He=x("lock-keyhole",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]]),$e=(e={})=>({enabled:!1!==e.enabled,honeypot_enabled:!1!==e.honeypot_enabled,unknown_origin_action:e.unknown_origin_action||"flag",unknown_origin_onhold:Boolean(e.unknown_origin_onhold),alert_email_enabled:!1!==e.alert_email_enabled,alert_email:e.alert_email||"",strict_session:Boolean(e.strict_session),emergency_lockdown:Boolean(e.emergency_lockdown)});function Ge({payload:e,modeBusy:a,settingsBusy:s,onModeChange:d,onSave:n}){const t=e?.settings||{},i=e?.meta||{},[c,l]=(0,r.useState)($e(t)),[g,h]=(0,r.useState)(!1),[u,m]=(0,r.useState)(!1),[_,b]=(0,r.useState)(!1);(0,r.useEffect)(()=>{l($e(e?.settings)),h(!1),m(!1),b(!1)},[e?.settings]);const y=(e,a)=>{l(s=>({...s,[e]:a})),b(!1)};return(0,w.jsxs)("div",{className:"ceog-page ceog-settings-stack",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("General","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Protection settings","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Choose what Order Vanguard records and how it responds to suspicious checkout traffic.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:i.safeMode?"ceog-status ceog-status--warning":"ceog-status ceog-status--success",children:[(0,w.jsx)(We,{size:15,"aria-hidden":"true"}),i.safeMode?(0,o.__)("Safe Mode","coderembassy-order-vanguard"):(0,o.__)("Ready","coderembassy-order-vanguard")]})]}),i.safeMode&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Safe Mode overrides these settings and keeps all protection in Monitor mode. Settings remain available and logging stays active.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(We,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Global protection","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Disabling this keeps your configuration while suspending all blocking.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(te,{id:"ceog-enabled",label:(0,o.__)("Enable Order Vanguard","coderembassy-order-vanguard"),description:c.enabled?(0,o.__)("Protection is enabled","coderembassy-order-vanguard"):(0,o.__)("Protection is disabled","coderembassy-order-vanguard"),checked:c.enabled,onChange:e=>y("enabled",e)})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(oe,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Protection mode","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Monitor records decisions. Enforce applies them at checkout.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(ye,{mode:t.mode||"monitor",onChange:d,busy:a}),(0,w.jsxs)("dl",{className:"ceog-settings-meta",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Effective mode","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:i.enforcing?(0,o.__)("Enforcing","coderembassy-order-vanguard"):(0,o.__)("Monitoring","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Plugin version","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:i.version||"1.0.3"})]})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(Fe,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Order rules","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Collect low-friction signals without changing legitimate checkout fields.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(te,{id:"ceog-honeypot",label:(0,o.__)("Classic checkout honeypot","coderembassy-order-vanguard"),description:(0,o.__)("Adds an invisible field that human shoppers never interact with.","coderembassy-order-vanguard"),checked:c.honeypot_enabled,onChange:e=>y("honeypot_enabled",e)}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-unknown-origin",children:[(0,w.jsx)("span",{children:(0,o.__)("Unknown-origin orders","coderembassy-order-vanguard")}),(0,w.jsxs)("select",{id:"ceog-unknown-origin",value:c.unknown_origin_action,onChange:e=>y("unknown_origin_action",e.target.value),children:[(0,w.jsx)("option",{value:"flag",children:(0,o.__)("Flag for review","coderembassy-order-vanguard")}),(0,w.jsx)("option",{value:"off",children:(0,o.__)("Do not flag","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(te,{id:"ceog-unknown-origin-onhold",label:(0,o.__)("Place unpaid flagged orders on hold","coderembassy-order-vanguard"),description:(0,o.__)("Paid orders are never moved; this rule does not block checkout.","coderembassy-order-vanguard"),checked:c.unknown_origin_onhold,onChange:e=>y("unknown_origin_onhold",e),disabled:"off"===c.unknown_origin_action})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(Ue,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Alert email","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Choose where important protection notices will be delivered.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(te,{id:"ceog-alerts",label:(0,o.__)("Enable email alerts","coderembassy-order-vanguard"),description:(0,o.__)("Uses the WordPress administrator email when the field below is empty.","coderembassy-order-vanguard"),checked:c.alert_email_enabled,onChange:e=>y("alert_email_enabled",e)}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-alert-email",children:[(0,w.jsx)("span",{children:(0,o.__)("Recipient","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-alert-email",type:"email",value:c.alert_email,placeholder:(0,o.__)("WordPress administrator email","coderembassy-order-vanguard"),onChange:e=>y("alert_email",e.target.value),disabled:!c.alert_email_enabled})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-settings-panel--wide",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(He,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Advanced Store API controls","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("These opt-in controls can affect headless, app, block, and express checkout flows.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-environment-row",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("WooCommerce Checkout","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.checkoutBlockDetected?(0,o.__)("Checkout block detected","coderembassy-order-vanguard"):(0,o.__)("Classic checkout detected","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Native checkout limiter","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.nativeRateLimitEnabled?(0,o.__)("Enabled in WooCommerce","coderembassy-order-vanguard"):(0,o.__)("Not enabled","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(te,{id:"ceog-strict-session",label:(0,o.__)("Strict Session Requirement","coderembassy-order-vanguard"),description:(0,o.__)("Requires an existing WooCommerce session for Store API cart mutations.","coderembassy-order-vanguard"),checked:c.strict_session,onChange:e=>y("strict_session",e),disabled:!c.strict_session&&!g,tone:"warning"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--warning",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:(0,o.__)("This may break headless, custom, mobile-app, and some express checkout flows. Use Monitor Mode first.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:g,onChange:e=>h(e.target.checked)}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(te,{id:"ceog-emergency-lockdown",label:(0,o.__)("Emergency Store API Checkout Lockdown","coderembassy-order-vanguard"),description:(0,o.__)("Returns 404 for Store API checkout requests, including checkout operations inside batch requests.","coderembassy-order-vanguard"),checked:c.emergency_lockdown,onChange:e=>y("emergency_lockdown",e),disabled:i.checkoutBlockDetected||!c.emergency_lockdown&&!u,tone:"danger"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--danger",role:c.emergency_lockdown?"alert":void 0,children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:i.checkoutBlockDetected?(0,o.__)("Emergency Lockdown cannot be enabled while the WooCommerce Checkout block is active.","coderembassy-order-vanguard"):(0,o.__)("For classic-checkout stores under active attack only. This stops Store API checkout and must never be used as normal protection.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:u,onChange:e=>m(e.target.checked),disabled:i.checkoutBlockDetected}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[_&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(oe,{size:15,"aria-hidden":"true"}),(0,o.__)("Protection settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{b(Boolean(await n(c)))},disabled:s,children:[(0,w.jsx)(ne,{size:16,"aria-hidden":"true"}),s?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save protection settings","coderembassy-order-vanguard")]})]})]})}const Ke=x("gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]),Ze=x("list-checks",[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]]),Xe=(e={})=>({rate_limit_enabled:!1!==e.rate_limit_enabled,rate_limit_limit:String(e.rate_limit_limit||25),rate_limit_seconds:String(e.rate_limit_seconds||10),strict_session:Boolean(e.strict_session),emergency_lockdown:Boolean(e.emergency_lockdown)});function Je({payload:e,loading:a,settingsBusy:s,onSave:d}){const n=e?.settings||{},t=e?.meta||{},[i,c]=(0,r.useState)(Xe(n)),[l,g]=(0,r.useState)(!1),[h,u]=(0,r.useState)(!1),[m,_]=(0,r.useState)(!1);(0,r.useEffect)(()=>{c(Xe(e?.settings)),g(!1),u(!1),_(!1)},[e?.settings]);const b=(e,a)=>{c(s=>({...s,[e]:a})),_(!1)};return a||!e?(0,w.jsxs)("div",{className:"ceog-loading","aria-busy":"true",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--store-api"}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"}),(0,w.jsx)("div",{className:"ceog-skeleton ceog-skeleton--stat"})]})]}):(0,w.jsxs)("div",{className:"ceog-page ceog-store-api-page",children:[(0,w.jsxs)("header",{className:"ceog-page__header",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("p",{className:"ceog-section-kicker",children:(0,o.__)("Store API protection","coderembassy-order-vanguard")}),(0,w.jsx)("h2",{children:(0,o.__)("Store API Guard","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Protect cart mutations, checkout requests, and every operation embedded in a Store API batch.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("span",{className:t.safeMode||!t.enforcing?"ceog-status ceog-status--warning":"ceog-status ceog-status--success",children:[(0,w.jsx)(de,{size:15,"aria-hidden":"true"}),t.safeMode?(0,o.__)("Safe Mode","coderembassy-order-vanguard"):t.enforcing?(0,o.__)("Enforcing","coderembassy-order-vanguard"):(0,o.__)("Monitoring","coderembassy-order-vanguard")]})]}),t.safeMode&&(0,w.jsxs)("div",{className:"ceog-warning",role:"status",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("span",{children:(0,o.__)("Safe Mode keeps Store API blocking and Order Vanguard rate limiting suspended while logging stays active.","coderembassy-order-vanguard")})]}),n.emergency_lockdown&&(0,w.jsxs)("div",{className:"ceog-emergency-banner",role:"alert",children:[(0,w.jsx)(j,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:(0,o.__)("Emergency Lockdown is enabled","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("Store API checkout returns 404 whenever Order Vanguard is enforcing. Disable this after the active attack has passed.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-settings-grid",children:[(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-store-api-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(Ke,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Cart mutation rate limit","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Uses WooCommerce's native Store API limiter for POST cart and batch traffic.","coderembassy-order-vanguard")})]})]}),(0,w.jsx)(te,{id:"ceog-store-rate-limit",label:(0,o.__)("Enable Order Vanguard rate limiting","coderembassy-order-vanguard"),description:(0,o.__)("Configured in Monitor mode and activated only while Enforce mode is effective.","coderembassy-order-vanguard"),checked:i.rate_limit_enabled,onChange:e=>b("rate_limit_enabled",e)}),(0,w.jsxs)("div",{className:"ceog-number-grid",children:[(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-rate-limit-count",children:[(0,w.jsx)("span",{children:(0,o.__)("Requests","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-rate-limit-count",type:"number",min:"1",max:"1000",value:i.rate_limit_limit,onChange:e=>b("rate_limit_limit",e.target.value),disabled:!i.rate_limit_enabled})]}),(0,w.jsxs)("label",{className:"ceog-field",htmlFor:"ceog-rate-limit-seconds",children:[(0,w.jsx)("span",{children:(0,o.__)("Time window (seconds)","coderembassy-order-vanguard")}),(0,w.jsx)("input",{id:"ceog-rate-limit-seconds",type:"number",min:"1",max:"3600",value:i.rate_limit_seconds,onChange:e=>b("rate_limit_seconds",e.target.value),disabled:!i.rate_limit_enabled})]})]}),(0,w.jsxs)("div",{className:"ceog-limiter-status",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Cart and batch","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:i.rate_limit_enabled?(0,o.__)("Order Vanguard configured","coderembassy-order-vanguard"):(0,o.__)("Order Vanguard disabled","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Place order","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:t.nativeRateLimitEnabled?(0,o.__)("WooCommerce limiter enabled","coderembassy-order-vanguard"):(0,o.__)("WooCommerce limiter not enabled","coderembassy-order-vanguard")})]})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-store-api-panel",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(z,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Batch inspection","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Prevents protected operations from being hidden inside one Store API request.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-batch-state",children:[(0,w.jsx)(oe,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("strong",{children:t.batchInspectionActive?(0,o.__)("Inspection active","coderembassy-order-vanguard"):(0,o.__)("Inspection unavailable","coderembassy-order-vanguard")}),(0,w.jsx)("span",{children:(0,o.__)("Every embedded path and method is checked before WooCommerce executes the batch.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("dl",{className:"ceog-store-api-facts",children:[(0,w.jsxs)("div",{children:[(0,w.jsxs)("dt",{children:[(0,w.jsx)(Ze,{size:16,"aria-hidden":"true"}),(0,o.__)("Maximum operations","coderembassy-order-vanguard")]}),(0,w.jsx)("dd",{children:"25"})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Malformed batches","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:t.enforcing?(0,o.__)("Rejected","coderembassy-order-vanguard"):(0,o.__)("Logged","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("dt",{children:(0,o.__)("Whitelist precedence","coderembassy-order-vanguard")}),(0,w.jsx)("dd",{children:(0,o.__)("Always","coderembassy-order-vanguard")})]})]})]}),(0,w.jsxs)("section",{className:"ceog-settings-panel ceog-settings-panel--wide ceog-store-api-advanced",children:[(0,w.jsxs)("div",{className:"ceog-settings-panel__heading",children:[(0,w.jsx)(He,{size:20,"aria-hidden":"true"}),(0,w.jsxs)("div",{children:[(0,w.jsx)("h3",{children:(0,o.__)("Advanced request controls","coderembassy-order-vanguard")}),(0,w.jsx)("p",{children:(0,o.__)("Opt-in compatibility-sensitive rules for stores under elevated attack pressure.","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-environment-row",children:[(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("WooCommerce Checkout","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:t.checkoutBlockDetected?(0,o.__)("Checkout block detected","coderembassy-order-vanguard"):(0,o.__)("Classic checkout detected","coderembassy-order-vanguard")})]}),(0,w.jsxs)("div",{children:[(0,w.jsx)("span",{children:(0,o.__)("Effective behavior","coderembassy-order-vanguard")}),(0,w.jsx)("strong",{children:t.enforcing?(0,o.__)("Blocking enabled","coderembassy-order-vanguard"):(0,o.__)("Logging only","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(te,{id:"ceog-store-strict-session",label:(0,o.__)("Strict Session Requirement","coderembassy-order-vanguard"),description:(0,o.__)("Requires an existing WooCommerce session for Store API cart mutations and batch equivalents.","coderembassy-order-vanguard"),checked:i.strict_session,onChange:e=>b("strict_session",e),disabled:!i.strict_session&&!l,tone:"warning"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--warning",children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:(0,o.__)("This may break headless, custom, mobile-app, and some express checkout flows. Use Monitor Mode first.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:l,onChange:e=>g(e.target.checked)}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]}),(0,w.jsxs)("div",{className:"ceog-advanced-setting",children:[(0,w.jsx)(te,{id:"ceog-store-emergency-lockdown",label:(0,o.__)("Emergency Store API Checkout Lockdown","coderembassy-order-vanguard"),description:(0,o.__)("Returns 404 for direct and batch-wrapped Store API checkout operations.","coderembassy-order-vanguard"),checked:i.emergency_lockdown,onChange:e=>b("emergency_lockdown",e),disabled:t.checkoutBlockDetected||!i.emergency_lockdown&&!h,tone:"danger"}),(0,w.jsxs)("div",{className:"ceog-risk ceog-risk--danger",role:i.emergency_lockdown?"alert":void 0,children:[(0,w.jsx)(j,{size:18,"aria-hidden":"true"}),(0,w.jsx)("p",{children:t.checkoutBlockDetected?(0,o.__)("Emergency Lockdown cannot be enabled while the WooCommerce Checkout block is active.","coderembassy-order-vanguard"):(0,o.__)("For classic-checkout stores under active attack only. This stops Store API checkout and must never be used as normal protection.","coderembassy-order-vanguard")})]}),(0,w.jsxs)("label",{className:"ceog-acknowledgement",children:[(0,w.jsx)("input",{type:"checkbox",checked:h,onChange:e=>u(e.target.checked),disabled:t.checkoutBlockDetected}),(0,w.jsx)("span",{children:(0,o.__)("I understand the risks","coderembassy-order-vanguard")})]})]})]})]}),(0,w.jsxs)("div",{className:"ceog-save-bar",children:[m&&(0,w.jsxs)("span",{className:"ceog-saved",role:"status",children:[(0,w.jsx)(oe,{size:15,"aria-hidden":"true"}),(0,o.__)("Store API settings saved","coderembassy-order-vanguard")]}),(0,w.jsxs)("button",{type:"button",className:"ceog-button ceog-button--primary",onClick:async()=>{const e=await d({rate_limit_enabled:i.rate_limit_enabled,rate_limit_limit:Number(i.rate_limit_limit),rate_limit_seconds:Number(i.rate_limit_seconds),strict_session:i.strict_session,emergency_lockdown:i.emergency_lockdown});_(Boolean(e))},disabled:s,children:[(0,w.jsx)(ne,{size:16,"aria-hidden":"true"}),s?(0,o.__)("Saving...","coderembassy-order-vanguard"):(0,o.__)("Save Store API settings","coderembassy-order-vanguard")]})]})]})}const Ye="ceog_admin_theme",Qe="coderembassy-order-vanguard:extensions-changed",ea=()=>{const e=Array.isArray(window.ceogAdminExtensions)?window.ceogAdminExtensions:[],a=new Set(O.map(e=>e.id)),s=[];return e.forEach(e=>{(Array.isArray(e?.routes)?e.routes:[]).forEach(e=>{e&&/^[a-z0-9-]+$/.test(String(e.id||""))&&!a.has(e.id)&&!s.some(a=>a.id===e.id)&&"function"==typeof e.label&&["function","object"].includes(typeof e.icon)&&e.icon&&"function"==typeof e.render&&s.push(e)})}),s},aa=()=>{try{return window.localStorage.getItem(Ye)||"light"}catch(e){return"light"}};function sa({boot:e}){const[a,s]=(0,r.useState)(ea),d=(0,r.useMemo)(()=>[...O,...a],[a]),[n,t]=(0,r.useState)(()=>B(d)),[i,u]=(0,r.useState)(aa),[m,_]=(0,r.useState)(null),[b,y]=(0,r.useState)(!0),[v,p]=(0,r.useState)(""),[x,j]=(0,r.useState)(!1),[k,N]=(0,r.useState)(!1),[C,S]=(0,r.useState)(!1),M=(0,r.useCallback)(async()=>{y(!0),p("");try{_(await c())}catch(e){p(h(e))}finally{y(!1)}},[]);(0,r.useEffect)(()=>{M()},[M]),(0,r.useEffect)(()=>{const e=()=>{const e=ea();s(e),t(B([...O,...e]))};return window.addEventListener(Qe,e),e(),()=>window.removeEventListener(Qe,e)},[]),(0,r.useEffect)(()=>{const e=()=>t(B(d));return window.addEventListener("hashchange",e),e(),()=>window.removeEventListener("hashchange",e)},[d]);const z=(0,r.useCallback)((e=!1)=>{S(!1),e&&window.setTimeout(()=>{document.getElementById("ceog-mobile-menu-trigger")?.focus()},50)},[]);(0,r.useEffect)(()=>{S(!1)},[n]),(0,r.useEffect)(()=>{if(!C)return;const e=window.matchMedia("(min-width: 783px)"),a=e=>{"Escape"===e.key&&z(!0)},s=e=>{e.matches&&z()};document.body.classList.add("ceog-mobile-menu-open");const r=document.body.style.overflow;document.body.style.overflow="hidden";const o=document.getElementById("ceog-main");o?.setAttribute("inert",""),o?.setAttribute("aria-hidden","true");const d=window.setTimeout(()=>{document.querySelector(".ceog-sidebar__close")?.focus()},80);return document.addEventListener("keydown",a),e.addEventListener("change",s),()=>{window.clearTimeout(d),document.body.classList.remove("ceog-mobile-menu-open"),document.body.style.overflow=r,o?.removeAttribute("inert"),o?.removeAttribute("aria-hidden"),document.removeEventListener("keydown",a),e.removeEventListener("change",s)}},[z,C]),(0,r.useEffect)(()=>{const e=document.getElementById("ceog-app");e?.setAttribute("data-theme",i);try{window.localStorage.setItem(Ye,i)}catch(e){}},[i]);const P=async e=>{if("enforce"!==e||window.confirm((0,o.__)("We recommend reviewing the Activity Log first. Switch to Enforce mode?","coderembassy-order-vanguard"))){j(!0),p("");try{const a=await g(e);_(e=>{const s=e||{settings:{},meta:{}};return{...s,settings:{...s.settings,mode:a.mode},meta:{...s.meta,enforcing:a.enforcing,safeMode:a.safeMode}}})}catch(e){p(h(e))}finally{j(!1)}}},E=async e=>{N(!0),p("");try{return _(await l(e)),!0}catch(e){return p(h(e)),!1}finally{N(!1)}};let A=(0,w.jsx)(De,{route:n});if("dashboard"===n)A=(0,w.jsx)(fe,{payload:m,loading:b,modeBusy:x,onModeChange:P});else if("activity-log"===n)A=(0,w.jsx)(Q,{});else if("circuit-breakers"===n)A=(0,w.jsx)(ue,{payload:m,loading:b,settingsBusy:k,onSave:E});else if("lists"===n)A=(0,w.jsx)(Te,{});else if("store-api"===n)A=(0,w.jsx)(Je,{payload:m,loading:b,settingsBusy:k,onSave:E});else if("settings"===n)A=(0,w.jsx)(Ge,{payload:m,modeBusy:x,settingsBusy:k,onModeChange:P,onSave:E});else if("privacy-logs"===n)A=(0,w.jsx)(qe,{payload:m,settingsBusy:k,onSave:E});else{const s=a.find(e=>e.id===n);s&&(A=s.render({boot:e,route:n}))}return(0,w.jsxs)("div",{className:"ceog-shell",children:[(0,w.jsx)(R,{route:n,theme:i,boot:e,items:d,mobileOpen:C,onDismiss:()=>z(!0),onNavigate:()=>z()}),(0,w.jsxs)("main",{id:"ceog-main",className:"ceog-main",children:[(0,w.jsx)(W,{route:n,theme:i,boot:e,items:d,onToggleTheme:()=>u("dark"===i?"light":"dark"),user:e.user,mobileMenuOpen:C,onOpenMenu:()=>S(!0)}),(0,w.jsxs)("div",{className:"ceog-content",children:[v&&(0,w.jsx)(f,{message:v,onRetry:M}),A]})]})]})}const ra=document.getElementById("ceog-app");ra&&(0,r.render)((0,w.jsx)(sa,{boot:window.ceogBoot||{}}),ra)}};const a={};function s(r){const o=a[r];if(void 0!==o)return o.exports;const d=a[r]={exports:{}};return e[r](d,d.exports,s),d.exports}s.m=e,(()=>{const e=[];s.O=(a,r,o,d)=>{if(r){d=d||0;for(var n=e.length;n>0&&e[n-1][2]>d;n--)e[n]=e[n-1];return void(e[n]=[r,o,d])}let t=1/0;for(n=0;n<e.length;n++){let[r,o,d]=e[n],c=!0;for(var i=0;i<r.length;i++)(!1&d||t>=d)&&Object.keys(s.O).every(e=>s.O[e](r[i]))?r.splice(i--,1):(c=!1,d<t&&(t=d));if(c){e.splice(n--,1);const s=o();void 0!==s&&(a=s)}}return a}})(),s.n=e=>{const a=e&&e.__esModule?()=>e.default:()=>e;return s.d(a,{a}),a},s.d=(e,a)=>{if(Array.isArray(a))for(var r=0;r<a.length;){var o=a[r++],d=a[r++];s.o(e,o)?0===d&&r++:0===d?Object.defineProperty(e,o,{enumerable:!0,value:a[r++]}):Object.defineProperty(e,o,{enumerable:!0,get:d})}else for(var o in a)s.o(a,o)&&!s.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})},s.o=(e,a)=>Object.hasOwn(e,a),(()=>{const e={57:0,350:0};s.O.j=a=>0===e[a];const a=(a,r)=>{let[o,d,n]=r;var t,i,c=0;if(o.some(a=>0!==e[a])){for(t in d)s.o(d,t)&&(s.m[t]=d[t]);if(n)var l=n(s)}for(a&&a(r);c<o.length;c++)i=o[c],s.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return s.O(l)},r=globalThis.webpackChunkcoderembassy_order_vanguard||=[];r.forEach(a.bind(null,0)),r.push=a.bind(null,r.push.bind(r))})();let r=s.O(void 0,[350],()=>s(658));r=s.O(r)})();
  • coderembassy-order-vanguard/trunk/build/style-index-rtl.css

    r3701248 r3778434  
    1 .ceog-app,.ceog-app *{box-sizing:border-box;letter-spacing:0}.ceog-app .ceog-license-banner{align-items:center;background:#fff8e8;border:1px solid #e5bd76;border-radius:8px;box-shadow:0 5px 18px rgba(113,63,18,.08);color:#713f12;display:grid;gap:12px;grid-template-columns:auto minmax(0,1fr) auto auto;margin:16px 28px 0;padding:12px 14px}.ceog-app .ceog-license-banner.is-error{background:#fff1f0;border-color:#efaaa5;color:#8f1d16}.ceog-app .ceog-license-banner.is-locked{background:#f3f1ff;border-color:#b2aaf1;color:#33288f}.ceog-app .ceog-license-banner>svg{flex:0 0 auto}.ceog-app .ceog-license-banner__action,.ceog-app .ceog-license-banner__dismiss{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:inline-flex;justify-content:center}.ceog-app .ceog-license-banner__action{border:1px solid;border-radius:6px;font-weight:700;gap:7px;padding:7px 10px}.ceog-app .ceog-license-banner__dismiss{border-radius:6px;height:34px;padding:0;width:34px}.ceog-app .ceog-license-banner__dismiss:hover{background:rgba(15,23,42,.07)}.ceog-app .ceog-license-modal{align-items:center;backdrop-filter:blur(4px);background:rgba(15,23,42,.58);display:flex;inset:0;justify-content:center;padding:20px;position:fixed;z-index:100000}.ceog-app .ceog-license-modal__card{background:#fff;border-radius:18px;box-shadow:0 24px 64px rgba(15,23,42,.35);color:#17202b;padding:34px 30px 28px;position:relative;text-align:center;width:min(100%,480px)}.ceog-app .ceog-license-modal__close{align-items:center;background:transparent;border:0;border-radius:7px;color:#778497;cursor:pointer;display:inline-flex;height:34px;justify-content:center;padding:0;position:absolute;left:12px;top:12px;width:34px}.ceog-app .ceog-license-modal__icon{align-items:center;background:#fee2e2;border-radius:50%;color:#b42318;display:flex;height:64px;justify-content:center;margin:0 auto 18px;width:64px}.ceog-app .ceog-license-modal h2{font-size:22px;line-height:1.25;margin:0 0 10px}.ceog-app .ceog-license-modal p{color:#5f6b7a;line-height:1.6;margin:0 0 22px}.ceog-app .ceog-license-modal small{color:#778497;display:block;margin-top:16px}.ceog-app[data-theme=dark] .ceog-license-banner.is-warning{background:#302716;border-color:#765b2c;color:#f8d994}.ceog-app[data-theme=dark] .ceog-license-banner.is-error{background:#351d1b;border-color:#7b3935;color:#ffb4ad}.ceog-app[data-theme=dark] .ceog-license-banner.is-locked{background:#24203e;border-color:#5f56a9;color:#c8c2ff}@media (max-width:782px){.ceog-app .ceog-license-banner{grid-template-columns:auto minmax(0,1fr) auto;margin:12px 16px 0}.ceog-app .ceog-license-banner__action{grid-column:1/-1;width:100%}.ceog-app .ceog-license-banner__dismiss{grid-column:3;grid-row:1}.ceog-app .ceog-license-modal__card{padding:30px 20px 24px}}.ceog-app{--ceog-bg:#f4f6f8;--ceog-surface:#fff;--ceog-surface-muted:#eef1f4;--ceog-text:#18212b;--ceog-muted:#5b6673;--ceog-border:#dce1e6;--ceog-border-strong:#c5ccd4;--ceog-primary:#5146d8;--ceog-primary-dark:#3f36b6;--ceog-primary-soft:#eeecff;--ceog-success:#16815d;--ceog-success-soft:#e4f6ef;--ceog-warning:#a65c00;--ceog-warning-soft:#fff3d6;--ceog-danger:#b42318;--ceog-danger-soft:#feeceb;--ceog-info:#1769aa;--ceog-info-soft:#e7f2fb;--ceog-shadow:0 1px 2px rgba(24,33,43,.05);--ceog-focus:0 0 0 3px rgba(81,70,216,.25);background:var(--ceog-bg);color:var(--ceog-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;line-height:1.5;margin:-10px -20px 0 0;min-height:calc(100vh - 32px)}.ceog-app[data-theme=dark]{--ceog-bg:#15171a;--ceog-surface:#202328;--ceog-surface-muted:#292d33;--ceog-text:#f0f2f4;--ceog-muted:#abb3bc;--ceog-border:#363b42;--ceog-border-strong:#4b525b;--ceog-primary:#8b82ff;--ceog-primary-dark:#a49eff;--ceog-primary-soft:rgba(139,130,255,.16);--ceog-success:#54d4a4;--ceog-success-soft:rgba(38,160,116,.18);--ceog-warning:#f2b95f;--ceog-warning-soft:rgba(210,136,24,.17);--ceog-danger:#ff8b82;--ceog-danger-soft:rgba(213,57,48,.18);--ceog-info:#77bff0;--ceog-info-soft:rgba(44,135,196,.17);--ceog-shadow:0 1px 2px rgba(0,0,0,.24)}.ceog-app button,.ceog-app input,.ceog-app select,.ceog-app textarea{font:inherit}.ceog-app button,.ceog-app dd,.ceog-app dl,.ceog-app h1,.ceog-app h2,.ceog-app h3,.ceog-app p{margin:0}.ceog-app .ceog-shell{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:calc(100vh - 32px)}.ceog-app .ceog-sidebar{background:var(--ceog-surface);border-left:1px solid var(--ceog-border);display:flex;flex-direction:column;min-width:0}.ceog-app .ceog-sidebar__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;height:68px;justify-content:space-between;min-height:68px;padding:0 20px}.ceog-app .ceog-sidebar__logo{display:block;height:auto;max-height:38px;max-width:172px;object-fit:contain;width:auto}.ceog-app .ceog-sidebar__brand{color:var(--ceog-text);font-size:16px;font-weight:700}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close,.ceog-app .ceog-sidebar-overlay{display:none}.ceog-app .ceog-sidebar__nav{display:flex;flex:1;flex-direction:column;gap:4px;padding:16px 12px}.ceog-app .ceog-nav-item{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr);min-height:40px;overflow:hidden;padding:8px 10px;text-align:right;transition:background-color .14s ease,border-color .14s ease,color .14s ease;width:100%}.ceog-app .ceog-nav-item span{min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-nav-item svg{flex:0 0 auto}.ceog-app .ceog-nav-item:hover{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-nav-item.is-active{background:var(--ceog-primary-soft);border-color:rgba(81,70,216,.16);color:var(--ceog-primary-dark);font-weight:650}.ceog-app .ceog-button:focus-visible,.ceog-app .ceog-icon-button:focus-visible,.ceog-app .ceog-mode-control button:focus-visible,.ceog-app .ceog-nav-item:focus-visible{box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-sidebar__footer{align-items:center;border-top:1px solid var(--ceog-border);color:var(--ceog-muted);display:flex;font-size:12px;gap:10px;justify-content:space-between;min-height:56px;padding:12px 16px}.ceog-app .ceog-main{background:var(--ceog-bg);min-width:0}.ceog-app .ceog-topbar{align-items:center;background:var(--ceog-surface);border-bottom:1px solid var(--ceog-border);display:flex;gap:24px;justify-content:space-between;min-height:68px;padding:10px 28px}.ceog-app .ceog-topbar__leading{align-items:center;display:flex;gap:12px;min-width:0}.ceog-app .ceog-topbar__leading>div{min-width:0}.ceog-app .ceog-section-kicker,.ceog-app .ceog-topbar__eyebrow{color:var(--ceog-primary-dark);font-size:11px;font-weight:700;line-height:1.3;text-transform:uppercase}.ceog-app .ceog-topbar__title{color:var(--ceog-text);font-size:19px;font-weight:700;line-height:1.25;margin-top:2px}.ceog-app .ceog-topbar__actions{align-items:center;display:flex;flex:0 0 auto;gap:10px}.ceog-app .ceog-icon-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:36px;justify-content:center;min-width:36px;padding:0;width:36px}.ceog-app .ceog-icon-button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-user{align-items:center;display:flex;gap:8px;min-width:0;padding-right:2px}.ceog-app .ceog-user__avatar,.ceog-app .ceog-user__initial{align-items:center;border-radius:50%;display:inline-flex;flex:0 0 30px;height:30px;justify-content:center;width:30px}.ceog-app .ceog-user__avatar{border:1px solid var(--ceog-border);object-fit:cover}.ceog-app .ceog-user__initial{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark);font-size:11px;font-weight:700}.ceog-app .ceog-user__name{color:var(--ceog-text);font-size:13px;font-weight:600;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-content{display:grid;gap:18px;margin:0 auto;max-width:1440px;padding:24px 28px 40px;width:100%}.ceog-app .ceog-dashboard,.ceog-app .ceog-loading,.ceog-app .ceog-page{display:grid;gap:18px;min-width:0}.ceog-app .ceog-hero{align-items:stretch;background:#5146d8;border-radius:8px;box-shadow:0 8px 20px rgba(59,48,174,.15);color:#fff;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr);min-height:244px;overflow:hidden}.ceog-app .ceog-hero__copy{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;min-width:0;padding:32px}.ceog-app .ceog-hero__badges{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}.ceog-app .ceog-hero__status{align-items:center;display:inline-flex;font-size:12px;font-weight:650;gap:6px}.ceog-app .ceog-hero h2{color:#fff;font-size:28px;font-weight:760;line-height:1.2;max-width:720px;overflow-wrap:anywhere}.ceog-app .ceog-hero__copy>p{color:hsla(0,0%,100%,.86);font-size:15px;margin-top:10px;max-width:650px}.ceog-app .ceog-hero__copy .ceog-button{margin-top:22px}.ceog-app .ceog-hero__mode{align-items:flex-start;background:rgba(25,20,101,.24);border-right:1px solid hsla(0,0%,100%,.18);display:flex;flex-direction:column;justify-content:center;min-width:0;padding:28px}.ceog-app .ceog-hero__mode>span{color:hsla(0,0%,100%,.72);font-size:12px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-hero__mode>strong{color:#fff;font-size:24px;line-height:1.2;margin:4px 0 16px}.ceog-app .ceog-badge{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:999px;color:var(--ceog-primary-dark);display:inline-flex;font-size:11px;font-weight:700;line-height:1.3;max-width:100%;padding:3px 8px;text-transform:uppercase;width:max-content}.ceog-app .ceog-badge--light{background:#fff;border-color:hsla(0,0%,100%,.5);color:#362e96}.ceog-app .ceog-badge--free{background:var(--ceog-success-soft);border-color:rgba(22,129,93,.18);color:var(--ceog-success)}.ceog-app .ceog-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:8px;justify-content:center;min-height:38px;padding:8px 14px;transition:background-color .14s ease,border-color .14s ease,color .14s ease}.ceog-app .ceog-button:hover{background:var(--ceog-primary-soft);border-color:var(--ceog-primary);color:var(--ceog-primary-dark)}.ceog-app .ceog-button:disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-button--primary{background:var(--ceog-primary);border-color:var(--ceog-primary);color:#fff}.ceog-app .ceog-button--primary:hover{background:var(--ceog-primary-dark);border-color:var(--ceog-primary-dark);color:#fff}.ceog-app .ceog-button--danger{background:var(--ceog-surface);border-color:rgba(180,35,24,.38);color:var(--ceog-danger)}.ceog-app .ceog-button--danger:hover{background:var(--ceog-danger);border-color:var(--ceog-danger);color:#fff}.ceog-app .ceog-button--hero{background:#fff;border-color:#fff;color:#332b88}.ceog-app .ceog-button--hero:hover{background:#f3f1ff;border-color:#f3f1ff;color:#241d70}.ceog-app .ceog-mode-control{background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:7px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:310px;padding:4px;width:100%}.ceog-app .ceog-mode-control button{align-items:center;background:transparent;border:1px solid transparent;border-radius:5px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:7px;justify-content:center;min-height:38px;min-width:0;overflow:hidden;padding:7px 10px}.ceog-app .ceog-mode-control button:hover{color:var(--ceog-text)}.ceog-app .ceog-mode-control button.is-active{background:var(--ceog-surface);border-color:var(--ceog-border);box-shadow:var(--ceog-shadow);color:var(--ceog-primary-dark)}.ceog-app .ceog-hero .ceog-mode-control{background:hsla(0,0%,100%,.12);border-color:hsla(0,0%,100%,.2)}.ceog-app .ceog-hero .ceog-mode-control button{color:hsla(0,0%,100%,.78)}.ceog-app .ceog-hero .ceog-mode-control button.is-active{background:#fff;border-color:#fff;color:#30287d}.ceog-app .ceog-stat-grid{display:grid;gap:14px;grid-template-columns:repeat(4,minmax(0,1fr))}.ceog-app .ceog-stat{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);column-gap:10px;display:grid;grid-template-columns:28px minmax(0,1fr);grid-template-rows:auto auto;min-height:116px;min-width:0;padding:18px}.ceog-app .ceog-stat>svg{align-self:start;grid-row:1/3;margin-top:3px}.ceog-app .ceog-stat strong{color:var(--ceog-text);font-size:22px;line-height:1.2;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat span{color:var(--ceog-muted);font-size:12px;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat--green{border-top-color:var(--ceog-success);color:var(--ceog-success)}.ceog-app .ceog-stat--amber{border-top-color:var(--ceog-warning);color:var(--ceog-warning)}.ceog-app .ceog-stat--purple{border-top-color:var(--ceog-primary);color:var(--ceog-primary)}.ceog-app .ceog-stat--blue{border-top-color:var(--ceog-info);color:var(--ceog-info)}.ceog-app .ceog-stat--danger{border-top-color:var(--ceog-danger);color:var(--ceog-danger)}.ceog-app .ceog-quickstart{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-right:4px solid var(--ceog-success);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;gap:24px;justify-content:space-between;padding:22px 24px}.ceog-app .ceog-quickstart>div{max-width:760px;min-width:0}.ceog-app .ceog-page__header h2,.ceog-app .ceog-quickstart h2{color:var(--ceog-text);font-size:19px;line-height:1.3;margin-top:4px}.ceog-app .ceog-page__header p,.ceog-app .ceog-quickstart p{color:var(--ceog-muted);margin-top:7px}.ceog-app .ceog-dashboard-sync-warning{align-items:center;background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);border-radius:6px;color:var(--ceog-warning);display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr) 40px;padding:10px 12px}.ceog-app .ceog-dashboard-sync-warning .ceog-icon-button{background:transparent;border-color:currentColor;color:currentColor}.ceog-app .ceog-dashboard-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.ceog-app .ceog-dashboard-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:320px;min-width:0;padding:22px}.ceog-app .ceog-dashboard-panel__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;min-height:40px;padding-bottom:16px}.ceog-app .ceog-dashboard-panel__header>div{align-items:center;color:var(--ceog-primary-dark);display:flex;gap:10px;min-width:0}.ceog-app .ceog-dashboard-panel__header h2{color:var(--ceog-text);font-size:16px;line-height:1.3;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-dashboard-panel__header>span{color:var(--ceog-text);font-size:18px;font-weight:700}.ceog-app .ceog-button--quiet{background:transparent;border-color:transparent;min-height:34px;padding:6px 10px;white-space:nowrap}.ceog-app .ceog-weekly-chart{align-items:end;display:grid;gap:10px;grid-template-columns:repeat(7,minmax(34px,1fr));height:220px;padding-top:20px}.ceog-app .ceog-weekly-chart__day{align-items:end;display:grid;gap:5px;grid-template-rows:20px 150px 20px;min-width:0;text-align:center}.ceog-app .ceog-weekly-chart__value{color:var(--ceog-muted);font-size:11px;font-variant-numeric:tabular-nums}.ceog-app .ceog-weekly-chart__track{align-items:flex-end;background:var(--ceog-surface-muted);border-radius:4px 4px 2px 2px;display:flex;height:150px;justify-content:center;overflow:hidden;position:relative;width:100%}.ceog-app .ceog-weekly-chart__track>span{background:var(--ceog-primary);border-radius:4px 4px 2px 2px;display:block;max-width:42px;min-height:0;transition:height .18s ease;width:100%}.ceog-app .ceog-weekly-chart__day strong{color:var(--ceog-muted);font-size:11px;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events{display:grid;list-style:none;margin:0;padding:0}.ceog-app .ceog-recent-events li{align-items:center;border-bottom:1px solid var(--ceog-border);display:grid;gap:10px;grid-template-columns:10px minmax(0,1fr) 32px;min-height:51px;padding:8px 0}.ceog-app .ceog-recent-events li:last-child{border-bottom:0}.ceog-app .ceog-recent-events li>div{display:grid;min-width:0}.ceog-app .ceog-recent-events strong{color:var(--ceog-text);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events small{color:var(--ceog-muted);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events a{align-items:center;border-radius:5px;color:var(--ceog-muted);display:inline-flex;height:32px;justify-content:center;width:32px}.ceog-app .ceog-recent-events a:focus-visible,.ceog-app .ceog-recent-events a:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-event-dot{background:var(--ceog-info);border-radius:50%;display:block;height:8px;width:8px}.ceog-app .ceog-event-dot--enforce{background:var(--ceog-danger)}.ceog-app .ceog-dashboard-empty{align-items:center;color:var(--ceog-muted);display:flex;gap:9px;justify-content:center;min-height:210px}.ceog-app .ceog-pro-context{align-items:start;background:var(--ceog-surface);border:1px solid var(--ceog-primary);border-right-width:4px;border-radius:8px;box-shadow:var(--ceog-shadow);display:grid;gap:18px;grid-template-columns:minmax(0,1fr) 40px;padding:20px 22px}.ceog-app .ceog-pro-context>div{display:grid;gap:6px;min-width:0}.ceog-app .ceog-pro-context h2{color:var(--ceog-text);font-size:16px;line-height:1.3}.ceog-app .ceog-pro-context p{color:var(--ceog-muted)}.ceog-app .ceog-error,.ceog-app .ceog-warning{align-items:center;border-radius:6px;display:grid;gap:12px;padding:13px 15px}.ceog-app .ceog-warning{background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);color:var(--ceog-warning);grid-template-columns:20px minmax(0,1fr)}.ceog-app .ceog-error{background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.22);color:var(--ceog-danger);grid-template-columns:22px minmax(0,1fr) auto}.ceog-app .ceog-error p{color:var(--ceog-text);margin-top:2px}.ceog-app .ceog-page__header{align-items:flex-start;border-bottom:1px solid var(--ceog-border);display:flex;gap:20px;justify-content:space-between;padding-bottom:18px}.ceog-app .ceog-page__header>div{max-width:760px}.ceog-app .ceog-status{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:12px;font-weight:650;gap:6px;min-height:28px;padding:4px 9px;white-space:nowrap}.ceog-app .ceog-status--success{background:var(--ceog-success-soft);border-color:rgba(22,129,93,.22);color:var(--ceog-success)}.ceog-app .ceog-status--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-settings-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-settings-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:290px;min-width:0;padding:22px}.ceog-app .ceog-settings-panel--wide{grid-column:1/-1}.ceog-app .ceog-settings-panel__heading{color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr)}.ceog-app .ceog-settings-panel__heading h3{color:var(--ceog-text);font-size:16px;line-height:1.3}.ceog-app .ceog-settings-panel__heading p{color:var(--ceog-muted);font-size:13px;margin-top:5px}.ceog-app .ceog-switch-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:28px;padding:16px 0;position:relative}.ceog-app .ceog-switch-row>span:first-child{display:grid;gap:2px;min-width:0}.ceog-app .ceog-switch-row strong{color:var(--ceog-text)}.ceog-app .ceog-switch-row small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-switch-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-switch{background:var(--ceog-border-strong);border-radius:999px;flex:0 0 44px;height:24px;position:relative;transition:background-color .14s ease;width:44px}.ceog-app .ceog-switch:after{background:#fff;border-radius:50%;box-shadow:0 1px 2px rgba(0,0,0,.25);content:"";height:18px;right:3px;position:absolute;top:3px;transition:transform .14s ease;width:18px}.ceog-app .ceog-switch-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-switch-row input:checked+.ceog-switch:after{transform:translateX(-20px)}.ceog-app .ceog-switch-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:22px;padding:15px 0;position:relative}.ceog-app .ceog-toggle-row__copy{display:grid;gap:3px;min-width:0}.ceog-app .ceog-toggle-row__copy strong{color:var(--ceog-text)}.ceog-app .ceog-toggle-row__copy small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-toggle-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-toggle-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-toggle-row--warning input:checked+.ceog-switch{background:var(--ceog-warning)}.ceog-app .ceog-toggle-row--danger input:checked+.ceog-switch{background:var(--ceog-danger)}.ceog-app .ceog-toggle-row input:checked+.ceog-switch:after{transform:translateX(-20px)}.ceog-app .ceog-toggle-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row.is-disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-field{display:grid;gap:7px;margin-top:20px}.ceog-app .ceog-field>span{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-field input,.ceog-app .ceog-field select{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:40px;padding:7px 10px;width:100%}.ceog-app .ceog-field input:focus,.ceog-app .ceog-field select:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-field input:disabled,.ceog-app .ceog-field select:disabled{background:var(--ceog-surface-muted);color:var(--ceog-muted);cursor:not-allowed}.ceog-app .ceog-field-note{color:var(--ceog-muted);font-size:12px;margin-top:10px!important}.ceog-app .ceog-readonly-value{align-items:baseline;color:var(--ceog-muted);display:flex;gap:8px;margin-top:28px}.ceog-app .ceog-readonly-value strong{color:var(--ceog-text);font-size:32px;line-height:1}.ceog-app .ceog-environment-row{background:var(--ceog-border);border:1px solid var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px;overflow:hidden}.ceog-app .ceog-environment-row>div{background:var(--ceog-surface-muted);display:grid;gap:4px;padding:14px 16px}.ceog-app .ceog-environment-row span{color:var(--ceog-muted);font-size:11px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-environment-row strong{color:var(--ceog-text);font-size:13px}.ceog-app .ceog-advanced-setting{padding-top:22px}.ceog-app .ceog-advanced-setting+.ceog-advanced-setting{border-top:1px solid var(--ceog-border);margin-top:22px}.ceog-app .ceog-advanced-setting .ceog-toggle-row{margin-top:0}.ceog-app .ceog-risk{align-items:start;border:1px solid transparent;border-radius:6px;display:grid;font-size:12px;gap:10px;grid-template-columns:20px minmax(0,1fr);margin-top:12px;padding:12px 13px}.ceog-app .ceog-risk--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-risk--danger{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-acknowledgement{align-items:center;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:12px;font-weight:650;gap:8px;margin-top:12px}.ceog-app .ceog-acknowledgement input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-acknowledgement:has(input:disabled){cursor:not-allowed;opacity:.55}.ceog-app .ceog-save-bar{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:flex-end;padding:16px 0 2px}.ceog-app .ceog-log-filters{align-items:end;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:grid;gap:14px;grid-template-columns:minmax(210px,1.4fr) minmax(160px,.8fr) minmax(160px,.8fr) auto;padding:18px}.ceog-app .ceog-log-filters .ceog-field{margin-top:0}.ceog-app .ceog-log-filter-actions{align-items:center;display:flex;gap:8px}.ceog-app .ceog-correlation-filter{align-items:center;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;gap:9px;grid-template-columns:20px auto minmax(120px,1fr) 36px;padding:10px 12px}.ceog-app .ceog-correlation-filter span{font-weight:650}.ceog-app .ceog-correlation-filter code{color:var(--ceog-text);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-log-export-notice{align-items:center;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:flex;font-size:12px;font-weight:650;gap:9px;padding:11px 13px}.ceog-app .ceog-log-export-notice svg{flex:0 0 auto}.ceog-app .ceog-log-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);min-width:0;overflow:hidden}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-pagination{align-items:center;display:flex;gap:16px;justify-content:space-between;min-height:62px;padding:12px 16px}.ceog-app .ceog-log-actions{border-bottom:1px solid var(--ceog-border)}.ceog-app .ceog-log-actions>span,.ceog-app .ceog-log-pagination>span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{align-items:center;display:flex;gap:8px}.ceog-app .ceog-log-table-wrap{overflow-x:auto;overscroll-behavior-inline:contain;width:100%;-webkit-overflow-scrolling:touch}.ceog-app .ceog-log-table{border-collapse:collapse;border-spacing:0;min-width:1120px;table-layout:fixed;width:100%}.ceog-app .ceog-log-table td,.ceog-app .ceog-log-table th{border-bottom:1px solid var(--ceog-border);color:var(--ceog-text);font-size:12px;line-height:1.4;padding:11px 12px;text-align:right;vertical-align:top}.ceog-app .ceog-log-table th{background:var(--ceog-surface-muted);color:var(--ceog-muted);font-size:11px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-log-table tbody tr:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-log-table tbody tr:last-child td{border-bottom:0}.ceog-app .ceog-log-table td:nth-child(2),.ceog-app .ceog-log-table th:nth-child(2){width:142px}.ceog-app .ceog-log-table td:nth-child(3),.ceog-app .ceog-log-table th:nth-child(3){width:170px}.ceog-app .ceog-log-table td:nth-child(4),.ceog-app .ceog-log-table th:nth-child(4){width:90px}.ceog-app .ceog-log-table td:nth-child(5),.ceog-app .ceog-log-table th:nth-child(5){width:175px}.ceog-app .ceog-log-table td:nth-child(8),.ceog-app .ceog-log-table th:nth-child(8){width:78px}.ceog-app .ceog-log-table__select{text-align:center!important;width:42px}.ceog-app .ceog-log-table input[type=checkbox]{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-log-table__time{font-variant-numeric:tabular-nums;white-space:nowrap}.ceog-app .ceog-log-table__reason,.ceog-app .ceog-log-table__route{overflow-wrap:anywhere}.ceog-app .ceog-log-table a{align-items:center;color:var(--ceog-primary-dark);display:inline-flex;font-weight:650;gap:4px;text-decoration:none}.ceog-app .ceog-log-table a:hover{text-decoration:underline}.ceog-app .ceog-event-type,.ceog-app .ceog-mode-badge{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:11px;font-weight:650;max-width:100%;padding:3px 7px;width:max-content}.ceog-app .ceog-event-type{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-mode-badge--monitor{background:var(--ceog-info-soft);border-color:rgba(23,105,170,.22);color:var(--ceog-info)}.ceog-app .ceog-mode-badge--enforce{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-log-ip{align-items:center;display:flex;gap:6px}.ceog-app .ceog-log-ip code{color:var(--ceog-text);font-size:11px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-icon-button--small{height:28px;min-width:28px;width:28px}.ceog-app .ceog-icon-button:disabled{cursor:not-allowed;opacity:.5}.ceog-app .ceog-log-empty,.ceog-app .ceog-log-loading{align-items:center;color:var(--ceog-muted);display:flex;justify-content:center;min-height:310px;padding:36px;text-align:center}.ceog-app .ceog-log-loading{gap:10px}.ceog-app .ceog-log-loading svg{animation:ceog-spin .9s linear infinite}.ceog-app .ceog-log-empty{flex-direction:column}.ceog-app .ceog-log-empty svg{color:var(--ceog-primary-dark)}.ceog-app .ceog-log-empty h3{color:var(--ceog-text);font-size:16px;margin-top:12px}.ceog-app .ceog-log-empty p{margin-top:6px;max-width:560px}.ceog-app .ceog-log-pagination{border-top:1px solid var(--ceog-border)}@keyframes ceog-spin{to{transform:rotate(-1turn)}}.ceog-app .ceog-list-counts{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.ceog-app .ceog-list-precedence{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-list-precedence>div{display:grid;gap:2px}.ceog-app .ceog-list-precedence strong{color:var(--ceog-text)}.ceog-app .ceog-list-precedence span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-list-grid{align-items:start;display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-list-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);min-width:0;padding:22px}.ceog-app .ceog-list-panel--block{border-top-color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow{border-top-color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading{border-bottom:1px solid var(--ceog-border);color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);padding-bottom:18px}.ceog-app .ceog-list-panel--block .ceog-list-panel__heading{color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow .ceog-list-panel__heading{color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading h3{color:var(--ceog-text);font-size:17px;line-height:1.3}.ceog-app .ceog-list-panel__heading p{color:var(--ceog-muted);font-size:12px;margin-top:5px}.ceog-app .ceog-list-field{display:grid;gap:6px;margin-top:20px;min-width:0}.ceog-app .ceog-list-field>span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-list-field>small{color:var(--ceog-muted);font-size:11px;min-height:18px}.ceog-app .ceog-list-field textarea{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5;min-height:112px;padding:9px 10px;resize:vertical;width:100%}.ceog-app .ceog-list-field textarea:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-list-field textarea::placeholder{color:var(--ceog-muted);opacity:.72}.ceog-app .ceog-list-field-icon{position:relative}.ceog-app .ceog-list-field-icon>svg{color:var(--ceog-muted);position:absolute;left:0;top:21px;z-index:1}.ceog-app .ceog-list-field-icon .ceog-list-field>small,.ceog-app .ceog-list-field-icon .ceog-list-field>span{padding-left:24px}.ceog-app .ceog-list-compatibility{align-items:start;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;font-size:12px;gap:9px;grid-template-columns:19px minmax(0,1fr);margin-top:18px;padding:11px 12px}.ceog-app .ceog-choice-field{display:grid;gap:10px;margin-top:20px;min-width:0;position:relative}.ceog-app .ceog-choice-field__heading{align-items:start;display:grid;gap:8px;grid-template-columns:19px minmax(0,1fr)}.ceog-app .ceog-choice-field__heading>svg{color:var(--ceog-muted);margin-top:1px}.ceog-app .ceog-choice-field__heading>div{display:grid;gap:3px}.ceog-app .ceog-choice-field__heading span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-choice-field__heading small{color:var(--ceog-muted);font-size:11px}.ceog-app .ceog-choice-tokens{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.ceog-app .ceog-choice-token{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.2);border-radius:999px;color:var(--ceog-primary-dark);display:grid;font-size:11px;font-weight:650;gap:6px;grid-template-columns:auto auto 22px;max-width:100%;min-height:30px;padding:3px 9px 3px 3px}.ceog-app .ceog-choice-token code,.ceog-app .ceog-choice-token>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-token code{color:var(--ceog-muted);font-size:10px;font-weight:400}.ceog-app .ceog-choice-token button{align-items:center;background:transparent;border:0;border-radius:50%;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:22px;justify-content:center;padding:0;width:22px}.ceog-app .ceog-choice-token button:hover{background:var(--ceog-danger-soft);color:var(--ceog-danger)}.ceog-app .ceog-choice-search{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);display:grid;grid-template-columns:20px minmax(0,1fr) 34px;min-height:42px;padding-right:10px}.ceog-app .ceog-choice-menu{position:relative}.ceog-app .ceog-choice-search:focus-within{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus)}.ceog-app .ceog-choice-search input{background:transparent;border:0;box-shadow:none;color:var(--ceog-text);height:40px;min-width:0;padding:7px 8px;width:100%}.ceog-app .ceog-choice-search input:focus{box-shadow:none;outline:0}.ceog-app .ceog-choice-search button{align-items:center;background:transparent;border:0;border-right:1px solid var(--ceog-border);color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:40px;justify-content:center;padding:0;width:34px}.ceog-app .ceog-choice-search button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-choice-options{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;box-shadow:0 12px 28px rgba(24,33,43,.18);right:0;max-height:260px;overflow-y:auto;position:absolute;left:0;top:calc(100% + 4px);z-index:20}.ceog-app .ceog-choice-options>label{align-items:center;border-bottom:1px solid var(--ceog-border);cursor:pointer;display:grid;gap:9px;grid-template-columns:18px minmax(0,1fr) 18px;min-height:46px;padding:7px 10px}.ceog-app .ceog-choice-options>label:last-of-type{border-bottom:0}.ceog-app .ceog-choice-options>label.is-selected,.ceog-app .ceog-choice-options>label:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-choice-options input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-choice-options label>span{display:grid;gap:1px;min-width:0}.ceog-app .ceog-choice-options strong{color:var(--ceog-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options code{color:var(--ceog-muted);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options>p{color:var(--ceog-muted);font-size:12px;padding:14px;text-align:center}.ceog-app .ceog-choice-manual{display:grid;gap:8px;grid-template-columns:minmax(0,1fr) auto}.ceog-app .ceog-choice-manual input{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:38px;padding:7px 10px;width:100%}.ceog-app .ceog-choice-manual input:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-skeleton--store-api{min-height:150px}.ceog-app .ceog-emergency-banner{align-items:start;background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.3);border-radius:6px;color:var(--ceog-danger);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-emergency-banner>div{display:grid;gap:2px}.ceog-app .ceog-emergency-banner strong{color:var(--ceog-danger)}.ceog-app .ceog-emergency-banner span{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-store-api-panel{min-height:410px}.ceog-app .ceog-number-grid{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-breaker-header-status{align-items:center;display:flex;gap:8px}.ceog-app .ceog-breaker-grid{display:grid;gap:18px;grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-breaker-panel{border-top:3px solid #4f46e5;min-width:0}.ceog-app .ceog-breaker-panel--email{border-top-color:#0f8a62}.ceog-app .ceog-breaker-panel--global{border-top-color:#c56a0a}.ceog-app .ceog-breaker-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.ceog-app .ceog-breaker-title-row h3{margin:0}.ceog-app .ceog-badge--primary{background:#fff4d6;border-color:#efcf8f;color:#8b4b05}.ceog-app .ceog-breaker-live{align-items:center;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);display:flex;gap:9px;margin:0 0 2px;min-height:56px;padding:10px 12px}.ceog-app .ceog-breaker-live>div{display:grid;gap:2px;min-width:0}.ceog-app .ceog-breaker-live span,.ceog-app .ceog-breaker-live strong{font-size:13px;font-weight:700}.ceog-app .ceog-breaker-live small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-breaker-live>strong{margin-right:auto}.ceog-app .ceog-breaker-live--ready{background:#eaf8f2;border-color:#b7e1d1;color:#087b57}.ceog-app .ceog-breaker-live--warning{background:#fff7df;border-color:#efcf8f;color:#9a5707}.ceog-app .ceog-breaker-live--danger{background:#fff0ef;border-color:#f1b9b5;color:#b42318}.ceog-app .ceog-breaker-live--muted{color:var(--ceog-muted);display:grid;gap:2px}.ceog-app .ceog-breaker-fields{display:grid;gap:12px;grid-template-columns:1fr;padding:18px 0}.ceog-app .ceog-breaker-note{align-items:flex-start;background:#fff8e8;border:1px solid #edd7aa;color:#85510f;display:flex;gap:9px;margin-top:auto;padding:12px}.ceog-app .ceog-breaker-note svg{flex:0 0 auto;margin-top:1px}.ceog-app .ceog-breaker-note p{font-size:12px;line-height:1.5;margin:0}.ceog-app[data-theme=dark] .ceog-breaker-live--ready{background:#17372e;border-color:#28624f;color:#79dbb9}.ceog-app[data-theme=dark] .ceog-breaker-live--warning,.ceog-app[data-theme=dark] .ceog-breaker-note{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app[data-theme=dark] .ceog-breaker-live--danger{background:#432422;border-color:#74403c;color:#ff9c96}.ceog-app[data-theme=dark] .ceog-badge--primary{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app .ceog-limiter-status{background:var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:auto;overflow:hidden;padding-top:22px}.ceog-app .ceog-limiter-status>div{background:var(--ceog-surface-muted);display:grid;gap:3px;padding:13px 14px}.ceog-app .ceog-limiter-status span{color:var(--ceog-muted);font-size:10px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-limiter-status strong{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-batch-state{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);margin-top:24px;padding:15px}.ceog-app .ceog-batch-state>div{display:grid;gap:3px}.ceog-app .ceog-batch-state strong{color:var(--ceog-text)}.ceog-app .ceog-batch-state span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-store-api-facts{display:grid;gap:0;margin-top:18px}.ceog-app .ceog-store-api-facts>div{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:space-between;padding:11px 0}.ceog-app .ceog-store-api-facts>div:last-child{border-bottom:0}.ceog-app .ceog-store-api-facts dt{align-items:center;color:var(--ceog-muted);display:inline-flex;font-size:12px;gap:7px}.ceog-app .ceog-store-api-facts dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-store-api-advanced{min-height:0}.ceog-app .ceog-skeleton--list{min-height:760px}.ceog-app .ceog-settings-panel__footer{align-items:center;display:flex;gap:12px;justify-content:flex-end;margin-top:auto;padding-top:22px}.ceog-app .ceog-saved{align-items:center;color:var(--ceog-success);display:inline-flex;font-size:12px;font-weight:650;gap:5px}.ceog-app .ceog-settings-panel>.ceog-mode-control{margin-top:28px}.ceog-app .ceog-settings-meta{display:grid;gap:10px;margin-top:auto;padding-top:24px}.ceog-app .ceog-settings-meta>div{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;padding-top:10px}.ceog-app .ceog-settings-meta dt{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-settings-meta dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-empty{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);flex-direction:column;min-height:430px;padding:44px 28px;text-align:center}.ceog-app .ceog-empty,.ceog-app .ceog-empty__icon{align-items:center;display:flex;justify-content:center}.ceog-app .ceog-empty__icon{background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:8px;color:var(--ceog-primary-dark);height:56px;width:56px}.ceog-app .ceog-empty h2{color:var(--ceog-text);font-size:19px;margin-top:18px}.ceog-app .ceog-empty p{color:var(--ceog-muted);margin:8px auto 16px;max-width:560px}.ceog-app .ceog-skeleton{animation:ceog-pulse 1.2s ease-in-out infinite alternate;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:8px}.ceog-app .ceog-skeleton--hero{min-height:244px}.ceog-app .ceog-skeleton--stat{min-height:116px}@keyframes ceog-pulse{0%{opacity:.55}to{opacity:1}}@media (max-width:1100px){.ceog-app .ceog-breaker-grid{grid-template-columns:1fr}.ceog-app .ceog-hero{grid-template-columns:minmax(0,1fr) minmax(250px,.65fr)}.ceog-app .ceog-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-dashboard-grid,.ceog-app .ceog-settings-grid{grid-template-columns:1fr}.ceog-app .ceog-settings-panel--wide{grid-column:auto}.ceog-app .ceog-log-filters{grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-log-filter-actions{grid-column:1/-1}.ceog-app .ceog-list-grid{grid-template-columns:1fr}.ceog-app .ceog-skeleton--list{min-height:520px}}@media (max-width:900px){.ceog-app .ceog-shell{grid-template-columns:210px minmax(0,1fr)}.ceog-app .ceog-content{padding:20px}.ceog-app .ceog-hero{grid-template-columns:1fr}.ceog-app .ceog-hero__mode{border-right:0;border-top:1px solid hsla(0,0%,100%,.18)}}@media (max-width:782px){.ceog-app{margin:0;min-height:calc(100vh - 46px)}.ceog-app .ceog-shell{grid-template-columns:1fr;min-height:calc(100vh - 46px)}.ceog-app .ceog-sidebar{border-left:1px solid var(--ceog-border);bottom:0;box-shadow:-14px 0 34px rgba(0,0,0,.24);right:0;min-height:0;position:fixed;top:46px;transform:translateX(105%);transition:transform .22s ease,visibility .22s ease;visibility:hidden;width:min(300px,calc(100vw - 44px));z-index:99998}.ceog-app .ceog-sidebar.is-mobile-open{transform:translateX(0);visibility:visible}.ceog-app .ceog-sidebar__header{height:68px;min-height:68px;padding:0 18px 0 14px}.ceog-app .ceog-sidebar__logo{max-width:168px}.ceog-app .ceog-sidebar__nav{flex:1;flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:14px 12px;-webkit-overflow-scrolling:touch}.ceog-app .ceog-nav-item{display:grid;min-height:44px;min-width:0;width:100%}.ceog-app .ceog-sidebar__footer{display:flex;min-height:58px}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close{display:inline-flex}.ceog-app .ceog-sidebar-overlay{animation:ceog-overlay-in .18s ease both;background:rgba(10,13,18,.58);border:0;border-radius:0;bottom:0;cursor:default;display:block;height:auto;right:0;padding:0;position:fixed;left:0;top:46px;width:100%;z-index:99997}.ceog-app .ceog-topbar{padding:10px 16px}.ceog-app .ceog-topbar__leading{gap:10px}.ceog-app .ceog-user__name{display:none}.ceog-app .ceog-content{padding:16px}.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select,.ceog-app textarea{font-size:16px}.ceog-app .ceog-button,.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select{min-height:44px}.ceog-app .ceog-icon-button{height:40px;min-width:40px;width:40px}.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode{padding:24px}.ceog-app .ceog-hero h2{font-size:24px}.ceog-app .ceog-page__header,.ceog-app .ceog-quickstart{align-items:flex-start;flex-direction:column}.ceog-app .ceog-breaker-header-status,.ceog-app .ceog-page__header>*{max-width:100%}.ceog-app .ceog-list-counts{justify-content:flex-start}.ceog-app .ceog-log-filters{grid-template-columns:1fr}.ceog-app .ceog-log-filter-actions{grid-column:auto}}@keyframes ceog-overlay-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.ceog-app .ceog-sidebar,.ceog-app .ceog-sidebar-overlay{animation:none;transition:none}}@media (max-width:520px){.ceog-app .ceog-topbar__eyebrow{display:none}.ceog-app .ceog-topbar__title{font-size:17px}.ceog-app .ceog-stat-grid{grid-template-columns:1fr}.ceog-app .ceog-dashboard-panel{min-height:0;padding:18px}.ceog-app .ceog-dashboard-panel__header{align-items:flex-start}.ceog-app .ceog-weekly-chart{gap:5px;height:190px}.ceog-app .ceog-weekly-chart__day{grid-template-rows:20px 120px 20px}.ceog-app .ceog-weekly-chart__track{height:120px}.ceog-app .ceog-pro-context{padding:18px}.ceog-app .ceog-error{grid-template-columns:22px minmax(0,1fr)}.ceog-app .ceog-error .ceog-button{grid-column:1/-1}.ceog-app .ceog-empty,.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode,.ceog-app .ceog-settings-panel{padding:20px}.ceog-app .ceog-mode-control{max-width:none}.ceog-app .ceog-environment-row{grid-template-columns:1fr}.ceog-app .ceog-toggle-row{align-items:flex-start}.ceog-app .ceog-save-bar{align-items:stretch;flex-direction:column}.ceog-app .ceog-save-bar .ceog-button{width:100%}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-filter-actions,.ceog-app .ceog-log-pagination{align-items:stretch;flex-direction:column}.ceog-app .ceog-log-actions .ceog-button,.ceog-app .ceog-log-filter-actions .ceog-button,.ceog-app .ceog-log-pagination .ceog-button{flex:1;width:100%}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{width:100%}.ceog-app .ceog-log-actions>div{flex-wrap:wrap}.ceog-app .ceog-correlation-filter{grid-template-columns:20px minmax(0,1fr) 36px}.ceog-app .ceog-correlation-filter code{grid-column:2/3}.ceog-app .ceog-correlation-filter .ceog-icon-button{grid-column:3;grid-row:1/3}.ceog-app .ceog-choice-token{grid-template-columns:minmax(0,1fr) 22px}.ceog-app .ceog-choice-token code{display:none}.ceog-app .ceog-choice-manual,.ceog-app .ceog-limiter-status,.ceog-app .ceog-number-grid{grid-template-columns:1fr}}
     1.ceog-app,.ceog-app *{box-sizing:border-box;letter-spacing:0}.ceog-app{--ceog-bg:#f4f6f8;--ceog-surface:#fff;--ceog-surface-muted:#eef1f4;--ceog-text:#18212b;--ceog-muted:#5b6673;--ceog-border:#dce1e6;--ceog-border-strong:#c5ccd4;--ceog-primary:#5146d8;--ceog-primary-dark:#3f36b6;--ceog-primary-soft:#eeecff;--ceog-success:#16815d;--ceog-success-soft:#e4f6ef;--ceog-warning:#a65c00;--ceog-warning-soft:#fff3d6;--ceog-danger:#b42318;--ceog-danger-soft:#feeceb;--ceog-info:#1769aa;--ceog-info-soft:#e7f2fb;--ceog-shadow:0 1px 2px rgba(24,33,43,.05);--ceog-focus:0 0 0 3px rgba(81,70,216,.25);background:var(--ceog-bg);color:var(--ceog-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;line-height:1.5;margin:-10px -20px 0 0;min-height:calc(100vh - 32px)}.ceog-app[data-theme=dark]{--ceog-bg:#15171a;--ceog-surface:#202328;--ceog-surface-muted:#292d33;--ceog-text:#f0f2f4;--ceog-muted:#abb3bc;--ceog-border:#363b42;--ceog-border-strong:#4b525b;--ceog-primary:#8b82ff;--ceog-primary-dark:#a49eff;--ceog-primary-soft:rgba(139,130,255,.16);--ceog-success:#54d4a4;--ceog-success-soft:rgba(38,160,116,.18);--ceog-warning:#f2b95f;--ceog-warning-soft:rgba(210,136,24,.17);--ceog-danger:#ff8b82;--ceog-danger-soft:rgba(213,57,48,.18);--ceog-info:#77bff0;--ceog-info-soft:rgba(44,135,196,.17);--ceog-shadow:0 1px 2px rgba(0,0,0,.24)}.ceog-app button,.ceog-app input,.ceog-app select,.ceog-app textarea{font:inherit}.ceog-app button,.ceog-app dd,.ceog-app dl,.ceog-app h1,.ceog-app h2,.ceog-app h3,.ceog-app p{margin:0}.ceog-app .ceog-shell{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:calc(100vh - 32px)}.ceog-app .ceog-sidebar{background:var(--ceog-surface);border-left:1px solid var(--ceog-border);display:flex;flex-direction:column;min-width:0}.ceog-app .ceog-sidebar__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;height:68px;justify-content:space-between;min-height:68px;padding:0 20px}.ceog-app .ceog-sidebar__logo{display:block;height:auto;max-height:38px;max-width:172px;object-fit:contain;width:auto}.ceog-app .ceog-sidebar__brand{color:var(--ceog-text);font-size:16px;font-weight:700}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close,.ceog-app .ceog-sidebar-overlay{display:none}.ceog-app .ceog-sidebar__nav{display:flex;flex:1;flex-direction:column;gap:4px;padding:16px 12px}.ceog-app .ceog-nav-item{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr) auto;min-height:40px;overflow:hidden;padding:8px 10px;text-align:right;transition:background-color .14s ease,border-color .14s ease,color .14s ease;width:100%}.ceog-app .ceog-nav-item span{min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-nav-item svg{flex:0 0 auto}.ceog-app .ceog-nav-item__badge{background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.2);border-radius:999px;color:var(--ceog-primary-dark);font-size:10px;font-weight:750;line-height:1.2;padding:2px 6px;text-transform:uppercase}.ceog-app .ceog-nav-item:hover{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-nav-item.is-active{background:var(--ceog-primary-soft);border-color:rgba(81,70,216,.16);color:var(--ceog-primary-dark);font-weight:650}.ceog-app .ceog-button:focus-visible,.ceog-app .ceog-icon-button:focus-visible,.ceog-app .ceog-mode-control button:focus-visible,.ceog-app .ceog-nav-item:focus-visible{box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-sidebar__footer{align-items:center;border-top:1px solid var(--ceog-border);color:var(--ceog-muted);display:flex;font-size:12px;gap:10px;justify-content:space-between;min-height:56px;padding:12px 16px}.ceog-app .ceog-main{background:var(--ceog-bg);min-width:0}.ceog-app .ceog-topbar{align-items:center;background:var(--ceog-surface);border-bottom:1px solid var(--ceog-border);display:flex;gap:24px;justify-content:space-between;min-height:68px;padding:10px 28px}.ceog-app .ceog-topbar__leading{align-items:center;display:flex;gap:12px;min-width:0}.ceog-app .ceog-topbar__leading>div{min-width:0}.ceog-app .ceog-section-kicker,.ceog-app .ceog-topbar__eyebrow{color:var(--ceog-primary-dark);font-size:11px;font-weight:700;line-height:1.3;text-transform:uppercase}.ceog-app .ceog-topbar__title{color:var(--ceog-text);font-size:19px;font-weight:700;line-height:1.25;margin-top:2px}.ceog-app .ceog-topbar__actions{align-items:center;display:flex;flex:0 0 auto;gap:10px}.ceog-app .ceog-icon-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:36px;justify-content:center;min-width:36px;padding:0;width:36px}.ceog-app .ceog-icon-button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-user{align-items:center;display:flex;gap:8px;min-width:0;padding-right:2px}.ceog-app .ceog-user__avatar,.ceog-app .ceog-user__initial{align-items:center;border-radius:50%;display:inline-flex;flex:0 0 30px;height:30px;justify-content:center;width:30px}.ceog-app .ceog-user__avatar{border:1px solid var(--ceog-border);object-fit:cover}.ceog-app .ceog-user__initial{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark);font-size:11px;font-weight:700}.ceog-app .ceog-user__name{color:var(--ceog-text);font-size:13px;font-weight:600;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-content{display:grid;gap:18px;margin:0 auto;max-width:1440px;padding:24px 28px 40px;width:100%}.ceog-app .ceog-dashboard,.ceog-app .ceog-loading,.ceog-app .ceog-page{display:grid;gap:18px;min-width:0}.ceog-app .ceog-hero{align-items:stretch;background:#5146d8;border-radius:8px;box-shadow:0 8px 20px rgba(59,48,174,.15);color:#fff;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr);min-height:244px;overflow:hidden}.ceog-app .ceog-hero__copy{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;min-width:0;padding:32px}.ceog-app .ceog-hero__badges{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}.ceog-app .ceog-hero__status{align-items:center;display:inline-flex;font-size:12px;font-weight:650;gap:6px}.ceog-app .ceog-hero h2{color:#fff;font-size:28px;font-weight:760;line-height:1.2;max-width:720px;overflow-wrap:anywhere}.ceog-app .ceog-hero__copy>p{color:hsla(0,0%,100%,.86);font-size:15px;margin-top:10px;max-width:650px}.ceog-app .ceog-hero__copy .ceog-button{margin-top:22px}.ceog-app .ceog-hero__mode{align-items:flex-start;background:rgba(25,20,101,.24);border-right:1px solid hsla(0,0%,100%,.18);display:flex;flex-direction:column;justify-content:center;min-width:0;padding:28px}.ceog-app .ceog-hero__mode>span{color:hsla(0,0%,100%,.72);font-size:12px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-hero__mode>strong{color:#fff;font-size:24px;line-height:1.2;margin:4px 0 16px}.ceog-app .ceog-badge{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:999px;color:var(--ceog-primary-dark);display:inline-flex;font-size:11px;font-weight:700;line-height:1.3;max-width:100%;padding:3px 8px;text-transform:uppercase;width:max-content}.ceog-app .ceog-badge--light{background:#fff;border-color:hsla(0,0%,100%,.5);color:#362e96}.ceog-app .ceog-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:8px;justify-content:center;min-height:38px;padding:8px 14px;transition:background-color .14s ease,border-color .14s ease,color .14s ease}.ceog-app .ceog-button:hover{background:var(--ceog-primary-soft);border-color:var(--ceog-primary);color:var(--ceog-primary-dark)}.ceog-app .ceog-button:disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-button--primary{background:var(--ceog-primary);border-color:var(--ceog-primary);color:#fff}.ceog-app .ceog-button--primary:hover{background:var(--ceog-primary-dark);border-color:var(--ceog-primary-dark);color:#fff}.ceog-app .ceog-button--danger{background:var(--ceog-surface);border-color:rgba(180,35,24,.38);color:var(--ceog-danger)}.ceog-app .ceog-button--danger:hover{background:var(--ceog-danger);border-color:var(--ceog-danger);color:#fff}.ceog-app .ceog-button--hero{background:#fff;border-color:#fff;color:#332b88}.ceog-app .ceog-button--hero:hover{background:#f3f1ff;border-color:#f3f1ff;color:#241d70}.ceog-app .ceog-mode-control{background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:7px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:310px;padding:4px;width:100%}.ceog-app .ceog-mode-control button{align-items:center;background:transparent;border:1px solid transparent;border-radius:5px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:7px;justify-content:center;min-height:38px;min-width:0;overflow:hidden;padding:7px 10px}.ceog-app .ceog-mode-control button:hover{color:var(--ceog-text)}.ceog-app .ceog-mode-control button.is-active{background:var(--ceog-surface);border-color:var(--ceog-border);box-shadow:var(--ceog-shadow);color:var(--ceog-primary-dark)}.ceog-app .ceog-hero .ceog-mode-control{background:hsla(0,0%,100%,.12);border-color:hsla(0,0%,100%,.2)}.ceog-app .ceog-hero .ceog-mode-control button{color:hsla(0,0%,100%,.78)}.ceog-app .ceog-hero .ceog-mode-control button.is-active{background:#fff;border-color:#fff;color:#30287d}.ceog-app .ceog-stat-grid{display:grid;gap:14px;grid-template-columns:repeat(4,minmax(0,1fr))}.ceog-app .ceog-stat{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);column-gap:10px;display:grid;grid-template-columns:28px minmax(0,1fr);grid-template-rows:auto auto;min-height:116px;min-width:0;padding:18px}.ceog-app .ceog-stat>svg{align-self:start;grid-row:1/3;margin-top:3px}.ceog-app .ceog-stat strong{color:var(--ceog-text);font-size:22px;line-height:1.2;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat span{color:var(--ceog-muted);font-size:12px;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat--green{border-top-color:var(--ceog-success);color:var(--ceog-success)}.ceog-app .ceog-stat--amber{border-top-color:var(--ceog-warning);color:var(--ceog-warning)}.ceog-app .ceog-stat--purple{border-top-color:var(--ceog-primary);color:var(--ceog-primary)}.ceog-app .ceog-stat--blue{border-top-color:var(--ceog-info);color:var(--ceog-info)}.ceog-app .ceog-stat--danger{border-top-color:var(--ceog-danger);color:var(--ceog-danger)}.ceog-app .ceog-quickstart{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-right:4px solid var(--ceog-success);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;gap:24px;justify-content:space-between;padding:22px 24px}.ceog-app .ceog-quickstart>div{max-width:760px;min-width:0}.ceog-app .ceog-page__header h2,.ceog-app .ceog-quickstart h2{color:var(--ceog-text);font-size:19px;line-height:1.3;margin-top:4px}.ceog-app .ceog-page__header p,.ceog-app .ceog-quickstart p{color:var(--ceog-muted);margin-top:7px}.ceog-app .ceog-dashboard-sync-warning{align-items:center;background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);border-radius:6px;color:var(--ceog-warning);display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr) 40px;padding:10px 12px}.ceog-app .ceog-dashboard-sync-warning .ceog-icon-button{background:transparent;border-color:currentColor;color:currentColor}.ceog-app .ceog-dashboard-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.ceog-app .ceog-dashboard-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:320px;min-width:0;padding:22px}.ceog-app .ceog-dashboard-panel__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;min-height:40px;padding-bottom:16px}.ceog-app .ceog-dashboard-panel__header>div{align-items:center;color:var(--ceog-primary-dark);display:flex;gap:10px;min-width:0}.ceog-app .ceog-dashboard-panel__header h2{color:var(--ceog-text);font-size:16px;line-height:1.3;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-dashboard-panel__header>span{color:var(--ceog-text);font-size:18px;font-weight:700}.ceog-app .ceog-button--quiet{background:transparent;border-color:transparent;min-height:34px;padding:6px 10px;white-space:nowrap}.ceog-app .ceog-weekly-chart{align-items:end;display:grid;gap:10px;grid-template-columns:repeat(7,minmax(34px,1fr));height:220px;padding-top:20px}.ceog-app .ceog-weekly-chart__day{align-items:end;display:grid;gap:5px;grid-template-rows:20px 150px 20px;min-width:0;text-align:center}.ceog-app .ceog-weekly-chart__value{color:var(--ceog-muted);font-size:11px;font-variant-numeric:tabular-nums}.ceog-app .ceog-weekly-chart__track{align-items:flex-end;background:var(--ceog-surface-muted);border-radius:4px 4px 2px 2px;display:flex;height:150px;justify-content:center;overflow:hidden;position:relative;width:100%}.ceog-app .ceog-weekly-chart__track>span{background:var(--ceog-primary);border-radius:4px 4px 2px 2px;display:block;max-width:42px;min-height:0;transition:height .18s ease;width:100%}.ceog-app .ceog-weekly-chart__day strong{color:var(--ceog-muted);font-size:11px;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events{display:grid;list-style:none;margin:0;padding:0}.ceog-app .ceog-recent-events li{align-items:center;border-bottom:1px solid var(--ceog-border);display:grid;gap:10px;grid-template-columns:10px minmax(0,1fr) 32px;min-height:51px;padding:8px 0}.ceog-app .ceog-recent-events li:last-child{border-bottom:0}.ceog-app .ceog-recent-events li>div{display:grid;min-width:0}.ceog-app .ceog-recent-events strong{color:var(--ceog-text);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events small{color:var(--ceog-muted);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events a{align-items:center;border-radius:5px;color:var(--ceog-muted);display:inline-flex;height:32px;justify-content:center;width:32px}.ceog-app .ceog-recent-events a:focus-visible,.ceog-app .ceog-recent-events a:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-event-dot{background:var(--ceog-info);border-radius:50%;display:block;height:8px;width:8px}.ceog-app .ceog-event-dot--enforce{background:var(--ceog-danger)}.ceog-app .ceog-dashboard-empty{align-items:center;color:var(--ceog-muted);display:flex;gap:9px;justify-content:center;min-height:210px}.ceog-app .ceog-error,.ceog-app .ceog-warning{align-items:center;border-radius:6px;display:grid;gap:12px;padding:13px 15px}.ceog-app .ceog-warning{background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);color:var(--ceog-warning);grid-template-columns:20px minmax(0,1fr)}.ceog-app .ceog-error{background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.22);color:var(--ceog-danger);grid-template-columns:22px minmax(0,1fr) auto}.ceog-app .ceog-error p{color:var(--ceog-text);margin-top:2px}.ceog-app .ceog-page__header{align-items:flex-start;border-bottom:1px solid var(--ceog-border);display:flex;gap:20px;justify-content:space-between;padding-bottom:18px}.ceog-app .ceog-page__header>div{max-width:760px}.ceog-app .ceog-status{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:12px;font-weight:650;gap:6px;min-height:28px;padding:4px 9px;white-space:nowrap}.ceog-app .ceog-status--success{background:var(--ceog-success-soft);border-color:rgba(22,129,93,.22);color:var(--ceog-success)}.ceog-app .ceog-status--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-settings-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-settings-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:290px;min-width:0;padding:22px}.ceog-app .ceog-settings-panel--wide{grid-column:1/-1}.ceog-app .ceog-settings-panel__heading{color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr)}.ceog-app .ceog-settings-panel__heading h3{color:var(--ceog-text);font-size:16px;line-height:1.3}.ceog-app .ceog-settings-panel__heading p{color:var(--ceog-muted);font-size:13px;margin-top:5px}.ceog-app .ceog-switch-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:28px;padding:16px 0;position:relative}.ceog-app .ceog-switch-row>span:first-child{display:grid;gap:2px;min-width:0}.ceog-app .ceog-switch-row strong{color:var(--ceog-text)}.ceog-app .ceog-switch-row small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-switch-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-switch{background:var(--ceog-border-strong);border-radius:999px;flex:0 0 44px;height:24px;position:relative;transition:background-color .14s ease;width:44px}.ceog-app .ceog-switch:after{background:#fff;border-radius:50%;box-shadow:0 1px 2px rgba(0,0,0,.25);content:"";height:18px;right:3px;position:absolute;top:3px;transition:transform .14s ease;width:18px}.ceog-app .ceog-switch-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-switch-row input:checked+.ceog-switch:after{transform:translateX(-20px)}.ceog-app .ceog-switch-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:22px;padding:15px 0;position:relative}.ceog-app .ceog-toggle-row__copy{display:grid;gap:3px;min-width:0}.ceog-app .ceog-toggle-row__copy strong{color:var(--ceog-text)}.ceog-app .ceog-toggle-row__copy small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-toggle-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-toggle-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-toggle-row--warning input:checked+.ceog-switch{background:var(--ceog-warning)}.ceog-app .ceog-toggle-row--danger input:checked+.ceog-switch{background:var(--ceog-danger)}.ceog-app .ceog-toggle-row input:checked+.ceog-switch:after{transform:translateX(-20px)}.ceog-app .ceog-toggle-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row.is-disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-field{display:grid;gap:7px;margin-top:20px}.ceog-app .ceog-field>span{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-field input,.ceog-app .ceog-field select{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:40px;padding:7px 10px;width:100%}.ceog-app .ceog-field input:focus,.ceog-app .ceog-field select:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-field input:disabled,.ceog-app .ceog-field select:disabled{background:var(--ceog-surface-muted);color:var(--ceog-muted);cursor:not-allowed}.ceog-app .ceog-field-note{color:var(--ceog-muted);font-size:12px;margin-top:10px!important}.ceog-app .ceog-readonly-value{align-items:baseline;color:var(--ceog-muted);display:flex;gap:8px;margin-top:28px}.ceog-app .ceog-readonly-value strong{color:var(--ceog-text);font-size:32px;line-height:1}.ceog-app .ceog-environment-row{background:var(--ceog-border);border:1px solid var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px;overflow:hidden}.ceog-app .ceog-environment-row>div{background:var(--ceog-surface-muted);display:grid;gap:4px;padding:14px 16px}.ceog-app .ceog-environment-row span{color:var(--ceog-muted);font-size:11px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-environment-row strong{color:var(--ceog-text);font-size:13px}.ceog-app .ceog-advanced-setting{padding-top:22px}.ceog-app .ceog-advanced-setting+.ceog-advanced-setting{border-top:1px solid var(--ceog-border);margin-top:22px}.ceog-app .ceog-advanced-setting .ceog-toggle-row{margin-top:0}.ceog-app .ceog-risk{align-items:start;border:1px solid transparent;border-radius:6px;display:grid;font-size:12px;gap:10px;grid-template-columns:20px minmax(0,1fr);margin-top:12px;padding:12px 13px}.ceog-app .ceog-risk--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-risk--danger{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-acknowledgement{align-items:center;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:12px;font-weight:650;gap:8px;margin-top:12px}.ceog-app .ceog-acknowledgement input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-acknowledgement:has(input:disabled){cursor:not-allowed;opacity:.55}.ceog-app .ceog-save-bar{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:flex-end;padding:16px 0 2px}.ceog-app .ceog-log-filters{align-items:end;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:grid;gap:14px;grid-template-columns:minmax(210px,1.4fr) minmax(160px,.8fr) minmax(160px,.8fr) auto;padding:18px}.ceog-app .ceog-log-filters .ceog-field{margin-top:0}.ceog-app .ceog-log-filter-actions{align-items:center;display:flex;gap:8px}.ceog-app .ceog-correlation-filter{align-items:center;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;gap:9px;grid-template-columns:20px auto minmax(120px,1fr) 36px;padding:10px 12px}.ceog-app .ceog-correlation-filter span{font-weight:650}.ceog-app .ceog-correlation-filter code{color:var(--ceog-text);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-log-export-notice{align-items:center;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:flex;font-size:12px;font-weight:650;gap:9px;padding:11px 13px}.ceog-app .ceog-log-export-notice svg{flex:0 0 auto}.ceog-app .ceog-log-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);min-width:0;overflow:hidden}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-pagination{align-items:center;display:flex;gap:16px;justify-content:space-between;min-height:62px;padding:12px 16px}.ceog-app .ceog-log-actions{border-bottom:1px solid var(--ceog-border)}.ceog-app .ceog-log-actions>span,.ceog-app .ceog-log-pagination>span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{align-items:center;display:flex;gap:8px}.ceog-app .ceog-log-table-wrap{overflow-x:auto;overscroll-behavior-inline:contain;width:100%;-webkit-overflow-scrolling:touch}.ceog-app .ceog-log-table{border-collapse:collapse;border-spacing:0;min-width:1120px;table-layout:fixed;width:100%}.ceog-app .ceog-log-table td,.ceog-app .ceog-log-table th{border-bottom:1px solid var(--ceog-border);color:var(--ceog-text);font-size:12px;line-height:1.4;padding:11px 12px;text-align:right;vertical-align:top}.ceog-app .ceog-log-table th{background:var(--ceog-surface-muted);color:var(--ceog-muted);font-size:11px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-log-table tbody tr:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-log-table tbody tr:last-child td{border-bottom:0}.ceog-app .ceog-log-table td:nth-child(2),.ceog-app .ceog-log-table th:nth-child(2){width:142px}.ceog-app .ceog-log-table td:nth-child(3),.ceog-app .ceog-log-table th:nth-child(3){width:170px}.ceog-app .ceog-log-table td:nth-child(4),.ceog-app .ceog-log-table th:nth-child(4){width:90px}.ceog-app .ceog-log-table td:nth-child(5),.ceog-app .ceog-log-table th:nth-child(5){width:175px}.ceog-app .ceog-log-table td:nth-child(8),.ceog-app .ceog-log-table th:nth-child(8){width:78px}.ceog-app .ceog-log-table__select{text-align:center!important;width:42px}.ceog-app .ceog-log-table input[type=checkbox]{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-log-table__time{font-variant-numeric:tabular-nums;white-space:nowrap}.ceog-app .ceog-log-table__reason,.ceog-app .ceog-log-table__route{overflow-wrap:anywhere}.ceog-app .ceog-log-table a{align-items:center;color:var(--ceog-primary-dark);display:inline-flex;font-weight:650;gap:4px;text-decoration:none}.ceog-app .ceog-log-table a:hover{text-decoration:underline}.ceog-app .ceog-event-type,.ceog-app .ceog-mode-badge{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:11px;font-weight:650;max-width:100%;padding:3px 7px;width:max-content}.ceog-app .ceog-event-type{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-mode-badge--monitor{background:var(--ceog-info-soft);border-color:rgba(23,105,170,.22);color:var(--ceog-info)}.ceog-app .ceog-mode-badge--enforce{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-log-ip{align-items:center;display:flex;gap:6px}.ceog-app .ceog-log-ip code{color:var(--ceog-text);font-size:11px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-icon-button--small{height:28px;min-width:28px;width:28px}.ceog-app .ceog-icon-button:disabled{cursor:not-allowed;opacity:.5}.ceog-app .ceog-log-empty,.ceog-app .ceog-log-loading{align-items:center;color:var(--ceog-muted);display:flex;justify-content:center;min-height:310px;padding:36px;text-align:center}.ceog-app .ceog-log-loading{gap:10px}.ceog-app .ceog-log-loading svg{animation:ceog-spin .9s linear infinite}.ceog-app .ceog-log-empty{flex-direction:column}.ceog-app .ceog-log-empty svg{color:var(--ceog-primary-dark)}.ceog-app .ceog-log-empty h3{color:var(--ceog-text);font-size:16px;margin-top:12px}.ceog-app .ceog-log-empty p{margin-top:6px;max-width:560px}.ceog-app .ceog-log-pagination{border-top:1px solid var(--ceog-border)}@keyframes ceog-spin{to{transform:rotate(-1turn)}}.ceog-app .ceog-list-counts{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.ceog-app .ceog-list-precedence{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-list-precedence>div{display:grid;gap:2px}.ceog-app .ceog-list-precedence strong{color:var(--ceog-text)}.ceog-app .ceog-list-precedence span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-list-grid{align-items:start;display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-list-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);min-width:0;padding:22px}.ceog-app .ceog-list-panel--block{border-top-color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow{border-top-color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading{border-bottom:1px solid var(--ceog-border);color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);padding-bottom:18px}.ceog-app .ceog-list-panel--block .ceog-list-panel__heading{color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow .ceog-list-panel__heading{color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading h3{color:var(--ceog-text);font-size:17px;line-height:1.3}.ceog-app .ceog-list-panel__heading p{color:var(--ceog-muted);font-size:12px;margin-top:5px}.ceog-app .ceog-list-field{display:grid;gap:6px;margin-top:20px;min-width:0}.ceog-app .ceog-list-field>span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-list-field>small{color:var(--ceog-muted);font-size:11px;min-height:18px}.ceog-app .ceog-list-field textarea{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5;min-height:112px;padding:9px 10px;resize:vertical;width:100%}.ceog-app .ceog-list-field textarea:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-list-field textarea::placeholder{color:var(--ceog-muted);opacity:.72}.ceog-app .ceog-list-field-icon{position:relative}.ceog-app .ceog-list-field-icon>svg{color:var(--ceog-muted);position:absolute;left:0;top:21px;z-index:1}.ceog-app .ceog-list-field-icon .ceog-list-field>small,.ceog-app .ceog-list-field-icon .ceog-list-field>span{padding-left:24px}.ceog-app .ceog-list-compatibility{align-items:start;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;font-size:12px;gap:9px;grid-template-columns:19px minmax(0,1fr);margin-top:18px;padding:11px 12px}.ceog-app .ceog-choice-field{display:grid;gap:10px;margin-top:20px;min-width:0;position:relative}.ceog-app .ceog-choice-field__heading{align-items:start;display:grid;gap:8px;grid-template-columns:19px minmax(0,1fr)}.ceog-app .ceog-choice-field__heading>svg{color:var(--ceog-muted);margin-top:1px}.ceog-app .ceog-choice-field__heading>div{display:grid;gap:3px}.ceog-app .ceog-choice-field__heading span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-choice-field__heading small{color:var(--ceog-muted);font-size:11px}.ceog-app .ceog-choice-tokens{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.ceog-app .ceog-choice-token{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.2);border-radius:999px;color:var(--ceog-primary-dark);display:grid;font-size:11px;font-weight:650;gap:6px;grid-template-columns:auto auto 22px;max-width:100%;min-height:30px;padding:3px 9px 3px 3px}.ceog-app .ceog-choice-token code,.ceog-app .ceog-choice-token>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-token code{color:var(--ceog-muted);font-size:10px;font-weight:400}.ceog-app .ceog-choice-token button{align-items:center;background:transparent;border:0;border-radius:50%;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:22px;justify-content:center;padding:0;width:22px}.ceog-app .ceog-choice-token button:hover{background:var(--ceog-danger-soft);color:var(--ceog-danger)}.ceog-app .ceog-choice-search{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);display:grid;grid-template-columns:20px minmax(0,1fr) 34px;min-height:42px;padding-right:10px}.ceog-app .ceog-choice-menu{position:relative}.ceog-app .ceog-choice-search:focus-within{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus)}.ceog-app .ceog-choice-search input{background:transparent;border:0;box-shadow:none;color:var(--ceog-text);height:40px;min-width:0;padding:7px 8px;width:100%}.ceog-app .ceog-choice-search input:focus{box-shadow:none;outline:0}.ceog-app .ceog-choice-search button{align-items:center;background:transparent;border:0;border-right:1px solid var(--ceog-border);color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:40px;justify-content:center;padding:0;width:34px}.ceog-app .ceog-choice-search button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-choice-options{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;box-shadow:0 12px 28px rgba(24,33,43,.18);right:0;max-height:260px;overflow-y:auto;position:absolute;left:0;top:calc(100% + 4px);z-index:20}.ceog-app .ceog-choice-options>label{align-items:center;border-bottom:1px solid var(--ceog-border);cursor:pointer;display:grid;gap:9px;grid-template-columns:18px minmax(0,1fr) 18px;min-height:46px;padding:7px 10px}.ceog-app .ceog-choice-options>label:last-of-type{border-bottom:0}.ceog-app .ceog-choice-options>label.is-selected,.ceog-app .ceog-choice-options>label:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-choice-options input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-choice-options label>span{display:grid;gap:1px;min-width:0}.ceog-app .ceog-choice-options strong{color:var(--ceog-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options code{color:var(--ceog-muted);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options>p{color:var(--ceog-muted);font-size:12px;padding:14px;text-align:center}.ceog-app .ceog-choice-manual{display:grid;gap:8px;grid-template-columns:minmax(0,1fr) auto}.ceog-app .ceog-choice-manual input{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:38px;padding:7px 10px;width:100%}.ceog-app .ceog-choice-manual input:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-skeleton--store-api{min-height:150px}.ceog-app .ceog-emergency-banner{align-items:start;background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.3);border-radius:6px;color:var(--ceog-danger);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-emergency-banner>div{display:grid;gap:2px}.ceog-app .ceog-emergency-banner strong{color:var(--ceog-danger)}.ceog-app .ceog-emergency-banner span{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-store-api-panel{min-height:410px}.ceog-app .ceog-number-grid{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-breaker-header-status{align-items:center;display:flex;gap:8px}.ceog-app .ceog-breaker-grid{display:grid;gap:18px;grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-breaker-panel{border-top:3px solid #4f46e5;min-width:0}.ceog-app .ceog-breaker-panel--email{border-top-color:#0f8a62}.ceog-app .ceog-breaker-panel--global{border-top-color:#c56a0a}.ceog-app .ceog-breaker-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.ceog-app .ceog-breaker-title-row h3{margin:0}.ceog-app .ceog-badge--primary{background:#fff4d6;border-color:#efcf8f;color:#8b4b05}.ceog-app .ceog-breaker-live{align-items:center;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);display:flex;gap:9px;margin:0 0 2px;min-height:56px;padding:10px 12px}.ceog-app .ceog-breaker-live>div{display:grid;gap:2px;min-width:0}.ceog-app .ceog-breaker-live span,.ceog-app .ceog-breaker-live strong{font-size:13px;font-weight:700}.ceog-app .ceog-breaker-live small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-breaker-live>strong{margin-right:auto}.ceog-app .ceog-breaker-live--ready{background:#eaf8f2;border-color:#b7e1d1;color:#087b57}.ceog-app .ceog-breaker-live--warning{background:#fff7df;border-color:#efcf8f;color:#9a5707}.ceog-app .ceog-breaker-live--danger{background:#fff0ef;border-color:#f1b9b5;color:#b42318}.ceog-app .ceog-breaker-live--muted{color:var(--ceog-muted);display:grid;gap:2px}.ceog-app .ceog-breaker-fields{display:grid;gap:12px;grid-template-columns:1fr;padding:18px 0}.ceog-app .ceog-breaker-note{align-items:flex-start;background:#fff8e8;border:1px solid #edd7aa;color:#85510f;display:flex;gap:9px;margin-top:auto;padding:12px}.ceog-app .ceog-breaker-note svg{flex:0 0 auto;margin-top:1px}.ceog-app .ceog-breaker-note p{font-size:12px;line-height:1.5;margin:0}.ceog-app[data-theme=dark] .ceog-breaker-live--ready{background:#17372e;border-color:#28624f;color:#79dbb9}.ceog-app[data-theme=dark] .ceog-breaker-live--warning,.ceog-app[data-theme=dark] .ceog-breaker-note{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app[data-theme=dark] .ceog-breaker-live--danger{background:#432422;border-color:#74403c;color:#ff9c96}.ceog-app[data-theme=dark] .ceog-badge--primary{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app .ceog-limiter-status{background:var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:auto;overflow:hidden;padding-top:22px}.ceog-app .ceog-limiter-status>div{background:var(--ceog-surface-muted);display:grid;gap:3px;padding:13px 14px}.ceog-app .ceog-limiter-status span{color:var(--ceog-muted);font-size:10px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-limiter-status strong{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-batch-state{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);margin-top:24px;padding:15px}.ceog-app .ceog-batch-state>div{display:grid;gap:3px}.ceog-app .ceog-batch-state strong{color:var(--ceog-text)}.ceog-app .ceog-batch-state span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-store-api-facts{display:grid;gap:0;margin-top:18px}.ceog-app .ceog-store-api-facts>div{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:space-between;padding:11px 0}.ceog-app .ceog-store-api-facts>div:last-child{border-bottom:0}.ceog-app .ceog-store-api-facts dt{align-items:center;color:var(--ceog-muted);display:inline-flex;font-size:12px;gap:7px}.ceog-app .ceog-store-api-facts dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-store-api-advanced{min-height:0}.ceog-app .ceog-skeleton--list{min-height:760px}.ceog-app .ceog-settings-panel__footer{align-items:center;display:flex;gap:12px;justify-content:flex-end;margin-top:auto;padding-top:22px}.ceog-app .ceog-saved{align-items:center;color:var(--ceog-success);display:inline-flex;font-size:12px;font-weight:650;gap:5px}.ceog-app .ceog-settings-panel>.ceog-mode-control{margin-top:28px}.ceog-app .ceog-settings-meta{display:grid;gap:10px;margin-top:auto;padding-top:24px}.ceog-app .ceog-settings-meta>div{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;padding-top:10px}.ceog-app .ceog-settings-meta dt{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-settings-meta dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-empty{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);flex-direction:column;min-height:430px;padding:44px 28px;text-align:center}.ceog-app .ceog-empty,.ceog-app .ceog-empty__icon{align-items:center;display:flex;justify-content:center}.ceog-app .ceog-empty__icon{background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:8px;color:var(--ceog-primary-dark);height:56px;width:56px}.ceog-app .ceog-empty h2{color:var(--ceog-text);font-size:19px;margin-top:18px}.ceog-app .ceog-empty p{color:var(--ceog-muted);margin:8px auto 16px;max-width:560px}.ceog-app .ceog-skeleton{animation:ceog-pulse 1.2s ease-in-out infinite alternate;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:8px}.ceog-app .ceog-skeleton--hero{min-height:244px}.ceog-app .ceog-skeleton--stat{min-height:116px}@keyframes ceog-pulse{0%{opacity:.55}to{opacity:1}}@media (max-width:1100px){.ceog-app .ceog-breaker-grid{grid-template-columns:1fr}.ceog-app .ceog-hero{grid-template-columns:minmax(0,1fr) minmax(250px,.65fr)}.ceog-app .ceog-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-dashboard-grid,.ceog-app .ceog-settings-grid{grid-template-columns:1fr}.ceog-app .ceog-settings-panel--wide{grid-column:auto}.ceog-app .ceog-log-filters{grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-log-filter-actions{grid-column:1/-1}.ceog-app .ceog-list-grid{grid-template-columns:1fr}.ceog-app .ceog-skeleton--list{min-height:520px}}@media (max-width:900px){.ceog-app .ceog-shell{grid-template-columns:210px minmax(0,1fr)}.ceog-app .ceog-content{padding:20px}.ceog-app .ceog-hero{grid-template-columns:1fr}.ceog-app .ceog-hero__mode{border-right:0;border-top:1px solid hsla(0,0%,100%,.18)}}@media (max-width:782px){.ceog-app{margin:0;min-height:calc(100vh - 46px)}.ceog-app .ceog-shell{grid-template-columns:1fr;min-height:calc(100vh - 46px)}.ceog-app .ceog-sidebar{border-left:1px solid var(--ceog-border);bottom:0;box-shadow:-14px 0 34px rgba(0,0,0,.24);right:0;min-height:0;position:fixed;top:46px;transform:translateX(105%);transition:transform .22s ease,visibility .22s ease;visibility:hidden;width:min(300px,calc(100vw - 44px));z-index:99998}.ceog-app .ceog-sidebar.is-mobile-open{transform:translateX(0);visibility:visible}.ceog-app .ceog-sidebar__header{height:68px;min-height:68px;padding:0 18px 0 14px}.ceog-app .ceog-sidebar__logo{max-width:168px}.ceog-app .ceog-sidebar__nav{flex:1;flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:14px 12px;-webkit-overflow-scrolling:touch}.ceog-app .ceog-nav-item{display:grid;min-height:44px;min-width:0;width:100%}.ceog-app .ceog-sidebar__footer{display:flex;min-height:58px}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close{display:inline-flex}.ceog-app .ceog-sidebar-overlay{animation:ceog-overlay-in .18s ease both;background:rgba(10,13,18,.58);border:0;border-radius:0;bottom:0;cursor:default;display:block;height:auto;right:0;padding:0;position:fixed;left:0;top:46px;width:100%;z-index:99997}.ceog-app .ceog-topbar{padding:10px 16px}.ceog-app .ceog-topbar__leading{gap:10px}.ceog-app .ceog-user__name{display:none}.ceog-app .ceog-content{padding:16px}.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select,.ceog-app textarea{font-size:16px}.ceog-app .ceog-button,.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select{min-height:44px}.ceog-app .ceog-icon-button{height:40px;min-width:40px;width:40px}.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode{padding:24px}.ceog-app .ceog-hero h2{font-size:24px}.ceog-app .ceog-page__header,.ceog-app .ceog-quickstart{align-items:flex-start;flex-direction:column}.ceog-app .ceog-breaker-header-status,.ceog-app .ceog-page__header>*{max-width:100%}.ceog-app .ceog-list-counts{justify-content:flex-start}.ceog-app .ceog-log-filters{grid-template-columns:1fr}.ceog-app .ceog-log-filter-actions{grid-column:auto}}@keyframes ceog-overlay-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.ceog-app .ceog-sidebar,.ceog-app .ceog-sidebar-overlay{animation:none;transition:none}}@media (max-width:520px){.ceog-app .ceog-topbar__eyebrow{display:none}.ceog-app .ceog-topbar__title{font-size:17px}.ceog-app .ceog-stat-grid{grid-template-columns:1fr}.ceog-app .ceog-dashboard-panel{min-height:0;padding:18px}.ceog-app .ceog-dashboard-panel__header{align-items:flex-start}.ceog-app .ceog-weekly-chart{gap:5px;height:190px}.ceog-app .ceog-weekly-chart__day{grid-template-rows:20px 120px 20px}.ceog-app .ceog-weekly-chart__track{height:120px}.ceog-app .ceog-error{grid-template-columns:22px minmax(0,1fr)}.ceog-app .ceog-error .ceog-button{grid-column:1/-1}.ceog-app .ceog-empty,.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode,.ceog-app .ceog-settings-panel{padding:20px}.ceog-app .ceog-mode-control{max-width:none}.ceog-app .ceog-environment-row{grid-template-columns:1fr}.ceog-app .ceog-toggle-row{align-items:flex-start}.ceog-app .ceog-save-bar{align-items:stretch;flex-direction:column}.ceog-app .ceog-save-bar .ceog-button{width:100%}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-filter-actions,.ceog-app .ceog-log-pagination{align-items:stretch;flex-direction:column}.ceog-app .ceog-log-actions .ceog-button,.ceog-app .ceog-log-filter-actions .ceog-button,.ceog-app .ceog-log-pagination .ceog-button{flex:1;width:100%}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{width:100%}.ceog-app .ceog-log-actions>div{flex-wrap:wrap}.ceog-app .ceog-correlation-filter{grid-template-columns:20px minmax(0,1fr) 36px}.ceog-app .ceog-correlation-filter code{grid-column:2/3}.ceog-app .ceog-correlation-filter .ceog-icon-button{grid-column:3;grid-row:1/3}.ceog-app .ceog-choice-token{grid-template-columns:minmax(0,1fr) 22px}.ceog-app .ceog-choice-token code{display:none}.ceog-app .ceog-choice-manual,.ceog-app .ceog-limiter-status,.ceog-app .ceog-number-grid{grid-template-columns:1fr}}
  • coderembassy-order-vanguard/trunk/build/style-index.css

    r3701248 r3778434  
    1 .ceog-app,.ceog-app *{box-sizing:border-box;letter-spacing:0}.ceog-app .ceog-license-banner{align-items:center;background:#fff8e8;border:1px solid #e5bd76;border-radius:8px;box-shadow:0 5px 18px rgba(113,63,18,.08);color:#713f12;display:grid;gap:12px;grid-template-columns:auto minmax(0,1fr) auto auto;margin:16px 28px 0;padding:12px 14px}.ceog-app .ceog-license-banner.is-error{background:#fff1f0;border-color:#efaaa5;color:#8f1d16}.ceog-app .ceog-license-banner.is-locked{background:#f3f1ff;border-color:#b2aaf1;color:#33288f}.ceog-app .ceog-license-banner>svg{flex:0 0 auto}.ceog-app .ceog-license-banner__action,.ceog-app .ceog-license-banner__dismiss{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:inline-flex;justify-content:center}.ceog-app .ceog-license-banner__action{border:1px solid;border-radius:6px;font-weight:700;gap:7px;padding:7px 10px}.ceog-app .ceog-license-banner__dismiss{border-radius:6px;height:34px;padding:0;width:34px}.ceog-app .ceog-license-banner__dismiss:hover{background:rgba(15,23,42,.07)}.ceog-app .ceog-license-modal{align-items:center;backdrop-filter:blur(4px);background:rgba(15,23,42,.58);display:flex;inset:0;justify-content:center;padding:20px;position:fixed;z-index:100000}.ceog-app .ceog-license-modal__card{background:#fff;border-radius:18px;box-shadow:0 24px 64px rgba(15,23,42,.35);color:#17202b;padding:34px 30px 28px;position:relative;text-align:center;width:min(100%,480px)}.ceog-app .ceog-license-modal__close{align-items:center;background:transparent;border:0;border-radius:7px;color:#778497;cursor:pointer;display:inline-flex;height:34px;justify-content:center;padding:0;position:absolute;right:12px;top:12px;width:34px}.ceog-app .ceog-license-modal__icon{align-items:center;background:#fee2e2;border-radius:50%;color:#b42318;display:flex;height:64px;justify-content:center;margin:0 auto 18px;width:64px}.ceog-app .ceog-license-modal h2{font-size:22px;line-height:1.25;margin:0 0 10px}.ceog-app .ceog-license-modal p{color:#5f6b7a;line-height:1.6;margin:0 0 22px}.ceog-app .ceog-license-modal small{color:#778497;display:block;margin-top:16px}.ceog-app[data-theme=dark] .ceog-license-banner.is-warning{background:#302716;border-color:#765b2c;color:#f8d994}.ceog-app[data-theme=dark] .ceog-license-banner.is-error{background:#351d1b;border-color:#7b3935;color:#ffb4ad}.ceog-app[data-theme=dark] .ceog-license-banner.is-locked{background:#24203e;border-color:#5f56a9;color:#c8c2ff}@media (max-width:782px){.ceog-app .ceog-license-banner{grid-template-columns:auto minmax(0,1fr) auto;margin:12px 16px 0}.ceog-app .ceog-license-banner__action{grid-column:1/-1;width:100%}.ceog-app .ceog-license-banner__dismiss{grid-column:3;grid-row:1}.ceog-app .ceog-license-modal__card{padding:30px 20px 24px}}.ceog-app{--ceog-bg:#f4f6f8;--ceog-surface:#fff;--ceog-surface-muted:#eef1f4;--ceog-text:#18212b;--ceog-muted:#5b6673;--ceog-border:#dce1e6;--ceog-border-strong:#c5ccd4;--ceog-primary:#5146d8;--ceog-primary-dark:#3f36b6;--ceog-primary-soft:#eeecff;--ceog-success:#16815d;--ceog-success-soft:#e4f6ef;--ceog-warning:#a65c00;--ceog-warning-soft:#fff3d6;--ceog-danger:#b42318;--ceog-danger-soft:#feeceb;--ceog-info:#1769aa;--ceog-info-soft:#e7f2fb;--ceog-shadow:0 1px 2px rgba(24,33,43,.05);--ceog-focus:0 0 0 3px rgba(81,70,216,.25);background:var(--ceog-bg);color:var(--ceog-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;line-height:1.5;margin:-10px 0 0 -20px;min-height:calc(100vh - 32px)}.ceog-app[data-theme=dark]{--ceog-bg:#15171a;--ceog-surface:#202328;--ceog-surface-muted:#292d33;--ceog-text:#f0f2f4;--ceog-muted:#abb3bc;--ceog-border:#363b42;--ceog-border-strong:#4b525b;--ceog-primary:#8b82ff;--ceog-primary-dark:#a49eff;--ceog-primary-soft:rgba(139,130,255,.16);--ceog-success:#54d4a4;--ceog-success-soft:rgba(38,160,116,.18);--ceog-warning:#f2b95f;--ceog-warning-soft:rgba(210,136,24,.17);--ceog-danger:#ff8b82;--ceog-danger-soft:rgba(213,57,48,.18);--ceog-info:#77bff0;--ceog-info-soft:rgba(44,135,196,.17);--ceog-shadow:0 1px 2px rgba(0,0,0,.24)}.ceog-app button,.ceog-app input,.ceog-app select,.ceog-app textarea{font:inherit}.ceog-app button,.ceog-app dd,.ceog-app dl,.ceog-app h1,.ceog-app h2,.ceog-app h3,.ceog-app p{margin:0}.ceog-app .ceog-shell{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:calc(100vh - 32px)}.ceog-app .ceog-sidebar{background:var(--ceog-surface);border-right:1px solid var(--ceog-border);display:flex;flex-direction:column;min-width:0}.ceog-app .ceog-sidebar__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;height:68px;justify-content:space-between;min-height:68px;padding:0 20px}.ceog-app .ceog-sidebar__logo{display:block;height:auto;max-height:38px;max-width:172px;object-fit:contain;width:auto}.ceog-app .ceog-sidebar__brand{color:var(--ceog-text);font-size:16px;font-weight:700}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close,.ceog-app .ceog-sidebar-overlay{display:none}.ceog-app .ceog-sidebar__nav{display:flex;flex:1;flex-direction:column;gap:4px;padding:16px 12px}.ceog-app .ceog-nav-item{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr);min-height:40px;overflow:hidden;padding:8px 10px;text-align:left;transition:background-color .14s ease,border-color .14s ease,color .14s ease;width:100%}.ceog-app .ceog-nav-item span{min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-nav-item svg{flex:0 0 auto}.ceog-app .ceog-nav-item:hover{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-nav-item.is-active{background:var(--ceog-primary-soft);border-color:rgba(81,70,216,.16);color:var(--ceog-primary-dark);font-weight:650}.ceog-app .ceog-button:focus-visible,.ceog-app .ceog-icon-button:focus-visible,.ceog-app .ceog-mode-control button:focus-visible,.ceog-app .ceog-nav-item:focus-visible{box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-sidebar__footer{align-items:center;border-top:1px solid var(--ceog-border);color:var(--ceog-muted);display:flex;font-size:12px;gap:10px;justify-content:space-between;min-height:56px;padding:12px 16px}.ceog-app .ceog-main{background:var(--ceog-bg);min-width:0}.ceog-app .ceog-topbar{align-items:center;background:var(--ceog-surface);border-bottom:1px solid var(--ceog-border);display:flex;gap:24px;justify-content:space-between;min-height:68px;padding:10px 28px}.ceog-app .ceog-topbar__leading{align-items:center;display:flex;gap:12px;min-width:0}.ceog-app .ceog-topbar__leading>div{min-width:0}.ceog-app .ceog-section-kicker,.ceog-app .ceog-topbar__eyebrow{color:var(--ceog-primary-dark);font-size:11px;font-weight:700;line-height:1.3;text-transform:uppercase}.ceog-app .ceog-topbar__title{color:var(--ceog-text);font-size:19px;font-weight:700;line-height:1.25;margin-top:2px}.ceog-app .ceog-topbar__actions{align-items:center;display:flex;flex:0 0 auto;gap:10px}.ceog-app .ceog-icon-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:36px;justify-content:center;min-width:36px;padding:0;width:36px}.ceog-app .ceog-icon-button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-user{align-items:center;display:flex;gap:8px;min-width:0;padding-left:2px}.ceog-app .ceog-user__avatar,.ceog-app .ceog-user__initial{align-items:center;border-radius:50%;display:inline-flex;flex:0 0 30px;height:30px;justify-content:center;width:30px}.ceog-app .ceog-user__avatar{border:1px solid var(--ceog-border);object-fit:cover}.ceog-app .ceog-user__initial{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark);font-size:11px;font-weight:700}.ceog-app .ceog-user__name{color:var(--ceog-text);font-size:13px;font-weight:600;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-content{display:grid;gap:18px;margin:0 auto;max-width:1440px;padding:24px 28px 40px;width:100%}.ceog-app .ceog-dashboard,.ceog-app .ceog-loading,.ceog-app .ceog-page{display:grid;gap:18px;min-width:0}.ceog-app .ceog-hero{align-items:stretch;background:#5146d8;border-radius:8px;box-shadow:0 8px 20px rgba(59,48,174,.15);color:#fff;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr);min-height:244px;overflow:hidden}.ceog-app .ceog-hero__copy{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;min-width:0;padding:32px}.ceog-app .ceog-hero__badges{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}.ceog-app .ceog-hero__status{align-items:center;display:inline-flex;font-size:12px;font-weight:650;gap:6px}.ceog-app .ceog-hero h2{color:#fff;font-size:28px;font-weight:760;line-height:1.2;max-width:720px;overflow-wrap:anywhere}.ceog-app .ceog-hero__copy>p{color:hsla(0,0%,100%,.86);font-size:15px;margin-top:10px;max-width:650px}.ceog-app .ceog-hero__copy .ceog-button{margin-top:22px}.ceog-app .ceog-hero__mode{align-items:flex-start;background:rgba(25,20,101,.24);border-left:1px solid hsla(0,0%,100%,.18);display:flex;flex-direction:column;justify-content:center;min-width:0;padding:28px}.ceog-app .ceog-hero__mode>span{color:hsla(0,0%,100%,.72);font-size:12px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-hero__mode>strong{color:#fff;font-size:24px;line-height:1.2;margin:4px 0 16px}.ceog-app .ceog-badge{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:999px;color:var(--ceog-primary-dark);display:inline-flex;font-size:11px;font-weight:700;line-height:1.3;max-width:100%;padding:3px 8px;text-transform:uppercase;width:max-content}.ceog-app .ceog-badge--light{background:#fff;border-color:hsla(0,0%,100%,.5);color:#362e96}.ceog-app .ceog-badge--free{background:var(--ceog-success-soft);border-color:rgba(22,129,93,.18);color:var(--ceog-success)}.ceog-app .ceog-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:8px;justify-content:center;min-height:38px;padding:8px 14px;transition:background-color .14s ease,border-color .14s ease,color .14s ease}.ceog-app .ceog-button:hover{background:var(--ceog-primary-soft);border-color:var(--ceog-primary);color:var(--ceog-primary-dark)}.ceog-app .ceog-button:disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-button--primary{background:var(--ceog-primary);border-color:var(--ceog-primary);color:#fff}.ceog-app .ceog-button--primary:hover{background:var(--ceog-primary-dark);border-color:var(--ceog-primary-dark);color:#fff}.ceog-app .ceog-button--danger{background:var(--ceog-surface);border-color:rgba(180,35,24,.38);color:var(--ceog-danger)}.ceog-app .ceog-button--danger:hover{background:var(--ceog-danger);border-color:var(--ceog-danger);color:#fff}.ceog-app .ceog-button--hero{background:#fff;border-color:#fff;color:#332b88}.ceog-app .ceog-button--hero:hover{background:#f3f1ff;border-color:#f3f1ff;color:#241d70}.ceog-app .ceog-mode-control{background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:7px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:310px;padding:4px;width:100%}.ceog-app .ceog-mode-control button{align-items:center;background:transparent;border:1px solid transparent;border-radius:5px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:7px;justify-content:center;min-height:38px;min-width:0;overflow:hidden;padding:7px 10px}.ceog-app .ceog-mode-control button:hover{color:var(--ceog-text)}.ceog-app .ceog-mode-control button.is-active{background:var(--ceog-surface);border-color:var(--ceog-border);box-shadow:var(--ceog-shadow);color:var(--ceog-primary-dark)}.ceog-app .ceog-hero .ceog-mode-control{background:hsla(0,0%,100%,.12);border-color:hsla(0,0%,100%,.2)}.ceog-app .ceog-hero .ceog-mode-control button{color:hsla(0,0%,100%,.78)}.ceog-app .ceog-hero .ceog-mode-control button.is-active{background:#fff;border-color:#fff;color:#30287d}.ceog-app .ceog-stat-grid{display:grid;gap:14px;grid-template-columns:repeat(4,minmax(0,1fr))}.ceog-app .ceog-stat{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);column-gap:10px;display:grid;grid-template-columns:28px minmax(0,1fr);grid-template-rows:auto auto;min-height:116px;min-width:0;padding:18px}.ceog-app .ceog-stat>svg{align-self:start;grid-row:1/3;margin-top:3px}.ceog-app .ceog-stat strong{color:var(--ceog-text);font-size:22px;line-height:1.2;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat span{color:var(--ceog-muted);font-size:12px;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat--green{border-top-color:var(--ceog-success);color:var(--ceog-success)}.ceog-app .ceog-stat--amber{border-top-color:var(--ceog-warning);color:var(--ceog-warning)}.ceog-app .ceog-stat--purple{border-top-color:var(--ceog-primary);color:var(--ceog-primary)}.ceog-app .ceog-stat--blue{border-top-color:var(--ceog-info);color:var(--ceog-info)}.ceog-app .ceog-stat--danger{border-top-color:var(--ceog-danger);color:var(--ceog-danger)}.ceog-app .ceog-quickstart{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-left:4px solid var(--ceog-success);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;gap:24px;justify-content:space-between;padding:22px 24px}.ceog-app .ceog-quickstart>div{max-width:760px;min-width:0}.ceog-app .ceog-page__header h2,.ceog-app .ceog-quickstart h2{color:var(--ceog-text);font-size:19px;line-height:1.3;margin-top:4px}.ceog-app .ceog-page__header p,.ceog-app .ceog-quickstart p{color:var(--ceog-muted);margin-top:7px}.ceog-app .ceog-dashboard-sync-warning{align-items:center;background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);border-radius:6px;color:var(--ceog-warning);display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr) 40px;padding:10px 12px}.ceog-app .ceog-dashboard-sync-warning .ceog-icon-button{background:transparent;border-color:currentColor;color:currentColor}.ceog-app .ceog-dashboard-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.ceog-app .ceog-dashboard-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:320px;min-width:0;padding:22px}.ceog-app .ceog-dashboard-panel__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;min-height:40px;padding-bottom:16px}.ceog-app .ceog-dashboard-panel__header>div{align-items:center;color:var(--ceog-primary-dark);display:flex;gap:10px;min-width:0}.ceog-app .ceog-dashboard-panel__header h2{color:var(--ceog-text);font-size:16px;line-height:1.3;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-dashboard-panel__header>span{color:var(--ceog-text);font-size:18px;font-weight:700}.ceog-app .ceog-button--quiet{background:transparent;border-color:transparent;min-height:34px;padding:6px 10px;white-space:nowrap}.ceog-app .ceog-weekly-chart{align-items:end;display:grid;gap:10px;grid-template-columns:repeat(7,minmax(34px,1fr));height:220px;padding-top:20px}.ceog-app .ceog-weekly-chart__day{align-items:end;display:grid;gap:5px;grid-template-rows:20px 150px 20px;min-width:0;text-align:center}.ceog-app .ceog-weekly-chart__value{color:var(--ceog-muted);font-size:11px;font-variant-numeric:tabular-nums}.ceog-app .ceog-weekly-chart__track{align-items:flex-end;background:var(--ceog-surface-muted);border-radius:4px 4px 2px 2px;display:flex;height:150px;justify-content:center;overflow:hidden;position:relative;width:100%}.ceog-app .ceog-weekly-chart__track>span{background:var(--ceog-primary);border-radius:4px 4px 2px 2px;display:block;max-width:42px;min-height:0;transition:height .18s ease;width:100%}.ceog-app .ceog-weekly-chart__day strong{color:var(--ceog-muted);font-size:11px;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events{display:grid;list-style:none;margin:0;padding:0}.ceog-app .ceog-recent-events li{align-items:center;border-bottom:1px solid var(--ceog-border);display:grid;gap:10px;grid-template-columns:10px minmax(0,1fr) 32px;min-height:51px;padding:8px 0}.ceog-app .ceog-recent-events li:last-child{border-bottom:0}.ceog-app .ceog-recent-events li>div{display:grid;min-width:0}.ceog-app .ceog-recent-events strong{color:var(--ceog-text);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events small{color:var(--ceog-muted);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events a{align-items:center;border-radius:5px;color:var(--ceog-muted);display:inline-flex;height:32px;justify-content:center;width:32px}.ceog-app .ceog-recent-events a:focus-visible,.ceog-app .ceog-recent-events a:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-event-dot{background:var(--ceog-info);border-radius:50%;display:block;height:8px;width:8px}.ceog-app .ceog-event-dot--enforce{background:var(--ceog-danger)}.ceog-app .ceog-dashboard-empty{align-items:center;color:var(--ceog-muted);display:flex;gap:9px;justify-content:center;min-height:210px}.ceog-app .ceog-pro-context{align-items:start;background:var(--ceog-surface);border:1px solid var(--ceog-primary);border-left-width:4px;border-radius:8px;box-shadow:var(--ceog-shadow);display:grid;gap:18px;grid-template-columns:minmax(0,1fr) 40px;padding:20px 22px}.ceog-app .ceog-pro-context>div{display:grid;gap:6px;min-width:0}.ceog-app .ceog-pro-context h2{color:var(--ceog-text);font-size:16px;line-height:1.3}.ceog-app .ceog-pro-context p{color:var(--ceog-muted)}.ceog-app .ceog-error,.ceog-app .ceog-warning{align-items:center;border-radius:6px;display:grid;gap:12px;padding:13px 15px}.ceog-app .ceog-warning{background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);color:var(--ceog-warning);grid-template-columns:20px minmax(0,1fr)}.ceog-app .ceog-error{background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.22);color:var(--ceog-danger);grid-template-columns:22px minmax(0,1fr) auto}.ceog-app .ceog-error p{color:var(--ceog-text);margin-top:2px}.ceog-app .ceog-page__header{align-items:flex-start;border-bottom:1px solid var(--ceog-border);display:flex;gap:20px;justify-content:space-between;padding-bottom:18px}.ceog-app .ceog-page__header>div{max-width:760px}.ceog-app .ceog-status{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:12px;font-weight:650;gap:6px;min-height:28px;padding:4px 9px;white-space:nowrap}.ceog-app .ceog-status--success{background:var(--ceog-success-soft);border-color:rgba(22,129,93,.22);color:var(--ceog-success)}.ceog-app .ceog-status--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-settings-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-settings-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:290px;min-width:0;padding:22px}.ceog-app .ceog-settings-panel--wide{grid-column:1/-1}.ceog-app .ceog-settings-panel__heading{color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr)}.ceog-app .ceog-settings-panel__heading h3{color:var(--ceog-text);font-size:16px;line-height:1.3}.ceog-app .ceog-settings-panel__heading p{color:var(--ceog-muted);font-size:13px;margin-top:5px}.ceog-app .ceog-switch-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:28px;padding:16px 0;position:relative}.ceog-app .ceog-switch-row>span:first-child{display:grid;gap:2px;min-width:0}.ceog-app .ceog-switch-row strong{color:var(--ceog-text)}.ceog-app .ceog-switch-row small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-switch-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-switch{background:var(--ceog-border-strong);border-radius:999px;flex:0 0 44px;height:24px;position:relative;transition:background-color .14s ease;width:44px}.ceog-app .ceog-switch:after{background:#fff;border-radius:50%;box-shadow:0 1px 2px rgba(0,0,0,.25);content:"";height:18px;left:3px;position:absolute;top:3px;transition:transform .14s ease;width:18px}.ceog-app .ceog-switch-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-switch-row input:checked+.ceog-switch:after{transform:translateX(20px)}.ceog-app .ceog-switch-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:22px;padding:15px 0;position:relative}.ceog-app .ceog-toggle-row__copy{display:grid;gap:3px;min-width:0}.ceog-app .ceog-toggle-row__copy strong{color:var(--ceog-text)}.ceog-app .ceog-toggle-row__copy small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-toggle-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-toggle-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-toggle-row--warning input:checked+.ceog-switch{background:var(--ceog-warning)}.ceog-app .ceog-toggle-row--danger input:checked+.ceog-switch{background:var(--ceog-danger)}.ceog-app .ceog-toggle-row input:checked+.ceog-switch:after{transform:translateX(20px)}.ceog-app .ceog-toggle-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row.is-disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-field{display:grid;gap:7px;margin-top:20px}.ceog-app .ceog-field>span{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-field input,.ceog-app .ceog-field select{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:40px;padding:7px 10px;width:100%}.ceog-app .ceog-field input:focus,.ceog-app .ceog-field select:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-field input:disabled,.ceog-app .ceog-field select:disabled{background:var(--ceog-surface-muted);color:var(--ceog-muted);cursor:not-allowed}.ceog-app .ceog-field-note{color:var(--ceog-muted);font-size:12px;margin-top:10px!important}.ceog-app .ceog-readonly-value{align-items:baseline;color:var(--ceog-muted);display:flex;gap:8px;margin-top:28px}.ceog-app .ceog-readonly-value strong{color:var(--ceog-text);font-size:32px;line-height:1}.ceog-app .ceog-environment-row{background:var(--ceog-border);border:1px solid var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px;overflow:hidden}.ceog-app .ceog-environment-row>div{background:var(--ceog-surface-muted);display:grid;gap:4px;padding:14px 16px}.ceog-app .ceog-environment-row span{color:var(--ceog-muted);font-size:11px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-environment-row strong{color:var(--ceog-text);font-size:13px}.ceog-app .ceog-advanced-setting{padding-top:22px}.ceog-app .ceog-advanced-setting+.ceog-advanced-setting{border-top:1px solid var(--ceog-border);margin-top:22px}.ceog-app .ceog-advanced-setting .ceog-toggle-row{margin-top:0}.ceog-app .ceog-risk{align-items:start;border:1px solid transparent;border-radius:6px;display:grid;font-size:12px;gap:10px;grid-template-columns:20px minmax(0,1fr);margin-top:12px;padding:12px 13px}.ceog-app .ceog-risk--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-risk--danger{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-acknowledgement{align-items:center;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:12px;font-weight:650;gap:8px;margin-top:12px}.ceog-app .ceog-acknowledgement input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-acknowledgement:has(input:disabled){cursor:not-allowed;opacity:.55}.ceog-app .ceog-save-bar{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:flex-end;padding:16px 0 2px}.ceog-app .ceog-log-filters{align-items:end;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:grid;gap:14px;grid-template-columns:minmax(210px,1.4fr) minmax(160px,.8fr) minmax(160px,.8fr) auto;padding:18px}.ceog-app .ceog-log-filters .ceog-field{margin-top:0}.ceog-app .ceog-log-filter-actions{align-items:center;display:flex;gap:8px}.ceog-app .ceog-correlation-filter{align-items:center;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;gap:9px;grid-template-columns:20px auto minmax(120px,1fr) 36px;padding:10px 12px}.ceog-app .ceog-correlation-filter span{font-weight:650}.ceog-app .ceog-correlation-filter code{color:var(--ceog-text);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-log-export-notice{align-items:center;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:flex;font-size:12px;font-weight:650;gap:9px;padding:11px 13px}.ceog-app .ceog-log-export-notice svg{flex:0 0 auto}.ceog-app .ceog-log-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);min-width:0;overflow:hidden}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-pagination{align-items:center;display:flex;gap:16px;justify-content:space-between;min-height:62px;padding:12px 16px}.ceog-app .ceog-log-actions{border-bottom:1px solid var(--ceog-border)}.ceog-app .ceog-log-actions>span,.ceog-app .ceog-log-pagination>span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{align-items:center;display:flex;gap:8px}.ceog-app .ceog-log-table-wrap{overflow-x:auto;overscroll-behavior-inline:contain;width:100%;-webkit-overflow-scrolling:touch}.ceog-app .ceog-log-table{border-collapse:collapse;border-spacing:0;min-width:1120px;table-layout:fixed;width:100%}.ceog-app .ceog-log-table td,.ceog-app .ceog-log-table th{border-bottom:1px solid var(--ceog-border);color:var(--ceog-text);font-size:12px;line-height:1.4;padding:11px 12px;text-align:left;vertical-align:top}.ceog-app .ceog-log-table th{background:var(--ceog-surface-muted);color:var(--ceog-muted);font-size:11px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-log-table tbody tr:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-log-table tbody tr:last-child td{border-bottom:0}.ceog-app .ceog-log-table td:nth-child(2),.ceog-app .ceog-log-table th:nth-child(2){width:142px}.ceog-app .ceog-log-table td:nth-child(3),.ceog-app .ceog-log-table th:nth-child(3){width:170px}.ceog-app .ceog-log-table td:nth-child(4),.ceog-app .ceog-log-table th:nth-child(4){width:90px}.ceog-app .ceog-log-table td:nth-child(5),.ceog-app .ceog-log-table th:nth-child(5){width:175px}.ceog-app .ceog-log-table td:nth-child(8),.ceog-app .ceog-log-table th:nth-child(8){width:78px}.ceog-app .ceog-log-table__select{text-align:center!important;width:42px}.ceog-app .ceog-log-table input[type=checkbox]{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-log-table__time{font-variant-numeric:tabular-nums;white-space:nowrap}.ceog-app .ceog-log-table__reason,.ceog-app .ceog-log-table__route{overflow-wrap:anywhere}.ceog-app .ceog-log-table a{align-items:center;color:var(--ceog-primary-dark);display:inline-flex;font-weight:650;gap:4px;text-decoration:none}.ceog-app .ceog-log-table a:hover{text-decoration:underline}.ceog-app .ceog-event-type,.ceog-app .ceog-mode-badge{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:11px;font-weight:650;max-width:100%;padding:3px 7px;width:max-content}.ceog-app .ceog-event-type{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-mode-badge--monitor{background:var(--ceog-info-soft);border-color:rgba(23,105,170,.22);color:var(--ceog-info)}.ceog-app .ceog-mode-badge--enforce{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-log-ip{align-items:center;display:flex;gap:6px}.ceog-app .ceog-log-ip code{color:var(--ceog-text);font-size:11px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-icon-button--small{height:28px;min-width:28px;width:28px}.ceog-app .ceog-icon-button:disabled{cursor:not-allowed;opacity:.5}.ceog-app .ceog-log-empty,.ceog-app .ceog-log-loading{align-items:center;color:var(--ceog-muted);display:flex;justify-content:center;min-height:310px;padding:36px;text-align:center}.ceog-app .ceog-log-loading{gap:10px}.ceog-app .ceog-log-loading svg{animation:ceog-spin .9s linear infinite}.ceog-app .ceog-log-empty{flex-direction:column}.ceog-app .ceog-log-empty svg{color:var(--ceog-primary-dark)}.ceog-app .ceog-log-empty h3{color:var(--ceog-text);font-size:16px;margin-top:12px}.ceog-app .ceog-log-empty p{margin-top:6px;max-width:560px}.ceog-app .ceog-log-pagination{border-top:1px solid var(--ceog-border)}@keyframes ceog-spin{to{transform:rotate(1turn)}}.ceog-app .ceog-list-counts{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.ceog-app .ceog-list-precedence{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-list-precedence>div{display:grid;gap:2px}.ceog-app .ceog-list-precedence strong{color:var(--ceog-text)}.ceog-app .ceog-list-precedence span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-list-grid{align-items:start;display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-list-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);min-width:0;padding:22px}.ceog-app .ceog-list-panel--block{border-top-color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow{border-top-color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading{border-bottom:1px solid var(--ceog-border);color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);padding-bottom:18px}.ceog-app .ceog-list-panel--block .ceog-list-panel__heading{color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow .ceog-list-panel__heading{color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading h3{color:var(--ceog-text);font-size:17px;line-height:1.3}.ceog-app .ceog-list-panel__heading p{color:var(--ceog-muted);font-size:12px;margin-top:5px}.ceog-app .ceog-list-field{display:grid;gap:6px;margin-top:20px;min-width:0}.ceog-app .ceog-list-field>span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-list-field>small{color:var(--ceog-muted);font-size:11px;min-height:18px}.ceog-app .ceog-list-field textarea{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5;min-height:112px;padding:9px 10px;resize:vertical;width:100%}.ceog-app .ceog-list-field textarea:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-list-field textarea::placeholder{color:var(--ceog-muted);opacity:.72}.ceog-app .ceog-list-field-icon{position:relative}.ceog-app .ceog-list-field-icon>svg{color:var(--ceog-muted);position:absolute;right:0;top:21px;z-index:1}.ceog-app .ceog-list-field-icon .ceog-list-field>small,.ceog-app .ceog-list-field-icon .ceog-list-field>span{padding-right:24px}.ceog-app .ceog-list-compatibility{align-items:start;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;font-size:12px;gap:9px;grid-template-columns:19px minmax(0,1fr);margin-top:18px;padding:11px 12px}.ceog-app .ceog-choice-field{display:grid;gap:10px;margin-top:20px;min-width:0;position:relative}.ceog-app .ceog-choice-field__heading{align-items:start;display:grid;gap:8px;grid-template-columns:19px minmax(0,1fr)}.ceog-app .ceog-choice-field__heading>svg{color:var(--ceog-muted);margin-top:1px}.ceog-app .ceog-choice-field__heading>div{display:grid;gap:3px}.ceog-app .ceog-choice-field__heading span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-choice-field__heading small{color:var(--ceog-muted);font-size:11px}.ceog-app .ceog-choice-tokens{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.ceog-app .ceog-choice-token{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.2);border-radius:999px;color:var(--ceog-primary-dark);display:grid;font-size:11px;font-weight:650;gap:6px;grid-template-columns:auto auto 22px;max-width:100%;min-height:30px;padding:3px 3px 3px 9px}.ceog-app .ceog-choice-token code,.ceog-app .ceog-choice-token>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-token code{color:var(--ceog-muted);font-size:10px;font-weight:400}.ceog-app .ceog-choice-token button{align-items:center;background:transparent;border:0;border-radius:50%;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:22px;justify-content:center;padding:0;width:22px}.ceog-app .ceog-choice-token button:hover{background:var(--ceog-danger-soft);color:var(--ceog-danger)}.ceog-app .ceog-choice-search{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);display:grid;grid-template-columns:20px minmax(0,1fr) 34px;min-height:42px;padding-left:10px}.ceog-app .ceog-choice-menu{position:relative}.ceog-app .ceog-choice-search:focus-within{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus)}.ceog-app .ceog-choice-search input{background:transparent;border:0;box-shadow:none;color:var(--ceog-text);height:40px;min-width:0;padding:7px 8px;width:100%}.ceog-app .ceog-choice-search input:focus{box-shadow:none;outline:0}.ceog-app .ceog-choice-search button{align-items:center;background:transparent;border:0;border-left:1px solid var(--ceog-border);color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:40px;justify-content:center;padding:0;width:34px}.ceog-app .ceog-choice-search button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-choice-options{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;box-shadow:0 12px 28px rgba(24,33,43,.18);left:0;max-height:260px;overflow-y:auto;position:absolute;right:0;top:calc(100% + 4px);z-index:20}.ceog-app .ceog-choice-options>label{align-items:center;border-bottom:1px solid var(--ceog-border);cursor:pointer;display:grid;gap:9px;grid-template-columns:18px minmax(0,1fr) 18px;min-height:46px;padding:7px 10px}.ceog-app .ceog-choice-options>label:last-of-type{border-bottom:0}.ceog-app .ceog-choice-options>label.is-selected,.ceog-app .ceog-choice-options>label:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-choice-options input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-choice-options label>span{display:grid;gap:1px;min-width:0}.ceog-app .ceog-choice-options strong{color:var(--ceog-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options code{color:var(--ceog-muted);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options>p{color:var(--ceog-muted);font-size:12px;padding:14px;text-align:center}.ceog-app .ceog-choice-manual{display:grid;gap:8px;grid-template-columns:minmax(0,1fr) auto}.ceog-app .ceog-choice-manual input{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:38px;padding:7px 10px;width:100%}.ceog-app .ceog-choice-manual input:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-skeleton--store-api{min-height:150px}.ceog-app .ceog-emergency-banner{align-items:start;background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.3);border-radius:6px;color:var(--ceog-danger);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-emergency-banner>div{display:grid;gap:2px}.ceog-app .ceog-emergency-banner strong{color:var(--ceog-danger)}.ceog-app .ceog-emergency-banner span{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-store-api-panel{min-height:410px}.ceog-app .ceog-number-grid{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-breaker-header-status{align-items:center;display:flex;gap:8px}.ceog-app .ceog-breaker-grid{display:grid;gap:18px;grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-breaker-panel{border-top:3px solid #4f46e5;min-width:0}.ceog-app .ceog-breaker-panel--email{border-top-color:#0f8a62}.ceog-app .ceog-breaker-panel--global{border-top-color:#c56a0a}.ceog-app .ceog-breaker-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.ceog-app .ceog-breaker-title-row h3{margin:0}.ceog-app .ceog-badge--primary{background:#fff4d6;border-color:#efcf8f;color:#8b4b05}.ceog-app .ceog-breaker-live{align-items:center;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);display:flex;gap:9px;margin:0 0 2px;min-height:56px;padding:10px 12px}.ceog-app .ceog-breaker-live>div{display:grid;gap:2px;min-width:0}.ceog-app .ceog-breaker-live span,.ceog-app .ceog-breaker-live strong{font-size:13px;font-weight:700}.ceog-app .ceog-breaker-live small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-breaker-live>strong{margin-left:auto}.ceog-app .ceog-breaker-live--ready{background:#eaf8f2;border-color:#b7e1d1;color:#087b57}.ceog-app .ceog-breaker-live--warning{background:#fff7df;border-color:#efcf8f;color:#9a5707}.ceog-app .ceog-breaker-live--danger{background:#fff0ef;border-color:#f1b9b5;color:#b42318}.ceog-app .ceog-breaker-live--muted{color:var(--ceog-muted);display:grid;gap:2px}.ceog-app .ceog-breaker-fields{display:grid;gap:12px;grid-template-columns:1fr;padding:18px 0}.ceog-app .ceog-breaker-note{align-items:flex-start;background:#fff8e8;border:1px solid #edd7aa;color:#85510f;display:flex;gap:9px;margin-top:auto;padding:12px}.ceog-app .ceog-breaker-note svg{flex:0 0 auto;margin-top:1px}.ceog-app .ceog-breaker-note p{font-size:12px;line-height:1.5;margin:0}.ceog-app[data-theme=dark] .ceog-breaker-live--ready{background:#17372e;border-color:#28624f;color:#79dbb9}.ceog-app[data-theme=dark] .ceog-breaker-live--warning,.ceog-app[data-theme=dark] .ceog-breaker-note{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app[data-theme=dark] .ceog-breaker-live--danger{background:#432422;border-color:#74403c;color:#ff9c96}.ceog-app[data-theme=dark] .ceog-badge--primary{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app .ceog-limiter-status{background:var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:auto;overflow:hidden;padding-top:22px}.ceog-app .ceog-limiter-status>div{background:var(--ceog-surface-muted);display:grid;gap:3px;padding:13px 14px}.ceog-app .ceog-limiter-status span{color:var(--ceog-muted);font-size:10px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-limiter-status strong{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-batch-state{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);margin-top:24px;padding:15px}.ceog-app .ceog-batch-state>div{display:grid;gap:3px}.ceog-app .ceog-batch-state strong{color:var(--ceog-text)}.ceog-app .ceog-batch-state span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-store-api-facts{display:grid;gap:0;margin-top:18px}.ceog-app .ceog-store-api-facts>div{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:space-between;padding:11px 0}.ceog-app .ceog-store-api-facts>div:last-child{border-bottom:0}.ceog-app .ceog-store-api-facts dt{align-items:center;color:var(--ceog-muted);display:inline-flex;font-size:12px;gap:7px}.ceog-app .ceog-store-api-facts dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-store-api-advanced{min-height:0}.ceog-app .ceog-skeleton--list{min-height:760px}.ceog-app .ceog-settings-panel__footer{align-items:center;display:flex;gap:12px;justify-content:flex-end;margin-top:auto;padding-top:22px}.ceog-app .ceog-saved{align-items:center;color:var(--ceog-success);display:inline-flex;font-size:12px;font-weight:650;gap:5px}.ceog-app .ceog-settings-panel>.ceog-mode-control{margin-top:28px}.ceog-app .ceog-settings-meta{display:grid;gap:10px;margin-top:auto;padding-top:24px}.ceog-app .ceog-settings-meta>div{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;padding-top:10px}.ceog-app .ceog-settings-meta dt{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-settings-meta dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-empty{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);flex-direction:column;min-height:430px;padding:44px 28px;text-align:center}.ceog-app .ceog-empty,.ceog-app .ceog-empty__icon{align-items:center;display:flex;justify-content:center}.ceog-app .ceog-empty__icon{background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:8px;color:var(--ceog-primary-dark);height:56px;width:56px}.ceog-app .ceog-empty h2{color:var(--ceog-text);font-size:19px;margin-top:18px}.ceog-app .ceog-empty p{color:var(--ceog-muted);margin:8px auto 16px;max-width:560px}.ceog-app .ceog-skeleton{animation:ceog-pulse 1.2s ease-in-out infinite alternate;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:8px}.ceog-app .ceog-skeleton--hero{min-height:244px}.ceog-app .ceog-skeleton--stat{min-height:116px}@keyframes ceog-pulse{0%{opacity:.55}to{opacity:1}}@media (max-width:1100px){.ceog-app .ceog-breaker-grid{grid-template-columns:1fr}.ceog-app .ceog-hero{grid-template-columns:minmax(0,1fr) minmax(250px,.65fr)}.ceog-app .ceog-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-dashboard-grid,.ceog-app .ceog-settings-grid{grid-template-columns:1fr}.ceog-app .ceog-settings-panel--wide{grid-column:auto}.ceog-app .ceog-log-filters{grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-log-filter-actions{grid-column:1/-1}.ceog-app .ceog-list-grid{grid-template-columns:1fr}.ceog-app .ceog-skeleton--list{min-height:520px}}@media (max-width:900px){.ceog-app .ceog-shell{grid-template-columns:210px minmax(0,1fr)}.ceog-app .ceog-content{padding:20px}.ceog-app .ceog-hero{grid-template-columns:1fr}.ceog-app .ceog-hero__mode{border-left:0;border-top:1px solid hsla(0,0%,100%,.18)}}@media (max-width:782px){.ceog-app{margin:0;min-height:calc(100vh - 46px)}.ceog-app .ceog-shell{grid-template-columns:1fr;min-height:calc(100vh - 46px)}.ceog-app .ceog-sidebar{border-right:1px solid var(--ceog-border);bottom:0;box-shadow:14px 0 34px rgba(0,0,0,.24);left:0;min-height:0;position:fixed;top:46px;transform:translateX(-105%);transition:transform .22s ease,visibility .22s ease;visibility:hidden;width:min(300px,calc(100vw - 44px));z-index:99998}.ceog-app .ceog-sidebar.is-mobile-open{transform:translateX(0);visibility:visible}.ceog-app .ceog-sidebar__header{height:68px;min-height:68px;padding:0 14px 0 18px}.ceog-app .ceog-sidebar__logo{max-width:168px}.ceog-app .ceog-sidebar__nav{flex:1;flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:14px 12px;-webkit-overflow-scrolling:touch}.ceog-app .ceog-nav-item{display:grid;min-height:44px;min-width:0;width:100%}.ceog-app .ceog-sidebar__footer{display:flex;min-height:58px}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close{display:inline-flex}.ceog-app .ceog-sidebar-overlay{animation:ceog-overlay-in .18s ease both;background:rgba(10,13,18,.58);border:0;border-radius:0;bottom:0;cursor:default;display:block;height:auto;left:0;padding:0;position:fixed;right:0;top:46px;width:100%;z-index:99997}.ceog-app .ceog-topbar{padding:10px 16px}.ceog-app .ceog-topbar__leading{gap:10px}.ceog-app .ceog-user__name{display:none}.ceog-app .ceog-content{padding:16px}.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select,.ceog-app textarea{font-size:16px}.ceog-app .ceog-button,.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select{min-height:44px}.ceog-app .ceog-icon-button{height:40px;min-width:40px;width:40px}.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode{padding:24px}.ceog-app .ceog-hero h2{font-size:24px}.ceog-app .ceog-page__header,.ceog-app .ceog-quickstart{align-items:flex-start;flex-direction:column}.ceog-app .ceog-breaker-header-status,.ceog-app .ceog-page__header>*{max-width:100%}.ceog-app .ceog-list-counts{justify-content:flex-start}.ceog-app .ceog-log-filters{grid-template-columns:1fr}.ceog-app .ceog-log-filter-actions{grid-column:auto}}@keyframes ceog-overlay-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.ceog-app .ceog-sidebar,.ceog-app .ceog-sidebar-overlay{animation:none;transition:none}}@media (max-width:520px){.ceog-app .ceog-topbar__eyebrow{display:none}.ceog-app .ceog-topbar__title{font-size:17px}.ceog-app .ceog-stat-grid{grid-template-columns:1fr}.ceog-app .ceog-dashboard-panel{min-height:0;padding:18px}.ceog-app .ceog-dashboard-panel__header{align-items:flex-start}.ceog-app .ceog-weekly-chart{gap:5px;height:190px}.ceog-app .ceog-weekly-chart__day{grid-template-rows:20px 120px 20px}.ceog-app .ceog-weekly-chart__track{height:120px}.ceog-app .ceog-pro-context{padding:18px}.ceog-app .ceog-error{grid-template-columns:22px minmax(0,1fr)}.ceog-app .ceog-error .ceog-button{grid-column:1/-1}.ceog-app .ceog-empty,.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode,.ceog-app .ceog-settings-panel{padding:20px}.ceog-app .ceog-mode-control{max-width:none}.ceog-app .ceog-environment-row{grid-template-columns:1fr}.ceog-app .ceog-toggle-row{align-items:flex-start}.ceog-app .ceog-save-bar{align-items:stretch;flex-direction:column}.ceog-app .ceog-save-bar .ceog-button{width:100%}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-filter-actions,.ceog-app .ceog-log-pagination{align-items:stretch;flex-direction:column}.ceog-app .ceog-log-actions .ceog-button,.ceog-app .ceog-log-filter-actions .ceog-button,.ceog-app .ceog-log-pagination .ceog-button{flex:1;width:100%}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{width:100%}.ceog-app .ceog-log-actions>div{flex-wrap:wrap}.ceog-app .ceog-correlation-filter{grid-template-columns:20px minmax(0,1fr) 36px}.ceog-app .ceog-correlation-filter code{grid-column:2/3}.ceog-app .ceog-correlation-filter .ceog-icon-button{grid-column:3;grid-row:1/3}.ceog-app .ceog-choice-token{grid-template-columns:minmax(0,1fr) 22px}.ceog-app .ceog-choice-token code{display:none}.ceog-app .ceog-choice-manual,.ceog-app .ceog-limiter-status,.ceog-app .ceog-number-grid{grid-template-columns:1fr}}
     1.ceog-app,.ceog-app *{box-sizing:border-box;letter-spacing:0}.ceog-app{--ceog-bg:#f4f6f8;--ceog-surface:#fff;--ceog-surface-muted:#eef1f4;--ceog-text:#18212b;--ceog-muted:#5b6673;--ceog-border:#dce1e6;--ceog-border-strong:#c5ccd4;--ceog-primary:#5146d8;--ceog-primary-dark:#3f36b6;--ceog-primary-soft:#eeecff;--ceog-success:#16815d;--ceog-success-soft:#e4f6ef;--ceog-warning:#a65c00;--ceog-warning-soft:#fff3d6;--ceog-danger:#b42318;--ceog-danger-soft:#feeceb;--ceog-info:#1769aa;--ceog-info-soft:#e7f2fb;--ceog-shadow:0 1px 2px rgba(24,33,43,.05);--ceog-focus:0 0 0 3px rgba(81,70,216,.25);background:var(--ceog-bg);color:var(--ceog-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;line-height:1.5;margin:-10px 0 0 -20px;min-height:calc(100vh - 32px)}.ceog-app[data-theme=dark]{--ceog-bg:#15171a;--ceog-surface:#202328;--ceog-surface-muted:#292d33;--ceog-text:#f0f2f4;--ceog-muted:#abb3bc;--ceog-border:#363b42;--ceog-border-strong:#4b525b;--ceog-primary:#8b82ff;--ceog-primary-dark:#a49eff;--ceog-primary-soft:rgba(139,130,255,.16);--ceog-success:#54d4a4;--ceog-success-soft:rgba(38,160,116,.18);--ceog-warning:#f2b95f;--ceog-warning-soft:rgba(210,136,24,.17);--ceog-danger:#ff8b82;--ceog-danger-soft:rgba(213,57,48,.18);--ceog-info:#77bff0;--ceog-info-soft:rgba(44,135,196,.17);--ceog-shadow:0 1px 2px rgba(0,0,0,.24)}.ceog-app button,.ceog-app input,.ceog-app select,.ceog-app textarea{font:inherit}.ceog-app button,.ceog-app dd,.ceog-app dl,.ceog-app h1,.ceog-app h2,.ceog-app h3,.ceog-app p{margin:0}.ceog-app .ceog-shell{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:calc(100vh - 32px)}.ceog-app .ceog-sidebar{background:var(--ceog-surface);border-right:1px solid var(--ceog-border);display:flex;flex-direction:column;min-width:0}.ceog-app .ceog-sidebar__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;height:68px;justify-content:space-between;min-height:68px;padding:0 20px}.ceog-app .ceog-sidebar__logo{display:block;height:auto;max-height:38px;max-width:172px;object-fit:contain;width:auto}.ceog-app .ceog-sidebar__brand{color:var(--ceog-text);font-size:16px;font-weight:700}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close,.ceog-app .ceog-sidebar-overlay{display:none}.ceog-app .ceog-sidebar__nav{display:flex;flex:1;flex-direction:column;gap:4px;padding:16px 12px}.ceog-app .ceog-nav-item{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr) auto;min-height:40px;overflow:hidden;padding:8px 10px;text-align:left;transition:background-color .14s ease,border-color .14s ease,color .14s ease;width:100%}.ceog-app .ceog-nav-item span{min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-nav-item svg{flex:0 0 auto}.ceog-app .ceog-nav-item__badge{background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.2);border-radius:999px;color:var(--ceog-primary-dark);font-size:10px;font-weight:750;line-height:1.2;padding:2px 6px;text-transform:uppercase}.ceog-app .ceog-nav-item:hover{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-nav-item.is-active{background:var(--ceog-primary-soft);border-color:rgba(81,70,216,.16);color:var(--ceog-primary-dark);font-weight:650}.ceog-app .ceog-button:focus-visible,.ceog-app .ceog-icon-button:focus-visible,.ceog-app .ceog-mode-control button:focus-visible,.ceog-app .ceog-nav-item:focus-visible{box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-sidebar__footer{align-items:center;border-top:1px solid var(--ceog-border);color:var(--ceog-muted);display:flex;font-size:12px;gap:10px;justify-content:space-between;min-height:56px;padding:12px 16px}.ceog-app .ceog-main{background:var(--ceog-bg);min-width:0}.ceog-app .ceog-topbar{align-items:center;background:var(--ceog-surface);border-bottom:1px solid var(--ceog-border);display:flex;gap:24px;justify-content:space-between;min-height:68px;padding:10px 28px}.ceog-app .ceog-topbar__leading{align-items:center;display:flex;gap:12px;min-width:0}.ceog-app .ceog-topbar__leading>div{min-width:0}.ceog-app .ceog-section-kicker,.ceog-app .ceog-topbar__eyebrow{color:var(--ceog-primary-dark);font-size:11px;font-weight:700;line-height:1.3;text-transform:uppercase}.ceog-app .ceog-topbar__title{color:var(--ceog-text);font-size:19px;font-weight:700;line-height:1.25;margin-top:2px}.ceog-app .ceog-topbar__actions{align-items:center;display:flex;flex:0 0 auto;gap:10px}.ceog-app .ceog-icon-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:36px;justify-content:center;min-width:36px;padding:0;width:36px}.ceog-app .ceog-icon-button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-user{align-items:center;display:flex;gap:8px;min-width:0;padding-left:2px}.ceog-app .ceog-user__avatar,.ceog-app .ceog-user__initial{align-items:center;border-radius:50%;display:inline-flex;flex:0 0 30px;height:30px;justify-content:center;width:30px}.ceog-app .ceog-user__avatar{border:1px solid var(--ceog-border);object-fit:cover}.ceog-app .ceog-user__initial{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark);font-size:11px;font-weight:700}.ceog-app .ceog-user__name{color:var(--ceog-text);font-size:13px;font-weight:600;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-content{display:grid;gap:18px;margin:0 auto;max-width:1440px;padding:24px 28px 40px;width:100%}.ceog-app .ceog-dashboard,.ceog-app .ceog-loading,.ceog-app .ceog-page{display:grid;gap:18px;min-width:0}.ceog-app .ceog-hero{align-items:stretch;background:#5146d8;border-radius:8px;box-shadow:0 8px 20px rgba(59,48,174,.15);color:#fff;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr);min-height:244px;overflow:hidden}.ceog-app .ceog-hero__copy{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;min-width:0;padding:32px}.ceog-app .ceog-hero__badges{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}.ceog-app .ceog-hero__status{align-items:center;display:inline-flex;font-size:12px;font-weight:650;gap:6px}.ceog-app .ceog-hero h2{color:#fff;font-size:28px;font-weight:760;line-height:1.2;max-width:720px;overflow-wrap:anywhere}.ceog-app .ceog-hero__copy>p{color:hsla(0,0%,100%,.86);font-size:15px;margin-top:10px;max-width:650px}.ceog-app .ceog-hero__copy .ceog-button{margin-top:22px}.ceog-app .ceog-hero__mode{align-items:flex-start;background:rgba(25,20,101,.24);border-left:1px solid hsla(0,0%,100%,.18);display:flex;flex-direction:column;justify-content:center;min-width:0;padding:28px}.ceog-app .ceog-hero__mode>span{color:hsla(0,0%,100%,.72);font-size:12px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-hero__mode>strong{color:#fff;font-size:24px;line-height:1.2;margin:4px 0 16px}.ceog-app .ceog-badge{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:999px;color:var(--ceog-primary-dark);display:inline-flex;font-size:11px;font-weight:700;line-height:1.3;max-width:100%;padding:3px 8px;text-transform:uppercase;width:max-content}.ceog-app .ceog-badge--light{background:#fff;border-color:hsla(0,0%,100%,.5);color:#362e96}.ceog-app .ceog-button{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:8px;justify-content:center;min-height:38px;padding:8px 14px;transition:background-color .14s ease,border-color .14s ease,color .14s ease}.ceog-app .ceog-button:hover{background:var(--ceog-primary-soft);border-color:var(--ceog-primary);color:var(--ceog-primary-dark)}.ceog-app .ceog-button:disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-button--primary{background:var(--ceog-primary);border-color:var(--ceog-primary);color:#fff}.ceog-app .ceog-button--primary:hover{background:var(--ceog-primary-dark);border-color:var(--ceog-primary-dark);color:#fff}.ceog-app .ceog-button--danger{background:var(--ceog-surface);border-color:rgba(180,35,24,.38);color:var(--ceog-danger)}.ceog-app .ceog-button--danger:hover{background:var(--ceog-danger);border-color:var(--ceog-danger);color:#fff}.ceog-app .ceog-button--hero{background:#fff;border-color:#fff;color:#332b88}.ceog-app .ceog-button--hero:hover{background:#f3f1ff;border-color:#f3f1ff;color:#241d70}.ceog-app .ceog-mode-control{background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:7px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:310px;padding:4px;width:100%}.ceog-app .ceog-mode-control button{align-items:center;background:transparent;border:1px solid transparent;border-radius:5px;color:var(--ceog-muted);cursor:pointer;display:inline-flex;font-size:13px;font-weight:650;gap:7px;justify-content:center;min-height:38px;min-width:0;overflow:hidden;padding:7px 10px}.ceog-app .ceog-mode-control button:hover{color:var(--ceog-text)}.ceog-app .ceog-mode-control button.is-active{background:var(--ceog-surface);border-color:var(--ceog-border);box-shadow:var(--ceog-shadow);color:var(--ceog-primary-dark)}.ceog-app .ceog-hero .ceog-mode-control{background:hsla(0,0%,100%,.12);border-color:hsla(0,0%,100%,.2)}.ceog-app .ceog-hero .ceog-mode-control button{color:hsla(0,0%,100%,.78)}.ceog-app .ceog-hero .ceog-mode-control button.is-active{background:#fff;border-color:#fff;color:#30287d}.ceog-app .ceog-stat-grid{display:grid;gap:14px;grid-template-columns:repeat(4,minmax(0,1fr))}.ceog-app .ceog-stat{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);column-gap:10px;display:grid;grid-template-columns:28px minmax(0,1fr);grid-template-rows:auto auto;min-height:116px;min-width:0;padding:18px}.ceog-app .ceog-stat>svg{align-self:start;grid-row:1/3;margin-top:3px}.ceog-app .ceog-stat strong{color:var(--ceog-text);font-size:22px;line-height:1.2;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat span{color:var(--ceog-muted);font-size:12px;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-stat--green{border-top-color:var(--ceog-success);color:var(--ceog-success)}.ceog-app .ceog-stat--amber{border-top-color:var(--ceog-warning);color:var(--ceog-warning)}.ceog-app .ceog-stat--purple{border-top-color:var(--ceog-primary);color:var(--ceog-primary)}.ceog-app .ceog-stat--blue{border-top-color:var(--ceog-info);color:var(--ceog-info)}.ceog-app .ceog-stat--danger{border-top-color:var(--ceog-danger);color:var(--ceog-danger)}.ceog-app .ceog-quickstart{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-left:4px solid var(--ceog-success);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;gap:24px;justify-content:space-between;padding:22px 24px}.ceog-app .ceog-quickstart>div{max-width:760px;min-width:0}.ceog-app .ceog-page__header h2,.ceog-app .ceog-quickstart h2{color:var(--ceog-text);font-size:19px;line-height:1.3;margin-top:4px}.ceog-app .ceog-page__header p,.ceog-app .ceog-quickstart p{color:var(--ceog-muted);margin-top:7px}.ceog-app .ceog-dashboard-sync-warning{align-items:center;background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);border-radius:6px;color:var(--ceog-warning);display:grid;gap:10px;grid-template-columns:20px minmax(0,1fr) 40px;padding:10px 12px}.ceog-app .ceog-dashboard-sync-warning .ceog-icon-button{background:transparent;border-color:currentColor;color:currentColor}.ceog-app .ceog-dashboard-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.ceog-app .ceog-dashboard-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:320px;min-width:0;padding:22px}.ceog-app .ceog-dashboard-panel__header{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;min-height:40px;padding-bottom:16px}.ceog-app .ceog-dashboard-panel__header>div{align-items:center;color:var(--ceog-primary-dark);display:flex;gap:10px;min-width:0}.ceog-app .ceog-dashboard-panel__header h2{color:var(--ceog-text);font-size:16px;line-height:1.3;min-width:0;overflow-wrap:anywhere}.ceog-app .ceog-dashboard-panel__header>span{color:var(--ceog-text);font-size:18px;font-weight:700}.ceog-app .ceog-button--quiet{background:transparent;border-color:transparent;min-height:34px;padding:6px 10px;white-space:nowrap}.ceog-app .ceog-weekly-chart{align-items:end;display:grid;gap:10px;grid-template-columns:repeat(7,minmax(34px,1fr));height:220px;padding-top:20px}.ceog-app .ceog-weekly-chart__day{align-items:end;display:grid;gap:5px;grid-template-rows:20px 150px 20px;min-width:0;text-align:center}.ceog-app .ceog-weekly-chart__value{color:var(--ceog-muted);font-size:11px;font-variant-numeric:tabular-nums}.ceog-app .ceog-weekly-chart__track{align-items:flex-end;background:var(--ceog-surface-muted);border-radius:4px 4px 2px 2px;display:flex;height:150px;justify-content:center;overflow:hidden;position:relative;width:100%}.ceog-app .ceog-weekly-chart__track>span{background:var(--ceog-primary);border-radius:4px 4px 2px 2px;display:block;max-width:42px;min-height:0;transition:height .18s ease;width:100%}.ceog-app .ceog-weekly-chart__day strong{color:var(--ceog-muted);font-size:11px;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events{display:grid;list-style:none;margin:0;padding:0}.ceog-app .ceog-recent-events li{align-items:center;border-bottom:1px solid var(--ceog-border);display:grid;gap:10px;grid-template-columns:10px minmax(0,1fr) 32px;min-height:51px;padding:8px 0}.ceog-app .ceog-recent-events li:last-child{border-bottom:0}.ceog-app .ceog-recent-events li>div{display:grid;min-width:0}.ceog-app .ceog-recent-events strong{color:var(--ceog-text);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events small{color:var(--ceog-muted);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-recent-events a{align-items:center;border-radius:5px;color:var(--ceog-muted);display:inline-flex;height:32px;justify-content:center;width:32px}.ceog-app .ceog-recent-events a:focus-visible,.ceog-app .ceog-recent-events a:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-event-dot{background:var(--ceog-info);border-radius:50%;display:block;height:8px;width:8px}.ceog-app .ceog-event-dot--enforce{background:var(--ceog-danger)}.ceog-app .ceog-dashboard-empty{align-items:center;color:var(--ceog-muted);display:flex;gap:9px;justify-content:center;min-height:210px}.ceog-app .ceog-error,.ceog-app .ceog-warning{align-items:center;border-radius:6px;display:grid;gap:12px;padding:13px 15px}.ceog-app .ceog-warning{background:var(--ceog-warning-soft);border:1px solid rgba(166,92,0,.22);color:var(--ceog-warning);grid-template-columns:20px minmax(0,1fr)}.ceog-app .ceog-error{background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.22);color:var(--ceog-danger);grid-template-columns:22px minmax(0,1fr) auto}.ceog-app .ceog-error p{color:var(--ceog-text);margin-top:2px}.ceog-app .ceog-page__header{align-items:flex-start;border-bottom:1px solid var(--ceog-border);display:flex;gap:20px;justify-content:space-between;padding-bottom:18px}.ceog-app .ceog-page__header>div{max-width:760px}.ceog-app .ceog-status{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:12px;font-weight:650;gap:6px;min-height:28px;padding:4px 9px;white-space:nowrap}.ceog-app .ceog-status--success{background:var(--ceog-success-soft);border-color:rgba(22,129,93,.22);color:var(--ceog-success)}.ceog-app .ceog-status--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-settings-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-settings-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:flex;flex-direction:column;min-height:290px;min-width:0;padding:22px}.ceog-app .ceog-settings-panel--wide{grid-column:1/-1}.ceog-app .ceog-settings-panel__heading{color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr)}.ceog-app .ceog-settings-panel__heading h3{color:var(--ceog-text);font-size:16px;line-height:1.3}.ceog-app .ceog-settings-panel__heading p{color:var(--ceog-muted);font-size:13px;margin-top:5px}.ceog-app .ceog-switch-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:28px;padding:16px 0;position:relative}.ceog-app .ceog-switch-row>span:first-child{display:grid;gap:2px;min-width:0}.ceog-app .ceog-switch-row strong{color:var(--ceog-text)}.ceog-app .ceog-switch-row small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-switch-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-switch{background:var(--ceog-border-strong);border-radius:999px;flex:0 0 44px;height:24px;position:relative;transition:background-color .14s ease;width:44px}.ceog-app .ceog-switch:after{background:#fff;border-radius:50%;box-shadow:0 1px 2px rgba(0,0,0,.25);content:"";height:18px;left:3px;position:absolute;top:3px;transition:transform .14s ease;width:18px}.ceog-app .ceog-switch-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-switch-row input:checked+.ceog-switch:after{transform:translateX(20px)}.ceog-app .ceog-switch-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row{align-items:center;border-bottom:1px solid var(--ceog-border);border-top:1px solid var(--ceog-border);cursor:pointer;display:flex;gap:18px;justify-content:space-between;margin-top:22px;padding:15px 0;position:relative}.ceog-app .ceog-toggle-row__copy{display:grid;gap:3px;min-width:0}.ceog-app .ceog-toggle-row__copy strong{color:var(--ceog-text)}.ceog-app .ceog-toggle-row__copy small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-toggle-row input{height:1px;opacity:0;overflow:hidden;position:absolute;width:1px}.ceog-app .ceog-toggle-row input:checked+.ceog-switch{background:var(--ceog-success)}.ceog-app .ceog-toggle-row--warning input:checked+.ceog-switch{background:var(--ceog-warning)}.ceog-app .ceog-toggle-row--danger input:checked+.ceog-switch{background:var(--ceog-danger)}.ceog-app .ceog-toggle-row input:checked+.ceog-switch:after{transform:translateX(20px)}.ceog-app .ceog-toggle-row input:focus-visible+.ceog-switch{box-shadow:var(--ceog-focus)}.ceog-app .ceog-toggle-row.is-disabled{cursor:not-allowed;opacity:.55}.ceog-app .ceog-field{display:grid;gap:7px;margin-top:20px}.ceog-app .ceog-field>span{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-field input,.ceog-app .ceog-field select{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:40px;padding:7px 10px;width:100%}.ceog-app .ceog-field input:focus,.ceog-app .ceog-field select:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-field input:disabled,.ceog-app .ceog-field select:disabled{background:var(--ceog-surface-muted);color:var(--ceog-muted);cursor:not-allowed}.ceog-app .ceog-field-note{color:var(--ceog-muted);font-size:12px;margin-top:10px!important}.ceog-app .ceog-readonly-value{align-items:baseline;color:var(--ceog-muted);display:flex;gap:8px;margin-top:28px}.ceog-app .ceog-readonly-value strong{color:var(--ceog-text);font-size:32px;line-height:1}.ceog-app .ceog-environment-row{background:var(--ceog-border);border:1px solid var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px;overflow:hidden}.ceog-app .ceog-environment-row>div{background:var(--ceog-surface-muted);display:grid;gap:4px;padding:14px 16px}.ceog-app .ceog-environment-row span{color:var(--ceog-muted);font-size:11px;font-weight:650;text-transform:uppercase}.ceog-app .ceog-environment-row strong{color:var(--ceog-text);font-size:13px}.ceog-app .ceog-advanced-setting{padding-top:22px}.ceog-app .ceog-advanced-setting+.ceog-advanced-setting{border-top:1px solid var(--ceog-border);margin-top:22px}.ceog-app .ceog-advanced-setting .ceog-toggle-row{margin-top:0}.ceog-app .ceog-risk{align-items:start;border:1px solid transparent;border-radius:6px;display:grid;font-size:12px;gap:10px;grid-template-columns:20px minmax(0,1fr);margin-top:12px;padding:12px 13px}.ceog-app .ceog-risk--warning{background:var(--ceog-warning-soft);border-color:rgba(166,92,0,.22);color:var(--ceog-warning)}.ceog-app .ceog-risk--danger{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-acknowledgement{align-items:center;color:var(--ceog-text);cursor:pointer;display:inline-flex;font-size:12px;font-weight:650;gap:8px;margin-top:12px}.ceog-app .ceog-acknowledgement input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-acknowledgement:has(input:disabled){cursor:not-allowed;opacity:.55}.ceog-app .ceog-save-bar{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:flex-end;padding:16px 0 2px}.ceog-app .ceog-log-filters{align-items:end;background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);display:grid;gap:14px;grid-template-columns:minmax(210px,1.4fr) minmax(160px,.8fr) minmax(160px,.8fr) auto;padding:18px}.ceog-app .ceog-log-filters .ceog-field{margin-top:0}.ceog-app .ceog-log-filter-actions{align-items:center;display:flex;gap:8px}.ceog-app .ceog-correlation-filter{align-items:center;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;gap:9px;grid-template-columns:20px auto minmax(120px,1fr) 36px;padding:10px 12px}.ceog-app .ceog-correlation-filter span{font-weight:650}.ceog-app .ceog-correlation-filter code{color:var(--ceog-text);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-log-export-notice{align-items:center;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:flex;font-size:12px;font-weight:650;gap:9px;padding:11px 13px}.ceog-app .ceog-log-export-notice svg{flex:0 0 auto}.ceog-app .ceog-log-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);min-width:0;overflow:hidden}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-pagination{align-items:center;display:flex;gap:16px;justify-content:space-between;min-height:62px;padding:12px 16px}.ceog-app .ceog-log-actions{border-bottom:1px solid var(--ceog-border)}.ceog-app .ceog-log-actions>span,.ceog-app .ceog-log-pagination>span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{align-items:center;display:flex;gap:8px}.ceog-app .ceog-log-table-wrap{overflow-x:auto;overscroll-behavior-inline:contain;width:100%;-webkit-overflow-scrolling:touch}.ceog-app .ceog-log-table{border-collapse:collapse;border-spacing:0;min-width:1120px;table-layout:fixed;width:100%}.ceog-app .ceog-log-table td,.ceog-app .ceog-log-table th{border-bottom:1px solid var(--ceog-border);color:var(--ceog-text);font-size:12px;line-height:1.4;padding:11px 12px;text-align:left;vertical-align:top}.ceog-app .ceog-log-table th{background:var(--ceog-surface-muted);color:var(--ceog-muted);font-size:11px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-log-table tbody tr:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-log-table tbody tr:last-child td{border-bottom:0}.ceog-app .ceog-log-table td:nth-child(2),.ceog-app .ceog-log-table th:nth-child(2){width:142px}.ceog-app .ceog-log-table td:nth-child(3),.ceog-app .ceog-log-table th:nth-child(3){width:170px}.ceog-app .ceog-log-table td:nth-child(4),.ceog-app .ceog-log-table th:nth-child(4){width:90px}.ceog-app .ceog-log-table td:nth-child(5),.ceog-app .ceog-log-table th:nth-child(5){width:175px}.ceog-app .ceog-log-table td:nth-child(8),.ceog-app .ceog-log-table th:nth-child(8){width:78px}.ceog-app .ceog-log-table__select{text-align:center!important;width:42px}.ceog-app .ceog-log-table input[type=checkbox]{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-log-table__time{font-variant-numeric:tabular-nums;white-space:nowrap}.ceog-app .ceog-log-table__reason,.ceog-app .ceog-log-table__route{overflow-wrap:anywhere}.ceog-app .ceog-log-table a{align-items:center;color:var(--ceog-primary-dark);display:inline-flex;font-weight:650;gap:4px;text-decoration:none}.ceog-app .ceog-log-table a:hover{text-decoration:underline}.ceog-app .ceog-event-type,.ceog-app .ceog-mode-badge{align-items:center;border:1px solid var(--ceog-border);border-radius:999px;display:inline-flex;font-size:11px;font-weight:650;max-width:100%;padding:3px 7px;width:max-content}.ceog-app .ceog-event-type{background:var(--ceog-surface-muted);color:var(--ceog-text)}.ceog-app .ceog-mode-badge--monitor{background:var(--ceog-info-soft);border-color:rgba(23,105,170,.22);color:var(--ceog-info)}.ceog-app .ceog-mode-badge--enforce{background:var(--ceog-danger-soft);border-color:rgba(180,35,24,.22);color:var(--ceog-danger)}.ceog-app .ceog-log-ip{align-items:center;display:flex;gap:6px}.ceog-app .ceog-log-ip code{color:var(--ceog-text);font-size:11px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-icon-button--small{height:28px;min-width:28px;width:28px}.ceog-app .ceog-icon-button:disabled{cursor:not-allowed;opacity:.5}.ceog-app .ceog-log-empty,.ceog-app .ceog-log-loading{align-items:center;color:var(--ceog-muted);display:flex;justify-content:center;min-height:310px;padding:36px;text-align:center}.ceog-app .ceog-log-loading{gap:10px}.ceog-app .ceog-log-loading svg{animation:ceog-spin .9s linear infinite}.ceog-app .ceog-log-empty{flex-direction:column}.ceog-app .ceog-log-empty svg{color:var(--ceog-primary-dark)}.ceog-app .ceog-log-empty h3{color:var(--ceog-text);font-size:16px;margin-top:12px}.ceog-app .ceog-log-empty p{margin-top:6px;max-width:560px}.ceog-app .ceog-log-pagination{border-top:1px solid var(--ceog-border)}@keyframes ceog-spin{to{transform:rotate(1turn)}}.ceog-app .ceog-list-counts{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.ceog-app .ceog-list-precedence{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-list-precedence>div{display:grid;gap:2px}.ceog-app .ceog-list-precedence strong{color:var(--ceog-text)}.ceog-app .ceog-list-precedence span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-list-grid{align-items:start;display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-list-panel{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;border-top:3px solid var(--ceog-border-strong);box-shadow:var(--ceog-shadow);min-width:0;padding:22px}.ceog-app .ceog-list-panel--block{border-top-color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow{border-top-color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading{border-bottom:1px solid var(--ceog-border);color:var(--ceog-primary-dark);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);padding-bottom:18px}.ceog-app .ceog-list-panel--block .ceog-list-panel__heading{color:var(--ceog-danger)}.ceog-app .ceog-list-panel--allow .ceog-list-panel__heading{color:var(--ceog-success)}.ceog-app .ceog-list-panel__heading h3{color:var(--ceog-text);font-size:17px;line-height:1.3}.ceog-app .ceog-list-panel__heading p{color:var(--ceog-muted);font-size:12px;margin-top:5px}.ceog-app .ceog-list-field{display:grid;gap:6px;margin-top:20px;min-width:0}.ceog-app .ceog-list-field>span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-list-field>small{color:var(--ceog-muted);font-size:11px;min-height:18px}.ceog-app .ceog-list-field textarea{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5;min-height:112px;padding:9px 10px;resize:vertical;width:100%}.ceog-app .ceog-list-field textarea:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-list-field textarea::placeholder{color:var(--ceog-muted);opacity:.72}.ceog-app .ceog-list-field-icon{position:relative}.ceog-app .ceog-list-field-icon>svg{color:var(--ceog-muted);position:absolute;right:0;top:21px;z-index:1}.ceog-app .ceog-list-field-icon .ceog-list-field>small,.ceog-app .ceog-list-field-icon .ceog-list-field>span{padding-right:24px}.ceog-app .ceog-list-compatibility{align-items:start;background:var(--ceog-info-soft);border:1px solid rgba(23,105,170,.22);border-radius:6px;color:var(--ceog-info);display:grid;font-size:12px;gap:9px;grid-template-columns:19px minmax(0,1fr);margin-top:18px;padding:11px 12px}.ceog-app .ceog-choice-field{display:grid;gap:10px;margin-top:20px;min-width:0;position:relative}.ceog-app .ceog-choice-field__heading{align-items:start;display:grid;gap:8px;grid-template-columns:19px minmax(0,1fr)}.ceog-app .ceog-choice-field__heading>svg{color:var(--ceog-muted);margin-top:1px}.ceog-app .ceog-choice-field__heading>div{display:grid;gap:3px}.ceog-app .ceog-choice-field__heading span{color:var(--ceog-text);font-size:13px;font-weight:650}.ceog-app .ceog-choice-field__heading small{color:var(--ceog-muted);font-size:11px}.ceog-app .ceog-choice-tokens{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.ceog-app .ceog-choice-token{align-items:center;background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.2);border-radius:999px;color:var(--ceog-primary-dark);display:grid;font-size:11px;font-weight:650;gap:6px;grid-template-columns:auto auto 22px;max-width:100%;min-height:30px;padding:3px 3px 3px 9px}.ceog-app .ceog-choice-token code,.ceog-app .ceog-choice-token>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-token code{color:var(--ceog-muted);font-size:10px;font-weight:400}.ceog-app .ceog-choice-token button{align-items:center;background:transparent;border:0;border-radius:50%;color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:22px;justify-content:center;padding:0;width:22px}.ceog-app .ceog-choice-token button:hover{background:var(--ceog-danger-soft);color:var(--ceog-danger)}.ceog-app .ceog-choice-search{align-items:center;background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-muted);display:grid;grid-template-columns:20px minmax(0,1fr) 34px;min-height:42px;padding-left:10px}.ceog-app .ceog-choice-menu{position:relative}.ceog-app .ceog-choice-search:focus-within{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus)}.ceog-app .ceog-choice-search input{background:transparent;border:0;box-shadow:none;color:var(--ceog-text);height:40px;min-width:0;padding:7px 8px;width:100%}.ceog-app .ceog-choice-search input:focus{box-shadow:none;outline:0}.ceog-app .ceog-choice-search button{align-items:center;background:transparent;border:0;border-left:1px solid var(--ceog-border);color:var(--ceog-muted);cursor:pointer;display:inline-flex;height:40px;justify-content:center;padding:0;width:34px}.ceog-app .ceog-choice-search button:hover{background:var(--ceog-primary-soft);color:var(--ceog-primary-dark)}.ceog-app .ceog-choice-options{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;box-shadow:0 12px 28px rgba(24,33,43,.18);left:0;max-height:260px;overflow-y:auto;position:absolute;right:0;top:calc(100% + 4px);z-index:20}.ceog-app .ceog-choice-options>label{align-items:center;border-bottom:1px solid var(--ceog-border);cursor:pointer;display:grid;gap:9px;grid-template-columns:18px minmax(0,1fr) 18px;min-height:46px;padding:7px 10px}.ceog-app .ceog-choice-options>label:last-of-type{border-bottom:0}.ceog-app .ceog-choice-options>label.is-selected,.ceog-app .ceog-choice-options>label:hover{background:var(--ceog-primary-soft)}.ceog-app .ceog-choice-options input{accent-color:var(--ceog-primary);height:16px;margin:0;width:16px}.ceog-app .ceog-choice-options label>span{display:grid;gap:1px;min-width:0}.ceog-app .ceog-choice-options strong{color:var(--ceog-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options code{color:var(--ceog-muted);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ceog-app .ceog-choice-options>p{color:var(--ceog-muted);font-size:12px;padding:14px;text-align:center}.ceog-app .ceog-choice-manual{display:grid;gap:8px;grid-template-columns:minmax(0,1fr) auto}.ceog-app .ceog-choice-manual input{background:var(--ceog-surface);border:1px solid var(--ceog-border-strong);border-radius:6px;color:var(--ceog-text);min-height:38px;padding:7px 10px;width:100%}.ceog-app .ceog-choice-manual input:focus{border-color:var(--ceog-primary);box-shadow:var(--ceog-focus);outline:0}.ceog-app .ceog-skeleton--store-api{min-height:150px}.ceog-app .ceog-emergency-banner{align-items:start;background:var(--ceog-danger-soft);border:1px solid rgba(180,35,24,.3);border-radius:6px;color:var(--ceog-danger);display:grid;gap:11px;grid-template-columns:22px minmax(0,1fr);padding:13px 15px}.ceog-app .ceog-emergency-banner>div{display:grid;gap:2px}.ceog-app .ceog-emergency-banner strong{color:var(--ceog-danger)}.ceog-app .ceog-emergency-banner span{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-store-api-panel{min-height:410px}.ceog-app .ceog-number-grid{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-breaker-header-status{align-items:center;display:flex;gap:8px}.ceog-app .ceog-breaker-grid{display:grid;gap:18px;grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-breaker-panel{border-top:3px solid #4f46e5;min-width:0}.ceog-app .ceog-breaker-panel--email{border-top-color:#0f8a62}.ceog-app .ceog-breaker-panel--global{border-top-color:#c56a0a}.ceog-app .ceog-breaker-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.ceog-app .ceog-breaker-title-row h3{margin:0}.ceog-app .ceog-badge--primary{background:#fff4d6;border-color:#efcf8f;color:#8b4b05}.ceog-app .ceog-breaker-live{align-items:center;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);display:flex;gap:9px;margin:0 0 2px;min-height:56px;padding:10px 12px}.ceog-app .ceog-breaker-live>div{display:grid;gap:2px;min-width:0}.ceog-app .ceog-breaker-live span,.ceog-app .ceog-breaker-live strong{font-size:13px;font-weight:700}.ceog-app .ceog-breaker-live small{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-breaker-live>strong{margin-left:auto}.ceog-app .ceog-breaker-live--ready{background:#eaf8f2;border-color:#b7e1d1;color:#087b57}.ceog-app .ceog-breaker-live--warning{background:#fff7df;border-color:#efcf8f;color:#9a5707}.ceog-app .ceog-breaker-live--danger{background:#fff0ef;border-color:#f1b9b5;color:#b42318}.ceog-app .ceog-breaker-live--muted{color:var(--ceog-muted);display:grid;gap:2px}.ceog-app .ceog-breaker-fields{display:grid;gap:12px;grid-template-columns:1fr;padding:18px 0}.ceog-app .ceog-breaker-note{align-items:flex-start;background:#fff8e8;border:1px solid #edd7aa;color:#85510f;display:flex;gap:9px;margin-top:auto;padding:12px}.ceog-app .ceog-breaker-note svg{flex:0 0 auto;margin-top:1px}.ceog-app .ceog-breaker-note p{font-size:12px;line-height:1.5;margin:0}.ceog-app[data-theme=dark] .ceog-breaker-live--ready{background:#17372e;border-color:#28624f;color:#79dbb9}.ceog-app[data-theme=dark] .ceog-breaker-live--warning,.ceog-app[data-theme=dark] .ceog-breaker-note{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app[data-theme=dark] .ceog-breaker-live--danger{background:#432422;border-color:#74403c;color:#ff9c96}.ceog-app[data-theme=dark] .ceog-badge--primary{background:#3d3019;border-color:#6f5727;color:#f0c878}.ceog-app .ceog-limiter-status{background:var(--ceog-border);border-radius:6px;display:grid;gap:1px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:auto;overflow:hidden;padding-top:22px}.ceog-app .ceog-limiter-status>div{background:var(--ceog-surface-muted);display:grid;gap:3px;padding:13px 14px}.ceog-app .ceog-limiter-status span{color:var(--ceog-muted);font-size:10px;font-weight:700;text-transform:uppercase}.ceog-app .ceog-limiter-status strong{color:var(--ceog-text);font-size:12px}.ceog-app .ceog-batch-state{align-items:start;background:var(--ceog-success-soft);border:1px solid rgba(22,129,93,.22);border-radius:6px;color:var(--ceog-success);display:grid;gap:11px;grid-template-columns:24px minmax(0,1fr);margin-top:24px;padding:15px}.ceog-app .ceog-batch-state>div{display:grid;gap:3px}.ceog-app .ceog-batch-state strong{color:var(--ceog-text)}.ceog-app .ceog-batch-state span{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-store-api-facts{display:grid;gap:0;margin-top:18px}.ceog-app .ceog-store-api-facts>div{align-items:center;border-bottom:1px solid var(--ceog-border);display:flex;gap:14px;justify-content:space-between;padding:11px 0}.ceog-app .ceog-store-api-facts>div:last-child{border-bottom:0}.ceog-app .ceog-store-api-facts dt{align-items:center;color:var(--ceog-muted);display:inline-flex;font-size:12px;gap:7px}.ceog-app .ceog-store-api-facts dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-store-api-advanced{min-height:0}.ceog-app .ceog-skeleton--list{min-height:760px}.ceog-app .ceog-settings-panel__footer{align-items:center;display:flex;gap:12px;justify-content:flex-end;margin-top:auto;padding-top:22px}.ceog-app .ceog-saved{align-items:center;color:var(--ceog-success);display:inline-flex;font-size:12px;font-weight:650;gap:5px}.ceog-app .ceog-settings-panel>.ceog-mode-control{margin-top:28px}.ceog-app .ceog-settings-meta{display:grid;gap:10px;margin-top:auto;padding-top:24px}.ceog-app .ceog-settings-meta>div{align-items:center;border-top:1px solid var(--ceog-border);display:flex;gap:16px;justify-content:space-between;padding-top:10px}.ceog-app .ceog-settings-meta dt{color:var(--ceog-muted);font-size:12px}.ceog-app .ceog-settings-meta dd{color:var(--ceog-text);font-size:12px;font-weight:650}.ceog-app .ceog-empty{background:var(--ceog-surface);border:1px solid var(--ceog-border);border-radius:8px;box-shadow:var(--ceog-shadow);flex-direction:column;min-height:430px;padding:44px 28px;text-align:center}.ceog-app .ceog-empty,.ceog-app .ceog-empty__icon{align-items:center;display:flex;justify-content:center}.ceog-app .ceog-empty__icon{background:var(--ceog-primary-soft);border:1px solid rgba(81,70,216,.16);border-radius:8px;color:var(--ceog-primary-dark);height:56px;width:56px}.ceog-app .ceog-empty h2{color:var(--ceog-text);font-size:19px;margin-top:18px}.ceog-app .ceog-empty p{color:var(--ceog-muted);margin:8px auto 16px;max-width:560px}.ceog-app .ceog-skeleton{animation:ceog-pulse 1.2s ease-in-out infinite alternate;background:var(--ceog-surface-muted);border:1px solid var(--ceog-border);border-radius:8px}.ceog-app .ceog-skeleton--hero{min-height:244px}.ceog-app .ceog-skeleton--stat{min-height:116px}@keyframes ceog-pulse{0%{opacity:.55}to{opacity:1}}@media (max-width:1100px){.ceog-app .ceog-breaker-grid{grid-template-columns:1fr}.ceog-app .ceog-hero{grid-template-columns:minmax(0,1fr) minmax(250px,.65fr)}.ceog-app .ceog-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.ceog-app .ceog-dashboard-grid,.ceog-app .ceog-settings-grid{grid-template-columns:1fr}.ceog-app .ceog-settings-panel--wide{grid-column:auto}.ceog-app .ceog-log-filters{grid-template-columns:repeat(3,minmax(0,1fr))}.ceog-app .ceog-log-filter-actions{grid-column:1/-1}.ceog-app .ceog-list-grid{grid-template-columns:1fr}.ceog-app .ceog-skeleton--list{min-height:520px}}@media (max-width:900px){.ceog-app .ceog-shell{grid-template-columns:210px minmax(0,1fr)}.ceog-app .ceog-content{padding:20px}.ceog-app .ceog-hero{grid-template-columns:1fr}.ceog-app .ceog-hero__mode{border-left:0;border-top:1px solid hsla(0,0%,100%,.18)}}@media (max-width:782px){.ceog-app{margin:0;min-height:calc(100vh - 46px)}.ceog-app .ceog-shell{grid-template-columns:1fr;min-height:calc(100vh - 46px)}.ceog-app .ceog-sidebar{border-right:1px solid var(--ceog-border);bottom:0;box-shadow:14px 0 34px rgba(0,0,0,.24);left:0;min-height:0;position:fixed;top:46px;transform:translateX(-105%);transition:transform .22s ease,visibility .22s ease;visibility:hidden;width:min(300px,calc(100vw - 44px));z-index:99998}.ceog-app .ceog-sidebar.is-mobile-open{transform:translateX(0);visibility:visible}.ceog-app .ceog-sidebar__header{height:68px;min-height:68px;padding:0 14px 0 18px}.ceog-app .ceog-sidebar__logo{max-width:168px}.ceog-app .ceog-sidebar__nav{flex:1;flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:14px 12px;-webkit-overflow-scrolling:touch}.ceog-app .ceog-nav-item{display:grid;min-height:44px;min-width:0;width:100%}.ceog-app .ceog-sidebar__footer{display:flex;min-height:58px}.ceog-app .ceog-icon-button.ceog-mobile-menu-trigger,.ceog-app .ceog-icon-button.ceog-sidebar__close{display:inline-flex}.ceog-app .ceog-sidebar-overlay{animation:ceog-overlay-in .18s ease both;background:rgba(10,13,18,.58);border:0;border-radius:0;bottom:0;cursor:default;display:block;height:auto;left:0;padding:0;position:fixed;right:0;top:46px;width:100%;z-index:99997}.ceog-app .ceog-topbar{padding:10px 16px}.ceog-app .ceog-topbar__leading{gap:10px}.ceog-app .ceog-user__name{display:none}.ceog-app .ceog-content{padding:16px}.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select,.ceog-app textarea{font-size:16px}.ceog-app .ceog-button,.ceog-app input:not([type=checkbox]):not([type=radio]),.ceog-app select{min-height:44px}.ceog-app .ceog-icon-button{height:40px;min-width:40px;width:40px}.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode{padding:24px}.ceog-app .ceog-hero h2{font-size:24px}.ceog-app .ceog-page__header,.ceog-app .ceog-quickstart{align-items:flex-start;flex-direction:column}.ceog-app .ceog-breaker-header-status,.ceog-app .ceog-page__header>*{max-width:100%}.ceog-app .ceog-list-counts{justify-content:flex-start}.ceog-app .ceog-log-filters{grid-template-columns:1fr}.ceog-app .ceog-log-filter-actions{grid-column:auto}}@keyframes ceog-overlay-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.ceog-app .ceog-sidebar,.ceog-app .ceog-sidebar-overlay{animation:none;transition:none}}@media (max-width:520px){.ceog-app .ceog-topbar__eyebrow{display:none}.ceog-app .ceog-topbar__title{font-size:17px}.ceog-app .ceog-stat-grid{grid-template-columns:1fr}.ceog-app .ceog-dashboard-panel{min-height:0;padding:18px}.ceog-app .ceog-dashboard-panel__header{align-items:flex-start}.ceog-app .ceog-weekly-chart{gap:5px;height:190px}.ceog-app .ceog-weekly-chart__day{grid-template-rows:20px 120px 20px}.ceog-app .ceog-weekly-chart__track{height:120px}.ceog-app .ceog-error{grid-template-columns:22px minmax(0,1fr)}.ceog-app .ceog-error .ceog-button{grid-column:1/-1}.ceog-app .ceog-empty,.ceog-app .ceog-hero__copy,.ceog-app .ceog-hero__mode,.ceog-app .ceog-settings-panel{padding:20px}.ceog-app .ceog-mode-control{max-width:none}.ceog-app .ceog-environment-row{grid-template-columns:1fr}.ceog-app .ceog-toggle-row{align-items:flex-start}.ceog-app .ceog-save-bar{align-items:stretch;flex-direction:column}.ceog-app .ceog-save-bar .ceog-button{width:100%}.ceog-app .ceog-log-actions,.ceog-app .ceog-log-filter-actions,.ceog-app .ceog-log-pagination{align-items:stretch;flex-direction:column}.ceog-app .ceog-log-actions .ceog-button,.ceog-app .ceog-log-filter-actions .ceog-button,.ceog-app .ceog-log-pagination .ceog-button{flex:1;width:100%}.ceog-app .ceog-log-actions>div,.ceog-app .ceog-log-pagination>div{width:100%}.ceog-app .ceog-log-actions>div{flex-wrap:wrap}.ceog-app .ceog-correlation-filter{grid-template-columns:20px minmax(0,1fr) 36px}.ceog-app .ceog-correlation-filter code{grid-column:2/3}.ceog-app .ceog-correlation-filter .ceog-icon-button{grid-column:3;grid-row:1/3}.ceog-app .ceog-choice-token{grid-template-columns:minmax(0,1fr) 22px}.ceog-app .ceog-choice-token code{display:none}.ceog-app .ceog-choice-manual,.ceog-app .ceog-limiter-status,.ceog-app .ceog-number-grid{grid-template-columns:1fr}}
  • coderembassy-order-vanguard/trunk/coderembassy-order-vanguard.php

    r3776959 r3778434  
    44 * Plugin URI:  https://github.com/salehST/coderembassy-order-vanguard
    55 * Description: API-level protection against card testing, bot orders, and fake WooCommerce checkouts.
    6  * Version:     1.1.1
     6 * Version:     1.1.2
    77 * Author:      CoderEmbassy
    88 * Author URI:  https://coderembassy.com/
    … …  
    2222}
    2323
    24 define( 'CEOG_VERSION', '1.1.1' );
     24define( 'CEOG_VERSION', '1.1.2' );
    2525define( 'CEOG_DB_VERSION', '1.0.4' );
    2626define( 'CEOG_FILE', __FILE__ );
  • coderembassy-order-vanguard/trunk/includes/class-ceog-activator.php

    r3701248 r3778434  
    8383                dbDelta( $sql );
    8484
    85                 $installed_table = $wpdb->get_var(
     85                $installed_table = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- One-time schema verification during activation cannot use the object cache.
    8686                        $wpdb->prepare(
    8787                                'SHOW TABLES LIKE %s',
  • coderembassy-order-vanguard/trunk/includes/class-ceog-admin.php

    r3701248 r3778434  
    1111
    1212/**
    13  * Mounts the standalone React app on one WooCommerce submenu.
     13 * Mounts the Order Vanguard React app on one WooCommerce submenu.
    1414 */
    1515final class CEOG_Admin {
    … …  
    102102                $user = wp_get_current_user();
    103103
    104                 $bootstrap = apply_filters(
    105                         'ceog_admin_bootstrap',
    106                         array(
     104                $bootstrap = array(
    107105                                'restUrl'   => esc_url_raw( rest_url( 'ceog/v1/' ) ),
    108106                                'nonce'     => wp_create_nonce( 'wp_rest' ),
    … …  
    111109                                ),
    112110                                'version'   => CEOG_VERSION,
    113                                 'isPro'     => false,
    114111                                'logoLight' => esc_url_raw( CEOG_URL . 'assets/images/logo-light.png' ),
    115112                                'logoDark'  => esc_url_raw( CEOG_URL . 'assets/images/logo-dark.png' ),
    … …  
    118115                                        'avatarUrl'   => esc_url_raw( get_avatar_url( $user->ID, array( 'size' => 64 ) ) ),
    119116                                ),
    120                         )
    121117                );
    122118                wp_localize_script( 'ceog-admin', 'ceogBoot', is_array( $bootstrap ) ? $bootstrap : array() );
  • coderembassy-order-vanguard/trunk/includes/class-ceog-dashboard.php

    r3701248 r3778434  
    5454                                $breakers = $this->breakers->get_status_payload();
    5555                                $enforcing = ceog_is_enforcing();
    56                                 $remaining = absint( $cached['failed_orders_remaining'] ?? 0 );
    57                                 $blocked_7d = absint( $cached['blocked_7d'] ?? 0 );
    5856
    5957                                return array(
    … …  
    6765                                        'weekly_series'   => array_values( $cached['weekly_series'] ?? array() ),
    6866                                        'recent_events'   => array_values( $cached['recent_events'] ?? array() ),
    69                                         'pro_context'     => array(
    70                                                 'show'             => (bool) ( $enforcing && $blocked_7d > 0 && $remaining > 0 ),
    71                                                 'blocked_attempts' => $blocked_7d,
    72                                                 'remaining_orders' => $remaining,
    73                                         ),
     67
    7468                                        'cache_ttl'       => self::CACHE_TTL,
    7569                                        'generated_at'    => $this->now(),
    … …  
    109103                        $dates[6] . ' 23:59:59'
    110104                );
    111                 $rows  = $wpdb->get_results( $sql, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Prepared immediately above.
     105                $rows  = $wpdb->get_results( $sql, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Custom aggregate query is prepared immediately above; the caller applies bounded transient caching.
    112106
    113107                if ( ! is_array( $rows ) ) {
    … …  
    138132                        'weekly_series'          => array_values( $series ),
    139133                        'recent_events'          => $this->logger->get_recent_entries( 5 ),
    140                         'failed_orders_remaining' => $blocked_7d > 0 ? $this->failed_orders_remaining( $now ) : 0,
     134
    141135                );
    142136        }
    143137
    144         /**
    145          * Counts recent failed/cancelled orders through the HPOS-safe order API.
    146          *
    147          * @param int $now Current timestamp.
    148          * @return int
    149          */
    150         private function failed_orders_remaining( $now ) {
    151                 if ( ! function_exists( 'wc_get_orders' ) ) {
    152                         return 0;
    153                 }
    154 
    155                 $result = wc_get_orders(
    156                         array(
    157                                 'status'       => array( 'failed', 'cancelled' ),
    158                                 'date_created' => '>=' . wp_date( 'Y-m-d H:i:s', $now - ( 7 * DAY_IN_SECONDS ) ),
    159                                 'limit'        => 1,
    160                                 'paginate'     => true,
    161                                 'return'       => 'ids',
    162                         )
    163                 );
    164 
    165                 return is_object( $result ) && isset( $result->total ) ? absint( $result->total ) : 0;
    166         }
    167138
    168139        /** @return int */
    … …  
    192163                        'weekly_series'     => array(),
    193164                        'recent_events'     => array(),
    194                         'pro_context'       => array( 'show' => false, 'blocked_attempts' => 0, 'remaining_orders' => 0 ),
    195165                        'cache_ttl'         => self::CACHE_TTL,
    196166                        'generated_at'      => 0,
  • coderembassy-order-vanguard/trunk/includes/class-ceog-honeypot.php

    r3701248 r3778434  
    122122         * Returns a deterministic site-specific field name for one checkout flow.
    123123         *
    124          * This public extension point lets the separate Pro add-on register a
    125          * Checkout Block field without duplicating or exposing the site salt.
     124         * This public extension point supports additional checkout flows without
     125         * duplicating or exposing the site salt.
    126126         *
    127127         * @param string $flow Stable checkout-flow identifier.
  • coderembassy-order-vanguard/trunk/includes/class-ceog-lists.php

    r3701248 r3778434  
    182182
    183183                /**
    184                  * Allows an active add-on to supply additional list matches.
     184                 * Allows other code to supply additional list matches.
    185185                 * Whitelist precedence has already been applied above.
    186186                 *
    187187                 * @param array<string, mixed> $match    Current match.
    188188                 * @param array<string, mixed> $context  Checkout context.
    189                  * @param array<string, mixed> $settings Sanitized Free settings.
     189                 * @param array<string, mixed> $settings Sanitized plugin settings.
    190190                 */
    191191                return apply_filters( 'ceog_blocklist_match', $match, $context, $settings );
  • coderembassy-order-vanguard/trunk/includes/class-ceog-logger.php

    r3701248 r3778434  
    1515final class CEOG_Logger {
    1616        /**
    17          * Event types stored by the free plugin.
     17         * Supported protection event types.
    1818         *
    1919         * @var string[]
    … …  
    102102                                        false === $row['meta'] ? '{}' : $row['meta']
    103103                                );
    104                                 $result = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Prepared immediately above.
     104                                $result = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Custom append-only log table; prepared immediately above and intentionally uncached.
    105105
    106106                                if ( false === $result ) {
    … …  
    161161                                                $values
    162162                                        );
    163                                         $total     = (int) $wpdb->get_var( $count_sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Prepared immediately above.
     163                                        $total     = (int) $wpdb->get_var( $count_sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Dynamic allowlisted clauses are prepared immediately above; live log totals are intentionally uncached.
    164164                                }
    165165                                $offset       = ( $page - 1 ) * $per_page;
    … …  
    170170                                        $query_values
    171171                                );
    172                                 $rows         = $wpdb->get_results( $rows_sql, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Prepared immediately above.
     172                                $rows         = $wpdb->get_results( $rows_sql, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Dynamic allowlisted clauses are prepared immediately above; live log rows are intentionally uncached.
    173173
    174174                                return array(
    … …  
    205205                                        $limit
    206206                                );
    207                                 $rows  = $wpdb->get_results( $sql, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Prepared immediately above.
     207                                $rows  = $wpdb->get_results( $sql, ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Custom log query is prepared immediately above and intentionally uncached.
    208208
    209209                                if ( ! is_array( $rows ) ) {
    … …  
    240240                                        $ids
    241241                                );
    242                                 $deleted      = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Prepared immediately above.
     242                                $deleted      = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Sanitized IDs are prepared immediately above; mutation queries are not cacheable.
    243243
    244244                                if ( false === $deleted ) {
    … …  
    264264                        function () {
    265265                                global $wpdb;
    266 
    267                                 // The WordPress.org Free plugin owns a complete, fixed seven-day history.
    268                                 // Longer retention is implemented by the separate Pro add-on's own pruner.
    269                                 $cutoff = gmdate( 'Y-m-d H:i:s', current_time( 'timestamp' ) - ( 7 * DAY_IN_SECONDS ) );
     266                                $settings = ceog_get_settings();
     267                                $days     = absint( $settings['log_retention_days'] ?? 30 );
     268                                $days     = in_array( $days, array( 7, 30, 90 ), true ) ? $days : 30;
     269                                $cutoff   = gmdate( 'Y-m-d H:i:s', current_time( 'timestamp' ) - ( $days * DAY_IN_SECONDS ) );
    270270                                $table     = $wpdb->prefix . 'ceog_log';
    271271                                $total     = 0;
    … …  
    277277                                                1000
    278278                                        );
    279                                         $deleted = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.PreparedSQL.NotPrepared -- Prepared immediately above.
     279                                        $deleted = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Cutoff and bounded limit are prepared immediately above; mutation queries are not cacheable.
    280280
    281281                                        if ( false === $deleted ) {
  • coderembassy-order-vanguard/trunk/includes/class-ceog-origin-rules.php

    r3701248 r3778434  
    183183                                'billing_email' => $email,
    184184                                'status'        => 'completed',
    185                                 'exclude'       => $order_id > 0 ? array( $order_id ) : array(),
     185                                'exclude'       => $order_id > 0 ? array( $order_id ) : array(), // phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_exclude -- Bounded one-row lookup excludes only the current order ID.
    186186                                'limit'         => 1,
    187187                                'return'        => 'ids',
  • coderembassy-order-vanguard/trunk/includes/class-ceog-settings.php

    r3701248 r3778434  
    143143                        }
    144144
     145                        if ( 'log_retention_days' === $key ) {
     146
     147                                $days              = absint( $value );
     148
     149                                $sanitized[ $key ] = in_array( $days, array( 7, 30, 90 ), true ) ? $days : 30;
     150
     151                                continue;
     152
     153                        }
     154
     155
    145156                        if ( isset( self::$integer_bounds[ $key ] ) ) {
    146157                                $bounds            = self::$integer_bounds[ $key ];
    … …  
    201212                        $output[ $key ] = isset( $settings[ $key ] ) ? (int) $settings[ $key ] : 0;
    202213                }
     214
     215
     216                $days                         = absint( $settings['log_retention_days'] ?? 30 );
     217
     218
     219                $output['log_retention_days'] = in_array( $days, array( 7, 30, 90 ), true ) ? $days : 30;
     220
    203221
    204222
  • coderembassy-order-vanguard/trunk/includes/functions.php

    r3701248 r3778434  
    4646                'whitelist_payment_methods' => array(),
    4747                'log_full_ip'               => 'no',
     48                'log_retention_days'        => 30,
    4849                'trusted_proxy'             => 'none',
    4950                'alert_email_enabled'       => 'yes',
  • coderembassy-order-vanguard/trunk/languages/coderembassy-order-vanguard.pot

    r3701248 r3778434  
    11msgid ""
    22msgstr ""
    3 "Project-Id-Version: CoderEmbassy Order Vanguard 1.0.16\n"
     3"Project-Id-Version: CoderEmbassy Order Vanguard 1.1.1\n"
    44"Report-Msgid-Bugs-To: https://coderembassy.com/\n"
    5 "POT-Creation-Date: 2026-09-08 10:22:56+0000\n"
     5"POT-Creation-Date: 2026-09-28 02:48:22+0000\n"
    66"MIME-Version: 1.0\n"
    77"Content-Type: text/plain; charset=utf-8\n"
    … …  
    1010"X-Domain: coderembassy-order-vanguard\n"
    1111
    12 #: src/views/CircuitBreakers.jsx:108
     12#: src/views/CircuitBreakers.jsx:106
    1313#. 1: minutes, 2: seconds
    1414msgid "%1$dm %2$ds remaining"
    1515msgstr ""
    1616
    17 #: src/views/Lists.jsx:165
     17#: src/views/Lists.jsx:167
    1818#. %d: number of whitelist entries.
    1919msgid "%d allowed"
    2020msgstr ""
    2121
    22 #: src/views/Lists.jsx:157
     22#: src/views/Lists.jsx:159
    2323#. %d: number of blocklist entries.
    2424msgid "%d blocked"
    2525msgstr ""
    2626
    27 #: src/views/CircuitBreakers.jsx:407
     27#: src/views/CircuitBreakers.jsx:399
    2828#. %d: active breaker tiers
    2929msgid "%d cooling down"
    3030msgstr ""
    3131
    32 #: src/components/LicenseNotice.jsx:56
    33 #. %d: trial days remaining
    34 msgid "%d days remain to activate Order Vanguard Pro."
    35 msgstr ""
    36 
    37 #: src/views/ActivityLog.jsx:266
     32#: src/views/ActivityLog.jsx:219
    3833#. %d: number of matching protection events.
    3934msgid "%d events"
    4035msgstr ""
    4136
    42 #: src/views/CircuitBreakers.jsx:114
     37#: src/views/CircuitBreakers.jsx:112
    4338#. %d: seconds
    4439msgid "%d seconds remaining"
    4540msgstr ""
    4641
    47 #: src/views/ActivityLog.jsx:355
     42#: src/views/ActivityLog.jsx:316
    4843#. %d: number of selected log rows.
    4944msgid "%d selected"
    5045msgstr ""
    5146
    52 #: src/components/LicenseNotice.jsx:49
    53 msgid ""
    54 "A license key is required to continue managing Order Vanguard Pro workspaces. Free protection "
    55 "remains available."
    56 msgstr ""
    57 
    58 #: src/views/Lists.jsx:177
     47#: src/views/PrivacyLogs.jsx:182
     48msgid "30 days"
     49msgstr ""
     50
     51#: src/views/PrivacyLogs.jsx:179
     52msgid "7 days"
     53msgstr ""
     54
     55#: src/views/PrivacyLogs.jsx:185
     56msgid "90 days"
     57msgstr ""
     58
     59#: src/views/Lists.jsx:181
    5960msgid "A matching role, IP, or payment method bypasses blocklists and future protection rules."
    6061msgstr ""
    6162
    62 #: src/views/CircuitBreakers.jsx:73
     63#: src/views/CircuitBreakers.jsx:71
    6364msgid ""
    6465"A shared household or team billing email may affect more than one shopper. The default requires "
    … …  
    7475msgstr ""
    7576
    76 #: src/views/Dashboard.jsx:287
     77#: src/views/Dashboard.jsx:277
    7778msgid "API-level protection against card testing, bot orders, and fake checkouts."
    7879msgstr ""
    7980
    80 #: src/views/Lists.jsx:142
     81#: src/views/Lists.jsx:144
    8182msgid "Access controls"
    8283msgstr ""
    8384
    84 #: src/components/LicenseNotice.jsx:45
    85 msgid "Activate license"
    86 msgstr ""
    87 
    88 #: src/views/Placeholder.jsx:104
    89 msgid "Active"
    90 msgstr ""
    91 
    92 #: src/navigation.js:32 src/views/ActivityLog.jsx:254
     85#: src/navigation.js:26 src/views/ActivityLog.jsx:207
    9386msgid "Activity Log"
    9487msgstr ""
    9588
    96 #: src/views/PrivacyLogs.jsx:161
    97 msgid "Activity history is retained for 7 days, with daily background pruning."
    98 msgstr ""
    99 
    100 #: src/components/SearchMultiSelect.jsx:197
     89#: src/components/SearchMultiSelect.jsx:209
    10190msgid "Add key"
    10291msgstr ""
    10392
    104 #: src/views/ActivityLog.jsx:53 src/views/Dashboard.jsx:45
     93#: src/views/ActivityLog.jsx:52 src/views/Dashboard.jsx:34
    10594msgid "Add-to-cart blocked"
    10695msgstr ""
    10796
    108 #: src/views/Settings.jsx:178
     97#: src/views/Settings.jsx:180
    10998msgid "Adds an invisible field that human shoppers never interact with."
    11099msgstr ""
    111100
    112 #: src/components/Topbar.jsx:87
     101#: src/components/Topbar.jsx:83
    113102msgid "Admin"
    114103msgstr ""
    115104
    116 #: src/views/Settings.jsx:255
     105#: src/views/Settings.jsx:266
    117106msgid "Advanced Store API controls"
    118107msgstr ""
    119108
    120 #: src/views/StoreApiGuard.jsx:258
     109#: src/views/StoreApiGuard.jsx:294
    121110msgid "Advanced request controls"
    122111msgstr ""
    123112
    124 #: src/views/Settings.jsx:219
     113#: src/views/Settings.jsx:226
    125114msgid "Alert email"
    126115msgstr ""
    127116
    128 #: src/navigation.js:59
    129 msgid "Alerts"
    130 msgstr ""
    131 
    132 #: src/views/ActivityLog.jsx:280
     117#: src/views/ActivityLog.jsx:234
    133118msgid "All events"
    134119msgstr ""
    135120
    136 #: src/views/CircuitBreakers.jsx:410
     121#: src/views/CircuitBreakers.jsx:402
    137122msgid "All ready"
    138123msgstr ""
    … …  
    142127msgstr ""
    143128
    144 #: src/views/StoreApiGuard.jsx:249
     129#: src/views/StoreApiGuard.jsx:284
    145130msgid "Always"
    146131msgstr ""
    147132
    148 #: src/views/ActivityLog.jsx:314
     133#: src/views/ActivityLog.jsx:269
    149134msgid "Apply filters"
    150 msgstr ""
    151 
    152 #: src/navigation.js:91
    153 msgid "Attack Cleanup"
    154 msgstr ""
    155 
    156 #: src/views/Placeholder.jsx:95
    157 msgid "Attack Cleanup and Pro automation tools are ready from the Order Vanguard navigation."
    158 msgstr ""
    159 
    160 #: src/views/Dashboard.jsx:400
    161 msgid "Attack cleanup is available"
    162 msgstr ""
    163 
    164 #: src/views/Placeholder.jsx:74
    165 msgid "Attack cleanup, automated blocking, longer history, and advanced alerts are planned for Pro."
    166 msgstr ""
    167 
    168 #: src/navigation.js:85
    169 msgid "Auto Blocklisting"
    170135msgstr ""
    171136
    … …  
    174139msgstr ""
    175140
    176 #: src/views/StoreApiGuard.jsx:286
    177 msgid "Available in Pro"
    178 msgstr ""
    179 
    180 #: src/views/StoreApiGuard.jsx:211
     141#: src/views/StoreApiGuard.jsx:237
    181142msgid "Batch inspection"
    182143msgstr ""
    183144
    184 #: src/views/ActivityLog.jsx:57 src/views/Dashboard.jsx:49
     145#: src/views/ActivityLog.jsx:56 src/views/Dashboard.jsx:38
    185146msgid "Batch operation blocked"
    186147msgstr ""
    … …  
    194155msgstr ""
    195156
    196 #: src/views/Lists.jsx:215
     157#: src/views/Lists.jsx:219
    197158msgid "Billing emails"
    198159msgstr ""
    199160
    200 #: src/views/CircuitBreakers.jsx:51 src/views/CircuitBreakers.jsx:71
     161#: src/views/CircuitBreakers.jsx:49 src/views/CircuitBreakers.jsx:69
    201162msgid "Block duration (seconds)"
    202163msgstr ""
    … …  
    210171msgstr ""
    211172
    212 #: src/views/Dashboard.jsx:306
     173#: src/views/Dashboard.jsx:311
    213174msgid "Blocked today"
    214175msgstr ""
    … …  
    218179msgstr ""
    219180
    220 #: src/views/StoreApiGuard.jsx:279
     181#: src/views/StoreApiGuard.jsx:325
    221182msgid "Blocking enabled"
    222183msgstr ""
    223184
    224 #: src/views/Lists.jsx:203
     185#: src/views/Lists.jsx:207
    225186msgid "Blocklist"
    226187msgstr ""
    227188
    228 #: src/views/Placeholder.jsx:47
    229 msgid "Blocklist and whitelist entries will be managed from this workspace."
    230 msgstr ""
    231 
    232 #: src/views/ActivityLog.jsx:63 src/views/Dashboard.jsx:55
     189#: src/views/ActivityLog.jsx:62 src/views/Dashboard.jsx:44
    233190msgid "Blocklist matched"
    234191msgstr ""
    … …  
    242199msgstr ""
    243200
    244 #: src/views/StoreApiGuard.jsx:189
     201#: src/views/StoreApiGuard.jsx:203
    245202msgid "Cart and batch"
    246203msgstr ""
    247204
    248 #: src/views/StoreApiGuard.jsx:139
     205#: src/views/StoreApiGuard.jsx:143
    249206msgid "Cart mutation rate limit"
    250207msgstr ""
    251208
    252 #: src/components/LicenseNotice.jsx:78
    253 msgid "Check license"
    254 msgstr ""
    255 
    256 #: src/views/StoreApiGuard.jsx:282
    257 msgid "Checkout Block field"
    258 msgstr ""
    259 
    260 #: src/views/Settings.jsx:270 src/views/StoreApiGuard.jsx:273
     209#: src/views/Settings.jsx:287 src/views/StoreApiGuard.jsx:312
    261210msgid "Checkout block detected"
    262211msgstr ""
    263212
    264 #: src/views/ActivityLog.jsx:55 src/views/Dashboard.jsx:47
     213#: src/views/ActivityLog.jsx:54 src/views/Dashboard.jsx:36
    265214msgid "Checkout blocked"
    266215msgstr ""
    … …  
    274223msgstr ""
    275224
    276 #: src/views/Dashboard.jsx:321
     225#: src/views/Dashboard.jsx:341
    277226msgid "Checkout paused"
    278227msgstr ""
    279228
    280 #: src/views/Settings.jsx:69
     229#: src/views/Settings.jsx:68
    281230msgid "Choose what Order Vanguard records and how it responds to suspicious checkout traffic."
    282231msgstr ""
    283232
    284 #: src/views/Settings.jsx:221
     233#: src/views/Settings.jsx:228
    285234msgid "Choose where important protection notices will be delivered."
    286235msgstr ""
    287236
    288 #: src/views/PrivacyLogs.jsx:174
     237#: src/views/PrivacyLogs.jsx:203
    289238msgid "Choose whether uninstalling Order Vanguard removes its local records."
    290239msgstr ""
    291240
    292 #: src/navigation.js:43 src/views/CircuitBreakers.jsx:387
     241#: src/navigation.js:31 src/views/CircuitBreakers.jsx:379
    293242msgid "Circuit Breakers"
    294243msgstr ""
    295244
    296 #: src/views/CircuitBreakers.jsx:460
     245#: src/views/CircuitBreakers.jsx:455
    297246msgid "Circuit breaker settings saved"
    298247msgstr ""
    299248
    300 #: src/views/Dashboard.jsx:321
     249#: src/views/Dashboard.jsx:342
    301250msgid "Circuit breakers"
    302251msgstr ""
    303252
    304 #: src/views/Placeholder.jsx:27
    305 msgid "Circuit breakers are standing by"
    306 msgstr ""
    307 
    308 #: src/views/Settings.jsx:271 src/views/StoreApiGuard.jsx:274
     253#: src/views/Settings.jsx:288 src/views/StoreApiGuard.jsx:313
    309254msgid "Classic checkout detected"
    310255msgstr ""
    311256
    312 #: src/views/Settings.jsx:177
     257#: src/views/Settings.jsx:176
    313258msgid "Classic checkout honeypot"
    314259msgstr ""
    315260
    316 #: src/views/ActivityLog.jsx:318
     261#: src/views/ActivityLog.jsx:273
    317262msgid "Clear"
    318263msgstr ""
    319264
    320 #: src/views/ActivityLog.jsx:332 src/views/ActivityLog.jsx:333
     265#: src/views/ActivityLog.jsx:292 src/views/ActivityLog.jsx:296
    321266msgid "Clear attacker filter"
    322267msgstr ""
    323268
    324 #: src/views/PrivacyLogs.jsx:116
     269#: src/views/PrivacyLogs.jsx:125
    325270msgid "Client IP source"
    326271msgstr ""
    327272
    328 #: src/components/LicenseNotice.jsx:164
    329 msgid "Close"
    330 msgstr ""
    331 
    332 #: src/components/Sidebar.jsx:25 src/components/Sidebar.jsx:53 src/components/Sidebar.jsx:54
     273#: src/components/Sidebar.jsx:26 src/components/Sidebar.jsx:55 src/components/Sidebar.jsx:56
    333274msgid "Close navigation"
    334275msgstr ""
    335276
    336 #: src/views/PrivacyLogs.jsx:128
     277#: src/views/PrivacyLogs.jsx:138
    337278msgid "Cloudflare CF-Connecting-IP"
    338279msgstr ""
    339280
    340 #: src/components/Sidebar.jsx:41 src/components/Sidebar.jsx:45
     281#: src/components/Sidebar.jsx:43 src/components/Sidebar.jsx:47
    341282msgid "CoderEmbassy"
    342283msgstr ""
    343284
    344 #: coderembassy-order-vanguard.php:3 src/views/Dashboard.jsx:286
     285#: coderembassy-order-vanguard.php:3 src/views/Dashboard.jsx:274
    345286msgid "CoderEmbassy Order Vanguard"
    346287msgstr ""
    … …  
    350291msgstr ""
    351292
    352 #: src/views/Settings.jsx:168
     293#: src/views/Settings.jsx:167
    353294msgid "Collect low-friction signals without changing legitimate checkout fields."
    354295msgstr ""
    355296
    356 #: src/views/StoreApiGuard.jsx:152
     297#: src/views/StoreApiGuard.jsx:160
    357298msgid "Configured in Monitor mode and activated only while Enforce mode is effective."
    358299msgstr ""
    359300
    360 #: src/views/Lists.jsx:297
     301#: src/views/Lists.jsx:331
    361302msgid "Confirm gateway keys in WooCommerce payment settings before adding an exception."
    362303msgstr ""
    363304
    364 #: src/views/CircuitBreakers.jsx:91
     305#: src/views/CircuitBreakers.jsx:89
    365306msgid "Cooldown (seconds)"
    366307msgstr ""
    … …  
    374315msgstr ""
    375316
    376 #: src/views/Lists.jsx:292
     317#: src/views/Lists.jsx:323
    377318msgid "Custom gateway key"
    378319msgstr ""
    … …  
    382323msgstr ""
    383324
    384 #: src/views/PrivacyLogs.jsx:149
     325#: src/views/PrivacyLogs.jsx:190
     326msgid "Daily background pruning permanently removes activity rows older than the selected period."
     327msgstr ""
     328
     329#: src/views/PrivacyLogs.jsx:162
    385330msgid "Daily pruning keeps the attack-volume table bounded."
    386331msgstr ""
    387332
    388 #: src/navigation.js:27
     333#: src/navigation.js:21
    389334msgid "Dashboard"
    390335msgstr ""
    391336
    392 #: src/views/PrivacyLogs.jsx:183
     337#: src/views/PrivacyLogs.jsx:212
    393338msgid "Delete all data on uninstall"
    394339msgstr ""
    395340
    396 #: src/views/ActivityLog.jsx:393
     341#: src/views/ActivityLog.jsx:341
    397342msgid "Delete selected"
    398343msgstr ""
    399344
    400 #: src/views/ActivityLog.jsx:392
     345#: src/views/ActivityLog.jsx:340
    401346msgid "Deleting..."
    402347msgstr ""
    403348
    404 #: src/views/CircuitBreakers.jsx:123
     349#: src/views/CircuitBreakers.jsx:121
    405350msgid "Disabled"
    406351msgstr ""
    407352
    408 #: src/views/Settings.jsx:108
     353#: src/views/Settings.jsx:107
    409354msgid "Disabling this keeps your configuration while suspending all blocking."
    410355msgstr ""
    411356
    412 #: src/views/Dashboard.jsx:409
    413 msgid "Dismiss cleanup suggestion"
    414 msgstr ""
    415 
    416 #: src/components/LicenseNotice.jsx:105
    417 msgid "Dismiss license notice"
    418 msgstr ""
    419 
    420 #: src/views/CircuitBreakers.jsx:182
     357#: src/views/CircuitBreakers.jsx:181
    421358msgid "Distributed defense"
    422359msgstr ""
    423360
    424 #: src/views/Settings.jsx:198
     361#: src/views/Settings.jsx:202
    425362msgid "Do not flag"
    426363msgstr ""
    427364
    428 #: src/views/Lists.jsx:224
     365#: src/views/Lists.jsx:231
    429366msgid "Domain names without @, one per line."
    430367msgstr ""
    431368
    432 #: src/views/StoreApiGuard.jsx:278
     369#: src/views/StoreApiGuard.jsx:321
    433370msgid "Effective behavior"
    434371msgstr ""
    435372
    436 #: src/views/Settings.jsx:148
     373#: src/views/Settings.jsx:147
    437374msgid "Effective mode"
    438375msgstr ""
    439376
    440 #: src/views/ActivityLog.jsx:49 src/views/Dashboard.jsx:41
     377#: src/views/ActivityLog.jsx:48 src/views/Dashboard.jsx:30
    441378msgid "Email breaker tripped"
    442379msgstr ""
    443380
    444 #: src/views/Lists.jsx:223
     381#: src/views/Lists.jsx:230
    445382msgid "Email domains"
    446383msgstr ""
    447384
    448 #: includes/class-ceog-rest-controller.php:392 src/views/Settings.jsx:343 src/views/StoreApiGuard.jsx:343
     385#: includes/class-ceog-rest-controller.php:392 src/views/Settings.jsx:371 src/views/StoreApiGuard.jsx:396
    449386msgid "Emergency Lockdown cannot be enabled while the WooCommerce Checkout block is active."
    450387msgstr ""
    451388
    452 #: src/views/StoreApiGuard.jsx:123
     389#: src/views/StoreApiGuard.jsx:122
    453390msgid "Emergency Lockdown is enabled"
    454391msgstr ""
    455392
    456 #: src/views/Settings.jsx:323 src/views/StoreApiGuard.jsx:326
     393#: src/views/Settings.jsx:348 src/views/StoreApiGuard.jsx:373
    457394msgid "Emergency Store API Checkout Lockdown"
    458395msgstr ""
    … …  
    462399msgstr ""
    463400
    464 #: src/views/Settings.jsx:117
     401#: src/views/Settings.jsx:116
    465402msgid "Enable Order Vanguard"
    466403msgstr ""
    467404
    468 #: src/views/StoreApiGuard.jsx:151
     405#: src/views/StoreApiGuard.jsx:156
    469406msgid "Enable Order Vanguard rate limiting"
    470407msgstr ""
    471408
    472 #: src/views/Settings.jsx:230
     409#: src/views/Settings.jsx:237
    473410msgid "Enable email alerts"
    474411msgstr ""
    475412
    476 #: src/views/CircuitBreakers.jsx:194
     413#: src/views/CircuitBreakers.jsx:193
    477414msgid "Enable this breaker"
    478415msgstr ""
    479416
    480 #: src/views/Settings.jsx:278
     417#: src/views/Settings.jsx:300
    481418msgid "Enabled in WooCommerce"
    482419msgstr ""
    483420
    484 #: src/components/ModeControl.jsx:40 src/views/ActivityLog.jsx:460 src/views/Dashboard.jsx:315
     421#: src/components/ModeControl.jsx:39 src/views/ActivityLog.jsx:425 src/views/Dashboard.jsx:322
    485422msgid "Enforce"
    486423msgstr ""
    487424
    488 #: src/views/Dashboard.jsx:297 src/views/Settings.jsx:151 src/views/StoreApiGuard.jsx:102
     425#: src/views/Dashboard.jsx:297 src/views/Settings.jsx:150 src/views/StoreApiGuard.jsx:100
    489426msgid "Enforcing"
    490427msgstr ""
    … …  
    494431msgstr ""
    495432
    496 #: src/views/ActivityLog.jsx:274
     433#: src/views/ActivityLog.jsx:227
    497434msgid "Event type"
    498435msgstr ""
    499436
    500 #: src/views/ActivityLog.jsx:408
    501 msgid ""
    502 "Events recorded by future protection rules will appear here. Adjust the filters if you expected "
    503 "existing rows."
    504 msgstr ""
    505 
    506 #: src/views/StoreApiGuard.jsx:230
     437#: src/views/StoreApiGuard.jsx:256
    507438msgid "Every embedded path and method is checked before WooCommerce executes the batch."
    508439msgstr ""
    509440
    510 #: src/views/Lists.jsx:216
     441#: src/views/Lists.jsx:220
    511442msgid "Exact email addresses, one per line."
    512443msgstr ""
    513444
    514 #: src/views/ActivityLog.jsx:371
    515 msgid "Export filtered CSV"
    516 msgstr ""
    517 
    518 #: src/views/ActivityLog.jsx:236
    519 #. %d: exported rows.
    520 msgid "Exported %d matching events."
    521 msgstr ""
    522 
    523 #: src/views/ActivityLog.jsx:230
    524 #. 1: exported rows, 2: total matching rows.
    525 msgid "Exported the first %1$d of %2$d matching events."
    526 msgstr ""
    527 
    528 #: src/views/CircuitBreakers.jsx:205
     445#: src/views/CircuitBreakers.jsx:204
    529446msgid "Failed orders"
    530447msgstr ""
    531448
    532 #: src/views/CircuitBreakers.jsx:195
     449#: src/views/CircuitBreakers.jsx:194
    533450msgid "Failed orders feed this sliding window in both Monitor and Enforce modes."
    534451msgstr ""
    535452
    536 #: src/views/CircuitBreakers.jsx:385
     453#: src/views/CircuitBreakers.jsx:377
    537454msgid "Failed-order protection"
    538455msgstr ""
    539456
    540 #: src/views/Settings.jsx:195
     457#: src/views/Settings.jsx:199
    541458msgid "Flag for review"
    542459msgstr ""
    543460
    544 #: src/views/Settings.jsx:347 src/views/StoreApiGuard.jsx:347
     461#: src/views/Settings.jsx:375 src/views/StoreApiGuard.jsx:400
    545462msgid ""
    546463"For classic-checkout stores under active attack only. This stops Store API checkout and must never "
    … …  
    548465msgstr ""
    549466
    550 #: src/components/Sidebar.jsx:89 src/views/Dashboard.jsx:276
    551 msgid "Free"
    552 msgstr ""
    553 
    554 #: src/views/ActivityLog.jsx:290
     467#: src/views/ActivityLog.jsx:245
    555468msgid "From date"
    556469msgstr ""
    557470
    558 #: src/views/PrivacyLogs.jsx:93
     471#: src/views/PrivacyLogs.jsx:102
    559472msgid ""
    560473"Full IP addresses are personal data. Enable this only when your privacy policy and legal basis "
    … …  
    562475msgstr ""
    563476
    564 #: src/views/PrivacyLogs.jsx:82
     477#: src/views/PrivacyLogs.jsx:85
    565478msgid "Full addresses will be visible in new log rows."
    566479msgstr ""
    567480
    568 #: src/views/Settings.jsx:65
     481#: src/views/Settings.jsx:64
    569482msgid "General"
    570483msgstr ""
    … …  
    574487msgstr ""
    575488
    576 #: src/views/CircuitBreakers.jsx:80
     489#: src/views/CircuitBreakers.jsx:78
    577490msgid "Global breaker"
    578491msgstr ""
    579492
    580 #: src/views/ActivityLog.jsx:51 src/views/Dashboard.jsx:43
     493#: src/views/ActivityLog.jsx:50 src/views/Dashboard.jsx:32
    581494msgid "Global breaker tripped"
    582495msgstr ""
    583496
    584 #: src/views/Settings.jsx:106
     497#: src/views/Settings.jsx:105
    585498msgid "Global protection"
    586499msgstr ""
    587500
    588 #: src/navigation.js:80
     501#: src/navigation.js:56
    589502msgid "Help"
    590503msgstr ""
    591504
    592 #: src/navigation.js:37
    593 msgid "History & Reports"
    594 msgstr ""
    595 
    596 #: src/views/ActivityLog.jsx:61 src/views/Dashboard.jsx:53
     505#: src/views/ActivityLog.jsx:60 src/views/Dashboard.jsx:42
    597506msgid "Honeypot triggered"
    598507msgstr ""
    599508
    600 #: src/views/Settings.jsx:315 src/views/Settings.jsx:363 src/views/StoreApiGuard.jsx:319 src/views/StoreApiGuard.jsx:360
     509#: src/views/Settings.jsx:340 src/views/Settings.jsx:391 src/views/StoreApiGuard.jsx:365 src/views/StoreApiGuard.jsx:416
    601510msgid "I understand the risks"
    602511msgstr ""
    603512
    604 #: src/views/ActivityLog.jsx:430
     513#: src/views/ActivityLog.jsx:391
    605514msgid "IP"
    606515msgstr ""
    607516
    608 #: src/views/Lists.jsx:231
     517#: src/views/Lists.jsx:241
    609518msgid "IP addresses"
    610519msgstr ""
    611520
    612 #: src/views/PrivacyLogs.jsx:83
     521#: src/views/PrivacyLogs.jsx:89
    613522msgid "IP addresses are anonymized for display."
    614523msgstr ""
    615524
    616 #: src/views/Placeholder.jsx:56
    617 msgid "IP anonymization, trusted proxy handling, retention, and uninstall controls will live here."
    618 msgstr ""
    619 
    620 #: src/views/PrivacyLogs.jsx:68
     525#: src/views/PrivacyLogs.jsx:71
    621526msgid "IP display"
    622527msgstr ""
    623528
    624 #: src/views/Lists.jsx:232
     529#: src/views/Lists.jsx:242
    625530msgid "IPv4 matches exactly; IPv6 matches its entire /64 network."
    626531msgstr ""
    627532
    628 #: src/views/Lists.jsx:261
     533#: src/views/Lists.jsx:274
    629534msgid "IPv6 exceptions cover the entered /64 network."
    630535msgstr ""
    631536
    632 #: src/views/StoreApiGuard.jsx:226
     537#: src/views/StoreApiGuard.jsx:252
    633538msgid "Inspection active"
    634539msgstr ""
    635540
    636 #: src/views/StoreApiGuard.jsx:227
     541#: src/views/StoreApiGuard.jsx:253
    637542msgid "Inspection unavailable"
    638543msgstr ""
    639544
    640 #: src/views/Dashboard.jsx:329
     545#: src/views/Dashboard.jsx:356
    641546msgid ""
    642547"Keep Monitor mode on while Order Vanguard records traffic. Switch to Enforce after the activity log "
    … …  
    648553msgstr ""
    649554
    650 #: src/views/CircuitBreakers.jsx:62
     555#: src/views/CircuitBreakers.jsx:60
    651556msgid "Links rotating IPs when repeated failures use the same billing email."
    652557msgstr ""
    653558
    654 #: includes/class-ceog-lists.php:527 src/navigation.js:65 src/views/Lists.jsx:144
     559#: includes/class-ceog-lists.php:527 src/navigation.js:41 src/views/Lists.jsx:146
    655560msgid "Lists"
    656561msgstr ""
    657562
    658 #: src/views/Lists.jsx:311
     563#: src/views/Lists.jsx:345
    659564msgid "Lists saved"
    660565msgstr ""
    661566
    662 #: src/views/ActivityLog.jsx:401
     567#: src/views/ActivityLog.jsx:350
    663568msgid "Loading protection events..."
    664569msgstr ""
    665570
    666 #: src/views/PrivacyLogs.jsx:59
     571#: src/views/PrivacyLogs.jsx:62
    667572msgid "Local only"
    668573msgstr ""
    669574
    670 #: src/views/PrivacyLogs.jsx:49
     575#: src/views/PrivacyLogs.jsx:51
    671576msgid "Local, privacy-first records"
    672577msgstr ""
    673578
    674 #: src/views/StoreApiGuard.jsx:245
     579#: src/views/StoreApiGuard.jsx:277
    675580msgid "Logged"
    676581msgstr ""
    … …  
    680585msgstr ""
    681586
    682 #: src/views/StoreApiGuard.jsx:279
     587#: src/views/StoreApiGuard.jsx:326
    683588msgid "Logging only"
    684589msgstr ""
    685590
    686 #: src/views/StoreApiGuard.jsx:244
     591#: src/views/StoreApiGuard.jsx:273
    687592msgid "Malformed batches"
    688593msgstr ""
    689594
    690 #: src/views/Lists.jsx:146
     595#: src/views/Lists.jsx:148
    691596msgid "Manually block known sources and preserve trusted checkout paths."
    692597msgstr ""
    693598
    694 #: src/views/Lists.jsx:205
     599#: src/views/Lists.jsx:209
    695600msgid "Matches are logged in Monitor mode and stopped in Enforce mode."
    696601msgstr ""
    697602
    698 #: src/views/StoreApiGuard.jsx:240
     603#: src/views/StoreApiGuard.jsx:268
    699604msgid "Maximum operations"
    700605msgstr ""
    701606
    702 #: src/views/ActivityLog.jsx:429
     607#: src/views/ActivityLog.jsx:390
    703608msgid "Mode"
    704609msgstr ""
    705610
    706 #: src/components/ModeControl.jsx:30 src/views/ActivityLog.jsx:461 src/views/Dashboard.jsx:315
     611#: src/components/ModeControl.jsx:29 src/views/ActivityLog.jsx:426 src/views/Dashboard.jsx:323
    707612msgid "Monitor"
    708613msgstr ""
    709614
    710 #: src/views/Placeholder.jsx:20
    711 msgid "Monitor and blocked events will appear here with server-side filters and pagination."
    712 msgstr ""
    713 
    714 #: src/views/ActivityLog.jsx:65 src/views/Dashboard.jsx:57
     615#: src/views/ActivityLog.jsx:64 src/views/Dashboard.jsx:46
    715616msgid "Monitor decision"
    716617msgstr ""
    717618
    718 #: src/views/Dashboard.jsx:327
     619#: src/views/Dashboard.jsx:350
    719620msgid "Monitor first"
    720621msgstr ""
    721622
    722 #: src/views/Settings.jsx:134
     623#: src/views/Settings.jsx:133
    723624msgid "Monitor records decisions. Enforce applies them at checkout."
    724625msgstr ""
    725626
    726 #: src/views/Dashboard.jsx:297 src/views/Settings.jsx:152 src/views/StoreApiGuard.jsx:103
     627#: src/views/Dashboard.jsx:298 src/views/Settings.jsx:151 src/views/StoreApiGuard.jsx:101
    727628msgid "Monitoring"
    728629msgstr ""
    729630
    730 #: src/views/Placeholder.jsx:65
    731 msgid "Monitoring guidance and checkout compatibility notes will be available here."
    732 msgstr ""
    733 
    734 #: src/views/Dashboard.jsx:283
     631#: src/views/Dashboard.jsx:270
    735632msgid "Monitoring traffic"
    736633msgstr ""
    737634
    738 #: src/views/Settings.jsx:275
     635#: src/views/Settings.jsx:296
    739636msgid "Native checkout limiter"
    740637msgstr ""
    741638
    742 #: src/views/ActivityLog.jsx:528
     639#: src/views/ActivityLog.jsx:366
     640msgid "New protection events will appear here. Adjust the filters if you expected existing rows."
     641msgstr ""
     642
     643#: src/views/ActivityLog.jsx:507
    743644msgid "Next"
    744645msgstr ""
    … …  
    748649msgstr ""
    749650
    750 #: src/views/Placeholder.jsx:45
    751 msgid "No list entries yet"
    752 msgstr ""
    753 
    754651#: includes/class-ceog-lists.php:523
    755652msgid "No list match"
    756653msgstr ""
    757654
    758 #: src/views/Lists.jsx:276
     655#: src/views/Lists.jsx:298
    759656msgid "No matching WordPress roles."
    760657msgstr ""
    761658
    762 #: src/views/Lists.jsx:290
     659#: src/views/Lists.jsx:318
    763660msgid "No matching payment methods."
    764661msgstr ""
    765662
    766 #: src/views/ActivityLog.jsx:406
     663#: src/views/ActivityLog.jsx:360
    767664msgid "No matching protection events"
    768665msgstr ""
    769666
    770 #: src/views/ActivityLog.jsx:510
     667#: src/views/ActivityLog.jsx:489
    771668msgid "No pages"
    772669msgstr ""
    773670
    774 #: src/views/Dashboard.jsx:390 src/views/Placeholder.jsx:18
     671#: src/views/Dashboard.jsx:464
    775672msgid "No protection events yet"
    776673msgstr ""
    … …  
    780677msgstr ""
    781678
    782 #: src/views/Settings.jsx:279
     679#: src/views/Settings.jsx:301
    783680msgid "Not enabled"
    784681msgstr ""
    785682
    786 #: src/views/Placeholder.jsx:100
    787 msgid "Open Attack Cleanup"
    788 msgstr ""
    789 
    790 #: src/components/Topbar.jsx:46 src/components/Topbar.jsx:49
     683#: src/components/Topbar.jsx:47 src/components/Topbar.jsx:50
    791684msgid "Open navigation"
    792685msgstr ""
    793686
    794 #: src/views/Dashboard.jsx:380
     687#: src/views/Dashboard.jsx:448 src/views/Dashboard.jsx:452
    795688msgid "Open order"
    796689msgstr ""
    797690
    798 #: src/views/StoreApiGuard.jsx:260
     691#: src/views/StoreApiGuard.jsx:297
    799692msgid "Opt-in compatibility-sensitive rules for stores under elevated attack pressure."
    800693msgstr ""
    801694
    802 #: src/views/ActivityLog.jsx:433
     695#: src/views/ActivityLog.jsx:394
    803696msgid "Order"
    804697msgstr ""
    805698
    806 #: includes/class-ceog-admin.php:42 includes/class-ceog-admin.php:43 includes/class-ceog-lists.php:488 src/components/Sidebar.jsx:63 src/components/Topbar.jsx:55
     699#: includes/class-ceog-admin.php:42 includes/class-ceog-admin.php:43 includes/class-ceog-lists.php:488 src/components/Sidebar.jsx:65 src/components/Topbar.jsx:56
    807700msgid "Order Vanguard"
    808701msgstr ""
    809702
    810 #: src/views/Placeholder.jsx:72
    811 msgid "Order Vanguard Pro"
    812 msgstr ""
    813 
    814 #: src/views/Placeholder.jsx:92
    815 msgid "Order Vanguard Pro is active"
    816 msgstr ""
    817 
    818 #: src/components/LicenseNotice.jsx:41
    819 msgid "Order Vanguard Pro requires a license key for commercial updates and continued Pro workspace access."
    820 msgstr ""
    821 
    822 #: includes/class-ceog-plugin.php:130 src/views/Dashboard.jsx:268
     703#: includes/class-ceog-plugin.php:130 src/views/Dashboard.jsx:250
    823704msgid "Order Vanguard Safe Mode is active - protection is monitoring only."
    824705msgstr ""
    825706
    826 #: includes/class-ceog-admin.php:147
     707#: includes/class-ceog-admin.php:143
    827708msgid ""
    828709"Order Vanguard admin assets are missing. Please reinstall the plugin from a complete release "
    … …  
    834715msgstr ""
    835716
    836 #: src/views/Dashboard.jsx:403
    837 msgid ""
    838 "Order Vanguard blocked %1$s attempts. %2$s failed or junk orders remain - Pro can clean these up "
    839 "automatically."
    840 msgstr ""
    841 
    842 #: src/views/StoreApiGuard.jsx:192
     717#: src/views/StoreApiGuard.jsx:206
    843718msgid "Order Vanguard configured"
    844719msgstr ""
    … …  
    848723msgstr ""
    849724
    850 #: src/api.js:94
     725#: src/api.js:86
    851726msgid "Order Vanguard could not load this data. Please try again."
    852727msgstr ""
    853728
    854 #: src/views/StoreApiGuard.jsx:193
     729#: src/views/StoreApiGuard.jsx:210
    855730msgid "Order Vanguard disabled"
    856731msgstr ""
    857732
    858 #: src/views/Placeholder.jsx:63
     733#: src/views/Placeholder.jsx:14
    859734msgid "Order Vanguard help"
    860735msgstr ""
    861736
    862 #: src/components/Sidebar.jsx:34
     737#: src/components/Sidebar.jsx:33
    863738msgid "Order Vanguard navigation"
    864739msgstr ""
    865740
    866 #: src/views/ActivityLog.jsx:211
    867 msgid "Order Vanguard returned an invalid CSV export."
    868 msgstr ""
    869 
    870 #: src/views/PrivacyLogs.jsx:51
     741#: src/views/PrivacyLogs.jsx:54
    871742msgid ""
    872743"Order Vanguard stores protection events on this WordPress site and sends nothing to external "
    … …  
    886757msgstr ""
    887758
    888 #: src/views/ActivityLog.jsx:59 src/views/Dashboard.jsx:51
     759#: src/views/ActivityLog.jsx:58 src/views/Dashboard.jsx:40
    889760msgid "Order flagged"
    890761msgstr ""
    891762
    892 #: src/views/Settings.jsx:166
     763#: src/views/Settings.jsx:165
    893764msgid "Order rules"
    894765msgstr ""
    … …  
    898769msgstr ""
    899770
    900 #: src/views/ActivityLog.jsx:506
     771#: src/views/ActivityLog.jsx:485
    901772#. 1: current page, 2: total pages.
    902773msgid "Page %1$d of %2$d"
    903774msgstr ""
    904775
    905 #: src/views/Settings.jsx:205
     776#: src/views/Settings.jsx:212
    906777msgid "Paid orders are never moved; this rule does not block checkout."
    907778msgstr ""
    908779
    909 #: src/views/CircuitBreakers.jsx:82
     780#: src/views/CircuitBreakers.jsx:80
    910781msgid "Pauses non-whitelisted checkout when failures arrive across the whole store."
    911782msgstr ""
    912783
    913 #: src/views/Lists.jsx:280
     784#: src/views/Lists.jsx:305
    914785msgid "Payment methods"
    915786msgstr ""
    … …  
    919790msgstr ""
    920791
    921 #: src/views/CircuitBreakers.jsx:40
     792#: src/views/CircuitBreakers.jsx:38
    922793msgid "Per-IP breaker"
    923794msgstr ""
    924795
    925 #: src/views/ActivityLog.jsx:47 src/views/Dashboard.jsx:39
     796#: src/views/ActivityLog.jsx:46 src/views/Dashboard.jsx:28
    926797msgid "Per-IP breaker tripped"
    927 msgstr ""
    928 
    929 #: src/views/Placeholder.jsx:29
    930 msgid "Per-IP, per-email, and global checkout protection will report their live state here."
    931798msgstr ""
    932799
    … …  
    935802msgstr ""
    936803
    937 #: src/views/CircuitBreakers.jsx:60
     804#: src/views/CircuitBreakers.jsx:58
    938805msgid "Per-email breaker"
    939806msgstr ""
    940807
    941 #: src/views/ActivityLog.jsx:176
     808#: src/views/ActivityLog.jsx:170
    942809#. %d: number of selected log rows.
    943810msgid "Permanently delete %d selected event(s)?"
    944811msgstr ""
    945812
    946 #: src/views/StoreApiGuard.jsx:197
     813#: src/views/StoreApiGuard.jsx:217
    947814msgid "Place order"
    948815msgstr ""
    949816
    950 #: src/views/Settings.jsx:204
     817#: src/views/Settings.jsx:208
    951818msgid "Place unpaid flagged orders on hold"
    952819msgstr ""
    953820
    954 #: src/views/Settings.jsx:156
     821#: src/views/Settings.jsx:155
    955822msgid "Plugin version"
    956823msgstr ""
    957824
    958 #: src/views/ActivityLog.jsx:370
    959 msgid "Preparing CSV..."
    960 msgstr ""
    961 
    962 #: src/views/StoreApiGuard.jsx:213
     825#: src/views/StoreApiGuard.jsx:239
    963826msgid "Prevents protected operations from being hidden inside one Store API request."
    964827msgstr ""
    965828
    966 #: src/views/ActivityLog.jsx:520
     829#: src/views/ActivityLog.jsx:499
    967830msgid "Previous"
    968831msgstr ""
    969832
    970 #: src/navigation.js:75 src/views/PrivacyLogs.jsx:47
     833#: src/navigation.js:51 src/views/PrivacyLogs.jsx:48
    971834msgid "Privacy & Logs"
    972835msgstr ""
    973836
    974 #: src/views/PrivacyLogs.jsx:201
     837#: src/views/PrivacyLogs.jsx:231
    975838msgid "Privacy settings saved"
    976839msgstr ""
    977840
    978 #: src/views/Placeholder.jsx:54
    979 msgid "Privacy-first logging"
    980 msgstr ""
    981 
    982 #: src/views/Dashboard.jsx:276 src/views/Dashboard.jsx:399
    983 msgid "Pro"
    984 msgstr ""
    985 
    986 #: src/navigation.js:97
    987 msgid "Pro License"
    988 msgstr ""
    989 
    990 #: src/components/Sidebar.jsx:89
    991 msgid "Pro active"
    992 msgstr ""
    993 
    994 #: src/views/StoreApiGuard.jsx:285
    995 msgid "Pro honeypot active"
    996 msgstr ""
    997 
    998 #: src/views/StoreApiGuard.jsx:85
     841#: src/views/StoreApiGuard.jsx:83
    999842msgid "Protect cart mutations, checkout requests, and every operation embedded in a Store API batch."
    1000843msgstr ""
    1001844
    1002 #: src/views/CircuitBreakers.jsx:157 src/views/Dashboard.jsx:282
     845#: src/views/CircuitBreakers.jsx:157 src/views/Dashboard.jsx:269
    1003846msgid "Protection active"
    1004847msgstr ""
    1005848
    1006 #: src/views/Dashboard.jsx:280
     849#: src/views/Dashboard.jsx:267
    1007850msgid "Protection disabled"
    1008851msgstr ""
    1009852
    1010 #: src/views/Dashboard.jsx:59
     853#: src/views/Dashboard.jsx:48
    1011854msgid "Protection event"
    1012855msgstr ""
    1013856
    1014 #: src/views/ActivityLog.jsx:252
     857#: src/views/ActivityLog.jsx:205
    1015858msgid "Protection history"
    1016859msgstr ""
    1017860
    1018 #: src/views/CircuitBreakers.jsx:124
     861#: src/views/CircuitBreakers.jsx:123
    1019862msgid "Protection inactive"
    1020863msgstr ""
    1021864
    1022 #: src/views/Settings.jsx:121
     865#: src/views/Settings.jsx:120
    1023866msgid "Protection is disabled"
    1024867msgstr ""
    1025868
    1026 #: src/views/Settings.jsx:120
     869#: src/views/Settings.jsx:119
    1027870msgid "Protection is enabled"
    1028871msgstr ""
    1029872
    1030 #: src/components/ModeControl.jsx:20 src/views/Dashboard.jsx:296 src/views/Dashboard.jsx:316 src/views/Settings.jsx:132
     873#: src/components/ModeControl.jsx:19 src/views/Dashboard.jsx:294 src/views/Dashboard.jsx:325 src/views/Settings.jsx:131
    1031874msgid "Protection mode"
    1032875msgstr ""
    1033876
    1034 #: src/views/Settings.jsx:67
     877#: src/views/Settings.jsx:66
    1035878msgid "Protection settings"
    1036879msgstr ""
    1037880
    1038 #: src/views/Settings.jsx:374
     881#: src/views/Settings.jsx:402
    1039882msgid "Protection settings saved"
    1040883msgstr ""
    1041884
    1042 #: src/views/Dashboard.jsx:302
     885#: src/views/Dashboard.jsx:306
    1043886msgid "Protection summary"
    1044887msgstr ""
    1045888
    1046 #: src/views/PrivacyLogs.jsx:108
     889#: src/views/PrivacyLogs.jsx:117
    1047890msgid "Proxy headers remain untrusted unless you explicitly select your infrastructure."
    1048891msgstr ""
    1049892
    1050 #: src/views/CircuitBreakers.jsx:156 src/views/Dashboard.jsx:320 src/views/Settings.jsx:85
     893#: src/views/CircuitBreakers.jsx:156 src/views/Dashboard.jsx:337 src/views/Settings.jsx:84
    1051894msgid "Ready"
    1052895msgstr ""
    1053896
    1054 #: src/views/ActivityLog.jsx:432
     897#: src/views/ActivityLog.jsx:393
    1055898msgid "Reason"
    1056899msgstr ""
    1057900
    1058 #: src/views/Dashboard.jsx:363
     901#: src/views/Dashboard.jsx:419
    1059902msgid "Recent protection events"
    1060903msgstr ""
    1061904
    1062 #: src/views/Settings.jsx:239
     905#: src/views/Settings.jsx:246
    1063906msgid "Recipient"
    1064907msgstr ""
    1065908
    1066 #: src/views/CircuitBreakers.jsx:417 src/views/CircuitBreakers.jsx:418
     909#: src/views/CircuitBreakers.jsx:409 src/views/CircuitBreakers.jsx:413
    1067910msgid "Refresh breaker status"
    1068911msgstr ""
    1069912
    1070 #: src/views/ActivityLog.jsx:379 src/views/ActivityLog.jsx:380
     913#: src/views/ActivityLog.jsx:327 src/views/ActivityLog.jsx:328
    1071914msgid "Refresh events"
    1072915msgstr ""
    1073916
    1074 #: src/views/StoreApiGuard.jsx:245
     917#: src/views/StoreApiGuard.jsx:276
    1075918msgid "Rejected"
    1076919msgstr ""
    1077920
    1078 #: src/components/SearchMultiSelect.jsx:106 src/components/SearchMultiSelect.jsx:111
     921#: src/components/SearchMultiSelect.jsx:111 src/components/SearchMultiSelect.jsx:116
    1079922#. %s: selected role or payment-method key.
    1080923msgid "Remove %s"
    1081924msgstr ""
    1082925
    1083 #: src/views/PrivacyLogs.jsx:184
     926#: src/views/PrivacyLogs.jsx:216
    1084927msgid "Removes the log table and plugin options permanently."
    1085928msgstr ""
    1086929
    1087 #: src/components/LicenseNotice.jsx:171 src/components/LicenseNotice.jsx:64 src/components/LicenseNotice.jsx:71
    1088 msgid "Renew license"
    1089 msgstr ""
    1090 
    1091 #: src/views/PrivacyLogs.jsx:70
     930#: src/views/PrivacyLogs.jsx:73
    1092931msgid "Repeat-attacker correlation always uses a one-way HMAC hash."
    1093932msgstr ""
    1094933
    1095 #: src/views/StoreApiGuard.jsx:162
     934#: src/views/StoreApiGuard.jsx:170
    1096935msgid "Requests"
    1097936msgstr ""
    1098937
    1099 #: src/views/StoreApiGuard.jsx:295
     938#: src/views/StoreApiGuard.jsx:338
    1100939msgid "Requires an existing WooCommerce session for Store API cart mutations and batch equivalents."
    1101940msgstr ""
    1102941
    1103 #: src/views/Settings.jsx:288
     942#: src/views/Settings.jsx:313
    1104943msgid "Requires an existing WooCommerce session for Store API cart mutations."
    1105944msgstr ""
    1106945
    1107 #: src/views/PrivacyLogs.jsx:147
     946#: src/views/PrivacyLogs.jsx:160
    1108947msgid "Retention"
    1109948msgstr ""
    1110949
    1111 #: src/components/ErrorState.jsx:19
     950#: src/views/PrivacyLogs.jsx:170
     951msgid "Retention period"
     952msgstr ""
     953
     954#: src/components/ErrorState.jsx:22
    1112955msgid "Retry"
    1113956msgstr ""
    1114957
    1115 #: src/views/Dashboard.jsx:256 src/views/Dashboard.jsx:257
     958#: src/views/Dashboard.jsx:235 src/views/Dashboard.jsx:239
    1116959msgid "Retry dashboard update"
    1117960msgstr ""
    1118961
    1119 #: src/views/Settings.jsx:324
     962#: src/views/Settings.jsx:352
    1120963msgid "Returns 404 for Store API checkout requests, including checkout operations inside batch requests."
    1121964msgstr ""
    1122965
    1123 #: src/views/StoreApiGuard.jsx:327
     966#: src/views/StoreApiGuard.jsx:377
    1124967msgid "Returns 404 for direct and batch-wrapped Store API checkout operations."
    1125968msgstr ""
    1126969
    1127 #: src/components/LicenseNotice.jsx:84
    1128 msgid "Review license"
    1129 msgstr ""
    1130 
    1131 #: src/views/ActivityLog.jsx:256
     970#: src/views/ActivityLog.jsx:209
    1132971msgid "Review monitor decisions and enforced actions without loading the full log into your browser."
    1133972msgstr ""
    1134973
    1135 #: src/views/Dashboard.jsx:332
     974#: src/views/Dashboard.jsx:367
    1136975msgid "Review settings"
    1137976msgstr ""
    1138977
    1139 #: src/views/ActivityLog.jsx:431
     978#: src/views/Placeholder.jsx:16
     979msgid ""
     980"Review the monitoring guidance, privacy controls, and checkout compatibility notes in the plugin "
     981"documentation."
     982msgstr ""
     983
     984#: src/views/ActivityLog.jsx:392
    1140985msgid "Route"
    1141986msgstr ""
    1142987
    1143 #: src/views/Settings.jsx:84 src/views/StoreApiGuard.jsx:100
     988#: src/views/Settings.jsx:83 src/views/StoreApiGuard.jsx:98
    1144989msgid "Safe Mode"
    1145990msgstr ""
    1146991
    1147 #: src/views/StoreApiGuard.jsx:111
     992#: src/views/StoreApiGuard.jsx:109
    1148993msgid ""
    1149994"Safe Mode keeps Store API blocking and Order Vanguard rate limiting suspended while logging stays "
    … …  
    1151996msgstr ""
    1152997
    1153 #: src/views/CircuitBreakers.jsx:436
     998#: src/views/CircuitBreakers.jsx:431
    1154999msgid "Safe Mode keeps breaker counters and logging active while all checkout blocking remains suspended."
    11551000msgstr ""
    11561001
    1157 #: src/views/Settings.jsx:93
     1002#: src/views/Settings.jsx:92
    11581003msgid ""
    11591004"Safe Mode overrides these settings and keeps all protection in Monitor mode. Settings remain "
    … …  
    11611006msgstr ""
    11621007
    1163 #: src/views/StoreApiGuard.jsx:382
     1008#: src/views/StoreApiGuard.jsx:439
    11641009msgid "Save Store API settings"
    11651010msgstr ""
    11661011
    1167 #: src/views/CircuitBreakers.jsx:472
     1012#: src/views/CircuitBreakers.jsx:470
    11681013msgid "Save breaker settings"
    11691014msgstr ""
    11701015
    1171 #: src/views/Lists.jsx:323
     1016#: src/views/Lists.jsx:357
    11721017msgid "Save lists"
    11731018msgstr ""
    11741019
    1175 #: src/views/PrivacyLogs.jsx:213
     1020#: src/views/PrivacyLogs.jsx:243
    11761021msgid "Save privacy settings"
    11771022msgstr ""
    11781023
    1179 #: src/views/Settings.jsx:386
     1024#: src/views/Settings.jsx:414
    11801025msgid "Save protection settings"
    11811026msgstr ""
    11821027
    1183 #: src/views/CircuitBreakers.jsx:471 src/views/Lists.jsx:322 src/views/PrivacyLogs.jsx:212 src/views/Settings.jsx:385 src/views/StoreApiGuard.jsx:381
     1028#: src/views/CircuitBreakers.jsx:469 src/views/Lists.jsx:356 src/views/PrivacyLogs.jsx:242 src/views/Settings.jsx:413 src/views/StoreApiGuard.jsx:438
    11841029msgid "Saving..."
    11851030msgstr ""
    11861031
    1187 #: src/views/Lists.jsx:275
     1032#: src/views/Lists.jsx:294
    11881033msgid "Search WordPress roles..."
    11891034msgstr ""
    11901035
    1191 #: src/views/Lists.jsx:270
     1036#: src/views/Lists.jsx:286
    11921037msgid "Search and select the roles that should always bypass protection."
    11931038msgstr ""
    11941039
    1195 #: src/views/Lists.jsx:281
     1040#: src/views/Lists.jsx:306
    11961041msgid "Search installed gateways or add a custom gateway key manually."
    11971042msgstr ""
    11981043
    1199 #: src/views/Lists.jsx:289
     1044#: src/views/Lists.jsx:314
    12001045msgid "Search payment methods..."
    12011046msgstr ""
    12021047
    1203 #: src/views/ActivityLog.jsx:446
     1048#: src/views/ActivityLog.jsx:407
    12041049#. %d: log row ID.
    12051050msgid "Select event %d"
    12061051msgstr ""
    12071052
    1208 #: src/views/ActivityLog.jsx:358
     1053#: src/views/ActivityLog.jsx:319
    12091054msgid "Select rows to delete"
    12101055msgstr ""
    12111056
    1212 #: src/views/ActivityLog.jsx:424
     1057#: src/views/ActivityLog.jsx:382
    12131058msgid "Select this page"
    12141059msgstr ""
    12151060
    1216 #: src/components/SearchMultiSelect.jsx:96
     1061#: src/components/SearchMultiSelect.jsx:100
    12171062msgid "Selected values"
    12181063msgstr ""
    12191064
    1220 #: src/views/PrivacyLogs.jsx:136
     1065#: src/views/PrivacyLogs.jsx:149
    12211066msgid "Selecting the wrong proxy can let attackers spoof their source address."
    12221067msgstr ""
    12231068
    1224 #: src/views/PrivacyLogs.jsx:125
     1069#: src/views/PrivacyLogs.jsx:132
    12251070msgid "Server connection (recommended)"
    12261071msgstr ""
    … …  
    12301075msgstr ""
    12311076
    1232 #: src/navigation.js:70
     1077#: src/navigation.js:46
    12331078msgid "Settings"
    12341079msgstr ""
    12351080
    1236 #: src/views/CircuitBreakers.jsx:53
     1081#: src/views/CircuitBreakers.jsx:51
    12371082msgid "Shared mobile, office, and CGNAT connections can represent several customers. Keep this block short."
    12381083msgstr ""
    12391084
    1240 #: src/views/ActivityLog.jsx:472 src/views/ActivityLog.jsx:473
     1085#: src/views/ActivityLog.jsx:437 src/views/ActivityLog.jsx:441
    12411086msgid "Show the same attacker"
    12421087msgstr ""
    12431088
    1244 #: src/views/ActivityLog.jsx:326
     1089#: src/views/ActivityLog.jsx:282
    12451090msgid "Showing events from the same attacker"
    12461091msgstr ""
    12471092
    1248 #: src/views/Dashboard.jsx:328
     1093#: src/views/Dashboard.jsx:353
    12491094msgid "Start with a clear baseline"
    12501095msgstr ""
    12511096
    1252 #: src/views/CircuitBreakers.jsx:42
     1097#: src/views/CircuitBreakers.jsx:40
    12531098msgid "Stops repeated failed orders from one IPv4 address or IPv6 /64 network."
    12541099msgstr ""
    12551100
    1256 #: src/navigation.js:48 src/views/Placeholder.jsx:36 src/views/StoreApiGuard.jsx:83
     1101#: src/navigation.js:36 src/views/StoreApiGuard.jsx:81
    12571102msgid "Store API Guard"
    12581103msgstr ""
    … …  
    12661111msgstr ""
    12671112
    1268 #: src/views/StoreApiGuard.jsx:125
     1113#: src/views/StoreApiGuard.jsx:128
    12691114msgid ""
    12701115"Store API checkout returns 404 whenever Order Vanguard is enforcing. Disable this after the active "
    … …  
    12721117msgstr ""
    12731118
    1274 #: src/views/StoreApiGuard.jsx:81
     1119#: src/views/StoreApiGuard.jsx:79
    12751120msgid "Store API protection"
    12761121msgstr ""
    12771122
    1278 #: src/views/Placeholder.jsx:38
    1279 msgid "Store API rate limits, batch inspection, and advanced emergency controls will appear here."
    1280 msgstr ""
    1281 
    1282 #: src/views/StoreApiGuard.jsx:370
     1123#: src/views/StoreApiGuard.jsx:427
    12831124msgid "Store API settings saved"
    12841125msgstr ""
    12851126
    1286 #: src/views/PrivacyLogs.jsx:79
     1127#: src/views/PrivacyLogs.jsx:82
    12871128msgid "Store full IP addresses"
    12881129msgstr ""
    12891130
    1290 #: src/views/Settings.jsx:287 src/views/StoreApiGuard.jsx:294
     1131#: src/views/Settings.jsx:309 src/views/StoreApiGuard.jsx:334
    12911132msgid "Strict Session Requirement"
    12921133msgstr ""
    12931134
    1294 #: src/views/Dashboard.jsx:311
     1135#: src/views/Dashboard.jsx:316
    12951136msgid "Suspicious (7d)"
    12961137msgstr ""
    12971138
    1298 #: src/views/ActivityLog.jsx:67
     1139#: src/views/ActivityLog.jsx:66
    12991140msgid "Temporary block added"
    13001141msgstr ""
    13011142
    1302 #: src/views/ActivityLog.jsx:69
     1143#: src/views/ActivityLog.jsx:68
    13031144msgid "Temporary block expired"
    13041145msgstr ""
    … …  
    13251166msgstr ""
    13261167
    1327 #: src/components/LicenseNotice.jsx:169
    1328 msgid ""
    1329 "The grace period is over. Renew now to restore private updates and Pro workspace access. Existing "
    1330 "Free protection remains available."
    1331 msgstr ""
    1332 
    1333 #: src/components/LicenseNotice.jsx:80
    1334 msgid "The license server is temporarily unreachable. Order Vanguard Pro is using its last known status."
    1335 msgstr ""
    1336 
    13371168#: includes/class-ceog-breakers.php:796
    13381169msgid "The per-IP failed-order circuit breaker tripped."
    … …  
    13591190msgstr ""
    13601191
    1361 #: src/views/Settings.jsx:257
     1192#: src/views/Settings.jsx:272
    13621193msgid "These opt-in controls can affect headless, app, block, and express checkout flows."
    13631194msgstr ""
    13641195
    1365 #: src/views/Settings.jsx:300 src/views/StoreApiGuard.jsx:307
     1196#: src/views/Settings.jsx:325 src/views/StoreApiGuard.jsx:350
    13661197msgid ""
    13671198"This may break headless, custom, mobile-app, and some express checkout flows. Use Monitor Mode "
    … …  
    13691200msgstr ""
    13701201
    1371 #: src/components/LicenseNotice.jsx:176
    1372 #. %d: seconds until the modal closes
    1373 msgid "This reminder closes in %d seconds."
    1374 msgstr ""
    1375 
    1376 #: src/views/CircuitBreakers.jsx:93
     1202#: src/views/CircuitBreakers.jsx:91
    13771203msgid ""
    13781204"This temporarily pauses all non-whitelisted checkout. A short cooldown is the primary defense "
    … …  
    13801206msgstr ""
    13811207
    1382 #: src/views/Dashboard.jsx:342
     1208#: src/views/Dashboard.jsx:381
    13831209msgid "Threat activity this week"
    13841210msgstr ""
    13851211
    1386 #: src/views/CircuitBreakers.jsx:389
     1212#: src/views/CircuitBreakers.jsx:381
    13871213msgid ""
    13881214"Three short sliding windows stop repeated payment failures with the smallest practical checkout "
    … …  
    13901216msgstr ""
    13911217
    1392 #: src/views/ActivityLog.jsx:427
     1218#: src/views/ActivityLog.jsx:388
    13931219msgid "Time"
    13941220msgstr ""
    13951221
    1396 #: src/views/StoreApiGuard.jsx:174
     1222#: src/views/StoreApiGuard.jsx:185
    13971223msgid "Time window (seconds)"
    13981224msgstr ""
    13991225
    1400 #: src/views/ActivityLog.jsx:301
     1226#: src/views/ActivityLog.jsx:256
    14011227msgid "To date"
    14021228msgstr ""
    14031229
    1404 #: src/components/SearchMultiSelect.jsx:149 src/components/SearchMultiSelect.jsx:150
     1230#: src/components/SearchMultiSelect.jsx:154 src/components/SearchMultiSelect.jsx:155
    14051231msgid "Toggle options"
    14061232msgstr ""
    14071233
    1408 #: src/views/Lists.jsx:260
     1234#: src/views/Lists.jsx:270
    14091235msgid "Trusted IP addresses"
    14101236msgstr ""
    14111237
    1412 #: src/views/PrivacyLogs.jsx:106
     1238#: src/views/PrivacyLogs.jsx:115
    14131239msgid "Trusted proxy"
    14141240msgstr ""
    14151241
    1416 #: src/navigation.js:53
    1417 msgid "Turnstile"
    1418 msgstr ""
    1419 
    1420 #: src/views/ActivityLog.jsx:428
     1242#: src/views/ActivityLog.jsx:389
    14211243msgid "Type"
    14221244msgstr ""
    14231245
    1424 #: src/views/PrivacyLogs.jsx:172
     1246#: src/views/PrivacyLogs.jsx:201
    14251247msgid "Uninstall cleanup"
    14261248msgstr ""
    14271249
    1428 #: src/views/ActivityLog.jsx:71
     1250#: src/views/ActivityLog.jsx:70
    14291251msgid "Unknown event"
    14301252msgstr ""
    … …  
    14341256msgstr ""
    14351257
    1436 #: src/views/Settings.jsx:186
     1258#: src/views/Settings.jsx:189
    14371259msgid "Unknown-origin orders"
    14381260msgstr ""
    14391261
     1262#: src/components/Topbar.jsx:37
     1263msgid "Use dark mode"
     1264msgstr ""
     1265
    14401266#: src/components/Topbar.jsx:36
    1441 msgid "Use dark mode"
    1442 msgstr ""
    1443 
    1444 #: src/components/Topbar.jsx:35
    14451267msgid "Use light mode"
    14461268msgstr ""
    14471269
    1448 #: src/views/Lists.jsx:248
     1270#: src/views/Lists.jsx:258
    14491271msgid "Use narrow exceptions for trusted staff, infrastructure, and checkout methods."
    14501272msgstr ""
    14511273
    1452 #: src/views/StoreApiGuard.jsx:141
     1274#: src/views/StoreApiGuard.jsx:146
    14531275msgid "Uses WooCommerce's native Store API limiter for POST cart and batch traffic."
    14541276msgstr ""
    14551277
    1456 #: src/views/Settings.jsx:231
     1278#: src/views/Settings.jsx:238
    14571279msgid "Uses the WordPress administrator email when the field below is empty."
    14581280msgstr ""
    14591281
    1460 #: src/components/Sidebar.jsx:92
     1282#: src/components/Sidebar.jsx:98
    14611283msgid "Version"
    14621284msgstr ""
    14631285
    1464 #: src/views/Dashboard.jsx:290
     1286#: src/views/Dashboard.jsx:288
    14651287msgid "View activity log"
    14661288msgstr ""
    14671289
    1468 #: src/views/Dashboard.jsx:366
     1290#: src/views/Dashboard.jsx:427
    14691291msgid "View all"
    14701292msgstr ""
    … …  
    14781300msgstr ""
    14791301
    1480 #: src/App.jsx:159
     1302#: src/App.jsx:193
    14811303msgid "We recommend reviewing the Activity Log first. Switch to Enforce mode?"
    14821304msgstr ""
    14831305
    1484 #: src/views/Lists.jsx:246
     1306#: src/views/Lists.jsx:256
    14851307msgid "Whitelist"
    14861308msgstr ""
    14871309
    1488 #: src/views/Lists.jsx:175
     1310#: src/views/Lists.jsx:178
    14891311msgid "Whitelist always wins"
    14901312msgstr ""
    14911313
    1492 #: src/views/StoreApiGuard.jsx:248
     1314#: src/views/StoreApiGuard.jsx:282
    14931315msgid "Whitelist precedence"
    14941316msgstr ""
    … …  
    14981320msgstr ""
    14991321
    1500 #: src/views/CircuitBreakers.jsx:219
     1322#: src/views/CircuitBreakers.jsx:216
    15011323msgid "Window (seconds)"
    15021324msgstr ""
    15031325
    1504 #: src/views/Settings.jsx:267 src/views/StoreApiGuard.jsx:270
     1326#: src/views/Settings.jsx:283 src/views/StoreApiGuard.jsx:308
    15051327msgid "WooCommerce Checkout"
    15061328msgstr ""
    15071329
    1508 #: src/views/StoreApiGuard.jsx:200
     1330#: src/views/StoreApiGuard.jsx:220
    15091331msgid "WooCommerce limiter enabled"
    15101332msgstr ""
    15111333
    1512 #: src/views/StoreApiGuard.jsx:201
     1334#: src/views/StoreApiGuard.jsx:224
    15131335msgid "WooCommerce limiter not enabled"
    15141336msgstr ""
    15151337
    1516 #: src/views/Settings.jsx:244
     1338#: src/views/Dashboard.jsx:262
     1339msgid "WooCommerce protection"
     1340msgstr ""
     1341
     1342#: src/views/Settings.jsx:251
    15171343msgid "WordPress administrator email"
    15181344msgstr ""
    15191345
    1520 #: src/views/Lists.jsx:269
     1346#: src/views/Lists.jsx:285
    15211347msgid "WordPress roles"
    15221348msgstr ""
    15231349
    1524 #: src/views/Placeholder.jsx:104
    1525 msgid "Workspace ready"
    1526 msgstr ""
    1527 
    1528 #: src/views/PrivacyLogs.jsx:131
     1350#: src/views/PrivacyLogs.jsx:144
    15291351msgid "X-Forwarded-For first hop"
    15301352msgstr ""
    … …  
    15381360msgstr ""
    15391361
    1540 #: src/components/LicenseNotice.jsx:74
    1541 msgid "Your Order Vanguard Pro license could not be verified. Review the saved key."
    1542 msgstr ""
    1543 
    1544 #: src/components/LicenseNotice.jsx:168
    1545 msgid "Your Order Vanguard Pro license has expired"
    1546 msgstr ""
    1547 
    1548 #: src/components/LicenseNotice.jsx:67
    1549 msgid "Your Order Vanguard Pro license has expired. Renew it to restore updates and Pro workspace access."
    1550 msgstr ""
    1551 
    1552 #: src/components/LicenseNotice.jsx:60
    1553 msgid ""
    1554 "Your Order Vanguard Pro license is in its grace period. Renew soon to keep updates and Pro "
    1555 "workspace access."
    1556 msgstr ""
    1557 
    1558 #: src/api.js:86
     1362#: src/api.js:78
    15591363msgid "Your admin session expired. Please refresh the page and try again."
    15601364msgstr ""
    1561 
    1562 #: src/views/PrivacyLogs.jsx:158
    1563 msgid "days"
    1564 msgstr ""
  • coderembassy-order-vanguard/trunk/readme.txt

    r3776959 r3778434  
    11=== CoderEmbassy Order Vanguard ===
    22Contributors: codersaleh
    3 Tags: woocommerce, security, fraud, card testing, fake orders
     3Tags: woocommerce, fraud prevention, card testing, fake orders, checkout security
    44Requires at least: 6.5
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 1.1.1
     7Stable tag: 1.1.2
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    11 API-level WooCommerce protection against card testing, automated fake orders, and abusive checkout traffic.
     11Monitor and block abusive WooCommerce checkout and Store API traffic with privacy-first local controls.
    1212
    1313== Description ==
    1414
    15 Order Vanguard protects classic checkout, Checkout Block, Store API cart traffic, and Store API batch requests with monitor-first circuit breakers, request controls, lists, and review signals. The Free plugin has no CAPTCHA keys, subscriptions, remote scoring services, or external data transfers.
     15CoderEmbassy Order Vanguard helps WooCommerce stores respond to card testing, bot orders, and repeated fake-checkout attempts.
    1616
    17 For product quantity rules and customer-friendly purchase limits, see [CoderEmbassy Quantity Manager for WooCommerce](https://coderembassy.com/).
     17Protection starts in Monitor mode so store owners can review activity before enabling blocking. The plugin includes:
     18
     19* Per-IP, per-email, and store-wide circuit breakers.
     20* Store API cart mutation rate limiting and batch inspection.
     21* Email, email-domain, and IP blocklists with whitelist precedence.
     22* Classic-checkout honeypot protection.
     23* Unknown-origin order review signals.
     24* A paginated, filterable local Activity Log.
     25* Selectable 7, 30, or 90-day activity-log retention with daily batched pruning.
     26* Emergency Store API checkout controls with compatibility safeguards.
     27* HPOS and WooCommerce Checkout Block compatibility declarations.
     28
     29Protection data stays in this WordPress site's database. No external service is required.
     30
     31== Installation ==
     32
     331. Upload the `coderembassy-order-vanguard` folder to `/wp-content/plugins/`, or install the ZIP from Plugins > Add New > Upload Plugin.
     342. Activate CoderEmbassy Order Vanguard.
     353. Open WooCommerce > Order Vanguard.
     364. Review the Activity Log while Monitor mode is active.
     375. Configure the circuit breakers, lists, privacy settings, and retention period.
     386. Switch to Enforce mode only after the recorded activity matches your store traffic.
     39
     40== Frequently Asked Questions ==
     41
     42= Does the plugin block traffic immediately after activation? =
     43
     44No. It starts in Monitor mode. This records protection decisions without blocking checkout traffic.
     45
     46= Does it support WooCommerce Checkout Block? =
     47
     48Yes. Store API request controls, batch inspection, lists, circuit breakers, and order review signals support Checkout Block traffic. The hidden honeypot field is used on classic checkout.
     49
     50= How long are activity records retained? =
     51
     52Choose 7, 30, or 90 days under Privacy & Logs. A daily background task removes older rows in bounded batches.
     53
     54= Does it send customer or attacker data to an external service? =
     55
     56No. Protection decisions, settings, hashes, and Activity Log rows remain on the WordPress site.
     57
     58= How are IP addresses handled? =
     59
     60Repeat-attacker correlation uses a one-way, site-salted HMAC hash. Displayed addresses are anonymized by default. Full IP display is optional and should only be enabled when the site's privacy policy and legal basis cover it.
     61
     62= What happens if the plugin encounters an internal error? =
     63
     64Checkout-facing protection paths use a fail-open boundary: the error is logged when possible and the customer request is allowed to continue. Emergency Safe Mode can also force monitoring behavior.
     65
     66= Can plugin data be removed on uninstall? =
     67
     68Yes. Enable Delete all data on uninstall under Privacy & Logs before uninstalling the plugin.
    1869
    1970== Privacy ==
    2071
    21 Order Vanguard stores protection events only in this site's WordPress database. A log row can contain the event time and type, protection mode, request route, reason, order ID, a sanitized user agent, `ip_display`, and a one-way `ip_hash` correlation value.
     72Order Vanguard stores protection events locally in a custom WordPress database table. Event rows can contain an anonymized or administrator-enabled full IP display value, a one-way site-salted IP hash, request route, event reason, order ID, and bounded technical metadata. Plain-text customer email addresses are excluded from log metadata. Administrators can delete selected rows, select a 7, 30, or 90-day retention period, and choose whether uninstall removes all plugin data.
    2273
    23 By default, IPv4 addresses are anonymized by replacing the last octet with zero. IPv6 addresses are reduced to their /64 network. The correlation hash is generated locally with HMAC-SHA256 and the site's WordPress authentication salt. It is used to recognize repeat traffic without storing the original address in the hash. Email counters use the same one-way approach over a lowercased email address; plaintext email addresses are not written to the protection log.
     74== Source Code and Build ==
    2475
    25 Full IP display storage is optional and disabled by default. Enabling it may store personal data and should be covered by the site's privacy policy and legal basis.
     76Human-readable admin source and build configuration are included in the plugin package under `src/`, `package.json`, and `package-lock.json`.
    2677
    27 Activity history is retained for seven days and pruned daily in bounded batches. Nothing is sent to CoderEmbassy or any third party. The merchant can choose to remove the plugin's table and options during uninstall.
     78The public development repository is:
     79https://github.com/salehST/coderembassy-order-vanguard
    2880
    29 == Installation ==
     81To rebuild the distributed admin assets:
    3082
    31 1. Install and activate WooCommerce.
    32 2. Upload and activate CoderEmbassy Order Vanguard.
    33 3. Open WooCommerce > Order Vanguard.
    34 4. Keep Monitor mode enabled while reviewing Activity Log events.
     831. Run `npm install` from the plugin root.
     842. Run `npm run build`.
    3585
    36 == Frequently Asked Questions ==
    37 
    38 = Why doesn't my CAPTCHA stop card testing? =
    39 
    40 Many attacks send requests directly to WooCommerce Store API endpoints instead of interacting with the visible checkout form. Order Vanguard evaluates those server-side requests, including operations embedded in Store API batch requests. It complements a CAPTCHA rather than replacing one.
    41 
    42 = Will this block real customers? =
    43 
    44 Order Vanguard starts in Monitor mode, where it records decisions without blocking. Review the Activity Log before switching to Enforce. Whitelists preserve trusted roles, IPs, and payment methods, and `CEOG_SAFE_MODE` immediately suspends every blocking action. Per-IP blocks are intentionally short because mobile, office, and CGNAT networks may represent several customers behind one address.
    45 
    46 = Does it work with the Checkout block? =
    47 
    48 Yes. Store API request controls, batch inspection, lists, and circuit breakers protect Checkout Block traffic. The Free honeypot remains classic-checkout only. When Pro is active, it adds a separate site-specific Checkout Block honeypot through WooCommerce's Additional Checkout Fields API.
    49 
    50 = Does it inspect Store API batch requests? =
    51 
    52 Yes. Each embedded operation is normalized and evaluated individually. In Enforce mode, a protected or malformed operation rejects the batch envelope instead of allowing the operation to bypass direct-route controls.
    53 
    54 = Is any data sent to external services? =
    55 
    56 The Free plugin sends no protection decisions, logs, hashes, settings, or dashboard aggregates to an external service. If the merchant explicitly enables the optional Pro Cloudflare Turnstile integration with their own keys, the shopper's browser connects to Cloudflare and the server validates a single-use token with Cloudflare Siteverify; Order Vanguard does not store that token.
    57 
    58 = How should express and wallet payments be configured? =
    59 
    60 Add trusted express and wallet gateway keys to the payment-method whitelist. Whitelisted methods bypass lists and circuit breakers, including a global cooldown, because those flows can legitimately omit normal checkout signals. Confirm the exact gateway key in WooCommerce payment settings.
    61 
    62 = Does the honeypot protect the Checkout block? =
    63 
    64 The Free honeypot protects classic checkout. Order Vanguard Pro adds an optional, site-specific Checkout Block honeypot through WooCommerce's Additional Checkout Fields API (WooCommerce 8.9+), while preserving the same Monitor-first and fail-open safety behavior.
    65 
    66 == Screenshots ==
    67 
    68 1. Dashboard.
    69 2. Activity Log.
    70 3. Circuit Breakers.
    71 4. Store API Guard.
    72 5. Lists.
    73 6. Settings.
    74 7. Privacy & Logs.
    75 8. Help.
    76 
    77 == Source Code and Build Process ==
    78 
    79 The complete human-readable source code, build configuration, and release tools are publicly maintained at [github.com/salehST/coderembassy-order-vanguard](https://github.com/salehST/coderembassy-order-vanguard).
    80 
    81 The generated `build/index.js` and styles are compiled from the files in `src/`. To reproduce the distributed assets, install a current Node.js LTS release and run these commands from the repository root:
    82 
    83 `npm ci`
    84 `npm run build`
    85 `npm run make-pot`
    86 `npm run release:audit`
    87 `npm run package:release`
    88 
    89 The build uses the WordPress packages listed in `package.json` and [lucide-react](https://github.com/lucide-icons/lucide), an ISC-licensed icon library. Exact dependency versions and source package URLs are recorded in `package-lock.json`.
     86The build uses the WordPress packages listed in `package.json` and lucide-react, an ISC-licensed icon library. Exact dependency versions and source package URLs are recorded in `package-lock.json`.
    9087
    9188== Changelog ==
    9289
     90= 1.1.2 =
     91* Updated admin section.
     92
    9393= 1.1.1 =
    94 * Store API Guard issue Fixed.
    9594
    96 = 1.0.1 =
    97 * Core issue Fixed.
     95* Added a generic admin extension contract so separately installed add-ons can contribute routes to the existing Order Vanguard workspace without adding another WordPress menu.
     96* Improved shared-workspace navigation for dynamically registered routes and route badges.
     97
     98= 1.1.0 =
     99
     100* Added unrestricted 7, 30, and 90-day Activity Log retention choices.
     101* Updated daily pruning to honor the selected retention period.
     102* Bundled human-readable React source and reproducible build configuration.
     103* Simplified the dashboard and navigation to the plugin's complete standalone feature set.
    98104
    99105= 1.0.0 =
    100 * Initial release.
    101106
     107* Initial release with monitor-first WooCommerce checkout protection, circuit breakers, lists, Store API controls, and privacy-first local logging.
  • coderembassy-order-vanguard/trunk/uninstall.php

    r3701248 r3778434  
    2323
    2424// The identifier is composed exclusively from WordPress's trusted table prefix.
    25 $wpdb->query( "DROP TABLE IF EXISTS {$ceog_table_name}" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
     25$wpdb->query( "DROP TABLE IF EXISTS {$ceog_table_name}" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.InterpolatedNotPrepared,PluginCheck.Security.DirectDB.UnescapedDBParameter -- Identifier uses only WordPress's trusted table prefix; destructive cleanup runs solely after the saved opt-in.
    2626
    2727delete_option( 'ceog_settings' );
Note: See TracChangeset for help on using the changeset viewer.