aboutsummaryrefslogtreecommitdiffstats
path: root/internal/web/static/dashboard.css
diff options
context:
space:
mode:
Diffstat (limited to 'internal/web/static/dashboard.css')
-rw-r--r--internal/web/static/dashboard.css342
1 files changed, 191 insertions, 151 deletions
diff --git a/internal/web/static/dashboard.css b/internal/web/static/dashboard.css
index 8fe5f8a..b85d515 100644
--- a/internal/web/static/dashboard.css
+++ b/internal/web/static/dashboard.css
@@ -1,216 +1,256 @@
-/* Blogspace dashboard — "paper & ink": flat colours, 2px rules, hard shadows,
- square corners. Plain CSS (no variables, no flex for layout) so it renders on
- old browsers; works down to ~320px. */
+/* Blogspace dashboard — lean: neutral surfaces, 1px borders, one accent, system
+ sans. Flexbox/grid and custom properties are fine here (the public blog.css
+ stays float-based); works down to ~320px. */
+:root {
+ --bg: #f5f6f8; --surface: #fff; --surface-2: #f8f9fb;
+ --border: #e2e5ea; --border-strong: #c9ced6;
+ --text: #1f2328; --muted: #6b7280;
+ --accent: #2563eb; --accent-hover: #1d4ed8; --accent-soft: #eef3ff; --accent-ring: rgba(37, 99, 235, 0.25);
+ --danger: #dc2626; --danger-hover: #b91c1c; --danger-soft: #fef2f2;
+ --ok-bg: #ecfdf3; --ok-border: #a7e3bd; --ok-text: #14532d;
+ --err-bg: #fef2f2; --err-border: #f5b5b5; --err-text: #7f1d1d;
+ --radius: 8px; --radius-sm: 6px;
+ --shadow: 0 1px 2px rgba(16, 24, 40, 0.06), 0 1px 3px rgba(16, 24, 40, 0.04);
+ --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ --mono: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace;
+}
* { box-sizing: border-box; }
-html { background: #f4efe4; }
-body { margin: 0; font-family: -apple-system, "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.5; color: #1d1a17; background: #f4efe4; }
-a { color: #c8541a; }
-a:hover { color: #a3420f; }
-h1, h2, h3, .mono { font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; letter-spacing: -0.01em; }
-h1 { font-size: 1.5em; margin: 0.2em 0 0.6em; line-height: 1.2; }
-h2 { font-size: 1.05em; margin: 0 0 0.8em; text-transform: uppercase; letter-spacing: 0.06em; }
-h3 { font-size: 0.95em; margin: 0 0 0.4em; text-transform: uppercase; letter-spacing: 0.06em; }
-code { font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; background: #ebe5d6; padding: 0 0.3em; font-size: 0.92em; }
+[hidden] { display: none !important; }
+html { background: var(--bg); }
+body { margin: 0; font-family: var(--font); font-size: 15px; line-height: 1.55; color: var(--text); background: var(--bg); -webkit-text-size-adjust: 100%; }
+a { color: var(--accent); }
+a:hover { color: var(--accent-hover); }
+h1, h2, h3 { font-weight: 600; letter-spacing: -0.01em; line-height: 1.25; }
+h1 { font-size: 1.5em; margin: 0 0 0.6em; }
+h2 { font-size: 1.1em; margin: 0 0 0.8em; }
+h3 { font-size: 0.95em; margin: 0 0 0.4em; }
+code, .mono { font-family: var(--mono); }
+code { background: var(--surface-2); border: 1px solid var(--border); border-radius: 4px; padding: 0 0.3em; font-size: 0.9em; }
p { margin: 0.6em 0; }
-.muted { color: #6b655c; }
+.muted { color: var(--muted); }
.nowrap { white-space: nowrap; }
.narrow { max-width: 480px; }
.center { margin-left: auto; margin-right: auto; }
.small { font-size: 0.9em; }
/* ---- bars ---------------------------------------------------------------- */
-.topbar { background: #1d1a17; color: #f4efe4; }
-.topbar a { color: #f4efe4; text-decoration: none; }
-.topbar-inner { max-width: 1100px; margin: 0 auto; padding: 0.55em 1em; overflow: hidden; }
-.brand { font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-weight: bold; text-transform: uppercase; letter-spacing: 0.12em; margin-right: 1.2em; }
-.who { color: #b8b0a3; font-size: 0.9em; }
-.topbar .links { float: right; font-size: 0.9em; }
-.topbar .links a, .topbar .links form { margin-left: 1.2em; }
-.topbar .links a:hover, .topbar .links .linkbtn:hover { color: #f2a67c; }
-.topbar .links a.active { border-bottom: 2px solid #f2a67c; }
-.blogbar { background: #fffdf8; border-bottom: 2px solid #1d1a17; }
-.blogbar .topbar-inner { padding: 0.5em 1em 0; }
-.blogbar .blogname { display: inline-block; margin: 0 1em 0.5em 0; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; }
-.blogbar .tabs { display: inline-block; vertical-align: bottom; }
-.blogbar .tabs a { display: inline-block; padding: 0.35em 0.8em; margin: 0 0.15em 0 0; text-decoration: none; color: #1d1a17; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.9em; border: 2px solid transparent; border-bottom: 0; }
-.blogbar .tabs a:hover { border-color: #1d1a17; }
-.blogbar .tabs a.active { background: #1d1a17; color: #f4efe4; border-color: #1d1a17; }
-.blogbar .view { float: right; margin: 0 0 0.5em; padding: 0.25em 0.7em; border: 2px solid #1d1a17; color: #1d1a17; text-decoration: none; font-size: 0.85em; font-weight: bold; background: #fffdf8; }
-.blogbar .view:hover { background: #1d1a17; color: #f4efe4; }
+.topbar { background: var(--surface); border-bottom: 1px solid var(--border); }
+.topbar a { color: var(--text); text-decoration: none; }
+.topbar-inner { max-width: 1100px; margin: 0 auto; padding: 0.6em 1em; display: flex; align-items: center; flex-wrap: wrap; gap: 0.4em 1em; }
+.brand { font-weight: 700; letter-spacing: -0.01em; }
+.who { color: var(--muted); font-size: 0.9em; }
+.topbar .links { margin-left: auto; font-size: 0.9em; display: flex; gap: 1.2em; align-items: center; }
+.topbar .links a, .topbar .links .linkbtn { color: var(--muted); }
+.topbar .links a:hover, .topbar .links .linkbtn:hover { color: var(--text); }
+.topbar .links a.active { color: var(--text); font-weight: 600; }
+.blogbar { background: var(--surface); border-bottom: 1px solid var(--border); }
+.blogbar .topbar-inner { padding: 0.5em 1em 0; gap: 0 1.2em; }
+.blogbar .blogname { font-weight: 600; padding-bottom: 0.55em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 20em; }
+.blogbar .tabs { display: flex; gap: 0.2em; }
+.blogbar .tabs a { display: inline-block; padding: 0.35em 0.7em 0.55em; text-decoration: none; color: var(--muted); font-size: 0.92em; font-weight: 500; border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; }
+.blogbar .tabs a:hover { color: var(--text); }
+.blogbar .tabs a.active { color: var(--accent); border-color: var(--accent); }
+.blogbar .view { margin: 0 0 0.5em auto; padding: 0.3em 0.75em; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); color: var(--text); text-decoration: none; font-size: 0.85em; font-weight: 500; background: var(--surface); white-space: nowrap; }
+.blogbar .view:hover { background: var(--surface-2); border-color: var(--muted); }
/* ---- page ---------------------------------------------------------------- */
-.main { max-width: 1100px; margin: 0 auto; padding: 1.4em 1em 3em; }
-.pagehead { overflow: hidden; margin-bottom: 0.8em; }
-.pagehead h1 { float: left; margin: 0.1em 1em 0.3em 0; }
-.pagehead .actions { float: right; margin-top: 0.1em; }
-.pagehead .lead { clear: both; margin: 0; }
-.card { background: #fffdf8; border: 2px solid #1d1a17; box-shadow: 4px 4px 0 #1d1a17; padding: 1.1em 1.3em; margin: 0 4px 1.6em 0; }
+.main { max-width: 1100px; margin: 0 auto; padding: 1.5em 1em 3em; }
+.pagehead { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4em 1em; margin-bottom: 1em; }
+.pagehead h1 { margin: 0; flex: 1 1 auto; }
+.pagehead .actions { margin-left: auto; }
+.pagehead .lead { flex-basis: 100%; margin: 0; }
+.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); padding: 1.25em 1.4em; margin: 0 0 1.4em; }
.card > :last-child { margin-bottom: 0; }
-.cols { overflow: hidden; }
-.cols .card { float: left; width: 48.5%; margin-right: 3%; }
-.cols .card + .card { margin-right: 4px; }
-.flash { padding: 0.6em 1em; border: 2px solid #1d1a17; margin: 0 4px 1.2em 0; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.9em; }
-.flash.ok { background: #e4f0dc; }
-.flash.err { background: #f6dfd9; }
-.tag { display: inline-block; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.7em; text-transform: uppercase; letter-spacing: 0.05em; border: 1px solid #1d1a17; color: #1d1a17; padding: 0 0.45em; margin-left: 0.5em; vertical-align: middle; line-height: 1.6; }
-.tag.off { color: #6b655c; border-color: #b8b0a3; }
+.cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.4em; margin-bottom: 1.4em; }
+.cols .card { margin: 0; }
+.flash { padding: 0.65em 1em; border: 1px solid; border-radius: var(--radius-sm); margin: 0 0 1.2em; font-size: 0.95em; }
+.flash.ok { background: var(--ok-bg); border-color: var(--ok-border); color: var(--ok-text); }
+.flash.err { background: var(--err-bg); border-color: var(--err-border); color: var(--err-text); }
+.tag { display: inline-block; font-size: 0.7em; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; border-radius: 999px; background: var(--accent-soft); color: var(--accent-hover); padding: 0.1em 0.6em; margin-left: 0.5em; vertical-align: middle; line-height: 1.6; }
+.tag.off { background: var(--surface-2); color: var(--muted); border: 1px solid var(--border); }
/* ---- forms --------------------------------------------------------------- */
-label { display: block; margin: 0.8em 0; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.05em; }
-label .muted { text-transform: none; letter-spacing: 0; }
-label code { text-transform: none; letter-spacing: 0; }
-input[type=text], input[type=password], input[type=number], input[type=datetime-local], input:not([type]), input[type=file], select, textarea {
- width: 100%; max-width: 100%; padding: 0.5em 0.6em; margin-top: 0.25em; border: 2px solid #1d1a17; font: inherit; font-family: -apple-system, "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; text-transform: none; letter-spacing: 0; background: #fffdf8; color: #1d1a17; }
-input:focus, select:focus, textarea:focus, button:focus, .btn:focus { outline: 2px solid #c8541a; outline-offset: 1px; }
-input[type=color] { width: 4em; height: 2.3em; padding: 0.1em; margin-top: 0.25em; border: 2px solid #1d1a17; background: #fffdf8; }
+label { display: block; margin: 0.9em 0; font-size: 0.875em; font-weight: 500; }
+input[type=text], input[type=password], input[type=number], input[type=datetime-local], input[type=url], input[type=search], input:not([type]), input[type=file], select, textarea {
+ width: 100%; max-width: 100%; padding: 0.5em 0.65em; margin-top: 0.3em; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); font: inherit; font-size: 15px; font-weight: normal; background: var(--surface); color: var(--text); }
+input:focus, select:focus, textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-ring); }
+button:focus-visible, .btn:focus-visible, .tabs a:focus-visible, .view:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
+input[type=color] { width: 4em; height: 2.4em; padding: 0.15em; margin-top: 0.3em; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); background: var(--surface); }
input[type=file] { padding: 0.35em; }
-select { -webkit-appearance: none; appearance: none; padding-right: 1.8em; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%231d1a17' stroke-width='2'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.6em center; }
-textarea { font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.95em; line-height: 1.5; }
-textarea.editor { min-height: 28em; }
-label.check { text-transform: none; letter-spacing: 0; font-family: -apple-system, "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1em; }
-label.check input { width: auto; margin: 0 0.4em 0 0; vertical-align: middle; }
-.row { overflow: hidden; }
-.row label { float: left; margin-right: 1.5em; min-width: 12em; }
-.row label:last-child { margin-right: 0; }
-button, .btn { display: inline-block; font: inherit; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.9em; font-weight: bold; text-transform: uppercase; letter-spacing: 0.05em; padding: 0.5em 1.1em; border: 2px solid #1d1a17; background: #c8541a; color: #fffdf8; cursor: pointer; text-decoration: none; box-shadow: 3px 3px 0 #1d1a17; vertical-align: middle; }
-button:hover, .btn:hover { background: #a3420f; color: #fffdf8; }
-button:active, .btn:active { box-shadow: none; position: relative; top: 3px; left: 3px; }
-.btn.secondary, button.secondary { background: #fffdf8; color: #1d1a17; }
-.btn.secondary:hover, button.secondary:hover { background: #ebe5d6; color: #1d1a17; }
-.btn.small { font-size: 0.75em; padding: 0.4em 0.9em; }
-button.mini, .mini { font-size: 0.72em; padding: 0.15em 0.55em; background: #fffdf8; color: #1d1a17; border-width: 1px; box-shadow: none; font-weight: normal; }
-button.mini:hover, .mini:hover { background: #1d1a17; color: #fffdf8; }
-button.mini:active { top: 0; left: 0; }
-button.danger { background: #a12b1e; }
-button.danger:hover { background: #7d1f14; }
-a.danger { color: #a12b1e; }
-button.mini.danger { color: #a12b1e; border-color: #a12b1e; background: #fffdf8; }
-button.mini.danger:hover { background: #a12b1e; color: #fffdf8; }
-button.linkbtn { background: none; border: 0; padding: 0; color: inherit; font: inherit; cursor: pointer; text-decoration: none; box-shadow: none; text-transform: none; letter-spacing: 0; }
-button.linkbtn:active { top: 0; left: 0; }
+input[type=search] { -webkit-appearance: none; appearance: none; }
+select { -webkit-appearance: none; appearance: none; padding-right: 1.9em; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%236b7280' stroke-width='1.8'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.7em center; }
+textarea { font-family: var(--mono); font-size: 0.92em; line-height: 1.55; }
+textarea.tall { min-height: 28em; }
+label.check { font-weight: normal; font-size: 0.95em; }
+label.check input { width: auto; margin: 0 0.45em 0 0; vertical-align: middle; accent-color: var(--accent); }
+input[type=radio], input[type=checkbox] { accent-color: var(--accent); }
+.row { display: flex; flex-wrap: wrap; gap: 0 1.5em; }
+.row label { flex: 1 1 12em; min-width: 12em; }
+button, .btn { display: inline-block; font: inherit; font-size: 0.9em; font-weight: 600; padding: 0.5em 1.05em; border: 1px solid var(--accent); border-radius: var(--radius-sm); background: var(--accent); color: #fff; cursor: pointer; text-decoration: none; vertical-align: middle; line-height: 1.4; }
+button:hover, .btn:hover { background: var(--accent-hover); border-color: var(--accent-hover); color: #fff; }
+.btn.secondary, button.secondary { background: var(--surface); color: var(--text); border-color: var(--border-strong); }
+.btn.secondary:hover, button.secondary:hover { background: var(--surface-2); color: var(--text); border-color: var(--muted); }
+.btn.small, button.small { font-size: 0.8em; padding: 0.4em 0.85em; }
+button.mini, .mini { font-size: 0.75em; font-weight: 500; padding: 0.15em 0.55em; background: var(--surface); color: var(--text); border-color: var(--border-strong); }
+button.mini:hover, .mini:hover { background: var(--surface-2); color: var(--text); border-color: var(--muted); }
+button.danger { background: var(--danger); border-color: var(--danger); }
+button.danger:hover { background: var(--danger-hover); border-color: var(--danger-hover); }
+a.danger { color: var(--danger); }
+button.mini.danger { color: var(--danger); border-color: var(--border-strong); background: var(--surface); }
+button.mini.danger:hover { background: var(--danger-soft); border-color: var(--danger); }
+button.linkbtn { background: none; border: 0; padding: 0; color: inherit; font: inherit; cursor: pointer; text-decoration: none; }
form.inline, .inline { display: inline; }
details.inline summary { display: inline; cursor: pointer; }
-summary.mini { display: inline-block; list-style: none; }
+summary.mini { display: inline-block; list-style: none; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); cursor: pointer; line-height: 1.4; }
+summary.mini::-webkit-details-marker { display: none; }
.filter { margin: 0 0 1em; }
.filter label { display: inline-block; margin: 0; }
.filter select { width: auto; margin: 0 0 0 0.4em; }
-.actionrow { margin: 1.2em 0 0; }
-.actionrow a { margin-left: 0.8em; }
+.actionrow { margin: 1.2em 0 0; display: flex; flex-wrap: wrap; align-items: center; gap: 0.6em 0.9em; }
+.actionrow a:not(.btn) { font-size: 0.95em; }
/* ---- tables & lists ------------------------------------------------------ */
table { border-collapse: collapse; width: 100%; }
-th, td { text-align: left; padding: 0.5em 0.6em; border-bottom: 1px solid #ddd6c7; vertical-align: middle; }
-th { font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.75em; text-transform: uppercase; letter-spacing: 0.08em; color: #1d1a17; border-bottom: 2px solid #1d1a17; }
-tr:nth-child(even) td { background: #f9f6ee; }
-tr:hover td { background: #f1ecdf; }
-tr.disabled td { color: #8f887c; }
+th, td { text-align: left; padding: 0.55em 0.6em; border-bottom: 1px solid var(--border); vertical-align: middle; }
+th { font-size: 0.75em; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); }
+tr:last-child td { border-bottom: 0; }
+tr:hover td { background: var(--surface-2); }
+tr.disabled td { color: var(--muted); }
ul.plain { list-style: none; padding: 0; margin: 0; }
-ul.plain li { padding: 0.3em 0; border-bottom: 1px solid #ddd6c7; }
+ul.plain li { padding: 0.35em 0; border-bottom: 1px solid var(--border); }
ul.plain li:last-child { border-bottom: 0; }
-details.help { margin: 0.8em 0 0; border: 2px dashed #1d1a17; padding: 0.5em 1em; background: #fbf8f0; }
-details.help summary { cursor: pointer; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.85em; text-transform: uppercase; letter-spacing: 0.06em; }
-details.help[open] summary { margin-bottom: 0.5em; }
+details.help { margin: 0.8em 0 0; border: 1px dashed var(--border-strong); border-radius: var(--radius-sm); padding: 0.5em 1em; background: var(--surface-2); font-size: 0.95em; }
+details.help summary { cursor: pointer; color: var(--muted); font-weight: 500; font-size: 0.9em; }
+details.help[open] summary { margin-bottom: 0.5em; color: var(--text); }
.cheat td { border: 0; padding: 0.2em 1em 0.2em 0; background: none; }
+.cheat tr:hover td { background: none; }
-.editor-tools { margin: 0.5em 0 0; font-size: 0.9em; }
-.editor-tools .upload { display: inline-block; margin: 0 0.8em 0 0; padding: 0.25em 0.7em; border: 2px solid #1d1a17; background: #fffdf8; cursor: pointer; font-size: 0.8em; }
-.editor-tools .upload:hover { background: #ebe5d6; }
+/* ---- editor: toolbar, textarea and preview share one frame ------------------ */
+.editor { margin-top: 0.3em; }
+.editor textarea { margin-top: 0; display: block; }
+.editor.js textarea { border-top-left-radius: 0; border-top-right-radius: 0; }
+.ed-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.25em; padding: 0.35em 0.4em; background: var(--surface-2); border: 1px solid var(--border-strong); border-bottom: 0; border-radius: var(--radius-sm) var(--radius-sm) 0 0; }
+.ed-group { display: inline-flex; gap: 0.1em; padding-right: 0.35em; margin-right: 0.1em; border-right: 1px solid var(--border-strong); }
+.ed-group:last-of-type { border-right: 0; }
+.ed-toolbar button[data-cmd] { width: 2em; height: 2em; padding: 0; border: 1px solid transparent; background: none; color: var(--text); border-radius: 5px; display: inline-flex; align-items: center; justify-content: center; }
+.ed-toolbar button[data-cmd]:hover { background: var(--accent-soft); color: var(--accent-hover); border-color: transparent; }
+.ed-toolbar svg { width: 16px; height: 16px; fill: currentColor; }
+.ed-modes { margin-left: auto; display: inline-flex; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); overflow: hidden; }
+.ed-modes button { font-size: 0.8em; font-weight: 500; padding: 0.25em 0.75em; border: 0; border-radius: 0; background: var(--surface); color: var(--muted); }
+.ed-modes button + button { border-left: 1px solid var(--border-strong); }
+.ed-modes button:hover { background: var(--surface-2); color: var(--text); }
+.ed-modes button[aria-pressed=true] { background: var(--accent); color: #fff; }
+.editor.previewing .ed-toolbar button[data-cmd] { opacity: 0.35; pointer-events: none; }
+.ed-linkbox { display: flex; flex-wrap: wrap; gap: 0.4em; align-items: center; padding: 0.5em; background: var(--accent-soft); border: 1px solid var(--border-strong); border-bottom: 0; }
+.ed-linkbox input { flex: 1 1 12em; margin: 0; padding: 0.35em 0.5em; font-size: 0.9em; }
+.ed-preview { min-height: 10em; padding: 0.8em 1em; border: 1px solid var(--border-strong); border-radius: 0 0 var(--radius-sm) var(--radius-sm); background: var(--surface); overflow-x: auto; }
+.ed-preview > :first-child { margin-top: 0; }
+.ed-preview > :last-child { margin-bottom: 0; }
+.ed-preview h1, .ed-preview h2, .ed-preview h3, .ed-preview h4 { margin: 1em 0 0.4em; }
+.ed-preview h1 { font-size: 1.5em; } .ed-preview h2 { font-size: 1.3em; } .ed-preview h3 { font-size: 1.1em; }
+.ed-preview img { max-width: 100%; height: auto; }
+.ed-preview blockquote { margin: 0.8em 0; padding: 0.2em 1em; border-left: 3px solid var(--border-strong); color: var(--muted); }
+.ed-preview pre { padding: 0.7em 0.9em; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm); overflow-x: auto; font-size: 0.9em; }
+.ed-preview pre code { border: 0; padding: 0; background: none; }
+.ed-preview table { width: auto; margin: 0.8em 0; }
+.ed-preview th, .ed-preview td { border: 1px solid var(--border); }
+.ed-preview hr { border: 0; border-top: 1px solid var(--border-strong); margin: 1.2em 0; }
+.editor-tools { margin: 0.5em 0 0; font-size: 0.9em; display: flex; flex-wrap: wrap; align-items: center; gap: 0.3em 0.8em; }
+.editor-tools .upload { display: inline-block; margin: 0; padding: 0.25em 0.7em; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); background: var(--surface); cursor: pointer; font-size: 0.85em; }
+.editor-tools .upload:hover { background: var(--surface-2); }
.editor-tools .upload input { display: inline-block; width: auto; max-width: 14em; margin: 0 0 0 0.4em; padding: 0; border: 0; background: none; font-size: 0.9em; }
-.editor-tools .upload-status { font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.85em; margin-right: 0.6em; }
+.editor.js .editor-tools .upload { display: none; } /* the toolbar's Insert file button takes over */
+.editor-tools .upload-status { font-size: 0.9em; color: var(--muted); }
+.editor-tools .upload-status:empty { display: none; }
/* ---- files --------------------------------------------------------------- */
-.dropzone.over { border-style: dashed; background: #ebe5d6; }
-.progress { list-style: none; margin: 0.6em 0 0; padding: 0; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.85em; }
+.dropzone.over { border: 1px dashed var(--accent); background: var(--accent-soft); }
+.progress { list-style: none; margin: 0.6em 0 0; padding: 0; font-size: 0.9em; color: var(--muted); }
.progress:empty { display: none; }
-.files-filter { overflow: hidden; }
-.files-filter input[type=search] { width: auto; margin: 0 0.3em 0.5em 0; padding: 0.3em 0.5em; vertical-align: middle; }
-.kinds { display: inline-block; margin: 0 1em 0.5em 0; vertical-align: middle; }
-.kinds a { display: inline-block; padding: 0.2em 0.7em; margin: 0 0.3em 0.3em 0; border: 2px solid #1d1a17; color: #1d1a17; text-decoration: none; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.05em; }
-.kinds a:hover { background: #ebe5d6; }
-.kinds a.active { background: #1d1a17; color: #f4efe4; }
+.files-filter { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5em; }
+.files-filter input[type=search] { width: auto; margin: 0; padding: 0.35em 0.6em; }
+.kinds { display: inline-flex; flex-wrap: wrap; gap: 0.3em; margin-right: 0.5em; }
+.kinds a { display: inline-block; padding: 0.25em 0.8em; border: 1px solid var(--border-strong); border-radius: 999px; color: var(--text); text-decoration: none; font-size: 0.85em; font-weight: 500; }
+.kinds a:hover { background: var(--surface-2); }
+.kinds a.active { background: var(--accent); color: #fff; border-color: var(--accent); }
table.files td.icon { width: 56px; }
-table.files .thumb { display: block; width: 48px; height: 48px; object-fit: contain; border: 1px solid #ddd6c7; background: #f4efe4; }
-table.files .badge { display: block; width: 48px; padding: 0.9em 0; border: 1px solid #1d1a17; background: #fffdf8; text-align: center; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.65em; letter-spacing: 0.05em; overflow: hidden; }
+table.files .thumb { display: block; width: 48px; height: 48px; object-fit: contain; border: 1px solid var(--border); border-radius: 4px; background: var(--surface-2); }
+table.files .badge { display: block; width: 48px; padding: 0.9em 0; border: 1px solid var(--border-strong); border-radius: 4px; background: var(--surface); text-align: center; font-family: var(--mono); font-size: 0.65em; letter-spacing: 0.05em; overflow: hidden; }
table.files td.name { word-break: break-all; }
-table.files .copy { width: 100%; min-width: 11em; padding: 0.3em; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.75em; }
-.pager { margin: 0 4px 1.6em 0; text-align: center; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.9em; }
+table.files .copy { width: 100%; min-width: 11em; padding: 0.3em 0.4em; margin: 0; font-family: var(--mono); font-size: 0.75em; }
+.pager { margin: 0 0 1.4em; text-align: center; font-size: 0.92em; }
.pager a, .pager span { margin: 0 0.8em; }
-.imagepick { margin-top: 0.5em; padding-top: 0.5em; border-top: 2px dashed #ddd6c7; }
+.imagepick { margin-top: 0.8em; padding-top: 0.6em; border-top: 1px solid var(--border); }
.imagepick > label { margin-bottom: 0.3em; }
-.imagepick .picks { overflow: hidden; margin: 0.4em 0 0; }
-.imagepick .pick { float: left; width: 120px; margin: 0 0.7em 0.7em 0; padding: 0.35em; border: 2px solid #ddd6c7; background: #fffdf8; text-align: center; font-size: 0.75em; text-transform: none; letter-spacing: 0; cursor: pointer; }
-.imagepick .pick:hover { border-color: #1d1a17; }
+.imagepick .picks { display: flex; flex-wrap: wrap; gap: 0.7em; margin: 0.4em 0 0; }
+.imagepick .pick { width: 120px; margin: 0; padding: 0.4em; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); text-align: center; font-size: 0.75em; font-weight: normal; cursor: pointer; }
+.imagepick .pick:hover { border-color: var(--border-strong); background: var(--surface-2); }
.imagepick .pick input { display: block; width: auto; margin: 0 auto 0.3em; }
-.imagepick .pick img, .imagepick .pick .swatch { display: block; width: 100%; height: 64px; margin: 0 auto 0.3em; border: 1px solid #ddd6c7; background: #f4efe4; }
+.imagepick .pick img, .imagepick .pick .swatch { display: block; width: 100%; height: 64px; margin: 0 auto 0.3em; border: 1px solid var(--border); border-radius: 4px; background: var(--surface-2); }
.imagepick .pick img { object-fit: contain; }
-.imagepick .pick .swatch { line-height: 64px; font-size: 1.6em; color: #b8b0a3; }
+.imagepick .pick .swatch { line-height: 64px; font-size: 1.6em; color: var(--muted); }
.imagepick .pick .name { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
-.imagepick .pick input:checked ~ img, .imagepick .pick input:checked ~ .swatch { border: 3px solid #c8541a; }
+.imagepick .pick input:checked ~ img, .imagepick .pick input:checked ~ .swatch { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent); }
/* ---- design page ---------------------------------------------------------- */
-.jumps { margin: 0 0 1.2em; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.05em; }
-.jumps a { display: inline-block; margin: 0 0.8em 0.3em 0; color: #1d1a17; text-decoration: none; border-bottom: 2px solid #ddd6c7; }
-.jumps a:hover { border-color: #c8541a; }
-.presets { overflow: hidden; }
-.presets .preset { float: left; width: 8.5em; margin: 0 0.9em 0.9em 0; padding: 0.45em; background: #fffdf8; color: #1d1a17; font-size: 0.8em; text-align: center; }
-.presets .preset:hover { background: #ebe5d6; color: #1d1a17; }
-.presets .sw { display: inline-block; width: 22%; height: 2.2em; margin: 0 1%; border: 1px solid rgba(0,0,0,0.25); vertical-align: middle; }
+.jumps { display: flex; flex-wrap: wrap; gap: 0.4em; margin: 0 0 1.2em; font-size: 0.85em; }
+.jumps a { display: inline-block; padding: 0.2em 0.75em; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--text); text-decoration: none; }
+.jumps a:hover { border-color: var(--accent); color: var(--accent); }
+.presets { display: flex; flex-wrap: wrap; gap: 0.8em; }
+.presets .preset { width: 8.5em; margin: 0; padding: 0.55em 0.45em; background: var(--surface); color: var(--text); border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 0.8em; font-weight: 500; text-align: center; }
+.presets .preset:hover { background: var(--surface-2); color: var(--text); border-color: var(--border-strong); }
+.presets .sw { display: inline-block; width: 22%; height: 2.2em; margin: 0 1%; border: 1px solid rgba(0,0,0,0.15); border-radius: 3px; vertical-align: middle; }
.presets .pname { display: block; margin-top: 0.4em; }
/* layout page: the column diagram, area cards with their module tables */
-.lay { margin: 0 0 1em; border: 2px solid #1d1a17; background: #f4efe4; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.75em; text-transform: uppercase; letter-spacing: 0.05em; text-align: center; }
-.lay-row { padding: 0.5em; background: #1d1a17; color: #f4efe4; }
-.lay-cols { overflow: hidden; padding: 0.5em 0; }
-.lay-col { float: left; padding: 1.6em 0.3em; border: 1px dashed #1d1a17; background: #fffdf8; }
-.lay-col.lay-main { background: #ebe5d6; }
-.lay .off { opacity: 0.4; text-decoration: line-through; }
+.lay { margin: 0 0 1em; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); background: var(--surface-2); font-size: 0.75em; font-weight: 500; text-align: center; overflow: hidden; }
+.lay-row { padding: 0.5em; background: var(--text); color: #fff; }
+.lay-cols { display: flex; padding: 0.5em; gap: 0.3em; }
+.lay-col { padding: 1.6em 0.3em; border: 1px dashed var(--border-strong); border-radius: 4px; background: var(--surface); }
+.lay-col.lay-main { background: var(--accent-soft); border-color: var(--accent); border-style: solid; color: var(--accent-hover); }
+.lay .off { opacity: 0.45; text-decoration: line-through; }
.lay-col.off { text-decoration: none; }
.lay-col.empty { background: transparent; }
.row input[type=number] { width: 6em; }
-.cardhead { overflow: hidden; }
-.cardhead h2 { float: left; margin-right: 1em; }
-.cardhead .switch { float: right; margin-top: -0.2em; }
+.cardhead { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5em 1em; }
+.cardhead h2 { margin: 0 0 0.6em; }
+.cardhead .switch { margin: 0 0 0.6em auto; }
.card.area-off { border-style: dashed; box-shadow: none; }
.card.area-off .modules, .card.area-off .addmod { opacity: 0.6; }
table.modules { margin: 0.5em 0 1em; }
table.modules td.order, table.modules td.actions { width: 1%; }
table.modules th { width: 10em; }
-.addmod { border-top: 2px dashed #ddd6c7; padding-top: 0.6em; }
+.addmod { border-top: 1px solid var(--border); padding-top: 0.6em; }
.addmod label, .add label { display: inline-block; margin: 0 0.8em 0.4em 0; min-width: 14em; }
.addmod select, .add select, .add input { width: auto; min-width: 14em; }
.addmod button, .add button { vertical-align: bottom; margin-bottom: 0.4em; }
-.addrow { margin-top: 1em; border-top: 2px dashed #ddd6c7; padding-top: 0.6em; }
-.addrow .add { float: left; width: 48%; margin-right: 4%; }
-.addrow .add + .add { margin-right: 0; }
+.addrow { margin-top: 1em; border-top: 1px solid var(--border); padding-top: 0.6em; margin-bottom: 0; }
textarea.mono { font-size: 0.9em; }
.hoverpick { margin: 0.8em 0; }
.hoverpick > input { width: auto; margin: 0 0.4em 0 0; vertical-align: middle; }
.hoverpick > label.check { display: inline; margin: 0; }
.hoverpick .hover-color { margin: 0.4em 0 0 1.6em; }
.hoverpick > input:not(:checked) ~ .hover-color { display: none; }
-.savebar { position: sticky; bottom: 0; margin: 0 4px 0 0; padding: 0.8em 0; background: #f4efe4; border-top: 2px solid #1d1a17; }
-.savebar .btn { margin-left: 0.8em; }
+.savebar { position: sticky; bottom: 0; margin: 0; padding: 0.8em 0; background: var(--bg); border-top: 1px solid var(--border-strong); display: flex; gap: 0.8em; align-items: center; }
details.reset { margin-top: 1.6em; }
/* ---- login --------------------------------------------------------------- */
-.login-brand { text-align: center; font-family: "IBM Plex Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace; text-transform: uppercase; letter-spacing: 0.2em; margin: 2em 0 1em; }
+.login-brand { text-align: center; font-weight: 700; font-size: 1.2em; letter-spacing: -0.01em; margin: 2.5em 0 1em; }
@media (max-width: 700px) {
- .cols .card, .row label { float: none; width: auto; margin-right: 4px; }
- .imagepick .pick { width: 46%; margin-right: 4%; }
- .presets .preset { width: 46%; margin-right: 4%; }
- .addrow .add { float: none; width: auto; margin-right: 0; }
- .cardhead h2, .cardhead .switch { float: none; margin-top: 0; }
- .cardhead .switch { display: block; margin-bottom: 0.6em; }
- .cols .card + .card { margin-right: 4px; }
- .topbar .links { float: none; display: block; margin-top: 0.3em; }
- .topbar .links a, .topbar .links form { margin-left: 0; margin-right: 1em; }
- .blogbar .topbar-inner { overflow: visible; }
- .blogbar .blogname { display: block; margin-right: 0; }
- .blogbar .view { float: none; display: inline-block; margin: 0 0 0.6em; }
- .blogbar .tabs { display: block; overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; margin: 0 -1em; padding: 0 1em; }
- .pagehead h1, .pagehead .actions { float: none; }
- .pagehead .actions { margin-bottom: 0.6em; }
- .card { padding: 0.9em 1em; overflow-x: auto; }
+ body { font-size: 15px; }
+ .cols { grid-template-columns: 1fr; gap: 1.2em; }
+ .row { gap: 0; }
+ .row label { flex-basis: 100%; }
+ .imagepick .pick { width: 46%; }
+ .presets .preset { width: 46%; }
+ .topbar .links { margin-left: 0; flex-basis: 100%; gap: 1em; }
+ .blogbar .topbar-inner { display: block; }
+ .blogbar .blogname { display: block; max-width: none; padding-bottom: 0.3em; }
+ .blogbar .view { display: inline-block; margin: 0 0 0.6em; }
+ .blogbar .tabs { overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; margin: 0 -1em; padding: 0 1em; }
+ .pagehead .actions { margin-left: 0; }
+ .card { padding: 1em 1em; overflow-x: auto; }
table { font-size: 0.9em; }
- th, td { padding: 0.35em 0.3em; }
+ th, td { padding: 0.4em 0.35em; }
+ .ed-modes { margin-left: 0; }
}