.auth-bg{min-height:100vh;background:#f1f5f9;display:flex;align-items:center;justify-content:center;padding:20px}.auth-card{background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:40px 36px;width:100%;max-width:400px;box-shadow:0 8px 32px #00000014,0 2px 8px #0000000d}.auth-logo{font-size:22px;font-weight:800;color:#16a34a;margin-bottom:2px;text-align:center;letter-spacing:-.03em}.auth-subtitle{font-size:13px;color:#64748b;text-align:center;margin-bottom:28px}.auth-title{font-size:1.1rem;font-weight:700;margin-bottom:20px;color:#0f172a;letter-spacing:-.02em}.auth-form{display:flex;flex-direction:column;gap:0}.auth-field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px}.auth-field label{font-size:.78rem;color:#475569;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.auth-field input{font-size:.9rem;padding:10px 13px;border:1px solid #cbd5e1;border-radius:8px;background:#fff;color:#0f172a;transition:border-color .15s,box-shadow .15s;width:100%}.auth-field input:focus{outline:none;border-color:#16a34a;box-shadow:0 0 0 3px #16a34a1f}.auth-forgot{text-align:right;margin-bottom:16px;margin-top:-4px}.auth-forgot a{font-size:.8rem;color:#16a34a;text-decoration:none;font-weight:600}.auth-btn{width:100%;padding:11px;background:#16a34a;color:#fff;border:none;border-radius:8px;font-size:.9rem;font-weight:700;cursor:pointer;transition:background .15s;display:flex;align-items:center;justify-content:center;gap:6px;margin-top:4px;text-decoration:none;box-shadow:0 2px 6px #16a34a4d;letter-spacing:-.01em}.auth-btn:hover{background:#15803d}.auth-btn:disabled{opacity:.5;cursor:not-allowed}.auth-error{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5;border-radius:8px;padding:9px 12px;font-size:.85rem;margin-bottom:16px;display:flex;align-items:center;gap:6px}.auth-success{background:#dcfce7;color:#166534;border:1px solid #86efac;border-radius:8px;padding:20px;font-size:.9rem;text-align:center;line-height:1.6}.auth-switch{text-align:center;font-size:.85rem;color:#64748b;margin-top:20px}.auth-switch a{color:#16a34a;text-decoration:none;font-weight:700}.auth-cgu{font-size:.78rem;color:#64748b;line-height:1.5;margin-bottom:14px}.auth-cgu a{color:#16a34a;text-decoration:none}.app-layout{display:flex;height:100vh;overflow:hidden}.sidebar{width:220px;flex-shrink:0;background:#fff;border-right:1px solid #e2e8f0;display:flex;flex-direction:column;overflow:hidden;transition:transform .25s ease;z-index:200}.sidebar-logo{padding:22px 20px 20px;border-bottom:1px solid #e2e8f0;flex-shrink:0;min-height:104px;display:flex;align-items:center}.sidebar-logo img{width:100%;max-height:81px;object-fit:contain;display:block}.sidebar-nav{flex:1;padding:12px 10px;overflow-y:auto}.nav-item{display:flex;align-items:center;gap:10px;padding:10px 12px;font-size:.9rem;font-weight:500;color:#1e293b;text-decoration:none;border-radius:8px;margin-bottom:2px;transition:all .15s;letter-spacing:-.01em}.nav-item:hover{background:#f1f5f9;color:#0f172a}.nav-item.active{background:#f0fdf4;color:#16a34a;font-weight:700;box-shadow:inset 3px 0 #16a34a}.nav-item i{font-size:1.1rem;width:20px;text-align:center;flex-shrink:0;opacity:.75}.nav-item.active i{opacity:1}.sidebar-footer{padding:14px 18px;border-top:1px solid #e2e8f0;flex-shrink:0;background:#f8fafc}.sidebar-company{font-size:.85rem;font-weight:700;color:#0f172a;margin-bottom:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-logout{display:flex;align-items:center;gap:6px;font-size:.8rem;color:#64748b;background:none;border:none;cursor:pointer;padding:0;font-family:inherit;font-weight:500;transition:color .15s}.sidebar-logout:hover{color:#dc2626}.app-main{flex:1;display:flex;flex-direction:column;overflow:hidden;background:#f1f5f9;min-width:0}.mobile-topbar{display:none;align-items:center;justify-content:space-between;padding:10px 14px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0}.hamburger-btn{width:40px;height:40px;border:none;background:none;cursor:pointer;font-size:24px;color:#16a34a;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:background .15s}.hamburger-btn:hover{background:#f1f5f9}.sidebar-overlay{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:199}@media (max-width: 768px){.sidebar{position:fixed;left:0;top:0;bottom:0;transform:translate(-100%)}.sidebar.sidebar-open{transform:translate(0);box-shadow:4px 0 24px #00000026}.sidebar-overlay{display:block}.mobile-topbar{display:flex}.app-main{width:100%}.g2,.g3{grid-template-columns:1fr!important}.g4{grid-template-columns:repeat(2,minmax(0,1fr))!important}.data-table{font-size:13px}.page-content{padding:12px}.page-topbar{padding:0 12px;height:56px}.page-topbar-title{font-size:1.1rem}.btn-sm{font-size:13px;padding:8px 14px}.page-topbar-full{height:auto!important;flex-direction:column;align-items:stretch;padding:10px 12px!important;gap:8px}.page-topbar-full .btn-primary{width:100%;justify-content:center}}.stepper{display:flex;gap:0;margin-bottom:14px;background:#f1f5f9;border-radius:10px;padding:3px}.stepper-item{flex:1;text-align:center;padding:7px 2px;border-radius:8px;font-size:.85rem;cursor:pointer;color:#64748b;font-weight:500;transition:all .15s;-webkit-user-select:none;user-select:none}.stepper-item.active{background:#fff;color:#16a34a;font-weight:700;box-shadow:0 1px 3px #00000014}.stepper-item.done{color:#16a34a}.cfg-section-label{font-size:.7rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.07em;margin:8px 0 5px;padding-bottom:4px;border-bottom:1px solid #e2e8f0}.cfg-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-bottom:4px}.cfg-item{cursor:pointer;border:1px solid #e2e8f0;border-radius:8px;padding:6px;text-align:center;transition:all .15s;background:#f8fafc}.cfg-item:hover,.cfg-item.active{border-color:#16a34a;background:#f0fdf4}.cfg-item-label{font-size:.72rem;color:#64748b;margin-top:2px}.cfg-item.active .cfg-item-label{color:#15803d;font-weight:700}.win-wrap{background:#475569;border-radius:12px;overflow:hidden;width:100%;height:560px;display:flex;align-items:center;justify-content:center;margin-bottom:6px}.win-wrap svg{width:100%;height:100%;display:block}.cfg-hint{font-size:.78rem;color:#94a3b8;text-align:center;margin-bottom:8px}.qbtn{width:22px;height:22px;border-radius:4px;border:1px solid #e2e8f0;background:#f8fafc;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;transition:background .15s}.qbtn:hover{background:#f0fdf4;border-color:#16a34a}.upload-zone{border:2px dashed #cbd5e1;border-radius:8px;padding:16px;text-align:center;cursor:pointer;transition:all .15s;background:#f8fafc}.upload-zone:hover{border-color:#16a34a;background:#f0fdf4}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;align-items:center;justify-content:center;z-index:9999;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-box{background:#fff;border-radius:16px;padding:20px;width:320px;max-height:85vh;overflow-y:auto;box-shadow:0 25px 60px #0003;border:1px solid #e2e8f0}.modal-header{display:flex;align-items:center;justify-content:space-between;font-size:.875rem;font-weight:700;margin-bottom:14px;color:#0f172a}.modal-close{background:none;border:none;cursor:pointer;font-size:16px;color:#94a3b8;line-height:1;padding:2px;border-radius:4px}.modal-close:hover{color:#475569}.ouv-section-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#64748b;margin-bottom:6px;margin-top:6px}.ouv-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-bottom:6px}.ouv-item{display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;padding:5px 2px;border-radius:7px;border:1px solid #e2e8f0;background:#f8fafc;transition:all .15s}.ouv-item:hover,.ouv-item.selected{border-color:#16a34a;background:#f0fdf4}.ouv-label{font-size:.7rem;color:#64748b;text-align:center}.ouv-item.selected .ouv-label{color:#15803d;font-weight:700}.form-error{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5;border-radius:7px;padding:8px 11px;font-size:.8rem;margin-bottom:10px}@media (max-width: 768px){.cfg-layout{grid-template-columns:1fr!important}.cfg-grid{grid-template-columns:repeat(3,1fr)!important}}.metrics-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.metric{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:18px 20px;box-shadow:0 1px 3px #0000000f}.metric-label{font-size:.7rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.07em;margin-bottom:6px}.metric-value{font-size:1.75rem;font-weight:800;color:#0f172a;line-height:1.1}.metric-sub{font-size:.72rem;color:#94a3b8;margin-top:4px}.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.mb{margin-bottom:14px}.card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:18px 20px;box-shadow:0 1px 3px #0000000f}.card-header{font-size:.9rem;font-weight:700;color:#0f172a;margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid #f1f5f9;display:flex;align-items:center;justify-content:space-between}.data-table{width:100%;border-collapse:collapse;font-size:.85rem}.data-table th{padding:11px 16px;text-align:left;font-size:.7rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.07em;background:#f8fafc;border-top:1px solid #e2e8f0;border-bottom:1px solid #e2e8f0;white-space:nowrap}.data-table td{padding:13px 16px;border-bottom:1px solid #f1f5f9;vertical-align:middle;color:#1e293b}.data-table tbody tr:last-child td{border-bottom:none}.data-table tbody tr:hover td{background:#f8fafc;cursor:default}.badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:700;white-space:nowrap;letter-spacing:.02em}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:8px;border:1px solid #cbd5e1;background:#fff;color:#1e293b;font-size:.85rem;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s;white-space:nowrap;box-shadow:0 1px 2px #0000000d;letter-spacing:-.01em}.btn:hover{background:#f8fafc;border-color:#94a3b8}.btn-primary{background:#16a34a;color:#fff;border-color:#16a34a;box-shadow:0 1px 3px #16a34a40}.btn-primary:hover{background:#15803d;border-color:#15803d}.btn-danger{color:#dc2626;border-color:#fca5a5}.btn-danger:hover{background:#fef2f2;border-color:#dc2626}.btn-sm{padding:5px 11px;font-size:.78rem;border-radius:6px}.btn:disabled{opacity:.4;cursor:not-allowed;box-shadow:none}.filter-row{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}.filter-btn{padding:6px 14px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.78rem;font-weight:600;cursor:pointer;color:#64748b;transition:all .15s;white-space:nowrap}.filter-btn:hover{background:#f8fafc;border-color:#94a3b8;color:#1e293b}.filter-btn.active{background:#16a34a;color:#fff;border-color:#16a34a}.page-topbar{display:flex;align-items:center;justify-content:space-between;padding:0 24px;height:62px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;box-shadow:0 1px 3px #0000000a}.page-topbar-title{font-size:1.15rem;font-weight:800;color:#0f172a;letter-spacing:-.02em}.page-content{flex:1;overflow-y:auto;padding:20px 24px}.field{margin-bottom:12px}.field label{display:block;font-size:.75rem;font-weight:700;color:#475569;margin-bottom:5px;letter-spacing:.02em;text-transform:uppercase}.field input,.field select,.field textarea{width:100%;padding:9px 12px;border:1px solid #cbd5e1;border-radius:8px;font-size:.875rem;font-family:inherit;background:#fff;color:#0f172a;box-sizing:border-box;transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:#16a34a;box-shadow:0 0 0 3px #16a34a1a}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-box{background:#fff;border-radius:16px;padding:24px;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;box-shadow:0 25px 60px #0003,0 8px 20px #0000001a;border:1px solid #e2e8f0}.modal-header{display:flex;align-items:center;justify-content:space-between;font-size:.95rem;font-weight:800;margin-bottom:20px;color:#0f172a;padding-bottom:16px;border-bottom:1px solid #f1f5f9;letter-spacing:-.02em}.modal-close{background:none;border:none;cursor:pointer;font-size:18px;color:#94a3b8;padding:4px;line-height:1;border-radius:6px;transition:all .15s}.modal-close:hover{color:#475569;background:#f1f5f9}.avatar{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;flex-shrink:0;border:1px solid rgba(0,0,0,.08)}.bar-chart{display:flex;align-items:flex-end;gap:6px;padding:4px 0 0}.bc-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px}.bc-val{font-size:8px;color:#94a3b8}.bc-bar{width:100%;border-radius:3px 3px 0 0;min-height:3px}.bc-lbl{font-size:9px;color:#94a3b8}.prog-bar{height:6px;background:#f1f5f9;border-radius:4px;overflow:hidden}.prog-fill{height:100%;border-radius:4px;transition:width .4s ease}.spin{animation:spin .7s linear infinite;display:inline-block}.tabs{display:flex;gap:0;border-bottom:1px solid #e2e8f0;margin-bottom:20px}.tab{padding:11px 18px;font-size:.85rem;font-weight:500;color:#64748b;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .15s}.tab:hover{color:#1e293b}.tab.active{color:#16a34a;border-bottom-color:#16a34a;font-weight:700}.mat-pills{display:flex;gap:6px;margin-bottom:16px}.mat-pill{padding:6px 16px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.78rem;font-weight:600;cursor:pointer;color:#64748b;transition:all .15s}.mat-pill:hover{background:#f8fafc;border-color:#94a3b8}.mat-pill.pvc{background:#dcfce7;color:#166534;border-color:#86efac;font-weight:700}.mat-pill.alu{background:#dbeafe;color:#1e40af;border-color:#93c5fd;font-weight:700}.mat-pill.bois{background:#fef9c3;color:#854d0e;border-color:#fde047;font-weight:700}.item-row{display:flex;align-items:center;gap:10px;padding:13px 0;border-bottom:1px solid #f1f5f9}.item-row:last-of-type{border-bottom:none}.item-row-name{font-size:.875rem;font-weight:600;color:#0f172a;flex:1}.item-row-sub{font-size:.78rem;color:#94a3b8;flex:2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.color-swatch{width:20px;height:20px;border-radius:50%;border:1px solid rgba(0,0,0,.1);flex-shrink:0}input[placeholder*=Rechercher]{border:1px solid #cbd5e1!important;border-radius:8px!important;background:#fff!important;font-size:.875rem!important;padding:9px 14px!important;color:#0f172a!important;box-shadow:0 1px 2px #0000000a;transition:border-color .15s,box-shadow .15s}input[placeholder*=Rechercher]:focus{outline:none;border-color:#16a34a!important;box-shadow:0 0 0 3px #16a34a1a!important}.client-row{padding:14px 18px;border-bottom:1px solid #f1f5f9;transition:background .1s}.client-row:hover{background:#f8fafc}.client-row:last-child{border-bottom:none}.devis-cards-mobile{display:none}.devis-table-desktop{display:table}.clients-cards-mobile{display:none}.clients-table-desktop{display:table}@media (max-width: 768px){.metrics-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.devis-cards-mobile{display:block}.devis-table-desktop{display:none}.clients-cards-mobile{display:block}.clients-table-desktop{display:none}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px}:root{--accent: #16a34a;--accent-dark: #15803d;--accent-light: #f0fdf4;--danger: #dc2626;--warning: #d97706;--border: #e2e8f0;--border-input: #cbd5e1;--text-primary: #0f172a;--text-secondary: #475569;--text-muted: #94a3b8;--bg-app: #f1f5f9;--bg-surface: #f8fafc;--shadow-sm: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.05);--shadow-md: 0 4px 12px rgba(0,0,0,.08), 0 2px 6px rgba(0,0,0,.04);--shadow-lg: 0 10px 30px rgba(0,0,0,.1), 0 4px 12px rgba(0,0,0,.06)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;font-size:1rem;color:var(--text-primary);background:var(--bg-app);line-height:1.6;-webkit-font-smoothing:antialiased}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}@keyframes spin{to{transform:rotate(360deg)}}.spin{display:inline-block;animation:spin .7s linear infinite}.app-loading{display:flex;align-items:center;justify-content:center;height:100vh;font-size:2rem;color:var(--accent)}.btn{border:1px solid var(--border-input);border-radius:8px;padding:9px 18px;font-size:.9rem;cursor:pointer;background:#fff;color:var(--text-primary);transition:all .15s;display:inline-flex;align-items:center;gap:7px;font-family:inherit;font-weight:600;box-shadow:var(--shadow-sm);letter-spacing:-.01em}.btn:hover{background:var(--bg-surface);border-color:#94a3b8}.btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 1px 3px #16a34a4d,0 1px 2px #16a34a33}.btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark)}.btn-danger{color:var(--danger);border-color:#fca5a5;background:#fff}.btn-danger:hover{background:#fef2f2;border-color:var(--danger)}.btn-sm{padding:6px 12px;font-size:.82rem;border-radius:6px}.badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;font-size:.75rem;font-weight:700;letter-spacing:.02em}.badge-ok{background:#dcfce7;color:#166534}.badge-regle{background:#166534;color:#fff}.badge-warn{background:#fef9c3;color:#854d0e}.badge-danger{background:#fee2e2;color:#991b1b}.badge-info{background:#dbeafe;color:#1e40af}.badge-gray{background:#f1f5f9;color:#475569;border:1px solid #e2e8f0}.badge-pro{background:#ede9fe;color:#5b21b6}.card{background:#fff;border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:16px;box-shadow:var(--shadow-sm)}.card-header{font-size:.95rem;font-weight:700;color:var(--text-primary);margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.metric{background:#fff;border:1px solid var(--border);border-radius:12px;padding:18px 20px;box-shadow:var(--shadow-sm)}.metric-label{font-size:.72rem;font-weight:700;color:var(--text-secondary);margin-bottom:6px;text-transform:uppercase;letter-spacing:.07em}.metric-value{font-size:1.8rem;font-weight:800;color:var(--text-primary);line-height:1.1}.metric-sub{font-size:.75rem;margin-top:5px;color:var(--text-muted)}.metric-up{color:#16a34a!important}.metric-down{color:#dc2626!important}.g2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.mb{margin-bottom:18px}.data-table{width:100%;border-collapse:collapse;font-size:.9rem}.data-table th{text-align:left;padding:11px 16px;color:var(--text-secondary);font-weight:700;font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;background:var(--bg-surface);border-bottom:1px solid var(--border);border-top:1px solid var(--border);white-space:nowrap}.data-table td{padding:14px 16px;border-bottom:1px solid #f1f5f9;vertical-align:middle;color:var(--text-primary)}.data-table tr:last-child td{border:none}.data-table tbody tr:hover td{background:#f8fafc}.field{display:flex;flex-direction:column;gap:5px;margin-bottom:14px}.field label{font-size:.8rem;color:var(--text-secondary);font-weight:700;letter-spacing:.02em}.field input,.field select,.field textarea{font-size:.9rem;padding:10px 13px;border:1px solid var(--border-input);border-radius:8px;background:#fff;color:var(--text-primary);width:100%;font-family:inherit;transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #16a34a1f}.page-topbar{height:62px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 24px;flex-shrink:0;box-shadow:0 1px 3px #0000000a}.page-topbar-title{font-size:1.2rem;font-weight:800;color:var(--text-primary);letter-spacing:-.02em}.page-content{flex:1;overflow-y:auto;padding:22px 24px}@media (max-width: 768px){html{font-size:15px}.btn{padding:8px 12px}.btn-sm{padding:5px 10px}.card{padding:14px}.g2,.g3,.g4{grid-template-columns:1fr!important;gap:10px}.field input,.field select,.field textarea{font-size:.9rem;padding:9px 11px}.win-wrap{min-height:220px!important;height:220px!important}}
