/* Portal Cliente UI V2. Capa exclusivamente visual; conserva DOM, rutas y handlers. */
body:has(.fs-portal){display:block;padding:0;background:#f7f9fc;color:#0f172a}
body:has(.fs-portal) #app{width:100%;max-width:none;min-height:100dvh;margin:0}
.fs-portal,body:has(.fs-portal) .fs-modal{--fs-bg:#f7f9fc;--fs-surface:#fff;--fs-workspace-bg:#f8fafc;--fs-text:#0f172a;--fs-text-muted:#64748b;--fs-muted:#64748b;--fs-line:#cbd5e1;--fs-line-soft:#e2e8f0;--fs-accent:#2563eb;--fs-accent-hover:#1d4ed8;--fs-accent-ink:#fff;--fs-accent-soft:#eff6ff;--fs-green-950:#0f172a;--fs-green-900:#2563eb;--fs-green-100:#eff6ff;--fs-radius-md:10px;--fs-radius-lg:12px;--fs-radius-xl:16px;--fs-shadow-sm:0 1px 2px rgb(15 23 42 / 5%);--fs-shadow-md:0 8px 24px rgb(15 23 42 / 7%);color-scheme:light;font-family:"IBM Plex Sans",Roboto,"Segoe UI",system-ui,sans-serif;color:#0f172a}
.fs-portal.fs-shell.fs-card{width:calc(100% - 48px);max-width:1440px;min-height:0;margin:0 auto;padding:80px 0 40px;border:0;border-radius:0;background:transparent;box-shadow:none;overflow-x:clip}
.fs-portal *{box-sizing:border-box;min-width:0}.fs-portal :is(h1,h2,h3,p,strong,small,a,span,label){overflow-wrap:break-word;word-break:normal}
.fs-portal .fs-shell-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin:0 0 20px;padding:0 0 18px;border-bottom:1px solid #e2e8f0}.fs-portal .fs-shell-header::after{display:none}
.fs-portal .fs-shell-title{max-width:none;margin:0;color:#0f172a;font-size:clamp(28px,2.5vw,38px);font-weight:700;line-height:1.15;letter-spacing:-.035em}.fs-portal .fs-eyebrow{margin:0 0 5px;color:#64748b;font-size:11px;font-weight:700;letter-spacing:.12em}.fs-portal .fs-lead{max-width:72ch;margin:0 0 20px;color:#64748b;font-size:15px;line-height:1.55}
.fs-portal :is(.fs-portal-section,.fs-client-panel,.fs-portal-billing,.fs-tool-panel,.fs-create-panel,.fs-mat-card){margin:0 0 16px;padding:18px 20px;border:1px solid #e2e8f0;border-radius:12px;background:#fff;box-shadow:0 1px 2px rgb(15 23 42 / 4%)}
.fs-portal :is(.fs-portal-section,.fs-client-panel,.fs-portal-billing)>h2{margin:0 0 14px;color:#0f172a;font-size:17px}.fs-portal :is(.fs-portal-card,.fs-work-row,.fs-portal-case-card,.fs-portal-timeline-body,.fs-invoice-card){max-width:100%;margin-bottom:10px;padding:16px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:none}
.fs-portal :is(input,select,textarea){width:100%;max-width:100%;min-height:46px;padding:10px 12px;border:1px solid #cbd5e1!important;border-radius:10px;background:#fff!important;color:#0f172a!important;box-shadow:none;font:inherit;font-size:16px;line-height:1.4;color-scheme:light!important}.fs-portal :is(input,select,textarea):focus{border-color:#2563eb!important;outline:0;box-shadow:0 0 0 3px rgb(37 99 235 / 12%)}.fs-portal input::placeholder,.fs-portal textarea::placeholder{color:#94a3b8}.fs-portal textarea{min-height:110px;resize:vertical}.fs-portal input:is([type=checkbox],[type=radio]){width:20px!important;height:20px!important;min-height:20px!important;flex:0 0 20px;padding:0;accent-color:#2563eb}.fs-portal label{color:#334155;font-size:14px;line-height:1.45}.fs-portal :is(.fs-checkbox,.fs-consent-check,.fs-invoice-consent){display:flex;align-items:flex-start;gap:10px;min-height:44px;padding:10px 0}
.fs-portal :is(button,.fs-button,.fs-link-button){max-width:100%;font-family:inherit;white-space:normal;touch-action:manipulation}.fs-portal .fs-button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 16px;border:1px solid #2563eb;border-radius:10px;background:#2563eb;color:#fff;box-shadow:none;font-size:14px;font-weight:650;text-decoration:none;transition:.16s}.fs-portal .fs-button:hover{border-color:#1d4ed8;background:#1d4ed8}.fs-portal :is(.fs-button-secondary,.fs-link-button){min-height:44px;padding:10px 14px;border:1px solid #cbd5e1;border-radius:10px;background:#fff;color:#0f172a;box-shadow:none}.fs-portal :is(.fs-button-secondary,.fs-link-button):hover{border-color:#94a3b8;background:#f8fafc;color:#2563eb}.fs-portal button:disabled{opacity:.5}.fs-portal :is(button,a,input,select,textarea):focus-visible{outline:3px solid rgb(37 99 235 / 24%);outline-offset:2px}
.fs-portal :is(.fs-badge,.fs-status-badge){display:inline-flex;align-items:center;width:max-content;padding:4px 9px;border-radius:999px;background:#f1f5f9;color:#475569;font-size:12px;font-weight:700}.fs-portal :is(.fs-empty-state,.fs-form-feedback,.fs-legal-warning){min-height:0;padding:13px 14px;border-radius:10px;color:#64748b;font-size:14px;line-height:1.5}.fs-portal .fs-empty-state{border:1px dashed #cbd5e1;background:#f8fafc}
.fs-portal :is(.fs-portal-quick-actions,.fs-work-actions){display:flex;flex-wrap:wrap;gap:10px;margin:12px 0 0}.fs-portal .fs-portal-quick-actions .fs-button{min-width:0;flex:1 1 180px}
.fs-portal .fs-monthly-statuses{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.fs-portal .fs-status-badge.is-success{background:#dcfce7;color:#166534}.fs-portal .fs-status-badge.is-warning{background:#fef3c7;color:#92400e}
/* Inicio: acciones dominantes y dashboard lateral legible. */
.fs-portal-home-layout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(320px,1fr);gap:18px;align-items:start}.fs-portal-home-actions,.fs-portal-home-dashboard{display:grid;gap:16px;align-content:start}.fs-portal-home-layout .fs-mat-card{margin:0}.fs-portal .fs-portal-home-actions .fs-portal-send-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.fs-portal .fs-mat-card-title{color:#0f172a;font-size:16px;font-weight:700}.fs-portal .fs-mat-badge{min-width:24px;padding:3px 7px;background:#dc2626;color:#fff;font-weight:700}.fs-portal .fs-mat-empty{padding:10px 0;color:#64748b;text-align:left}.fs-portal .fs-mat-item-row{border-color:#e2e8f0}.fs-portal .fs-mat-item-row:hover{background:#f8fafc}.fs-portal .fs-mat-item-icon{background:#eff6ff;color:#2563eb}.fs-portal .fs-mat-item-main{color:#0f172a}.fs-portal .fs-mat-item-sub,.fs-portal .fs-mat-item-meta{color:#64748b}.fs-portal .fs-mat-chip{background:#fff;border:1px solid #cbd5e1;color:#0f172a}.fs-portal .fs-mat-chip:hover{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}
/* Acciones rápidas y Enviar. */
.fs-portal .fs-portal-send-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:0 0 18px}.fs-portal :is(.fs-tool-card,.fs-portal-send-option){display:grid;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:4px 12px;min-height:124px;padding:18px 20px;border:1px solid #e2e8f0;border-radius:12px;background:#fff;color:#0f172a;box-shadow:0 1px 2px rgb(15 23 42 / 4%);text-align:left;transform:none;transition:.16s}.fs-portal .fs-tool-card{display:flex;min-height:156px}.fs-portal .fs-tool-card:hover,.fs-portal .fs-portal-send-option:hover{border-color:#93c5fd;background:#fff;box-shadow:0 8px 22px rgb(15 23 42 / 7%);transform:translateY(-1px)}
.fs-portal .fs-portal-send-option strong{grid-column:2;color:#0f172a;font-size:15px;font-weight:600}.fs-portal .fs-portal-send-option>span:not(.fs-portal-send-icon):not(.fs-portal-send-arrow){grid-column:2;color:#64748b;font-size:13px;line-height:1.4}.fs-portal .fs-portal-send-icon{grid-column:1;grid-row:1/span 2;display:grid;place-items:center;width:44px;height:44px;border-radius:10px;background:#eff6ff;color:#2563eb;font-size:22px}.fs-portal .fs-portal-send-arrow{grid-column:3;grid-row:1/span 2;color:#64748b;font-size:20px}.fs-portal .fs-portal-send-option:hover .fs-portal-send-arrow{color:#2563eb}.fs-portal .fs-portal-send-option.is-primary{border-color:#bfdbfe;background:#fff;box-shadow:inset 0 3px 0 #2563eb}
.fs-portal .fs-direct-file-send{display:grid;gap:9px;margin-top:18px;padding:20px;border:1px solid #e2e8f0;background:#fff}.fs-portal .fs-direct-file-send :is(h2,p){margin:0}.fs-portal .fs-direct-file-send .fs-button{width:max-content;background:#2563eb;color:#fff}.fs-portal .fs-direct-file-send .fs-button:hover{background:#1d4ed8}.fs-portal .fs-direct-file-send small{color:#64748b}
/* Resto de rutas. */
.fs-portal :is(.fs-tools-grid,.fs-portal-cases-list){display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:14px;margin:0 0 16px}.fs-portal .fs-tool-category{background:#eff6ff;color:#1d4ed8}.fs-portal :is(.fs-compose,.fs-portal-upload-form,.fs-upload-form,.fs-request-control-form,.fs-income-form){display:grid;grid-template-columns:1fr;gap:14px;max-width:1000px;padding:20px;border:1px solid #e2e8f0;border-radius:12px;background:#fff}.fs-portal .fs-upload-zone{padding:20px;border:1px dashed #94a3b8;border-radius:12px;background:#f8fafc;color:#0f172a}
.fs-portal .fs-conversation{display:grid;gap:14px;width:100%;max-width:1100px}.fs-portal .fs-conversation-thread{display:flex;flex-direction:column;gap:12px;max-height:60dvh;overflow-y:auto;padding:16px;border:1px solid #e2e8f0;border-radius:12px;background:#f8fafc}.fs-portal .fs-message{width:fit-content;max-width:70%;padding:14px 16px;border-radius:12px}.fs-portal .fs-conversation-thread .fs-message-client{align-self:flex-end;border:1px solid #bfdbfe;background:#eff6ff;color:#1e3a8a}.fs-portal .fs-conversation-thread .fs-message-office{align-self:flex-start;border:1px solid #a7f3d0;background:#ecfdf5;color:#14532d}.fs-portal .fs-message :is(p,time){margin:0;line-height:1.5}.fs-portal .fs-message time{display:block;margin-top:6px;color:#64748b;font-size:12px}
.fs-portal .fs-new-communication{margin:0 0 16px}.fs-portal .fs-communication-composer[hidden]{display:none}.fs-portal .fs-communication-composer{max-width:900px;margin:0 0 18px;padding:20px;border:1px solid #bfdbfe;border-radius:12px;background:#fff;box-shadow:0 8px 24px rgb(15 23 42 / 6%)}.fs-portal .fs-communication-composer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.fs-portal .fs-communication-composer-head>div{font-size:18px;font-weight:700}.fs-portal .fs-communication-composer .fs-compose{max-width:none;padding:0;border:0}.fs-portal .fs-conversations-panel{padding:20px;border:1px solid #e2e8f0;border-radius:12px;background:#fff}.fs-portal .fs-conversations-panel>h2{margin:0 0 10px;font-size:16px;text-transform:uppercase;letter-spacing:.06em}.fs-portal .fs-conversation-list{display:grid}.fs-portal .fs-portal-conversation-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:14px;padding:16px 4px;border-bottom:1px solid #e2e8f0}.fs-portal .fs-portal-conversation-row:last-child{border-bottom:0}.fs-portal .fs-portal-conversation-copy{display:grid;gap:4px}.fs-portal .fs-portal-conversation-copy strong{font-size:15px}.fs-portal .fs-portal-conversation-copy span{color:#64748b;font-size:13px}.fs-portal .fs-portal-conversation-states{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}
.fs-portal .fs-portal-notice-card{border-color:#e2e8f0;box-shadow:none}.fs-portal .fs-portal-notice-card.is-unread{border-left:4px solid #2563eb;background:#eff6ff}.fs-portal .fs-portal-folder-icon{color:#2563eb}.fs-portal :is(.fs-portal-folder,.fs-portal-file){border-color:#e2e8f0;background:#fff;box-shadow:none}.fs-portal .fs-portal-folder:hover{border-color:#93c5fd;background:#eff6ff}.fs-portal .fs-portal-timeline-dot{background:#2563eb}.fs-portal .fs-portal-timeline-item.is-action .fs-portal-timeline-dot{background:#d97706}.fs-portal .fs-portal-timeline-item.is-resolved .fs-portal-timeline-dot{background:#16a34a}.fs-portal .fs-portal-timeline-item.is-action .fs-portal-timeline-body{border-color:#fcd34d;background:#fffbeb}
body:has(.fs-portal) .fs-modal{width:min(680px,calc(100vw - 24px));max-height:calc(100dvh - 24px);border:1px solid #e2e8f0;border-radius:16px;background:#fff;color:#0f172a}
.fs-portal .fs-communication-types{display:grid;gap:18px}.fs-portal .fs-communication-type-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.fs-portal .fs-communication-type{display:grid;gap:4px;min-height:86px;padding:14px;border:1px solid #cbd5e1;border-radius:12px;background:#fff;color:#0f172a;text-align:left}.fs-portal .fs-communication-type span{color:#64748b;font-size:13px}.fs-portal .fs-communication-type:hover,.fs-portal .fs-communication-type.is-active{border-color:#2563eb;background:#eff6ff}.fs-portal .fs-communication-type.is-active{box-shadow:inset 3px 0 #2563eb}.fs-portal .fs-labor-form{display:grid;gap:14px}.fs-portal .fs-labor-section{margin:0;padding:16px;border:1px solid #e2e8f0;border-radius:12px;background:#f8fafc}.fs-portal .fs-labor-section legend{padding:0 6px;color:#0f172a;font-size:15px;font-weight:700}.fs-portal .fs-labor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.fs-portal .fs-labor-field{display:grid;align-content:start;gap:6px}.fs-portal .fs-labor-field>span{font-weight:600}.fs-portal .fs-labor-field-wide,.fs-portal .fs-labor-conditional{grid-column:1/-1}.fs-portal .fs-labor-conditional{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.fs-portal .fs-labor-conditional[hidden]{display:none}.fs-portal .fs-labor-file{display:grid;gap:6px;padding:14px;border:1px dashed #94a3b8;border-radius:10px;background:#fff}.fs-portal .fs-labor-file small{color:#64748b}.fs-portal .fs-labor-file input{padding:8px;background:#fff!important}
@media(min-width:768px){.fs-portal .fs-tool-form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.fs-portal .fs-income-row{grid-template-columns:minmax(140px,1.4fr) minmax(100px,1fr) minmax(130px,1fr) minmax(140px,1.4fr)}}
@media(max-width:1100px){.fs-portal.fs-shell.fs-card{width:calc(100% - 32px)}.fs-portal-home-layout{grid-template-columns:minmax(0,1fr)}.fs-portal-home-dashboard{grid-template-columns:repeat(2,minmax(0,1fr))}.fs-portal .fs-portal-send-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:820px){.fs-portal-home-dashboard,.fs-portal .fs-portal-send-grid{grid-template-columns:minmax(0,1fr)!important}}
@media(max-width:767px){.fs-portal.fs-shell.fs-card{width:100%;padding:70px 14px 24px}.fs-portal .fs-shell-header{gap:10px;margin-bottom:16px;padding-bottom:14px}.fs-portal .fs-shell-title{font-size:26px}.fs-portal-home-dashboard,.fs-portal .fs-portal-send-grid,.fs-portal :is(.fs-tools-grid,.fs-portal-cases-list,.fs-tool-form-grid,.fs-tool-kpis,.fs-income-row,.fs-income-matrix,.fs-client-columns,.fs-communication-type-grid,.fs-labor-grid,.fs-labor-conditional){grid-template-columns:minmax(0,1fr)!important}.fs-portal :is(.fs-portal-section,.fs-client-panel,.fs-portal-billing,.fs-tool-panel,.fs-create-panel,.fs-mat-card){padding:16px}.fs-portal .fs-portal-send-option{min-height:112px;padding:16px}.fs-portal .fs-income-head{display:none}.fs-portal .fs-work-row{display:flex;flex-direction:column;align-items:stretch;gap:10px}.fs-portal .fs-tool-card{min-height:128px}.fs-portal .fs-portal-case-card{grid-template-columns:minmax(0,1fr)}.fs-portal .fs-conversation-thread .fs-message{max-width:90%}.fs-portal .fs-portal-conversation-row{grid-template-columns:minmax(0,1fr);gap:10px;padding:14px 0}.fs-portal .fs-portal-conversation-states{justify-content:flex-start}.fs-portal .fs-portal-conversation-row>.fs-link-button{width:100%}.fs-portal .fs-table-scroll{max-width:100%;overflow:visible}.fs-portal .fs-communication-composer{padding:14px}.fs-portal .fs-labor-section{padding:13px}}
@media(max-width:390px){.fs-portal.fs-shell.fs-card{padding-inline:10px}.fs-portal .fs-portal-send-option{grid-template-columns:40px minmax(0,1fr) auto;padding:14px}.fs-portal .fs-portal-send-icon{width:40px;height:40px}.fs-portal :is(.fs-button,.fs-button-secondary,.fs-link-button){width:100%}}
.fs-portal .fs-income-form{gap:18px}.fs-portal .fs-income-period{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:3px 16px;padding:15px 18px;border:1px solid #bfdbfe;border-radius:12px;background:#eff6ff}.fs-portal .fs-income-period>span{color:#64748b;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.fs-portal .fs-income-period>strong{grid-column:2;grid-row:1/span 2;color:#1e3a8a;font-size:17px;text-transform:capitalize}.fs-portal .fs-income-period>small{color:#64748b}.fs-portal .fs-income-group{overflow:hidden;border:1px solid #e2e8f0;border-radius:12px;background:#fff}.fs-portal .fs-income-group>h2,.fs-portal .fs-income-group>p{margin:0;padding-inline:18px}.fs-portal .fs-income-group>h2{padding-top:16px;color:#0f172a;font-size:16px;text-transform:uppercase;letter-spacing:.045em}.fs-portal .fs-income-group>p{padding-top:4px;padding-bottom:14px;color:#64748b;font-size:13px}.fs-portal .fs-income-cash{border-color:#bfdbfe;background:#f8fbff}.fs-portal .fs-income-row{display:grid;grid-template-columns:minmax(150px,1.25fr) minmax(130px,.75fr) minmax(150px,.85fr) minmax(180px,1fr);align-items:center;gap:12px;padding:12px 18px;border-top:1px solid #e2e8f0}.fs-portal .fs-income-concept{color:#0f172a;font-size:14px}.fs-portal :is(.fs-income-amount,.fs-income-month,.fs-income-notes){position:relative;display:block}.fs-portal .fs-income-row input{width:100%;min-height:44px;margin:0;padding:9px 12px;border:1px solid #cbd5e1;border-radius:9px;background:#fff}.fs-portal .fs-income-row input:focus{border-color:#2563eb;box-shadow:0 0 0 3px rgb(37 99 235 / 12%);outline:0}.fs-portal .fs-income-amount input{padding-right:34px;text-align:right;font-weight:700}.fs-portal .fs-income-currency{position:absolute;right:12px;top:50%;translate:0 -50%;color:#64748b}.fs-portal .fs-income-mobile-label{display:none}.fs-portal .fs-income-summary{display:grid;gap:9px;padding:17px 18px;border:1px solid #cbd5e1;border-radius:12px;background:#f8fafc}.fs-portal .fs-income-summary h2{margin:0 0 3px;font-size:16px}.fs-portal .fs-income-summary>div{display:flex;justify-content:space-between;gap:16px;color:#475569}.fs-portal .fs-income-summary .is-total{margin-top:3px;padding-top:11px;border-top:1px solid #cbd5e1;color:#0f172a;font-weight:800;text-transform:uppercase}.fs-portal .fs-income-form>.fs-button{min-height:48px;background:#2563eb}.fs-portal .fs-income-form>.fs-button:hover{background:#1d4ed8}
@media(max-width:767px){.fs-portal .fs-income-form{padding:14px}.fs-portal .fs-income-period{grid-template-columns:minmax(0,1fr);padding:14px}.fs-portal .fs-income-period>strong{grid-column:1;grid-row:auto}.fs-portal .fs-income-group>h2,.fs-portal .fs-income-group>p{padding-inline:14px}.fs-portal .fs-income-row{gap:9px;padding:14px}.fs-portal .fs-income-concept{font-size:15px}.fs-portal .fs-income-mobile-label{display:block;margin:0 0 5px;color:#64748b;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.fs-portal .fs-income-currency{top:auto;bottom:13px;translate:0 0}}
@media(prefers-reduced-motion:reduce){.fs-portal *{scroll-behavior:auto;transition:none}}
