Files
scalesApp/frontend/src/components/ReportEditor/a4/A4Canvas.css
T
2026-09-23 20:35:43 +03:00

147 lines
2.9 KiB
CSS

/* A4 designer canvas — screen only. Print styles arrive in Phase 4. */
.a4-canvas-container {
flex: 1;
overflow: auto;
background: var(--desk);
padding: var(--space-6);
display: flex;
justify-content: center;
align-items: flex-start;
}
.a4-page {
position: relative;
background: #fff;
color: #000;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.35);
flex: none;
}
.a4-page.crosshair {
cursor: crosshair;
}
/* Margin and page-centre overlay — purely visual, never intercepts the mouse */
.a4-overlay {
position: absolute;
inset: 0;
pointer-events: none;
z-index: 1;
}
.a4-margin-line {
position: absolute;
border: 0 dashed #59a2e0;
}
.a4-margin-line.vertical {
top: 0;
bottom: 0;
border-left-width: 1px;
}
.a4-margin-line.horizontal {
left: 0;
right: 0;
border-top-width: 1px;
}
.a4-center-line {
position: absolute;
border: 0 dashed #e08db5;
}
.a4-center-line.vertical {
top: 0;
bottom: 0;
border-left-width: 1px;
}
.a4-center-line.horizontal {
left: 0;
right: 0;
border-top-width: 1px;
}
/* Smart alignment guides — shown only while dragging.
A magenta accent, as Figma and PowerPoint use: it reads as UI chrome rather
than as page content, which matters on a page that is otherwise black on
white. Stays 1px at every zoom for the same reason — a guide marks a
position, it does not have a width on the paper. */
.a4-guide-overlay {
position: absolute;
inset: 0;
pointer-events: none;
z-index: 20;
}
.a4-guide {
position: absolute;
background: #ff00c8;
}
.a4-guide--v {
top: 0;
bottom: 0;
width: 1px;
}
.a4-guide--h {
left: 0;
right: 0;
height: 1px;
}
/* Centre alignments get a distinct cyan so "centres match" is readable at a
glance from "edges match" — the two look identical otherwise. */
.a4-guide--element-center,
.a4-guide--page-center {
background: #00b8d4;
}
/* Rubber-band selection rectangle */
.a4-selection-rectangle {
position: absolute;
border: 1px dashed var(--accent);
background: var(--accent-soft);
pointer-events: none;
z-index: 15;
}
/* Preview mode — the pages layout() produced, stacked with a visible break.
Same array the print path consumes, which is what makes "preview page count
equals printed page count" structural rather than coincidental. */
.a4-preview-pages {
display: flex;
flex-direction: column;
align-items: center;
gap: 0;
}
.a4-preview-page-wrapper {
display: flex;
flex-direction: column;
align-items: center;
}
.a4-preview-page-break {
width: 100%;
padding: var(--space-1-5) 0 var(--space-4);
text-align: center;
font-family: var(--font-sans);
font-size: var(--fs-xs);
color: var(--desk-text);
border-top: 1px dashed color-mix(in srgb, var(--desk-text) 40%, transparent);
margin-top: var(--space-4);
}
.a4-preview-el {
position: absolute;
box-sizing: border-box;
overflow: hidden;
white-space: pre-wrap;
word-break: break-word;
line-height: 1.2;
}