diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1171845 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,39 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + quality: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Prettier check + run: npm run format:check + + - name: ESLint + run: npm run lint + + - name: Tests + run: npm test + + - name: Build + run: npm run build diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..1a99321 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +dist/ +node_modules/ +package-lock.json diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..fe2b548 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "printWidth": 90, + "semi": true +} diff --git a/dist/content.js b/dist/content.js index 9b2f405..58c3b0d 100644 --- a/dist/content.js +++ b/dist/content.js @@ -68,7 +68,7 @@ headerAppUserName: "ecac-header-app-user-name font-medium truncate", headerAppUserDoc: "ecac-header-app-user-doc font-mono bg-white/10 px-1.5 py-px rounded text-[10px] shrink-0", headerAppActions: "ecac-header-app-actions flex items-center gap-1 shrink-0", - appContent: "ecac-app-content flex-1 flex flex-col min-h-0 w-full overflow-hidden bg-ecac-surface", + appContent: "ecac-app-content flex-1 flex flex-col min-h-0 w-full overflow-hidden bg-white", appBack: "ecac-app-back inline-flex items-center gap-1.5 text-xs font-medium text-white/90 hover:text-white no-underline transition-colors shrink-0 px-2 py-1.5 rounded-md hover:bg-white/10", appBackIcon: "ecac-app-back-icon text-base leading-none opacity-90", appBackLabel: "ecac-app-back-label hidden sm:inline", @@ -95,6 +95,9 @@ } return normalized; } + function calculateIframeHeight({ windowHeight, headerHeight, padding = 0 }) { + return Math.max(0, windowHeight - headerHeight - padding); + } // src/utils/profile.js function parseProfileInfo(text) { @@ -336,66 +339,18 @@ return main; } - // src/content/shared/page-utils.js - function isRedesignVariantCorrect(root, href) { - if (!root) return false; - const isApp = isEcacApplicationPage(href); - const hasAppRoot = root.classList.contains("ecac-app-root"); - const hasAppLayout = Boolean(root.querySelector(".ecac-layout-app")); - const hasStaleToolbar = Boolean(root.querySelector(".ecac-app-toolbar")); - const hasHomeHeaderOnApp = isApp && Boolean(root.querySelector(".ecac-header:not(.ecac-header-app)")); - if (isApp) { - return hasAppRoot && hasAppLayout && !hasStaleToolbar && !hasHomeHeaderOnApp; - } - return !hasAppRoot && Boolean(root.querySelector(".ecac-layout")); - } - function restoreIframeToLegacyContainer(doc) { - const iframe = doc.getElementById("frmApp"); - const divApp = doc.getElementById("divApp"); - if (!iframe || !divApp || divApp.contains(iframe)) return; - divApp.appendChild(iframe); - } - function removeStaleRedesign(doc, href) { - const root = doc.getElementById("ecac-redesign-root"); - if (!root || isRedesignVariantCorrect(root, href)) return false; - restoreIframeToLegacyContainer(doc); - root.remove(); - doc.body.classList.remove("ecac-redesign", "ecac-app-page"); - doc.documentElement.style.height = ""; - return true; - } - function lockApplicationIframe(doc, win = window) { - const iframe = doc.getElementById("frmApp"); - if (!iframe) return () => { - }; - const applyLayout = () => { - if (!iframe.isConnected) return; - iframe.style.setProperty("display", "block", "important"); - iframe.style.setProperty("width", "100%", "important"); - iframe.style.setProperty("height", "100%", "important"); - iframe.style.setProperty("border", "0", "important"); - iframe.style.setProperty("min-height", "0", "important"); - }; - applyLayout(); - const onResize = () => applyLayout(); - win.addEventListener("resize", onResize); - const timers = [100, 500, 1500].map((delay) => win.setTimeout(applyLayout, delay)); - return () => { - win.removeEventListener("resize", onResize); - timers.forEach((id) => win.clearTimeout(id)); - }; - } - // src/content/application-page.js - var unlockIframeLayout = null; + var IFRAME_RESIZE_DELAYS_MS = [100, 500, 1500]; function applyApplicationPageRedesign(doc, win = window) { + const existingRoot = doc.getElementById("ecac-redesign-root"); + const existingIframe = doc.getElementById("frmApp"); + if (existingRoot?.contains(existingIframe)) { + resizeApplicationIframe(doc, win); + return; + } const cabecalho = doc.getElementById("cabecalho"); - const conteudo = doc.getElementById("conteudo"); - if (!cabecalho || !conteudo) return; - unlockIframeLayout?.(); - unlockIframeLayout = null; - hideLegacyChrome(doc); - doc.body.classList.add("ecac-app-page"); + const iframe = doc.getElementById("frmApp"); + if (!cabecalho || !iframe) return; const root = createRoot(doc, { variant: "app" }); const layout = doc.createElement("div"); layout.className = tw.layoutApp; @@ -403,35 +358,71 @@ const appTitle = getApplicationTitle(doc); const header = createAppHeader(doc, cabecalho, appTitle); layout.appendChild(header); - const appContent = createAppContent(doc, conteudo); + const appContent = createAppContent(doc, iframe); layout.appendChild(appContent); root.appendChild(layout); mountRoot(doc, root); - unlockIframeLayout = lockApplicationIframe(doc); - const resize = () => resizeApplicationIframe(doc); + hideLegacyChrome(doc); + doc.body.classList.add("ecac-app-page"); + const resize = () => resizeApplicationIframe(doc, win); resize(); win.addEventListener("resize", resize); + IFRAME_RESIZE_DELAYS_MS.forEach((delay) => win.setTimeout(resize, delay)); } - function createAppContent(doc, conteudo) { + function createAppContent(doc, iframe) { const appContent = doc.createElement("div"); appContent.className = tw.appContent; const frame = doc.createElement("div"); frame.className = tw.appFrame; - const iframe = conteudo.querySelector("#frmApp"); - if (iframe) { - iframe.classList.add("ecac-app-iframe"); - frame.appendChild(iframe); - } + iframe.classList.add("ecac-app-iframe"); + iframe.style.removeProperty("display"); + frame.appendChild(iframe); appContent.appendChild(frame); return appContent; } - function resizeApplicationIframe(doc) { + function resizeApplicationIframe(doc, win = window) { const iframe = doc.getElementById("frmApp"); + const header = doc.querySelector(".ecac-header-app"); if (!iframe) return; + const headerHeight = header?.getBoundingClientRect().height ?? 0; + const height = calculateIframeHeight({ + windowHeight: win.innerHeight, + headerHeight + }); iframe.style.setProperty("display", "block", "important"); iframe.style.setProperty("width", "100%", "important"); - iframe.style.setProperty("height", "100%", "important"); + iframe.style.setProperty("height", `${height}px`, "important"); iframe.style.setProperty("border", "0", "important"); + iframe.style.setProperty("min-height", "0", "important"); + } + + // src/content/shared/page-utils.js + function isRedesignVariantCorrect(root, href) { + if (!root) return false; + const isApp = isEcacApplicationPage(href); + const hasAppRoot = root.classList.contains("ecac-app-root"); + const hasAppLayout = Boolean(root.querySelector(".ecac-layout-app")); + const hasStaleToolbar = Boolean(root.querySelector(".ecac-app-toolbar")); + const hasHomeHeaderOnApp = isApp && Boolean(root.querySelector(".ecac-header:not(.ecac-header-app)")); + if (isApp) { + return hasAppRoot && hasAppLayout && !hasStaleToolbar && !hasHomeHeaderOnApp; + } + return !hasAppRoot && Boolean(root.querySelector(".ecac-layout")); + } + function restoreIframeToLegacyContainer(doc) { + const iframe = doc.getElementById("frmApp"); + const divApp = doc.getElementById("divApp"); + if (!iframe || !divApp || divApp.contains(iframe)) return; + divApp.appendChild(iframe); + } + function removeStaleRedesign(doc, href) { + const root = doc.getElementById("ecac-redesign-root"); + if (!root || isRedesignVariantCorrect(root, href)) return false; + restoreIframeToLegacyContainer(doc); + root.remove(); + doc.body.classList.remove("ecac-redesign", "ecac-app-page"); + doc.documentElement.style.height = ""; + return true; } // src/content/index.js @@ -448,25 +439,24 @@ const href = window.location.href; const run = getRedesignRunner(href); if (!run) return; - removeStaleRedesign(document, href); const root = document.getElementById("ecac-redesign-root"); - if (root && isRedesignVariantCorrect(root, href)) return; + if (root && isRedesignVariantCorrect(root, href)) { + if (isEcacApplicationPage(href)) { + applyApplicationPageRedesign(document, window); + } + return; + } + removeStaleRedesign(document, href); run(); } function init() { applyRedesign(); const observer = new MutationObserver(() => { - const root = document.getElementById("ecac-redesign-root"); - const href = window.location.href; - if (!root) { - applyRedesign(); - return; - } - if (!isRedesignVariantCorrect(root, href)) { + if (!document.getElementById("ecac-redesign-root")) { applyRedesign(); } }); - observer.observe(document.body, { childList: true, subtree: true }); + observer.observe(document.body, { childList: true }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); diff --git a/dist/leilao-content.js b/dist/leilao-content.js new file mode 100644 index 0000000..e431c26 --- /dev/null +++ b/dist/leilao-content.js @@ -0,0 +1,48 @@ +(() => { + // src/utils/leilao-url.js + function isLeilaoEletronicoApp(url) { + try { + const { hostname, pathname } = new URL(url); + return hostname === "www3.cav.receita.fazenda.gov.br" && pathname.startsWith("/leilaoEletronicoInter"); + } catch { + return false; + } + } + + // src/iframe/leilao/leilao-redesign.js + var BODY_CLASS = "ecac-leilao-redesign"; + function markRedesign(doc) { + doc.documentElement.classList.add(BODY_CLASS); + doc.body.classList.add(BODY_CLASS); + } + function hideRedundantChrome(doc) { + doc.querySelectorAll("breadcrumb, .breadcrumb").forEach((el) => { + el.style.display = "none"; + el.setAttribute("aria-hidden", "true"); + }); + } + function applyLeilaoRedesign(doc = document) { + const href = doc.defaultView?.location?.href ?? ""; + if (!isLeilaoEletronicoApp(href)) return; + markRedesign(doc); + hideRedundantChrome(doc); + } + + // src/iframe/leilao/index.js + function init() { + applyLeilaoRedesign(document); + const observer = new MutationObserver(() => { + if (!document.body.classList.contains("ecac-leilao-redesign")) { + applyLeilaoRedesign(document); + } else { + hideRedundantChrome(document); + } + }); + observer.observe(document.body, { childList: true, subtree: true }); + } + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", init); + } else { + init(); + } +})(); diff --git a/dist/leilao-styles.css b/dist/leilao-styles.css new file mode 100644 index 0000000..bae9dae --- /dev/null +++ b/dist/leilao-styles.css @@ -0,0 +1,370 @@ +/* e-CAC Leilão Eletrônico — redesign inside iframe */ + +body.ecac-leilao-redesign { + font-family: + Rawline, + 'Segoe UI', + system-ui, + -apple-system, + sans-serif !important; + background: #f0f2f5 !important; + color: #334155 !important; + -webkit-font-smoothing: antialiased; +} + +body.ecac-leilao-redesign .container-fluid { + max-width: 1400px; + margin: 0 auto; + padding: 1rem 1.25rem 2rem !important; +} + +body.ecac-leilao-redesign breadcrumb, +body.ecac-leilao-redesign .breadcrumb { + display: none !important; +} + +/* Layout */ +body.ecac-leilao-redesign .portal.row-offcanvas { + display: flex !important; + flex-wrap: wrap; + gap: 1.25rem; + margin-left: 0 !important; + margin-right: 0 !important; +} + +body.ecac-leilao-redesign #sidebar.sidebar-filtros { + float: none !important; + width: 100% !important; + max-width: 280px; + flex: 0 0 280px; + position: static !important; + transform: none !important; + background: transparent !important; + border: 0 !important; + padding: 0 !important; +} + +body.ecac-leilao-redesign .portal > div:not(#sidebar) { + float: none !important; + width: auto !important; + flex: 1 1 480px; + min-width: 0; + padding: 0 !important; +} + +/* Sidebar filters */ +body.ecac-leilao-redesign .sidebar-filtros .panel-group { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +body.ecac-leilao-redesign .sidebar-filtros .categoria-filtro, +body.ecac-leilao-redesign .sidebar-filtros .panel.panel-primary { + background: #fff !important; + border: 1px solid #e2e8f0 !important; + border-radius: 0.625rem !important; + box-shadow: 0 1px 2px rgba(7, 29, 65, 0.04) !important; + overflow: hidden; + margin: 0 !important; +} + +body.ecac-leilao-redesign .sidebar-filtros .panel-heading { + background: #071d41 !important; + color: #fff !important; + border: 0 !important; + padding: 0.625rem 0.875rem !important; + font-size: 0.75rem !important; + font-weight: 700 !important; + letter-spacing: 0.04em; + text-transform: uppercase; + border-radius: 0 !important; +} + +body.ecac-leilao-redesign .sidebar-filtros .panel-body { + padding: 0.5rem 0.875rem 0.75rem !important; + border: 0 !important; + background: #fff !important; +} + +body.ecac-leilao-redesign .sidebar-filtros .checkbox { + margin: 0.35rem 0 !important; +} + +body.ecac-leilao-redesign .sidebar-filtros .checkbox label { + font-size: 0.8125rem !important; + color: #475569 !important; + font-weight: 500; + cursor: pointer; + display: flex; + align-items: center; + gap: 0.5rem; +} + +body.ecac-leilao-redesign .sidebar-filtros .checkbox input[type='checkbox'] { + accent-color: #1351b4; + width: 1rem; + height: 1rem; + margin: 0 !important; +} + +body.ecac-leilao-redesign .sidebar-filtros .badge { + background: #eff6ff !important; + color: #1351b4 !important; + font-weight: 600; + border-radius: 999px; + padding: 0.15rem 0.5rem; + font-size: 0.6875rem; + margin-left: auto; +} + +body.ecac-leilao-redesign .sidebar-filtros .btn-xs { + border-radius: 0.375rem !important; + border-color: rgba(255, 255, 255, 0.25) !important; + background: rgba(255, 255, 255, 0.1) !important; + color: #fff !important; +} + +/* Search */ +body.ecac-leilao-redesign .text-search, +body.ecac-leilao-redesign .form-group.text-search { + margin-bottom: 1.25rem !important; +} + +body.ecac-leilao-redesign .text-search .input-group { + display: flex !important; + border-radius: 0.625rem !important; + overflow: hidden; + box-shadow: 0 1px 3px rgba(7, 29, 65, 0.08); + border: 1px solid #e2e8f0; + background: #fff; +} + +body.ecac-leilao-redesign .text-search .form-control { + border: 0 !important; + box-shadow: none !important; + height: 2.75rem !important; + padding: 0.625rem 1rem !important; + font-size: 0.875rem !important; + background: #fff !important; +} + +body.ecac-leilao-redesign .text-search .form-control:focus { + outline: none !important; +} + +body.ecac-leilao-redesign .text-search .input-group-btn .btn, +body.ecac-leilao-redesign .btn-text-search { + background: #ffcd07 !important; + border: 0 !important; + color: #071d41 !important; + height: 2.75rem !important; + min-width: 2.75rem; + border-radius: 0 !important; + font-weight: 600; +} + +body.ecac-leilao-redesign .text-search .input-group-btn .btn:hover, +body.ecac-leilao-redesign .btn-text-search:hover { + background: #e5b800 !important; +} + +/* Toolbox buttons */ +body.ecac-leilao-redesign .toolbox { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-bottom: 1.25rem !important; + align-items: center; +} + +body.ecac-leilao-redesign .toolbox .btn-primary { + background: #1351b4 !important; + border-color: #1351b4 !important; + border-radius: 0.5rem !important; + font-size: 0.8125rem !important; + font-weight: 600; + padding: 0.5rem 0.875rem !important; + box-shadow: none !important; +} + +body.ecac-leilao-redesign .toolbox .btn-primary:hover { + background: #071d41 !important; + border-color: #071d41 !important; +} + +body.ecac-leilao-redesign .toolbox .btn-default { + border-radius: 0.5rem !important; + border-color: #cbd5e1 !important; + background: #fff !important; + color: #475569 !important; +} + +body.ecac-leilao-redesign .toolbox .btn-group .btn.active { + background: #071d41 !important; + border-color: #071d41 !important; + color: #fff !important; +} + +/* Carousel */ +body.ecac-leilao-redesign .carrossel-portal-inner, +body.ecac-leilao-redesign .owl-carousel { + margin-bottom: 1.5rem !important; +} + +body.ecac-leilao-redesign .item-carrossel-portal { + padding: 0 0.375rem; +} + +body.ecac-leilao-redesign .carrossel-item-image, +body.ecac-leilao-redesign .grid-item .imagem { + border-radius: 0.75rem !important; + overflow: hidden !important; + box-shadow: 0 4px 14px rgba(7, 29, 65, 0.1) !important; + border: 1px solid #e2e8f0 !important; + background: #fff !important; +} + +body.ecac-leilao-redesign .imagem-valor { + background: linear-gradient(transparent, rgba(7, 29, 65, 0.88)) !important; + padding: 0.75rem !important; + font-size: 0.75rem !important; + font-weight: 600; + border-radius: 0 0 0.75rem 0.75rem; +} + +body.ecac-leilao-redesign .legenda, +body.ecac-leilao-redesign .legenda-inferior { + padding: 0.625rem 0.25rem 0 !important; + font-size: 0.75rem !important; + line-height: 1.35 !important; + color: #475569 !important; +} + +body.ecac-leilao-redesign .legenda strong, +body.ecac-leilao-redesign .dados strong { + color: #071d41 !important; +} + +body.ecac-leilao-redesign .owl-nav button, +body.ecac-leilao-redesign .owl-prev, +body.ecac-leilao-redesign .owl-next { + background: #fff !important; + border: 1px solid #e2e8f0 !important; + border-radius: 999px !important; + width: 2rem !important; + height: 2rem !important; + box-shadow: 0 2px 6px rgba(7, 29, 65, 0.08) !important; +} + +body.ecac-leilao-redesign .owl-dots .owl-dot span { + background: #cbd5e1 !important; +} + +body.ecac-leilao-redesign .owl-dots .owl-dot.active span { + background: #1351b4 !important; +} + +/* Panels / tables */ +body.ecac-leilao-redesign .panel-editais, +body.ecac-leilao-redesign .panel-default.panel-table { + background: #fff !important; + border: 1px solid #e2e8f0 !important; + border-radius: 0.75rem !important; + box-shadow: 0 1px 3px rgba(7, 29, 65, 0.05) !important; + overflow: hidden; + margin-bottom: 1.25rem !important; +} + +body.ecac-leilao-redesign .panel-editais > .panel-heading, +body.ecac-leilao-redesign .panel-default.panel-table > .panel-heading { + background: #071d41 !important; + color: #fff !important; + border: 0 !important; + padding: 0.75rem 1rem !important; + font-size: 0.875rem !important; + font-weight: 700 !important; + border-radius: 0 !important; +} + +body.ecac-leilao-redesign .panel-editais .panel-body, +body.ecac-leilao-redesign .panel-default.panel-table .panel-body { + padding: 0 !important; + border: 0 !important; +} + +body.ecac-leilao-redesign .panel-editais .table, +body.ecac-leilao-redesign .panel-default.panel-table .table { + margin-bottom: 0 !important; + font-size: 0.8125rem !important; +} + +body.ecac-leilao-redesign .panel-editais .table > thead > tr > th, +body.ecac-leilao-redesign .panel-default.panel-table .table > thead > tr > th { + background: #f8fafc !important; + color: #071d41 !important; + font-weight: 700 !important; + font-size: 0.6875rem !important; + text-transform: uppercase; + letter-spacing: 0.04em; + border-bottom: 2px solid #e2e8f0 !important; + padding: 0.75rem 1rem !important; +} + +body.ecac-leilao-redesign .panel-editais .table > tbody > tr > td, +body.ecac-leilao-redesign .panel-default.panel-table .table > tbody > tr > td { + padding: 0.75rem 1rem !important; + vertical-align: middle !important; + border-color: #f1f5f9 !important; + color: #475569 !important; +} + +body.ecac-leilao-redesign .panel-editais .table-striped > tbody > tr:nth-of-type(odd), +body.ecac-leilao-redesign + .panel-default.panel-table + .table-striped + > tbody + > tr:nth-of-type(odd) { + background: #fafbfc !important; +} + +body.ecac-leilao-redesign .panel-editais .table-hover > tbody > tr:hover, +body.ecac-leilao-redesign .panel-default.panel-table .table-hover > tbody > tr:hover { + background: #eff6ff !important; +} + +body.ecac-leilao-redesign .panel-editais a, +body.ecac-leilao-redesign .panel-default.panel-table a { + color: #1351b4 !important; + font-weight: 600; + text-decoration: none; +} + +body.ecac-leilao-redesign .panel-editais a:hover, +body.ecac-leilao-redesign .panel-default.panel-table a:hover { + color: #071d41 !important; + text-decoration: underline; +} + +body.ecac-leilao-redesign .ribbon { + background: #1351b4 !important; + font-size: 0.625rem !important; + font-weight: 700; + letter-spacing: 0.03em; +} + +body.ecac-leilao-redesign .encerrado, +body.ecac-leilao-redesign .encerrando { + opacity: 0.65; +} + +@media (max-width: 991px) { + body.ecac-leilao-redesign #sidebar.sidebar-filtros { + max-width: 100%; + flex: 1 1 100%; + } + + body.ecac-leilao-redesign .portal.row-offcanvas { + flex-direction: column; + } +} diff --git a/dist/styles.css b/dist/styles.css index 6f0e2fe..ca1ce3a 100644 --- a/dist/styles.css +++ b/dist/styles.css @@ -1 +1 @@ -*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Rawline,Segoe UI,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}body.ecac-redesign{margin:0;min-width:0;padding:0;background:#f0f2f5!important;background-image:none!important}html:has(body.ecac-app-page){height:100%}body.ecac-app-page{height:100vh;overflow:hidden}body.ecac-redesign #barra-brasil,body.ecac-redesign #cabecalho,body.ecac-redesign #conteudo,body.ecac-redesign #rodape{display:none!important}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}#ecac-redesign-root .ecac-sr-only{position:absolute;margin:-1px;height:1px;width:1px;overflow:hidden;white-space:nowrap;border-width:0;padding:0;clip:rect(0,0,0,0)}#ecac-redesign-root :is(.ecac-search #frmPesquisar){display:flex;align-items:stretch;gap:.5rem}#ecac-redesign-root :is(.ecac-search #frmPesquisar label[for=txtPesquisar]){display:none}#ecac-redesign-root :is(.ecac-search #txtPesquisar){flex:1 1 0%;border-radius:.375rem;border-width:0;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#ecac-redesign-root :is(.ecac-search #txtPesquisar)::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root :is(.ecac-search #txtPesquisar)::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root :is(.ecac-search #txtPesquisar:focus){outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-color:rgba(255,205,7,.6)}#ecac-redesign-root .ecac-search #txtPesquisar{width:auto!important;height:auto!important}#ecac-redesign-root :is(.ecac-search #btnPesquisar){position:relative;height:2.5rem;width:2.5rem;flex-shrink:0;cursor:pointer;border-radius:.375rem;border-width:0;--tw-bg-opacity:1;background-color:rgb(255 205 7/var(--tw-bg-opacity,1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}#ecac-redesign-root :is(.ecac-search #btnPesquisar:hover){--tw-bg-opacity:1;background-color:rgb(229 184 0/var(--tw-bg-opacity,1))}#ecac-redesign-root .ecac-search #btnPesquisar{background-image:none!important}#ecac-redesign-root .ecac-search #btnPesquisar:after{content:""}#ecac-redesign-root :is(.ecac-search #btnPesquisar):after{position:absolute;inset:0;margin:auto;height:1rem;width:1rem}#ecac-redesign-root .ecac-search #btnPesquisar:after{background:currentColor;mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 21-4.35-4.35M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14'/%3E%3C/svg%3E") center /contain no-repeat;-webkit-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 21-4.35-4.35M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14'/%3E%3C/svg%3E") center /contain no-repeat}#ecac-redesign-root .ecac-action-btn,:is(#ecac-redesign-root .ecac-header-actions .ecac-action-btn),:is(#ecac-redesign-root .ecac-header-app-actions .ecac-action-btn){position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-radius:.375rem;text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;height:2.25rem;width:2.25rem;border-width:1px;border-color:hsla(0,0%,100%,.15);background-color:hsla(0,0%,100%,.1);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root .ecac-action-btn:hover,:is(#ecac-redesign-root .ecac-header-actions .ecac-action-btn:hover),:is(#ecac-redesign-root .ecac-header-app-actions .ecac-action-btn:hover){border-color:hsla(0,0%,100%,.25);background-color:hsla(0,0%,100%,.2)}#ecac-redesign-root .ecac-action-btn,#ecac-redesign-root .ecac-header-actions .ecac-action-btn,#ecac-redesign-root .ecac-header-app-actions .ecac-action-btn{background-image:none!important;width:2.25rem!important;height:2.25rem!important;float:none!important;margin:0!important;padding:0!important}#ecac-redesign-root .ecac-action-btn--alert:after{content:"";position:absolute;top:.25rem;right:.25rem;height:.5rem;width:.5rem;border-radius:9999px;border-width:1px;--tw-border-opacity:1;border-color:rgb(7 29 65/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 205 7/var(--tw-bg-opacity,1))}#ecac-redesign-root .ecac-action-btn:before{content:"";height:1rem;width:1rem;flex-shrink:0;background:currentColor;mask-size:contain;mask-repeat:no-repeat;mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center}#ecac-redesign-root #btnPerfil.ecac-action-btn:before{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0m-4 7a7 7 0 0 0-7 7h14a7 7 0 0 0-7-7'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0m-4 7a7 7 0 0 0-7 7h14a7 7 0 0 0-7-7'/%3E%3C/svg%3E")}#ecac-redesign-root #btnCaixaPostal.ecac-action-btn:before{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m3 8 7.89 5.26a2 2 0 0 0 2.22 0L21 8M5 19h14a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m3 8 7.89 5.26a2 2 0 0 0 2.22 0L21 8M5 19h14a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2'/%3E%3C/svg%3E")}#ecac-redesign-root #sairSeguranca.ecac-action-btn:before{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m17 16 4-4m0 0-4-4m4 4H7m6 4v1a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h4a3 3 0 0 1 3 3v1'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m17 16 4-4m0 0-4-4m4 4H7m6 4v1a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h4a3 3 0 0 1 3 3v1'/%3E%3C/svg%3E")}#ecac-redesign-root :is(.ecac-action-btn .botaoAzul),:is(#ecac-redesign-root .ecac-action-btn span){display:none}#ecac-redesign-root :is(.ecac-sidebar .carregando){min-height:60px;border-radius:.375rem}#ecac-redesign-root .ecac-sidebar .carregando{background:linear-gradient(90deg,#f0f4f8 25%,#e2e8f0 50%,#f0f4f8 75%);background-size:200% 100%;animation:ecac-shimmer 1.5s infinite}#ecac-redesign-root #grupos{margin:0 0 1rem;display:flex;width:100%;list-style-type:none;flex-wrap:wrap;gap:.5rem;padding:0;float:none!important}#ecac-redesign-root #grupos li{float:none!important;margin:0!important}#ecac-redesign-root :is(#grupos li a){display:inline-block;border-radius:9999px;padding:.375rem .875rem;font-size:.875rem;line-height:1.25rem;text-decoration-line:none;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-width:1px;--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1))}#ecac-redesign-root :is(#grupos li a:hover){--tw-border-opacity:1;border-color:rgb(19 81 180/var(--tw-border-opacity,1));--tw-text-opacity:1;color:rgb(19 81 180/var(--tw-text-opacity,1))}#ecac-redesign-root #grupos li a{background-image:none!important;width:auto!important;height:auto!important}#ecac-redesign-root :is(#grupos li a:hover),:is(#ecac-redesign-root #grupos li.ativo a){--tw-border-opacity:1;border-color:rgb(7 29 65/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(7 29 65/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root #servicos{float:none!important;width:100%!important;clear:both!important}#ecac-redesign-root :is(#servicos .containerServicos){display:grid;width:100%;gap:.625rem;padding:0}#ecac-redesign-root #servicos .containerServicos{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));float:none!important}#ecac-redesign-root :is(#servicos .containerServicos a){display:block;border-radius:.5rem;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;line-height:1.375;text-decoration-line:none;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-width:1px;--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}#ecac-redesign-root :is(#servicos .containerServicos a:hover){--tw-border-opacity:1;border-color:rgb(19 81 180/var(--tw-border-opacity,1));--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#ecac-redesign-root #servicos .containerServicos a{background-image:none!important;width:auto!important;height:auto!important;float:none!important}#ecac-redesign-root :is(.ecac-sidebar a){display:block;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1));padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1));text-decoration-line:none}#ecac-redesign-root :is(.ecac-sidebar a:last-child){border-width:0}#ecac-redesign-root .ecac-sidebar a{background-image:none!important;width:auto!important;height:auto!important}#ecac-redesign-root :is(.ecac-sidebar a:hover){--tw-text-opacity:1;color:rgb(19 81 180/var(--tw-text-opacity,1))}#ecac-redesign-root :is(.ecac-app-frame .ecac-app-iframe),:is(#ecac-redesign-root .ecac-app-frame #frmApp){display:block;height:100%;width:100%;border-width:0}#ecac-redesign-root .ecac-app-frame #frmApp,#ecac-redesign-root .ecac-app-frame .ecac-app-iframe{display:block!important;width:100%!important;height:100%!important;min-height:0!important;border:0!important}#ecac-redesign-root .visible{visibility:visible}#ecac-redesign-root .fixed{position:fixed}#ecac-redesign-root .absolute{position:absolute}#ecac-redesign-root .relative{position:relative}#ecac-redesign-root .inset-0{inset:0}#ecac-redesign-root .right-1{right:.25rem}#ecac-redesign-root .top-1{top:.25rem}#ecac-redesign-root .z-\[99999\]{z-index:99999}#ecac-redesign-root .-m-px{margin:-1px}#ecac-redesign-root .m-0{margin:0}#ecac-redesign-root .m-auto{margin:auto}#ecac-redesign-root .mx-auto{margin-left:auto;margin-right:auto}#ecac-redesign-root .mb-1{margin-bottom:.25rem}#ecac-redesign-root .mb-3{margin-bottom:.75rem}#ecac-redesign-root .mb-4{margin-bottom:1rem}#ecac-redesign-root .mt-0\.5{margin-top:.125rem}#ecac-redesign-root .block{display:block}#ecac-redesign-root .inline-block{display:inline-block}#ecac-redesign-root .inline{display:inline}#ecac-redesign-root .flex{display:flex}#ecac-redesign-root .inline-flex{display:inline-flex}#ecac-redesign-root .grid{display:grid}#ecac-redesign-root .hidden{display:none}#ecac-redesign-root .h-10{height:2.5rem}#ecac-redesign-root .h-2{height:.5rem}#ecac-redesign-root .h-4{height:1rem}#ecac-redesign-root .h-9{height:2.25rem}#ecac-redesign-root .h-full{height:100%}#ecac-redesign-root .h-px{height:1px}#ecac-redesign-root .min-h-0{min-height:0}#ecac-redesign-root .min-h-\[400px\]{min-height:400px}#ecac-redesign-root .min-h-\[48px\]{min-height:48px}#ecac-redesign-root .min-h-\[60px\]{min-height:60px}#ecac-redesign-root .min-h-screen{min-height:100vh}#ecac-redesign-root .w-10{width:2.5rem}#ecac-redesign-root .w-2{width:.5rem}#ecac-redesign-root .w-4{width:1rem}#ecac-redesign-root .w-9{width:2.25rem}#ecac-redesign-root .w-full{width:100%}#ecac-redesign-root .w-px{width:1px}#ecac-redesign-root .min-w-0{min-width:0}#ecac-redesign-root .min-w-\[180px\]{min-width:180px}#ecac-redesign-root .max-w-7xl{max-width:80rem}#ecac-redesign-root .max-w-\[140px\]{max-width:140px}#ecac-redesign-root .max-w-\[220px\]{max-width:220px}#ecac-redesign-root .max-w-\[240px\]{max-width:240px}#ecac-redesign-root .max-w-xl{max-width:36rem}#ecac-redesign-root .flex-1{flex:1 1 0%}#ecac-redesign-root .shrink-0{flex-shrink:0}#ecac-redesign-root .cursor-pointer{cursor:pointer}#ecac-redesign-root .resize{resize:both}#ecac-redesign-root .list-none{list-style-type:none}#ecac-redesign-root .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#ecac-redesign-root .flex-col{flex-direction:column}#ecac-redesign-root .flex-wrap{flex-wrap:wrap}#ecac-redesign-root .items-center{align-items:center}#ecac-redesign-root .justify-center{justify-content:center}#ecac-redesign-root .gap-1{gap:.25rem}#ecac-redesign-root .gap-1\.5{gap:.375rem}#ecac-redesign-root .gap-2{gap:.5rem}#ecac-redesign-root .gap-2\.5{gap:.625rem}#ecac-redesign-root .gap-3{gap:.75rem}#ecac-redesign-root .gap-4{gap:1rem}#ecac-redesign-root .gap-5{gap:1.25rem}#ecac-redesign-root .gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}#ecac-redesign-root .gap-x-4{-moz-column-gap:1rem;column-gap:1rem}#ecac-redesign-root .gap-y-0\.5{row-gap:.125rem}#ecac-redesign-root .gap-y-3{row-gap:.75rem}#ecac-redesign-root .overflow-hidden{overflow:hidden}#ecac-redesign-root .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#ecac-redesign-root .whitespace-nowrap{white-space:nowrap}#ecac-redesign-root .rounded{border-radius:.25rem}#ecac-redesign-root .rounded-full{border-radius:9999px}#ecac-redesign-root .rounded-lg{border-radius:.5rem}#ecac-redesign-root .rounded-md{border-radius:.375rem}#ecac-redesign-root .border{border-width:1px}#ecac-redesign-root .border-0{border-width:0}#ecac-redesign-root .border-b{border-bottom-width:1px}#ecac-redesign-root .border-b-2{border-bottom-width:2px}#ecac-redesign-root .border-t{border-top-width:1px}#ecac-redesign-root .border-ecac-gold{--tw-border-opacity:1;border-color:rgb(255 205 7/var(--tw-border-opacity,1))}#ecac-redesign-root .border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}#ecac-redesign-root .border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}#ecac-redesign-root .border-slate-200\/80{border-color:rgba(226,232,240,.8)}#ecac-redesign-root .border-white\/10{border-color:hsla(0,0%,100%,.1)}#ecac-redesign-root .border-white\/15{border-color:hsla(0,0%,100%,.15)}#ecac-redesign-root .bg-ecac-gold{--tw-bg-opacity:1;background-color:rgb(255 205 7/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-ecac-navy{--tw-bg-opacity:1;background-color:rgb(7 29 65/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-ecac-navy\/95{background-color:rgba(7,29,65,.95)}#ecac-redesign-root .bg-ecac-surface{--tw-bg-opacity:1;background-color:rgb(240 242 245/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-white\/10{background-color:hsla(0,0%,100%,.1)}#ecac-redesign-root .bg-white\/20{background-color:hsla(0,0%,100%,.2)}#ecac-redesign-root .p-0{padding:0}#ecac-redesign-root .p-4{padding:1rem}#ecac-redesign-root .p-5{padding:1.25rem}#ecac-redesign-root .px-1\.5{padding-left:.375rem;padding-right:.375rem}#ecac-redesign-root .px-2{padding-left:.5rem;padding-right:.5rem}#ecac-redesign-root .px-3{padding-left:.75rem;padding-right:.75rem}#ecac-redesign-root .px-3\.5{padding-left:.875rem;padding-right:.875rem}#ecac-redesign-root .px-4{padding-left:1rem;padding-right:1rem}#ecac-redesign-root .py-1\.5{padding-top:.375rem;padding-bottom:.375rem}#ecac-redesign-root .py-2{padding-top:.5rem;padding-bottom:.5rem}#ecac-redesign-root .py-2\.5{padding-top:.625rem;padding-bottom:.625rem}#ecac-redesign-root .py-3{padding-top:.75rem;padding-bottom:.75rem}#ecac-redesign-root .py-px{padding-top:1px;padding-bottom:1px}#ecac-redesign-root .pb-2{padding-bottom:.5rem}#ecac-redesign-root .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}#ecac-redesign-root .font-sans{font-family:Rawline,Segoe UI,system-ui,-apple-system,sans-serif}#ecac-redesign-root .text-\[10px\]{font-size:10px}#ecac-redesign-root .text-\[11px\]{font-size:11px}#ecac-redesign-root .text-base{font-size:1rem;line-height:1.5rem}#ecac-redesign-root .text-lg{font-size:1.125rem;line-height:1.75rem}#ecac-redesign-root .text-sm{font-size:.875rem;line-height:1.25rem}#ecac-redesign-root .text-xl{font-size:1.25rem;line-height:1.75rem}#ecac-redesign-root .text-xs{font-size:.75rem;line-height:1rem}#ecac-redesign-root .font-bold{font-weight:700}#ecac-redesign-root .font-medium{font-weight:500}#ecac-redesign-root .font-semibold{font-weight:600}#ecac-redesign-root .uppercase{text-transform:uppercase}#ecac-redesign-root .leading-none{line-height:1}#ecac-redesign-root .leading-snug{line-height:1.375}#ecac-redesign-root .leading-tight{line-height:1.25}#ecac-redesign-root .tracking-tight{letter-spacing:-.025em}#ecac-redesign-root .tracking-wide{letter-spacing:.025em}#ecac-redesign-root .tracking-wider{letter-spacing:.05em}#ecac-redesign-root .text-ecac-navy{--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1))}#ecac-redesign-root .text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}#ecac-redesign-root .text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}#ecac-redesign-root .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root .text-white\/60{color:hsla(0,0%,100%,.6)}#ecac-redesign-root .text-white\/70{color:hsla(0,0%,100%,.7)}#ecac-redesign-root .text-white\/75{color:hsla(0,0%,100%,.75)}#ecac-redesign-root .text-white\/85{color:hsla(0,0%,100%,.85)}#ecac-redesign-root .text-white\/90{color:hsla(0,0%,100%,.9)}#ecac-redesign-root .text-white\/95{color:hsla(0,0%,100%,.95)}#ecac-redesign-root .no-underline{text-decoration-line:none}#ecac-redesign-root .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#ecac-redesign-root .opacity-90{opacity:.9}#ecac-redesign-root .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#ecac-redesign-root .outline{outline-style:solid}#ecac-redesign-root .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}#ecac-redesign-root .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}body.ecac-redesign .ac_results,body.ecac-redesign .ac_results ul{border-radius:.5rem;border:1px solid #cbd5e1!important;box-shadow:0 10px 24px rgba(7,29,65,.12);overflow:hidden}body.ecac-redesign .ac_results li{font-size:.8125rem!important;line-height:1.25rem!important;padding:.5rem .75rem!important;color:#334155!important}body.ecac-redesign .ac_results li.ac_over{background:#eff6ff!important;border-left:3px solid #1351b4!important}body.ecac-redesign .ac_results .nome{color:#071d41!important;font-weight:600}body.ecac-redesign .ui-widget-overlay{background:rgba(7,29,65,.45)!important}body.ecac-redesign .ui-dialog{border-radius:.75rem!important;border:1px solid #e2e8f0!important;box-shadow:0 24px 48px rgba(7,29,65,.18)!important;padding:0!important;font-family:Rawline,Segoe UI,system-ui,sans-serif!important}body.ecac-redesign .ui-dialog-titlebar{background:#071d41!important;color:#fff!important;border:0!important;border-radius:.75rem .75rem 0 0!important;padding:.875rem 1rem!important}body.ecac-redesign .ui-dialog-title{font-size:.9375rem!important;font-weight:600!important}body.ecac-redesign .ui-dialog-content{padding:1rem 1.25rem 1.25rem!important;color:#334155!important;font-size:.875rem!important}body.ecac-redesign .dialog-form form{margin-bottom:1rem!important;padding-bottom:1rem;border-bottom:1px solid #f1f5f9}body.ecac-redesign .dialog-form form:last-child{border-bottom:0;margin-bottom:0;padding-bottom:0}body.ecac-redesign .dialog-form label{text-transform:none!important;color:#475569!important;font-size:.8125rem!important;margin-bottom:.375rem}body.ecac-redesign .dialog-form input.textbox{width:100%!important;max-width:100%;height:auto!important;padding:.5rem .75rem!important;border-radius:.375rem!important;border:1px solid #cbd5e1!important;background:#fff!important;margin:0 0 .75rem!important}body.ecac-redesign .dialog-form input.textbox:focus{outline:none;border-color:#1351b4!important;box-shadow:0 0 0 3px rgba(19,81,180,.15)}body.ecac-redesign .dialog-form input.submit{background:#1351b4!important;background-image:none!important;border:0!important;color:#fff!important;border-radius:.375rem!important;min-width:5.5rem!important;height:auto!important;padding:.5rem 1rem!important;font-size:.8125rem!important}body.ecac-redesign .dialog-form input.submit:hover{background:#071d41!important}body.ecac-redesign .dialog-form .erro{border-radius:.5rem;margin:0 0 1rem!important}@keyframes ecac-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}#ecac-redesign-root .placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root .placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root .hover\:border-ecac-blue:hover{--tw-border-opacity:1;border-color:rgb(19 81 180/var(--tw-border-opacity,1))}#ecac-redesign-root .hover\:bg-ecac-gold-hover:hover{--tw-bg-opacity:1;background-color:rgb(229 184 0/var(--tw-bg-opacity,1))}#ecac-redesign-root .hover\:bg-white\/10:hover{background-color:hsla(0,0%,100%,.1)}#ecac-redesign-root .hover\:bg-white\/20:hover{background-color:hsla(0,0%,100%,.2)}#ecac-redesign-root .hover\:text-ecac-navy:hover{--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1))}#ecac-redesign-root .hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root .focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}#ecac-redesign-root .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}@media (min-width:640px){#ecac-redesign-root .sm\:block{display:block}#ecac-redesign-root .sm\:inline{display:inline}#ecac-redesign-root .sm\:flex{display:flex}#ecac-redesign-root .sm\:gap-3{gap:.75rem}#ecac-redesign-root .sm\:px-4{padding-left:1rem;padding-right:1rem}}@media (min-width:1024px){#ecac-redesign-root .lg\:flex{display:flex}#ecac-redesign-root .lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}#ecac-redesign-root .lg\:p-6{padding:1.5rem}#ecac-redesign-root .lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}#ecac-redesign-root .lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}} \ No newline at end of file +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Rawline,Segoe UI,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}body.ecac-redesign{margin:0;min-width:0;padding:0;background:#f0f2f5!important;background-image:none!important}html:has(body.ecac-app-page){height:100%}body.ecac-app-page{height:100vh;overflow:hidden}body.ecac-redesign #barra-brasil,body.ecac-redesign #cabecalho,body.ecac-redesign #conteudo,body.ecac-redesign #rodape{display:none!important}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}#ecac-redesign-root .ecac-sr-only{position:absolute;margin:-1px;height:1px;width:1px;overflow:hidden;white-space:nowrap;border-width:0;padding:0;clip:rect(0,0,0,0)}#ecac-redesign-root :is(.ecac-search #frmPesquisar){display:flex;align-items:stretch;gap:.5rem}#ecac-redesign-root :is(.ecac-search #frmPesquisar label[for=txtPesquisar]){display:none}#ecac-redesign-root :is(.ecac-search #txtPesquisar){flex:1 1 0%;border-radius:.375rem;border-width:0;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#ecac-redesign-root :is(.ecac-search #txtPesquisar)::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root :is(.ecac-search #txtPesquisar)::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root :is(.ecac-search #txtPesquisar:focus){outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-color:rgba(255,205,7,.6)}#ecac-redesign-root .ecac-search #txtPesquisar{width:auto!important;height:auto!important}#ecac-redesign-root :is(.ecac-search #btnPesquisar){position:relative;height:2.5rem;width:2.5rem;flex-shrink:0;cursor:pointer;border-radius:.375rem;border-width:0;--tw-bg-opacity:1;background-color:rgb(255 205 7/var(--tw-bg-opacity,1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}#ecac-redesign-root :is(.ecac-search #btnPesquisar:hover){--tw-bg-opacity:1;background-color:rgb(229 184 0/var(--tw-bg-opacity,1))}#ecac-redesign-root .ecac-search #btnPesquisar{background-image:none!important}#ecac-redesign-root .ecac-search #btnPesquisar:after{content:""}#ecac-redesign-root :is(.ecac-search #btnPesquisar):after{position:absolute;inset:0;margin:auto;height:1rem;width:1rem}#ecac-redesign-root .ecac-search #btnPesquisar:after{background:currentColor;mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 21-4.35-4.35M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14'/%3E%3C/svg%3E") center /contain no-repeat;-webkit-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m21 21-4.35-4.35M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14'/%3E%3C/svg%3E") center /contain no-repeat}#ecac-redesign-root .ecac-action-btn,:is(#ecac-redesign-root .ecac-header-actions .ecac-action-btn),:is(#ecac-redesign-root .ecac-header-app-actions .ecac-action-btn){position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-radius:.375rem;text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;height:2.25rem;width:2.25rem;border-width:1px;border-color:hsla(0,0%,100%,.15);background-color:hsla(0,0%,100%,.1);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root .ecac-action-btn:hover,:is(#ecac-redesign-root .ecac-header-actions .ecac-action-btn:hover),:is(#ecac-redesign-root .ecac-header-app-actions .ecac-action-btn:hover){border-color:hsla(0,0%,100%,.25);background-color:hsla(0,0%,100%,.2)}#ecac-redesign-root .ecac-action-btn,#ecac-redesign-root .ecac-header-actions .ecac-action-btn,#ecac-redesign-root .ecac-header-app-actions .ecac-action-btn{background-image:none!important;width:2.25rem!important;height:2.25rem!important;float:none!important;margin:0!important;padding:0!important}#ecac-redesign-root .ecac-action-btn--alert:after{content:"";position:absolute;top:.25rem;right:.25rem;height:.5rem;width:.5rem;border-radius:9999px;border-width:1px;--tw-border-opacity:1;border-color:rgb(7 29 65/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 205 7/var(--tw-bg-opacity,1))}#ecac-redesign-root .ecac-action-btn:before{content:"";height:1rem;width:1rem;flex-shrink:0;background:currentColor;mask-size:contain;mask-repeat:no-repeat;mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center}#ecac-redesign-root #btnPerfil.ecac-action-btn:before{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0m-4 7a7 7 0 0 0-7 7h14a7 7 0 0 0-7-7'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M16 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0m-4 7a7 7 0 0 0-7 7h14a7 7 0 0 0-7-7'/%3E%3C/svg%3E")}#ecac-redesign-root #btnCaixaPostal.ecac-action-btn:before{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m3 8 7.89 5.26a2 2 0 0 0 2.22 0L21 8M5 19h14a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m3 8 7.89 5.26a2 2 0 0 0 2.22 0L21 8M5 19h14a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2'/%3E%3C/svg%3E")}#ecac-redesign-root #sairSeguranca.ecac-action-btn:before{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m17 16 4-4m0 0-4-4m4 4H7m6 4v1a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h4a3 3 0 0 1 3 3v1'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23fff' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m17 16 4-4m0 0-4-4m4 4H7m6 4v1a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h4a3 3 0 0 1 3 3v1'/%3E%3C/svg%3E")}#ecac-redesign-root :is(.ecac-action-btn .botaoAzul),:is(#ecac-redesign-root .ecac-action-btn span){display:none}#ecac-redesign-root :is(.ecac-sidebar .carregando){min-height:60px;border-radius:.375rem}#ecac-redesign-root .ecac-sidebar .carregando{background:linear-gradient(90deg,#f0f4f8 25%,#e2e8f0 50%,#f0f4f8 75%);background-size:200% 100%;animation:ecac-shimmer 1.5s infinite}#ecac-redesign-root #grupos{margin:0 0 1rem;display:flex;width:100%;list-style-type:none;flex-wrap:wrap;gap:.5rem;padding:0;float:none!important}#ecac-redesign-root #grupos li{float:none!important;margin:0!important}#ecac-redesign-root :is(#grupos li a){display:inline-block;border-radius:9999px;padding:.375rem .875rem;font-size:.875rem;line-height:1.25rem;text-decoration-line:none;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-width:1px;--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1))}#ecac-redesign-root :is(#grupos li a:hover){--tw-border-opacity:1;border-color:rgb(19 81 180/var(--tw-border-opacity,1));--tw-text-opacity:1;color:rgb(19 81 180/var(--tw-text-opacity,1))}#ecac-redesign-root #grupos li a{background-image:none!important;width:auto!important;height:auto!important}#ecac-redesign-root :is(#grupos li a:hover),:is(#ecac-redesign-root #grupos li.ativo a){--tw-border-opacity:1;border-color:rgb(7 29 65/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(7 29 65/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root #servicos{float:none!important;width:100%!important;clear:both!important}#ecac-redesign-root :is(#servicos .containerServicos){display:grid;width:100%;gap:.625rem;padding:0}#ecac-redesign-root #servicos .containerServicos{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));float:none!important}#ecac-redesign-root :is(#servicos .containerServicos a){display:block;border-radius:.5rem;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;line-height:1.375;text-decoration-line:none;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-width:1px;--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}#ecac-redesign-root :is(#servicos .containerServicos a:hover){--tw-border-opacity:1;border-color:rgb(19 81 180/var(--tw-border-opacity,1));--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#ecac-redesign-root #servicos .containerServicos a{background-image:none!important;width:auto!important;height:auto!important;float:none!important}#ecac-redesign-root :is(.ecac-sidebar a){display:block;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1));padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1));text-decoration-line:none}#ecac-redesign-root :is(.ecac-sidebar a:last-child){border-width:0}#ecac-redesign-root .ecac-sidebar a{background-image:none!important;width:auto!important;height:auto!important}#ecac-redesign-root :is(.ecac-sidebar a:hover){--tw-text-opacity:1;color:rgb(19 81 180/var(--tw-text-opacity,1))}#ecac-redesign-root :is(.ecac-app-frame .ecac-app-iframe),:is(#ecac-redesign-root .ecac-app-frame #frmApp){display:block;width:100%;border-width:0}#ecac-redesign-root .ecac-app-frame #frmApp,#ecac-redesign-root .ecac-app-frame .ecac-app-iframe{display:block!important;width:100%!important;border:0!important;min-height:0!important}#ecac-redesign-root .visible{visibility:visible}#ecac-redesign-root .static{position:static}#ecac-redesign-root .fixed{position:fixed}#ecac-redesign-root .absolute{position:absolute}#ecac-redesign-root .relative{position:relative}#ecac-redesign-root .inset-0{inset:0}#ecac-redesign-root .right-1{right:.25rem}#ecac-redesign-root .top-1{top:.25rem}#ecac-redesign-root .z-\[99999\]{z-index:99999}#ecac-redesign-root .-m-px{margin:-1px}#ecac-redesign-root .m-0{margin:0}#ecac-redesign-root .m-auto{margin:auto}#ecac-redesign-root .mx-auto{margin-left:auto;margin-right:auto}#ecac-redesign-root .mb-1{margin-bottom:.25rem}#ecac-redesign-root .mb-3{margin-bottom:.75rem}#ecac-redesign-root .mb-4{margin-bottom:1rem}#ecac-redesign-root .mt-0\.5{margin-top:.125rem}#ecac-redesign-root .block{display:block}#ecac-redesign-root .inline-block{display:inline-block}#ecac-redesign-root .flex{display:flex}#ecac-redesign-root .inline-flex{display:inline-flex}#ecac-redesign-root .table{display:table}#ecac-redesign-root .grid{display:grid}#ecac-redesign-root .hidden{display:none}#ecac-redesign-root .h-10{height:2.5rem}#ecac-redesign-root .h-2{height:.5rem}#ecac-redesign-root .h-4{height:1rem}#ecac-redesign-root .h-9{height:2.25rem}#ecac-redesign-root .h-px{height:1px}#ecac-redesign-root .min-h-0{min-height:0}#ecac-redesign-root .min-h-\[400px\]{min-height:400px}#ecac-redesign-root .min-h-\[48px\]{min-height:48px}#ecac-redesign-root .min-h-\[60px\]{min-height:60px}#ecac-redesign-root .min-h-screen{min-height:100vh}#ecac-redesign-root .w-10{width:2.5rem}#ecac-redesign-root .w-2{width:.5rem}#ecac-redesign-root .w-4{width:1rem}#ecac-redesign-root .w-9{width:2.25rem}#ecac-redesign-root .w-full{width:100%}#ecac-redesign-root .w-px{width:1px}#ecac-redesign-root .min-w-0{min-width:0}#ecac-redesign-root .min-w-\[180px\]{min-width:180px}#ecac-redesign-root .max-w-7xl{max-width:80rem}#ecac-redesign-root .max-w-\[140px\]{max-width:140px}#ecac-redesign-root .max-w-\[220px\]{max-width:220px}#ecac-redesign-root .max-w-\[240px\]{max-width:240px}#ecac-redesign-root .max-w-xl{max-width:36rem}#ecac-redesign-root .flex-1{flex:1 1 0%}#ecac-redesign-root .shrink-0{flex-shrink:0}#ecac-redesign-root .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#ecac-redesign-root .cursor-pointer{cursor:pointer}#ecac-redesign-root .resize{resize:both}#ecac-redesign-root .list-none{list-style-type:none}#ecac-redesign-root .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#ecac-redesign-root .flex-col{flex-direction:column}#ecac-redesign-root .flex-wrap{flex-wrap:wrap}#ecac-redesign-root .items-center{align-items:center}#ecac-redesign-root .justify-center{justify-content:center}#ecac-redesign-root .gap-1{gap:.25rem}#ecac-redesign-root .gap-1\.5{gap:.375rem}#ecac-redesign-root .gap-2{gap:.5rem}#ecac-redesign-root .gap-2\.5{gap:.625rem}#ecac-redesign-root .gap-3{gap:.75rem}#ecac-redesign-root .gap-4{gap:1rem}#ecac-redesign-root .gap-5{gap:1.25rem}#ecac-redesign-root .gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}#ecac-redesign-root .gap-x-4{-moz-column-gap:1rem;column-gap:1rem}#ecac-redesign-root .gap-y-0\.5{row-gap:.125rem}#ecac-redesign-root .gap-y-3{row-gap:.75rem}#ecac-redesign-root .overflow-hidden{overflow:hidden}#ecac-redesign-root .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#ecac-redesign-root .whitespace-nowrap{white-space:nowrap}#ecac-redesign-root .rounded{border-radius:.25rem}#ecac-redesign-root .rounded-full{border-radius:9999px}#ecac-redesign-root .rounded-lg{border-radius:.5rem}#ecac-redesign-root .rounded-md{border-radius:.375rem}#ecac-redesign-root .border{border-width:1px}#ecac-redesign-root .border-0{border-width:0}#ecac-redesign-root .border-b{border-bottom-width:1px}#ecac-redesign-root .border-b-2{border-bottom-width:2px}#ecac-redesign-root .border-t{border-top-width:1px}#ecac-redesign-root .border-ecac-gold{--tw-border-opacity:1;border-color:rgb(255 205 7/var(--tw-border-opacity,1))}#ecac-redesign-root .border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}#ecac-redesign-root .border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}#ecac-redesign-root .border-slate-200\/80{border-color:rgba(226,232,240,.8)}#ecac-redesign-root .border-white\/10{border-color:hsla(0,0%,100%,.1)}#ecac-redesign-root .border-white\/15{border-color:hsla(0,0%,100%,.15)}#ecac-redesign-root .bg-ecac-gold{--tw-bg-opacity:1;background-color:rgb(255 205 7/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-ecac-navy{--tw-bg-opacity:1;background-color:rgb(7 29 65/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-ecac-navy\/95{background-color:rgba(7,29,65,.95)}#ecac-redesign-root .bg-ecac-surface{--tw-bg-opacity:1;background-color:rgb(240 242 245/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#ecac-redesign-root .bg-white\/10{background-color:hsla(0,0%,100%,.1)}#ecac-redesign-root .bg-white\/20{background-color:hsla(0,0%,100%,.2)}#ecac-redesign-root .p-0{padding:0}#ecac-redesign-root .p-4{padding:1rem}#ecac-redesign-root .p-5{padding:1.25rem}#ecac-redesign-root .px-1\.5{padding-left:.375rem;padding-right:.375rem}#ecac-redesign-root .px-2{padding-left:.5rem;padding-right:.5rem}#ecac-redesign-root .px-3{padding-left:.75rem;padding-right:.75rem}#ecac-redesign-root .px-3\.5{padding-left:.875rem;padding-right:.875rem}#ecac-redesign-root .px-4{padding-left:1rem;padding-right:1rem}#ecac-redesign-root .py-1\.5{padding-top:.375rem;padding-bottom:.375rem}#ecac-redesign-root .py-2{padding-top:.5rem;padding-bottom:.5rem}#ecac-redesign-root .py-2\.5{padding-top:.625rem;padding-bottom:.625rem}#ecac-redesign-root .py-3{padding-top:.75rem;padding-bottom:.75rem}#ecac-redesign-root .py-px{padding-top:1px;padding-bottom:1px}#ecac-redesign-root .pb-2{padding-bottom:.5rem}#ecac-redesign-root .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}#ecac-redesign-root .font-sans{font-family:Rawline,Segoe UI,system-ui,-apple-system,sans-serif}#ecac-redesign-root .text-\[10px\]{font-size:10px}#ecac-redesign-root .text-\[11px\]{font-size:11px}#ecac-redesign-root .text-base{font-size:1rem;line-height:1.5rem}#ecac-redesign-root .text-lg{font-size:1.125rem;line-height:1.75rem}#ecac-redesign-root .text-sm{font-size:.875rem;line-height:1.25rem}#ecac-redesign-root .text-xl{font-size:1.25rem;line-height:1.75rem}#ecac-redesign-root .text-xs{font-size:.75rem;line-height:1rem}#ecac-redesign-root .font-bold{font-weight:700}#ecac-redesign-root .font-medium{font-weight:500}#ecac-redesign-root .font-semibold{font-weight:600}#ecac-redesign-root .uppercase{text-transform:uppercase}#ecac-redesign-root .leading-none{line-height:1}#ecac-redesign-root .leading-snug{line-height:1.375}#ecac-redesign-root .leading-tight{line-height:1.25}#ecac-redesign-root .tracking-tight{letter-spacing:-.025em}#ecac-redesign-root .tracking-wide{letter-spacing:.025em}#ecac-redesign-root .tracking-wider{letter-spacing:.05em}#ecac-redesign-root .text-ecac-navy{--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1))}#ecac-redesign-root .text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}#ecac-redesign-root .text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}#ecac-redesign-root .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root .text-white\/60{color:hsla(0,0%,100%,.6)}#ecac-redesign-root .text-white\/70{color:hsla(0,0%,100%,.7)}#ecac-redesign-root .text-white\/75{color:hsla(0,0%,100%,.75)}#ecac-redesign-root .text-white\/85{color:hsla(0,0%,100%,.85)}#ecac-redesign-root .text-white\/90{color:hsla(0,0%,100%,.9)}#ecac-redesign-root .text-white\/95{color:hsla(0,0%,100%,.95)}#ecac-redesign-root .underline{text-decoration-line:underline}#ecac-redesign-root .no-underline{text-decoration-line:none}#ecac-redesign-root .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#ecac-redesign-root .opacity-90{opacity:.9}#ecac-redesign-root .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#ecac-redesign-root .outline{outline-style:solid}#ecac-redesign-root .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}#ecac-redesign-root .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}body.ecac-redesign .ac_results,body.ecac-redesign .ac_results ul{border-radius:.5rem;border:1px solid #cbd5e1!important;box-shadow:0 10px 24px rgba(7,29,65,.12);overflow:hidden}body.ecac-redesign .ac_results li{font-size:.8125rem!important;line-height:1.25rem!important;padding:.5rem .75rem!important;color:#334155!important}body.ecac-redesign .ac_results li.ac_over{background:#eff6ff!important;border-left:3px solid #1351b4!important}body.ecac-redesign .ac_results .nome{color:#071d41!important;font-weight:600}body.ecac-redesign .ui-widget-overlay{background:rgba(7,29,65,.45)!important}body.ecac-redesign .ui-dialog{border-radius:.75rem!important;border:1px solid #e2e8f0!important;box-shadow:0 24px 48px rgba(7,29,65,.18)!important;padding:0!important;font-family:Rawline,Segoe UI,system-ui,sans-serif!important}body.ecac-redesign .ui-dialog-titlebar{background:#071d41!important;color:#fff!important;border:0!important;border-radius:.75rem .75rem 0 0!important;padding:.875rem 1rem!important}body.ecac-redesign .ui-dialog-title{font-size:.9375rem!important;font-weight:600!important}body.ecac-redesign .ui-dialog-content{padding:1rem 1.25rem 1.25rem!important;color:#334155!important;font-size:.875rem!important}body.ecac-redesign .dialog-form form{margin-bottom:1rem!important;padding-bottom:1rem;border-bottom:1px solid #f1f5f9}body.ecac-redesign .dialog-form form:last-child{border-bottom:0;margin-bottom:0;padding-bottom:0}body.ecac-redesign .dialog-form label{text-transform:none!important;color:#475569!important;font-size:.8125rem!important;margin-bottom:.375rem}body.ecac-redesign .dialog-form input.textbox{width:100%!important;max-width:100%;height:auto!important;padding:.5rem .75rem!important;border-radius:.375rem!important;border:1px solid #cbd5e1!important;background:#fff!important;margin:0 0 .75rem!important}body.ecac-redesign .dialog-form input.textbox:focus{outline:none;border-color:#1351b4!important;box-shadow:0 0 0 3px rgba(19,81,180,.15)}body.ecac-redesign .dialog-form input.submit{background:#1351b4!important;background-image:none!important;border:0!important;color:#fff!important;border-radius:.375rem!important;min-width:5.5rem!important;height:auto!important;padding:.5rem 1rem!important;font-size:.8125rem!important}body.ecac-redesign .dialog-form input.submit:hover{background:#071d41!important}body.ecac-redesign .dialog-form .erro{border-radius:.5rem;margin:0 0 1rem!important}@keyframes ecac-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}#ecac-redesign-root .placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root .placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#ecac-redesign-root .hover\:border-ecac-blue:hover{--tw-border-opacity:1;border-color:rgb(19 81 180/var(--tw-border-opacity,1))}#ecac-redesign-root .hover\:bg-ecac-gold-hover:hover{--tw-bg-opacity:1;background-color:rgb(229 184 0/var(--tw-bg-opacity,1))}#ecac-redesign-root .hover\:bg-white\/10:hover{background-color:hsla(0,0%,100%,.1)}#ecac-redesign-root .hover\:bg-white\/20:hover{background-color:hsla(0,0%,100%,.2)}#ecac-redesign-root .hover\:text-ecac-navy:hover{--tw-text-opacity:1;color:rgb(7 29 65/var(--tw-text-opacity,1))}#ecac-redesign-root .hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#ecac-redesign-root .focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}#ecac-redesign-root .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}@media (min-width:640px){#ecac-redesign-root .sm\:block{display:block}#ecac-redesign-root .sm\:inline{display:inline}#ecac-redesign-root .sm\:flex{display:flex}#ecac-redesign-root .sm\:gap-3{gap:.75rem}#ecac-redesign-root .sm\:px-4{padding-left:1rem;padding-right:1rem}}@media (min-width:1024px){#ecac-redesign-root .lg\:flex{display:flex}#ecac-redesign-root .lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}#ecac-redesign-root .lg\:p-6{padding:1.5rem}#ecac-redesign-root .lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}#ecac-redesign-root .lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}} \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..8848c01 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,24 @@ +import js from '@eslint/js'; +import eslintConfigPrettier from 'eslint-config-prettier'; +import globals from 'globals'; + +export default [ + { + ignores: ['dist/**', 'node_modules/**'], + }, + js.configs.recommended, + eslintConfigPrettier, + { + languageOptions: { + ecmaVersion: 2022, + sourceType: 'module', + globals: { + ...globals.browser, + ...globals.node, + }, + }, + rules: { + 'no-unused-vars': ['error', { argsIgnorePattern: '^_', caughtErrors: 'none' }], + }, + }, +]; diff --git a/manifest.json b/manifest.json index 951d69d..aab90e4 100644 --- a/manifest.json +++ b/manifest.json @@ -14,6 +14,12 @@ "js": ["dist/content.js"], "css": ["dist/styles.css"], "run_at": "document_end" + }, + { + "matches": ["https://www3.cav.receita.fazenda.gov.br/leilaoEletronicoInter/*"], + "js": ["dist/leilao-content.js"], + "css": ["dist/leilao-styles.css"], + "run_at": "document_end" } ], "web_accessible_resources": [ @@ -22,4 +28,4 @@ "matches": ["https://cav.receita.fazenda.gov.br/*"] } ] -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 0b34c69..8013010 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,15 @@ "name": "ecac-redesign", "version": "1.0.0", "devDependencies": { + "@eslint/js": "^10.0.1", "autoprefixer": "^10.4.21", "esbuild": "^0.25.0", + "eslint": "^10.5.0", + "eslint-config-prettier": "^10.1.8", + "globals": "^17.6.0", "jsdom": "^25.0.1", "postcss": "^8.5.3", + "prettier": "^3.8.4", "tailwindcss": "^3.4.17", "vitest": "^3.0.5" } @@ -600,6 +605,200 @@ "node": ">=18" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1045,6 +1244,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", @@ -1052,6 +1258,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@vitest/expect": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.6.tgz", @@ -1167,6 +1380,29 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -1177,6 +1413,23 @@ "node": ">= 14" } }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -1272,6 +1525,16 @@ "postcss": "^8.1.0" } }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/baseline-browser-mapping": { "version": "2.10.38", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", @@ -1298,6 +1561,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -1488,6 +1764,21 @@ "node": ">= 6" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1571,6 +1862,13 @@ "node": ">=6" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1738,6 +2036,180 @@ "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.5.0.tgz", + "integrity": "sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -1748,6 +2220,16 @@ "@types/estree": "^1.0.0" } }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/expect-type": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", @@ -1758,6 +2240,13 @@ "node": ">=12.0.0" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -1788,6 +2277,20 @@ "node": ">= 6" } }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -1816,6 +2319,19 @@ } } }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -1829,6 +2345,44 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, "node_modules/form-data": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", @@ -1937,6 +2491,19 @@ "node": ">=10.13.0" } }, + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -2046,6 +2613,26 @@ "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2115,6 +2702,13 @@ "dev": true, "license": "MIT" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, "node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -2173,6 +2767,51 @@ } } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -2193,6 +2832,22 @@ "dev": true, "license": "MIT" }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/loupe": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", @@ -2287,6 +2942,22 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2325,6 +2996,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.48", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.48.tgz", @@ -2372,6 +3050,56 @@ "node": ">= 6" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -2385,6 +3113,26 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -2612,6 +3360,32 @@ "dev": true, "license": "MIT" }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.4.tgz", + "integrity": "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -2808,6 +3582,29 @@ "node": ">=v12.22.7" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -3083,6 +3880,19 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -3114,6 +3924,16 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3837,6 +4657,22 @@ "node": ">=18" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -3854,6 +4690,16 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ws": { "version": "8.21.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", @@ -3892,6 +4738,19 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, "license": "MIT" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index b894b6f..6844cda 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,23 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "build": "node scripts/build.js" + "build": "node scripts/build.js", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier --write .", + "format:check": "prettier --check ." }, "devDependencies": { + "@eslint/js": "^10.0.1", "autoprefixer": "^10.4.21", "esbuild": "^0.25.0", + "eslint": "^10.5.0", + "eslint-config-prettier": "^10.1.8", + "globals": "^17.6.0", "jsdom": "^25.0.1", "postcss": "^8.5.3", + "prettier": "^3.8.4", "tailwindcss": "^3.4.17", "vitest": "^3.0.5" } -} \ No newline at end of file +} diff --git a/postcss.config.js b/postcss.config.js index fbe14a4..2aa7205 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -3,4 +3,4 @@ export default { tailwindcss: {}, autoprefixer: {}, }, -}; \ No newline at end of file +}; diff --git a/scripts/build.js b/scripts/build.js index e07b3b5..8d86967 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -10,10 +10,10 @@ const dist = join(root, 'dist'); mkdirSync(dist, { recursive: true }); -execSync( - 'npx tailwindcss -i ./src/content/input.css -o ./dist/styles.css --minify', - { cwd: root, stdio: 'inherit' }, -); +execSync('npx tailwindcss -i ./src/content/input.css -o ./dist/styles.css --minify', { + cwd: root, + stdio: 'inherit', +}); await build({ entryPoints: [join(root, 'src/content/index.js')], @@ -23,6 +23,17 @@ await build({ target: ['chrome120'], }); +const { copyFileSync } = await import('fs'); +copyFileSync(join(root, 'src/iframe/leilao/styles.css'), join(dist, 'leilao-styles.css')); + +await build({ + entryPoints: [join(root, 'src/iframe/leilao/index.js')], + bundle: true, + outfile: join(dist, 'leilao-content.js'), + format: 'iife', + target: ['chrome120'], +}); + const iconsDir = join(root, 'icons'); if (existsSync(iconsDir)) { mkdirSync(join(dist, 'icons'), { recursive: true }); @@ -35,4 +46,4 @@ if (existsSync(iconsDir)) { } } -console.log('Build complete → dist/'); \ No newline at end of file +console.log('Build complete → dist/'); diff --git a/scripts/generate-icons.js b/scripts/generate-icons.js index a19f702..33f7b03 100644 --- a/scripts/generate-icons.js +++ b/scripts/generate-icons.js @@ -71,4 +71,4 @@ for (const size of [16, 48, 128]) { writeFileSync(join(iconsDir, `icon${size}.png`), png); } -console.log('Icons generated → icons/'); \ No newline at end of file +console.log('Icons generated → icons/'); diff --git a/src/content/application-page.js b/src/content/application-page.js index dccbf6d..07599fb 100644 --- a/src/content/application-page.js +++ b/src/content/application-page.js @@ -1,21 +1,21 @@ -import { getApplicationTitle } from '../utils/application.js'; +import { calculateIframeHeight, getApplicationTitle } from '../utils/application.js'; import { tw } from './classes.js'; import { createAppHeader } from './shared/header.js'; import { createRoot, hideLegacyChrome, mountRoot } from './shared/legacy.js'; -import { lockApplicationIframe } from './shared/page-utils.js'; -let unlockIframeLayout = null; +const IFRAME_RESIZE_DELAYS_MS = [100, 500, 1500]; export function applyApplicationPageRedesign(doc, win = window) { - const cabecalho = doc.getElementById('cabecalho'); - const conteudo = doc.getElementById('conteudo'); - if (!cabecalho || !conteudo) return; - - unlockIframeLayout?.(); - unlockIframeLayout = null; + const existingRoot = doc.getElementById('ecac-redesign-root'); + const existingIframe = doc.getElementById('frmApp'); + if (existingRoot?.contains(existingIframe)) { + resizeApplicationIframe(doc, win); + return; + } - hideLegacyChrome(doc); - doc.body.classList.add('ecac-app-page'); + const cabecalho = doc.getElementById('cabecalho'); + const iframe = doc.getElementById('frmApp'); + if (!cabecalho || !iframe) return; const root = createRoot(doc, { variant: 'app' }); const layout = doc.createElement('div'); @@ -27,41 +27,49 @@ export function applyApplicationPageRedesign(doc, win = window) { const header = createAppHeader(doc, cabecalho, appTitle); layout.appendChild(header); - const appContent = createAppContent(doc, conteudo); + const appContent = createAppContent(doc, iframe); layout.appendChild(appContent); root.appendChild(layout); mountRoot(doc, root); - unlockIframeLayout = lockApplicationIframe(doc); + hideLegacyChrome(doc); + doc.body.classList.add('ecac-app-page'); - const resize = () => resizeApplicationIframe(doc); + const resize = () => resizeApplicationIframe(doc, win); resize(); win.addEventListener('resize', resize); + IFRAME_RESIZE_DELAYS_MS.forEach((delay) => win.setTimeout(resize, delay)); } -function createAppContent(doc, conteudo) { +function createAppContent(doc, iframe) { const appContent = doc.createElement('div'); appContent.className = tw.appContent; const frame = doc.createElement('div'); frame.className = tw.appFrame; - const iframe = conteudo.querySelector('#frmApp'); - if (iframe) { - iframe.classList.add('ecac-app-iframe'); - frame.appendChild(iframe); - } + iframe.classList.add('ecac-app-iframe'); + iframe.style.removeProperty('display'); + frame.appendChild(iframe); appContent.appendChild(frame); return appContent; } -export function resizeApplicationIframe(doc) { +export function resizeApplicationIframe(doc, win = window) { const iframe = doc.getElementById('frmApp'); + const header = doc.querySelector('.ecac-header-app'); if (!iframe) return; + const headerHeight = header?.getBoundingClientRect().height ?? 0; + const height = calculateIframeHeight({ + windowHeight: win.innerHeight, + headerHeight, + }); + iframe.style.setProperty('display', 'block', 'important'); iframe.style.setProperty('width', '100%', 'important'); - iframe.style.setProperty('height', '100%', 'important'); + iframe.style.setProperty('height', `${height}px`, 'important'); iframe.style.setProperty('border', '0', 'important'); + iframe.style.setProperty('min-height', '0', 'important'); } diff --git a/src/content/application-page.test.js b/src/content/application-page.test.js index c4b2020..5387055 100644 --- a/src/content/application-page.test.js +++ b/src/content/application-page.test.js @@ -1,5 +1,8 @@ import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { applyApplicationPageRedesign } from './application-page.js'; +import { + applyApplicationPageRedesign, + resizeApplicationIframe, +} from './application-page.js'; const APPLICATION_PAGE_HTML = `
@@ -37,6 +40,10 @@ describe('applyApplicationPageRedesign', () => { innerHeight: 800, innerWidth: 1200, addEventListener: vi.fn(), + setTimeout: (fn) => { + fn(); + return 1; + }, }; beforeEach(() => { @@ -90,14 +97,38 @@ describe('applyApplicationPageRedesign', () => { const frame = document.querySelector('.ecac-app-frame'); expect(frame).not.toBeNull(); expect(frame.querySelector('#frmApp')).not.toBeNull(); - expect(frame.querySelector('#frmApp').getAttribute('src')).toContain('leilaoEletronicoInter'); + expect(frame.querySelector('#frmApp').getAttribute('src')).toContain( + 'leilaoEletronicoInter', + ); }); - it('makes iframe visible and full size', () => { + it('makes iframe visible and sizes it to remaining viewport height', () => { applyApplicationPageRedesign(document, win); const iframe = document.getElementById('frmApp'); expect(iframe.style.display).toBe('block'); expect(iframe.classList.contains('ecac-app-iframe')).toBe(true); + expect(Number.parseFloat(iframe.style.height)).toBeGreaterThan(0); + }); + + it('does not lose iframe when redesign runs again', () => { + applyApplicationPageRedesign(document, win); + applyApplicationPageRedesign(document, win); + expect(document.querySelectorAll('#frmApp')).toHaveLength(1); + expect(document.querySelector('.ecac-app-frame #frmApp')).not.toBeNull(); + expect( + Number.parseFloat(document.getElementById('frmApp').style.height), + ).toBeGreaterThan(0); + }); + + it('recalculates iframe height from viewport minus header', () => { + applyApplicationPageRedesign(document, win); + const iframe = document.getElementById('frmApp'); + const header = document.querySelector('.ecac-header-app'); + const headerHeight = header?.getBoundingClientRect().height ?? 0; + + resizeApplicationIframe(document, { innerHeight: 900 }); + + expect(Number.parseFloat(iframe.style.height)).toBe(900 - headerHeight); }); it('uses flex layout that fills the app shell', () => { @@ -142,4 +173,4 @@ describe('applyApplicationPageRedesign', () => { function headerContains(el) { return Boolean(el.closest('.ecac-header-app')); -} \ No newline at end of file +} diff --git a/src/content/classes.js b/src/content/classes.js index f3c11b5..f1e00f3 100644 --- a/src/content/classes.js +++ b/src/content/classes.js @@ -5,19 +5,16 @@ export const tw = { headerInner: 'ecac-header-inner max-w-7xl mx-auto w-full px-4 lg:px-6 py-3 flex flex-wrap items-center gap-x-4 gap-y-3', brand: 'ecac-brand shrink-0 flex items-center gap-3', - brandLogo: - 'ecac-brand-logo text-xl font-bold tracking-tight leading-none text-white', + brandLogo: 'ecac-brand-logo text-xl font-bold tracking-tight leading-none text-white', brandSubtitle: 'ecac-brand-subtitle hidden sm:block text-xs text-white/70 leading-tight max-w-[140px]', userInfo: 'ecac-user-info flex-1 min-w-[180px]', userName: 'ecac-user-name text-sm font-semibold leading-tight truncate', userMeta: 'ecac-user-meta flex flex-wrap items-center gap-x-2 gap-y-0.5 mt-0.5 text-xs text-white/75', - userDoc: - 'ecac-user-doc font-mono bg-white/10 px-1.5 py-px rounded text-[11px]', + userDoc: 'ecac-user-doc font-mono bg-white/10 px-1.5 py-px rounded text-[11px]', userType: 'ecac-user-type truncate max-w-[220px]', - searchRow: - 'ecac-search-row border-t border-white/10 bg-ecac-navy/95', + searchRow: 'ecac-search-row border-t border-white/10 bg-ecac-navy/95', searchInner: 'ecac-search-inner max-w-7xl mx-auto w-full px-4 lg:px-6 py-2.5', search: 'ecac-search max-w-xl', searchLabel: @@ -26,8 +23,7 @@ export const tw = { content: 'ecac-content grid grid-cols-1 lg:grid-cols-[280px_1fr] gap-5 max-w-7xl mx-auto p-4 lg:p-6 w-full flex-1', sidebar: 'ecac-sidebar flex flex-col gap-4', - sidebarCard: - 'bg-white rounded-lg p-4 shadow-sm border border-slate-200/80', + sidebarCard: 'bg-white rounded-lg p-4 shadow-sm border border-slate-200/80', sidebarFeatured: 'ecac-sidebar-featured', sidebarPopular: 'ecac-sidebar-popular', sidebarTitle: @@ -41,10 +37,8 @@ export const tw = { 'ecac-header-app shrink-0 bg-ecac-navy text-white border-b border-white/10 shadow-sm', headerAppNav: 'ecac-header-app-nav flex items-center gap-2 sm:gap-3 px-3 sm:px-4 lg:px-5 py-2 min-h-[48px]', - headerAppLeft: - 'ecac-header-app-left flex items-center gap-2 sm:gap-3 flex-1 min-w-0', - headerAppRight: - 'ecac-header-app-right flex items-center gap-2 sm:gap-3 shrink-0', + headerAppLeft: 'ecac-header-app-left flex items-center gap-2 sm:gap-3 flex-1 min-w-0', + headerAppRight: 'ecac-header-app-right flex items-center gap-2 sm:gap-3 shrink-0', headerAppBrand: 'ecac-header-app-brand hidden sm:flex items-center gap-2 shrink-0', headerAppBrandMark: 'ecac-header-app-brand-mark text-sm font-bold tracking-tight text-white/95', @@ -52,20 +46,17 @@ export const tw = { 'ecac-header-app-divider hidden sm:block w-px h-4 bg-white/20 shrink-0', headerAppUser: 'ecac-header-app-user hidden lg:flex items-center gap-2 text-xs text-white/85 shrink-0 max-w-[240px]', - headerAppUserName: - 'ecac-header-app-user-name font-medium truncate', + headerAppUserName: 'ecac-header-app-user-name font-medium truncate', headerAppUserDoc: 'ecac-header-app-user-doc font-mono bg-white/10 px-1.5 py-px rounded text-[10px] shrink-0', - headerAppActions: - 'ecac-header-app-actions flex items-center gap-1 shrink-0', + headerAppActions: 'ecac-header-app-actions flex items-center gap-1 shrink-0', appContent: - 'ecac-app-content flex-1 flex flex-col min-h-0 w-full overflow-hidden bg-ecac-surface', + 'ecac-app-content flex-1 flex flex-col min-h-0 w-full overflow-hidden bg-white', appBack: 'ecac-app-back inline-flex items-center gap-1.5 text-xs font-medium text-white/90 hover:text-white no-underline transition-colors shrink-0 px-2 py-1.5 rounded-md hover:bg-white/10', appBackIcon: 'ecac-app-back-icon text-base leading-none opacity-90', appBackLabel: 'ecac-app-back-label hidden sm:inline', - appTitle: - 'ecac-app-title text-sm font-medium text-white truncate leading-snug min-w-0', + appTitle: 'ecac-app-title text-sm font-medium text-white truncate leading-snug min-w-0', appFrame: 'ecac-app-frame flex-1 min-h-0 w-full overflow-hidden bg-white', actionBtn: 'ecac-action-btn', actionBtnAlert: 'ecac-action-btn--alert', diff --git a/src/content/home-page.js b/src/content/home-page.js index b2d7848..bf37afb 100644 --- a/src/content/home-page.js +++ b/src/content/home-page.js @@ -75,4 +75,4 @@ function createMain(doc, conteudo) { } return main; -} \ No newline at end of file +} diff --git a/src/content/home-page.test.js b/src/content/home-page.test.js index 6b7c72b..7918705 100644 --- a/src/content/home-page.test.js +++ b/src/content/home-page.test.js @@ -106,4 +106,4 @@ describe('applyHomePageRedesign', () => { expect(barra.style.display).toBe('none'); expect(barra.getAttribute('aria-hidden')).toBe('true'); }); -}); \ No newline at end of file +}); diff --git a/src/content/index.js b/src/content/index.js index f1845fd..dcd2ea3 100644 --- a/src/content/index.js +++ b/src/content/index.js @@ -18,11 +18,15 @@ function applyRedesign() { const run = getRedesignRunner(href); if (!run) return; - removeStaleRedesign(document, href); - const root = document.getElementById('ecac-redesign-root'); - if (root && isRedesignVariantCorrect(root, href)) return; + if (root && isRedesignVariantCorrect(root, href)) { + if (isEcacApplicationPage(href)) { + applyApplicationPageRedesign(document, window); + } + return; + } + removeStaleRedesign(document, href); run(); } @@ -30,20 +34,12 @@ function init() { applyRedesign(); const observer = new MutationObserver(() => { - const root = document.getElementById('ecac-redesign-root'); - const href = window.location.href; - - if (!root) { - applyRedesign(); - return; - } - - if (!isRedesignVariantCorrect(root, href)) { + if (!document.getElementById('ecac-redesign-root')) { applyRedesign(); } }); - observer.observe(document.body, { childList: true, subtree: true }); + observer.observe(document.body, { childList: true }); } if (document.readyState === 'loading') { diff --git a/src/content/index.test.js b/src/content/index.test.js index e6a91cd..713fec0 100644 --- a/src/content/index.test.js +++ b/src/content/index.test.js @@ -24,4 +24,4 @@ describe('content script page routing', () => { expect(isEcacHomePage(window.location.href)).toBe(false); expect(isEcacApplicationPage(window.location.href)).toBe(true); }); -}); \ No newline at end of file +}); diff --git a/src/content/input.css b/src/content/input.css index 63965cd..a27ba81 100644 --- a/src/content/input.css +++ b/src/content/input.css @@ -175,12 +175,11 @@ #ecac-redesign-root .ecac-app-frame .ecac-app-iframe, #ecac-redesign-root .ecac-app-frame #frmApp { - @apply block w-full h-full border-0; + @apply block w-full border-0; display: block !important; width: 100% !important; - height: 100% !important; - min-height: 0 !important; border: 0 !important; + min-height: 0 !important; } } diff --git a/src/content/shared/page-utils.js b/src/content/shared/page-utils.js index 33e0050..a8f0f52 100644 --- a/src/content/shared/page-utils.js +++ b/src/content/shared/page-utils.js @@ -35,30 +35,3 @@ export function removeStaleRedesign(doc, href) { doc.documentElement.style.height = ''; return true; } - -export function lockApplicationIframe(doc, win = window) { - const iframe = doc.getElementById('frmApp'); - if (!iframe) return () => {}; - - const applyLayout = () => { - if (!iframe.isConnected) return; - - iframe.style.setProperty('display', 'block', 'important'); - iframe.style.setProperty('width', '100%', 'important'); - iframe.style.setProperty('height', '100%', 'important'); - iframe.style.setProperty('border', '0', 'important'); - iframe.style.setProperty('min-height', '0', 'important'); - }; - - applyLayout(); - - const onResize = () => applyLayout(); - win.addEventListener('resize', onResize); - - const timers = [100, 500, 1500].map((delay) => win.setTimeout(applyLayout, delay)); - - return () => { - win.removeEventListener('resize', onResize); - timers.forEach((id) => win.clearTimeout(id)); - }; -} diff --git a/src/content/shared/page-utils.test.js b/src/content/shared/page-utils.test.js index 457c782..1ac261f 100644 --- a/src/content/shared/page-utils.test.js +++ b/src/content/shared/page-utils.test.js @@ -1,9 +1,8 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { describe, it, expect, beforeEach } from 'vitest'; import { isRedesignVariantCorrect, removeStaleRedesign, restoreIframeToLegacyContainer, - lockApplicationIframe, } from './page-utils.js'; describe('isRedesignVariantCorrect', () => { @@ -94,25 +93,3 @@ describe('restoreIframeToLegacyContainer', () => { expect(document.getElementById('divApp').querySelector('#frmApp')).not.toBeNull(); }); }); - -describe('lockApplicationIframe', () => { - it('restores full-height layout after native resize script changes inline styles', () => { - document.body.innerHTML = ``; - const unlock = lockApplicationIframe(document, { - addEventListener: vi.fn(), - removeEventListener: vi.fn(), - setTimeout: (fn) => { - fn(); - return 1; - }, - clearTimeout: vi.fn(), - }); - const iframe = document.getElementById('frmApp'); - - iframe.style.height = '704.5px'; - iframe.style.setProperty('height', '100%', 'important'); - expect(iframe.style.getPropertyValue('height')).toBe('100%'); - - unlock(); - }); -}); diff --git a/src/iframe/leilao/index.js b/src/iframe/leilao/index.js new file mode 100644 index 0000000..ee0039c --- /dev/null +++ b/src/iframe/leilao/index.js @@ -0,0 +1,21 @@ +import { applyLeilaoRedesign, hideRedundantChrome } from './leilao-redesign.js'; + +function init() { + applyLeilaoRedesign(document); + + const observer = new MutationObserver(() => { + if (!document.body.classList.contains('ecac-leilao-redesign')) { + applyLeilaoRedesign(document); + } else { + hideRedundantChrome(document); + } + }); + + observer.observe(document.body, { childList: true, subtree: true }); +} + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); +} else { + init(); +} diff --git a/src/iframe/leilao/leilao-redesign.js b/src/iframe/leilao/leilao-redesign.js new file mode 100644 index 0000000..74e5744 --- /dev/null +++ b/src/iframe/leilao/leilao-redesign.js @@ -0,0 +1,23 @@ +import { isLeilaoEletronicoApp } from '../../utils/leilao-url.js'; + +const BODY_CLASS = 'ecac-leilao-redesign'; + +export function markRedesign(doc) { + doc.documentElement.classList.add(BODY_CLASS); + doc.body.classList.add(BODY_CLASS); +} + +export function hideRedundantChrome(doc) { + doc.querySelectorAll('breadcrumb, .breadcrumb').forEach((el) => { + el.style.display = 'none'; + el.setAttribute('aria-hidden', 'true'); + }); +} + +export function applyLeilaoRedesign(doc = document) { + const href = doc.defaultView?.location?.href ?? ''; + if (!isLeilaoEletronicoApp(href)) return; + + markRedesign(doc); + hideRedundantChrome(doc); +} diff --git a/src/iframe/leilao/leilao-redesign.test.js b/src/iframe/leilao/leilao-redesign.test.js new file mode 100644 index 0000000..76bb188 --- /dev/null +++ b/src/iframe/leilao/leilao-redesign.test.js @@ -0,0 +1,29 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { JSDOM } from 'jsdom'; + +describe('leilao iframe redesign', () => { + beforeEach(() => { + delete window.location; + window.location = new URL( + 'https://www3.cav.receita.fazenda.gov.br/leilaoEletronicoInter/portal', + ); + }); + + it('marks body and hides breadcrumb', async () => { + const dom = new JSDOM( + ` +