/ proof-of-concept / plate-mechanics-sim
Sign in
proof-of-concept / plate-mechanics-sim
plate-mechanics-sim / packages / components / src / styles.css
107 lines · 7.3 KBBlameHistoryRaw
1/* Plate lab components. Prefix: pl- */
2:root {
3 --pl-bg: #ffffff;
4 --pl-panel: #f6f7f9;
5 --pl-border: #d9dde3;
6 --pl-text: #1c2430;
7 --pl-muted: #5b6573;
8 --pl-accent: #1f5fa8;
9 --pl-warn: #a35a00;
10 --pl-warn-bg: #fff4e0;
11 --pl-error: #a11d2b;
12 --pl-error-bg: #fde9eb;
13 --pl-ok: #1f7a3a;
14 --pl-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
15 --pl-font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
17.pl-panel { background: var(--pl-panel); border: 1px solid var(--pl-border); border-radius: 6px; padding: 10px 12px; }
18.pl-panel h3 { margin: 0 0 8px; font-size: 13px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--pl-muted); }
19.pl-muted { color: var(--pl-muted); }
20.pl-small { font-size: 12px; }
21.pl-mono { font-family: var(--pl-mono); }
22.pl-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
23.pl-badge { display: inline-block; padding: 1px 7px; border-radius: 10px; font-size: 11px; font-weight: 600; }
24.pl-badge-ok { background: #e3f4e8; color: var(--pl-ok); }
25.pl-badge-warn { background: var(--pl-warn-bg); color: var(--pl-warn); }
26.pl-badge-error { background: var(--pl-error-bg); color: var(--pl-error); }
27.pl-badge-info { background: #e6eef9; color: var(--pl-accent); }
28.pl-note { padding: 6px 8px; border-left: 3px solid var(--pl-warn); background: var(--pl-warn-bg); font-size: 12px; margin: 4px 0; }
29.pl-error { padding: 8px 10px; border-left: 3px solid var(--pl-error); background: var(--pl-error-bg); font-family: var(--pl-mono); font-size: 12px; white-space: pre-wrap; }
30button.pl-btn { font: inherit; padding: 5px 12px; border-radius: 5px; border: 1px solid var(--pl-border); background: #fff; cursor: pointer; color: var(--pl-text); }
31button.pl-btn:hover { border-color: var(--pl-accent); }
32button.pl-btn:disabled { opacity: 0.5; cursor: default; }
33button.pl-btn-primary { background: var(--pl-accent); color: #fff; border-color: var(--pl-accent); }
34button.pl-btn-danger { background: #fff; color: var(--pl-error); border-color: var(--pl-error); }
36/* Parameter panel */
37.pl-params { display: flex; flex-direction: column; gap: 10px; }
38.pl-group { border: 1px solid var(--pl-border); border-radius: 6px; padding: 8px 10px; background: #fff; }
39.pl-group > summary, .pl-group-title { font-weight: 600; font-size: 13px; cursor: pointer; margin-bottom: 6px; }
40.pl-field { display: grid; grid-template-columns: 1fr 100px 46px; gap: 6px; align-items: center; font-size: 12px; margin: 3px 0; }
41.pl-field label { color: var(--pl-text); }
42.pl-field input, .pl-field select, .pl-select { font: inherit; font-size: 12px; padding: 3px 5px; border: 1px solid var(--pl-border); border-radius: 4px; width: 100%; box-sizing: border-box; }
43.pl-field input.pl-invalid { border-color: var(--pl-error); background: var(--pl-error-bg); }
44.pl-field .pl-unit { color: var(--pl-muted); font-size: 11px; }
45.pl-field-wide { grid-template-columns: 1fr 2fr; }
46.pl-slider { display: grid; grid-template-columns: 1fr 70px; gap: 8px; align-items: center; font-size: 12px; }
47.pl-slider input[type=range] { width: 100%; }
48.pl-issue { font-size: 11px; color: var(--pl-error); margin: 2px 0 4px; }
49.pl-issue-warning { color: var(--pl-warn); }
50.pl-disabled { opacity: 0.55; }
51.pl-gpu { margin-top: 8px; padding-top: 6px; border-top: 1px dashed var(--pl-border); }
52.pl-check { display: flex; gap: 6px; align-items: center; font-size: 12px; cursor: pointer; }
53.pl-check input { margin: 0; }
55/* Code view */
56.pl-code { display: flex; flex-direction: column; border: 1px solid var(--pl-border); border-radius: 6px; overflow: hidden; background: #fff; min-height: 0; }
57.pl-code-tabs { display: flex; flex-wrap: wrap; gap: 2px; padding: 4px 6px; background: var(--pl-panel); border-bottom: 1px solid var(--pl-border); }
58.pl-code-tab { font: inherit; font-size: 12px; font-family: var(--pl-mono); padding: 3px 8px; border: 1px solid transparent; background: transparent; border-radius: 4px; cursor: pointer; color: var(--pl-muted); }
59.pl-code-tab.pl-active { background: #fff; border-color: var(--pl-border); color: var(--pl-text); }
60.pl-code-tab.pl-modified::after { content: " *"; color: var(--pl-warn); }
61.pl-code-toolbar { display: flex; gap: 8px; align-items: center; padding: 4px 8px; font-size: 12px; border-bottom: 1px solid var(--pl-border); color: var(--pl-muted); }
62.pl-code-editor { flex: 1; min-height: 200px; overflow: auto; }
63.pl-code-editor .cm-editor { height: 100%; font-size: 12.5px; }
64.pl-code-editor .cm-scroller { font-family: var(--pl-mono); }
66/* Field view */
67.pl-fieldview { display: flex; flex-direction: column; gap: 6px; }
68.pl-fieldview-head { display: flex; justify-content: space-between; align-items: baseline; font-size: 12px; }
69.pl-fieldview-body { display: grid; grid-template-columns: 1fr 56px; gap: 8px; align-items: start; }
70.pl-fieldview canvas { width: 100%; height: auto; display: block; image-rendering: auto; border: 1px solid var(--pl-border); background: #fff; }
71.pl-colorbar { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; font-size: 10px; color: var(--pl-muted); text-align: left; }
72.pl-colorbar canvas { width: 14px; height: 100%; min-height: 0; border: 1px solid var(--pl-border); }
73.pl-player { display: grid; grid-template-columns: auto 1fr auto auto; gap: 8px; align-items: center; font-size: 12px; }
74.pl-player input[type=range] { width: 100%; }
76/* Plots */
77.pl-plot { position: relative; }
78.pl-plot canvas { width: 100%; height: auto; display: block; }
79.pl-plot-title { font-size: 12px; font-weight: 600; margin-bottom: 2px; }
80.pl-legend { display: flex; gap: 12px; font-size: 11px; color: var(--pl-muted); flex-wrap: wrap; }
81.pl-legend span::before { content: ""; display: inline-block; width: 12px; height: 3px; margin-right: 4px; vertical-align: middle; background: var(--c); }
83/* Equations */
84.pl-equations { display: flex; flex-direction: column; gap: 10px; }
85.pl-equation { font-size: 13px; }
86.pl-equation .katex-display { margin: 4px 0; overflow-x: auto; overflow-y: hidden; }
87.pl-equation-caption { font-size: 12px; color: var(--pl-muted); }
89/* Status */
90.pl-status { font-size: 12px; display: flex; flex-direction: column; gap: 6px; }
91.pl-status table { border-collapse: collapse; }
92.pl-status td { padding: 1px 10px 1px 0; vertical-align: top; }
93.pl-status td:first-child { color: var(--pl-muted); }
94.pl-log { font-family: var(--pl-mono); font-size: 11px; white-space: pre-wrap; max-height: 120px; overflow: auto; background: #fff; border: 1px solid var(--pl-border); padding: 4px 6px; }
95.pl-progress { height: 4px; background: var(--pl-border); border-radius: 2px; overflow: hidden; }
96.pl-progress > div { height: 100%; background: var(--pl-accent); animation: pl-indeterminate 1.2s infinite ease-in-out; width: 30%; }
97@keyframes pl-indeterminate { 0% { margin-left: -30%; } 100% { margin-left: 100%; } }
99/* Compare */
100.pl-metrics { border-collapse: collapse; font-size: 12px; }
101.pl-metrics th, .pl-metrics td { text-align: right; padding: 2px 10px; border-bottom: 1px solid var(--pl-border); }
102.pl-metrics th:first-child, .pl-metrics td:first-child { text-align: left; }
104/* Plot interaction */
105.pl-linkbtn { font: inherit; font-size: 11px; font-weight: 400; margin-left: 8px; border: 0; background: none; color: var(--pl-accent); cursor: pointer; text-decoration: underline; padding: 0; }
106.pl-hint { margin-left: auto; font-style: italic; }
107.pl-legend .pl-hint::before { display: none; }
↑↓ move↵openescclose