mavweb: unify UI — shared ui.css + nav partial across all pages
One theme (the PWA's dark palette) for dash/history/trace/notifications/ tools/passkey via static/ui.css; shared nav template with active-page highlight; tables wrapped in .scroll so they pan on phones; PWA nav no longer clips the RU/EN toggle; dash 'updated' timestamp fixed (selector matched nothing). AGENTS.md documents the local preview/screenshot recipe. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ASstMtsZWLSRcD1Tq8T68Q
This commit is contained in:
@@ -11,11 +11,13 @@
|
||||
html,body{height:100%;background:#111;color:#ddd;font-family:system-ui,-apple-system,sans-serif}
|
||||
body{display:flex;flex-direction:column}
|
||||
|
||||
nav{display:flex;background:#1a1a2e;border-bottom:1px solid #333;flex-shrink:0}
|
||||
nav button{flex:1;padding:.6rem;background:none;border:none;color:#666;font-size:.85rem;cursor:pointer;font-family:inherit;letter-spacing:.05em;text-transform:uppercase;transition:color .15s;-webkit-tap-highlight-color:transparent}
|
||||
nav{display:flex;align-items:stretch;background:#1a1a2e;border-bottom:1px solid #333;flex-shrink:0}
|
||||
/* min-width:0 lets the tabs shrink below their text's min-content width —
|
||||
without it they push the lang toggle past the right edge on phones */
|
||||
nav button{flex:1 1 0;min-width:0;overflow:hidden;white-space:nowrap;padding:.6rem .2rem;background:none;border:none;color:#666;font-size:.85rem;cursor:pointer;font-family:inherit;letter-spacing:.05em;text-transform:uppercase;transition:color .15s;-webkit-tap-highlight-color:transparent}
|
||||
nav button.active{color:#00aaff;border-bottom:2px solid #00aaff}
|
||||
nav button:hover{color:#ddd}
|
||||
nav .lang{flex:0 0 auto;padding:.6rem .8rem;font-size:.75rem;color:#555;cursor:pointer;letter-spacing:.1em}
|
||||
nav .lang{flex:0 0 auto;display:flex;align-items:center;padding:.6rem .5rem;font-size:.75rem;color:#555;cursor:pointer;letter-spacing:.1em}
|
||||
nav .lang.active{color:#00aaff}
|
||||
|
||||
.tab{display:none;flex-direction:column;align-items:center;flex:1;overflow:auto;padding:1rem}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/* maven web ui — one theme for every server-rendered page.
|
||||
Palette and type mirror the PWA (static/index.html): dark, restrained,
|
||||
#00aaff accent. Pages carry NO inline <style> beyond true one-offs. */
|
||||
:root{
|
||||
--bg:#111; --panel:#1a1a2e; --line:#222; --border:#333;
|
||||
--fg:#ddd; --soft:#aaa; --muted:#888; --dim:#555;
|
||||
--accent:#00aaff; --ok:#00ff88; --warn:#ffaa00; --err:#ff4444;
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
body{background:var(--bg);color:var(--fg);font:14px/1.5 system-ui,sans-serif;
|
||||
margin:0;padding:1rem;-webkit-text-size-adjust:100%}
|
||||
h1,h2{font-weight:400;color:var(--muted);letter-spacing:.1em;text-transform:uppercase}
|
||||
h1{font-size:1.2rem;margin:.2rem 0 .6rem}
|
||||
h2{font-size:.95rem;margin:1.4rem 0 .3rem}
|
||||
h1 small,h2 small{color:var(--dim);letter-spacing:0;text-transform:none}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
/* shared site nav (the "nav" template partial) */
|
||||
nav.site{display:flex;gap:1rem;flex-wrap:wrap;align-items:center;
|
||||
border-bottom:1px solid var(--line);padding-bottom:.6rem;margin-bottom:1rem}
|
||||
nav.site a{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
|
||||
nav.site a:hover{color:var(--fg);text-decoration:none}
|
||||
nav.site a.active{color:var(--accent)}
|
||||
|
||||
/* tables: always inside a .scroll wrapper so wide data pans instead of
|
||||
breaking the page on a phone */
|
||||
.scroll{overflow-x:auto}
|
||||
table{width:100%;border-collapse:collapse;margin-top:.4rem}
|
||||
th,td{padding:.35rem .5rem;text-align:left;vertical-align:top;
|
||||
border-bottom:1px solid var(--line)}
|
||||
th{color:var(--dim);font-size:.75rem;text-transform:uppercase;
|
||||
letter-spacing:.05em;white-space:nowrap}
|
||||
td{color:var(--soft)}
|
||||
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
|
||||
code,.key{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--ok)}
|
||||
|
||||
/* status colors — nudge outcomes, presence, booleans */
|
||||
.pending{color:var(--muted)}.acted{color:var(--ok)}
|
||||
.snoozed{color:var(--warn)}.ignored{color:var(--err)}
|
||||
.pres,.green{color:var(--ok)}.away,.gray{color:var(--muted)}.red{color:var(--err)}
|
||||
.badge{font-size:.75rem;color:var(--dim);background:var(--panel);
|
||||
padding:.15rem .35rem;border-radius:3px;white-space:nowrap}
|
||||
.updated,.muted{color:var(--dim);font-size:.85rem}
|
||||
.empty{color:var(--dim);padding:2rem;text-align:center}
|
||||
.voided{opacity:.45;text-decoration:line-through}
|
||||
.void-badge{color:var(--dim);font-size:.8rem;margin-right:.3rem}
|
||||
|
||||
/* controls */
|
||||
button{font:inherit;font-size:.85rem;background:var(--panel);color:var(--fg);
|
||||
border:1px solid var(--border);border-radius:3px;padding:.25rem .6rem;cursor:pointer}
|
||||
button:hover{border-color:var(--accent)}
|
||||
button:disabled{opacity:.4;cursor:not-allowed}
|
||||
input[type=text]{font:inherit;font-size:.85rem;background:var(--bg);color:var(--fg);
|
||||
border:1px solid var(--border);border-radius:3px;padding:.25rem .4rem;max-width:100%}
|
||||
label{color:var(--soft)}
|
||||
|
||||
/* inline feedback (/history revert, /tools enable, /auth/passkey) */
|
||||
.msg{margin:.6rem 0;padding:.5rem .7rem;border-radius:3px;border:1px solid var(--line)}
|
||||
.msg-ok{border-color:var(--ok);color:var(--ok)}
|
||||
.msg-err{border-color:var(--err);color:var(--err)}
|
||||
|
||||
details{color:var(--soft);font-size:.85rem}
|
||||
summary{cursor:pointer;color:var(--dim)}
|
||||
Reference in New Issue
Block a user