@open-press/core 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/engine/cli.mjs +1 -1
  2. package/engine/commands/_shared.mjs +10 -5
  3. package/engine/commands/deploy.mjs +19 -4
  4. package/engine/output/static-server.mjs +16 -9
  5. package/package.json +1 -1
  6. package/src/openpress/app/OpenPressApp.tsx +4 -1
  7. package/src/openpress/app/OpenPressRuntime.tsx +26 -1
  8. package/src/openpress/reader/PageThumbnailsPanel.tsx +28 -5
  9. package/src/openpress/reader/SlidePresentationPage.tsx +36 -19
  10. package/src/openpress/reader/SlidePublicPage.tsx +332 -0
  11. package/src/openpress/reader/index.ts +1 -0
  12. package/src/openpress/reader/pageViewportScaleModel.ts +5 -3
  13. package/src/openpress/reader/usePageViewportScale.ts +9 -5
  14. package/src/openpress/workbench/Workbench.tsx +46 -164
  15. package/src/openpress/workbench/actions/DeploymentControl.tsx +1 -1
  16. package/src/openpress/workbench/actions/ExportControl.tsx +267 -0
  17. package/src/openpress/workbench/actions/index.ts +1 -1
  18. package/src/openpress/workbench/actions/useDeploymentWorkbench.ts +7 -2
  19. package/src/openpress/workbench/hooks/useWorkbenchNavigation.ts +42 -0
  20. package/src/openpress/workbench/project/ProjectEntryPanel.tsx +2 -278
  21. package/src/openpress/workbench/shell/WorkbenchToolbarActions.tsx +206 -0
  22. package/src/styles/openpress/app-shell.css +0 -83
  23. package/src/styles/openpress/print-route.css +1 -3
  24. package/src/styles/openpress/project-preview-panel.css +5 -783
  25. package/src/styles/openpress/public-viewer.css +7 -249
  26. package/src/styles/openpress/reader-runtime.css +0 -274
  27. package/src/styles/openpress/slide-presenter.css +150 -0
  28. package/src/styles/openpress/slide-public-viewer.css +222 -0
  29. package/src/styles/openpress/workbench-dialog.css +267 -0
  30. package/src/styles/openpress/workbench-export.css +154 -0
  31. package/src/styles/openpress/workbench-inline-editor.css +128 -0
  32. package/src/styles/openpress/workbench-panels.css +0 -88
  33. package/src/styles/openpress/workbench-search.css +257 -0
  34. package/src/styles/openpress/workbench-toolbar.css +422 -0
  35. package/src/styles/openpress/workbench.css +34 -1263
  36. package/src/styles/openpress/workspace-gallery.css +0 -5
  37. package/src/styles/openpress.css +7 -1
  38. package/vite.config.ts +16 -9
  39. package/src/openpress/workbench/actions/ExportImageControl.tsx +0 -96
  40. package/src/styles/openpress/media-workspace.css +0 -230
@@ -0,0 +1,150 @@
1
+ .openpress-slide-presenter {
2
+ position: fixed;
3
+ inset: 0;
4
+ display: grid;
5
+ width: 100%;
6
+ height: 100dvh;
7
+ min-height: 100dvh;
8
+ overflow: hidden;
9
+ background:
10
+ radial-gradient(circle at 50% 0, var(--openpress-workbench-border-muted), transparent 42%),
11
+ #070707;
12
+ color: rgb(245 245 242 / 92%);
13
+ overscroll-behavior: none;
14
+ }
15
+
16
+ .openpress-slide-presenter__stage {
17
+ position: relative;
18
+ min-width: 0;
19
+ min-height: 0;
20
+ overflow: hidden;
21
+ cursor: pointer;
22
+ }
23
+
24
+ .openpress-reader-app.openpress-slide-presenter .reader-stage {
25
+ width: 100%;
26
+ height: 100%;
27
+ min-height: 0;
28
+ overflow: hidden;
29
+ background: transparent;
30
+ overscroll-behavior: contain;
31
+ scroll-snap-type: none;
32
+ scrollbar-width: none;
33
+ }
34
+
35
+ .openpress-reader-app.openpress-slide-presenter .reader-stage::-webkit-scrollbar {
36
+ width: 0;
37
+ height: 0;
38
+ display: none;
39
+ }
40
+
41
+ .openpress-reader-app.openpress-slide-presenter .reader-pages {
42
+ --openpress-page-gap: 0;
43
+ width: 100%;
44
+ height: 100%;
45
+ min-height: 100%;
46
+ align-content: center;
47
+ padding: 0;
48
+ align-items: center;
49
+ justify-items: center;
50
+ }
51
+
52
+ .openpress-reader-app.openpress-slide-presenter .openpress-html-page {
53
+ min-height: 0;
54
+ scroll-margin-top: 0;
55
+ scroll-snap-align: center;
56
+ }
57
+
58
+ .openpress-reader-app.openpress-slide-presenter .openpress-html-page__html {
59
+ box-shadow:
60
+ 0 28px 80px rgb(0 0 0 / 34%),
61
+ 0 0 0 1px rgb(255 255 255 / 10%);
62
+ }
63
+
64
+ .openpress-slide-presenter__hud {
65
+ position: fixed;
66
+ right: 18px;
67
+ bottom: 18px;
68
+ z-index: 40;
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 8px;
72
+ border: 1px solid var(--openpress-workbench-glass-border);
73
+ border-radius: var(--openpress-workbench-radius-pill);
74
+ padding: 6px;
75
+ background: var(--openpress-workbench-glass-bg);
76
+ box-shadow: var(--openpress-workbench-glass-shadow);
77
+ backdrop-filter: var(--openpress-workbench-glass-blur);
78
+ opacity: 1;
79
+ transform: translateY(0);
80
+ transition:
81
+ opacity 160ms ease,
82
+ transform 160ms ease;
83
+ }
84
+
85
+ .openpress-slide-presenter[data-openpress-present-ui="immersive"] {
86
+ cursor: none;
87
+ }
88
+
89
+ .openpress-slide-presenter[data-openpress-present-ui="immersive"] .openpress-slide-presenter__stage {
90
+ cursor: none;
91
+ }
92
+
93
+ .openpress-slide-presenter[data-openpress-present-ui="immersive"] .openpress-slide-presenter__hud {
94
+ opacity: 0;
95
+ pointer-events: none;
96
+ transform: translateY(8px);
97
+ }
98
+
99
+ .openpress-slide-presenter__title {
100
+ max-width: 240px;
101
+ padding: 0 12px;
102
+ overflow: hidden;
103
+ color: rgb(245 245 242 / 56%);
104
+ font-family: var(--openpress-font-sans, system-ui, sans-serif);
105
+ font-size: 12px;
106
+ font-weight: 500;
107
+ letter-spacing: 0;
108
+ line-height: 30px;
109
+ text-overflow: ellipsis;
110
+ white-space: nowrap;
111
+ border-right: 1px solid rgb(255 255 255 / 10%);
112
+ }
113
+
114
+ .openpress-slide-presenter__progress {
115
+ min-width: 64px;
116
+ padding: 0 10px;
117
+ color: rgb(245 245 242 / 72%);
118
+ font-family: var(--openpress-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
119
+ font-size: 12px;
120
+ font-weight: 600;
121
+ letter-spacing: 0.08em;
122
+ line-height: 30px;
123
+ text-align: center;
124
+ }
125
+
126
+ .openpress-slide-presenter__button {
127
+ display: inline-flex;
128
+ width: 30px;
129
+ height: 30px;
130
+ align-items: center;
131
+ justify-content: center;
132
+ border: 0;
133
+ border-radius: var(--openpress-workbench-radius-pill);
134
+ padding: 0;
135
+ background: transparent;
136
+ color: rgb(245 245 242 / 68%);
137
+ cursor: pointer;
138
+ text-decoration: none;
139
+ }
140
+
141
+ .openpress-slide-presenter__button:hover,
142
+ .openpress-slide-presenter__button:focus-visible {
143
+ background: rgb(255 255 255 / 10%);
144
+ color: rgb(245 245 242 / 96%);
145
+ }
146
+
147
+ .openpress-slide-presenter__button svg {
148
+ width: 15px;
149
+ height: 15px;
150
+ }
@@ -0,0 +1,222 @@
1
+ /* ─── Slide Public Viewer ──────────────────────────────────────────────────── */
2
+ /* Always dark — both chrome and immersive modes use the same dark palette.
3
+ The only difference is whether the toolbar + thumb panel are visible. */
4
+
5
+ .openpress-slide-public {
6
+ position: fixed;
7
+ inset: 0;
8
+ display: flex;
9
+ flex-direction: column;
10
+ width: 100%;
11
+ height: 100dvh;
12
+ background: #0d0d0d;
13
+ color: rgb(245 245 242 / 90%);
14
+ overflow: hidden;
15
+ overscroll-behavior: none;
16
+ }
17
+
18
+ /* Toolbar — dark-themed override of workbench-toolbar base styles */
19
+ .openpress-slide-public__toolbar.openpress-workbench-toolbar {
20
+ flex-shrink: 0;
21
+ z-index: 10;
22
+ background: rgb(18 18 18 / 92%);
23
+ border-bottom: 1px solid var(--openpress-workbench-border-muted);
24
+ backdrop-filter: blur(12px);
25
+ }
26
+
27
+ /* Override the light-mode workbench toolbar button colours */
28
+ .openpress-slide-public__toolbar .openpress-workbench-toolbar-panel-toggle,
29
+ .openpress-slide-public__toolbar .openpress-workbench-toolbar-action {
30
+ color: rgb(245 245 242 / 60%);
31
+ }
32
+
33
+ .openpress-slide-public__toolbar .openpress-workbench-toolbar-panel-toggle:hover,
34
+ .openpress-slide-public__toolbar .openpress-workbench-toolbar-panel-toggle:focus-visible,
35
+ .openpress-slide-public__toolbar .openpress-workbench-toolbar-action:hover,
36
+ .openpress-slide-public__toolbar .openpress-workbench-toolbar-action:focus-visible {
37
+ background: var(--openpress-workbench-border-muted);
38
+ color: rgb(245 245 242 / 92%);
39
+ }
40
+
41
+ .openpress-slide-public__toolbar .openpress-workbench-toolbar-action[disabled] {
42
+ color: rgb(245 245 242 / 24%);
43
+ pointer-events: none;
44
+ }
45
+
46
+ .openpress-slide-public__nav {
47
+ display: flex;
48
+ align-items: center;
49
+ gap: 2px;
50
+ }
51
+
52
+ .openpress-slide-public__nav-btn {
53
+ width: 30px;
54
+ height: 30px;
55
+ padding: 0;
56
+ }
57
+
58
+ .openpress-slide-public__counter {
59
+ min-width: 56px;
60
+ padding: 0 6px;
61
+ font-family: var(--openpress-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
62
+ font-size: 12px;
63
+ font-weight: 600;
64
+ letter-spacing: 0.06em;
65
+ text-align: center;
66
+ color: rgb(245 245 242 / 48%);
67
+ }
68
+
69
+ /* Body: thumb panel + stage side by side */
70
+ .openpress-slide-public__body {
71
+ display: flex;
72
+ flex: 1;
73
+ min-height: 0;
74
+ overflow: hidden;
75
+ }
76
+
77
+ /* Thumbnail panel */
78
+ .openpress-slide-public__thumbs {
79
+ width: 220px;
80
+ flex-shrink: 0;
81
+ overflow-y: auto;
82
+ overflow-x: hidden;
83
+ border-right: 1px solid rgb(255 255 255 / 7%);
84
+ background: #0a0a0a;
85
+ padding: 8px 8px 24px;
86
+ scrollbar-width: thin;
87
+ scrollbar-color: rgb(255 255 255 / 14%) transparent;
88
+ }
89
+
90
+ .openpress-slide-public__thumbs.is-closed {
91
+ display: none;
92
+ }
93
+
94
+ /* Thumbnail dark-mode overrides */
95
+ .openpress-slide-public .openpress-thumb-card {
96
+ border-color: var(--openpress-workbench-border-muted);
97
+ color: rgb(245 245 242 / 56%);
98
+ }
99
+
100
+ .openpress-slide-public .openpress-thumb-card:hover {
101
+ border-color: rgb(255 255 255 / 22%);
102
+ background: rgb(255 255 255 / 4%);
103
+ }
104
+
105
+ .openpress-slide-public .openpress-thumb-card.is-active {
106
+ border-color: rgb(255 255 255 / 50%);
107
+ }
108
+
109
+ .openpress-slide-public .openpress-thumb-card__index {
110
+ color: rgb(245 245 242 / 32%);
111
+ }
112
+
113
+ .openpress-slide-public .openpress-thumb-card.is-active .openpress-thumb-card__index {
114
+ color: rgb(245 245 242 / 72%);
115
+ }
116
+
117
+ .openpress-slide-public .openpress-thumb-card__title {
118
+ color: rgb(245 245 242 / 56%);
119
+ }
120
+
121
+ /* Main slide stage */
122
+ .openpress-slide-public__stage {
123
+ flex: 1;
124
+ min-width: 0;
125
+ min-height: 0;
126
+ position: relative;
127
+ overflow: hidden;
128
+ background: #0d0d0d;
129
+ }
130
+
131
+ .openpress-reader-app.openpress-slide-public .reader-pages {
132
+ --openpress-page-gap: 0;
133
+ width: 100%;
134
+ height: 100%;
135
+ padding: 0;
136
+ align-content: center;
137
+ align-items: center;
138
+ justify-items: center;
139
+ }
140
+
141
+ /* Mini HUD — only visible in immersive (fullscreen) mode */
142
+ .openpress-slide-public__mini-hud {
143
+ position: fixed;
144
+ right: 18px;
145
+ bottom: 18px;
146
+ z-index: 40;
147
+ display: flex;
148
+ align-items: center;
149
+ gap: 6px;
150
+ border: 1px solid var(--openpress-workbench-glass-border);
151
+ border-radius: var(--openpress-workbench-radius-pill);
152
+ padding: 6px;
153
+ background: var(--openpress-workbench-glass-bg);
154
+ box-shadow: var(--openpress-workbench-glass-shadow);
155
+ backdrop-filter: var(--openpress-workbench-glass-blur);
156
+ opacity: 0;
157
+ pointer-events: none;
158
+ transform: translateY(8px);
159
+ transition: opacity 160ms ease, transform 160ms ease;
160
+ }
161
+
162
+ .openpress-slide-public__mini-counter {
163
+ min-width: 56px;
164
+ padding: 0 8px;
165
+ color: rgb(245 245 242 / 72%);
166
+ font-family: var(--openpress-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
167
+ font-size: 12px;
168
+ font-weight: 600;
169
+ letter-spacing: 0.08em;
170
+ line-height: 30px;
171
+ text-align: center;
172
+ }
173
+
174
+ .openpress-slide-public__mini-btn {
175
+ display: inline-flex;
176
+ width: 30px;
177
+ height: 30px;
178
+ align-items: center;
179
+ justify-content: center;
180
+ border: 0;
181
+ border-radius: var(--openpress-workbench-radius-pill);
182
+ padding: 0;
183
+ background: transparent;
184
+ color: rgb(245 245 242 / 68%);
185
+ cursor: pointer;
186
+ }
187
+
188
+ .openpress-slide-public__mini-btn:hover,
189
+ .openpress-slide-public__mini-btn:focus-visible {
190
+ background: rgb(255 255 255 / 10%);
191
+ color: rgb(245 245 242 / 96%);
192
+ }
193
+
194
+ .openpress-slide-public__mini-btn svg {
195
+ width: 15px;
196
+ height: 15px;
197
+ }
198
+
199
+ /* Immersive (fullscreen): hide toolbar + thumbs, reveal mini HUD */
200
+ .openpress-slide-public[data-openpress-present-ui="immersive"] {
201
+ cursor: none;
202
+ }
203
+
204
+ .openpress-slide-public[data-openpress-present-ui="immersive"] .openpress-slide-public__toolbar {
205
+ display: none;
206
+ }
207
+
208
+ .openpress-slide-public[data-openpress-present-ui="immersive"] .openpress-slide-public__thumbs {
209
+ display: none;
210
+ }
211
+
212
+ .openpress-slide-public[data-openpress-present-ui="immersive"] .openpress-slide-public__stage {
213
+ cursor: none;
214
+ }
215
+
216
+ .openpress-slide-public[data-openpress-present-ui="immersive"] .openpress-slide-public__mini-hud {
217
+ opacity: 1;
218
+ pointer-events: auto;
219
+ transform: translateY(0);
220
+ }
221
+
222
+ /* ─── End Slide Public Viewer ──────────────────────────────────────────────── */
@@ -0,0 +1,267 @@
1
+ .openpress-workbench-dialog-backdrop {
2
+ position: fixed;
3
+ inset: 0;
4
+ z-index: 1000;
5
+ display: grid;
6
+ place-items: start center;
7
+ overflow: auto;
8
+ padding: calc(var(--openpress-workbench-toolbar-height, 44px) + 28px) 28px 28px;
9
+ background: rgb(0 0 0 / 54%);
10
+ }
11
+
12
+ .openpress-workbench-dialog {
13
+ position: relative;
14
+ display: grid;
15
+ grid-template-rows: auto minmax(0, 1fr) auto;
16
+ width: min(560px, calc(100vw - 56px));
17
+ max-height: calc(100vh - var(--openpress-workbench-toolbar-height, 44px) - 56px);
18
+ overflow: hidden;
19
+ border: 1px solid var(--openpress-workbench-border);
20
+ border-radius: var(--openpress-workbench-radius-md);
21
+ background: var(--openpress-workbench-dialog-bg);
22
+ color: var(--openpress-workbench-text);
23
+ box-shadow: 0 24px 68px rgb(0 0 0 / 42%);
24
+ }
25
+
26
+ .openpress-workbench-dialog::before {
27
+ position: absolute;
28
+ top: 0;
29
+ right: 0;
30
+ left: 0;
31
+ height: 2px;
32
+ background: rgb(240 182 76 / 82%);
33
+ content: "";
34
+ }
35
+
36
+ .openpress-workbench-dialog__header,
37
+ .openpress-workbench-dialog__footer {
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: space-between;
41
+ gap: 12px;
42
+ }
43
+
44
+ .openpress-workbench-dialog__header {
45
+ align-items: flex-start;
46
+ padding: 18px 48px 14px 24px;
47
+ }
48
+
49
+ .openpress-workbench-dialog__footer {
50
+ padding: 14px 24px 18px;
51
+ }
52
+
53
+ .openpress-workbench-dialog__heading {
54
+ display: grid;
55
+ min-width: 0;
56
+ gap: 5px;
57
+ }
58
+
59
+ .openpress-workbench-dialog__eyebrow {
60
+ display: block;
61
+ color: rgb(160 166 173 / 62%);
62
+ font-family: var(--openpress-font-mono);
63
+ font-size: 10px;
64
+ font-weight: 650;
65
+ line-height: 1;
66
+ letter-spacing: 0;
67
+ text-transform: uppercase;
68
+ }
69
+
70
+ .openpress-workbench-dialog__title-row {
71
+ display: grid;
72
+ min-width: 0;
73
+ grid-template-columns: auto minmax(0, 1fr);
74
+ align-items: center;
75
+ column-gap: 8px;
76
+ min-height: 20px;
77
+ }
78
+
79
+ .openpress-workbench-dialog h2 {
80
+ margin: 0;
81
+ color: rgb(242 242 240 / 94%);
82
+ font-size: 15px;
83
+ font-weight: 650;
84
+ line-height: 20px;
85
+ }
86
+
87
+ .openpress-workbench-dialog h2::before,
88
+ .openpress-workbench-dialog h3::before {
89
+ display: none;
90
+ content: none;
91
+ }
92
+
93
+ .openpress-workbench-dialog__title-meta {
94
+ display: flex;
95
+ min-width: 0;
96
+ min-height: 20px;
97
+ align-items: center;
98
+ }
99
+
100
+ .openpress-workbench-dialog__close {
101
+ position: absolute;
102
+ top: 9px;
103
+ right: 9px;
104
+ display: inline-flex;
105
+ width: 30px;
106
+ height: 30px;
107
+ align-items: center;
108
+ justify-content: center;
109
+ border: 1px solid transparent;
110
+ border-radius: var(--openpress-workbench-radius-sm);
111
+ padding: 0;
112
+ background: transparent;
113
+ color: #aeb3b8;
114
+ cursor: pointer;
115
+ }
116
+
117
+ .openpress-workbench-dialog__close:hover {
118
+ color: #f2f2f0;
119
+ }
120
+
121
+ .openpress-workbench-dialog__close svg {
122
+ width: 14px;
123
+ height: 14px;
124
+ }
125
+
126
+ .openpress-deploy-dialog {
127
+ width: min(420px, calc(100vw - 56px));
128
+ gap: 12px;
129
+ padding: 16px;
130
+ }
131
+
132
+ .openpress-deploy-dialog__source {
133
+ display: inline-flex;
134
+ min-height: 19px;
135
+ align-items: center;
136
+ max-width: 100%;
137
+ overflow: hidden;
138
+ border: 1px solid rgb(110 231 160 / 18%);
139
+ border-radius: var(--openpress-workbench-radius-pill);
140
+ padding: 0 7px;
141
+ background: rgb(110 231 160 / 7%);
142
+ color: rgb(144 238 177 / 88%);
143
+ font-size: 10px;
144
+ font-weight: 620;
145
+ line-height: 1;
146
+ text-overflow: ellipsis;
147
+ white-space: nowrap;
148
+ }
149
+
150
+ .openpress-deploy-dialog dl {
151
+ display: grid;
152
+ gap: 8px;
153
+ margin: 0;
154
+ border-top: 1px solid var(--openpress-workbench-border-muted);
155
+ border-bottom: 1px solid var(--openpress-workbench-border-muted);
156
+ padding: 12px 0;
157
+ }
158
+
159
+ .openpress-deploy-dialog dl div {
160
+ display: grid;
161
+ min-width: 0;
162
+ grid-template-columns: 78px minmax(0, 1fr);
163
+ gap: 12px;
164
+ align-items: center;
165
+ }
166
+
167
+ .openpress-deploy-dialog dt,
168
+ .openpress-deploy-dialog dd {
169
+ margin: 0;
170
+ min-width: 0;
171
+ font-size: 11px;
172
+ line-height: 1.35;
173
+ }
174
+
175
+ .openpress-deploy-dialog dt {
176
+ color: rgb(150 156 163 / 68%);
177
+ }
178
+
179
+ .openpress-deploy-dialog dd {
180
+ overflow: hidden;
181
+ color: var(--openpress-workbench-text-soft);
182
+ text-align: left;
183
+ text-overflow: ellipsis;
184
+ white-space: nowrap;
185
+ }
186
+
187
+ .openpress-deploy-dialog dd a {
188
+ color: rgb(214 218 222 / 92%);
189
+ text-decoration: none;
190
+ }
191
+
192
+ .openpress-deploy-dialog dd a:hover {
193
+ color: rgb(240 182 76 / 94%);
194
+ text-decoration: underline;
195
+ text-underline-offset: 3px;
196
+ }
197
+
198
+ .openpress-deploy-dialog__status {
199
+ display: inline-flex;
200
+ align-items: center;
201
+ justify-content: flex-start;
202
+ gap: 6px;
203
+ color: rgb(198 204 210 / 78%);
204
+ }
205
+
206
+ .openpress-deploy-dialog__status::before {
207
+ width: 6px;
208
+ height: 6px;
209
+ flex: 0 0 auto;
210
+ border-radius: var(--openpress-workbench-radius-pill);
211
+ background: currentColor;
212
+ content: "";
213
+ }
214
+
215
+ .openpress-deploy-dialog__status[data-openpress-deploy-status="online"] {
216
+ color: var(--openpress-workbench-success);
217
+ }
218
+
219
+ .openpress-deploy-dialog__status[data-openpress-deploy-status="dirty"],
220
+ .openpress-deploy-dialog__status[data-openpress-deploy-status="deploying"] {
221
+ color: var(--openpress-workbench-accent);
222
+ }
223
+
224
+ .openpress-deploy-dialog__status[data-openpress-deploy-status="failed"] {
225
+ color: var(--openpress-workbench-danger);
226
+ }
227
+
228
+ .openpress-deploy-dialog__message {
229
+ margin: 0;
230
+ border-left: 2px solid rgb(248 113 113 / 76%);
231
+ padding: 6px 0 6px 10px;
232
+ color: rgb(248 113 113 / 88%);
233
+ font-size: 12px;
234
+ line-height: 1.45;
235
+ }
236
+
237
+ .openpress-deploy-dialog .openpress-workbench-dialog__footer button {
238
+ display: inline-flex;
239
+ height: 30px;
240
+ align-items: center;
241
+ justify-content: center;
242
+ gap: 7px;
243
+ border: 1px solid var(--openpress-workbench-border);
244
+ border-radius: var(--openpress-workbench-radius-sm);
245
+ padding: 0 10px;
246
+ background: transparent;
247
+ color: var(--openpress-workbench-text-soft);
248
+ font: inherit;
249
+ font-size: 11px;
250
+ font-weight: 560;
251
+ cursor: pointer;
252
+ }
253
+
254
+ .openpress-deploy-dialog .openpress-workbench-dialog__footer button:hover:not(:disabled) {
255
+ border-color: rgb(240 182 76 / 34%);
256
+ color: var(--openpress-workbench-accent);
257
+ }
258
+
259
+ .openpress-deploy-dialog .openpress-workbench-dialog__footer button:disabled {
260
+ cursor: not-allowed;
261
+ opacity: 0.46;
262
+ }
263
+
264
+ .openpress-deploy-dialog .openpress-workbench-dialog__footer svg {
265
+ width: 13px;
266
+ height: 13px;
267
+ }