forked from bots-garden/ori
| ✨ Workspace panel, selectors, previews, desktop app, sandbox template, resizable file tree, light/dark theme | 1 | /* ori-desktop — minimal dark shell around the ori webapp. */ |
| 2 | :root { | |
| 3 | --bg: #18181b; | |
| 4 | --panel: #232327; | |
| 5 | --border: #34343a; | |
| 6 | --text: #e4e4e7; | |
| 7 | --muted: #9ca3af; | |
| 8 | --accent: #7c9cff; | |
| 9 | --ok: #34d399; | |
| 10 | --err: #f87171; | |
| 11 | color-scheme: dark; | |
| 12 | } | |
| 13 | ||
| 14 | * { | |
| 15 | box-sizing: border-box; | |
| 16 | } | |
| 17 | ||
| 18 | html, | |
| 19 | body { | |
| 20 | margin: 0; | |
| 21 | height: 100%; | |
| 22 | background: var(--bg); | |
| 23 | color: var(--text); | |
| 24 | font: 14px / 1.45 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; | |
| 25 | -webkit-user-select: none; | |
| 26 | user-select: none; | |
| 27 | } | |
| 28 | ||
| 29 | .screen { | |
| 30 | height: 100%; | |
| 31 | } | |
| 32 | /* Class + attribute selectors only: an id selector such as #connect-screen | |
| 33 | would outrank .screen[hidden] and keep the screen visible for ever. */ | |
| 34 | .screen[hidden] { | |
| 35 | display: none !important; | |
| 36 | } | |
| 37 | ||
| 38 | /* ---- connection screen ---------------------------------------------- */ | |
| 39 | .connect { | |
| 40 | display: grid; | |
| 41 | place-items: center; | |
| 42 | padding: 24px; | |
| 43 | } | |
| 44 | ||
| 45 | .card { | |
| 46 | width: min(460px, 100%); | |
| 47 | background: var(--panel); | |
| 48 | border: 1px solid var(--border); | |
| 49 | border-radius: 12px; | |
| 50 | padding: 28px; | |
| 51 | display: flex; | |
| 52 | flex-direction: column; | |
| 53 | gap: 10px; | |
| 54 | } | |
| 55 | ||
| 56 | h1 { | |
| 57 | margin: 0 0 4px; | |
| 58 | font-size: 28px; | |
| 59 | font-weight: 600; | |
| 60 | letter-spacing: 0.02em; | |
| 61 | } | |
| 62 | ||
| 63 | .hint { | |
| 64 | margin: 0 0 8px; | |
| 65 | color: var(--muted); | |
| 66 | } | |
| 67 | ||
| 68 | label { | |
| 69 | font-size: 12px; | |
| 70 | color: var(--muted); | |
| 71 | text-transform: uppercase; | |
| 72 | letter-spacing: 0.06em; | |
| 73 | } | |
| 74 | ||
| 75 | input { | |
| 76 | -webkit-user-select: text; | |
| 77 | user-select: text; | |
| 78 | width: 100%; | |
| 79 | padding: 10px 12px; | |
| 80 | border-radius: 8px; | |
| 81 | border: 1px solid var(--border); | |
| 82 | background: var(--bg); | |
| 83 | color: var(--text); | |
| 84 | font: inherit; | |
| 85 | font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; | |
| 86 | } | |
| 87 | input:focus { | |
| 88 | outline: 2px solid var(--accent); | |
| 89 | outline-offset: 1px; | |
| 90 | } | |
| 91 | ||
| 92 | .actions { | |
| 93 | display: flex; | |
| 94 | gap: 8px; | |
| 95 | justify-content: flex-end; | |
| 96 | margin-top: 6px; | |
| 97 | } | |
| 98 | ||
| 99 | button { | |
| 100 | font: inherit; | |
| 101 | padding: 8px 14px; | |
| 102 | border-radius: 8px; | |
| 103 | border: 1px solid var(--border); | |
| 104 | background: var(--panel); | |
| 105 | color: var(--text); | |
| 106 | cursor: pointer; | |
| 107 | } | |
| 108 | button:hover { | |
| 109 | border-color: var(--accent); | |
| 110 | } | |
| 111 | button:disabled { | |
| 112 | opacity: 0.5; | |
| 113 | cursor: progress; | |
| 114 | } | |
| 115 | button.primary { | |
| 116 | background: var(--accent); | |
| 117 | border-color: var(--accent); | |
| 118 | color: #0b1020; | |
| 119 | font-weight: 600; | |
| 120 | } | |
| 121 | button.ghost { | |
| 122 | background: transparent; | |
| 123 | padding: 4px 10px; | |
| 124 | font-size: 13px; | |
| 125 | } | |
| 126 | ||
| 127 | .status { | |
| 128 | min-height: 1.4em; | |
| 129 | margin: 4px 0 0; | |
| 130 | -webkit-user-select: text; | |
| 131 | user-select: text; | |
| 132 | } | |
| 133 | .status.ok { | |
| 134 | color: var(--ok); | |
| 135 | } | |
| 136 | .status.err { | |
| 137 | color: var(--err); | |
| 138 | } | |
| 139 | .fineprint { | |
| 140 | margin: 0; | |
| 141 | font-size: 11px; | |
| 142 | color: var(--muted); | |
| 143 | word-break: break-all; | |
| 144 | } | |
| 145 | ||
| 146 | /* ---- viewer -------------------------------------------------------- */ | |
| 147 | .viewer { | |
| 148 | display: flex; | |
| 149 | flex-direction: column; | |
| 150 | } | |
| 151 | .viewer[hidden] { | |
| 152 | display: none; | |
| 153 | } | |
| 154 | ||
| 155 | .bar { | |
| 156 | display: flex; | |
| 157 | align-items: center; | |
| 158 | gap: 8px; | |
| 159 | padding: 4px 8px; | |
| 160 | border-bottom: 1px solid var(--border); | |
| 161 | background: var(--panel); | |
| 162 | font-size: 13px; | |
| 163 | } | |
| 164 | .dot { | |
| 165 | width: 8px; | |
| 166 | height: 8px; | |
| 167 | border-radius: 50%; | |
| 168 | background: var(--ok); | |
| 169 | } | |
| 170 | .url { | |
| 171 | font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; | |
| 172 | color: var(--muted); | |
| 173 | -webkit-user-select: text; | |
| 174 | user-select: text; | |
| 175 | } | |
| 176 | .spacer { | |
| 177 | flex: 1; | |
| 178 | } | |
| 179 | ||
| 180 | iframe { | |
| 181 | flex: 1; | |
| 182 | width: 100%; | |
| 183 | border: 0; | |
| 184 | background: var(--bg); | |
| 185 | } |