Add floating canvas panels, theme settings, and SVG line-spacing analysis.
Canvas Studio now uses dockable floating panels, app settings/help navigation, and improved SVG export; the backend adds an SVG line-spacing analysis API with SciPy acceleration and new design templates.
This commit is contained in:
+721
-57
@@ -8,27 +8,28 @@
|
||||
|
||||
:root {
|
||||
color-scheme: light;
|
||||
--bg: #f5f4f0;
|
||||
--bg: #f4f6f8;
|
||||
--workspace-bg: #eef1f5;
|
||||
--bg-panel: #ffffff;
|
||||
--bg-panel-alt: #fafaf8;
|
||||
--border: #e2e0da;
|
||||
--border-focus: #8b7355;
|
||||
--text-primary: #1a1814;
|
||||
--text-secondary: #6b6560;
|
||||
--text-muted: #a09890;
|
||||
--accent: #6b4f2e;
|
||||
--accent-light: #f0ebe3;
|
||||
--accent-hover: #5a4025;
|
||||
--bg-panel-alt: #f7f9fb;
|
||||
--border: #d8dde5;
|
||||
--border-focus: #3b82f6;
|
||||
--text-primary: #171a1f;
|
||||
--text-secondary: #4c5563;
|
||||
--text-muted: #7f8a99;
|
||||
--accent: #2563eb;
|
||||
--accent-light: #e8f1ff;
|
||||
--accent-hover: #1d4ed8;
|
||||
--on-accent: #ffffff;
|
||||
--danger: #c0392b;
|
||||
--danger-light: #fdf0ef;
|
||||
--danger: #d83a3a;
|
||||
--danger-light: #fff0f0;
|
||||
--on-danger: #ffffff;
|
||||
--success: #2d7a4f;
|
||||
--success-light: #edf7f1;
|
||||
--warn: #b8860b;
|
||||
--success: #0f8f62;
|
||||
--success-light: #e8f7f0;
|
||||
--warn: #b7791f;
|
||||
--shadow-sm: 0 1px 3px rgba(0,0,0,0.06);
|
||||
--shadow-md: 0 4px 16px rgba(0,0,0,0.08);
|
||||
--shadow-lg: 0 8px 32px rgba(0,0,0,0.12);
|
||||
--shadow-md: 0 10px 28px rgba(17,24,39,0.10);
|
||||
--shadow-lg: 0 22px 60px rgba(17,24,39,0.18);
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
@@ -41,23 +42,24 @@
|
||||
|
||||
:root[data-theme="dark"] {
|
||||
color-scheme: dark;
|
||||
--bg: #000000;
|
||||
--bg-panel: #211e19;
|
||||
--bg-panel-alt: #2a251f;
|
||||
--border: #3a332b;
|
||||
--border-focus: #b99a70;
|
||||
--text-primary: #f1ece4;
|
||||
--text-secondary: #c9bfb2;
|
||||
--text-muted: #8f8579;
|
||||
--accent: #c3a174;
|
||||
--accent-light: #3a3024;
|
||||
--accent-hover: #d5b98f;
|
||||
--on-accent: #1c1711;
|
||||
--danger: #ef7569;
|
||||
--danger-light: #3b2220;
|
||||
--on-danger: #1c1711;
|
||||
--success: #6ec794;
|
||||
--success-light: #1f3328;
|
||||
--bg: #101114;
|
||||
--workspace-bg: #15181d;
|
||||
--bg-panel: #1c1f24;
|
||||
--bg-panel-alt: #23272e;
|
||||
--border: #363c46;
|
||||
--border-focus: #76a9ff;
|
||||
--text-primary: #f2f5f8;
|
||||
--text-secondary: #c4ccd6;
|
||||
--text-muted: #8994a3;
|
||||
--accent: #6ea8ff;
|
||||
--accent-light: #24364f;
|
||||
--accent-hover: #91bdff;
|
||||
--on-accent: #09111f;
|
||||
--danger: #ff7a7a;
|
||||
--danger-light: #3b2428;
|
||||
--on-danger: #1c1011;
|
||||
--success: #58d69c;
|
||||
--success-light: #1d3329;
|
||||
--warn: #e4b95a;
|
||||
--shadow-sm: 0 1px 3px rgba(0,0,0,0.36);
|
||||
--shadow-md: 0 8px 22px rgba(0,0,0,0.34);
|
||||
@@ -126,7 +128,7 @@ body {
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
color: var(--text-primary);
|
||||
letter-spacing: -0.02em;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.navbar-actions {
|
||||
@@ -148,7 +150,7 @@ body {
|
||||
font-family: var(--font-main);
|
||||
font-size: 11px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.01em;
|
||||
letter-spacing: 0;
|
||||
border-bottom: 2px solid transparent;
|
||||
transition: all var(--transition);
|
||||
position: relative;
|
||||
@@ -182,6 +184,114 @@ body {
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.navbar-end .nav-btn {
|
||||
height: var(--nav-height);
|
||||
}
|
||||
|
||||
.app-settings {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.app-settings-trigger {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.settings-window {
|
||||
position: absolute;
|
||||
top: calc(100% + 8px);
|
||||
right: 0;
|
||||
width: 310px;
|
||||
z-index: 500;
|
||||
display: grid;
|
||||
gap: 14px;
|
||||
padding: 14px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-md);
|
||||
background: var(--bg-panel);
|
||||
box-shadow: var(--shadow-lg);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.settings-window-header {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.settings-window-title {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.settings-window-subtitle {
|
||||
margin-top: 2px;
|
||||
font-size: 11px;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.settings-section {
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.settings-section-title {
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.settings-segmented {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 3px;
|
||||
padding: 3px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-md);
|
||||
background: var(--bg-panel-alt);
|
||||
}
|
||||
|
||||
.settings-segment {
|
||||
min-width: 0;
|
||||
height: 30px;
|
||||
padding: 0 6px;
|
||||
border: none;
|
||||
border-radius: var(--radius-sm);
|
||||
background: transparent;
|
||||
color: var(--text-secondary);
|
||||
font-family: var(--font-main);
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.settings-segment:hover {
|
||||
color: var(--text-primary);
|
||||
background: var(--bg);
|
||||
}
|
||||
|
||||
.settings-segment.active {
|
||||
background: var(--accent);
|
||||
color: var(--on-accent);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.background-mode-control {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.settings-note {
|
||||
padding: 9px 10px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-sm);
|
||||
background: var(--bg-panel-alt);
|
||||
color: var(--text-muted);
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.theme-switch {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -225,6 +335,277 @@ body {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.workspace-shell {
|
||||
position: relative;
|
||||
isolation: isolate;
|
||||
background:
|
||||
linear-gradient(color-mix(in srgb, var(--border) 56%, transparent) 1px, transparent 1px),
|
||||
linear-gradient(90deg, color-mix(in srgb, var(--border) 56%, transparent) 1px, transparent 1px),
|
||||
var(--workspace-bg);
|
||||
background-size: 24px 24px;
|
||||
}
|
||||
|
||||
.workspace-canvas {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.floating-panel {
|
||||
position: absolute;
|
||||
max-width: calc(100% - 16px);
|
||||
max-height: calc(100% - 16px);
|
||||
min-width: 220px;
|
||||
min-height: 160px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-md);
|
||||
background: var(--bg-panel);
|
||||
box-shadow: var(--shadow-lg);
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.floating-panel-titlebar {
|
||||
height: 34px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
padding: 0 8px 0 10px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: var(--bg-panel-alt);
|
||||
cursor: move;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.floating-panel-title {
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 7px;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.floating-panel-title span:last-child {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.floating-panel-icon {
|
||||
display: inline-flex;
|
||||
color: var(--accent);
|
||||
font-size: 14px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.floating-panel-close {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: none;
|
||||
border-radius: var(--radius-sm);
|
||||
background: transparent;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.floating-panel-close:hover {
|
||||
background: var(--danger-light);
|
||||
color: var(--danger);
|
||||
}
|
||||
|
||||
.floating-panel-content {
|
||||
min-height: 0;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.floating-panel .panel-body {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.floating-panel .table-empty {
|
||||
min-height: 120px;
|
||||
}
|
||||
|
||||
.floating-resize {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.floating-resize-n,
|
||||
.floating-resize-s {
|
||||
left: 12px;
|
||||
right: 12px;
|
||||
height: 8px;
|
||||
cursor: ns-resize;
|
||||
}
|
||||
|
||||
.floating-resize-n { top: -4px; }
|
||||
.floating-resize-s { bottom: -4px; }
|
||||
|
||||
.floating-resize-e,
|
||||
.floating-resize-w {
|
||||
top: 12px;
|
||||
bottom: 12px;
|
||||
width: 8px;
|
||||
cursor: ew-resize;
|
||||
}
|
||||
|
||||
.floating-resize-e { right: -4px; }
|
||||
.floating-resize-w { left: -4px; }
|
||||
|
||||
.floating-resize-ne,
|
||||
.floating-resize-nw,
|
||||
.floating-resize-se,
|
||||
.floating-resize-sw {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.floating-resize-ne { top: -4px; right: -4px; cursor: nesw-resize; }
|
||||
.floating-resize-nw { top: -4px; left: -4px; cursor: nwse-resize; }
|
||||
.floating-resize-se { right: -4px; bottom: -4px; cursor: nwse-resize; }
|
||||
.floating-resize-sw { left: -4px; bottom: -4px; cursor: nesw-resize; }
|
||||
|
||||
body.floating-panel-moving,
|
||||
body.resizing {
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* ===== DOCK SNAP / STACK TABS ===== */
|
||||
/* Docked columns flush against the screen edges — strip every corner radius
|
||||
so the column reads as a continuous slab instead of a clipped card. */
|
||||
.floating-panel[data-docked="left"],
|
||||
.floating-panel[data-docked="right"] {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.floating-panel[data-hidden="true"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.floating-panel-snap-guide {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
border: 2px dashed var(--accent, #6c63ff);
|
||||
background: rgba(108, 99, 255, 0.12);
|
||||
border-radius: var(--radius-md);
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
/* Early edge "虚影" — a slim translucent strip hugging the side, shown while
|
||||
dragging near a dockable edge but before the snap commits. Lighter than the
|
||||
full snap guide so the two states read as distinct. */
|
||||
.floating-panel-edge-highlight {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
border: 1px dashed var(--accent, #6c63ff);
|
||||
background: rgba(108, 99, 255, 0.06);
|
||||
border-radius: var(--radius-md);
|
||||
z-index: 9998;
|
||||
animation: floating-panel-edge-pulse 1.4s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes floating-panel-edge-pulse {
|
||||
0%, 100% { background: rgba(108, 99, 255, 0.05); }
|
||||
50% { background: rgba(108, 99, 255, 0.13); }
|
||||
}
|
||||
|
||||
/* When a dock column has a stacked tab bar, the active panel should sit
|
||||
*below* the tab bar so it doesn't cover the tabs. Tab bar height = 30px. */
|
||||
.workspace-shell[data-has-dock-tabs="true"] .floating-panel[data-active-tab="true"] {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.dock-tab-bar {
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
height: 30px;
|
||||
overflow: hidden;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: var(--bg-panel-alt);
|
||||
/* Docked tab dock-bar sits flush against the screen edge — no rounding. */
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.dock-tab {
|
||||
flex: 1 1 0;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 0 8px;
|
||||
border: none;
|
||||
border-right: 1px solid var(--border);
|
||||
background: transparent;
|
||||
color: var(--text-muted);
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.dock-tab:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.dock-tab:hover {
|
||||
background: rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
.dock-tab.active {
|
||||
background: var(--bg-panel);
|
||||
color: var(--text-primary);
|
||||
border-bottom: 2px solid var(--accent, #6c63ff);
|
||||
}
|
||||
|
||||
.dock-tab.dragging {
|
||||
cursor: grabbing;
|
||||
opacity: 0.65;
|
||||
box-shadow: inset 0 0 0 1px var(--accent, #6c63ff);
|
||||
}
|
||||
|
||||
.dock-tab-icon {
|
||||
display: inline-flex;
|
||||
color: var(--accent, #6c63ff);
|
||||
font-size: 13px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.dock-tab-label {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dock-tab-close {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border-radius: var(--radius-sm);
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dock-tab-close:hover {
|
||||
background: var(--danger-light, rgba(220, 53, 69, 0.12));
|
||||
color: var(--danger, #dc3545);
|
||||
}
|
||||
|
||||
/* ===== SIDE PANEL ===== */
|
||||
.side-panel {
|
||||
width: var(--panel-width);
|
||||
@@ -258,7 +639,7 @@ body {
|
||||
.panel-title {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.06em;
|
||||
letter-spacing: 0;
|
||||
text-transform: uppercase;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
@@ -423,7 +804,7 @@ body {
|
||||
font-size: 11px;
|
||||
font-weight: 500;
|
||||
color: var(--text-secondary);
|
||||
letter-spacing: 0.01em;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.form-input {
|
||||
@@ -558,7 +939,7 @@ body {
|
||||
font-family: var(--font-main);
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.02em;
|
||||
letter-spacing: 0;
|
||||
transition: all var(--transition);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -666,7 +1047,7 @@ body {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
color: var(--text-muted);
|
||||
letter-spacing: 0.04em;
|
||||
letter-spacing: 0;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 4px;
|
||||
margin-top: 2px;
|
||||
@@ -725,7 +1106,7 @@ body {
|
||||
font-weight: 600;
|
||||
color: var(--text-muted);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.note-text {
|
||||
@@ -757,7 +1138,7 @@ body {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
color: var(--text-muted);
|
||||
letter-spacing: 0.04em;
|
||||
letter-spacing: 0;
|
||||
text-transform: uppercase;
|
||||
border-right: 1px solid var(--border);
|
||||
}
|
||||
@@ -902,6 +1283,80 @@ body {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.wordcloud-spacing-panel {
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.metric-box {
|
||||
min-height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 5px 8px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-sm);
|
||||
background: var(--bg-panel-alt);
|
||||
color: var(--text-secondary);
|
||||
font-family: var(--font-mono);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.spacing-result,
|
||||
.spacing-batch-list {
|
||||
display: grid;
|
||||
gap: 6px;
|
||||
padding: 8px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-sm);
|
||||
background: var(--bg-panel-alt);
|
||||
}
|
||||
|
||||
.spacing-result.stale {
|
||||
border-color: var(--warn);
|
||||
}
|
||||
|
||||
.spacing-result-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
color: var(--text-secondary);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.spacing-result-row span {
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.spacing-result-row strong {
|
||||
flex-shrink: 0;
|
||||
color: var(--text-primary);
|
||||
font-family: var(--font-mono);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.spacing-result-meta,
|
||||
.spacing-warning,
|
||||
.spacing-error {
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.spacing-result-meta {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.spacing-warning {
|
||||
color: var(--warn);
|
||||
}
|
||||
|
||||
.spacing-error {
|
||||
color: var(--danger);
|
||||
}
|
||||
|
||||
/* ===== LINK ===== */
|
||||
.text-link {
|
||||
color: var(--danger);
|
||||
@@ -1023,19 +1478,6 @@ body {
|
||||
background-position: 0 0, 0 14px, 14px -14px, -14px 0;
|
||||
}
|
||||
|
||||
.studio-topbar {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
left: 14px;
|
||||
right: 14px;
|
||||
height: 38px;
|
||||
z-index: 20;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.canvas-size-pill,
|
||||
.zoom-controls {
|
||||
display: flex;
|
||||
@@ -1065,7 +1507,7 @@ body {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 84px;
|
||||
padding: 32px 16px 80px;
|
||||
}
|
||||
|
||||
.studio-stage {
|
||||
@@ -1076,6 +1518,23 @@ body {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.studio-bottombar {
|
||||
position: absolute;
|
||||
bottom: 14px;
|
||||
height: 38px;
|
||||
z-index: 20;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.studio-bottombar .canvas-size-pill,
|
||||
.studio-bottombar .zoom-controls {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.studio-element {
|
||||
position: absolute;
|
||||
transform-origin: center center;
|
||||
@@ -1405,6 +1864,158 @@ body {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
/* ===== HELP PAGE ===== */
|
||||
.help-page {
|
||||
height: 100vh;
|
||||
background: var(--bg);
|
||||
color: var(--text-primary);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.help-main {
|
||||
height: calc(100vh - var(--nav-height));
|
||||
overflow: auto;
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
.help-hero {
|
||||
min-height: 220px;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) auto;
|
||||
align-items: end;
|
||||
gap: 24px;
|
||||
padding: 28px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-md);
|
||||
background: var(--bg-panel);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.help-kicker {
|
||||
margin-bottom: 8px;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 11px;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.help-hero h1 {
|
||||
margin-bottom: 10px;
|
||||
font-size: clamp(28px, 4vw, 48px);
|
||||
line-height: 1;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.help-hero p {
|
||||
max-width: 720px;
|
||||
color: var(--text-secondary);
|
||||
font-size: 14px;
|
||||
line-height: 1.75;
|
||||
}
|
||||
|
||||
.help-shortcuts {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.help-section {
|
||||
margin-top: 22px;
|
||||
}
|
||||
|
||||
.help-section h2 {
|
||||
margin-bottom: 12px;
|
||||
font-size: 18px;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.help-steps {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.help-step,
|
||||
.help-item,
|
||||
.help-row {
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-md);
|
||||
background: var(--bg-panel);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.help-step {
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.help-step span {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 50%;
|
||||
background: var(--accent);
|
||||
color: var(--on-accent);
|
||||
font-family: var(--font-mono);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.help-step strong,
|
||||
.help-item strong,
|
||||
.help-row strong {
|
||||
font-size: 13px;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.help-step p,
|
||||
.help-item p,
|
||||
.help-row p {
|
||||
margin: 0;
|
||||
color: var(--text-secondary);
|
||||
font-size: 12px;
|
||||
line-height: 1.65;
|
||||
}
|
||||
|
||||
.help-grid {
|
||||
display: grid;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.help-grid.two {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.help-item {
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.help-table {
|
||||
display: grid;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-md);
|
||||
overflow: hidden;
|
||||
background: var(--bg-panel);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.help-row {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(160px, 0.28fr) minmax(0, 1fr);
|
||||
gap: 14px;
|
||||
align-items: start;
|
||||
padding: 12px 14px;
|
||||
border-width: 0 0 1px;
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.help-row:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* ===== TEMPLATE HOME ===== */
|
||||
.template-home {
|
||||
min-height: 100vh;
|
||||
@@ -1587,6 +2198,43 @@ body {
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.navbar {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
min-width: 132px;
|
||||
padding: 0 12px;
|
||||
}
|
||||
|
||||
.navbar-actions {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.navbar-end {
|
||||
padding: 0 10px;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.floating-panel {
|
||||
width: min(360px, calc(100% - 16px)) !important;
|
||||
height: min(520px, calc(100% - 16px)) !important;
|
||||
}
|
||||
|
||||
.help-hero {
|
||||
grid-template-columns: 1fr;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.help-steps {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.help-grid.two,
|
||||
.help-row {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.studio-panel,
|
||||
.studio-properties {
|
||||
--panel-width: 220px;
|
||||
@@ -1608,6 +2256,23 @@ body {
|
||||
}
|
||||
|
||||
@media (max-width: 560px) {
|
||||
.floating-panel {
|
||||
left: 8px !important;
|
||||
top: 8px !important;
|
||||
}
|
||||
|
||||
.help-main {
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.help-hero {
|
||||
padding: 18px;
|
||||
}
|
||||
|
||||
.help-steps {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.template-home-main {
|
||||
padding: 14px;
|
||||
}
|
||||
@@ -1641,4 +2306,3 @@ body.resizing .side-panel,
|
||||
body.resizing .studio-panel {
|
||||
transition: none !important;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user