32aa2eeda9
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
147 lines
2.9 KiB
CSS
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;
|
|
}
|