From 862abc8d7437b58420babc79a9d5cc1e3e133240 Mon Sep 17 00:00:00 2001 From: dwindown Date: Sun, 19 Apr 2026 12:27:20 +0700 Subject: [PATCH] feat: add shadcn/ui + Tailwind CSS v4 + Huge Icons foundation - Install tailwindcss, @tailwindcss/postcss, clsx, tailwind-merge, class-variance-authority - Install @hugeicons/react for icons - Install Radix UI primitives (switch, tabs, label, separator, select, dialog, checkbox, dropdown-menu, popover) - Install sonner for toast notifications - Create postcss.config.js with Tailwind v4 PostCSS plugin - Create jsconfig.json with @ path alias for src/admin - Create components.json for shadcn configuration - Update webpack.config.js with @ resolve alias - Create globals.css with Tailwind v4 CSS-first config + shadcn CSS variables - Create cn() utility in lib/utils.js - Create 17 shadcn UI components (button, input, label, checkbox, switch, tabs, alert, separator, badge, textarea, dialog, sonner, table, skeleton, select, dropdown-menu, popover) - Create async confirm() utility replacing SweetAlert2 - Create toast utility wrapping sonner --- .gitignore | 2 +- build/admin-rtl.css | 1910 +++++++++++++++++++++- build/admin.asset.php | 2 +- build/admin.css | 1910 +++++++++++++++++++++- components.json | 21 + jsconfig.json | 9 + package-lock.json | 1671 ++++++++++++++++++- package.json | 21 +- postcss.config.js | 6 + src/admin/components/ui/alert.js | 31 + src/admin/components/ui/badge.js | 26 + src/admin/components/ui/button.js | 33 + src/admin/components/ui/checkbox.js | 25 + src/admin/components/ui/dialog.js | 86 + src/admin/components/ui/dropdown-menu.js | 60 + src/admin/components/ui/input.js | 17 + src/admin/components/ui/label.js | 18 + src/admin/components/ui/popover.js | 29 + src/admin/components/ui/select.js | 103 ++ src/admin/components/ui/separator.js | 20 + src/admin/components/ui/skeleton.js | 9 + src/admin/components/ui/sonner.js | 21 + src/admin/components/ui/switch.js | 25 + src/admin/components/ui/table.js | 64 + src/admin/components/ui/tabs.js | 46 + src/admin/components/ui/textarea.js | 16 + src/admin/index.js | 1 + src/admin/lib/confirm.js | 85 + src/admin/lib/toast.js | 1 + src/admin/lib/utils.js | 6 + src/admin/styles/globals.css | 65 + webpack.config.js | 7 + 32 files changed, 6315 insertions(+), 31 deletions(-) create mode 100644 components.json create mode 100644 jsconfig.json create mode 100644 postcss.config.js create mode 100644 src/admin/components/ui/alert.js create mode 100644 src/admin/components/ui/badge.js create mode 100644 src/admin/components/ui/button.js create mode 100644 src/admin/components/ui/checkbox.js create mode 100644 src/admin/components/ui/dialog.js create mode 100644 src/admin/components/ui/dropdown-menu.js create mode 100644 src/admin/components/ui/input.js create mode 100644 src/admin/components/ui/label.js create mode 100644 src/admin/components/ui/popover.js create mode 100644 src/admin/components/ui/select.js create mode 100644 src/admin/components/ui/separator.js create mode 100644 src/admin/components/ui/skeleton.js create mode 100644 src/admin/components/ui/sonner.js create mode 100644 src/admin/components/ui/switch.js create mode 100644 src/admin/components/ui/table.js create mode 100644 src/admin/components/ui/tabs.js create mode 100644 src/admin/components/ui/textarea.js create mode 100644 src/admin/lib/confirm.js create mode 100644 src/admin/lib/toast.js create mode 100644 src/admin/lib/utils.js create mode 100644 src/admin/styles/globals.css diff --git a/.gitignore b/.gitignore index c92743d55..2d0b7c544 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ coverage *.ntvs* *.njsproj *.sln -*.sw? \ No newline at end of file +*.sw?node_modules/ diff --git a/build/admin-rtl.css b/build/admin-rtl.css index 1b32ad5d0..325919833 100644 --- a/build/admin-rtl.css +++ b/build/admin-rtl.css @@ -1,8 +1,1902 @@ -.formipay-data-table-wrapper{margin:20px 0}.formipay-table-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px}.formipay-table-search{flex-grow:1;max-width:300px}.formipay-table-toolbar .components-select-control{min-width:150px}.formipay-table-toolbar :is(button,input,select){height:40px!important}.formipay-table-toolbar .components-base-control__field{margin-bottom:unset!important}.formipay-table-toolbar :is(button,input,select,.components-input-control__backdrop){border-radius:4px!important}.formipay-filter-tabs{border-bottom:1px solid #ddd;display:flex;gap:4px;margin-bottom:16px}.formipay-filter-tabs .filter-tab{background:transparent;border:none;border-bottom:3px solid transparent;color:#646970;cursor:pointer;font-size:13px;padding:8px 16px;transition:all .2s}.formipay-filter-tabs .filter-tab:hover{background:#f0f0f1;color:#135e96}.formipay-filter-tabs .filter-tab.active{border-bottom-color:#135e96;color:#135e96;font-weight:600}.formipay-filter-tabs .filter-tab .count{background:#dcdcde;border-radius:10px;display:inline-block;font-size:11px;line-height:1.4;margin-right:6px;min-width:18px;padding:2px 6px}.formipay-filter-tabs .filter-tab.active .count{background:#135e96;color:#fff}.formipay-table-container{background:#fff;border:1px solid #c3c4c7;box-shadow:0 1px 1px rgba(0,0,0,.04)}.formipay-table-loading{padding:60px;text-align:center}.formipay-table-empty{color:#646970;padding:40px;text-align:center}.formipay-table{border-collapse:collapse;width:100%}.formipay-table thead th{background:#f6f7f7;border-bottom:1px solid #c3c4c7;font-weight:600;padding:12px 10px;text-align:right}.formipay-table tbody td{border-bottom:1px solid #c3c4c7;padding:10px}.formipay-table tbody tr:last-child td{border-bottom:none}.formipay-table tbody tr:hover{background-color:#f0f0f1}.formipay-table :is(td,th):first-child{text-align:center}.formipay-table th.column-select>input{margin-right:0}.formipay-table .column-select{text-align:center;width:40px}.formipay-table tbody td:first-child input[type=checkbox]{margin:0}.formipay-table .column-actions{width:200px}.formipay-table .row-actions{display:none;visibility:hidden}.formipay-table tbody tr:hover .row-actions{display:block;visibility:visible}.formipay-table .row-actions .button-link,.formipay-table .row-actions a{color:#a7aaad;cursor:pointer;text-decoration:none}.formipay-table .row-actions .button-link:hover,.formipay-table .row-actions a:hover{color:#135e96}.formipay-table .row-actions .delete{color:#b32d2e}.formipay-table .row-actions .delete:hover{color:#d63638}.formipay-table .status-label{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.formipay-table .status-label.publish{background:#edfaef;color:#007017}.formipay-table .status-label.draft{background:#f0f0f1;color:#646970}.formipay-table .status-label.pending{background:#fff8e5;color:#d63638}.formipay-table input.formipay-form-shortcode{background:#f6f7f7;border:1px solid #8c8f94;border-radius:4px;color:#646970;font-family:monospace;font-size:12px;min-width:150px;padding:4px 8px}.formipay-table button.copy-shortcode{align-items:center;background:#fff;border:1px solid #8c8f94;border-radius:4px;cursor:pointer;display:inline-flex;gap:4px;margin-right:4px;padding:4px 8px}.formipay-table button.copy-shortcode:hover{background:#f6f7f7}.formipay-table button.copy-shortcode svg{height:16px;width:16px}.formipay-table-pagination{align-items:center;background:#fff;border:1px solid #c3c4c7;border-top:none;display:flex;justify-content:space-between;padding:12px 16px}.formipay-table-pagination .pagination-info{color:#646970;font-size:13px}.formipay-table-pagination .pagination-controls{align-items:center;display:flex;gap:8px}.formipay-table-pagination .page-info{color:#646970;font-size:13px;padding:0 8px}.formipay-table-pagination .components-select-control{min-width:80px}.formipay-modal-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:20px}.formipay-table thead th.sorted{padding-left:20px;position:relative}.formipay-table thead th .sort-indicator{color:#135e96;position:absolute;left:8px;top:50%;transform:translateY(-50%)} -.formipay-order-timeline h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.timeline-progress{justify-content:space-between;margin-bottom:24px}.timeline-progress,.timeline-step{align-items:center;display:flex;position:relative}.timeline-step{flex:1;flex-direction:column;gap:8px;z-index:1}.timeline-dot{background:#e0e0e0;border:2px solid #c3c4c7;border-radius:50%;height:24px;position:relative;width:24px}.timeline-step.completed .timeline-dot{background:#2271b1;border-color:#2271b1}.timeline-step.completed .timeline-dot:after{background:#fff;border-radius:50%;content:"";height:8px;right:50%;position:absolute;top:50%;transform:translate(50%,-50%);width:8px}.timeline-line{background:#e0e0e0;height:2px;right:50%;position:absolute;top:12px;width:100%;z-index:-1}.timeline-step.completed .timeline-line{background:#2271b1}.timeline-label{color:#646970;font-size:10px;font-weight:600;text-align:center;text-transform:uppercase}.timeline-events ul{list-style:none;margin:0;padding:0}.timeline-events li{border-bottom:1px solid #f0f0f1;display:grid;gap:8px;grid-template-columns:1fr auto;padding:12px 0}.timeline-events li:last-child{border-bottom:none}.event-status{color:#1e1e1e;font-size:13px;font-weight:600}.event-date{color:#646970;font-size:11px;text-align:left}.event-note{color:#646970;font-size:12px;grid-column:1/-1;margin-top:4px}.no-events{color:#646970;font-size:13px;padding:20px 0;text-align:center} -.formipay-notification-log h3{align-items:center;color:#1e1e1e;display:flex;font-size:16px;font-weight:600;gap:8px;margin:0 0 16px}.formipay-notification-log svg{fill:#1e1e1e}.no-logs{color:#646970;font-size:13px;padding:20px 0;text-align:center}.notification-list{list-style:none;margin:0;padding:0}.notification-item{background:#f6f7f7;border:1px solid #e0e0e0;border-radius:4px;display:flex;gap:12px;margin-bottom:8px;padding:12px}.notification-icon{align-items:center;background:#fff;border-radius:50%;display:flex;flex-shrink:0;height:36px;justify-content:center;width:36px}.notification-icon svg{fill:#1e1e1e}.notification-content{flex:1;min-width:0}.notification-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.notification-type{color:#2271b1;font-size:10px;font-weight:700;text-transform:uppercase}.notification-status{border-radius:10px;font-size:10px;font-weight:600;padding:2px 6px}.notification-item.sent .notification-status{background:#e7f7ed;color:#28a745}.notification-item.failed .notification-status{background:#fbeaea;color:#dc3545}.notification-item.pending .notification-status{background:#fff8e5;color:#f0ad4e}.notification-details{display:flex;flex-direction:column;gap:2px}.notification-details strong{color:#1e1e1e;font-size:13px}.notification-date,.notification-recipient{color:#646970;font-size:11px}.notification-date{margin-top:4px} -.formipay-order-detail{background:#f6f7f7;display:flex;flex-direction:column;height:100%}.formipay-detail-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;gap:16px;justify-content:space-between;padding:16px 20px}.formipay-detail-header h1{flex:1;font-size:20px;font-weight:600;margin:0}.header-actions{display:flex;gap:8px}.formipay-detail-content{display:grid;gap:20px;grid-template-columns:2fr 1fr;overflow-y:auto;padding:20px}.formipay-detail-main,.formipay-detail-sidebar{display:flex;flex-direction:column;gap:20px}.formipay-detail-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:20px}.formipay-detail-card h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.detail-list{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}.detail-list>div{display:flex;flex-direction:column}.detail-list dt{color:#646970;font-size:12px;font-weight:600;margin-bottom:4px}.detail-list dd{align-items:center;color:#1e1e1e;display:flex;font-size:14px;gap:8px}.detail-list dd .components-select-control{flex:1}.items-table{border-collapse:collapse;width:100%}.items-table td,.items-table th{border-bottom:1px solid #f0f0f1;padding:10px;text-align:right}.items-table th{color:#646970;font-size:12px;font-weight:600;text-transform:uppercase}.items-table td{font-size:13px}.items-table small{color:#646970;display:block;font-size:11px}.items-table tfoot td{border-bottom:none;border-top:2px solid #1e1e1e;padding-top:16px}.customer-info{display:grid;gap:12px;grid-template-columns:1fr}.customer-info>div{display:flex;flex-direction:column}.customer-info dt{color:#646970;font-size:11px;font-weight:600;margin-bottom:2px}.customer-info dd{color:#1e1e1e;font-size:13px}.no-data{color:#646970;font-size:13px}.formipay-error,.formipay-loading{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;padding:60px 20px}.formipay-error p{color:#646970;margin:0} -.formipay-page-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.formipay-page-header h1{font-size:23px;font-weight:400;margin:0}.formipay-navigation-menu{align-items:center;background-color:#fff;box-shadow:0 4px 12px #d2d2d2;display:flex;gap:2em;right:0;margin-right:-20px;margin-top:-10px;padding:12px 50px 12px 20px;position:sticky;top:32px;width:calc(100% + 20px);z-index:1000}.formipay-navigation-menu>img{flex-shrink:0;height:48px;width:48px}.navigation-links{display:flex;flex-wrap:wrap;gap:4px}.navigation-links .nav-link{border-radius:4px;color:#646970;font-size:14px;font-weight:500;padding:8px 16px;text-decoration:none;transition:all .2s}.navigation-links .nav-link:hover{background-color:#f6f7f7;color:#2271b1}.navigation-links .nav-link.active{background-color:#2271b1;color:#fff}.status-badge{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.status-badge.status-active,.status-badge.status-publish{background-color:#edfaef;color:#00a32a}.status-badge.status-draft,.status-badge.status-inactive{background-color:#f0f0f1;color:#646970}.status-badge.status-expired{background-color:#f6f7f7;color:#d63638}code{background-color:#f0f0f1;border-radius:3px;font-family:monospace;font-size:13px;padding:2px 6px}.formipay-modal-overlay{align-items:center;background-color:rgba(0,0,0,.5);bottom:0;display:flex;justify-content:center;right:0;position:fixed;left:0;top:0;z-index:100000}.formipay-modal-content{background-color:#fff;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,.15);max-height:90vh;max-width:900px;overflow-y:auto;width:90%} -.formipay-variation-table{border-collapse:collapse;margin-top:20px;width:100%}.formipay-variation-table thead th{border-bottom:2px solid #1e1e1e;color:#1e1e1e;font-size:13px;font-weight:600;padding:12px;text-align:right}.formipay-variation-table tbody td{border-bottom:1px solid #f0f0f1;padding:12px}.variation-row{background:#fff}.variation-name{gap:8px}.toggle-expand,.variation-name{align-items:center;display:flex}.toggle-expand{background:transparent;border:none;border-radius:2px;cursor:pointer;height:24px;justify-content:center;padding:0;width:24px}.toggle-expand:hover{background:#f0f0f1}.toggle-expand svg{fill:#646970}.variation-name strong{color:#1e1e1e;font-size:13px}.price-cell,.variation-stock,.variation-weight{min-width:120px}.price-cell input,.variation-stock input,.variation-weight input{border:1px solid #8c8f94;border-radius:2px;font-size:13px;padding:6px 8px;width:100%}.variation-stock .components-base-control,.variation-weight .components-base-control{margin:0}.variation-actions{min-width:100px}.variation-details-row{background:#f9f9f9}.variation-details-row td{padding:0}.inner-table{border-collapse:collapse;margin:0;width:100%}.inner-table thead{display:none}.inner-table td{border-bottom:1px solid #f0f0f1;padding:8px 12px}.inner-table tr:last-child td{border-bottom:none}.inner-table input[type=number]{border:1px solid #8c8f94;border-radius:2px;font-size:12px;padding:6px 8px;width:100%}.currency-name{color:#1e1e1e;font-size:12px;font-weight:600}.required{color:#dc3545;margin-right:4px} -:root{--formipay-color-primary:#2985f7;--formipay-color-sidebar-bg:#2c3e50;--formipay-color-sidebar-text:#bec5cb;--formipay-color-sidebar-active:#2985f7;--formipay-color-content-bg:#f0f3f5;--formipay-color-block-bg:#fff;--formipay-color-border:#f0f0f1;--formipay-color-border-dark:#8c99a5;--formipay-color-input-bg:#f6f9fc;--formipay-color-text:#27374e;--formipay-color-text-muted:#8c99a5;--formipay-color-danger:#d63638;--formipay-color-success:#00a32a;--formipay-color-warning:#dba617;--formipay-spacing-xs:4px;--formipay-spacing-sm:8px;--formipay-spacing-md:12px;--formipay-spacing-lg:16px;--formipay-spacing-xl:20px;--formipay-spacing-xxl:24px;--formipay-radius-sm:4px;--formipay-radius-md:10px;--formipay-radius-lg:30px;--formipay-radius-full:50%;--formipay-font-family:"Roboto",-apple-system,BlinkMacSystemFont,sans-serif;--formipay-font-size-sm:13px;--formipay-font-size-base:14px;--formipay-font-size-md:15px;--formipay-font-size-lg:18px;--formipay-font-weight-normal:400;--formipay-font-weight-medium:500;--formipay-font-weight-semibold:600;--formipay-font-weight-bold:700;--formipay-sidebar-width:273px;--formipay-field-aside-width:40%;--formipay-field-content-width:60%;--formipay-shadow-sm:0 1px 3px rgba(0,0,0,.05);--formipay-shadow-md:-2px 2px 5px rgba(0,0,0,.08);--formipay-shadow-lg:0 4px 12px rgba(0,0,0,.1);--formipay-transition-fast:0.15s ease;--formipay-transition-base:0.3s ease}.formipay-design-system *{box-sizing:border-box}.formipay-design-system{color:var(--formipay-color-text);font-family:var(--formipay-font-family);line-height:1.5}.formipay-box{background-color:var(--formipay-color-content-bg);border-radius:var(--formipay-radius-md);box-shadow:var(--formipay-shadow-sm);margin:0 0 10px;min-height:80px}.formipay-box,.formipay-box-child{position:relative}.formipay-box-child+.formipay-box-child{margin-top:1em}.formipay-box a{color:var(--formipay-color-primary);text-decoration:none;transition:color var(--formipay-transition-base)}.formipay-box a:hover{text-decoration:underline}.formipay-wpcfto-tab-nav{background-color:var(--formipay-color-sidebar-bg);flex-grow:1;padding:21px 0;width:var(--formipay-sidebar-width)}.formipay-wpcfto-tab-nav.hide{display:none}.formipay-wpcfto-tab-nav-inner{position:sticky;top:133px;z-index:99}.formipay-wpcfto-nav{background-color:transparent;color:var(--formipay-color-sidebar-text);cursor:pointer;font-size:var(--formipay-font-size-base);font-weight:400;padding:0;position:relative;text-transform:uppercase;transition:all .3s ease 0s}.formipay-wpcfto-nav-title{padding:13px 34px 13px 32px;position:relative}.formipay-wpcfto-nav i{display:block;font-size:22px;right:auto;margin-top:-11px;position:absolute;left:30px;text-align:center;top:50%;width:26px}.formipay-wpcfto-nav.active{background-color:var(--formipay-color-primary);color:#fff}.formipay-wpcfto-nav:hover{color:#fff}.formipay-wpcfto-submenus{background-color:#1e2a36;padding:18px 34px 18px 32px}.formipay-wpcfto-submenu-item{color:var(--formipay-color-text-muted);font-size:15px;font-weight:400;margin-bottom:15px;position:relative;text-transform:none}.formipay-wpcfto-submenu-item i{display:none;font-size:10px;margin-top:-5px;left:0}.formipay-wpcfto-submenu-item.active,.formipay-wpcfto-submenu-item:hover{color:#fff}.formipay-wpcfto-submenu-item.active i{display:block}.formipay-tabs{flex-grow:1;overflow:hidden}.formipay-tab{background-color:var(--formipay-color-content-bg);display:none;padding:20px 20px 20px 30px;width:100%}.formipay-tab.active{animation:fadeIn .4s ease;display:block}.formipay-tab-content{max-width:100%}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.formipay-generic-field{background-color:var(--formipay-color-block-bg);border-radius:10px;display:flex;flex-wrap:wrap;justify-content:space-between;margin:0 0 10px;max-width:100%;padding:1.8rem 1rem 0;width:100%}.formipay-field-aside{padding-left:2rem;width:var(--formipay-field-aside-width)}.formipay-field-label{display:inline;font-size:var(--formipay-font-size-base);font-weight:var(--formipay-font-weight-medium)}.formipay-field-label.required .formipay-field-label-text:after{color:var(--formipay-color-danger);content:"*";margin-right:2px}.formipay-field-content{width:var(--formipay-field-content-width)}.formipay-field-description{color:var(--formipay-color-text-muted);display:block;font-size:var(--formipay-font-size-sm);margin-top:.8em}.formipay-input,.formipay-select,.formipay-textarea{background-color:var(--formipay-color-input-bg);border:1px solid var(--formipay-color-border-dark);border-radius:var(--formipay-radius-lg);color:var(--formipay-color-text);font-family:inherit;font-size:var(--formipay-font-size-base);padding:10px 16px;transition:border-color var(--formipay-transition-fast),box-shadow var(--formipay-transition-fast);width:100%}.formipay-input:focus,.formipay-select:focus,.formipay-textarea:focus{border-color:var(--formipay-color-primary);box-shadow:0 0 0 3px rgba(41,133,247,.1);outline:none}.formipay-input:disabled,.formipay-select:disabled,.formipay-textarea:disabled{cursor:not-allowed;opacity:.6}.formipay-textarea{min-height:100px;resize:vertical}.formipay-admin-checkbox{align-self:flex-end;margin-bottom:0}.formipay-admin-checkbox-wrapper{background-color:#bec5cb;border-radius:20px;cursor:pointer;display:inline-block;height:24px;position:relative;transition:background-color .3s ease;width:42px}.formipay-admin-checkbox-wrapper.active{background-color:var(--formipay-color-primary)}.formipay-checkbox-switcher{background-color:#fff;border-radius:50%;height:18px;right:3px;position:absolute;top:3px;transition:transform .3s ease;width:18px}.formipay-admin-checkbox-wrapper.active .formipay-checkbox-switcher{transform:translateX(-18px)}.formipay-admin-checkbox input{height:0;opacity:0;position:absolute;width:0}.formipay-admin-checkbox label,.formipay-btn{cursor:pointer}.formipay-btn{align-items:center;border:none;border-radius:var(--formipay-radius-sm);display:inline-flex;font-family:inherit;font-size:var(--formipay-font-size-base);font-weight:var(--formipay-font-weight-medium);gap:var(--formipay-spacing-sm);justify-content:center;padding:10px 20px;text-decoration:none;transition:all var(--formipay-transition-fast)}.formipay-btn:disabled{cursor:not-allowed;opacity:.6}.formipay-btn-primary{background-color:var(--formipay-color-primary);color:#fff}.formipay-btn-primary:hover:not(:disabled){background-color:#1e6ae6}.formipay-btn-secondary{background-color:#f0f0f1;color:var(--formipay-color-text)}.formipay-btn-secondary:hover:not(:disabled){background-color:#e0e0e1}.formipay-btn-danger{background-color:var(--formipay-color-danger);color:#fff}.formipay-btn-danger:hover:not(:disabled){background-color:#b32d2e}.formipay-btn-sm{font-size:var(--formipay-font-size-sm);padding:6px 12px}.formipay-btn-icon{aspect-ratio:1;padding:8px}.formipay-repeater{display:flex;flex-direction:column;gap:var(--formipay-spacing-md)}.formipay-repeater-item{background-color:#fafafa;border:1px solid var(--formipay-color-border);border-radius:var(--formipay-radius-sm);overflow:hidden}.formipay-repeater-header{align-items:center;background-color:#fff;border-bottom:1px solid var(--formipay-color-border);cursor:pointer;display:flex;justify-content:space-between;padding:var(--formipay-spacing-md) var(--formipay-spacing-lg);-webkit-user-select:none;-moz-user-select:none;user-select:none}.formipay-repeater-header:hover{background-color:#f8f9fa}.formipay-repeater-title{align-items:center;display:flex;font-weight:var(--formipay-font-weight-medium);gap:var(--formipay-spacing-sm)}.formipay-repeater-toggle{align-items:center;display:flex;height:20px;justify-content:center;transition:transform var(--formipay-transition-fast);width:20px}.formipay-repeater-item.collapsed .formipay-repeater-toggle{transform:rotate(90deg)}.formipay-repeater-body{padding:var(--formipay-spacing-lg)}.formipay-repeater-item.collapsed .formipay-repeater-body{display:none}.formipay-repeater-actions{display:flex;gap:var(--formipay-spacing-sm)}.formipay-repeater-delete{color:var(--formipay-color-danger);cursor:pointer;transition:color var(--formipay-transition-fast)}.formipay-repeater-delete:hover{color:#b32d2e}.formipay-repeater-add{align-items:center;background-color:transparent;border:1px dashed var(--formipay-color-border-dark);border-radius:var(--formipay-radius-sm);color:var(--formipay-color-text-muted);cursor:pointer;display:flex;gap:var(--formipay-spacing-sm);padding:var(--formipay-spacing-md) var(--formipay-spacing-lg);transition:all var(--formipay-transition-fast)}.formipay-repeater-add:hover{background-color:rgba(41,133,247,.05);border-color:var(--formipay-color-primary);color:var(--formipay-color-primary)}.formipay-table-wrapper{background-color:var(--formipay-color-content-bg);border-radius:var(--formipay-radius-md);box-shadow:var(--formipay-shadow-sm);overflow:hidden}.formipay-table{border-collapse:collapse;width:100%}.formipay-table thead{background-color:#f8f9fa}.formipay-table th{color:var(--formipay-color-text-muted);font-size:var(--formipay-font-size-sm);font-weight:var(--formipay-font-weight-semibold);letter-spacing:.5px;text-align:right;text-transform:uppercase}.formipay-table td,.formipay-table th{border-bottom:1px solid var(--formipay-color-border);padding:12px 16px}.formipay-table tbody tr:last-child td{border-bottom:none}.formipay-table tbody tr:hover{background-color:#f8f9fa}.formipay-badge{align-items:center;border-radius:var(--formipay-radius-full);display:inline-flex;font-size:var(--formipay-font-size-sm);font-weight:var(--formipay-font-weight-medium);padding:4px 12px}.formipay-badge-success{background-color:#edfaef;color:var(--formipay-color-success)}.formipay-badge-warning{background-color:#fff8e5;color:var(--formipay-color-warning)}.formipay-badge-danger{background-color:#fce8e6;color:var(--formipay-color-danger)}.formipay-badge-info{background-color:#e7f3ff;color:var(--formipay-color-primary)}.formipay-badge-default{background-color:#f0f0f1;color:var(--formipay-color-text-muted)}.formipay-group-title{align-items:center;border-bottom:1px solid #d6dade;color:var(--formipay-color-text-muted);display:flex;font-size:14px;font-weight:400;gap:8px;letter-spacing:1.4px;margin:0 0 17px;padding:0 0 12px;text-transform:uppercase;width:100%}.formipay-group-title i{display:block}.formipay-notice{align-items:flex-start;border-radius:var(--formipay-radius-sm);display:flex;gap:var(--formipay-spacing-md);margin:var(--formipay-spacing-md) 0;padding:var(--formipay-spacing-md) var(--formipay-spacing-lg)}.formipay-notice-icon{flex-shrink:0;height:20px;width:20px}.formipay-notice-content{flex:1}.formipay-notice-title{font-weight:var(--formipay-font-weight-semibold);margin-bottom:var(--formipay-spacing-xs)}.formipay-notice-success{background-color:#edfaef;border-right:4px solid var(--formipay-color-success)}.formipay-notice-warning{background-color:#fff8e5;border-right:4px solid var(--formipay-color-warning)}.formipay-notice-error{background-color:#fce8e6;border-right:4px solid var(--formipay-color-danger)}.formipay-notice-info{background-color:#e7f3ff;border-right:4px solid var(--formipay-color-primary)}.formipay-loading{align-items:center;display:flex;justify-content:center;padding:40px}.formipay-spinner{animation:formipay-spin .8s linear infinite;border:3px solid var(--formipay-color-border);border-radius:50%;border-top-color:var(--formipay-color-primary);height:32px;width:32px}@keyframes formipay-spin{to{transform:rotate(-1turn)}}.formipay-empty-state{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:60px 40px;text-align:center}.formipay-empty-icon{color:var(--formipay-color-border-dark);font-size:48px;margin-bottom:var(--formipay-spacing-md)}.formipay-empty-title{font-size:var(--formipay-font-size-lg);font-weight:var(--formipay-font-weight-semibold);margin-bottom:var(--formipay-spacing-sm)}.formipay-empty-description{color:var(--formipay-color-text-muted);margin-bottom:var(--formipay-spacing-lg)}.formipay-text-center{text-align:center}.formipay-text-right{text-align:left}.formipay-text-muted{color:var(--formipay-color-text-muted)}.formipay-text-small{font-size:var(--formipay-font-size-sm)}.formipay-text-large{font-size:var(--formipay-font-size-lg)}.formipay-mt-0{margin-top:0}.formipay-mt-1{margin-top:var(--formipay-spacing-xs)}.formipay-mt-2{margin-top:var(--formipay-spacing-sm)}.formipay-mt-3{margin-top:var(--formipay-spacing-md)}.formipay-mt-4{margin-top:var(--formipay-spacing-lg)}.formipay-mb-0{margin-bottom:0}.formipay-mb-1{margin-bottom:var(--formipay-spacing-xs)}.formipay-mb-2{margin-bottom:var(--formipay-spacing-sm)}.formipay-mb-3{margin-bottom:var(--formipay-spacing-md)}.formipay-mb-4{margin-bottom:var(--formipay-spacing-lg)}.formipay-flex{display:flex}.formipay-flex-center{align-items:center;display:flex;justify-content:center}.formipay-flex-between{align-items:center;display:flex;justify-content:space-between}.formipay-flex-column{display:flex;flex-direction:column}.formipay-gap-1{gap:var(--formipay-spacing-xs)}.formipay-gap-2{gap:var(--formipay-spacing-sm)}.formipay-gap-3{gap:var(--formipay-spacing-md)}.formipay-gap-4{gap:var(--formipay-spacing-lg)}.formipay-wpcfto-metabox{background-color:#fff;border-radius:var(--formipay-radius-md);box-shadow:var(--formipay-shadow-sm);overflow:hidden}.formipay-wpcfto-metabox-inner{display:flex;min-height:400px}.formipay-wpcfto-container{display:flex;position:relative;width:100%}.formipay-wpcfto-container.horizontal{flex-direction:column}.formipay-wpcfto-container.horizontal .formipay-wpcfto-tab-nav{flex-direction:row;overflow-x:auto;padding:0;width:100%}.formipay-wpcfto-container.horizontal .formipay-wpcfto-tabs{width:100%}@media (max-width:768px){.formipay-tab-nav{flex-direction:row;overflow-x:auto}.formipay-nav-item{flex-shrink:0}.formipay-field{padding:var(--formipay-spacing-md) 0}} -.formipay-coupon-metabox{margin:-12px}.formipay-metabox-actions{background-color:#fff;border-top:1px solid #f0f0f1;display:flex;gap:12px;justify-content:flex-end;padding:20px 30px}.formipay-radio-group{display:flex;gap:16px}.formipay-radio{align-items:center;border:2px solid var(--formipay-color-border-dark);border-radius:var(--formipay-radius-lg);cursor:pointer;display:inline-flex;gap:8px;padding:8px 16px;transition:all var(--formipay-transition-fast)}.formipay-radio input{height:0;opacity:0;position:absolute;width:0}.formipay-radio span{color:var(--formipay-color-text-muted);font-weight:var(--formipay-font-weight-medium)}.formipay-radio.active,.formipay-radio:hover{border-color:var(--formipay-color-primary)}.formipay-radio.active{background-color:var(--formipay-color-primary)}.formipay-radio.active span{color:#fff}.formipay-autocomplete{position:relative}.formipay-autocomplete-selected{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.formipay-autocomplete-tag{align-items:center;background-color:var(--formipay-color-primary);border-radius:4px;color:#fff;display:inline-flex;font-size:var(--formipay-font-size-sm);gap:4px;padding:4px 8px}.formipay-autocomplete-remove{align-items:center;background:none;border:none;color:#fff;cursor:pointer;display:flex;font-size:16px;height:16px;justify-content:center;line-height:1;padding:0;width:16px}.formipay-autocomplete-remove:hover{opacity:.8}.formipay-autocomplete-input-wrapper{position:relative}.formipay-autocomplete-loading{color:var(--formipay-color-text-muted);position:absolute;left:12px;top:50%;transform:translateY(-50%)}.formipay-autocomplete-results{background-color:#fff;border:1px solid var(--formipay-color-border-dark);border-radius:var(--formipay-radius-sm);box-shadow:var(--formipay-shadow-md);right:0;margin-top:4px;max-height:200px;overflow-y:auto;position:absolute;left:0;top:100%;z-index:100}.formipay-autocomplete-result{cursor:pointer;padding:10px 16px;transition:background-color var(--formipay-transition-fast)}.formipay-autocomplete-result:hover{background-color:var(--formipay-color-content-bg)}.formipay-autocomplete-result:first-child{border-radius:var(--formipay-radius-sm) var(--formipay-radius-sm) 0 0}.formipay-autocomplete-result:last-child{border-radius:0 0 var(--formipay-radius-sm) var(--formipay-radius-sm)} +/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */ +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-space-x-reverse:0;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-100:oklch(96.2% .044 156.743);--color-green-800:oklch(44.8% .119 151.328);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-800:oklch(42.4% .199 265.638);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::-moz-placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}.formipay-design-system *{border-color:var(--border)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.\!start{inset-inline-start:var(--spacing)!important}.-start{inset-inline-start:calc(var(--spacing) * -1)}.start{inset-inline-start:var(--spacing)}.-end{inset-inline-end:calc(var(--spacing) * -1)}.end{inset-inline-end:var(--spacing)}.top-40{top:calc(var(--spacing) * 40)}.top-\[50\%\]{top:50%}.right-2{left:calc(var(--spacing) * 2)}.left-\[50\%\]{right:50%}.isolate{isolation:isolate}.z-50{z-index:50}.col-3{grid-column:3}.col-4{grid-column:4}.col-6{grid-column:6}.col-8{grid-column:8}.col-10{grid-column:10}.row-1{grid-row:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-0{margin-inline:calc(var(--spacing) * 0)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.me-1{margin-inline-end:calc(var(--spacing) * 1)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-100{height:calc(var(--spacing) * 100)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-96{max-height:calc(var(--spacing) * 96)}.min-h-\[60px\]{min-height:60px}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-9{width:calc(var(--spacing) * 9)}.w-72{width:calc(var(--spacing) * 72)}.w-100{width:calc(var(--spacing) * 100)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-lg{max-width:var(--container-lg)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-\[30px\]{border-radius:30px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-sm{border-radius:calc(var(--radius) * .6)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-destructive\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\/50{border-color:color-mix(in oklab, var(--destructive) 50%, transparent)}}.border-input{border-color:var(--input)}.border-primary{border-color:var(--primary)}.border-secondary{border-color:var(--secondary)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--background)}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab, red, red)){.bg-black\/80{background-color:color-mix(in oklab, var(--color-black) 80%, transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-border{background-color:var(--border)}.bg-destructive{background-color:var(--destructive)}.bg-green-100{background-color:var(--color-green-100)}.bg-muted,.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.pr-8{padding-left:calc(var(--spacing) * 8)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2{padding-right:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:right}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-nowrap{text-wrap:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-blue-800{color:var(--color-blue-800)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-foreground{color:var(--foreground)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary{color:var(--secondary)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.block-1{block-size:calc(var(--spacing) * 1)}.block-3{block-size:calc(var(--spacing) * 3)}.block-4{block-size:calc(var(--spacing) * 4)}.block-6{block-size:calc(var(--spacing) * 6)}.block-8{block-size:calc(var(--spacing) * 8)}.block-9{block-size:calc(var(--spacing) * 9)}.block-10{block-size:calc(var(--spacing) * 10)}.block-11{block-size:calc(var(--spacing) * 11)}.block-12{block-size:calc(var(--spacing) * 12)}.paused{animation-play-state:paused}.running{animation-play-state:running}.zoom-in{--tw-enter-scale:0}.zoom-out{--tw-exit-scale:0}.group-\[\.toast\]\:bg-muted:is(:where(.group).toast *){background-color:var(--muted)}.group-\[\.toast\]\:bg-primary:is(:where(.group).toast *){background-color:var(--primary)}.group-\[\.toast\]\:text-muted-foreground:is(:where(.group).toast *){color:var(--muted-foreground)}.group-\[\.toast\]\:text-primary-foreground:is(:where(.group).toast *){color:var(--primary-foreground)}.group-\[\.toaster\]\:border-border:is(:where(.group).toaster *){border-color:var(--border)}.group-\[\.toaster\]\:bg-background:is(:where(.group).toaster *){background-color:var(--background)}.group-\[\.toaster\]\:text-foreground:is(:where(.group).toaster *){color:var(--foreground)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::-moz-placeholder{color:var(--muted-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab, var(--destructive) 80%, transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.hover\:bg-primary\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--ring)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:var(--background)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:calc(1 / 2*-100%)}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:calc(48%*-1)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:calc(1 / 2*-100%)}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:calc(48%*-1)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:right}}.dark\:border-destructive:is(.dark *){border-color:var(--destructive)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-left:calc(var(--spacing) * 0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing) * 4)}.\[\&\>svg\]\:left-4>svg{right:calc(var(--spacing) * 4)}.\[\&\>svg\]\:text-destructive>svg{color:var(--destructive)}.\[\&\>svg\]\:text-foreground>svg{color:var(--foreground)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-right:calc(var(--spacing) * 7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(54.6% .245 262.881);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(54.6% .245 262.881);--sidebar:#2c3e50;--sidebar-foreground:#bec5cb;--sidebar-active:#2985f7}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(-360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}} + +/* DataTable Wrapper */ +.formipay-data-table-wrapper { + margin: 20px 0; +} + +/* Toolbar */ +.formipay-table-toolbar { + display: flex; + gap: 12px; + align-items: center; + flex-wrap: wrap; + margin-bottom: 16px; +} + +.formipay-table-search { + max-width: 300px; + flex-grow: 1; +} + +.formipay-table-toolbar .components-select-control { + min-width: 150px; +} + +.formipay-table-toolbar *:is(button,input,select) { + height: 40px!important; +} + +.formipay-table-toolbar .components-base-control__field { + margin-bottom: unset!important; +} + +.formipay-table-toolbar *:is(button, input, select, .components-input-control__backdrop){ + border-radius: 4px!important; +} + +/* Filter Tabs */ +.formipay-filter-tabs { + display: flex; + gap: 4px; + margin-bottom: 16px; + border-bottom: 1px solid #ddd; +} + +.formipay-filter-tabs .filter-tab { + padding: 8px 16px; + background: transparent; + border: none; + border-bottom: 3px solid transparent; + cursor: pointer; + font-size: 13px; + color: #646970; + transition: all 0.2s; +} + +.formipay-filter-tabs .filter-tab:hover { + color: #135e96; + background: #f0f0f1; +} + +.formipay-filter-tabs .filter-tab.active { + color: #135e96; + border-bottom-color: #135e96; + font-weight: 600; +} + +.formipay-filter-tabs .filter-tab .count { + display: inline-block; + min-width: 18px; + padding: 2px 6px; + margin-right: 6px; + background: #dcdcde; + border-radius: 10px; + font-size: 11px; + line-height: 1.4; +} + +.formipay-filter-tabs .filter-tab.active .count { + background: #135e96; + color: #fff; +} + +/* Table Container */ +.formipay-table-container { + background: #fff; + border: 1px solid #c3c4c7; + box-shadow: 0 1px 1px rgba(0,0,0,.04); +} + +.formipay-table-loading { + padding: 60px; + text-align: center; +} + +.formipay-table-empty { + padding: 40px; + text-align: center; + color: #646970; +} + +/* Table */ +.formipay-table { + width: 100%; + border-collapse: collapse; +} + +.formipay-table thead th { + padding: 12px 10px; + font-weight: 600; + text-align: right; + border-bottom: 1px solid #c3c4c7; + background: #f6f7f7; +} + +.formipay-table tbody td { + padding: 10px; + border-bottom: 1px solid #c3c4c7; +} + +.formipay-table tbody tr:last-child td { + border-bottom: none; +} + +.formipay-table tbody tr:hover { + background-color: #f0f0f1; +} + +.formipay-table *:is(td, th):first-child { + text-align: center; +} + +.formipay-table th.column-select > input { + margin-right: 0; +} + +/* Checkbox Column */ +.formipay-table .column-select { + width: 40px; + text-align: center; +} + +.formipay-table tbody td:first-child input[type="checkbox"] { + margin: 0; +} + +/* Actions Column */ +.formipay-table .column-actions { + width: 200px; +} + +.formipay-table .row-actions { + display: none; + visibility: hidden; +} + +.formipay-table tbody tr:hover .row-actions { + display: block; + visibility: visible; +} + +.formipay-table .row-actions a, +.formipay-table .row-actions .button-link { + text-decoration: none; + color: #a7aaad; + cursor: pointer; +} + +.formipay-table .row-actions a:hover, +.formipay-table .row-actions .button-link:hover { + color: #135e96; +} + +.formipay-table .row-actions .delete { + color: #b32d2e; +} + +.formipay-table .row-actions .delete:hover { + color: #d63638; +} + +/* Status Labels */ +.formipay-table .status-label { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + font-weight: 500; +} + +.formipay-table .status-label.publish { + background: #edfaef; + color: #007017; +} + +.formipay-table .status-label.draft { + background: #f0f0f1; + color: #646970; +} + +.formipay-table .status-label.pending { + background: #fff8e5; + color: #d63638; +} + +/* Shortcode Input */ +.formipay-table input.formipay-form-shortcode { + padding: 4px 8px; + border: 1px solid #8c8f94; + border-radius: 4px; + background: #f6f7f7; + color: #646970; + font-family: monospace; + font-size: 12px; + min-width: 150px; +} + +.formipay-table button.copy-shortcode { + padding: 4px 8px; + margin-right: 4px; + border: 1px solid #8c8f94; + border-radius: 4px; + background: #fff; + cursor: pointer; + display: inline-flex; + align-items: center; + gap: 4px; +} + +.formipay-table button.copy-shortcode:hover { + background: #f6f7f7; +} + +.formipay-table button.copy-shortcode svg { + width: 16px; + height: 16px; +} + +/* Pagination */ +.formipay-table-pagination { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 16px; + background: #fff; + border: 1px solid #c3c4c7; + border-top: none; +} + +.formipay-table-pagination .pagination-info { + color: #646970; + font-size: 13px; +} + +.formipay-table-pagination .pagination-controls { + display: flex; + gap: 8px; + align-items: center; +} + +.formipay-table-pagination .page-info { + padding: 0 8px; + color: #646970; + font-size: 13px; +} + +.formipay-table-pagination .components-select-control { + min-width: 80px; +} + +/* Modal Actions */ +.formipay-modal-actions { + display: flex; + justify-content: flex-end; + gap: 12px; + margin-top: 20px; +} + +/* Sort Indicator */ +.formipay-table thead th.sorted { + position: relative; + padding-left: 20px; +} + +.formipay-table thead th .sort-indicator { + position: absolute; + left: 8px; + top: 50%; + transform: translateY(-50%); + color: #135e96; +} + +.formipay-order-timeline h3 { + margin: 0 0 16px; + font-size: 16px; + font-weight: 600; + color: #1e1e1e; +} + +.timeline-progress { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 24px; + position: relative; +} + +.timeline-step { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + position: relative; + z-index: 1; + flex: 1; +} + +.timeline-dot { + width: 24px; + height: 24px; + background: #e0e0e0; + border: 2px solid #c3c4c7; + border-radius: 50%; + position: relative; +} + +.timeline-step.completed .timeline-dot { + background: #2271b1; + border-color: #2271b1; +} + +.timeline-step.completed .timeline-dot::after { + content: ''; + position: absolute; + top: 50%; + right: 50%; + transform: translate(50%, -50%); + width: 8px; + height: 8px; + background: #fff; + border-radius: 50%; +} + +.timeline-line { + position: absolute; + top: 12px; + right: 50%; + width: 100%; + height: 2px; + background: #e0e0e0; + z-index: -1; +} + +.timeline-step.completed .timeline-line { + background: #2271b1; +} + +.timeline-label { + font-size: 10px; + font-weight: 600; + color: #646970; + text-align: center; + text-transform: uppercase; +} + +.timeline-events ul { + list-style: none; + margin: 0; + padding: 0; +} + +.timeline-events li { + display: grid; + grid-template-columns: 1fr auto; + gap: 8px; + padding: 12px 0; + border-bottom: 1px solid #f0f0f1; +} + +.timeline-events li:last-child { + border-bottom: none; +} + +.event-status { + font-size: 13px; + font-weight: 600; + color: #1e1e1e; +} + +.event-date { + font-size: 11px; + color: #646970; + text-align: left; +} + +.event-note { + grid-column: 1 / -1; + font-size: 12px; + color: #646970; + margin-top: 4px; +} + +.no-events { + color: #646970; + font-size: 13px; + text-align: center; + padding: 20px 0; +} + +.formipay-notification-log h3 { + margin: 0 0 16px; + font-size: 16px; + font-weight: 600; + color: #1e1e1e; + display: flex; + align-items: center; + gap: 8px; +} + +.formipay-notification-log svg { + fill: #1e1e1e; +} + +.no-logs { + color: #646970; + font-size: 13px; + text-align: center; + padding: 20px 0; +} + +.notification-list { + list-style: none; + margin: 0; + padding: 0; +} + +.notification-item { + display: flex; + gap: 12px; + padding: 12px; + background: #f6f7f7; + border: 1px solid #e0e0e0; + border-radius: 4px; + margin-bottom: 8px; +} + +.notification-icon { + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + background: #fff; + border-radius: 50%; + flex-shrink: 0; +} + +.notification-icon svg { + fill: #1e1e1e; +} + +.notification-content { + flex: 1; + min-width: 0; +} + +.notification-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 4px; +} + +.notification-type { + font-size: 10px; + font-weight: 700; + color: #2271b1; + text-transform: uppercase; +} + +.notification-status { + font-size: 10px; + font-weight: 600; + padding: 2px 6px; + border-radius: 10px; +} + +.notification-item.sent .notification-status { + background: #e7f7ed; + color: #28a745; +} + +.notification-item.failed .notification-status { + background: #fbeaea; + color: #dc3545; +} + +.notification-item.pending .notification-status { + background: #fff8e5; + color: #f0ad4e; +} + +.notification-details { + display: flex; + flex-direction: column; + gap: 2px; +} + +.notification-details strong { + font-size: 13px; + color: #1e1e1e; +} + +.notification-recipient { + font-size: 11px; + color: #646970; +} + +.notification-date { + font-size: 11px; + color: #646970; + margin-top: 4px; +} + +.formipay-order-detail { + display: flex; + flex-direction: column; + height: 100%; + background: #f6f7f7; +} + +.formipay-detail-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 20px; + background: #fff; + border-bottom: 1px solid #e0e0e0; + gap: 16px; +} + +.formipay-detail-header h1 { + margin: 0; + font-size: 20px; + font-weight: 600; + flex: 1; +} + +.header-actions { + display: flex; + gap: 8px; +} + +.formipay-detail-content { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 20px; + padding: 20px; + overflow-y: auto; +} + +.formipay-detail-main, +.formipay-detail-sidebar { + display: flex; + flex-direction: column; + gap: 20px; +} + +.formipay-detail-card { + background: #fff; + border: 1px solid #e0e0e0; + border-radius: 4px; + padding: 20px; +} + +.formipay-detail-card h3 { + margin: 0 0 16px; + font-size: 16px; + font-weight: 600; + color: #1e1e1e; +} + +.detail-list { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; +} + +.detail-list > div { + display: flex; + flex-direction: column; +} + +.detail-list dt { + font-size: 12px; + font-weight: 600; + color: #646970; + margin-bottom: 4px; +} + +.detail-list dd { + font-size: 14px; + color: #1e1e1e; + display: flex; + align-items: center; + gap: 8px; +} + +.detail-list dd .components-select-control { + flex: 1; +} + +.items-table { + width: 100%; + border-collapse: collapse; +} + +.items-table th, +.items-table td { + padding: 10px; + text-align: right; + border-bottom: 1px solid #f0f0f1; +} + +.items-table th { + font-size: 12px; + font-weight: 600; + color: #646970; + text-transform: uppercase; +} + +.items-table td { + font-size: 13px; +} + +.items-table small { + display: block; + color: #646970; + font-size: 11px; +} + +.items-table tfoot td { + border-top: 2px solid #1e1e1e; + border-bottom: none; + padding-top: 16px; +} + +.customer-info { + display: grid; + grid-template-columns: 1fr; + gap: 12px; +} + +.customer-info > div { + display: flex; + flex-direction: column; +} + +.customer-info dt { + font-size: 11px; + font-weight: 600; + color: #646970; + margin-bottom: 2px; +} + +.customer-info dd { + font-size: 13px; + color: #1e1e1e; +} + +.no-data { + color: #646970; + font-size: 13px; +} + +.formipay-error, +.formipay-loading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 20px; + gap: 16px; +} + +.formipay-error p { + color: #646970; + margin: 0; +} + +.formipay-page-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; +} + +.formipay-page-header h1 { + margin: 0; + font-size: 23px; + font-weight: 400; +} + +/** Navigation Menu (App-level) **/ +.formipay-navigation-menu { + margin-right: -20px; + padding: 12px 50px 12px 20px; + background-color: white; + display: flex; + gap: 2em; + align-items: center; + position: sticky; + top: 32px; + right: 0; + z-index: 1000; + box-shadow: 0 4px 12px #d2d2d2; + width: calc(100% + 20px); + margin-top: -10px; +} + +.formipay-navigation-menu > img { + width: 48px; + height: 48px; + flex-shrink: 0; +} + +.navigation-links { + display: flex; + gap: 4px; + flex-wrap: wrap; +} + +.navigation-links .nav-link { + padding: 8px 16px; + text-decoration: none; + color: #646970; + border-radius: 4px; + transition: all 0.2s; + font-weight: 500; + font-size: 14px; +} + +.navigation-links .nav-link:hover { + background-color: #f6f7f7; + color: #2271b1; +} + +.navigation-links .nav-link.active { + background-color: #2271b1; + color: white; +} + +.status-badge { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + font-weight: 500; +} + +.status-badge.status-publish, +.status-badge.status-active { + background-color: #edfaef; + color: #00a32a; +} + +.status-badge.status-draft, +.status-badge.status-inactive { + background-color: #f0f0f1; + color: #646970; +} + +.status-badge.status-expired { + background-color: #f6f7f7; + color: #d63638; +} + +code { + background-color: #f0f0f1; + padding: 2px 6px; + border-radius: 3px; + font-family: monospace; + font-size: 13px; +} + +/** Modal Overlay **/ +.formipay-modal-overlay { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 100000; +} + +.formipay-modal-content { + background-color: white; + border-radius: 8px; + max-width: 900px; + width: 90%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); +} +.formipay-variation-table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +.formipay-variation-table thead th { + padding: 12px; + text-align: right; + font-size: 13px; + font-weight: 600; + color: #1e1e1e; + border-bottom: 2px solid #1e1e1e; +} + +.formipay-variation-table tbody td { + padding: 12px; + border-bottom: 1px solid #f0f0f1; +} + +.variation-row { + background: #fff; +} + +.variation-name { + display: flex; + align-items: center; + gap: 8px; +} + +.toggle-expand { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + padding: 0; + border: none; + background: transparent; + cursor: pointer; + border-radius: 2px; +} + +.toggle-expand:hover { + background: #f0f0f1; +} + +.toggle-expand svg { + fill: #646970; +} + +.variation-name strong { + font-size: 13px; + color: #1e1e1e; +} + +.price-cell, +.variation-stock, +.variation-weight { + min-width: 120px; +} + +.price-cell input, +.variation-stock input, +.variation-weight input { + width: 100%; + padding: 6px 8px; + font-size: 13px; + border: 1px solid #8c8f94; + border-radius: 2px; +} + +.variation-stock .components-base-control, +.variation-weight .components-base-control { + margin: 0; +} + +.variation-actions { + min-width: 100px; +} + +.variation-details-row { + background: #f9f9f9; +} + +.variation-details-row td { + padding: 0; +} + +.inner-table { + width: 100%; + margin: 0; + border-collapse: collapse; +} + +.inner-table thead { + display: none; +} + +.inner-table td { + padding: 8px 12px; + border-bottom: 1px solid #f0f0f1; +} + +.inner-table tr:last-child td { + border-bottom: none; +} + +.inner-table input[type="number"] { + width: 100%; + padding: 6px 8px; + font-size: 12px; + border: 1px solid #8c8f94; + border-radius: 2px; +} + +.currency-name { + font-size: 12px; + font-weight: 600; + color: #1e1e1e; +} + +.required { + color: #dc3545; + margin-right: 4px; +} + +/** + * Formipay Design System - WPCFTO-inspired component styles + * Matches the visual language of WPCFTO Vue components + * Use these classes in React components for consistency + */ + +/* ============================================ + DESIGN TOKENS + ============================================ */ + +:root { + /* Colors - WPCFTO-matched values */ + --formipay-color-primary: #2985f7; + --formipay-color-sidebar-bg: #2c3e50; + --formipay-color-sidebar-text: #bec5cb; + --formipay-color-sidebar-active: #2985f7; + --formipay-color-content-bg: #f0f3f5; + --formipay-color-block-bg: #fff; + --formipay-color-border: #f0f0f1; + --formipay-color-border-dark: #8c99a5; + --formipay-color-input-bg: #f6f9fc; + --formipay-color-text: #27374e; + --formipay-color-text-muted: #8c99a5; + --formipay-color-danger: #d63638; + --formipay-color-success: #00a32a; + --formipay-color-warning: #dba617; + + /* Spacing - WPCFTO values */ + --formipay-spacing-xs: 4px; + --formipay-spacing-sm: 8px; + --formipay-spacing-md: 12px; + --formipay-spacing-lg: 16px; + --formipay-spacing-xl: 20px; + --formipay-spacing-xxl: 24px; + + /* Border Radius - WPCFTO values */ + --formipay-radius-sm: 4px; + --formipay-radius-md: 10px; + --formipay-radius-lg: 30px; + --formipay-radius-full: 50%; + + /* Typography - WPCFTO values */ + --formipay-font-family: 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif; + --formipay-font-size-sm: 13px; + --formipay-font-size-base: 14px; + --formipay-font-size-md: 15px; + --formipay-font-size-lg: 18px; + --formipay-font-weight-normal: 400; + --formipay-font-weight-medium: 500; + --formipay-font-weight-semibold: 600; + --formipay-font-weight-bold: 700; + + /* WPCFTO Layout Dimensions */ + --formipay-sidebar-width: 273px; + --formipay-field-aside-width: 40%; + --formipay-field-content-width: 60%; + + /* Shadows */ + --formipay-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.05); + --formipay-shadow-md: -2px 2px 5px rgba(0, 0, 0, 0.08); + --formipay-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.1); + + /* Transitions */ + --formipay-transition-fast: 0.15s ease; + --formipay-transition-base: 0.3s ease; +} + +/* ============================================ + BASE STYLES + ============================================ */ + +.formipay-design-system * { + box-sizing: border-box; +} + +.formipay-design-system { + font-family: var(--formipay-font-family); + color: var(--formipay-color-text); + line-height: 1.5; +} + +/* ============================================ + BOX COMPONENT + ============================================ */ + +.formipay-box { + background-color: var(--formipay-color-content-bg); + border-radius: var(--formipay-radius-md); + margin: 0 0 10px; + min-height: 80px; + position: relative; + box-shadow: var(--formipay-shadow-sm); +} + +.formipay-box-child { + position: relative; +} + +.formipay-box-child + .formipay-box-child { + margin-top: 1em; +} + +.formipay-box a { + color: var(--formipay-color-primary); + text-decoration: none; + transition: color var(--formipay-transition-base); +} + +.formipay-box a:hover { + text-decoration: underline; +} + +/* ============================================ + TAB NAVIGATION (WPCFTO sidebar) + ============================================ */ + +.formipay-wpcfto-tab-nav { + background-color: var(--formipay-color-sidebar-bg); + width: var(--formipay-sidebar-width); + padding: 21px 0; + flex-grow: 1; +} + +.formipay-wpcfto-tab-nav.hide { + display: none; +} + +.formipay-wpcfto-tab-nav-inner { + position: sticky; + top: 133px; + z-index: 99; +} + +.formipay-wpcfto-nav { + background-color: transparent; + position: relative; + padding: 0; + font-size: var(--formipay-font-size-base); + font-weight: 400; + text-transform: uppercase; + color: var(--formipay-color-sidebar-text); + cursor: pointer; + transition: all 0.3s ease 0s; +} + +.formipay-wpcfto-nav-title { + padding: 13px 34px 13px 32px; + position: relative; +} + +.formipay-wpcfto-nav i { + display: block; + position: absolute; + left: 30px; + right: auto; + top: 50%; + margin-top: -11px; + width: 26px; + text-align: center; + font-size: 22px; +} + +.formipay-wpcfto-nav.active { + background-color: var(--formipay-color-primary); + color: white; +} + +.formipay-wpcfto-nav:hover { + color: white; +} + +.formipay-wpcfto-submenus { + background-color: #1e2a36; + padding: 18px 34px 18px 32px; +} + +.formipay-wpcfto-submenu-item { + font-size: 15px; + font-weight: 400; + text-transform: initial; + position: relative; + color: var(--formipay-color-text-muted); + margin-bottom: 15px; +} + +.formipay-wpcfto-submenu-item i { + font-size: 10px; + left: 0; + margin-top: -5px; + display: none; +} + +.formipay-wpcfto-submenu-item.active, +.formipay-wpcfto-submenu-item:hover { + color: white; +} + +.formipay-wpcfto-submenu-item.active i { + display: block; +} + +/* ============================================ + TAB CONTENT PANELS (WPCFTO tab content area) + ============================================ */ + +.formipay-tabs { + flex-grow: 1; + overflow: hidden; +} + +.formipay-tab { + background-color: var(--formipay-color-content-bg); + width: 100%; + padding: 20px 20px 20px 30px; + display: none; +} + +.formipay-tab.active { + display: block; + animation: fadeIn 0.4s ease; +} + +.formipay-tab-content { + max-width: 100%; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ============================================ + FIELD COMPONENT - WPCFTO 2-column layout + ============================================ */ + +.formipay-generic-field { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + padding: 1.8rem 1rem 0; + max-width: 100%; + width: 100%; + border-radius: 10px; + background-color: var(--formipay-color-block-bg); + margin: 0 0 10px; +} + +.formipay-field-aside { + width: var(--formipay-field-aside-width); + padding-left: 2rem; +} + +.formipay-field-label { + display: inline; + font-size: var(--formipay-font-size-base); + font-weight: var(--formipay-font-weight-medium); +} + +.formipay-field-label.required .formipay-field-label-text::after { + content: '*'; + color: var(--formipay-color-danger); + margin-right: 2px; +} + +.formipay-field-content { + width: var(--formipay-field-content-width); +} + +.formipay-field-description { + display: block; + margin-top: 0.8em; + font-size: var(--formipay-font-size-sm); + color: var(--formipay-color-text-muted); +} + +/* ============================================ + INPUTS + ============================================ */ + +.formipay-input, +.formipay-select, +.formipay-textarea { + width: 100%; + padding: 10px 16px; + border: 1px solid var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-lg); + background-color: var(--formipay-color-input-bg); + font-family: inherit; + font-size: var(--formipay-font-size-base); + color: var(--formipay-color-text); + transition: border-color var(--formipay-transition-fast), box-shadow var(--formipay-transition-fast); +} + +.formipay-input:focus, +.formipay-select:focus, +.formipay-textarea:focus { + outline: none; + border-color: var(--formipay-color-primary); + box-shadow: 0 0 0 3px rgba(41, 133, 247, 0.1); +} + +.formipay-input:disabled, +.formipay-select:disabled, +.formipay-textarea:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.formipay-textarea { + min-height: 100px; + resize: vertical; +} + +/* ============================================ + CHECKBOX & RADIO - WPCFTO toggle style + ============================================ */ + +.formipay-admin-checkbox { + align-self: flex-end; + margin-bottom: 0; +} + +.formipay-admin-checkbox-wrapper { + position: relative; + display: inline-block; + width: 42px; + height: 24px; + background-color: #bec5cb; + border-radius: 20px; + transition: background-color 0.3s ease; + cursor: pointer; +} + +.formipay-admin-checkbox-wrapper.active { + background-color: var(--formipay-color-primary); +} + +.formipay-checkbox-switcher { + position: absolute; + top: 3px; + right: 3px; + width: 18px; + height: 18px; + background-color: white; + border-radius: 50%; + transition: transform 0.3s ease; +} + +.formipay-admin-checkbox-wrapper.active .formipay-checkbox-switcher { + transform: translateX(-18px); +} + +.formipay-admin-checkbox input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} + +.formipay-admin-checkbox label { + cursor: pointer; +} + +/* ============================================ + BUTTONS + ============================================ */ + +.formipay-btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--formipay-spacing-sm); + padding: 10px 20px; + border: none; + border-radius: var(--formipay-radius-sm); + font-family: inherit; + font-size: var(--formipay-font-size-base); + font-weight: var(--formipay-font-weight-medium); + cursor: pointer; + transition: all var(--formipay-transition-fast); + text-decoration: none; +} + +.formipay-btn:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.formipay-btn-primary { + background-color: var(--formipay-color-primary); + color: #fff; +} + +.formipay-btn-primary:hover:not(:disabled) { + background-color: #1e6ae6; +} + +.formipay-btn-secondary { + background-color: #f0f0f1; + color: var(--formipay-color-text); +} + +.formipay-btn-secondary:hover:not(:disabled) { + background-color: #e0e0e1; +} + +.formipay-btn-danger { + background-color: var(--formipay-color-danger); + color: #fff; +} + +.formipay-btn-danger:hover:not(:disabled) { + background-color: #b32d2e; +} + +.formipay-btn-sm { + padding: 6px 12px; + font-size: var(--formipay-font-size-sm); +} + +.formipay-btn-icon { + padding: 8px; + aspect-ratio: 1; +} + +/* ============================================ + REPEATER COMPONENT + ============================================ */ + +.formipay-repeater { + display: flex; + flex-direction: column; + gap: var(--formipay-spacing-md); +} + +.formipay-repeater-item { + background-color: #fafafa; + border: 1px solid var(--formipay-color-border); + border-radius: var(--formipay-radius-sm); + overflow: hidden; +} + +.formipay-repeater-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--formipay-spacing-md) var(--formipay-spacing-lg); + background-color: #fff; + border-bottom: 1px solid var(--formipay-color-border); + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.formipay-repeater-header:hover { + background-color: #f8f9fa; +} + +.formipay-repeater-title { + display: flex; + align-items: center; + gap: var(--formipay-spacing-sm); + font-weight: var(--formipay-font-weight-medium); +} + +.formipay-repeater-toggle { + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + transition: transform var(--formipay-transition-fast); +} + +.formipay-repeater-item.collapsed .formipay-repeater-toggle { + transform: rotate(90deg); +} + +.formipay-repeater-body { + padding: var(--formipay-spacing-lg); +} + +.formipay-repeater-item.collapsed .formipay-repeater-body { + display: none; +} + +.formipay-repeater-actions { + display: flex; + gap: var(--formipay-spacing-sm); +} + +.formipay-repeater-delete { + color: var(--formipay-color-danger); + cursor: pointer; + transition: color var(--formipay-transition-fast); +} + +.formipay-repeater-delete:hover { + color: #b32d2e; +} + +.formipay-repeater-add { + display: flex; + align-items: center; + gap: var(--formipay-spacing-sm); + padding: var(--formipay-spacing-md) var(--formipay-spacing-lg); + background-color: transparent; + border: 1px dashed var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-sm); + color: var(--formipay-color-text-muted); + cursor: pointer; + transition: all var(--formipay-transition-fast); +} + +.formipay-repeater-add:hover { + border-color: var(--formipay-color-primary); + color: var(--formipay-color-primary); + background-color: rgba(41, 133, 247, 0.05); +} + +/* ============================================ + TABLE STYLES (WPCFTO-style) + ============================================ */ + +.formipay-table-wrapper { + background-color: var(--formipay-color-content-bg); + border-radius: var(--formipay-radius-md); + overflow: hidden; + box-shadow: var(--formipay-shadow-sm); +} + +.formipay-table { + width: 100%; + border-collapse: collapse; +} + +.formipay-table thead { + background-color: #f8f9fa; +} + +.formipay-table th { + padding: 12px 16px; + text-align: right; + font-size: var(--formipay-font-size-sm); + font-weight: var(--formipay-font-weight-semibold); + color: var(--formipay-color-text-muted); + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid var(--formipay-color-border); +} + +.formipay-table td { + padding: 12px 16px; + border-bottom: 1px solid var(--formipay-color-border); +} + +.formipay-table tbody tr:last-child td { + border-bottom: none; +} + +.formipay-table tbody tr:hover { + background-color: #f8f9fa; +} + +/* ============================================ + STATUS BADGES + ============================================ */ + +.formipay-badge { + display: inline-flex; + align-items: center; + padding: 4px 12px; + border-radius: var(--formipay-radius-full); + font-size: var(--formipay-font-size-sm); + font-weight: var(--formipay-font-weight-medium); +} + +.formipay-badge-success { + background-color: #edfaef; + color: var(--formipay-color-success); +} + +.formipay-badge-warning { + background-color: #fff8e5; + color: var(--formipay-color-warning); +} + +.formipay-badge-danger { + background-color: #fce8e6; + color: var(--formipay-color-danger); +} + +.formipay-badge-info { + background-color: #e7f3ff; + color: var(--formipay-color-primary); +} + +.formipay-badge-default { + background-color: #f0f0f1; + color: var(--formipay-color-text-muted); +} + +/* ============================================ + GROUP TITLE - WPCFTO section divider + ============================================ */ + +.formipay-group-title { + width: 100%; + padding: 0 0 12px; + color: var(--formipay-color-text-muted); + font-size: 14px; + font-weight: 400; + text-transform: uppercase; + border-bottom: 1px solid #d6dade; + margin: 0 0 17px; + letter-spacing: 1.4px; + display: flex; + align-items: center; + gap: 8px; +} + +.formipay-group-title i { + display: block; +} + +/* ============================================ + NOTICE / ALERT COMPONENTS + ============================================ */ + +.formipay-notice { + display: flex; + align-items: flex-start; + gap: var(--formipay-spacing-md); + padding: var(--formipay-spacing-md) var(--formipay-spacing-lg); + border-radius: var(--formipay-radius-sm); + margin: var(--formipay-spacing-md) 0; +} + +.formipay-notice-icon { + flex-shrink: 0; + width: 20px; + height: 20px; +} + +.formipay-notice-content { + flex: 1; +} + +.formipay-notice-title { + font-weight: var(--formipay-font-weight-semibold); + margin-bottom: var(--formipay-spacing-xs); +} + +.formipay-notice-success { + background-color: #edfaef; + border-right: 4px solid var(--formipay-color-success); +} + +.formipay-notice-warning { + background-color: #fff8e5; + border-right: 4px solid var(--formipay-color-warning); +} + +.formipay-notice-error { + background-color: #fce8e6; + border-right: 4px solid var(--formipay-color-danger); +} + +.formipay-notice-info { + background-color: #e7f3ff; + border-right: 4px solid var(--formipay-color-primary); +} + +/* ============================================ + LOADING & EMPTY STATES + ============================================ */ + +.formipay-loading { + display: flex; + align-items: center; + justify-content: center; + padding: 40px; +} + +.formipay-spinner { + width: 32px; + height: 32px; + border: 3px solid var(--formipay-color-border); + border-top-color: var(--formipay-color-primary); + border-radius: 50%; + animation: formipay-spin 0.8s linear infinite; +} + +@keyframes formipay-spin { + to { transform: rotate(-360deg); } +} + +.formipay-empty-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 40px; + text-align: center; +} + +.formipay-empty-icon { + font-size: 48px; + color: var(--formipay-color-border-dark); + margin-bottom: var(--formipay-spacing-md); +} + +.formipay-empty-title { + font-size: var(--formipay-font-size-lg); + font-weight: var(--formipay-font-weight-semibold); + margin-bottom: var(--formipay-spacing-sm); +} + +.formipay-empty-description { + color: var(--formipay-color-text-muted); + margin-bottom: var(--formipay-spacing-lg); +} + +/* ============================================ + UTILITIES + ============================================ */ + +.formipay-text-center { text-align: center; } +.formipay-text-right { text-align: left; } +.formipay-text-muted { color: var(--formipay-color-text-muted); } +.formipay-text-small { font-size: var(--formipay-font-size-sm); } +.formipay-text-large { font-size: var(--formipay-font-size-lg); } + +.formipay-mt-0 { margin-top: 0; } +.formipay-mt-1 { margin-top: var(--formipay-spacing-xs); } +.formipay-mt-2 { margin-top: var(--formipay-spacing-sm); } +.formipay-mt-3 { margin-top: var(--formipay-spacing-md); } +.formipay-mt-4 { margin-top: var(--formipay-spacing-lg); } + +.formipay-mb-0 { margin-bottom: 0; } +.formipay-mb-1 { margin-bottom: var(--formipay-spacing-xs); } +.formipay-mb-2 { margin-bottom: var(--formipay-spacing-sm); } +.formipay-mb-3 { margin-bottom: var(--formipay-spacing-md); } +.formipay-mb-4 { margin-bottom: var(--formipay-spacing-lg); } + +.formipay-flex { display: flex; } +.formipay-flex-center { display: flex; align-items: center; justify-content: center; } +.formipay-flex-between { display: flex; align-items: center; justify-content: space-between; } +.formipay-flex-column { display: flex; flex-direction: column; } + +.formipay-gap-1 { gap: var(--formipay-spacing-xs); } +.formipay-gap-2 { gap: var(--formipay-spacing-sm); } +.formipay-gap-3 { gap: var(--formipay-spacing-md); } +.formipay-gap-4 { gap: var(--formipay-spacing-lg); } + +/* ============================================ + METABOX LAYOUT - WPCFTO 2-column wrapper + ============================================ */ + +.formipay-wpcfto-metabox { + background-color: #fff; + border-radius: var(--formipay-radius-md); + overflow: hidden; + box-shadow: var(--formipay-shadow-sm); +} + +.formipay-wpcfto-metabox-inner { + display: flex; + min-height: 400px; +} + +.formipay-wpcfto-container { + display: flex; + width: 100%; + position: relative; +} + +/* Horizontal variant for mobile/narrow contexts */ +.formipay-wpcfto-container.horizontal { + flex-direction: column; +} + +.formipay-wpcfto-container.horizontal .formipay-wpcfto-tab-nav { + width: 100%; + flex-direction: row; + overflow-x: auto; + padding: 0; +} + +.formipay-wpcfto-container.horizontal .formipay-wpcfto-tabs { + width: 100%; +} + +/* ============================================ + RESPONSIVE + ============================================ */ + +@media (max-width: 768px) { + .formipay-tab-nav { + flex-direction: row; + overflow-x: auto; + } + + .formipay-nav-item { + flex-shrink: 0; + } + + .formipay-field { + padding: var(--formipay-spacing-md) 0; + } +} + +/** + * Coupon Metabox Styles + * WPCFTO-inspired design for React metabox island + */ + +.formipay-coupon-metabox { + margin: -12px; +} + +.formipay-metabox-actions { + padding: 20px 30px; + background-color: #fff; + border-top: 1px solid #f0f0f1; + display: flex; + justify-content: flex-end; + gap: 12px; +} + +/* Radio Group */ +.formipay-radio-group { + display: flex; + gap: 16px; +} + +.formipay-radio { + display: inline-flex; + align-items: center; + gap: 8px; + cursor: pointer; + padding: 8px 16px; + border: 2px solid var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-lg); + transition: all var(--formipay-transition-fast); +} + +.formipay-radio input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} + +.formipay-radio span { + font-weight: var(--formipay-font-weight-medium); + color: var(--formipay-color-text-muted); +} + +.formipay-radio:hover { + border-color: var(--formipay-color-primary); +} + +.formipay-radio.active { + background-color: var(--formipay-color-primary); + border-color: var(--formipay-color-primary); +} + +.formipay-radio.active span { + color: white; +} + +/* Autocomplete Field */ +.formipay-autocomplete { + position: relative; +} + +.formipay-autocomplete-selected { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 8px; +} + +.formipay-autocomplete-tag { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 4px 8px; + background-color: var(--formipay-color-primary); + color: white; + border-radius: 4px; + font-size: var(--formipay-font-size-sm); +} + +.formipay-autocomplete-remove { + background: none; + border: none; + color: white; + cursor: pointer; + font-size: 16px; + line-height: 1; + padding: 0; + width: 16px; + height: 16px; + display: flex; + align-items: center; + justify-content: center; +} + +.formipay-autocomplete-remove:hover { + opacity: 0.8; +} + +.formipay-autocomplete-input-wrapper { + position: relative; +} + +.formipay-autocomplete-loading { + position: absolute; + left: 12px; + top: 50%; + transform: translateY(-50%); + color: var(--formipay-color-text-muted); +} + +.formipay-autocomplete-results { + position: absolute; + top: 100%; + right: 0; + left: 0; + max-height: 200px; + overflow-y: auto; + background-color: white; + border: 1px solid var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-sm); + box-shadow: var(--formipay-shadow-md); + z-index: 100; + margin-top: 4px; +} + +.formipay-autocomplete-result { + padding: 10px 16px; + cursor: pointer; + transition: background-color var(--formipay-transition-fast); +} + +.formipay-autocomplete-result:hover { + background-color: var(--formipay-color-content-bg); +} + +.formipay-autocomplete-result:first-child { + border-radius: var(--formipay-radius-sm) var(--formipay-radius-sm) 0 0; +} + +.formipay-autocomplete-result:last-child { + border-radius: 0 0 var(--formipay-radius-sm) var(--formipay-radius-sm); +} + diff --git a/build/admin.asset.php b/build/admin.asset.php index 471223b12..abe7e1057 100644 --- a/build/admin.asset.php +++ b/build/admin.asset.php @@ -1 +1 @@ - array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-icons/build/arrow-left', 'wp-icons/build/bell', 'wp-icons/build/message', 'wp-icons/build/trash', 'wp-primitives'), 'version' => '1a2b3d6682654786741a'); + array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-icons/build/arrow-left', 'wp-icons/build/bell', 'wp-icons/build/message', 'wp-icons/build/trash', 'wp-primitives'), 'version' => '9a1a0e2d03b8d775e648'); diff --git a/build/admin.css b/build/admin.css index 216cbc52f..ac10e38be 100644 --- a/build/admin.css +++ b/build/admin.css @@ -1,8 +1,1902 @@ -.formipay-data-table-wrapper{margin:20px 0}.formipay-table-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px}.formipay-table-search{flex-grow:1;max-width:300px}.formipay-table-toolbar .components-select-control{min-width:150px}.formipay-table-toolbar :is(button,input,select){height:40px!important}.formipay-table-toolbar .components-base-control__field{margin-bottom:unset!important}.formipay-table-toolbar :is(button,input,select,.components-input-control__backdrop){border-radius:4px!important}.formipay-filter-tabs{border-bottom:1px solid #ddd;display:flex;gap:4px;margin-bottom:16px}.formipay-filter-tabs .filter-tab{background:transparent;border:none;border-bottom:3px solid transparent;color:#646970;cursor:pointer;font-size:13px;padding:8px 16px;transition:all .2s}.formipay-filter-tabs .filter-tab:hover{background:#f0f0f1;color:#135e96}.formipay-filter-tabs .filter-tab.active{border-bottom-color:#135e96;color:#135e96;font-weight:600}.formipay-filter-tabs .filter-tab .count{background:#dcdcde;border-radius:10px;display:inline-block;font-size:11px;line-height:1.4;margin-left:6px;min-width:18px;padding:2px 6px}.formipay-filter-tabs .filter-tab.active .count{background:#135e96;color:#fff}.formipay-table-container{background:#fff;border:1px solid #c3c4c7;box-shadow:0 1px 1px rgba(0,0,0,.04)}.formipay-table-loading{padding:60px;text-align:center}.formipay-table-empty{color:#646970;padding:40px;text-align:center}.formipay-table{border-collapse:collapse;width:100%}.formipay-table thead th{background:#f6f7f7;border-bottom:1px solid #c3c4c7;font-weight:600;padding:12px 10px;text-align:left}.formipay-table tbody td{border-bottom:1px solid #c3c4c7;padding:10px}.formipay-table tbody tr:last-child td{border-bottom:none}.formipay-table tbody tr:hover{background-color:#f0f0f1}.formipay-table :is(td,th):first-child{text-align:center}.formipay-table th.column-select>input{margin-left:0}.formipay-table .column-select{text-align:center;width:40px}.formipay-table tbody td:first-child input[type=checkbox]{margin:0}.formipay-table .column-actions{width:200px}.formipay-table .row-actions{display:none;visibility:hidden}.formipay-table tbody tr:hover .row-actions{display:block;visibility:visible}.formipay-table .row-actions .button-link,.formipay-table .row-actions a{color:#a7aaad;cursor:pointer;text-decoration:none}.formipay-table .row-actions .button-link:hover,.formipay-table .row-actions a:hover{color:#135e96}.formipay-table .row-actions .delete{color:#b32d2e}.formipay-table .row-actions .delete:hover{color:#d63638}.formipay-table .status-label{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.formipay-table .status-label.publish{background:#edfaef;color:#007017}.formipay-table .status-label.draft{background:#f0f0f1;color:#646970}.formipay-table .status-label.pending{background:#fff8e5;color:#d63638}.formipay-table input.formipay-form-shortcode{background:#f6f7f7;border:1px solid #8c8f94;border-radius:4px;color:#646970;font-family:monospace;font-size:12px;min-width:150px;padding:4px 8px}.formipay-table button.copy-shortcode{align-items:center;background:#fff;border:1px solid #8c8f94;border-radius:4px;cursor:pointer;display:inline-flex;gap:4px;margin-left:4px;padding:4px 8px}.formipay-table button.copy-shortcode:hover{background:#f6f7f7}.formipay-table button.copy-shortcode svg{height:16px;width:16px}.formipay-table-pagination{align-items:center;background:#fff;border:1px solid #c3c4c7;border-top:none;display:flex;justify-content:space-between;padding:12px 16px}.formipay-table-pagination .pagination-info{color:#646970;font-size:13px}.formipay-table-pagination .pagination-controls{align-items:center;display:flex;gap:8px}.formipay-table-pagination .page-info{color:#646970;font-size:13px;padding:0 8px}.formipay-table-pagination .components-select-control{min-width:80px}.formipay-modal-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:20px}.formipay-table thead th.sorted{padding-right:20px;position:relative}.formipay-table thead th .sort-indicator{color:#135e96;position:absolute;right:8px;top:50%;transform:translateY(-50%)} -.formipay-order-timeline h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.timeline-progress{justify-content:space-between;margin-bottom:24px}.timeline-progress,.timeline-step{align-items:center;display:flex;position:relative}.timeline-step{flex:1;flex-direction:column;gap:8px;z-index:1}.timeline-dot{background:#e0e0e0;border:2px solid #c3c4c7;border-radius:50%;height:24px;position:relative;width:24px}.timeline-step.completed .timeline-dot{background:#2271b1;border-color:#2271b1}.timeline-step.completed .timeline-dot:after{background:#fff;border-radius:50%;content:"";height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}.timeline-line{background:#e0e0e0;height:2px;left:50%;position:absolute;top:12px;width:100%;z-index:-1}.timeline-step.completed .timeline-line{background:#2271b1}.timeline-label{color:#646970;font-size:10px;font-weight:600;text-align:center;text-transform:uppercase}.timeline-events ul{list-style:none;margin:0;padding:0}.timeline-events li{border-bottom:1px solid #f0f0f1;display:grid;gap:8px;grid-template-columns:1fr auto;padding:12px 0}.timeline-events li:last-child{border-bottom:none}.event-status{color:#1e1e1e;font-size:13px;font-weight:600}.event-date{color:#646970;font-size:11px;text-align:right}.event-note{color:#646970;font-size:12px;grid-column:1/-1;margin-top:4px}.no-events{color:#646970;font-size:13px;padding:20px 0;text-align:center} -.formipay-notification-log h3{align-items:center;color:#1e1e1e;display:flex;font-size:16px;font-weight:600;gap:8px;margin:0 0 16px}.formipay-notification-log svg{fill:#1e1e1e}.no-logs{color:#646970;font-size:13px;padding:20px 0;text-align:center}.notification-list{list-style:none;margin:0;padding:0}.notification-item{background:#f6f7f7;border:1px solid #e0e0e0;border-radius:4px;display:flex;gap:12px;margin-bottom:8px;padding:12px}.notification-icon{align-items:center;background:#fff;border-radius:50%;display:flex;flex-shrink:0;height:36px;justify-content:center;width:36px}.notification-icon svg{fill:#1e1e1e}.notification-content{flex:1;min-width:0}.notification-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.notification-type{color:#2271b1;font-size:10px;font-weight:700;text-transform:uppercase}.notification-status{border-radius:10px;font-size:10px;font-weight:600;padding:2px 6px}.notification-item.sent .notification-status{background:#e7f7ed;color:#28a745}.notification-item.failed .notification-status{background:#fbeaea;color:#dc3545}.notification-item.pending .notification-status{background:#fff8e5;color:#f0ad4e}.notification-details{display:flex;flex-direction:column;gap:2px}.notification-details strong{color:#1e1e1e;font-size:13px}.notification-date,.notification-recipient{color:#646970;font-size:11px}.notification-date{margin-top:4px} -.formipay-order-detail{background:#f6f7f7;display:flex;flex-direction:column;height:100%}.formipay-detail-header{align-items:center;background:#fff;border-bottom:1px solid #e0e0e0;display:flex;gap:16px;justify-content:space-between;padding:16px 20px}.formipay-detail-header h1{flex:1;font-size:20px;font-weight:600;margin:0}.header-actions{display:flex;gap:8px}.formipay-detail-content{display:grid;gap:20px;grid-template-columns:2fr 1fr;overflow-y:auto;padding:20px}.formipay-detail-main,.formipay-detail-sidebar{display:flex;flex-direction:column;gap:20px}.formipay-detail-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:20px}.formipay-detail-card h3{color:#1e1e1e;font-size:16px;font-weight:600;margin:0 0 16px}.detail-list{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}.detail-list>div{display:flex;flex-direction:column}.detail-list dt{color:#646970;font-size:12px;font-weight:600;margin-bottom:4px}.detail-list dd{align-items:center;color:#1e1e1e;display:flex;font-size:14px;gap:8px}.detail-list dd .components-select-control{flex:1}.items-table{border-collapse:collapse;width:100%}.items-table td,.items-table th{border-bottom:1px solid #f0f0f1;padding:10px;text-align:left}.items-table th{color:#646970;font-size:12px;font-weight:600;text-transform:uppercase}.items-table td{font-size:13px}.items-table small{color:#646970;display:block;font-size:11px}.items-table tfoot td{border-bottom:none;border-top:2px solid #1e1e1e;padding-top:16px}.customer-info{display:grid;gap:12px;grid-template-columns:1fr}.customer-info>div{display:flex;flex-direction:column}.customer-info dt{color:#646970;font-size:11px;font-weight:600;margin-bottom:2px}.customer-info dd{color:#1e1e1e;font-size:13px}.no-data{color:#646970;font-size:13px}.formipay-error,.formipay-loading{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;padding:60px 20px}.formipay-error p{color:#646970;margin:0} -.formipay-page-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:20px}.formipay-page-header h1{font-size:23px;font-weight:400;margin:0}.formipay-navigation-menu{align-items:center;background-color:#fff;box-shadow:0 4px 12px #d2d2d2;display:flex;gap:2em;left:0;margin-left:-20px;margin-top:-10px;padding:12px 20px 12px 50px;position:sticky;top:32px;width:calc(100% + 20px);z-index:1000}.formipay-navigation-menu>img{flex-shrink:0;height:48px;width:48px}.navigation-links{display:flex;flex-wrap:wrap;gap:4px}.navigation-links .nav-link{border-radius:4px;color:#646970;font-size:14px;font-weight:500;padding:8px 16px;text-decoration:none;transition:all .2s}.navigation-links .nav-link:hover{background-color:#f6f7f7;color:#2271b1}.navigation-links .nav-link.active{background-color:#2271b1;color:#fff}.status-badge{border-radius:4px;display:inline-block;font-size:12px;font-weight:500;padding:4px 8px}.status-badge.status-active,.status-badge.status-publish{background-color:#edfaef;color:#00a32a}.status-badge.status-draft,.status-badge.status-inactive{background-color:#f0f0f1;color:#646970}.status-badge.status-expired{background-color:#f6f7f7;color:#d63638}code{background-color:#f0f0f1;border-radius:3px;font-family:monospace;font-size:13px;padding:2px 6px}.formipay-modal-overlay{align-items:center;background-color:rgba(0,0,0,.5);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:100000}.formipay-modal-content{background-color:#fff;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,.15);max-height:90vh;max-width:900px;overflow-y:auto;width:90%} -.formipay-variation-table{border-collapse:collapse;margin-top:20px;width:100%}.formipay-variation-table thead th{border-bottom:2px solid #1e1e1e;color:#1e1e1e;font-size:13px;font-weight:600;padding:12px;text-align:left}.formipay-variation-table tbody td{border-bottom:1px solid #f0f0f1;padding:12px}.variation-row{background:#fff}.variation-name{gap:8px}.toggle-expand,.variation-name{align-items:center;display:flex}.toggle-expand{background:transparent;border:none;border-radius:2px;cursor:pointer;height:24px;justify-content:center;padding:0;width:24px}.toggle-expand:hover{background:#f0f0f1}.toggle-expand svg{fill:#646970}.variation-name strong{color:#1e1e1e;font-size:13px}.price-cell,.variation-stock,.variation-weight{min-width:120px}.price-cell input,.variation-stock input,.variation-weight input{border:1px solid #8c8f94;border-radius:2px;font-size:13px;padding:6px 8px;width:100%}.variation-stock .components-base-control,.variation-weight .components-base-control{margin:0}.variation-actions{min-width:100px}.variation-details-row{background:#f9f9f9}.variation-details-row td{padding:0}.inner-table{border-collapse:collapse;margin:0;width:100%}.inner-table thead{display:none}.inner-table td{border-bottom:1px solid #f0f0f1;padding:8px 12px}.inner-table tr:last-child td{border-bottom:none}.inner-table input[type=number]{border:1px solid #8c8f94;border-radius:2px;font-size:12px;padding:6px 8px;width:100%}.currency-name{color:#1e1e1e;font-size:12px;font-weight:600}.required{color:#dc3545;margin-left:4px} -:root{--formipay-color-primary:#2985f7;--formipay-color-sidebar-bg:#2c3e50;--formipay-color-sidebar-text:#bec5cb;--formipay-color-sidebar-active:#2985f7;--formipay-color-content-bg:#f0f3f5;--formipay-color-block-bg:#fff;--formipay-color-border:#f0f0f1;--formipay-color-border-dark:#8c99a5;--formipay-color-input-bg:#f6f9fc;--formipay-color-text:#27374e;--formipay-color-text-muted:#8c99a5;--formipay-color-danger:#d63638;--formipay-color-success:#00a32a;--formipay-color-warning:#dba617;--formipay-spacing-xs:4px;--formipay-spacing-sm:8px;--formipay-spacing-md:12px;--formipay-spacing-lg:16px;--formipay-spacing-xl:20px;--formipay-spacing-xxl:24px;--formipay-radius-sm:4px;--formipay-radius-md:10px;--formipay-radius-lg:30px;--formipay-radius-full:50%;--formipay-font-family:"Roboto",-apple-system,BlinkMacSystemFont,sans-serif;--formipay-font-size-sm:13px;--formipay-font-size-base:14px;--formipay-font-size-md:15px;--formipay-font-size-lg:18px;--formipay-font-weight-normal:400;--formipay-font-weight-medium:500;--formipay-font-weight-semibold:600;--formipay-font-weight-bold:700;--formipay-sidebar-width:273px;--formipay-field-aside-width:40%;--formipay-field-content-width:60%;--formipay-shadow-sm:0 1px 3px rgba(0,0,0,.05);--formipay-shadow-md:-2px 2px 5px rgba(0,0,0,.08);--formipay-shadow-lg:0 4px 12px rgba(0,0,0,.1);--formipay-transition-fast:0.15s ease;--formipay-transition-base:0.3s ease}.formipay-design-system *{box-sizing:border-box}.formipay-design-system{color:var(--formipay-color-text);font-family:var(--formipay-font-family);line-height:1.5}.formipay-box{background-color:var(--formipay-color-content-bg);border-radius:var(--formipay-radius-md);box-shadow:var(--formipay-shadow-sm);margin:0 0 10px;min-height:80px}.formipay-box,.formipay-box-child{position:relative}.formipay-box-child+.formipay-box-child{margin-top:1em}.formipay-box a{color:var(--formipay-color-primary);text-decoration:none;transition:color var(--formipay-transition-base)}.formipay-box a:hover{text-decoration:underline}.formipay-wpcfto-tab-nav{background-color:var(--formipay-color-sidebar-bg);flex-grow:1;padding:21px 0;width:var(--formipay-sidebar-width)}.formipay-wpcfto-tab-nav.hide{display:none}.formipay-wpcfto-tab-nav-inner{position:sticky;top:133px;z-index:99}.formipay-wpcfto-nav{background-color:transparent;color:var(--formipay-color-sidebar-text);cursor:pointer;font-size:var(--formipay-font-size-base);font-weight:400;padding:0;position:relative;text-transform:uppercase;transition:all .3s ease 0s}.formipay-wpcfto-nav-title{padding:13px 32px 13px 34px;position:relative}.formipay-wpcfto-nav i{display:block;font-size:22px;left:auto;margin-top:-11px;position:absolute;right:30px;text-align:center;top:50%;width:26px}.formipay-wpcfto-nav.active{background-color:var(--formipay-color-primary);color:#fff}.formipay-wpcfto-nav:hover{color:#fff}.formipay-wpcfto-submenus{background-color:#1e2a36;padding:18px 32px 18px 34px}.formipay-wpcfto-submenu-item{color:var(--formipay-color-text-muted);font-size:15px;font-weight:400;margin-bottom:15px;position:relative;text-transform:none}.formipay-wpcfto-submenu-item i{display:none;font-size:10px;margin-top:-5px;right:0}.formipay-wpcfto-submenu-item.active,.formipay-wpcfto-submenu-item:hover{color:#fff}.formipay-wpcfto-submenu-item.active i{display:block}.formipay-tabs{flex-grow:1;overflow:hidden}.formipay-tab{background-color:var(--formipay-color-content-bg);display:none;padding:20px 30px 20px 20px;width:100%}.formipay-tab.active{animation:fadeIn .4s ease;display:block}.formipay-tab-content{max-width:100%}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.formipay-generic-field{background-color:var(--formipay-color-block-bg);border-radius:10px;display:flex;flex-wrap:wrap;justify-content:space-between;margin:0 0 10px;max-width:100%;padding:1.8rem 1rem 0;width:100%}.formipay-field-aside{padding-right:2rem;width:var(--formipay-field-aside-width)}.formipay-field-label{display:inline;font-size:var(--formipay-font-size-base);font-weight:var(--formipay-font-weight-medium)}.formipay-field-label.required .formipay-field-label-text:after{color:var(--formipay-color-danger);content:"*";margin-left:2px}.formipay-field-content{width:var(--formipay-field-content-width)}.formipay-field-description{color:var(--formipay-color-text-muted);display:block;font-size:var(--formipay-font-size-sm);margin-top:.8em}.formipay-input,.formipay-select,.formipay-textarea{background-color:var(--formipay-color-input-bg);border:1px solid var(--formipay-color-border-dark);border-radius:var(--formipay-radius-lg);color:var(--formipay-color-text);font-family:inherit;font-size:var(--formipay-font-size-base);padding:10px 16px;transition:border-color var(--formipay-transition-fast),box-shadow var(--formipay-transition-fast);width:100%}.formipay-input:focus,.formipay-select:focus,.formipay-textarea:focus{border-color:var(--formipay-color-primary);box-shadow:0 0 0 3px rgba(41,133,247,.1);outline:none}.formipay-input:disabled,.formipay-select:disabled,.formipay-textarea:disabled{cursor:not-allowed;opacity:.6}.formipay-textarea{min-height:100px;resize:vertical}.formipay-admin-checkbox{align-self:flex-end;margin-bottom:0}.formipay-admin-checkbox-wrapper{background-color:#bec5cb;border-radius:20px;cursor:pointer;display:inline-block;height:24px;position:relative;transition:background-color .3s ease;width:42px}.formipay-admin-checkbox-wrapper.active{background-color:var(--formipay-color-primary)}.formipay-checkbox-switcher{background-color:#fff;border-radius:50%;height:18px;left:3px;position:absolute;top:3px;transition:transform .3s ease;width:18px}.formipay-admin-checkbox-wrapper.active .formipay-checkbox-switcher{transform:translateX(18px)}.formipay-admin-checkbox input{height:0;opacity:0;position:absolute;width:0}.formipay-admin-checkbox label,.formipay-btn{cursor:pointer}.formipay-btn{align-items:center;border:none;border-radius:var(--formipay-radius-sm);display:inline-flex;font-family:inherit;font-size:var(--formipay-font-size-base);font-weight:var(--formipay-font-weight-medium);gap:var(--formipay-spacing-sm);justify-content:center;padding:10px 20px;text-decoration:none;transition:all var(--formipay-transition-fast)}.formipay-btn:disabled{cursor:not-allowed;opacity:.6}.formipay-btn-primary{background-color:var(--formipay-color-primary);color:#fff}.formipay-btn-primary:hover:not(:disabled){background-color:#1e6ae6}.formipay-btn-secondary{background-color:#f0f0f1;color:var(--formipay-color-text)}.formipay-btn-secondary:hover:not(:disabled){background-color:#e0e0e1}.formipay-btn-danger{background-color:var(--formipay-color-danger);color:#fff}.formipay-btn-danger:hover:not(:disabled){background-color:#b32d2e}.formipay-btn-sm{font-size:var(--formipay-font-size-sm);padding:6px 12px}.formipay-btn-icon{aspect-ratio:1;padding:8px}.formipay-repeater{display:flex;flex-direction:column;gap:var(--formipay-spacing-md)}.formipay-repeater-item{background-color:#fafafa;border:1px solid var(--formipay-color-border);border-radius:var(--formipay-radius-sm);overflow:hidden}.formipay-repeater-header{align-items:center;background-color:#fff;border-bottom:1px solid var(--formipay-color-border);cursor:pointer;display:flex;justify-content:space-between;padding:var(--formipay-spacing-md) var(--formipay-spacing-lg);-webkit-user-select:none;-moz-user-select:none;user-select:none}.formipay-repeater-header:hover{background-color:#f8f9fa}.formipay-repeater-title{align-items:center;display:flex;font-weight:var(--formipay-font-weight-medium);gap:var(--formipay-spacing-sm)}.formipay-repeater-toggle{align-items:center;display:flex;height:20px;justify-content:center;transition:transform var(--formipay-transition-fast);width:20px}.formipay-repeater-item.collapsed .formipay-repeater-toggle{transform:rotate(-90deg)}.formipay-repeater-body{padding:var(--formipay-spacing-lg)}.formipay-repeater-item.collapsed .formipay-repeater-body{display:none}.formipay-repeater-actions{display:flex;gap:var(--formipay-spacing-sm)}.formipay-repeater-delete{color:var(--formipay-color-danger);cursor:pointer;transition:color var(--formipay-transition-fast)}.formipay-repeater-delete:hover{color:#b32d2e}.formipay-repeater-add{align-items:center;background-color:transparent;border:1px dashed var(--formipay-color-border-dark);border-radius:var(--formipay-radius-sm);color:var(--formipay-color-text-muted);cursor:pointer;display:flex;gap:var(--formipay-spacing-sm);padding:var(--formipay-spacing-md) var(--formipay-spacing-lg);transition:all var(--formipay-transition-fast)}.formipay-repeater-add:hover{background-color:rgba(41,133,247,.05);border-color:var(--formipay-color-primary);color:var(--formipay-color-primary)}.formipay-table-wrapper{background-color:var(--formipay-color-content-bg);border-radius:var(--formipay-radius-md);box-shadow:var(--formipay-shadow-sm);overflow:hidden}.formipay-table{border-collapse:collapse;width:100%}.formipay-table thead{background-color:#f8f9fa}.formipay-table th{color:var(--formipay-color-text-muted);font-size:var(--formipay-font-size-sm);font-weight:var(--formipay-font-weight-semibold);letter-spacing:.5px;text-align:left;text-transform:uppercase}.formipay-table td,.formipay-table th{border-bottom:1px solid var(--formipay-color-border);padding:12px 16px}.formipay-table tbody tr:last-child td{border-bottom:none}.formipay-table tbody tr:hover{background-color:#f8f9fa}.formipay-badge{align-items:center;border-radius:var(--formipay-radius-full);display:inline-flex;font-size:var(--formipay-font-size-sm);font-weight:var(--formipay-font-weight-medium);padding:4px 12px}.formipay-badge-success{background-color:#edfaef;color:var(--formipay-color-success)}.formipay-badge-warning{background-color:#fff8e5;color:var(--formipay-color-warning)}.formipay-badge-danger{background-color:#fce8e6;color:var(--formipay-color-danger)}.formipay-badge-info{background-color:#e7f3ff;color:var(--formipay-color-primary)}.formipay-badge-default{background-color:#f0f0f1;color:var(--formipay-color-text-muted)}.formipay-group-title{align-items:center;border-bottom:1px solid #d6dade;color:var(--formipay-color-text-muted);display:flex;font-size:14px;font-weight:400;gap:8px;letter-spacing:1.4px;margin:0 0 17px;padding:0 0 12px;text-transform:uppercase;width:100%}.formipay-group-title i{display:block}.formipay-notice{align-items:flex-start;border-radius:var(--formipay-radius-sm);display:flex;gap:var(--formipay-spacing-md);margin:var(--formipay-spacing-md) 0;padding:var(--formipay-spacing-md) var(--formipay-spacing-lg)}.formipay-notice-icon{flex-shrink:0;height:20px;width:20px}.formipay-notice-content{flex:1}.formipay-notice-title{font-weight:var(--formipay-font-weight-semibold);margin-bottom:var(--formipay-spacing-xs)}.formipay-notice-success{background-color:#edfaef;border-left:4px solid var(--formipay-color-success)}.formipay-notice-warning{background-color:#fff8e5;border-left:4px solid var(--formipay-color-warning)}.formipay-notice-error{background-color:#fce8e6;border-left:4px solid var(--formipay-color-danger)}.formipay-notice-info{background-color:#e7f3ff;border-left:4px solid var(--formipay-color-primary)}.formipay-loading{align-items:center;display:flex;justify-content:center;padding:40px}.formipay-spinner{animation:formipay-spin .8s linear infinite;border:3px solid var(--formipay-color-border);border-radius:50%;border-top-color:var(--formipay-color-primary);height:32px;width:32px}@keyframes formipay-spin{to{transform:rotate(1turn)}}.formipay-empty-state{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:60px 40px;text-align:center}.formipay-empty-icon{color:var(--formipay-color-border-dark);font-size:48px;margin-bottom:var(--formipay-spacing-md)}.formipay-empty-title{font-size:var(--formipay-font-size-lg);font-weight:var(--formipay-font-weight-semibold);margin-bottom:var(--formipay-spacing-sm)}.formipay-empty-description{color:var(--formipay-color-text-muted);margin-bottom:var(--formipay-spacing-lg)}.formipay-text-center{text-align:center}.formipay-text-right{text-align:right}.formipay-text-muted{color:var(--formipay-color-text-muted)}.formipay-text-small{font-size:var(--formipay-font-size-sm)}.formipay-text-large{font-size:var(--formipay-font-size-lg)}.formipay-mt-0{margin-top:0}.formipay-mt-1{margin-top:var(--formipay-spacing-xs)}.formipay-mt-2{margin-top:var(--formipay-spacing-sm)}.formipay-mt-3{margin-top:var(--formipay-spacing-md)}.formipay-mt-4{margin-top:var(--formipay-spacing-lg)}.formipay-mb-0{margin-bottom:0}.formipay-mb-1{margin-bottom:var(--formipay-spacing-xs)}.formipay-mb-2{margin-bottom:var(--formipay-spacing-sm)}.formipay-mb-3{margin-bottom:var(--formipay-spacing-md)}.formipay-mb-4{margin-bottom:var(--formipay-spacing-lg)}.formipay-flex{display:flex}.formipay-flex-center{align-items:center;display:flex;justify-content:center}.formipay-flex-between{align-items:center;display:flex;justify-content:space-between}.formipay-flex-column{display:flex;flex-direction:column}.formipay-gap-1{gap:var(--formipay-spacing-xs)}.formipay-gap-2{gap:var(--formipay-spacing-sm)}.formipay-gap-3{gap:var(--formipay-spacing-md)}.formipay-gap-4{gap:var(--formipay-spacing-lg)}.formipay-wpcfto-metabox{background-color:#fff;border-radius:var(--formipay-radius-md);box-shadow:var(--formipay-shadow-sm);overflow:hidden}.formipay-wpcfto-metabox-inner{display:flex;min-height:400px}.formipay-wpcfto-container{display:flex;position:relative;width:100%}.formipay-wpcfto-container.horizontal{flex-direction:column}.formipay-wpcfto-container.horizontal .formipay-wpcfto-tab-nav{flex-direction:row;overflow-x:auto;padding:0;width:100%}.formipay-wpcfto-container.horizontal .formipay-wpcfto-tabs{width:100%}@media (max-width:768px){.formipay-tab-nav{flex-direction:row;overflow-x:auto}.formipay-nav-item{flex-shrink:0}.formipay-field{padding:var(--formipay-spacing-md) 0}} -.formipay-coupon-metabox{margin:-12px}.formipay-metabox-actions{background-color:#fff;border-top:1px solid #f0f0f1;display:flex;gap:12px;justify-content:flex-end;padding:20px 30px}.formipay-radio-group{display:flex;gap:16px}.formipay-radio{align-items:center;border:2px solid var(--formipay-color-border-dark);border-radius:var(--formipay-radius-lg);cursor:pointer;display:inline-flex;gap:8px;padding:8px 16px;transition:all var(--formipay-transition-fast)}.formipay-radio input{height:0;opacity:0;position:absolute;width:0}.formipay-radio span{color:var(--formipay-color-text-muted);font-weight:var(--formipay-font-weight-medium)}.formipay-radio.active,.formipay-radio:hover{border-color:var(--formipay-color-primary)}.formipay-radio.active{background-color:var(--formipay-color-primary)}.formipay-radio.active span{color:#fff}.formipay-autocomplete{position:relative}.formipay-autocomplete-selected{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.formipay-autocomplete-tag{align-items:center;background-color:var(--formipay-color-primary);border-radius:4px;color:#fff;display:inline-flex;font-size:var(--formipay-font-size-sm);gap:4px;padding:4px 8px}.formipay-autocomplete-remove{align-items:center;background:none;border:none;color:#fff;cursor:pointer;display:flex;font-size:16px;height:16px;justify-content:center;line-height:1;padding:0;width:16px}.formipay-autocomplete-remove:hover{opacity:.8}.formipay-autocomplete-input-wrapper{position:relative}.formipay-autocomplete-loading{color:var(--formipay-color-text-muted);position:absolute;right:12px;top:50%;transform:translateY(-50%)}.formipay-autocomplete-results{background-color:#fff;border:1px solid var(--formipay-color-border-dark);border-radius:var(--formipay-radius-sm);box-shadow:var(--formipay-shadow-md);left:0;margin-top:4px;max-height:200px;overflow-y:auto;position:absolute;right:0;top:100%;z-index:100}.formipay-autocomplete-result{cursor:pointer;padding:10px 16px;transition:background-color var(--formipay-transition-fast)}.formipay-autocomplete-result:hover{background-color:var(--formipay-color-content-bg)}.formipay-autocomplete-result:first-child{border-radius:var(--formipay-radius-sm) var(--formipay-radius-sm) 0 0}.formipay-autocomplete-result:last-child{border-radius:0 0 var(--formipay-radius-sm) var(--formipay-radius-sm)} +/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */ +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-space-x-reverse:0;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-100:oklch(96.2% .044 156.743);--color-green-800:oklch(44.8% .119 151.328);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-800:oklch(42.4% .199 265.638);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::-moz-placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}.formipay-design-system *{border-color:var(--border)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.\!start{inset-inline-start:var(--spacing)!important}.-start{inset-inline-start:calc(var(--spacing) * -1)}.start{inset-inline-start:var(--spacing)}.-end{inset-inline-end:calc(var(--spacing) * -1)}.end{inset-inline-end:var(--spacing)}.top-40{top:calc(var(--spacing) * 40)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing) * 2)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-50{z-index:50}.col-3{grid-column:3}.col-4{grid-column:4}.col-6{grid-column:6}.col-8{grid-column:8}.col-10{grid-column:10}.row-1{grid-row:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-0{margin-inline:calc(var(--spacing) * 0)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.me-1{margin-inline-end:calc(var(--spacing) * 1)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-100{height:calc(var(--spacing) * 100)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-96{max-height:calc(var(--spacing) * 96)}.min-h-\[60px\]{min-height:60px}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-9{width:calc(var(--spacing) * 9)}.w-72{width:calc(var(--spacing) * 72)}.w-100{width:calc(var(--spacing) * 100)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-lg{max-width:var(--container-lg)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-\[30px\]{border-radius:30px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-sm{border-radius:calc(var(--radius) * .6)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-destructive\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\/50{border-color:color-mix(in oklab, var(--destructive) 50%, transparent)}}.border-input{border-color:var(--input)}.border-primary{border-color:var(--primary)}.border-secondary{border-color:var(--secondary)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--background)}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab, red, red)){.bg-black\/80{background-color:color-mix(in oklab, var(--color-black) 80%, transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-border{background-color:var(--border)}.bg-destructive{background-color:var(--destructive)}.bg-green-100{background-color:var(--color-green-100)}.bg-muted,.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-nowrap{text-wrap:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-blue-800{color:var(--color-blue-800)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-foreground{color:var(--foreground)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary{color:var(--secondary)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.block-1{block-size:calc(var(--spacing) * 1)}.block-3{block-size:calc(var(--spacing) * 3)}.block-4{block-size:calc(var(--spacing) * 4)}.block-6{block-size:calc(var(--spacing) * 6)}.block-8{block-size:calc(var(--spacing) * 8)}.block-9{block-size:calc(var(--spacing) * 9)}.block-10{block-size:calc(var(--spacing) * 10)}.block-11{block-size:calc(var(--spacing) * 11)}.block-12{block-size:calc(var(--spacing) * 12)}.paused{animation-play-state:paused}.running{animation-play-state:running}.zoom-in{--tw-enter-scale:0}.zoom-out{--tw-exit-scale:0}.group-\[\.toast\]\:bg-muted:is(:where(.group).toast *){background-color:var(--muted)}.group-\[\.toast\]\:bg-primary:is(:where(.group).toast *){background-color:var(--primary)}.group-\[\.toast\]\:text-muted-foreground:is(:where(.group).toast *){color:var(--muted-foreground)}.group-\[\.toast\]\:text-primary-foreground:is(:where(.group).toast *){color:var(--primary-foreground)}.group-\[\.toaster\]\:border-border:is(:where(.group).toaster *){border-color:var(--border)}.group-\[\.toaster\]\:bg-background:is(:where(.group).toaster *){background-color:var(--background)}.group-\[\.toaster\]\:text-foreground:is(:where(.group).toaster *){color:var(--foreground)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::-moz-placeholder{color:var(--muted-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab, var(--destructive) 80%, transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.hover\:bg-primary\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--ring)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:var(--background)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:calc(1 / 2*-100%)}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:calc(48%*-1)}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:calc(1 / 2*-100%)}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:calc(48%*-1)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}.dark\:border-destructive:is(.dark *){border-color:var(--destructive)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing) * 0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing) * 4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing) * 4)}.\[\&\>svg\]\:text-destructive>svg{color:var(--destructive)}.\[\&\>svg\]\:text-foreground>svg{color:var(--foreground)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing) * 7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(54.6% .245 262.881);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(54.6% .245 262.881);--sidebar:#2c3e50;--sidebar-foreground:#bec5cb;--sidebar-active:#2985f7}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}} + +/* DataTable Wrapper */ +.formipay-data-table-wrapper { + margin: 20px 0; +} + +/* Toolbar */ +.formipay-table-toolbar { + display: flex; + gap: 12px; + align-items: center; + flex-wrap: wrap; + margin-bottom: 16px; +} + +.formipay-table-search { + max-width: 300px; + flex-grow: 1; +} + +.formipay-table-toolbar .components-select-control { + min-width: 150px; +} + +.formipay-table-toolbar *:is(button,input,select) { + height: 40px!important; +} + +.formipay-table-toolbar .components-base-control__field { + margin-bottom: unset!important; +} + +.formipay-table-toolbar *:is(button, input, select, .components-input-control__backdrop){ + border-radius: 4px!important; +} + +/* Filter Tabs */ +.formipay-filter-tabs { + display: flex; + gap: 4px; + margin-bottom: 16px; + border-bottom: 1px solid #ddd; +} + +.formipay-filter-tabs .filter-tab { + padding: 8px 16px; + background: transparent; + border: none; + border-bottom: 3px solid transparent; + cursor: pointer; + font-size: 13px; + color: #646970; + transition: all 0.2s; +} + +.formipay-filter-tabs .filter-tab:hover { + color: #135e96; + background: #f0f0f1; +} + +.formipay-filter-tabs .filter-tab.active { + color: #135e96; + border-bottom-color: #135e96; + font-weight: 600; +} + +.formipay-filter-tabs .filter-tab .count { + display: inline-block; + min-width: 18px; + padding: 2px 6px; + margin-left: 6px; + background: #dcdcde; + border-radius: 10px; + font-size: 11px; + line-height: 1.4; +} + +.formipay-filter-tabs .filter-tab.active .count { + background: #135e96; + color: #fff; +} + +/* Table Container */ +.formipay-table-container { + background: #fff; + border: 1px solid #c3c4c7; + box-shadow: 0 1px 1px rgba(0,0,0,.04); +} + +.formipay-table-loading { + padding: 60px; + text-align: center; +} + +.formipay-table-empty { + padding: 40px; + text-align: center; + color: #646970; +} + +/* Table */ +.formipay-table { + width: 100%; + border-collapse: collapse; +} + +.formipay-table thead th { + padding: 12px 10px; + font-weight: 600; + text-align: left; + border-bottom: 1px solid #c3c4c7; + background: #f6f7f7; +} + +.formipay-table tbody td { + padding: 10px; + border-bottom: 1px solid #c3c4c7; +} + +.formipay-table tbody tr:last-child td { + border-bottom: none; +} + +.formipay-table tbody tr:hover { + background-color: #f0f0f1; +} + +.formipay-table *:is(td, th):first-child { + text-align: center; +} + +.formipay-table th.column-select > input { + margin-left: 0; +} + +/* Checkbox Column */ +.formipay-table .column-select { + width: 40px; + text-align: center; +} + +.formipay-table tbody td:first-child input[type="checkbox"] { + margin: 0; +} + +/* Actions Column */ +.formipay-table .column-actions { + width: 200px; +} + +.formipay-table .row-actions { + display: none; + visibility: hidden; +} + +.formipay-table tbody tr:hover .row-actions { + display: block; + visibility: visible; +} + +.formipay-table .row-actions a, +.formipay-table .row-actions .button-link { + text-decoration: none; + color: #a7aaad; + cursor: pointer; +} + +.formipay-table .row-actions a:hover, +.formipay-table .row-actions .button-link:hover { + color: #135e96; +} + +.formipay-table .row-actions .delete { + color: #b32d2e; +} + +.formipay-table .row-actions .delete:hover { + color: #d63638; +} + +/* Status Labels */ +.formipay-table .status-label { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + font-weight: 500; +} + +.formipay-table .status-label.publish { + background: #edfaef; + color: #007017; +} + +.formipay-table .status-label.draft { + background: #f0f0f1; + color: #646970; +} + +.formipay-table .status-label.pending { + background: #fff8e5; + color: #d63638; +} + +/* Shortcode Input */ +.formipay-table input.formipay-form-shortcode { + padding: 4px 8px; + border: 1px solid #8c8f94; + border-radius: 4px; + background: #f6f7f7; + color: #646970; + font-family: monospace; + font-size: 12px; + min-width: 150px; +} + +.formipay-table button.copy-shortcode { + padding: 4px 8px; + margin-left: 4px; + border: 1px solid #8c8f94; + border-radius: 4px; + background: #fff; + cursor: pointer; + display: inline-flex; + align-items: center; + gap: 4px; +} + +.formipay-table button.copy-shortcode:hover { + background: #f6f7f7; +} + +.formipay-table button.copy-shortcode svg { + width: 16px; + height: 16px; +} + +/* Pagination */ +.formipay-table-pagination { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 16px; + background: #fff; + border: 1px solid #c3c4c7; + border-top: none; +} + +.formipay-table-pagination .pagination-info { + color: #646970; + font-size: 13px; +} + +.formipay-table-pagination .pagination-controls { + display: flex; + gap: 8px; + align-items: center; +} + +.formipay-table-pagination .page-info { + padding: 0 8px; + color: #646970; + font-size: 13px; +} + +.formipay-table-pagination .components-select-control { + min-width: 80px; +} + +/* Modal Actions */ +.formipay-modal-actions { + display: flex; + justify-content: flex-end; + gap: 12px; + margin-top: 20px; +} + +/* Sort Indicator */ +.formipay-table thead th.sorted { + position: relative; + padding-right: 20px; +} + +.formipay-table thead th .sort-indicator { + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); + color: #135e96; +} + +.formipay-order-timeline h3 { + margin: 0 0 16px; + font-size: 16px; + font-weight: 600; + color: #1e1e1e; +} + +.timeline-progress { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 24px; + position: relative; +} + +.timeline-step { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + position: relative; + z-index: 1; + flex: 1; +} + +.timeline-dot { + width: 24px; + height: 24px; + background: #e0e0e0; + border: 2px solid #c3c4c7; + border-radius: 50%; + position: relative; +} + +.timeline-step.completed .timeline-dot { + background: #2271b1; + border-color: #2271b1; +} + +.timeline-step.completed .timeline-dot::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 8px; + height: 8px; + background: #fff; + border-radius: 50%; +} + +.timeline-line { + position: absolute; + top: 12px; + left: 50%; + width: 100%; + height: 2px; + background: #e0e0e0; + z-index: -1; +} + +.timeline-step.completed .timeline-line { + background: #2271b1; +} + +.timeline-label { + font-size: 10px; + font-weight: 600; + color: #646970; + text-align: center; + text-transform: uppercase; +} + +.timeline-events ul { + list-style: none; + margin: 0; + padding: 0; +} + +.timeline-events li { + display: grid; + grid-template-columns: 1fr auto; + gap: 8px; + padding: 12px 0; + border-bottom: 1px solid #f0f0f1; +} + +.timeline-events li:last-child { + border-bottom: none; +} + +.event-status { + font-size: 13px; + font-weight: 600; + color: #1e1e1e; +} + +.event-date { + font-size: 11px; + color: #646970; + text-align: right; +} + +.event-note { + grid-column: 1 / -1; + font-size: 12px; + color: #646970; + margin-top: 4px; +} + +.no-events { + color: #646970; + font-size: 13px; + text-align: center; + padding: 20px 0; +} + +.formipay-notification-log h3 { + margin: 0 0 16px; + font-size: 16px; + font-weight: 600; + color: #1e1e1e; + display: flex; + align-items: center; + gap: 8px; +} + +.formipay-notification-log svg { + fill: #1e1e1e; +} + +.no-logs { + color: #646970; + font-size: 13px; + text-align: center; + padding: 20px 0; +} + +.notification-list { + list-style: none; + margin: 0; + padding: 0; +} + +.notification-item { + display: flex; + gap: 12px; + padding: 12px; + background: #f6f7f7; + border: 1px solid #e0e0e0; + border-radius: 4px; + margin-bottom: 8px; +} + +.notification-icon { + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + background: #fff; + border-radius: 50%; + flex-shrink: 0; +} + +.notification-icon svg { + fill: #1e1e1e; +} + +.notification-content { + flex: 1; + min-width: 0; +} + +.notification-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 4px; +} + +.notification-type { + font-size: 10px; + font-weight: 700; + color: #2271b1; + text-transform: uppercase; +} + +.notification-status { + font-size: 10px; + font-weight: 600; + padding: 2px 6px; + border-radius: 10px; +} + +.notification-item.sent .notification-status { + background: #e7f7ed; + color: #28a745; +} + +.notification-item.failed .notification-status { + background: #fbeaea; + color: #dc3545; +} + +.notification-item.pending .notification-status { + background: #fff8e5; + color: #f0ad4e; +} + +.notification-details { + display: flex; + flex-direction: column; + gap: 2px; +} + +.notification-details strong { + font-size: 13px; + color: #1e1e1e; +} + +.notification-recipient { + font-size: 11px; + color: #646970; +} + +.notification-date { + font-size: 11px; + color: #646970; + margin-top: 4px; +} + +.formipay-order-detail { + display: flex; + flex-direction: column; + height: 100%; + background: #f6f7f7; +} + +.formipay-detail-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 20px; + background: #fff; + border-bottom: 1px solid #e0e0e0; + gap: 16px; +} + +.formipay-detail-header h1 { + margin: 0; + font-size: 20px; + font-weight: 600; + flex: 1; +} + +.header-actions { + display: flex; + gap: 8px; +} + +.formipay-detail-content { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 20px; + padding: 20px; + overflow-y: auto; +} + +.formipay-detail-main, +.formipay-detail-sidebar { + display: flex; + flex-direction: column; + gap: 20px; +} + +.formipay-detail-card { + background: #fff; + border: 1px solid #e0e0e0; + border-radius: 4px; + padding: 20px; +} + +.formipay-detail-card h3 { + margin: 0 0 16px; + font-size: 16px; + font-weight: 600; + color: #1e1e1e; +} + +.detail-list { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; +} + +.detail-list > div { + display: flex; + flex-direction: column; +} + +.detail-list dt { + font-size: 12px; + font-weight: 600; + color: #646970; + margin-bottom: 4px; +} + +.detail-list dd { + font-size: 14px; + color: #1e1e1e; + display: flex; + align-items: center; + gap: 8px; +} + +.detail-list dd .components-select-control { + flex: 1; +} + +.items-table { + width: 100%; + border-collapse: collapse; +} + +.items-table th, +.items-table td { + padding: 10px; + text-align: left; + border-bottom: 1px solid #f0f0f1; +} + +.items-table th { + font-size: 12px; + font-weight: 600; + color: #646970; + text-transform: uppercase; +} + +.items-table td { + font-size: 13px; +} + +.items-table small { + display: block; + color: #646970; + font-size: 11px; +} + +.items-table tfoot td { + border-top: 2px solid #1e1e1e; + border-bottom: none; + padding-top: 16px; +} + +.customer-info { + display: grid; + grid-template-columns: 1fr; + gap: 12px; +} + +.customer-info > div { + display: flex; + flex-direction: column; +} + +.customer-info dt { + font-size: 11px; + font-weight: 600; + color: #646970; + margin-bottom: 2px; +} + +.customer-info dd { + font-size: 13px; + color: #1e1e1e; +} + +.no-data { + color: #646970; + font-size: 13px; +} + +.formipay-error, +.formipay-loading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 20px; + gap: 16px; +} + +.formipay-error p { + color: #646970; + margin: 0; +} + +.formipay-page-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; +} + +.formipay-page-header h1 { + margin: 0; + font-size: 23px; + font-weight: 400; +} + +/** Navigation Menu (App-level) **/ +.formipay-navigation-menu { + margin-left: -20px; + padding: 12px 20px 12px 50px; + background-color: white; + display: flex; + gap: 2em; + align-items: center; + position: sticky; + top: 32px; + left: 0; + z-index: 1000; + box-shadow: 0 4px 12px #d2d2d2; + width: calc(100% + 20px); + margin-top: -10px; +} + +.formipay-navigation-menu > img { + width: 48px; + height: 48px; + flex-shrink: 0; +} + +.navigation-links { + display: flex; + gap: 4px; + flex-wrap: wrap; +} + +.navigation-links .nav-link { + padding: 8px 16px; + text-decoration: none; + color: #646970; + border-radius: 4px; + transition: all 0.2s; + font-weight: 500; + font-size: 14px; +} + +.navigation-links .nav-link:hover { + background-color: #f6f7f7; + color: #2271b1; +} + +.navigation-links .nav-link.active { + background-color: #2271b1; + color: white; +} + +.status-badge { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + font-weight: 500; +} + +.status-badge.status-publish, +.status-badge.status-active { + background-color: #edfaef; + color: #00a32a; +} + +.status-badge.status-draft, +.status-badge.status-inactive { + background-color: #f0f0f1; + color: #646970; +} + +.status-badge.status-expired { + background-color: #f6f7f7; + color: #d63638; +} + +code { + background-color: #f0f0f1; + padding: 2px 6px; + border-radius: 3px; + font-family: monospace; + font-size: 13px; +} + +/** Modal Overlay **/ +.formipay-modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 100000; +} + +.formipay-modal-content { + background-color: white; + border-radius: 8px; + max-width: 900px; + width: 90%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); +} +.formipay-variation-table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +.formipay-variation-table thead th { + padding: 12px; + text-align: left; + font-size: 13px; + font-weight: 600; + color: #1e1e1e; + border-bottom: 2px solid #1e1e1e; +} + +.formipay-variation-table tbody td { + padding: 12px; + border-bottom: 1px solid #f0f0f1; +} + +.variation-row { + background: #fff; +} + +.variation-name { + display: flex; + align-items: center; + gap: 8px; +} + +.toggle-expand { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + padding: 0; + border: none; + background: transparent; + cursor: pointer; + border-radius: 2px; +} + +.toggle-expand:hover { + background: #f0f0f1; +} + +.toggle-expand svg { + fill: #646970; +} + +.variation-name strong { + font-size: 13px; + color: #1e1e1e; +} + +.price-cell, +.variation-stock, +.variation-weight { + min-width: 120px; +} + +.price-cell input, +.variation-stock input, +.variation-weight input { + width: 100%; + padding: 6px 8px; + font-size: 13px; + border: 1px solid #8c8f94; + border-radius: 2px; +} + +.variation-stock .components-base-control, +.variation-weight .components-base-control { + margin: 0; +} + +.variation-actions { + min-width: 100px; +} + +.variation-details-row { + background: #f9f9f9; +} + +.variation-details-row td { + padding: 0; +} + +.inner-table { + width: 100%; + margin: 0; + border-collapse: collapse; +} + +.inner-table thead { + display: none; +} + +.inner-table td { + padding: 8px 12px; + border-bottom: 1px solid #f0f0f1; +} + +.inner-table tr:last-child td { + border-bottom: none; +} + +.inner-table input[type="number"] { + width: 100%; + padding: 6px 8px; + font-size: 12px; + border: 1px solid #8c8f94; + border-radius: 2px; +} + +.currency-name { + font-size: 12px; + font-weight: 600; + color: #1e1e1e; +} + +.required { + color: #dc3545; + margin-left: 4px; +} + +/** + * Formipay Design System - WPCFTO-inspired component styles + * Matches the visual language of WPCFTO Vue components + * Use these classes in React components for consistency + */ + +/* ============================================ + DESIGN TOKENS + ============================================ */ + +:root { + /* Colors - WPCFTO-matched values */ + --formipay-color-primary: #2985f7; + --formipay-color-sidebar-bg: #2c3e50; + --formipay-color-sidebar-text: #bec5cb; + --formipay-color-sidebar-active: #2985f7; + --formipay-color-content-bg: #f0f3f5; + --formipay-color-block-bg: #fff; + --formipay-color-border: #f0f0f1; + --formipay-color-border-dark: #8c99a5; + --formipay-color-input-bg: #f6f9fc; + --formipay-color-text: #27374e; + --formipay-color-text-muted: #8c99a5; + --formipay-color-danger: #d63638; + --formipay-color-success: #00a32a; + --formipay-color-warning: #dba617; + + /* Spacing - WPCFTO values */ + --formipay-spacing-xs: 4px; + --formipay-spacing-sm: 8px; + --formipay-spacing-md: 12px; + --formipay-spacing-lg: 16px; + --formipay-spacing-xl: 20px; + --formipay-spacing-xxl: 24px; + + /* Border Radius - WPCFTO values */ + --formipay-radius-sm: 4px; + --formipay-radius-md: 10px; + --formipay-radius-lg: 30px; + --formipay-radius-full: 50%; + + /* Typography - WPCFTO values */ + --formipay-font-family: 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif; + --formipay-font-size-sm: 13px; + --formipay-font-size-base: 14px; + --formipay-font-size-md: 15px; + --formipay-font-size-lg: 18px; + --formipay-font-weight-normal: 400; + --formipay-font-weight-medium: 500; + --formipay-font-weight-semibold: 600; + --formipay-font-weight-bold: 700; + + /* WPCFTO Layout Dimensions */ + --formipay-sidebar-width: 273px; + --formipay-field-aside-width: 40%; + --formipay-field-content-width: 60%; + + /* Shadows */ + --formipay-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.05); + --formipay-shadow-md: -2px 2px 5px rgba(0, 0, 0, 0.08); + --formipay-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.1); + + /* Transitions */ + --formipay-transition-fast: 0.15s ease; + --formipay-transition-base: 0.3s ease; +} + +/* ============================================ + BASE STYLES + ============================================ */ + +.formipay-design-system * { + box-sizing: border-box; +} + +.formipay-design-system { + font-family: var(--formipay-font-family); + color: var(--formipay-color-text); + line-height: 1.5; +} + +/* ============================================ + BOX COMPONENT + ============================================ */ + +.formipay-box { + background-color: var(--formipay-color-content-bg); + border-radius: var(--formipay-radius-md); + margin: 0 0 10px; + min-height: 80px; + position: relative; + box-shadow: var(--formipay-shadow-sm); +} + +.formipay-box-child { + position: relative; +} + +.formipay-box-child + .formipay-box-child { + margin-top: 1em; +} + +.formipay-box a { + color: var(--formipay-color-primary); + text-decoration: none; + transition: color var(--formipay-transition-base); +} + +.formipay-box a:hover { + text-decoration: underline; +} + +/* ============================================ + TAB NAVIGATION (WPCFTO sidebar) + ============================================ */ + +.formipay-wpcfto-tab-nav { + background-color: var(--formipay-color-sidebar-bg); + width: var(--formipay-sidebar-width); + padding: 21px 0; + flex-grow: 1; +} + +.formipay-wpcfto-tab-nav.hide { + display: none; +} + +.formipay-wpcfto-tab-nav-inner { + position: sticky; + top: 133px; + z-index: 99; +} + +.formipay-wpcfto-nav { + background-color: transparent; + position: relative; + padding: 0; + font-size: var(--formipay-font-size-base); + font-weight: 400; + text-transform: uppercase; + color: var(--formipay-color-sidebar-text); + cursor: pointer; + transition: all 0.3s ease 0s; +} + +.formipay-wpcfto-nav-title { + padding: 13px 32px 13px 34px; + position: relative; +} + +.formipay-wpcfto-nav i { + display: block; + position: absolute; + right: 30px; + left: auto; + top: 50%; + margin-top: -11px; + width: 26px; + text-align: center; + font-size: 22px; +} + +.formipay-wpcfto-nav.active { + background-color: var(--formipay-color-primary); + color: white; +} + +.formipay-wpcfto-nav:hover { + color: white; +} + +.formipay-wpcfto-submenus { + background-color: #1e2a36; + padding: 18px 32px 18px 34px; +} + +.formipay-wpcfto-submenu-item { + font-size: 15px; + font-weight: 400; + text-transform: initial; + position: relative; + color: var(--formipay-color-text-muted); + margin-bottom: 15px; +} + +.formipay-wpcfto-submenu-item i { + font-size: 10px; + right: 0; + margin-top: -5px; + display: none; +} + +.formipay-wpcfto-submenu-item.active, +.formipay-wpcfto-submenu-item:hover { + color: white; +} + +.formipay-wpcfto-submenu-item.active i { + display: block; +} + +/* ============================================ + TAB CONTENT PANELS (WPCFTO tab content area) + ============================================ */ + +.formipay-tabs { + flex-grow: 1; + overflow: hidden; +} + +.formipay-tab { + background-color: var(--formipay-color-content-bg); + width: 100%; + padding: 20px 30px 20px 20px; + display: none; +} + +.formipay-tab.active { + display: block; + animation: fadeIn 0.4s ease; +} + +.formipay-tab-content { + max-width: 100%; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ============================================ + FIELD COMPONENT - WPCFTO 2-column layout + ============================================ */ + +.formipay-generic-field { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + padding: 1.8rem 1rem 0; + max-width: 100%; + width: 100%; + border-radius: 10px; + background-color: var(--formipay-color-block-bg); + margin: 0 0 10px; +} + +.formipay-field-aside { + width: var(--formipay-field-aside-width); + padding-right: 2rem; +} + +.formipay-field-label { + display: inline; + font-size: var(--formipay-font-size-base); + font-weight: var(--formipay-font-weight-medium); +} + +.formipay-field-label.required .formipay-field-label-text::after { + content: '*'; + color: var(--formipay-color-danger); + margin-left: 2px; +} + +.formipay-field-content { + width: var(--formipay-field-content-width); +} + +.formipay-field-description { + display: block; + margin-top: 0.8em; + font-size: var(--formipay-font-size-sm); + color: var(--formipay-color-text-muted); +} + +/* ============================================ + INPUTS + ============================================ */ + +.formipay-input, +.formipay-select, +.formipay-textarea { + width: 100%; + padding: 10px 16px; + border: 1px solid var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-lg); + background-color: var(--formipay-color-input-bg); + font-family: inherit; + font-size: var(--formipay-font-size-base); + color: var(--formipay-color-text); + transition: border-color var(--formipay-transition-fast), box-shadow var(--formipay-transition-fast); +} + +.formipay-input:focus, +.formipay-select:focus, +.formipay-textarea:focus { + outline: none; + border-color: var(--formipay-color-primary); + box-shadow: 0 0 0 3px rgba(41, 133, 247, 0.1); +} + +.formipay-input:disabled, +.formipay-select:disabled, +.formipay-textarea:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.formipay-textarea { + min-height: 100px; + resize: vertical; +} + +/* ============================================ + CHECKBOX & RADIO - WPCFTO toggle style + ============================================ */ + +.formipay-admin-checkbox { + align-self: flex-end; + margin-bottom: 0; +} + +.formipay-admin-checkbox-wrapper { + position: relative; + display: inline-block; + width: 42px; + height: 24px; + background-color: #bec5cb; + border-radius: 20px; + transition: background-color 0.3s ease; + cursor: pointer; +} + +.formipay-admin-checkbox-wrapper.active { + background-color: var(--formipay-color-primary); +} + +.formipay-checkbox-switcher { + position: absolute; + top: 3px; + left: 3px; + width: 18px; + height: 18px; + background-color: white; + border-radius: 50%; + transition: transform 0.3s ease; +} + +.formipay-admin-checkbox-wrapper.active .formipay-checkbox-switcher { + transform: translateX(18px); +} + +.formipay-admin-checkbox input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} + +.formipay-admin-checkbox label { + cursor: pointer; +} + +/* ============================================ + BUTTONS + ============================================ */ + +.formipay-btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--formipay-spacing-sm); + padding: 10px 20px; + border: none; + border-radius: var(--formipay-radius-sm); + font-family: inherit; + font-size: var(--formipay-font-size-base); + font-weight: var(--formipay-font-weight-medium); + cursor: pointer; + transition: all var(--formipay-transition-fast); + text-decoration: none; +} + +.formipay-btn:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.formipay-btn-primary { + background-color: var(--formipay-color-primary); + color: #fff; +} + +.formipay-btn-primary:hover:not(:disabled) { + background-color: #1e6ae6; +} + +.formipay-btn-secondary { + background-color: #f0f0f1; + color: var(--formipay-color-text); +} + +.formipay-btn-secondary:hover:not(:disabled) { + background-color: #e0e0e1; +} + +.formipay-btn-danger { + background-color: var(--formipay-color-danger); + color: #fff; +} + +.formipay-btn-danger:hover:not(:disabled) { + background-color: #b32d2e; +} + +.formipay-btn-sm { + padding: 6px 12px; + font-size: var(--formipay-font-size-sm); +} + +.formipay-btn-icon { + padding: 8px; + aspect-ratio: 1; +} + +/* ============================================ + REPEATER COMPONENT + ============================================ */ + +.formipay-repeater { + display: flex; + flex-direction: column; + gap: var(--formipay-spacing-md); +} + +.formipay-repeater-item { + background-color: #fafafa; + border: 1px solid var(--formipay-color-border); + border-radius: var(--formipay-radius-sm); + overflow: hidden; +} + +.formipay-repeater-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--formipay-spacing-md) var(--formipay-spacing-lg); + background-color: #fff; + border-bottom: 1px solid var(--formipay-color-border); + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.formipay-repeater-header:hover { + background-color: #f8f9fa; +} + +.formipay-repeater-title { + display: flex; + align-items: center; + gap: var(--formipay-spacing-sm); + font-weight: var(--formipay-font-weight-medium); +} + +.formipay-repeater-toggle { + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + transition: transform var(--formipay-transition-fast); +} + +.formipay-repeater-item.collapsed .formipay-repeater-toggle { + transform: rotate(-90deg); +} + +.formipay-repeater-body { + padding: var(--formipay-spacing-lg); +} + +.formipay-repeater-item.collapsed .formipay-repeater-body { + display: none; +} + +.formipay-repeater-actions { + display: flex; + gap: var(--formipay-spacing-sm); +} + +.formipay-repeater-delete { + color: var(--formipay-color-danger); + cursor: pointer; + transition: color var(--formipay-transition-fast); +} + +.formipay-repeater-delete:hover { + color: #b32d2e; +} + +.formipay-repeater-add { + display: flex; + align-items: center; + gap: var(--formipay-spacing-sm); + padding: var(--formipay-spacing-md) var(--formipay-spacing-lg); + background-color: transparent; + border: 1px dashed var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-sm); + color: var(--formipay-color-text-muted); + cursor: pointer; + transition: all var(--formipay-transition-fast); +} + +.formipay-repeater-add:hover { + border-color: var(--formipay-color-primary); + color: var(--formipay-color-primary); + background-color: rgba(41, 133, 247, 0.05); +} + +/* ============================================ + TABLE STYLES (WPCFTO-style) + ============================================ */ + +.formipay-table-wrapper { + background-color: var(--formipay-color-content-bg); + border-radius: var(--formipay-radius-md); + overflow: hidden; + box-shadow: var(--formipay-shadow-sm); +} + +.formipay-table { + width: 100%; + border-collapse: collapse; +} + +.formipay-table thead { + background-color: #f8f9fa; +} + +.formipay-table th { + padding: 12px 16px; + text-align: left; + font-size: var(--formipay-font-size-sm); + font-weight: var(--formipay-font-weight-semibold); + color: var(--formipay-color-text-muted); + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid var(--formipay-color-border); +} + +.formipay-table td { + padding: 12px 16px; + border-bottom: 1px solid var(--formipay-color-border); +} + +.formipay-table tbody tr:last-child td { + border-bottom: none; +} + +.formipay-table tbody tr:hover { + background-color: #f8f9fa; +} + +/* ============================================ + STATUS BADGES + ============================================ */ + +.formipay-badge { + display: inline-flex; + align-items: center; + padding: 4px 12px; + border-radius: var(--formipay-radius-full); + font-size: var(--formipay-font-size-sm); + font-weight: var(--formipay-font-weight-medium); +} + +.formipay-badge-success { + background-color: #edfaef; + color: var(--formipay-color-success); +} + +.formipay-badge-warning { + background-color: #fff8e5; + color: var(--formipay-color-warning); +} + +.formipay-badge-danger { + background-color: #fce8e6; + color: var(--formipay-color-danger); +} + +.formipay-badge-info { + background-color: #e7f3ff; + color: var(--formipay-color-primary); +} + +.formipay-badge-default { + background-color: #f0f0f1; + color: var(--formipay-color-text-muted); +} + +/* ============================================ + GROUP TITLE - WPCFTO section divider + ============================================ */ + +.formipay-group-title { + width: 100%; + padding: 0 0 12px; + color: var(--formipay-color-text-muted); + font-size: 14px; + font-weight: 400; + text-transform: uppercase; + border-bottom: 1px solid #d6dade; + margin: 0 0 17px; + letter-spacing: 1.4px; + display: flex; + align-items: center; + gap: 8px; +} + +.formipay-group-title i { + display: block; +} + +/* ============================================ + NOTICE / ALERT COMPONENTS + ============================================ */ + +.formipay-notice { + display: flex; + align-items: flex-start; + gap: var(--formipay-spacing-md); + padding: var(--formipay-spacing-md) var(--formipay-spacing-lg); + border-radius: var(--formipay-radius-sm); + margin: var(--formipay-spacing-md) 0; +} + +.formipay-notice-icon { + flex-shrink: 0; + width: 20px; + height: 20px; +} + +.formipay-notice-content { + flex: 1; +} + +.formipay-notice-title { + font-weight: var(--formipay-font-weight-semibold); + margin-bottom: var(--formipay-spacing-xs); +} + +.formipay-notice-success { + background-color: #edfaef; + border-left: 4px solid var(--formipay-color-success); +} + +.formipay-notice-warning { + background-color: #fff8e5; + border-left: 4px solid var(--formipay-color-warning); +} + +.formipay-notice-error { + background-color: #fce8e6; + border-left: 4px solid var(--formipay-color-danger); +} + +.formipay-notice-info { + background-color: #e7f3ff; + border-left: 4px solid var(--formipay-color-primary); +} + +/* ============================================ + LOADING & EMPTY STATES + ============================================ */ + +.formipay-loading { + display: flex; + align-items: center; + justify-content: center; + padding: 40px; +} + +.formipay-spinner { + width: 32px; + height: 32px; + border: 3px solid var(--formipay-color-border); + border-top-color: var(--formipay-color-primary); + border-radius: 50%; + animation: formipay-spin 0.8s linear infinite; +} + +@keyframes formipay-spin { + to { transform: rotate(360deg); } +} + +.formipay-empty-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 40px; + text-align: center; +} + +.formipay-empty-icon { + font-size: 48px; + color: var(--formipay-color-border-dark); + margin-bottom: var(--formipay-spacing-md); +} + +.formipay-empty-title { + font-size: var(--formipay-font-size-lg); + font-weight: var(--formipay-font-weight-semibold); + margin-bottom: var(--formipay-spacing-sm); +} + +.formipay-empty-description { + color: var(--formipay-color-text-muted); + margin-bottom: var(--formipay-spacing-lg); +} + +/* ============================================ + UTILITIES + ============================================ */ + +.formipay-text-center { text-align: center; } +.formipay-text-right { text-align: right; } +.formipay-text-muted { color: var(--formipay-color-text-muted); } +.formipay-text-small { font-size: var(--formipay-font-size-sm); } +.formipay-text-large { font-size: var(--formipay-font-size-lg); } + +.formipay-mt-0 { margin-top: 0; } +.formipay-mt-1 { margin-top: var(--formipay-spacing-xs); } +.formipay-mt-2 { margin-top: var(--formipay-spacing-sm); } +.formipay-mt-3 { margin-top: var(--formipay-spacing-md); } +.formipay-mt-4 { margin-top: var(--formipay-spacing-lg); } + +.formipay-mb-0 { margin-bottom: 0; } +.formipay-mb-1 { margin-bottom: var(--formipay-spacing-xs); } +.formipay-mb-2 { margin-bottom: var(--formipay-spacing-sm); } +.formipay-mb-3 { margin-bottom: var(--formipay-spacing-md); } +.formipay-mb-4 { margin-bottom: var(--formipay-spacing-lg); } + +.formipay-flex { display: flex; } +.formipay-flex-center { display: flex; align-items: center; justify-content: center; } +.formipay-flex-between { display: flex; align-items: center; justify-content: space-between; } +.formipay-flex-column { display: flex; flex-direction: column; } + +.formipay-gap-1 { gap: var(--formipay-spacing-xs); } +.formipay-gap-2 { gap: var(--formipay-spacing-sm); } +.formipay-gap-3 { gap: var(--formipay-spacing-md); } +.formipay-gap-4 { gap: var(--formipay-spacing-lg); } + +/* ============================================ + METABOX LAYOUT - WPCFTO 2-column wrapper + ============================================ */ + +.formipay-wpcfto-metabox { + background-color: #fff; + border-radius: var(--formipay-radius-md); + overflow: hidden; + box-shadow: var(--formipay-shadow-sm); +} + +.formipay-wpcfto-metabox-inner { + display: flex; + min-height: 400px; +} + +.formipay-wpcfto-container { + display: flex; + width: 100%; + position: relative; +} + +/* Horizontal variant for mobile/narrow contexts */ +.formipay-wpcfto-container.horizontal { + flex-direction: column; +} + +.formipay-wpcfto-container.horizontal .formipay-wpcfto-tab-nav { + width: 100%; + flex-direction: row; + overflow-x: auto; + padding: 0; +} + +.formipay-wpcfto-container.horizontal .formipay-wpcfto-tabs { + width: 100%; +} + +/* ============================================ + RESPONSIVE + ============================================ */ + +@media (max-width: 768px) { + .formipay-tab-nav { + flex-direction: row; + overflow-x: auto; + } + + .formipay-nav-item { + flex-shrink: 0; + } + + .formipay-field { + padding: var(--formipay-spacing-md) 0; + } +} + +/** + * Coupon Metabox Styles + * WPCFTO-inspired design for React metabox island + */ + +.formipay-coupon-metabox { + margin: -12px; +} + +.formipay-metabox-actions { + padding: 20px 30px; + background-color: #fff; + border-top: 1px solid #f0f0f1; + display: flex; + justify-content: flex-end; + gap: 12px; +} + +/* Radio Group */ +.formipay-radio-group { + display: flex; + gap: 16px; +} + +.formipay-radio { + display: inline-flex; + align-items: center; + gap: 8px; + cursor: pointer; + padding: 8px 16px; + border: 2px solid var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-lg); + transition: all var(--formipay-transition-fast); +} + +.formipay-radio input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} + +.formipay-radio span { + font-weight: var(--formipay-font-weight-medium); + color: var(--formipay-color-text-muted); +} + +.formipay-radio:hover { + border-color: var(--formipay-color-primary); +} + +.formipay-radio.active { + background-color: var(--formipay-color-primary); + border-color: var(--formipay-color-primary); +} + +.formipay-radio.active span { + color: white; +} + +/* Autocomplete Field */ +.formipay-autocomplete { + position: relative; +} + +.formipay-autocomplete-selected { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 8px; +} + +.formipay-autocomplete-tag { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 4px 8px; + background-color: var(--formipay-color-primary); + color: white; + border-radius: 4px; + font-size: var(--formipay-font-size-sm); +} + +.formipay-autocomplete-remove { + background: none; + border: none; + color: white; + cursor: pointer; + font-size: 16px; + line-height: 1; + padding: 0; + width: 16px; + height: 16px; + display: flex; + align-items: center; + justify-content: center; +} + +.formipay-autocomplete-remove:hover { + opacity: 0.8; +} + +.formipay-autocomplete-input-wrapper { + position: relative; +} + +.formipay-autocomplete-loading { + position: absolute; + right: 12px; + top: 50%; + transform: translateY(-50%); + color: var(--formipay-color-text-muted); +} + +.formipay-autocomplete-results { + position: absolute; + top: 100%; + left: 0; + right: 0; + max-height: 200px; + overflow-y: auto; + background-color: white; + border: 1px solid var(--formipay-color-border-dark); + border-radius: var(--formipay-radius-sm); + box-shadow: var(--formipay-shadow-md); + z-index: 100; + margin-top: 4px; +} + +.formipay-autocomplete-result { + padding: 10px 16px; + cursor: pointer; + transition: background-color var(--formipay-transition-fast); +} + +.formipay-autocomplete-result:hover { + background-color: var(--formipay-color-content-bg); +} + +.formipay-autocomplete-result:first-child { + border-radius: var(--formipay-radius-sm) var(--formipay-radius-sm) 0 0; +} + +.formipay-autocomplete-result:last-child { + border-radius: 0 0 var(--formipay-radius-sm) var(--formipay-radius-sm); +} + diff --git a/components.json b/components.json new file mode 100644 index 000000000..cb667db13 --- /dev/null +++ b/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": false, + "tailwind": { + "config": "", + "css": "src/admin/styles/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "hugeicons" +} diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 000000000..86b2402ef --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/admin/*"] + } + }, + "include": ["src/**/*"] +} diff --git a/package-lock.json b/package-lock.json index 50fa2742f..945674ce5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,44 @@ "version": "2.0.0", "license": "GPL-2.0-or-later", "dependencies": { + "@hugeicons/react": "^1.1.6", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@tailwindcss/postcss": "^4.2.2", "@wordpress/api-fetch": "^6.0.0", "@wordpress/components": "^25.0.0", "@wordpress/data": "^9.0.0", "@wordpress/element": "^5.0.0", "@wordpress/i18n": "^4.0.0", - "@wordpress/icons": "^9.0.0" + "@wordpress/icons": "^9.0.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "sonner": "^2.0.7", + "tailwind-merge": "^3.5.0", + "tailwindcss": "^4.2.2" }, "devDependencies": { - "@wordpress/scripts": "^27.0.0" + "@wordpress/scripts": "^27.0.0", + "tw-animate-css": "^1.4.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@ariakit/core": { @@ -2384,6 +2413,15 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@hugeicons/react": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@hugeicons/react/-/react-1.1.6.tgz", + "integrity": "sha512-c2LhXJMAW5wN1pC/smBXG0YPqUON6ceR/ZdXHCjEI9KvB+hjtqYjmzIxok5hAQOeXGz0WtORgCQMzqewFKAZwg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -2826,7 +2864,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -3468,6 +3505,916 @@ "node": ">=12" } }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", + "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -3923,6 +4870,262 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@tailwindcss/node": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", + "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-x64": "4.2.2", + "@tailwindcss/oxide-freebsd-x64": "4.2.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-x64-musl": "4.2.2", + "@tailwindcss/oxide-wasm32-wasi": "4.2.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", + "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", + "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", + "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", + "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", + "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", + "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", + "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", + "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", + "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", + "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", + "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", + "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.2.tgz", + "integrity": "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.2.2", + "@tailwindcss/oxide": "4.2.2", + "postcss": "^8.5.6", + "tailwindcss": "4.2.2" + } + }, "node_modules/@tannin/compile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz", @@ -6124,6 +7327,18 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -7427,6 +8642,18 @@ "dev": true, "license": "MIT" }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", @@ -8685,9 +9912,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, "license": "Apache-2.0", - "optional": true, "engines": { "node": ">=8" } @@ -8709,6 +9934,12 @@ "dev": true, "license": "MIT" }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, "node_modules/devtools-protocol": { "version": "0.0.1155343", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1155343.tgz", @@ -8982,7 +10213,6 @@ "version": "5.20.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -11163,6 +12393,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -11452,7 +12691,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/gradient-parser": { @@ -13588,6 +14826,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/joi": { "version": "17.13.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", @@ -14162,6 +15409,255 @@ } } }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -14351,6 +15847,15 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -14978,7 +16483,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -16050,7 +17554,6 @@ "version": "8.5.10", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -17290,6 +18793,75 @@ "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -18707,6 +20279,16 @@ "node": ">= 14" } }, + "node_modules/sonner": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", + "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -18720,7 +20302,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -19544,6 +21125,22 @@ "dev": true, "license": "MIT" }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", + "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "license": "MIT" + }, "node_modules/tannin": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz", @@ -19557,7 +21154,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -20007,6 +21603,16 @@ "dev": true, "license": "0BSD" }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -20398,6 +22004,27 @@ "requires-port": "^1.0.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-lilius": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/use-lilius/-/use-lilius-2.0.5.tgz", @@ -20430,6 +22057,28 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-sync-external-store": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", diff --git a/package.json b/package.json index 64cc933ea..cd7dd66c9 100644 --- a/package.json +++ b/package.json @@ -15,14 +15,31 @@ "packages-update": "wp-scripts packages-update" }, "devDependencies": { - "@wordpress/scripts": "^27.0.0" + "@wordpress/scripts": "^27.0.0", + "tw-animate-css": "^1.4.0" }, "dependencies": { + "@hugeicons/react": "^1.1.6", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@tailwindcss/postcss": "^4.2.2", "@wordpress/api-fetch": "^6.0.0", "@wordpress/components": "^25.0.0", "@wordpress/data": "^9.0.0", "@wordpress/element": "^5.0.0", "@wordpress/i18n": "^4.0.0", - "@wordpress/icons": "^9.0.0" + "@wordpress/icons": "^9.0.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "sonner": "^2.0.7", + "tailwind-merge": "^3.5.0", + "tailwindcss": "^4.2.2" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 000000000..39cb55d15 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +}; diff --git a/src/admin/components/ui/alert.js b/src/admin/components/ui/alert.js new file mode 100644 index 000000000..f19798b04 --- /dev/null +++ b/src/admin/components/ui/alert.js @@ -0,0 +1,31 @@ +import { cn } from '@/lib/utils'; + +function Alert({ className, variant = "default", ...props }) { + return ( +
svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7", + variant === "default" && "bg-background text-foreground", + variant === "destructive" && "border-destructive/50 text-destructive [&>svg]:text-destructive dark:border-destructive [&>svg]:text-destructive", + className + )} + {...props} + /> + ); +} + +function AlertTitle({ className, ...props }) { + return ( +
+ ); +} + +function AlertDescription({ className, ...props }) { + return ( +
+ ); +} + +export { Alert, AlertTitle, AlertDescription }; diff --git a/src/admin/components/ui/badge.js b/src/admin/components/ui/badge.js new file mode 100644 index 000000000..cc9b62486 --- /dev/null +++ b/src/admin/components/ui/badge.js @@ -0,0 +1,26 @@ +import { cn } from '@/lib/utils'; +import { cva } from 'class-variance-authority'; + +const badgeVariants = cva( + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + outline: "text-foreground", + success: "border-transparent bg-green-100 text-green-800", + warning: "border-transparent bg-yellow-100 text-yellow-800", + info: "border-transparent bg-blue-100 text-blue-800", + }, + }, + defaultVariants: { variant: "default" }, + } +); + +function Badge({ className, variant, ...props }) { + return
; +} + +export { Badge, badgeVariants }; diff --git a/src/admin/components/ui/button.js b/src/admin/components/ui/button.js new file mode 100644 index 000000000..6f7e273a8 --- /dev/null +++ b/src/admin/components/ui/button.js @@ -0,0 +1,33 @@ +import { cn } from '@/lib/utils'; +import { cva } from 'class-variance-authority'; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { variant: "default", size: "default" }, + } +); + +function Button({ className, variant, size, ...props }) { + return ( +