/* Shared components for JS-rendered markup (tables, modals, cards) */
.btn{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1rem;border-radius:.375rem;font-size:.8125rem;font-weight:500;border:1px solid transparent;cursor:pointer;transition:all .15s}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-primary{background:#1B4FA0;color:#fff}.btn-primary:hover{background:#143d7c}
.btn-blue{background:#2663C4;color:#fff}.btn-blue:hover{background:#1B4FA0}
.btn-ghost{background:#fff;border-color:#e2e6ec;color:#3d4a5c}.btn-ghost:hover{background:#f7f8fa}
.btn-danger{background:#fee2e2;color:#dc2626;border-color:#fecaca}.btn-danger:hover{background:#fecaca}
.btn-outline-orange{background:#fff0e8;color:#E85A0C;border-color:#fdba74}.btn-outline-orange:hover{background:#ffedd5}
.btn-sm{padding:.25rem .6rem;font-size:.75rem}
.badge{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.7rem;font-weight:600}
.badge-green{background:#dcfce7;color:#16a34a}
.badge-blue{background:#e8f0fb;color:#1B4FA0}
.badge-grey{background:#f0f2f5;color:#7a8799}
.badge-amber{background:#fef3c7;color:#d97706}
.data-table{width:100%;border-collapse:collapse;font-size:.8125rem}
.data-table th{text-align:left;padding:.65rem 1rem;background:#f7f8fa;color:#7a8799;font-weight:600;font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid #e2e6ec}
.data-table td{padding:.65rem 1rem;border-bottom:1px solid #f0f2f5;vertical-align:middle}
.data-table tr:hover td{background:#fafbfc}
.row-actions{display:flex;gap:.35rem;justify-content:flex-end;flex-wrap:wrap}
.empty-state{text-align:center;padding:2.5rem 1rem;color:#7a8799;font-size:.875rem}
.sample-table{width:100%;border-collapse:collapse;font-size:.8125rem}
.sample-table th{text-align:left;padding:.5rem .75rem;background:#f7f8fa;color:#7a8799;font-size:.7rem;font-weight:600;border-bottom:1px solid #e2e6ec}
.sample-table td{padding:.45rem .75rem;border-bottom:1px solid #f0f2f5}
.td-price{color:#E85A0C;font-weight:600;text-align:right}
.td-normal{text-align:right}
.td-cost{text-align:right;color:#7a8799}
.badge-fonte{font-size:.65rem;padding:.1rem .4rem;border-radius:4px;font-weight:600}
.badge-riba{background:#e8f0fb;color:#1B4FA0}
.badge-depau{background:#fff0e8;color:#E85A0C}
.provider-card{display:flex;gap:.75rem;padding:1rem 1.1rem;background:#fff;border:1px solid #e2e6ec;border-radius:.625rem;box-shadow:0 1px 3px rgba(0,0,0,.06)}
.provider-card.ok{border-color:#86efac}
.provider-card.error{border-color:#fca5a5}
.provider-card.downloading{border-color:#fcd34d}
.prov-dot{width:8px;height:8px;border-radius:50%;background:#c8d0dc;margin-top:.45rem;flex-shrink:0}
.provider-card.ok .prov-dot{background:#16a34a}
.provider-card.error .prov-dot{background:#dc2626}
.provider-card.downloading .prov-dot{background:#d97706;animation:pulse 1.2s infinite}
.prov-name{font-weight:600;font-size:.9rem}
.prov-status{font-size:.75rem;color:#7a8799;margin-top:.15rem}
.prov-time{font-size:.7rem;color:#c8d0dc;margin-top:.1rem}
.mode-toggle{display:flex;gap:.35rem;margin-top:.65rem}
.mode-btn{padding:.25rem .6rem;font-size:.7rem;border-radius:.25rem;border:1px solid #e2e6ec;background:#f7f8fa;cursor:pointer}
.mode-btn.active{background:#1B4FA0;color:#fff;border-color:#1B4FA0}
.prov-upload-area label{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .65rem;background:#e8f0fb;color:#1B4FA0;border-radius:.25rem;font-size:.75rem;font-weight:500;cursor:pointer}
.modal-field{margin-bottom:.85rem}
.modal-field label{display:block;font-size:.7rem;font-weight:600;color:#7a8799;text-transform:uppercase;letter-spacing:.04em;margin-bottom:.35rem}
.modal-field input,.modal-field select,.modal-field textarea{width:100%;padding:.5rem .65rem;border:1.5px solid #e2e6ec;border-radius:.375rem;font-size:.8125rem}
.modal-field textarea{min-height:120px;font-family:ui-monospace,monospace}
.modal-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem;padding-top:.75rem;border-top:1px solid #f0f2f5}
.tab-btn{padding:.45rem .9rem;font-size:.8125rem;border:none;background:transparent;color:#7a8799;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab-btn.active{color:#1B4FA0;border-bottom-color:#1B4FA0;font-weight:600}
.tab-panel{display:none}.tab-panel.active{display:block}
.toggle{position:relative;display:inline-block;width:44px;height:24px}
.toggle input{opacity:0;width:0;height:0}
.toggle-slider{position:absolute;cursor:pointer;inset:0;background:#c8d0dc;border-radius:999px;transition:.2s}
.toggle-slider:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:.2s}
.toggle input:checked+.toggle-slider{background:#1B4FA0}
.toggle input:checked+.toggle-slider:before{transform:translateX(20px)}
.status-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.75rem;margin-bottom:1rem}
.status-card{padding:.85rem 1rem;background:#fff;border:1px solid #e2e6ec;border-radius:.5rem}
.status-card .lbl{font-size:.65rem;text-transform:uppercase;color:#7a8799;font-weight:600}
.status-card .val{font-size:1.1rem;font-weight:700;margin-top:.2rem}
.loader{display:none;align-items:center;gap:.5rem;padding:.75rem 0;font-size:.8125rem;color:#7a8799}
.loader.show{display:flex}
.progress{display:none;height:4px;background:#f0f2f5;border-radius:999px;overflow:hidden;margin-top:.5rem}
.progress.show{display:block}
.progress-bar{height:100%;width:0;background:#1B4FA0;transition:width .4s}
.catalog-empty{text-align:center;padding:2.5rem 1rem;color:#7a8799}
.catalog-table-wrap{background:#fff;border:1px solid #e2e6ec;border-radius:.625rem;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.06)}
.spinner{width:24px;height:24px;border:3px solid #e2e6ec;border-top-color:#1B4FA0;border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
