1096 lines
21 KiB
CSS
1096 lines
21 KiB
CSS
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap");
|
|
|
|
:root {
|
|
--bg: #0b0f14;
|
|
--panel: #121822;
|
|
--panel-2: #0f1520;
|
|
--text: #e6edf3;
|
|
--muted: #9aa7b3;
|
|
--primary: #4da3ff;
|
|
--accent: #7ee787;
|
|
--danger: #ff6b6b;
|
|
--border: #223041;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
html,
|
|
body {
|
|
height: 100%;
|
|
}
|
|
body {
|
|
margin: 0;
|
|
font-family: "Poppins", sans-serif;
|
|
background: linear-gradient(180deg, var(--bg), #0d1420 50%, var(--bg));
|
|
color: var(--text);
|
|
}
|
|
|
|
.app-header,
|
|
.app-footer {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 12px 16px;
|
|
background: rgba(18, 24, 34, 0.8);
|
|
backdrop-filter: blur(6px);
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.app-footer {
|
|
border-top: 1px solid var(--border);
|
|
border-bottom: none;
|
|
justify-content: space-between;
|
|
}
|
|
.brand {
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
}
|
|
.logo-circle {
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 50%;
|
|
background: var(--primary);
|
|
color: #001225;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-weight: 700;
|
|
}
|
|
.app-header h1 {
|
|
margin: 0;
|
|
font-size: 18px;
|
|
}
|
|
.app-footer .page-counter {
|
|
display: none;
|
|
font-weight: 500;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.print-pages {
|
|
display: none;
|
|
}
|
|
.print-page {
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
background: #ffffff;
|
|
border: 1px solid #d5ddf4;
|
|
border-radius: 16px;
|
|
padding: 24px 28px 48px;
|
|
margin-bottom: 24px;
|
|
box-shadow: none;
|
|
}
|
|
.print-page .page-footer {
|
|
margin-top: 32px;
|
|
text-align: right;
|
|
font-size: 9pt;
|
|
font-weight: 500;
|
|
color: #1f3fae;
|
|
}
|
|
|
|
.container {
|
|
max-width: none;
|
|
margin: 20px auto;
|
|
padding: 0 16px;
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 16px;
|
|
}
|
|
|
|
.panel {
|
|
background: linear-gradient(180deg, var(--panel), var(--panel-2));
|
|
border: 1px solid var(--border);
|
|
border-radius: 12px;
|
|
padding: 16px;
|
|
}
|
|
|
|
h2,
|
|
h3 {
|
|
margin: 8px 0 12px;
|
|
}
|
|
label {
|
|
display: block;
|
|
font-size: 14px;
|
|
color: var(--muted);
|
|
margin-bottom: 10px;
|
|
}
|
|
input,
|
|
textarea,
|
|
select {
|
|
width: 100%;
|
|
background: #0b111a;
|
|
color: var(--text);
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 10px 12px;
|
|
margin-top: 6px;
|
|
}
|
|
input[type="date"] {
|
|
padding: 8px 10px;
|
|
}
|
|
|
|
.grid.two {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 12px;
|
|
}
|
|
.grid.three {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr 1fr;
|
|
gap: 12px;
|
|
}
|
|
.mt {
|
|
margin-top: 12px;
|
|
}
|
|
|
|
.btn {
|
|
border-radius: 8px;
|
|
border: 1px solid var(--border);
|
|
padding: 8px 12px;
|
|
cursor: pointer;
|
|
color: var(--text);
|
|
background: #0f1520;
|
|
}
|
|
.btn:hover {
|
|
filter: brightness(1.05);
|
|
}
|
|
.btn-primary {
|
|
background: var(--primary);
|
|
color: #001225;
|
|
border-color: #2b6bbf;
|
|
font-weight: 700;
|
|
}
|
|
.btn-secondary {
|
|
background: #0f1520;
|
|
}
|
|
.btn-outline {
|
|
background: transparent;
|
|
border-style: dashed;
|
|
}
|
|
.btn-danger {
|
|
background: #201014;
|
|
border-color: #4a1e27;
|
|
color: #ffd7d7;
|
|
}
|
|
|
|
.actions {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
.table {
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
}
|
|
.table-head,
|
|
.table-row {
|
|
display: grid;
|
|
grid-template-columns: 40px 2fr 80px 120px 120px 120px;
|
|
gap: 8px;
|
|
align-items: center;
|
|
}
|
|
.table-row {
|
|
align-items: start;
|
|
}
|
|
.table-head {
|
|
background: #0d1420;
|
|
padding: 10px;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.table-body {
|
|
display: grid;
|
|
gap: 8px;
|
|
padding: 10px;
|
|
}
|
|
.table-row {
|
|
background: #0b111a;
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 8px;
|
|
}
|
|
.table-row input {
|
|
margin: 0;
|
|
}
|
|
.table-row textarea.desc {
|
|
margin: 0;
|
|
min-height: 64px;
|
|
resize: vertical;
|
|
}
|
|
/* Drag & drop affordances */
|
|
.table-row.dragging {
|
|
opacity: 0.6;
|
|
}
|
|
.table-row.placeholder {
|
|
border: 2px dashed var(--border);
|
|
background: rgba(34, 48, 65, 0.35);
|
|
min-height: 48px;
|
|
}
|
|
.drag-ghost {
|
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
|
|
border: 1px solid var(--border);
|
|
background: #0b111a;
|
|
opacity: 0.9;
|
|
padding: 8px;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
/* Actions cell */
|
|
.row-actions {
|
|
display: flex;
|
|
gap: 6px;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
}
|
|
.drag-handle {
|
|
width: 28px;
|
|
height: 28px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
background: #0f1520;
|
|
color: var(--muted);
|
|
cursor: grab;
|
|
}
|
|
.drag-handle:active {
|
|
cursor: grabbing;
|
|
}
|
|
.drag-handle:focus {
|
|
outline: none;
|
|
}
|
|
.row-actions input[type="checkbox"] {
|
|
transform: translateY(1px);
|
|
}
|
|
|
|
/* Group rows in editor */
|
|
.table-row.group .group-title,
|
|
.table-row.group .group-desc {
|
|
grid-column: 2 / span 4;
|
|
}
|
|
.table-row.group .group-title {
|
|
font-weight: 600;
|
|
background: #0b111a;
|
|
border: 1px dashed var(--border);
|
|
border-radius: 6px;
|
|
padding: 8px 10px;
|
|
}
|
|
.table-row.group .group-desc {
|
|
background: #0b111a;
|
|
border: 1px dashed var(--border);
|
|
border-radius: 6px;
|
|
padding: 6px 10px;
|
|
color: var(--muted);
|
|
}
|
|
.table-row.group .row-actions {
|
|
grid-column: 6;
|
|
grid-row: 1 / span 2;
|
|
align-self: start;
|
|
}
|
|
|
|
.items-body .items-row.group-title {
|
|
display: grid;
|
|
grid-template-columns: 2fr 80px 120px 120px;
|
|
background: transparent;
|
|
font-weight: 600;
|
|
padding: 12px 16px;
|
|
text-align: left;
|
|
font-size: 16px;
|
|
gap: 8px;
|
|
align-items: flex-start;
|
|
position: relative;
|
|
}
|
|
.items-body .items-row.group-title::after {
|
|
display: none;
|
|
}
|
|
.items-body .items-row.group-title .group-title-wrap {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 4px;
|
|
}
|
|
.items-body .items-row.group-title .group-title-text {
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.6px;
|
|
}
|
|
.items-body .items-row.group-title .group-desc-inline {
|
|
font-size: 10px; /* ~8pt */
|
|
font-weight: 400;
|
|
font-family: "Poppins", sans-serif;
|
|
text-transform: none;
|
|
}
|
|
.items-body .items-row.group-title .group-col-label {
|
|
font-size: 10px;
|
|
font-weight: 500;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.6px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.items-body .items-row.group-title .group-col-label-total {
|
|
justify-content: flex-end;
|
|
}
|
|
.items-body .items-row.group-subtotal {
|
|
display: grid;
|
|
grid-template-columns: 2fr 80px 120px 120px;
|
|
gap: 8px;
|
|
padding: 10px 16px;
|
|
font-weight: 600;
|
|
position: relative;
|
|
}
|
|
.items-body .items-row.group-subtotal .group-subtotal-label {
|
|
grid-column: 1 / span 3;
|
|
}
|
|
.items-body .items-row.group-subtotal .group-subtotal-value {
|
|
text-align: right;
|
|
}
|
|
.items-body .items-row.group-subtotal::before {
|
|
content: "";
|
|
position: absolute;
|
|
left: var(--line-inset);
|
|
right: var(--line-inset);
|
|
top: 0;
|
|
height: var(--items-subtotal-line-thickness);
|
|
background: var(--items-subtotal-line-color);
|
|
}
|
|
|
|
.row-total {
|
|
text-align: right;
|
|
padding-right: 6px;
|
|
color: #1f3fae;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Preview styles */
|
|
.preview-panel,
|
|
.preview-panel * {
|
|
color: #1f3fae !important;
|
|
}
|
|
|
|
.preview-panel {
|
|
font-family: "Poppins", system-ui, -apple-system, Segoe UI, sans-serif;
|
|
background: #ffffff;
|
|
border: 1px solid #d5ddf4;
|
|
border-radius: 16px;
|
|
padding: 28px;
|
|
box-shadow: 0 18px 38px rgba(10, 25, 70, 0.12);
|
|
}
|
|
|
|
.quote-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-start;
|
|
gap: 24px;
|
|
padding-bottom: 18px;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.company {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.company-details {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 5px;
|
|
}
|
|
|
|
.logo {
|
|
width: 96px;
|
|
height: 60px;
|
|
object-fit: contain;
|
|
background: transparent;
|
|
padding: 0;
|
|
align-self: flex-start;
|
|
margin-top: -8px;
|
|
}
|
|
|
|
.company-name {
|
|
font-weight: 600;
|
|
font-size: 12pt;
|
|
letter-spacing: 0.4px;
|
|
text-transform: uppercase;
|
|
color: #163079;
|
|
}
|
|
|
|
.company-address,
|
|
.company-contact,
|
|
.company-legal {
|
|
color: #5a6c96;
|
|
font-size: 9pt;
|
|
line-height: 12pt;
|
|
font-weight: 300;
|
|
font-family: "Poppins", sans-serif;
|
|
}
|
|
|
|
.company-info-block {
|
|
font-weight: 300;
|
|
font-size: 9pt;
|
|
line-height: 12pt;
|
|
}
|
|
|
|
.company-contact.stack {
|
|
display: grid;
|
|
gap: 6px;
|
|
}
|
|
|
|
.header-right {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
gap: 18px;
|
|
text-align: right;
|
|
}
|
|
|
|
.quote-dates {
|
|
display: grid;
|
|
justify-items: end;
|
|
gap: 4px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
font-size: 9pt;
|
|
color: #5a6c96;
|
|
text-align: right;
|
|
}
|
|
|
|
.quote-date-label {
|
|
font-weight: 600;
|
|
color: #1f3fae;
|
|
}
|
|
|
|
.quote-date-value {
|
|
font-weight: 500;
|
|
font-size: 11pt;
|
|
color: #1b2d53;
|
|
letter-spacing: 0.3px;
|
|
text-transform: none;
|
|
text-align: right;
|
|
}
|
|
|
|
.quote-valid {
|
|
display: grid;
|
|
gap: 2px;
|
|
justify-items: end;
|
|
}
|
|
|
|
.quote-valid-row {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 8px;
|
|
margin-top: 12px;
|
|
}
|
|
|
|
.client-block {
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 0;
|
|
padding: 0;
|
|
margin: 0;
|
|
text-align: right;
|
|
max-width: 260px;
|
|
font-family: "Poppins", sans-serif;
|
|
font-weight: 300;
|
|
font-size: 9pt;
|
|
line-height: 12pt;
|
|
}
|
|
|
|
.client-block .muted {
|
|
font-size: 9pt;
|
|
font-weight: 300;
|
|
color: #1f3fae;
|
|
letter-spacing: 1px;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.client-name {
|
|
font-weight: 300;
|
|
font-size: 9pt;
|
|
color: #1b2d53;
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.client-address,
|
|
.client-contact {
|
|
color: #5a6c96;
|
|
font-size: 9pt;
|
|
line-height: 12pt;
|
|
font-weight: 300;
|
|
font-family: "Poppins", sans-serif;
|
|
}
|
|
|
|
.client-block .client-info {
|
|
font-weight: 300;
|
|
font-size: 9pt;
|
|
line-height: 12pt;
|
|
}
|
|
|
|
.client-address {
|
|
white-space: pre-wrap;
|
|
}
|
|
|
|
.client-contact.stack {
|
|
display: grid;
|
|
gap: 4px;
|
|
justify-items: end;
|
|
}
|
|
|
|
.quote-title-block {
|
|
text-align: center;
|
|
margin-bottom: 28px;
|
|
display: grid;
|
|
}
|
|
|
|
.quote-title {
|
|
font-size: 28pt;
|
|
font-weight: 600;
|
|
color: #1f3fae;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.quote-number {
|
|
font-size: 11px; /* ~8pt */
|
|
font-weight: 400;
|
|
color: #1b2d53;
|
|
letter-spacing: 1px;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.items-section-title {
|
|
position: relative;
|
|
padding: 12px 16px;
|
|
font-family: "Poppins", sans-serif;
|
|
font-weight: 600;
|
|
font-size: 12pt;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.8px;
|
|
}
|
|
.items-section-title::before,
|
|
.items-section-title::after {
|
|
content: "";
|
|
position: absolute;
|
|
left: var(--line-inset, 16px);
|
|
right: var(--line-inset, 16px);
|
|
height: 1px;
|
|
background: #1f3fae;
|
|
}
|
|
.items-section-title::before {
|
|
top: 0;
|
|
}
|
|
.items-section-title::after {
|
|
bottom: 0;
|
|
}
|
|
|
|
.items {
|
|
--line-inset: 16px;
|
|
--items-head-line-color: #d0daf5;
|
|
--items-row-line-color: #e6ecfa;
|
|
--items-subtotal-line-color: #dbe3f7;
|
|
--items-head-line-thickness: 2px;
|
|
--items-row-line-thickness: 1px;
|
|
--items-subtotal-line-thickness: 1px;
|
|
border: none;
|
|
border-radius: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.items-head,
|
|
.items-row {
|
|
display: grid;
|
|
grid-template-columns: 2fr 80px 120px 120px;
|
|
gap: 8px;
|
|
}
|
|
|
|
.items-head {
|
|
background: #ffffff;
|
|
color: #1f3fae;
|
|
padding: 14px 16px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.6px;
|
|
position: relative;
|
|
}
|
|
.items-head::after {
|
|
content: "";
|
|
position: absolute;
|
|
left: var(--line-inset);
|
|
right: var(--line-inset);
|
|
bottom: 0;
|
|
height: var(--items-head-line-thickness);
|
|
background: var(--items-head-line-color);
|
|
}
|
|
|
|
.items-head div {
|
|
font-family: "Poppins", system-ui, -apple-system, Segoe UI, sans-serif;
|
|
font-size: 16px; /* 12pt */
|
|
font-weight: 600;
|
|
}
|
|
|
|
.items-body .items-row {
|
|
position: relative;
|
|
padding: 12px 16px;
|
|
font-size: 8pt;
|
|
font-weight: 400;
|
|
}
|
|
.items-body .items-row::after {
|
|
content: "";
|
|
position: absolute;
|
|
left: var(--line-inset);
|
|
right: var(--line-inset);
|
|
bottom: 0;
|
|
height: var(--items-row-line-thickness);
|
|
background: var(--items-row-line-color);
|
|
}
|
|
|
|
.items-body .items-row:nth-child(even) {
|
|
background: #ffffff;
|
|
}
|
|
.items-body .items-row:last-child::after {
|
|
display: none;
|
|
}
|
|
|
|
.items-row > div {
|
|
display: flex;
|
|
align-items: center;
|
|
min-width: 0;
|
|
}
|
|
.items-row > div:nth-child(2),
|
|
.items-row > div:nth-child(3) {
|
|
justify-content: center;
|
|
}
|
|
|
|
.items-row > div:last-child {
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
/* Ensure long description wraps and doesn't overflow horizontally */
|
|
.items-row > div:first-child {
|
|
white-space: pre-wrap; /* preserve newlines, allow wrapping */
|
|
overflow-wrap: anywhere; /* break long words/URLs if needed */
|
|
word-break: break-word; /* extra safety for legacy engines */
|
|
}
|
|
|
|
/* Prevent grid inputs from forcing overflow in the editor table */
|
|
.table-row input {
|
|
min-width: 0;
|
|
}
|
|
|
|
.totals {
|
|
margin-top: 36px;
|
|
padding: 0;
|
|
border: none;
|
|
background: transparent;
|
|
max-width: 280px;
|
|
margin-left: auto;
|
|
display: grid;
|
|
gap: 4px;
|
|
}
|
|
|
|
.totals .row {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
padding: 6px 0;
|
|
font-size: 8pt;
|
|
color: #1b2d53;
|
|
border-bottom: 1px solid #dbe3f7;
|
|
}
|
|
|
|
.totals .row span:first-child {
|
|
color: #5a6c96;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.6px;
|
|
}
|
|
|
|
.totals .grand {
|
|
font-size: 10pt;
|
|
font-weight: 600;
|
|
color: #1f3fae;
|
|
border-top: 2px solid #1f3fae;
|
|
border-bottom: none;
|
|
margin-top: 8px;
|
|
padding-top: 10px;
|
|
}
|
|
|
|
.notes {
|
|
margin-top: 32px;
|
|
color: #5a6c96;
|
|
font-size: 8pt;
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
|
|
.notes strong {
|
|
font-weight: 600;
|
|
color: #1f3fae;
|
|
}
|
|
|
|
.signature-block {
|
|
margin-top: 32px;
|
|
margin-left: auto;
|
|
max-width: 320px;
|
|
border: 1px solid #dbe3f7;
|
|
border-radius: 0;
|
|
padding: 18px 20px;
|
|
font-size: 7pt;
|
|
color: #1b2d53;
|
|
text-align: center;
|
|
font-weight: 400;
|
|
background: #ffffff;
|
|
}
|
|
|
|
/* Icon rows */
|
|
.icon-text {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.icon-text.right {
|
|
justify-content: flex-end;
|
|
}
|
|
.preview-panel .icon-text .ico {
|
|
display: none;
|
|
}
|
|
.preview-panel .icon-text {
|
|
gap: 4px;
|
|
}
|
|
|
|
.ico {
|
|
display: inline-flex;
|
|
width: 16px;
|
|
height: 16px;
|
|
align-items: center;
|
|
justify-content: center;
|
|
filter: grayscale(0.3);
|
|
opacity: 0.9;
|
|
}
|
|
|
|
@media (max-width: 980px) {
|
|
.container {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
|
|
/* Print styles */
|
|
@media print {
|
|
@page {
|
|
size: A4;
|
|
margin: 12mm 10mm 18mm 10mm; /* plus d'espace en bas pour le numéro de page */
|
|
}
|
|
|
|
html,
|
|
body {
|
|
background: #ffffff !important;
|
|
}
|
|
|
|
body {
|
|
-webkit-print-color-adjust: exact;
|
|
print-color-adjust: exact;
|
|
padding-bottom: 22mm; /* réserve de place pour le footer de page */
|
|
}
|
|
|
|
/* S'assurer que seule la preview occupe la largeur papier (Safari/Chrome macOS) */
|
|
.container {
|
|
grid-template-columns: 1fr !important;
|
|
padding: 0 !important;
|
|
margin: 0 auto !important;
|
|
max-width: 210mm;
|
|
}
|
|
|
|
/* Numérotation auto des pages (Chrome/Edge) */
|
|
body::after {
|
|
content: "Page " counter(page) " / " counter(pages);
|
|
position: fixed;
|
|
right: 10mm;
|
|
bottom: 10mm;
|
|
font-size: 9pt;
|
|
font-weight: 500;
|
|
color: #1f3fae;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.app-header,
|
|
.form-panel,
|
|
#resetBtn,
|
|
#addItemBtn {
|
|
display: none !important;
|
|
}
|
|
|
|
.app-footer {
|
|
display: none !important;
|
|
}
|
|
|
|
.preview-panel {
|
|
padding: 0 !important;
|
|
margin: 0 !important;
|
|
box-shadow: none !important;
|
|
border: none !important;
|
|
background: transparent !important;
|
|
max-width: 210mm;
|
|
width: 100%;
|
|
}
|
|
|
|
/* Affiche uniquement les pages prêtes à être imprimées */
|
|
.preview-panel {
|
|
display: block !important;
|
|
}
|
|
.print-pages {
|
|
display: none !important; /* désactive la pagination custom, on laisse le navigateur paginer */
|
|
}
|
|
|
|
.print-page {
|
|
margin: 0 !important;
|
|
box-shadow: none !important;
|
|
border: 1px solid #d5ddf4 !important;
|
|
border-radius: 10px !important;
|
|
padding: 12mm 10mm 12mm !important;
|
|
background: #ffffff !important;
|
|
display: block;
|
|
min-height: auto;
|
|
page-break-inside: auto;
|
|
page-break-after: always;
|
|
break-after: page;
|
|
}
|
|
.print-page:last-child {
|
|
page-break-after: auto;
|
|
break-after: auto;
|
|
}
|
|
.print-page .page-footer {
|
|
margin-top: 16px;
|
|
padding-top: 10px;
|
|
text-align: right;
|
|
font-size: 9pt;
|
|
font-weight: 500;
|
|
color: #1f3fae;
|
|
}
|
|
|
|
/* Grille simplifiée pour l'impression: évite l'étalement sur macOS */
|
|
.items,
|
|
.items-head,
|
|
.items-row {
|
|
width: 100%;
|
|
}
|
|
.items-head,
|
|
.items-row {
|
|
grid-template-columns: 2fr 80px 120px 120px;
|
|
}
|
|
.items-body .items-row {
|
|
break-inside: avoid;
|
|
page-break-inside: avoid;
|
|
}
|
|
}
|
|
|
|
/* ===== Templates d'impression ===== */
|
|
/* Pro Minimal: lignes fines, pas de cadres, look très sobre */
|
|
body[data-template="pro-minimal"] .preview-panel .items {
|
|
border: none;
|
|
--items-head-line-color: var(--border);
|
|
--items-row-line-color: var(--border);
|
|
--items-subtotal-line-color: var(--border);
|
|
}
|
|
body[data-template="pro-minimal"] .preview-panel .items-head {
|
|
background: transparent;
|
|
color: var(--text);
|
|
--items-head-line-thickness: 2px;
|
|
}
|
|
body[data-template="pro-minimal"] .preview-panel .items-body .items-row {
|
|
background: transparent;
|
|
}
|
|
body[data-template="pro-minimal"] .preview-panel .client-block {
|
|
background: transparent;
|
|
border-style: solid;
|
|
}
|
|
body[data-template="pro-minimal"] .preview-panel .totals {
|
|
background: transparent;
|
|
}
|
|
/* Pro Bordures: cadres nets et totaux accentués */
|
|
body[data-template="pro-borders"] .preview-panel .client-block,
|
|
body[data-template="pro-borders"] .preview-panel .items,
|
|
body[data-template="pro-borders"] .preview-panel .totals {
|
|
border-width: 2px;
|
|
border-style: solid;
|
|
border-color: var(--border);
|
|
background: #0b111a;
|
|
--items-head-line-color: var(--border);
|
|
--items-row-line-color: var(--border);
|
|
--items-subtotal-line-color: var(--border);
|
|
--items-head-line-thickness: 2px;
|
|
--items-row-line-thickness: 1px;
|
|
--items-subtotal-line-thickness: 2px;
|
|
}
|
|
body[data-template="pro-borders"] .preview-panel .items-head {
|
|
background: #0d1420;
|
|
}
|
|
body[data-template="pro-borders"] .items-body .items-row {
|
|
}
|
|
body[data-template="pro-borders"] .items-body .items-row:last-child {
|
|
}
|
|
body[data-template="pro-borders"] .items-body .items-row.group-title {
|
|
border-left: 4px solid var(--accent);
|
|
background: #0d1420;
|
|
}
|
|
body[data-template="pro-borders"] .items-body .items-row.group-subtotal {
|
|
background: #0f1520;
|
|
font-weight: 700;
|
|
}
|
|
|
|
/* Bandeau Latéral: bande verticale d'accent à gauche */
|
|
body[data-template="sidebar-accent"] .preview-panel {
|
|
position: relative;
|
|
padding-left: 14px;
|
|
}
|
|
body[data-template="sidebar-accent"] .preview-panel::before {
|
|
content: "";
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
width: 6px;
|
|
background: var(--accent);
|
|
opacity: 0.9;
|
|
}
|
|
body[data-template="sidebar-accent"] .items-body .items-row.group-title {
|
|
border-left: 0;
|
|
background: transparent;
|
|
font-weight: 800;
|
|
}
|
|
|
|
/* Minimal Centré: entête centré, table légère */
|
|
body[data-template="centered-minimal"] .quote-header {
|
|
flex-direction: column;
|
|
align-items: center;
|
|
text-align: center;
|
|
gap: 6px;
|
|
}
|
|
body[data-template="centered-minimal"] .quote-meta {
|
|
text-align: center;
|
|
justify-items: center;
|
|
}
|
|
body[data-template="centered-minimal"] .icon-text.right {
|
|
justify-content: center;
|
|
}
|
|
body[data-template="centered-minimal"] .ico {
|
|
display: none;
|
|
}
|
|
body[data-template="centered-minimal"] .preview-panel .items {
|
|
border: none;
|
|
}
|
|
body[data-template="centered-minimal"] .preview-panel .items-head {
|
|
background: transparent;
|
|
border-bottom: 2px solid var(--border);
|
|
}
|
|
body[data-template="centered-minimal"] .items-body .items-row {
|
|
background: transparent;
|
|
border-bottom: 1px dashed var(--border);
|
|
}
|
|
/* Pro Bandes: alternance de bandes sur les lignes */
|
|
body[data-template="pro-striped"]
|
|
.preview-panel
|
|
.items-body
|
|
.items-row:nth-child(even) {
|
|
background: rgba(255, 255, 255, 0.035);
|
|
}
|
|
/* Compact: paddings et tailles réduites pour tenir plus */
|
|
body[data-template="compact"] .preview-panel .items-head,
|
|
body[data-template="compact"] .preview-panel .items-body .items-row {
|
|
padding: 6px 8px;
|
|
}
|
|
body[data-template="compact"] .preview-panel {
|
|
font-size: 13px;
|
|
}
|
|
/* Autocomplete */
|
|
.ac-list {
|
|
position: absolute;
|
|
top: calc(100% + 4px);
|
|
left: 0;
|
|
right: 0;
|
|
z-index: 50;
|
|
background: #0b111a;
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35);
|
|
max-height: 220px;
|
|
overflow: auto;
|
|
display: none;
|
|
}
|
|
.ac-item {
|
|
padding: 8px 10px;
|
|
cursor: pointer;
|
|
font-size: 14px;
|
|
}
|
|
.ac-item + .ac-item {
|
|
border-top: 1px dashed var(--border);
|
|
}
|
|
.ac-item:hover,
|
|
.ac-item.active {
|
|
background: #0d1420;
|
|
}
|
|
|
|
/* Modal (bibliothèque de devis) */
|
|
.modal {
|
|
position: fixed;
|
|
inset: 0;
|
|
display: none;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 100;
|
|
}
|
|
.modal[aria-hidden="false"] {
|
|
display: flex;
|
|
}
|
|
.modal-backdrop {
|
|
position: absolute;
|
|
inset: 0;
|
|
background: rgba(0, 0, 0, 0.5);
|
|
backdrop-filter: blur(2px);
|
|
}
|
|
.modal-content {
|
|
position: relative;
|
|
width: min(760px, 96vw);
|
|
max-height: 86vh;
|
|
overflow: auto;
|
|
background: linear-gradient(180deg, var(--panel), var(--panel-2));
|
|
border: 1px solid var(--border);
|
|
border-radius: 12px;
|
|
padding: 12px;
|
|
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.45);
|
|
}
|
|
.modal-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 6px 6px 12px;
|
|
border-bottom: 1px solid var(--border);
|
|
margin-bottom: 8px;
|
|
}
|
|
.modal-body {
|
|
padding: 6px;
|
|
}
|
|
.library-list {
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
.library-item {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto auto auto;
|
|
gap: 8px;
|
|
align-items: center;
|
|
background: #0b111a;
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 10px;
|
|
}
|
|
.library-item .meta {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
}
|
|
.library-item .title {
|
|
font-weight: 600;
|
|
}
|
|
.library-item .btn {
|
|
padding: 6px 10px;
|
|
}
|