:root{--bg:#f4f6f8;--surface:#fff;--ink:#15212f;--muted:#647386;--line:#dfe5eb;--blue:#1d5fd1;--blue-dark:#174ca7;--blue-soft:#edf4ff;--green:#16754b;--green-soft:#eaf8f0;--amber:#c66a05;--amber-dark:#9f5200;--amber-soft:#fff6e8;--red:#c7362f;--red-soft:#fff0ef;--radius:12px;--shadow:0 8px 28px rgba(27,45,68,.08);font-family:Inter,Segoe UI,Arial,sans-serif;color:var(--ink);background:var(--bg)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:0}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-header{height:64px;gap:40px;padding:0 max(24px,calc((100vw - 1440px)/2));background:#fff;border-bottom:1px solid var(--line);position:-webkit-sticky;position:sticky;top:0;z-index:40}.app-header,.brand{display:flex;align-items:center}.brand{gap:10px;font-weight:800;letter-spacing:.02em;font-size:14px}.brand-mark{width:30px;height:30px;display:grid;place-items:center;background:var(--blue);color:white;border-radius:8px;font-size:16px}.app-header nav,.app-header nav a{height:100%;display:flex;align-items:center}.app-header nav a{padding:0 8px;font-size:14px;font-weight:650;color:var(--muted);border-bottom:2px solid transparent}.app-header nav a.nav-active{color:var(--blue);border-color:var(--blue)}.page{max-width:1440px;margin:0 auto;padding:28px 24px 72px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:22px}.page-head h1{margin:0 0 7px;font-size:28px;line-height:1.2;letter-spacing:-.025em}.page-head p{margin:0;color:var(--muted);font-size:14px}.button{min-height:42px;border:1px solid var(--line);border-radius:9px;background:white;padding:0 16px;color:var(--ink);font-weight:700;font-size:13px;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:.15s ease}.button:hover{border-color:#b9c6d3;transform:translateY(-1px)}.button.primary{background:var(--blue);border-color:var(--blue);color:white}.button.primary:hover{background:var(--blue-dark)}.button.warning{background:var(--amber);border-color:var(--amber);color:white}.button.danger{color:var(--red);border-color:#efc4c1}.button:disabled{cursor:not-allowed;opacity:.52;transform:none}.icon-button{width:36px;height:36px;border:1px solid var(--line);background:white;border-radius:8px;display:grid;place-items:center;color:var(--muted)}.stepper{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:13px 18px;margin-bottom:20px;display:grid;grid-template-columns:repeat(4,1fr);box-shadow:0 2px 10px rgba(27,45,68,.03)}.step{display:flex;align-items:center;gap:9px;font-size:12px;font-weight:700;color:var(--muted);position:relative}.step:not(:last-child):after{content:"";height:1px;background:var(--line);position:absolute;left:calc(50% + 38px);right:12px;top:15px}.step-number{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--blue-soft);color:var(--blue);flex:0 0 auto}.quote-layout{display:grid;grid-template-columns:minmax(0,1.85fr) minmax(320px,1fr);grid-gap:20px;gap:20px;align-items:start}.form-stack{display:grid;grid-gap:16px;gap:16px;min-width:0}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 2px 12px rgba(27,45,68,.035)}.panel-head{padding:18px 20px 14px;justify-content:space-between;gap:16px;border-bottom:1px solid #edf0f3}.panel-head,.panel-title{display:flex;align-items:center}.panel-title{gap:10px}.panel-title h2{margin:0;font-size:15px;letter-spacing:-.01em}.section-number{width:26px;height:26px;border-radius:7px;display:grid;place-items:center;background:var(--blue);color:white;font-size:12px;font-weight:800}.panel-body{padding:20px}.fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:16px;gap:16px}.field{display:grid;grid-gap:7px;gap:7px;min-width:0}.field.full{grid-column:1/-1}.field label{color:#435267;font-size:12px;font-weight:700}.input,.select,.textarea{width:100%;min-height:42px;border:1px solid #ced7e0;border-radius:8px;padding:9px 11px;color:var(--ink);background:white;outline:none;font-size:13px}.input:focus,.select:focus,.textarea:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(29,95,209,.1)}.textarea{min-height:82px;resize:vertical}.field-help{font-size:11px;line-height:1.45;color:var(--muted)}.input-row{display:flex;gap:8px}.input-row .input{flex:1 1}.status-line{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px}.status-dot{width:7px;height:7px;border-radius:50%;background:#94a1b1}.status-line.saved .status-dot{background:var(--green)}.status-line.saving .status-dot{background:var(--amber);animation:pulse 1s infinite}.status-line.conflict{color:var(--red)}.status-line.conflict .status-dot{background:var(--red)}@keyframes pulse{50%{opacity:.35}}.product-search{position:relative}.search-results{position:absolute;left:0;right:0;top:calc(100% + 6px);background:white;border:1px solid var(--line);border-radius:9px;box-shadow:var(--shadow);z-index:20;max-height:260px;overflow:auto}.search-result{width:100%;padding:12px;text-align:left;background:white;border:0;border-bottom:1px solid #eef1f4;display:flex;justify-content:space-between;gap:16px}.search-result:hover{background:var(--blue-soft)}.search-result:last-child{border-bottom:0}.search-result strong{display:block;font-size:13px}.search-result span{color:var(--muted);font-size:11px}.table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;min-width:900px}.data-table th{text-align:left;font-size:10px;text-transform:uppercase;letter-spacing:.045em;color:#6a788a;background:#f7f9fb;padding:11px 10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.data-table td{padding:12px 10px;border-bottom:1px solid #edf0f3;font-size:12px;vertical-align:middle}.data-table .number{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap}.data-table th.number{text-align:right}.product-name{min-width:180px}.product-name strong{display:block;font-size:12px;line-height:1.35}.product-name span{color:var(--muted);font-size:10px}.table-input{width:94px;min-height:36px;text-align:right;border:1px solid #bdc9d5;border-radius:7px;padding:7px;font-size:12px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.table-input.qty{width:58px}.table-input.error{border-color:var(--red);background:var(--red-soft);color:var(--red)}.price-status{display:inline-flex;align-items:center;gap:5px;font-weight:750;white-space:nowrap}.price-status:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--green)}.price-status.warning{color:var(--amber-dark)}.price-status.warning:before{background:var(--amber)}.price-status.error{color:var(--red)}.price-status.error:before{background:var(--red)}.empty-table{padding:30px;text-align:center;color:var(--muted);font-size:13px}.fee-row{display:grid;grid-template-columns:1.4fr 1fr auto 100px 36px;grid-gap:10px;gap:10px;align-items:center;margin-bottom:10px}.checkbox{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:#435267;white-space:nowrap}.split{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px}.summary{position:-webkit-sticky;position:sticky;top:84px;overflow:hidden}.summary .panel-head{background:#152b4b;color:white;border:0;padding:18px 20px}.summary .panel-head .section-number{background:white;color:#152b4b}.summary-body{padding:19px 20px 20px}.summary-lines{display:grid;grid-gap:10px;gap:10px}.summary-line{display:flex;align-items:baseline;justify-content:space-between;gap:16px;font-size:12px;color:#536174}.summary-line strong{color:var(--ink);font-size:13px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.summary-total{margin:15px -20px 0;padding:15px 20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;align-items:baseline;justify-content:space-between;font-size:12px;font-weight:800}.summary-total strong{font-size:22px;color:var(--blue);letter-spacing:-.02em}.health{margin-top:16px;border:1px solid #f1d6ad;border-radius:10px;background:var(--amber-soft);padding:14px}.health.ok{background:var(--green-soft);border-color:#bfe4ce}.health.blocked{background:var(--red-soft);border-color:#efc4c1}.health-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.health-title span:first-child{font-size:10px;font-weight:850;letter-spacing:.06em;color:#546173}.health-badge{font-size:10px;font-weight:850;color:var(--amber-dark)}.health.ok .health-badge{color:var(--green)}.health.blocked .health-badge{color:var(--red)}.health-grid{display:grid;grid-template-columns:1fr auto;grid-gap:7px 14px;gap:7px 14px;font-size:11px;color:#566477}.health-grid strong{color:var(--ink);text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.checklist{display:grid;grid-gap:7px;gap:7px;margin:15px 0;font-size:11px;color:#516073}.check-item{display:flex;gap:7px;align-items:center}.check-icon{color:var(--green);font-weight:900}.check-icon.bad{color:var(--red)}.publish-button{width:100%;min-height:48px;font-size:12px;letter-spacing:.035em}.publish-note{margin:9px 0 0;text-align:center;color:var(--amber-dark);font-size:10px;line-height:1.4}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.toolbar .input{max-width:340px}.toolbar .select{width:180px}.list-table{min-width:980px}.status-badge{display:inline-flex;border-radius:999px;padding:5px 9px;font-size:10px;font-weight:800;background:#eef2f6;color:#526174;white-space:nowrap}.status-badge.PUBLISHED{background:var(--green-soft);color:var(--green)}.status-badge.DRAFT{background:var(--blue-soft);color:var(--blue)}.status-badge.CANCELLED{background:var(--red-soft);color:var(--red)}.quick-actions{display:flex;align-items:center;gap:8px}.text-action{color:var(--blue);font-size:11px;font-weight:750;border:0;background:transparent;padding:4px}.modal-backdrop{position:fixed;inset:0;background:rgba(12,24,41,.52);z-index:100;display:grid;place-items:center;padding:24px}.modal{width:min(520px,100%);max-height:calc(100vh - 48px);overflow:auto;background:white;border-radius:14px;box-shadow:0 22px 70px rgba(0,0,0,.22)}.modal-head{padding:20px 22px 14px;border-bottom:1px solid var(--line)}.modal-head h3{margin:0 0 6px;font-size:18px}.modal-head p{margin:0;font-size:12px;color:var(--muted)}.modal-body{padding:20px 22px;display:grid;grid-gap:15px;gap:15px}.modal-actions{padding:14px 22px 20px;display:flex;justify-content:flex-end;gap:10px}.preview-sheet{background:white;border:1px solid var(--line);width:min(850px,100%);min-height:1000px;margin:auto;padding:54px;box-shadow:var(--shadow)}.preview-brand{color:var(--blue);font-weight:850}.preview-sheet h1{font-size:26px;margin:22px 0 8px}.preview-sheet table{width:100%;border-collapse:collapse;margin:28px 0}.preview-sheet td,.preview-sheet th{padding:10px;border-bottom:1px solid var(--line);text-align:left;font-size:12px}.preview-sheet td:not(:first-child),.preview-sheet th:not(:first-child){text-align:right}.preview-totals{margin-left:auto;width:min(330px,100%);display:grid;grid-gap:9px;gap:9px}.preview-total{display:flex;justify-content:space-between;gap:20px;font-size:12px}.preview-total.grand{font-size:17px;font-weight:850;border-top:2px solid var(--ink);padding-top:10px}.public-page{min-height:calc(100vh - 64px);padding:40px 20px 80px}.public-actions{max-width:850px;margin:0 auto 16px;display:flex;justify-content:flex-end}.notice{border:1px solid #bcd5f8;background:var(--blue-soft);color:#254d83;border-radius:9px;padding:12px;font-size:12px;line-height:1.5}.error-banner{margin-bottom:14px;border:1px solid #efc4c1;background:var(--red-soft);color:var(--red);border-radius:9px;padding:12px 14px;font-size:12px}@media (max-width:1020px){.quote-layout{grid-template-columns:1fr}.summary{position:static}.step{font-size:11px}.fee-row{grid-template-columns:1fr 1fr auto 90px 36px}}@media (max-width:700px){.app-header{padding:0 16px}.page{padding:20px 14px 56px}.page-head{align-items:stretch;flex-direction:column}.page-head .button{width:100%}.stepper{overflow-x:auto;grid-template-columns:repeat(4,minmax(150px,1fr))}.fields,.split{grid-template-columns:1fr}.panel-body{padding:16px}.panel-head{padding:15px 16px 12px}.fee-row{grid-template-columns:1fr 1fr;border-bottom:1px solid var(--line);padding-bottom:12px}.fee-row .checkbox{grid-column:1/-1}.toolbar{align-items:stretch}.toolbar .input,.toolbar .select{width:100%;max-width:none}.preview-sheet{padding:26px 18px;min-height:0}.preview-sheet table,.preview-sheet tbody{display:block;width:100%}.preview-sheet thead{display:none}.preview-sheet tbody tr{display:grid;grid-template-columns:.45fr 1fr 1fr;grid-gap:8px 10px;gap:8px 10px;padding:13px 0;border-bottom:1px solid var(--line)}.preview-sheet td{border:0;padding:0;min-width:0}.preview-sheet td:first-child{grid-column:1/-1;text-align:left}.preview-sheet td:not(:first-child){text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.preview-sheet td:nth-child(2):before{content:"SL"}.preview-sheet td:nth-child(3):before{content:"Đơn giá"}.preview-sheet td:nth-child(4):before{content:"Thành tiền"}.preview-sheet td:not(:first-child):before{display:block;color:var(--muted);font-size:9px;font-weight:700;text-transform:uppercase;margin-bottom:3px}.modal-backdrop{padding:12px}}