Changeset 3778434
- Timestamp:
- 11/01/2026 06:58:35 PM (4 hours ago)
- Location:
- coderembassy-order-vanguard
- Files:
-
- 79 added
- 17 edited
-
tags/1.1.2 (added)
-
tags/1.1.2/assets (added)
-
tags/1.1.2/assets/images (added)
-
tags/1.1.2/assets/images/logo-dark.png (added)
-
tags/1.1.2/assets/images/logo-light.png (added)
-
tags/1.1.2/build (added)
-
tags/1.1.2/build/index.asset.php (added)
-
tags/1.1.2/build/index.js (added)
-
tags/1.1.2/build/style-index-rtl.css (added)
-
tags/1.1.2/build/style-index.css (added)
-
tags/1.1.2/coderembassy-order-vanguard.php (added)
-
tags/1.1.2/includes (added)
-
tags/1.1.2/includes/class-ceog-activator.php (added)
-
tags/1.1.2/includes/class-ceog-admin.php (added)
-
tags/1.1.2/includes/class-ceog-alerts.php (added)
-
tags/1.1.2/includes/class-ceog-breakers.php (added)
-
tags/1.1.2/includes/class-ceog-dashboard.php (added)
-
tags/1.1.2/includes/class-ceog-honeypot.php (added)
-
tags/1.1.2/includes/class-ceog-ip.php (added)
-
tags/1.1.2/includes/class-ceog-lists.php (added)
-
tags/1.1.2/includes/class-ceog-logger.php (added)
-
tags/1.1.2/includes/class-ceog-origin-rules.php (added)
-
tags/1.1.2/includes/class-ceog-plugin.php (added)
-
tags/1.1.2/includes/class-ceog-rest-controller.php (added)
-
tags/1.1.2/includes/class-ceog-settings.php (added)
-
tags/1.1.2/includes/class-ceog-store-api-guard.php (added)
-
tags/1.1.2/includes/functions.php (added)
-
tags/1.1.2/languages (added)
-
tags/1.1.2/languages/coderembassy-order-vanguard.pot (added)
-
tags/1.1.2/package-lock.json (added)
-
tags/1.1.2/package.json (added)
-
tags/1.1.2/readme.txt (added)
-
tags/1.1.2/src (added)
-
tags/1.1.2/src/App.jsx (added)
-
tags/1.1.2/src/api.js (added)
-
tags/1.1.2/src/components (added)
-
tags/1.1.2/src/components/ErrorState.jsx (added)
-
tags/1.1.2/src/components/ModeControl.jsx (added)
-
tags/1.1.2/src/components/SearchMultiSelect.jsx (added)
-
tags/1.1.2/src/components/Sidebar.jsx (added)
-
tags/1.1.2/src/components/ToggleField.jsx (added)
-
tags/1.1.2/src/components/Topbar.jsx (added)
-
tags/1.1.2/src/index.js (added)
-
tags/1.1.2/src/navigation.js (added)
-
tags/1.1.2/src/style.css (added)
-
tags/1.1.2/src/views (added)
-
tags/1.1.2/src/views/ActivityLog.jsx (added)
-
tags/1.1.2/src/views/CircuitBreakers.jsx (added)
-
tags/1.1.2/src/views/Dashboard.jsx (added)
-
tags/1.1.2/src/views/Lists.jsx (added)
-
tags/1.1.2/src/views/Placeholder.jsx (added)
-
tags/1.1.2/src/views/PrivacyLogs.jsx (added)
-
tags/1.1.2/src/views/Settings.jsx (added)
-
tags/1.1.2/src/views/StoreApiGuard.jsx (added)
-
tags/1.1.2/uninstall.php (added)
-
trunk/build/index.asset.php (modified) (1 diff)
-
trunk/build/index.js (modified) (1 diff)
-
trunk/build/style-index-rtl.css (modified) (1 diff)
-
trunk/build/style-index.css (modified) (1 diff)
-
trunk/coderembassy-order-vanguard.php (modified) (2 diffs)
-
trunk/includes/class-ceog-activator.php (modified) (1 diff)
-
trunk/includes/class-ceog-admin.php (modified) (4 diffs)
-
trunk/includes/class-ceog-dashboard.php (modified) (5 diffs)
-
trunk/includes/class-ceog-honeypot.php (modified) (1 diff)
-
trunk/includes/class-ceog-lists.php (modified) (1 diff)
-
trunk/includes/class-ceog-logger.php (modified) (8 diffs)
-
trunk/includes/class-ceog-origin-rules.php (modified) (1 diff)
-
trunk/includes/class-ceog-settings.php (modified) (2 diffs)
-
trunk/includes/functions.php (modified) (1 diff)
-
trunk/languages/coderembassy-order-vanguard.pot (modified) (42 diffs)
-
trunk/package-lock.json (added)
-
trunk/package.json (added)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/src (added)
-
trunk/src/App.jsx (added)
-
trunk/src/api.js (added)
-
trunk/src/components (added)
-
trunk/src/components/ErrorState.jsx (added)
-
trunk/src/components/ModeControl.jsx (added)
-
trunk/src/components/SearchMultiSelect.jsx (added)
-
trunk/src/components/Sidebar.jsx (added)
-
trunk/src/components/ToggleField.jsx (added)
-
trunk/src/components/Topbar.jsx (added)
-
trunk/src/index.js (added)
-
trunk/src/navigation.js (added)
-
trunk/src/style.css (added)
-
trunk/src/views (added)
-
trunk/src/views/ActivityLog.jsx (added)
-
trunk/src/views/CircuitBreakers.jsx (added)
-
trunk/src/views/Dashboard.jsx (added)
-
trunk/src/views/Lists.jsx (added)
-
trunk/src/views/Placeholder.jsx (added)
-
trunk/src/views/PrivacyLogs.jsx (added)
-
trunk/src/views/Settings.jsx (added)
-
trunk/src/views/StoreApiGuard.jsx (added)
-
trunk/uninstall.php (modified) (1 diff)
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. */ 14 10 (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 4 4 * Plugin URI: https://github.com/salehST/coderembassy-order-vanguard 5 5 * Description: API-level protection against card testing, bot orders, and fake WooCommerce checkouts. 6 * Version: 1.1. 16 * Version: 1.1.2 7 7 * Author: CoderEmbassy 8 8 * Author URI: https://coderembassy.com/ … … 22 22 } 23 23 24 define( 'CEOG_VERSION', '1.1. 1' );24 define( 'CEOG_VERSION', '1.1.2' ); 25 25 define( 'CEOG_DB_VERSION', '1.0.4' ); 26 26 define( 'CEOG_FILE', __FILE__ ); -
coderembassy-order-vanguard/trunk/includes/class-ceog-activator.php
r3701248 r3778434 83 83 dbDelta( $sql ); 84 84 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. 86 86 $wpdb->prepare( 87 87 'SHOW TABLES LIKE %s', -
coderembassy-order-vanguard/trunk/includes/class-ceog-admin.php
r3701248 r3778434 11 11 12 12 /** 13 * Mounts the standaloneReact app on one WooCommerce submenu.13 * Mounts the Order Vanguard React app on one WooCommerce submenu. 14 14 */ 15 15 final class CEOG_Admin { … … 102 102 $user = wp_get_current_user(); 103 103 104 $bootstrap = apply_filters( 105 'ceog_admin_bootstrap', 106 array( 104 $bootstrap = array( 107 105 'restUrl' => esc_url_raw( rest_url( 'ceog/v1/' ) ), 108 106 'nonce' => wp_create_nonce( 'wp_rest' ), … … 111 109 ), 112 110 'version' => CEOG_VERSION, 113 'isPro' => false,114 111 'logoLight' => esc_url_raw( CEOG_URL . 'assets/images/logo-light.png' ), 115 112 'logoDark' => esc_url_raw( CEOG_URL . 'assets/images/logo-dark.png' ), … … 118 115 'avatarUrl' => esc_url_raw( get_avatar_url( $user->ID, array( 'size' => 64 ) ) ), 119 116 ), 120 )121 117 ); 122 118 wp_localize_script( 'ceog-admin', 'ceogBoot', is_array( $bootstrap ) ? $bootstrap : array() ); -
coderembassy-order-vanguard/trunk/includes/class-ceog-dashboard.php
r3701248 r3778434 54 54 $breakers = $this->breakers->get_status_payload(); 55 55 $enforcing = ceog_is_enforcing(); 56 $remaining = absint( $cached['failed_orders_remaining'] ?? 0 );57 $blocked_7d = absint( $cached['blocked_7d'] ?? 0 );58 56 59 57 return array( … … 67 65 'weekly_series' => array_values( $cached['weekly_series'] ?? array() ), 68 66 '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 74 68 'cache_ttl' => self::CACHE_TTL, 75 69 'generated_at' => $this->now(), … … 109 103 $dates[6] . ' 23:59:59' 110 104 ); 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. 112 106 113 107 if ( ! is_array( $rows ) ) { … … 138 132 'weekly_series' => array_values( $series ), 139 133 'recent_events' => $this->logger->get_recent_entries( 5 ), 140 'failed_orders_remaining' => $blocked_7d > 0 ? $this->failed_orders_remaining( $now ) : 0, 134 141 135 ); 142 136 } 143 137 144 /**145 * Counts recent failed/cancelled orders through the HPOS-safe order API.146 *147 * @param int $now Current timestamp.148 * @return int149 */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 }167 138 168 139 /** @return int */ … … 192 163 'weekly_series' => array(), 193 164 'recent_events' => array(), 194 'pro_context' => array( 'show' => false, 'blocked_attempts' => 0, 'remaining_orders' => 0 ),195 165 'cache_ttl' => self::CACHE_TTL, 196 166 'generated_at' => 0, -
coderembassy-order-vanguard/trunk/includes/class-ceog-honeypot.php
r3701248 r3778434 122 122 * Returns a deterministic site-specific field name for one checkout flow. 123 123 * 124 * This public extension point lets the separate Pro add-on register a125 * Checkout Block field withoutduplicating or exposing the site salt.124 * This public extension point supports additional checkout flows without 125 * duplicating or exposing the site salt. 126 126 * 127 127 * @param string $flow Stable checkout-flow identifier. -
coderembassy-order-vanguard/trunk/includes/class-ceog-lists.php
r3701248 r3778434 182 182 183 183 /** 184 * Allows an active add-onto supply additional list matches.184 * Allows other code to supply additional list matches. 185 185 * Whitelist precedence has already been applied above. 186 186 * 187 187 * @param array<string, mixed> $match Current match. 188 188 * @param array<string, mixed> $context Checkout context. 189 * @param array<string, mixed> $settings Sanitized Freesettings.189 * @param array<string, mixed> $settings Sanitized plugin settings. 190 190 */ 191 191 return apply_filters( 'ceog_blocklist_match', $match, $context, $settings ); -
coderembassy-order-vanguard/trunk/includes/class-ceog-logger.php
r3701248 r3778434 15 15 final class CEOG_Logger { 16 16 /** 17 * Event types stored by the free plugin.17 * Supported protection event types. 18 18 * 19 19 * @var string[] … … 102 102 false === $row['meta'] ? '{}' : $row['meta'] 103 103 ); 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. 105 105 106 106 if ( false === $result ) { … … 161 161 $values 162 162 ); 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. 164 164 } 165 165 $offset = ( $page - 1 ) * $per_page; … … 170 170 $query_values 171 171 ); 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. 173 173 174 174 return array( … … 205 205 $limit 206 206 ); 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. 208 208 209 209 if ( ! is_array( $rows ) ) { … … 240 240 $ids 241 241 ); 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. 243 243 244 244 if ( false === $deleted ) { … … 264 264 function () { 265 265 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 ) ); 270 270 $table = $wpdb->prefix . 'ceog_log'; 271 271 $total = 0; … … 277 277 1000 278 278 ); 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. 280 280 281 281 if ( false === $deleted ) { -
coderembassy-order-vanguard/trunk/includes/class-ceog-origin-rules.php
r3701248 r3778434 183 183 'billing_email' => $email, 184 184 '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. 186 186 'limit' => 1, 187 187 'return' => 'ids', -
coderembassy-order-vanguard/trunk/includes/class-ceog-settings.php
r3701248 r3778434 143 143 } 144 144 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 145 156 if ( isset( self::$integer_bounds[ $key ] ) ) { 146 157 $bounds = self::$integer_bounds[ $key ]; … … 201 212 $output[ $key ] = isset( $settings[ $key ] ) ? (int) $settings[ $key ] : 0; 202 213 } 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 203 221 204 222 -
coderembassy-order-vanguard/trunk/includes/functions.php
r3701248 r3778434 46 46 'whitelist_payment_methods' => array(), 47 47 'log_full_ip' => 'no', 48 'log_retention_days' => 30, 48 49 'trusted_proxy' => 'none', 49 50 'alert_email_enabled' => 'yes', -
coderembassy-order-vanguard/trunk/languages/coderembassy-order-vanguard.pot
r3701248 r3778434 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: CoderEmbassy Order Vanguard 1. 0.16\n"3 "Project-Id-Version: CoderEmbassy Order Vanguard 1.1.1\n" 4 4 "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" 6 6 "MIME-Version: 1.0\n" 7 7 "Content-Type: text/plain; charset=utf-8\n" … … 10 10 "X-Domain: coderembassy-order-vanguard\n" 11 11 12 #: src/views/CircuitBreakers.jsx:10 812 #: src/views/CircuitBreakers.jsx:106 13 13 #. 1: minutes, 2: seconds 14 14 msgid "%1$dm %2$ds remaining" 15 15 msgstr "" 16 16 17 #: src/views/Lists.jsx:16 517 #: src/views/Lists.jsx:167 18 18 #. %d: number of whitelist entries. 19 19 msgid "%d allowed" 20 20 msgstr "" 21 21 22 #: src/views/Lists.jsx:15 722 #: src/views/Lists.jsx:159 23 23 #. %d: number of blocklist entries. 24 24 msgid "%d blocked" 25 25 msgstr "" 26 26 27 #: src/views/CircuitBreakers.jsx: 40727 #: src/views/CircuitBreakers.jsx:399 28 28 #. %d: active breaker tiers 29 29 msgid "%d cooling down" 30 30 msgstr "" 31 31 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 38 33 #. %d: number of matching protection events. 39 34 msgid "%d events" 40 35 msgstr "" 41 36 42 #: src/views/CircuitBreakers.jsx:11 437 #: src/views/CircuitBreakers.jsx:112 43 38 #. %d: seconds 44 39 msgid "%d seconds remaining" 45 40 msgstr "" 46 41 47 #: src/views/ActivityLog.jsx:3 5542 #: src/views/ActivityLog.jsx:316 48 43 #. %d: number of selected log rows. 49 44 msgid "%d selected" 50 45 msgstr "" 51 46 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 48 msgid "30 days" 49 msgstr "" 50 51 #: src/views/PrivacyLogs.jsx:179 52 msgid "7 days" 53 msgstr "" 54 55 #: src/views/PrivacyLogs.jsx:185 56 msgid "90 days" 57 msgstr "" 58 59 #: src/views/Lists.jsx:181 59 60 msgid "A matching role, IP, or payment method bypasses blocklists and future protection rules." 60 61 msgstr "" 61 62 62 #: src/views/CircuitBreakers.jsx:7 363 #: src/views/CircuitBreakers.jsx:71 63 64 msgid "" 64 65 "A shared household or team billing email may affect more than one shopper. The default requires " … … 74 75 msgstr "" 75 76 76 #: src/views/Dashboard.jsx:2 8777 #: src/views/Dashboard.jsx:277 77 78 msgid "API-level protection against card testing, bot orders, and fake checkouts." 78 79 msgstr "" 79 80 80 #: src/views/Lists.jsx:14 281 #: src/views/Lists.jsx:144 81 82 msgid "Access controls" 82 83 msgstr "" 83 84 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 93 86 msgid "Activity Log" 94 87 msgstr "" 95 88 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 101 90 msgid "Add key" 102 91 msgstr "" 103 92 104 #: src/views/ActivityLog.jsx:5 3 src/views/Dashboard.jsx:4593 #: src/views/ActivityLog.jsx:52 src/views/Dashboard.jsx:34 105 94 msgid "Add-to-cart blocked" 106 95 msgstr "" 107 96 108 #: src/views/Settings.jsx:1 7897 #: src/views/Settings.jsx:180 109 98 msgid "Adds an invisible field that human shoppers never interact with." 110 99 msgstr "" 111 100 112 #: src/components/Topbar.jsx:8 7101 #: src/components/Topbar.jsx:83 113 102 msgid "Admin" 114 103 msgstr "" 115 104 116 #: src/views/Settings.jsx:2 55105 #: src/views/Settings.jsx:266 117 106 msgid "Advanced Store API controls" 118 107 msgstr "" 119 108 120 #: src/views/StoreApiGuard.jsx:2 58109 #: src/views/StoreApiGuard.jsx:294 121 110 msgid "Advanced request controls" 122 111 msgstr "" 123 112 124 #: src/views/Settings.jsx:2 19113 #: src/views/Settings.jsx:226 125 114 msgid "Alert email" 126 115 msgstr "" 127 116 128 #: src/navigation.js:59 129 msgid "Alerts" 130 msgstr "" 131 132 #: src/views/ActivityLog.jsx:280 117 #: src/views/ActivityLog.jsx:234 133 118 msgid "All events" 134 119 msgstr "" 135 120 136 #: src/views/CircuitBreakers.jsx:4 10121 #: src/views/CircuitBreakers.jsx:402 137 122 msgid "All ready" 138 123 msgstr "" … … 142 127 msgstr "" 143 128 144 #: src/views/StoreApiGuard.jsx:2 49129 #: src/views/StoreApiGuard.jsx:284 145 130 msgid "Always" 146 131 msgstr "" 147 132 148 #: src/views/ActivityLog.jsx: 314133 #: src/views/ActivityLog.jsx:269 149 134 msgid "Apply filters" 150 msgstr ""151 152 #: src/navigation.js:91153 msgid "Attack Cleanup"154 msgstr ""155 156 #: src/views/Placeholder.jsx:95157 msgid "Attack Cleanup and Pro automation tools are ready from the Order Vanguard navigation."158 msgstr ""159 160 #: src/views/Dashboard.jsx:400161 msgid "Attack cleanup is available"162 msgstr ""163 164 #: src/views/Placeholder.jsx:74165 msgid "Attack cleanup, automated blocking, longer history, and advanced alerts are planned for Pro."166 msgstr ""167 168 #: src/navigation.js:85169 msgid "Auto Blocklisting"170 135 msgstr "" 171 136 … … 174 139 msgstr "" 175 140 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 181 142 msgid "Batch inspection" 182 143 msgstr "" 183 144 184 #: src/views/ActivityLog.jsx:5 7 src/views/Dashboard.jsx:49145 #: src/views/ActivityLog.jsx:56 src/views/Dashboard.jsx:38 185 146 msgid "Batch operation blocked" 186 147 msgstr "" … … 194 155 msgstr "" 195 156 196 #: src/views/Lists.jsx:21 5157 #: src/views/Lists.jsx:219 197 158 msgid "Billing emails" 198 159 msgstr "" 199 160 200 #: src/views/CircuitBreakers.jsx: 51 src/views/CircuitBreakers.jsx:71161 #: src/views/CircuitBreakers.jsx:49 src/views/CircuitBreakers.jsx:69 201 162 msgid "Block duration (seconds)" 202 163 msgstr "" … … 210 171 msgstr "" 211 172 212 #: src/views/Dashboard.jsx:3 06173 #: src/views/Dashboard.jsx:311 213 174 msgid "Blocked today" 214 175 msgstr "" … … 218 179 msgstr "" 219 180 220 #: src/views/StoreApiGuard.jsx: 279181 #: src/views/StoreApiGuard.jsx:325 221 182 msgid "Blocking enabled" 222 183 msgstr "" 223 184 224 #: src/views/Lists.jsx:20 3185 #: src/views/Lists.jsx:207 225 186 msgid "Blocklist" 226 187 msgstr "" 227 188 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 233 190 msgid "Blocklist matched" 234 191 msgstr "" … … 242 199 msgstr "" 243 200 244 #: src/views/StoreApiGuard.jsx: 189201 #: src/views/StoreApiGuard.jsx:203 245 202 msgid "Cart and batch" 246 203 msgstr "" 247 204 248 #: src/views/StoreApiGuard.jsx:1 39205 #: src/views/StoreApiGuard.jsx:143 249 206 msgid "Cart mutation rate limit" 250 207 msgstr "" 251 208 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 261 210 msgid "Checkout block detected" 262 211 msgstr "" 263 212 264 #: src/views/ActivityLog.jsx:5 5 src/views/Dashboard.jsx:47213 #: src/views/ActivityLog.jsx:54 src/views/Dashboard.jsx:36 265 214 msgid "Checkout blocked" 266 215 msgstr "" … … 274 223 msgstr "" 275 224 276 #: src/views/Dashboard.jsx:3 21225 #: src/views/Dashboard.jsx:341 277 226 msgid "Checkout paused" 278 227 msgstr "" 279 228 280 #: src/views/Settings.jsx:6 9229 #: src/views/Settings.jsx:68 281 230 msgid "Choose what Order Vanguard records and how it responds to suspicious checkout traffic." 282 231 msgstr "" 283 232 284 #: src/views/Settings.jsx:22 1233 #: src/views/Settings.jsx:228 285 234 msgid "Choose where important protection notices will be delivered." 286 235 msgstr "" 287 236 288 #: src/views/PrivacyLogs.jsx: 174237 #: src/views/PrivacyLogs.jsx:203 289 238 msgid "Choose whether uninstalling Order Vanguard removes its local records." 290 239 msgstr "" 291 240 292 #: src/navigation.js: 43 src/views/CircuitBreakers.jsx:387241 #: src/navigation.js:31 src/views/CircuitBreakers.jsx:379 293 242 msgid "Circuit Breakers" 294 243 msgstr "" 295 244 296 #: src/views/CircuitBreakers.jsx:4 60245 #: src/views/CircuitBreakers.jsx:455 297 246 msgid "Circuit breaker settings saved" 298 247 msgstr "" 299 248 300 #: src/views/Dashboard.jsx:3 21249 #: src/views/Dashboard.jsx:342 301 250 msgid "Circuit breakers" 302 251 msgstr "" 303 252 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 309 254 msgid "Classic checkout detected" 310 255 msgstr "" 311 256 312 #: src/views/Settings.jsx:17 7257 #: src/views/Settings.jsx:176 313 258 msgid "Classic checkout honeypot" 314 259 msgstr "" 315 260 316 #: src/views/ActivityLog.jsx: 318261 #: src/views/ActivityLog.jsx:273 317 262 msgid "Clear" 318 263 msgstr "" 319 264 320 #: src/views/ActivityLog.jsx: 332 src/views/ActivityLog.jsx:333265 #: src/views/ActivityLog.jsx:292 src/views/ActivityLog.jsx:296 321 266 msgid "Clear attacker filter" 322 267 msgstr "" 323 268 324 #: src/views/PrivacyLogs.jsx:1 16269 #: src/views/PrivacyLogs.jsx:125 325 270 msgid "Client IP source" 326 271 msgstr "" 327 272 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 333 274 msgid "Close navigation" 334 275 msgstr "" 335 276 336 #: src/views/PrivacyLogs.jsx:1 28277 #: src/views/PrivacyLogs.jsx:138 337 278 msgid "Cloudflare CF-Connecting-IP" 338 279 msgstr "" 339 280 340 #: src/components/Sidebar.jsx:4 1 src/components/Sidebar.jsx:45281 #: src/components/Sidebar.jsx:43 src/components/Sidebar.jsx:47 341 282 msgid "CoderEmbassy" 342 283 msgstr "" 343 284 344 #: coderembassy-order-vanguard.php:3 src/views/Dashboard.jsx:2 86285 #: coderembassy-order-vanguard.php:3 src/views/Dashboard.jsx:274 345 286 msgid "CoderEmbassy Order Vanguard" 346 287 msgstr "" … … 350 291 msgstr "" 351 292 352 #: src/views/Settings.jsx:16 8293 #: src/views/Settings.jsx:167 353 294 msgid "Collect low-friction signals without changing legitimate checkout fields." 354 295 msgstr "" 355 296 356 #: src/views/StoreApiGuard.jsx:1 52297 #: src/views/StoreApiGuard.jsx:160 357 298 msgid "Configured in Monitor mode and activated only while Enforce mode is effective." 358 299 msgstr "" 359 300 360 #: src/views/Lists.jsx: 297301 #: src/views/Lists.jsx:331 361 302 msgid "Confirm gateway keys in WooCommerce payment settings before adding an exception." 362 303 msgstr "" 363 304 364 #: src/views/CircuitBreakers.jsx: 91305 #: src/views/CircuitBreakers.jsx:89 365 306 msgid "Cooldown (seconds)" 366 307 msgstr "" … … 374 315 msgstr "" 375 316 376 #: src/views/Lists.jsx: 292317 #: src/views/Lists.jsx:323 377 318 msgid "Custom gateway key" 378 319 msgstr "" … … 382 323 msgstr "" 383 324 384 #: src/views/PrivacyLogs.jsx:149 325 #: src/views/PrivacyLogs.jsx:190 326 msgid "Daily background pruning permanently removes activity rows older than the selected period." 327 msgstr "" 328 329 #: src/views/PrivacyLogs.jsx:162 385 330 msgid "Daily pruning keeps the attack-volume table bounded." 386 331 msgstr "" 387 332 388 #: src/navigation.js:2 7333 #: src/navigation.js:21 389 334 msgid "Dashboard" 390 335 msgstr "" 391 336 392 #: src/views/PrivacyLogs.jsx: 183337 #: src/views/PrivacyLogs.jsx:212 393 338 msgid "Delete all data on uninstall" 394 339 msgstr "" 395 340 396 #: src/views/ActivityLog.jsx:3 93341 #: src/views/ActivityLog.jsx:341 397 342 msgid "Delete selected" 398 343 msgstr "" 399 344 400 #: src/views/ActivityLog.jsx:3 92345 #: src/views/ActivityLog.jsx:340 401 346 msgid "Deleting..." 402 347 msgstr "" 403 348 404 #: src/views/CircuitBreakers.jsx:12 3349 #: src/views/CircuitBreakers.jsx:121 405 350 msgid "Disabled" 406 351 msgstr "" 407 352 408 #: src/views/Settings.jsx:10 8353 #: src/views/Settings.jsx:107 409 354 msgid "Disabling this keeps your configuration while suspending all blocking." 410 355 msgstr "" 411 356 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 421 358 msgid "Distributed defense" 422 359 msgstr "" 423 360 424 #: src/views/Settings.jsx: 198361 #: src/views/Settings.jsx:202 425 362 msgid "Do not flag" 426 363 msgstr "" 427 364 428 #: src/views/Lists.jsx:2 24365 #: src/views/Lists.jsx:231 429 366 msgid "Domain names without @, one per line." 430 367 msgstr "" 431 368 432 #: src/views/StoreApiGuard.jsx: 278369 #: src/views/StoreApiGuard.jsx:321 433 370 msgid "Effective behavior" 434 371 msgstr "" 435 372 436 #: src/views/Settings.jsx:14 8373 #: src/views/Settings.jsx:147 437 374 msgid "Effective mode" 438 375 msgstr "" 439 376 440 #: src/views/ActivityLog.jsx:4 9 src/views/Dashboard.jsx:41377 #: src/views/ActivityLog.jsx:48 src/views/Dashboard.jsx:30 441 378 msgid "Email breaker tripped" 442 379 msgstr "" 443 380 444 #: src/views/Lists.jsx:2 23381 #: src/views/Lists.jsx:230 445 382 msgid "Email domains" 446 383 msgstr "" 447 384 448 #: includes/class-ceog-rest-controller.php:392 src/views/Settings.jsx:3 43 src/views/StoreApiGuard.jsx:343385 #: includes/class-ceog-rest-controller.php:392 src/views/Settings.jsx:371 src/views/StoreApiGuard.jsx:396 449 386 msgid "Emergency Lockdown cannot be enabled while the WooCommerce Checkout block is active." 450 387 msgstr "" 451 388 452 #: src/views/StoreApiGuard.jsx:12 3389 #: src/views/StoreApiGuard.jsx:122 453 390 msgid "Emergency Lockdown is enabled" 454 391 msgstr "" 455 392 456 #: src/views/Settings.jsx:3 23 src/views/StoreApiGuard.jsx:326393 #: src/views/Settings.jsx:348 src/views/StoreApiGuard.jsx:373 457 394 msgid "Emergency Store API Checkout Lockdown" 458 395 msgstr "" … … 462 399 msgstr "" 463 400 464 #: src/views/Settings.jsx:11 7401 #: src/views/Settings.jsx:116 465 402 msgid "Enable Order Vanguard" 466 403 msgstr "" 467 404 468 #: src/views/StoreApiGuard.jsx:15 1405 #: src/views/StoreApiGuard.jsx:156 469 406 msgid "Enable Order Vanguard rate limiting" 470 407 msgstr "" 471 408 472 #: src/views/Settings.jsx:23 0409 #: src/views/Settings.jsx:237 473 410 msgid "Enable email alerts" 474 411 msgstr "" 475 412 476 #: src/views/CircuitBreakers.jsx:19 4413 #: src/views/CircuitBreakers.jsx:193 477 414 msgid "Enable this breaker" 478 415 msgstr "" 479 416 480 #: src/views/Settings.jsx: 278417 #: src/views/Settings.jsx:300 481 418 msgid "Enabled in WooCommerce" 482 419 msgstr "" 483 420 484 #: src/components/ModeControl.jsx: 40 src/views/ActivityLog.jsx:460 src/views/Dashboard.jsx:315421 #: src/components/ModeControl.jsx:39 src/views/ActivityLog.jsx:425 src/views/Dashboard.jsx:322 485 422 msgid "Enforce" 486 423 msgstr "" 487 424 488 #: src/views/Dashboard.jsx:297 src/views/Settings.jsx:15 1 src/views/StoreApiGuard.jsx:102425 #: src/views/Dashboard.jsx:297 src/views/Settings.jsx:150 src/views/StoreApiGuard.jsx:100 489 426 msgid "Enforcing" 490 427 msgstr "" … … 494 431 msgstr "" 495 432 496 #: src/views/ActivityLog.jsx:2 74433 #: src/views/ActivityLog.jsx:227 497 434 msgid "Event type" 498 435 msgstr "" 499 436 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 507 438 msgid "Every embedded path and method is checked before WooCommerce executes the batch." 508 439 msgstr "" 509 440 510 #: src/views/Lists.jsx:2 16441 #: src/views/Lists.jsx:220 511 442 msgid "Exact email addresses, one per line." 512 443 msgstr "" 513 444 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 529 446 msgid "Failed orders" 530 447 msgstr "" 531 448 532 #: src/views/CircuitBreakers.jsx:19 5449 #: src/views/CircuitBreakers.jsx:194 533 450 msgid "Failed orders feed this sliding window in both Monitor and Enforce modes." 534 451 msgstr "" 535 452 536 #: src/views/CircuitBreakers.jsx:3 85453 #: src/views/CircuitBreakers.jsx:377 537 454 msgid "Failed-order protection" 538 455 msgstr "" 539 456 540 #: src/views/Settings.jsx:19 5457 #: src/views/Settings.jsx:199 541 458 msgid "Flag for review" 542 459 msgstr "" 543 460 544 #: src/views/Settings.jsx:3 47 src/views/StoreApiGuard.jsx:347461 #: src/views/Settings.jsx:375 src/views/StoreApiGuard.jsx:400 545 462 msgid "" 546 463 "For classic-checkout stores under active attack only. This stops Store API checkout and must never " … … 548 465 msgstr "" 549 466 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 555 468 msgid "From date" 556 469 msgstr "" 557 470 558 #: src/views/PrivacyLogs.jsx: 93471 #: src/views/PrivacyLogs.jsx:102 559 472 msgid "" 560 473 "Full IP addresses are personal data. Enable this only when your privacy policy and legal basis " … … 562 475 msgstr "" 563 476 564 #: src/views/PrivacyLogs.jsx:8 2477 #: src/views/PrivacyLogs.jsx:85 565 478 msgid "Full addresses will be visible in new log rows." 566 479 msgstr "" 567 480 568 #: src/views/Settings.jsx:6 5481 #: src/views/Settings.jsx:64 569 482 msgid "General" 570 483 msgstr "" … … 574 487 msgstr "" 575 488 576 #: src/views/CircuitBreakers.jsx: 80489 #: src/views/CircuitBreakers.jsx:78 577 490 msgid "Global breaker" 578 491 msgstr "" 579 492 580 #: src/views/ActivityLog.jsx:5 1 src/views/Dashboard.jsx:43493 #: src/views/ActivityLog.jsx:50 src/views/Dashboard.jsx:32 581 494 msgid "Global breaker tripped" 582 495 msgstr "" 583 496 584 #: src/views/Settings.jsx:10 6497 #: src/views/Settings.jsx:105 585 498 msgid "Global protection" 586 499 msgstr "" 587 500 588 #: src/navigation.js: 80501 #: src/navigation.js:56 589 502 msgid "Help" 590 503 msgstr "" 591 504 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 597 506 msgid "Honeypot triggered" 598 507 msgstr "" 599 508 600 #: src/views/Settings.jsx:3 15 src/views/Settings.jsx:363 src/views/StoreApiGuard.jsx:319 src/views/StoreApiGuard.jsx:360509 #: src/views/Settings.jsx:340 src/views/Settings.jsx:391 src/views/StoreApiGuard.jsx:365 src/views/StoreApiGuard.jsx:416 601 510 msgid "I understand the risks" 602 511 msgstr "" 603 512 604 #: src/views/ActivityLog.jsx: 430513 #: src/views/ActivityLog.jsx:391 605 514 msgid "IP" 606 515 msgstr "" 607 516 608 #: src/views/Lists.jsx:2 31517 #: src/views/Lists.jsx:241 609 518 msgid "IP addresses" 610 519 msgstr "" 611 520 612 #: src/views/PrivacyLogs.jsx:8 3521 #: src/views/PrivacyLogs.jsx:89 613 522 msgid "IP addresses are anonymized for display." 614 523 msgstr "" 615 524 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 621 526 msgid "IP display" 622 527 msgstr "" 623 528 624 #: src/views/Lists.jsx:2 32529 #: src/views/Lists.jsx:242 625 530 msgid "IPv4 matches exactly; IPv6 matches its entire /64 network." 626 531 msgstr "" 627 532 628 #: src/views/Lists.jsx:2 61533 #: src/views/Lists.jsx:274 629 534 msgid "IPv6 exceptions cover the entered /64 network." 630 535 msgstr "" 631 536 632 #: src/views/StoreApiGuard.jsx:2 26537 #: src/views/StoreApiGuard.jsx:252 633 538 msgid "Inspection active" 634 539 msgstr "" 635 540 636 #: src/views/StoreApiGuard.jsx:2 27541 #: src/views/StoreApiGuard.jsx:253 637 542 msgid "Inspection unavailable" 638 543 msgstr "" 639 544 640 #: src/views/Dashboard.jsx:3 29545 #: src/views/Dashboard.jsx:356 641 546 msgid "" 642 547 "Keep Monitor mode on while Order Vanguard records traffic. Switch to Enforce after the activity log " … … 648 553 msgstr "" 649 554 650 #: src/views/CircuitBreakers.jsx:6 2555 #: src/views/CircuitBreakers.jsx:60 651 556 msgid "Links rotating IPs when repeated failures use the same billing email." 652 557 msgstr "" 653 558 654 #: includes/class-ceog-lists.php:527 src/navigation.js: 65 src/views/Lists.jsx:144559 #: includes/class-ceog-lists.php:527 src/navigation.js:41 src/views/Lists.jsx:146 655 560 msgid "Lists" 656 561 msgstr "" 657 562 658 #: src/views/Lists.jsx:3 11563 #: src/views/Lists.jsx:345 659 564 msgid "Lists saved" 660 565 msgstr "" 661 566 662 #: src/views/ActivityLog.jsx: 401567 #: src/views/ActivityLog.jsx:350 663 568 msgid "Loading protection events..." 664 569 msgstr "" 665 570 666 #: src/views/PrivacyLogs.jsx: 59571 #: src/views/PrivacyLogs.jsx:62 667 572 msgid "Local only" 668 573 msgstr "" 669 574 670 #: src/views/PrivacyLogs.jsx: 49575 #: src/views/PrivacyLogs.jsx:51 671 576 msgid "Local, privacy-first records" 672 577 msgstr "" 673 578 674 #: src/views/StoreApiGuard.jsx:2 45579 #: src/views/StoreApiGuard.jsx:277 675 580 msgid "Logged" 676 581 msgstr "" … … 680 585 msgstr "" 681 586 682 #: src/views/StoreApiGuard.jsx: 279587 #: src/views/StoreApiGuard.jsx:326 683 588 msgid "Logging only" 684 589 msgstr "" 685 590 686 #: src/views/StoreApiGuard.jsx:2 44591 #: src/views/StoreApiGuard.jsx:273 687 592 msgid "Malformed batches" 688 593 msgstr "" 689 594 690 #: src/views/Lists.jsx:14 6595 #: src/views/Lists.jsx:148 691 596 msgid "Manually block known sources and preserve trusted checkout paths." 692 597 msgstr "" 693 598 694 #: src/views/Lists.jsx:20 5599 #: src/views/Lists.jsx:209 695 600 msgid "Matches are logged in Monitor mode and stopped in Enforce mode." 696 601 msgstr "" 697 602 698 #: src/views/StoreApiGuard.jsx:2 40603 #: src/views/StoreApiGuard.jsx:268 699 604 msgid "Maximum operations" 700 605 msgstr "" 701 606 702 #: src/views/ActivityLog.jsx: 429607 #: src/views/ActivityLog.jsx:390 703 608 msgid "Mode" 704 609 msgstr "" 705 610 706 #: src/components/ModeControl.jsx: 30 src/views/ActivityLog.jsx:461 src/views/Dashboard.jsx:315611 #: src/components/ModeControl.jsx:29 src/views/ActivityLog.jsx:426 src/views/Dashboard.jsx:323 707 612 msgid "Monitor" 708 613 msgstr "" 709 614 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 715 616 msgid "Monitor decision" 716 617 msgstr "" 717 618 718 #: src/views/Dashboard.jsx:3 27619 #: src/views/Dashboard.jsx:350 719 620 msgid "Monitor first" 720 621 msgstr "" 721 622 722 #: src/views/Settings.jsx:13 4623 #: src/views/Settings.jsx:133 723 624 msgid "Monitor records decisions. Enforce applies them at checkout." 724 625 msgstr "" 725 626 726 #: src/views/Dashboard.jsx:29 7 src/views/Settings.jsx:152 src/views/StoreApiGuard.jsx:103627 #: src/views/Dashboard.jsx:298 src/views/Settings.jsx:151 src/views/StoreApiGuard.jsx:101 727 628 msgid "Monitoring" 728 629 msgstr "" 729 630 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 735 632 msgid "Monitoring traffic" 736 633 msgstr "" 737 634 738 #: src/views/Settings.jsx:2 75635 #: src/views/Settings.jsx:296 739 636 msgid "Native checkout limiter" 740 637 msgstr "" 741 638 742 #: src/views/ActivityLog.jsx:528 639 #: src/views/ActivityLog.jsx:366 640 msgid "New protection events will appear here. Adjust the filters if you expected existing rows." 641 msgstr "" 642 643 #: src/views/ActivityLog.jsx:507 743 644 msgid "Next" 744 645 msgstr "" … … 748 649 msgstr "" 749 650 750 #: src/views/Placeholder.jsx:45751 msgid "No list entries yet"752 msgstr ""753 754 651 #: includes/class-ceog-lists.php:523 755 652 msgid "No list match" 756 653 msgstr "" 757 654 758 #: src/views/Lists.jsx:2 76655 #: src/views/Lists.jsx:298 759 656 msgid "No matching WordPress roles." 760 657 msgstr "" 761 658 762 #: src/views/Lists.jsx: 290659 #: src/views/Lists.jsx:318 763 660 msgid "No matching payment methods." 764 661 msgstr "" 765 662 766 #: src/views/ActivityLog.jsx: 406663 #: src/views/ActivityLog.jsx:360 767 664 msgid "No matching protection events" 768 665 msgstr "" 769 666 770 #: src/views/ActivityLog.jsx: 510667 #: src/views/ActivityLog.jsx:489 771 668 msgid "No pages" 772 669 msgstr "" 773 670 774 #: src/views/Dashboard.jsx: 390 src/views/Placeholder.jsx:18671 #: src/views/Dashboard.jsx:464 775 672 msgid "No protection events yet" 776 673 msgstr "" … … 780 677 msgstr "" 781 678 782 #: src/views/Settings.jsx: 279679 #: src/views/Settings.jsx:301 783 680 msgid "Not enabled" 784 681 msgstr "" 785 682 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 791 684 msgid "Open navigation" 792 685 msgstr "" 793 686 794 #: src/views/Dashboard.jsx: 380687 #: src/views/Dashboard.jsx:448 src/views/Dashboard.jsx:452 795 688 msgid "Open order" 796 689 msgstr "" 797 690 798 #: src/views/StoreApiGuard.jsx:2 60691 #: src/views/StoreApiGuard.jsx:297 799 692 msgid "Opt-in compatibility-sensitive rules for stores under elevated attack pressure." 800 693 msgstr "" 801 694 802 #: src/views/ActivityLog.jsx: 433695 #: src/views/ActivityLog.jsx:394 803 696 msgid "Order" 804 697 msgstr "" 805 698 806 #: includes/class-ceog-admin.php:42 includes/class-ceog-admin.php:43 includes/class-ceog-lists.php:488 src/components/Sidebar.jsx:6 3 src/components/Topbar.jsx:55699 #: 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 807 700 msgid "Order Vanguard" 808 701 msgstr "" 809 702 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 823 704 msgid "Order Vanguard Safe Mode is active - protection is monitoring only." 824 705 msgstr "" 825 706 826 #: includes/class-ceog-admin.php:14 7707 #: includes/class-ceog-admin.php:143 827 708 msgid "" 828 709 "Order Vanguard admin assets are missing. Please reinstall the plugin from a complete release " … … 834 715 msgstr "" 835 716 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 843 718 msgid "Order Vanguard configured" 844 719 msgstr "" … … 848 723 msgstr "" 849 724 850 #: src/api.js: 94725 #: src/api.js:86 851 726 msgid "Order Vanguard could not load this data. Please try again." 852 727 msgstr "" 853 728 854 #: src/views/StoreApiGuard.jsx: 193729 #: src/views/StoreApiGuard.jsx:210 855 730 msgid "Order Vanguard disabled" 856 731 msgstr "" 857 732 858 #: src/views/Placeholder.jsx: 63733 #: src/views/Placeholder.jsx:14 859 734 msgid "Order Vanguard help" 860 735 msgstr "" 861 736 862 #: src/components/Sidebar.jsx:3 4737 #: src/components/Sidebar.jsx:33 863 738 msgid "Order Vanguard navigation" 864 739 msgstr "" 865 740 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 871 742 msgid "" 872 743 "Order Vanguard stores protection events on this WordPress site and sends nothing to external " … … 886 757 msgstr "" 887 758 888 #: src/views/ActivityLog.jsx:5 9 src/views/Dashboard.jsx:51759 #: src/views/ActivityLog.jsx:58 src/views/Dashboard.jsx:40 889 760 msgid "Order flagged" 890 761 msgstr "" 891 762 892 #: src/views/Settings.jsx:16 6763 #: src/views/Settings.jsx:165 893 764 msgid "Order rules" 894 765 msgstr "" … … 898 769 msgstr "" 899 770 900 #: src/views/ActivityLog.jsx: 506771 #: src/views/ActivityLog.jsx:485 901 772 #. 1: current page, 2: total pages. 902 773 msgid "Page %1$d of %2$d" 903 774 msgstr "" 904 775 905 #: src/views/Settings.jsx:2 05776 #: src/views/Settings.jsx:212 906 777 msgid "Paid orders are never moved; this rule does not block checkout." 907 778 msgstr "" 908 779 909 #: src/views/CircuitBreakers.jsx:8 2780 #: src/views/CircuitBreakers.jsx:80 910 781 msgid "Pauses non-whitelisted checkout when failures arrive across the whole store." 911 782 msgstr "" 912 783 913 #: src/views/Lists.jsx: 280784 #: src/views/Lists.jsx:305 914 785 msgid "Payment methods" 915 786 msgstr "" … … 919 790 msgstr "" 920 791 921 #: src/views/CircuitBreakers.jsx: 40792 #: src/views/CircuitBreakers.jsx:38 922 793 msgid "Per-IP breaker" 923 794 msgstr "" 924 795 925 #: src/views/ActivityLog.jsx:4 7 src/views/Dashboard.jsx:39796 #: src/views/ActivityLog.jsx:46 src/views/Dashboard.jsx:28 926 797 msgid "Per-IP breaker tripped" 927 msgstr ""928 929 #: src/views/Placeholder.jsx:29930 msgid "Per-IP, per-email, and global checkout protection will report their live state here."931 798 msgstr "" 932 799 … … 935 802 msgstr "" 936 803 937 #: src/views/CircuitBreakers.jsx: 60804 #: src/views/CircuitBreakers.jsx:58 938 805 msgid "Per-email breaker" 939 806 msgstr "" 940 807 941 #: src/views/ActivityLog.jsx:17 6808 #: src/views/ActivityLog.jsx:170 942 809 #. %d: number of selected log rows. 943 810 msgid "Permanently delete %d selected event(s)?" 944 811 msgstr "" 945 812 946 #: src/views/StoreApiGuard.jsx: 197813 #: src/views/StoreApiGuard.jsx:217 947 814 msgid "Place order" 948 815 msgstr "" 949 816 950 #: src/views/Settings.jsx:20 4817 #: src/views/Settings.jsx:208 951 818 msgid "Place unpaid flagged orders on hold" 952 819 msgstr "" 953 820 954 #: src/views/Settings.jsx:15 6821 #: src/views/Settings.jsx:155 955 822 msgid "Plugin version" 956 823 msgstr "" 957 824 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 963 826 msgid "Prevents protected operations from being hidden inside one Store API request." 964 827 msgstr "" 965 828 966 #: src/views/ActivityLog.jsx: 520829 #: src/views/ActivityLog.jsx:499 967 830 msgid "Previous" 968 831 msgstr "" 969 832 970 #: src/navigation.js: 75 src/views/PrivacyLogs.jsx:47833 #: src/navigation.js:51 src/views/PrivacyLogs.jsx:48 971 834 msgid "Privacy & Logs" 972 835 msgstr "" 973 836 974 #: src/views/PrivacyLogs.jsx:2 01837 #: src/views/PrivacyLogs.jsx:231 975 838 msgid "Privacy settings saved" 976 839 msgstr "" 977 840 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 999 842 msgid "Protect cart mutations, checkout requests, and every operation embedded in a Store API batch." 1000 843 msgstr "" 1001 844 1002 #: src/views/CircuitBreakers.jsx:157 src/views/Dashboard.jsx:2 82845 #: src/views/CircuitBreakers.jsx:157 src/views/Dashboard.jsx:269 1003 846 msgid "Protection active" 1004 847 msgstr "" 1005 848 1006 #: src/views/Dashboard.jsx:2 80849 #: src/views/Dashboard.jsx:267 1007 850 msgid "Protection disabled" 1008 851 msgstr "" 1009 852 1010 #: src/views/Dashboard.jsx: 59853 #: src/views/Dashboard.jsx:48 1011 854 msgid "Protection event" 1012 855 msgstr "" 1013 856 1014 #: src/views/ActivityLog.jsx:2 52857 #: src/views/ActivityLog.jsx:205 1015 858 msgid "Protection history" 1016 859 msgstr "" 1017 860 1018 #: src/views/CircuitBreakers.jsx:12 4861 #: src/views/CircuitBreakers.jsx:123 1019 862 msgid "Protection inactive" 1020 863 msgstr "" 1021 864 1022 #: src/views/Settings.jsx:12 1865 #: src/views/Settings.jsx:120 1023 866 msgid "Protection is disabled" 1024 867 msgstr "" 1025 868 1026 #: src/views/Settings.jsx:1 20869 #: src/views/Settings.jsx:119 1027 870 msgid "Protection is enabled" 1028 871 msgstr "" 1029 872 1030 #: src/components/ModeControl.jsx: 20 src/views/Dashboard.jsx:296 src/views/Dashboard.jsx:316 src/views/Settings.jsx:132873 #: src/components/ModeControl.jsx:19 src/views/Dashboard.jsx:294 src/views/Dashboard.jsx:325 src/views/Settings.jsx:131 1031 874 msgid "Protection mode" 1032 875 msgstr "" 1033 876 1034 #: src/views/Settings.jsx:6 7877 #: src/views/Settings.jsx:66 1035 878 msgid "Protection settings" 1036 879 msgstr "" 1037 880 1038 #: src/views/Settings.jsx: 374881 #: src/views/Settings.jsx:402 1039 882 msgid "Protection settings saved" 1040 883 msgstr "" 1041 884 1042 #: src/views/Dashboard.jsx:30 2885 #: src/views/Dashboard.jsx:306 1043 886 msgid "Protection summary" 1044 887 msgstr "" 1045 888 1046 #: src/views/PrivacyLogs.jsx:1 08889 #: src/views/PrivacyLogs.jsx:117 1047 890 msgid "Proxy headers remain untrusted unless you explicitly select your infrastructure." 1048 891 msgstr "" 1049 892 1050 #: src/views/CircuitBreakers.jsx:156 src/views/Dashboard.jsx:3 20 src/views/Settings.jsx:85893 #: src/views/CircuitBreakers.jsx:156 src/views/Dashboard.jsx:337 src/views/Settings.jsx:84 1051 894 msgid "Ready" 1052 895 msgstr "" 1053 896 1054 #: src/views/ActivityLog.jsx: 432897 #: src/views/ActivityLog.jsx:393 1055 898 msgid "Reason" 1056 899 msgstr "" 1057 900 1058 #: src/views/Dashboard.jsx: 363901 #: src/views/Dashboard.jsx:419 1059 902 msgid "Recent protection events" 1060 903 msgstr "" 1061 904 1062 #: src/views/Settings.jsx:2 39905 #: src/views/Settings.jsx:246 1063 906 msgid "Recipient" 1064 907 msgstr "" 1065 908 1066 #: src/views/CircuitBreakers.jsx:4 17 src/views/CircuitBreakers.jsx:418909 #: src/views/CircuitBreakers.jsx:409 src/views/CircuitBreakers.jsx:413 1067 910 msgid "Refresh breaker status" 1068 911 msgstr "" 1069 912 1070 #: src/views/ActivityLog.jsx:3 79 src/views/ActivityLog.jsx:380913 #: src/views/ActivityLog.jsx:327 src/views/ActivityLog.jsx:328 1071 914 msgid "Refresh events" 1072 915 msgstr "" 1073 916 1074 #: src/views/StoreApiGuard.jsx:2 45917 #: src/views/StoreApiGuard.jsx:276 1075 918 msgid "Rejected" 1076 919 msgstr "" 1077 920 1078 #: src/components/SearchMultiSelect.jsx:1 06 src/components/SearchMultiSelect.jsx:111921 #: src/components/SearchMultiSelect.jsx:111 src/components/SearchMultiSelect.jsx:116 1079 922 #. %s: selected role or payment-method key. 1080 923 msgid "Remove %s" 1081 924 msgstr "" 1082 925 1083 #: src/views/PrivacyLogs.jsx: 184926 #: src/views/PrivacyLogs.jsx:216 1084 927 msgid "Removes the log table and plugin options permanently." 1085 928 msgstr "" 1086 929 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 1092 931 msgid "Repeat-attacker correlation always uses a one-way HMAC hash." 1093 932 msgstr "" 1094 933 1095 #: src/views/StoreApiGuard.jsx:1 62934 #: src/views/StoreApiGuard.jsx:170 1096 935 msgid "Requests" 1097 936 msgstr "" 1098 937 1099 #: src/views/StoreApiGuard.jsx: 295938 #: src/views/StoreApiGuard.jsx:338 1100 939 msgid "Requires an existing WooCommerce session for Store API cart mutations and batch equivalents." 1101 940 msgstr "" 1102 941 1103 #: src/views/Settings.jsx: 288942 #: src/views/Settings.jsx:313 1104 943 msgid "Requires an existing WooCommerce session for Store API cart mutations." 1105 944 msgstr "" 1106 945 1107 #: src/views/PrivacyLogs.jsx:1 47946 #: src/views/PrivacyLogs.jsx:160 1108 947 msgid "Retention" 1109 948 msgstr "" 1110 949 1111 #: src/components/ErrorState.jsx:19 950 #: src/views/PrivacyLogs.jsx:170 951 msgid "Retention period" 952 msgstr "" 953 954 #: src/components/ErrorState.jsx:22 1112 955 msgid "Retry" 1113 956 msgstr "" 1114 957 1115 #: src/views/Dashboard.jsx:2 56 src/views/Dashboard.jsx:257958 #: src/views/Dashboard.jsx:235 src/views/Dashboard.jsx:239 1116 959 msgid "Retry dashboard update" 1117 960 msgstr "" 1118 961 1119 #: src/views/Settings.jsx:3 24962 #: src/views/Settings.jsx:352 1120 963 msgid "Returns 404 for Store API checkout requests, including checkout operations inside batch requests." 1121 964 msgstr "" 1122 965 1123 #: src/views/StoreApiGuard.jsx:3 27966 #: src/views/StoreApiGuard.jsx:377 1124 967 msgid "Returns 404 for direct and batch-wrapped Store API checkout operations." 1125 968 msgstr "" 1126 969 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 1132 971 msgid "Review monitor decisions and enforced actions without loading the full log into your browser." 1133 972 msgstr "" 1134 973 1135 #: src/views/Dashboard.jsx:3 32974 #: src/views/Dashboard.jsx:367 1136 975 msgid "Review settings" 1137 976 msgstr "" 1138 977 1139 #: src/views/ActivityLog.jsx:431 978 #: src/views/Placeholder.jsx:16 979 msgid "" 980 "Review the monitoring guidance, privacy controls, and checkout compatibility notes in the plugin " 981 "documentation." 982 msgstr "" 983 984 #: src/views/ActivityLog.jsx:392 1140 985 msgid "Route" 1141 986 msgstr "" 1142 987 1143 #: src/views/Settings.jsx:8 4 src/views/StoreApiGuard.jsx:100988 #: src/views/Settings.jsx:83 src/views/StoreApiGuard.jsx:98 1144 989 msgid "Safe Mode" 1145 990 msgstr "" 1146 991 1147 #: src/views/StoreApiGuard.jsx:1 11992 #: src/views/StoreApiGuard.jsx:109 1148 993 msgid "" 1149 994 "Safe Mode keeps Store API blocking and Order Vanguard rate limiting suspended while logging stays " … … 1151 996 msgstr "" 1152 997 1153 #: src/views/CircuitBreakers.jsx:43 6998 #: src/views/CircuitBreakers.jsx:431 1154 999 msgid "Safe Mode keeps breaker counters and logging active while all checkout blocking remains suspended." 1155 1000 msgstr "" 1156 1001 1157 #: src/views/Settings.jsx:9 31002 #: src/views/Settings.jsx:92 1158 1003 msgid "" 1159 1004 "Safe Mode overrides these settings and keeps all protection in Monitor mode. Settings remain " … … 1161 1006 msgstr "" 1162 1007 1163 #: src/views/StoreApiGuard.jsx: 3821008 #: src/views/StoreApiGuard.jsx:439 1164 1009 msgid "Save Store API settings" 1165 1010 msgstr "" 1166 1011 1167 #: src/views/CircuitBreakers.jsx:47 21012 #: src/views/CircuitBreakers.jsx:470 1168 1013 msgid "Save breaker settings" 1169 1014 msgstr "" 1170 1015 1171 #: src/views/Lists.jsx:3 231016 #: src/views/Lists.jsx:357 1172 1017 msgid "Save lists" 1173 1018 msgstr "" 1174 1019 1175 #: src/views/PrivacyLogs.jsx:2 131020 #: src/views/PrivacyLogs.jsx:243 1176 1021 msgid "Save privacy settings" 1177 1022 msgstr "" 1178 1023 1179 #: src/views/Settings.jsx: 3861024 #: src/views/Settings.jsx:414 1180 1025 msgid "Save protection settings" 1181 1026 msgstr "" 1182 1027 1183 #: src/views/CircuitBreakers.jsx:4 71 src/views/Lists.jsx:322 src/views/PrivacyLogs.jsx:212 src/views/Settings.jsx:385 src/views/StoreApiGuard.jsx:3811028 #: 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 1184 1029 msgid "Saving..." 1185 1030 msgstr "" 1186 1031 1187 #: src/views/Lists.jsx:2 751032 #: src/views/Lists.jsx:294 1188 1033 msgid "Search WordPress roles..." 1189 1034 msgstr "" 1190 1035 1191 #: src/views/Lists.jsx:2 701036 #: src/views/Lists.jsx:286 1192 1037 msgid "Search and select the roles that should always bypass protection." 1193 1038 msgstr "" 1194 1039 1195 #: src/views/Lists.jsx: 2811040 #: src/views/Lists.jsx:306 1196 1041 msgid "Search installed gateways or add a custom gateway key manually." 1197 1042 msgstr "" 1198 1043 1199 #: src/views/Lists.jsx: 2891044 #: src/views/Lists.jsx:314 1200 1045 msgid "Search payment methods..." 1201 1046 msgstr "" 1202 1047 1203 #: src/views/ActivityLog.jsx:4 461048 #: src/views/ActivityLog.jsx:407 1204 1049 #. %d: log row ID. 1205 1050 msgid "Select event %d" 1206 1051 msgstr "" 1207 1052 1208 #: src/views/ActivityLog.jsx:3 581053 #: src/views/ActivityLog.jsx:319 1209 1054 msgid "Select rows to delete" 1210 1055 msgstr "" 1211 1056 1212 #: src/views/ActivityLog.jsx: 4241057 #: src/views/ActivityLog.jsx:382 1213 1058 msgid "Select this page" 1214 1059 msgstr "" 1215 1060 1216 #: src/components/SearchMultiSelect.jsx: 961061 #: src/components/SearchMultiSelect.jsx:100 1217 1062 msgid "Selected values" 1218 1063 msgstr "" 1219 1064 1220 #: src/views/PrivacyLogs.jsx:1 361065 #: src/views/PrivacyLogs.jsx:149 1221 1066 msgid "Selecting the wrong proxy can let attackers spoof their source address." 1222 1067 msgstr "" 1223 1068 1224 #: src/views/PrivacyLogs.jsx:1 251069 #: src/views/PrivacyLogs.jsx:132 1225 1070 msgid "Server connection (recommended)" 1226 1071 msgstr "" … … 1230 1075 msgstr "" 1231 1076 1232 #: src/navigation.js: 701077 #: src/navigation.js:46 1233 1078 msgid "Settings" 1234 1079 msgstr "" 1235 1080 1236 #: src/views/CircuitBreakers.jsx:5 31081 #: src/views/CircuitBreakers.jsx:51 1237 1082 msgid "Shared mobile, office, and CGNAT connections can represent several customers. Keep this block short." 1238 1083 msgstr "" 1239 1084 1240 #: src/views/ActivityLog.jsx:4 72 src/views/ActivityLog.jsx:4731085 #: src/views/ActivityLog.jsx:437 src/views/ActivityLog.jsx:441 1241 1086 msgid "Show the same attacker" 1242 1087 msgstr "" 1243 1088 1244 #: src/views/ActivityLog.jsx: 3261089 #: src/views/ActivityLog.jsx:282 1245 1090 msgid "Showing events from the same attacker" 1246 1091 msgstr "" 1247 1092 1248 #: src/views/Dashboard.jsx:3 281093 #: src/views/Dashboard.jsx:353 1249 1094 msgid "Start with a clear baseline" 1250 1095 msgstr "" 1251 1096 1252 #: src/views/CircuitBreakers.jsx:4 21097 #: src/views/CircuitBreakers.jsx:40 1253 1098 msgid "Stops repeated failed orders from one IPv4 address or IPv6 /64 network." 1254 1099 msgstr "" 1255 1100 1256 #: src/navigation.js: 48 src/views/Placeholder.jsx:36 src/views/StoreApiGuard.jsx:831101 #: src/navigation.js:36 src/views/StoreApiGuard.jsx:81 1257 1102 msgid "Store API Guard" 1258 1103 msgstr "" … … 1266 1111 msgstr "" 1267 1112 1268 #: src/views/StoreApiGuard.jsx:12 51113 #: src/views/StoreApiGuard.jsx:128 1269 1114 msgid "" 1270 1115 "Store API checkout returns 404 whenever Order Vanguard is enforcing. Disable this after the active " … … 1272 1117 msgstr "" 1273 1118 1274 #: src/views/StoreApiGuard.jsx: 811119 #: src/views/StoreApiGuard.jsx:79 1275 1120 msgid "Store API protection" 1276 1121 msgstr "" 1277 1122 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 1283 1124 msgid "Store API settings saved" 1284 1125 msgstr "" 1285 1126 1286 #: src/views/PrivacyLogs.jsx: 791127 #: src/views/PrivacyLogs.jsx:82 1287 1128 msgid "Store full IP addresses" 1288 1129 msgstr "" 1289 1130 1290 #: src/views/Settings.jsx: 287 src/views/StoreApiGuard.jsx:2941131 #: src/views/Settings.jsx:309 src/views/StoreApiGuard.jsx:334 1291 1132 msgid "Strict Session Requirement" 1292 1133 msgstr "" 1293 1134 1294 #: src/views/Dashboard.jsx:31 11135 #: src/views/Dashboard.jsx:316 1295 1136 msgid "Suspicious (7d)" 1296 1137 msgstr "" 1297 1138 1298 #: src/views/ActivityLog.jsx:6 71139 #: src/views/ActivityLog.jsx:66 1299 1140 msgid "Temporary block added" 1300 1141 msgstr "" 1301 1142 1302 #: src/views/ActivityLog.jsx:6 91143 #: src/views/ActivityLog.jsx:68 1303 1144 msgid "Temporary block expired" 1304 1145 msgstr "" … … 1325 1166 msgstr "" 1326 1167 1327 #: src/components/LicenseNotice.jsx:1691328 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:801334 msgid "The license server is temporarily unreachable. Order Vanguard Pro is using its last known status."1335 msgstr ""1336 1337 1168 #: includes/class-ceog-breakers.php:796 1338 1169 msgid "The per-IP failed-order circuit breaker tripped." … … 1359 1190 msgstr "" 1360 1191 1361 #: src/views/Settings.jsx:2 571192 #: src/views/Settings.jsx:272 1362 1193 msgid "These opt-in controls can affect headless, app, block, and express checkout flows." 1363 1194 msgstr "" 1364 1195 1365 #: src/views/Settings.jsx:3 00 src/views/StoreApiGuard.jsx:3071196 #: src/views/Settings.jsx:325 src/views/StoreApiGuard.jsx:350 1366 1197 msgid "" 1367 1198 "This may break headless, custom, mobile-app, and some express checkout flows. Use Monitor Mode " … … 1369 1200 msgstr "" 1370 1201 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 1377 1203 msgid "" 1378 1204 "This temporarily pauses all non-whitelisted checkout. A short cooldown is the primary defense " … … 1380 1206 msgstr "" 1381 1207 1382 #: src/views/Dashboard.jsx:3 421208 #: src/views/Dashboard.jsx:381 1383 1209 msgid "Threat activity this week" 1384 1210 msgstr "" 1385 1211 1386 #: src/views/CircuitBreakers.jsx:38 91212 #: src/views/CircuitBreakers.jsx:381 1387 1213 msgid "" 1388 1214 "Three short sliding windows stop repeated payment failures with the smallest practical checkout " … … 1390 1216 msgstr "" 1391 1217 1392 #: src/views/ActivityLog.jsx: 4271218 #: src/views/ActivityLog.jsx:388 1393 1219 msgid "Time" 1394 1220 msgstr "" 1395 1221 1396 #: src/views/StoreApiGuard.jsx:1 741222 #: src/views/StoreApiGuard.jsx:185 1397 1223 msgid "Time window (seconds)" 1398 1224 msgstr "" 1399 1225 1400 #: src/views/ActivityLog.jsx: 3011226 #: src/views/ActivityLog.jsx:256 1401 1227 msgid "To date" 1402 1228 msgstr "" 1403 1229 1404 #: src/components/SearchMultiSelect.jsx:1 49 src/components/SearchMultiSelect.jsx:1501230 #: src/components/SearchMultiSelect.jsx:154 src/components/SearchMultiSelect.jsx:155 1405 1231 msgid "Toggle options" 1406 1232 msgstr "" 1407 1233 1408 #: src/views/Lists.jsx:2 601234 #: src/views/Lists.jsx:270 1409 1235 msgid "Trusted IP addresses" 1410 1236 msgstr "" 1411 1237 1412 #: src/views/PrivacyLogs.jsx:1 061238 #: src/views/PrivacyLogs.jsx:115 1413 1239 msgid "Trusted proxy" 1414 1240 msgstr "" 1415 1241 1416 #: src/navigation.js:53 1417 msgid "Turnstile" 1418 msgstr "" 1419 1420 #: src/views/ActivityLog.jsx:428 1242 #: src/views/ActivityLog.jsx:389 1421 1243 msgid "Type" 1422 1244 msgstr "" 1423 1245 1424 #: src/views/PrivacyLogs.jsx: 1721246 #: src/views/PrivacyLogs.jsx:201 1425 1247 msgid "Uninstall cleanup" 1426 1248 msgstr "" 1427 1249 1428 #: src/views/ActivityLog.jsx:7 11250 #: src/views/ActivityLog.jsx:70 1429 1251 msgid "Unknown event" 1430 1252 msgstr "" … … 1434 1256 msgstr "" 1435 1257 1436 #: src/views/Settings.jsx:18 61258 #: src/views/Settings.jsx:189 1437 1259 msgid "Unknown-origin orders" 1438 1260 msgstr "" 1439 1261 1262 #: src/components/Topbar.jsx:37 1263 msgid "Use dark mode" 1264 msgstr "" 1265 1440 1266 #: src/components/Topbar.jsx:36 1441 msgid "Use dark mode"1442 msgstr ""1443 1444 #: src/components/Topbar.jsx:351445 1267 msgid "Use light mode" 1446 1268 msgstr "" 1447 1269 1448 #: src/views/Lists.jsx:2 481270 #: src/views/Lists.jsx:258 1449 1271 msgid "Use narrow exceptions for trusted staff, infrastructure, and checkout methods." 1450 1272 msgstr "" 1451 1273 1452 #: src/views/StoreApiGuard.jsx:14 11274 #: src/views/StoreApiGuard.jsx:146 1453 1275 msgid "Uses WooCommerce's native Store API limiter for POST cart and batch traffic." 1454 1276 msgstr "" 1455 1277 1456 #: src/views/Settings.jsx:23 11278 #: src/views/Settings.jsx:238 1457 1279 msgid "Uses the WordPress administrator email when the field below is empty." 1458 1280 msgstr "" 1459 1281 1460 #: src/components/Sidebar.jsx:9 21282 #: src/components/Sidebar.jsx:98 1461 1283 msgid "Version" 1462 1284 msgstr "" 1463 1285 1464 #: src/views/Dashboard.jsx:2 901286 #: src/views/Dashboard.jsx:288 1465 1287 msgid "View activity log" 1466 1288 msgstr "" 1467 1289 1468 #: src/views/Dashboard.jsx: 3661290 #: src/views/Dashboard.jsx:427 1469 1291 msgid "View all" 1470 1292 msgstr "" … … 1478 1300 msgstr "" 1479 1301 1480 #: src/App.jsx:1 591302 #: src/App.jsx:193 1481 1303 msgid "We recommend reviewing the Activity Log first. Switch to Enforce mode?" 1482 1304 msgstr "" 1483 1305 1484 #: src/views/Lists.jsx:2 461306 #: src/views/Lists.jsx:256 1485 1307 msgid "Whitelist" 1486 1308 msgstr "" 1487 1309 1488 #: src/views/Lists.jsx:17 51310 #: src/views/Lists.jsx:178 1489 1311 msgid "Whitelist always wins" 1490 1312 msgstr "" 1491 1313 1492 #: src/views/StoreApiGuard.jsx:2 481314 #: src/views/StoreApiGuard.jsx:282 1493 1315 msgid "Whitelist precedence" 1494 1316 msgstr "" … … 1498 1320 msgstr "" 1499 1321 1500 #: src/views/CircuitBreakers.jsx:21 91322 #: src/views/CircuitBreakers.jsx:216 1501 1323 msgid "Window (seconds)" 1502 1324 msgstr "" 1503 1325 1504 #: src/views/Settings.jsx:2 67 src/views/StoreApiGuard.jsx:2701326 #: src/views/Settings.jsx:283 src/views/StoreApiGuard.jsx:308 1505 1327 msgid "WooCommerce Checkout" 1506 1328 msgstr "" 1507 1329 1508 #: src/views/StoreApiGuard.jsx:2 001330 #: src/views/StoreApiGuard.jsx:220 1509 1331 msgid "WooCommerce limiter enabled" 1510 1332 msgstr "" 1511 1333 1512 #: src/views/StoreApiGuard.jsx:2 011334 #: src/views/StoreApiGuard.jsx:224 1513 1335 msgid "WooCommerce limiter not enabled" 1514 1336 msgstr "" 1515 1337 1516 #: src/views/Settings.jsx:244 1338 #: src/views/Dashboard.jsx:262 1339 msgid "WooCommerce protection" 1340 msgstr "" 1341 1342 #: src/views/Settings.jsx:251 1517 1343 msgid "WordPress administrator email" 1518 1344 msgstr "" 1519 1345 1520 #: src/views/Lists.jsx:2 691346 #: src/views/Lists.jsx:285 1521 1347 msgid "WordPress roles" 1522 1348 msgstr "" 1523 1349 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 1529 1351 msgid "X-Forwarded-For first hop" 1530 1352 msgstr "" … … 1538 1360 msgstr "" 1539 1361 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 1559 1363 msgid "Your admin session expired. Please refresh the page and try again." 1560 1364 msgstr "" 1561 1562 #: src/views/PrivacyLogs.jsx:1581563 msgid "days"1564 msgstr "" -
coderembassy-order-vanguard/trunk/readme.txt
r3776959 r3778434 1 1 === CoderEmbassy Order Vanguard === 2 2 Contributors: codersaleh 3 Tags: woocommerce, security, fraud, card testing, fake orders3 Tags: woocommerce, fraud prevention, card testing, fake orders, checkout security 4 4 Requires at least: 6.5 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.1. 17 Stable tag: 1.1.2 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 10 10 11 API-level WooCommerce protection against card testing, automated fake orders, and abusive checkout traffic.11 Monitor and block abusive WooCommerce checkout and Store API traffic with privacy-first local controls. 12 12 13 13 == Description == 14 14 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.15 CoderEmbassy Order Vanguard helps WooCommerce stores respond to card testing, bot orders, and repeated fake-checkout attempts. 16 16 17 For product quantity rules and customer-friendly purchase limits, see [CoderEmbassy Quantity Manager for WooCommerce](https://coderembassy.com/). 17 Protection 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 29 Protection data stays in this WordPress site's database. No external service is required. 30 31 == Installation == 32 33 1. Upload the `coderembassy-order-vanguard` folder to `/wp-content/plugins/`, or install the ZIP from Plugins > Add New > Upload Plugin. 34 2. Activate CoderEmbassy Order Vanguard. 35 3. Open WooCommerce > Order Vanguard. 36 4. Review the Activity Log while Monitor mode is active. 37 5. Configure the circuit breakers, lists, privacy settings, and retention period. 38 6. 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 44 No. It starts in Monitor mode. This records protection decisions without blocking checkout traffic. 45 46 = Does it support WooCommerce Checkout Block? = 47 48 Yes. 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 52 Choose 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 56 No. Protection decisions, settings, hashes, and Activity Log rows remain on the WordPress site. 57 58 = How are IP addresses handled? = 59 60 Repeat-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 64 Checkout-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 68 Yes. Enable Delete all data on uninstall under Privacy & Logs before uninstalling the plugin. 18 69 19 70 == Privacy == 20 71 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.72 Order 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. 22 73 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 == 24 75 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.76 Human-readable admin source and build configuration are included in the plugin package under `src/`, `package.json`, and `package-lock.json`. 26 77 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. 78 The public development repository is: 79 https://github.com/salehST/coderembassy-order-vanguard 28 80 29 == Installation == 81 To rebuild the distributed admin assets: 30 82 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. 83 1. Run `npm install` from the plugin root. 84 2. Run `npm run build`. 35 85 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`. 86 The 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`. 90 87 91 88 == Changelog == 92 89 90 = 1.1.2 = 91 * Updated admin section. 92 93 93 = 1.1.1 = 94 * Store API Guard issue Fixed.95 94 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. 98 104 99 105 = 1.0.0 = 100 * Initial release.101 106 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 23 23 24 24 // 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.InterpolatedNotPrepared25 $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. 26 26 27 27 delete_option( 'ceog_settings' );
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)