wendkeep 0.69.0 → 0.71.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.
@@ -0,0 +1,125 @@
1
+ <!doctype html>
2
+ <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="color-scheme" content="dark">
7
+ <meta name="description" content="Painel local de observabilidade dos projetos WendKeep">
8
+ <title>WendKeep Observer</title>
9
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml">
10
+ <link rel="stylesheet" href="/styles.css">
11
+ </head>
12
+ <body>
13
+ <div class="ambient ambient-left" aria-hidden="true"></div>
14
+ <div class="ambient ambient-right" aria-hidden="true"></div>
15
+ <div class="app-shell">
16
+ <header class="topbar">
17
+ <a class="brand" href="/" aria-label="WendKeep Observer início">
18
+ <span class="brand-mark" aria-hidden="true"><span></span><span></span><span></span></span>
19
+ <span>
20
+ <span class="eyebrow">LOCAL OPERATIONS CONSOLE</span>
21
+ <strong class="brand-name">WendKeep Observer</strong>
22
+ </span>
23
+ </a>
24
+ <div class="connection-cluster" aria-live="polite">
25
+ <span id="connection-dot" class="connection-dot is-offline" aria-hidden="true"></span>
26
+ <span id="connection-label">Conectando</span>
27
+ <form id="global-search-form" class="global-search">
28
+ <label class="sr-only" for="global-search">Buscar na memória</label>
29
+ <span aria-hidden="true">⌕</span>
30
+ <input id="global-search" type="search" placeholder="Buscar memória" autocomplete="off">
31
+ <button class="global-search-submit" type="submit" aria-label="Pesquisar">↵</button>
32
+ </form>
33
+ <button id="refresh-button" class="icon-button" type="button" title="Atualizar dados" aria-label="Atualizar dados">
34
+ <span aria-hidden="true">↻</span>
35
+ </button>
36
+ </div>
37
+ </header>
38
+
39
+ <main id="app" class="main-content">
40
+ <section id="dashboard-panel">
41
+ <div class="hero-row">
42
+ <div>
43
+ <p class="eyebrow">LOCAL PROJECT MAP</p>
44
+ <h1>Visão geral do seu trabalho.</h1>
45
+ <p id="last-sync" class="muted">Aguardando primeira leitura.</p>
46
+ </div>
47
+ </div>
48
+
49
+ <div id="metrics-grid" class="metrics-grid" aria-label="Resumo operacional"></div>
50
+
51
+ <div id="dashboard-error" class="dashboard-error panel" role="alert" hidden></div>
52
+
53
+ <div class="workspace-grid">
54
+ <section class="panel project-panel" aria-labelledby="projects-title">
55
+ <div class="panel-heading">
56
+ <div>
57
+ <p class="eyebrow">REGISTERED PROJECTS</p>
58
+ <h2 id="projects-title">Projetos</h2>
59
+ </div>
60
+ <label class="search-field" for="project-filter">
61
+ <span class="sr-only">Filtrar projetos</span>
62
+ <span aria-hidden="true">⌕</span>
63
+ <input id="project-filter" type="search" placeholder="Filtrar" autocomplete="off">
64
+ </label>
65
+ </div>
66
+ <div id="project-list" class="project-list" role="list"></div>
67
+ <div id="empty-state" class="empty-state" hidden>
68
+ <span class="empty-orbit" aria-hidden="true">◌</span>
69
+ <strong>Nenhum projeto encontrado</strong>
70
+ <span>Ajuste o filtro ou publique um snapshot pelo hook.</span>
71
+ </div>
72
+ </section>
73
+
74
+ <section id="project-detail" class="panel detail-panel" aria-labelledby="detail-title" aria-live="polite">
75
+ <div class="detail-placeholder">
76
+ <span class="detail-glyph" aria-hidden="true">✦</span>
77
+ <p class="eyebrow">PROJECT DETAIL</p>
78
+ <h2 id="detail-title">Selecione um projeto</h2>
79
+ <p>Saúde, sessão e changes aparecem aqui quando você escolher um ponto da constelação.</p>
80
+ </div>
81
+ </section>
82
+ </div>
83
+ </section>
84
+
85
+ <section id="workspace-panel" hidden aria-live="polite">
86
+ <div class="workspace-header">
87
+ <a id="workspace-back" class="back-link" href="#overview">← Visão geral</a>
88
+ <div>
89
+ <p class="eyebrow">PROJECT WORKSPACE</p>
90
+ <h1 id="workspace-title">Projeto</h1>
91
+ <p id="workspace-subtitle" class="muted">Memória local do container.</p>
92
+ </div>
93
+ <span id="workspace-sync-badge" class="sync-badge">Sincronizando</span>
94
+ </div>
95
+ <div class="workspace-layout">
96
+ <aside class="workspace-rail panel" aria-label="Navegação do projeto">
97
+ <nav id="workspace-nav" class="workspace-nav">
98
+ <a data-workspace-section="overview" href="#project/project-a/overview">Overview</a>
99
+ <a data-workspace-section="sessions" href="#project/project-a/sessions">Sessões</a>
100
+ <a data-workspace-section="memory" href="#project/project-a/memory">Memória</a>
101
+ <a data-workspace-section="changes" href="#project/project-a/changes">Changes</a>
102
+ <a data-workspace-section="sync" href="#project/project-a/sync">Sincronização</a>
103
+ </nav>
104
+ <div id="workspace-meta" class="workspace-meta"></div>
105
+ </aside>
106
+ <section id="workspace-content" class="panel workspace-content">
107
+ <div class="detail-placeholder">
108
+ <span class="detail-glyph" aria-hidden="true">✦</span>
109
+ <p class="eyebrow">MEMORY WORKSPACE</p>
110
+ <h2>Selecione uma seção</h2>
111
+ </div>
112
+ </section>
113
+ </div>
114
+ </section>
115
+ </main>
116
+
117
+ <footer class="footer-note">
118
+ <span>Container local é a memória canônica.</span>
119
+ <span class="footer-separator" aria-hidden="true">·</span>
120
+ <span>Vault preservado como cópia de transição.</span>
121
+ </footer>
122
+ </div>
123
+ <script type="module" src="/app.mjs"></script>
124
+ </body>
125
+ </html>
@@ -0,0 +1,229 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ --ink-950: #071015;
4
+ --ink-900: #0b171d;
5
+ --ink-850: #102128;
6
+ --ink-800: #142b32;
7
+ --line: rgba(173, 220, 205, .16);
8
+ --line-strong: rgba(173, 220, 205, .28);
9
+ --text: #e7f1ed;
10
+ --muted: #91aaa4;
11
+ --faint: #5e7774;
12
+ --mint: #9ce0c6;
13
+ --mint-bright: #c9f3de;
14
+ --amber: #f6bd72;
15
+ --red: #f58b83;
16
+ --blue: #99c7e5;
17
+ --shadow: 0 24px 80px rgba(0, 0, 0, .28);
18
+ --radius-lg: 22px;
19
+ --radius-md: 14px;
20
+ --radius-sm: 9px;
21
+ font-family: "Bahnschrift", "Trebuchet MS", sans-serif;
22
+ }
23
+
24
+ * { box-sizing: border-box; }
25
+
26
+ html { min-width: 320px; background: var(--ink-950); }
27
+
28
+ body {
29
+ min-width: 320px;
30
+ min-height: 100vh;
31
+ margin: 0;
32
+ color: var(--text);
33
+ background:
34
+ radial-gradient(circle at 15% 0%, rgba(80, 147, 130, .14), transparent 32rem),
35
+ radial-gradient(circle at 95% 15%, rgba(246, 189, 114, .08), transparent 28rem),
36
+ var(--ink-950);
37
+ letter-spacing: .01em;
38
+ }
39
+
40
+ button, input { font: inherit; }
41
+ button { cursor: pointer; }
42
+ button:focus-visible, input:focus-visible, a:focus-visible { outline: 2px solid var(--amber); outline-offset: 3px; }
43
+
44
+ .ambient { position: fixed; pointer-events: none; z-index: 0; width: 22rem; height: 22rem; border: 1px solid rgba(156, 224, 198, .05); border-radius: 50%; }
45
+ .ambient::after { content: ""; position: absolute; inset: 2rem; border: 1px solid rgba(156, 224, 198, .04); border-radius: 50%; }
46
+ .ambient-left { top: 16rem; left: -12rem; }
47
+ .ambient-right { right: -13rem; bottom: 2rem; }
48
+
49
+ .app-shell { position: relative; z-index: 1; width: min(1440px, 100%); min-height: 100vh; margin: 0 auto; padding: 0 34px; }
50
+ .topbar { display: flex; align-items: center; justify-content: space-between; min-height: 92px; border-bottom: 1px solid var(--line); }
51
+ .brand { display: inline-flex; align-items: center; gap: 13px; color: var(--text); text-decoration: none; }
52
+ .brand-mark { display: flex; align-items: end; gap: 3px; width: 28px; height: 28px; padding: 4px; border: 1px solid var(--line-strong); border-radius: 8px; background: rgba(156, 224, 198, .06); }
53
+ .brand-mark span { display: block; width: 4px; border-radius: 3px 3px 1px 1px; background: var(--mint); }
54
+ .brand-mark span:nth-child(1) { height: 9px; opacity: .55; }
55
+ .brand-mark span:nth-child(2) { height: 16px; opacity: .8; }
56
+ .brand-mark span:nth-child(3) { height: 21px; background: var(--amber); }
57
+ .brand-name { display: block; font-family: Georgia, serif; font-size: 1.06rem; font-weight: 500; letter-spacing: -.02em; }
58
+ .eyebrow { margin: 0 0 7px; color: var(--faint); font-family: "Bahnschrift", sans-serif; font-size: .66rem; font-weight: 700; letter-spacing: .16em; line-height: 1; text-transform: uppercase; }
59
+ .connection-cluster { display: flex; align-items: center; gap: 9px; color: var(--muted); font-size: .78rem; }
60
+ .connection-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--faint); box-shadow: 0 0 0 4px rgba(94, 119, 116, .12); }
61
+ .connection-dot.is-online { background: var(--mint); box-shadow: 0 0 0 4px rgba(156, 224, 198, .1), 0 0 18px rgba(156, 224, 198, .7); }
62
+ .connection-dot.is-warning { background: var(--amber); box-shadow: 0 0 0 4px rgba(246, 189, 114, .1); }
63
+ .connection-dot.is-offline { background: var(--red); box-shadow: 0 0 0 4px rgba(245, 139, 131, .08); }
64
+ .icon-button { display: grid; place-items: center; width: 34px; height: 34px; margin-left: 9px; border: 1px solid var(--line); border-radius: 50%; color: var(--muted); background: transparent; font-size: 1.18rem; transition: border-color .2s, color .2s, transform .2s; }
65
+ .icon-button:hover { border-color: var(--mint); color: var(--mint-bright); transform: rotate(30deg); }
66
+ .global-search { display: flex; align-items: center; gap: 7px; margin-left: 16px; padding: 0 10px; border: 1px solid var(--line); border-radius: 999px; color: var(--faint); background: rgba(7, 16, 21, .42); }
67
+ .global-search input { width: 150px; padding: 8px 0; border: 0; outline: 0; background: transparent; font-size: .74rem; }
68
+ .global-search-submit { border: 0; padding: 0; color: var(--mint); background: transparent; font-size: .78rem; }
69
+ .global-search-submit:hover { color: var(--mint-bright); }
70
+
71
+ .main-content { padding: 70px 0 55px; }
72
+ .panel { border: 1px solid var(--line); border-radius: var(--radius-lg); background: linear-gradient(145deg, rgba(20, 43, 50, .84), rgba(11, 23, 29, .88)); box-shadow: var(--shadow); }
73
+ h1, h2, p { margin-top: 0; }
74
+ h1, h2 { font-family: Georgia, "Times New Roman", serif; font-weight: 400; letter-spacing: -.045em; }
75
+ input { border: 1px solid var(--line); border-radius: var(--radius-sm); color: var(--text); background: rgba(7, 16, 21, .66); }
76
+ input::placeholder { color: var(--faint); }
77
+ .dashboard-error { color: var(--red); }
78
+
79
+ .hero-row { display: flex; align-items: end; justify-content: space-between; gap: 20px; margin-bottom: 32px; }
80
+ .hero-row h1 { margin-bottom: 9px; font-size: clamp(2.5rem, 5vw, 4.6rem); line-height: .95; }
81
+ .muted { color: var(--muted); font-size: .82rem; }
82
+ .metrics-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 14px; }
83
+ .metric { min-height: 122px; padding: 19px; border: 1px solid var(--line); border-radius: var(--radius-md); background: rgba(20, 43, 50, .57); }
84
+ .metric-label { color: var(--faint); font-size: .66rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; }
85
+ .metric-value { display: block; margin: 15px 0 6px; color: var(--mint-bright); font-family: Georgia, serif; font-size: 2.15rem; line-height: 1; }
86
+ .metric-caption { color: var(--muted); font-size: .76rem; }
87
+ .dashboard-error { margin-bottom: 14px; padding: 14px 17px; border: 1px solid rgba(245, 139, 131, .28); border-radius: var(--radius-sm); background: rgba(245, 139, 131, .08); font-size: .82rem; }
88
+ .workspace-grid { display: grid; grid-template-columns: minmax(270px, .84fr) minmax(0, 1.6fr); gap: 14px; }
89
+ .project-panel, .detail-panel { min-height: 520px; padding: 22px; }
90
+ .panel-heading { display: flex; justify-content: space-between; align-items: start; gap: 14px; padding-bottom: 19px; border-bottom: 1px solid var(--line); }
91
+ .panel-heading h2 { margin: 0; font-size: 1.8rem; }
92
+ .search-field { display: flex; align-items: center; gap: 6px; padding: 0 9px; border: 1px solid var(--line); border-radius: 7px; color: var(--faint); }
93
+ .search-field input { width: 84px; padding: 7px 0; border: 0; background: transparent; outline: 0; font-size: .74rem; }
94
+ .project-list { display: grid; gap: 8px; padding-top: 14px; }
95
+ .project-item { display: grid; grid-template-columns: 9px minmax(0, 1fr) auto; gap: 12px; align-items: start; width: 100%; padding: 14px 12px; border: 1px solid transparent; border-radius: var(--radius-sm); color: var(--text); background: transparent; text-align: left; transition: background .2s, border-color .2s; }
96
+ .project-item:hover, .project-item.is-selected { border-color: var(--line); background: rgba(156, 224, 198, .07); }
97
+ .project-item.is-selected { border-left-color: var(--mint); }
98
+ .project-status { width: 7px; height: 7px; margin-top: 5px; border-radius: 50%; background: var(--faint); }
99
+ .project-status.is-healthy { background: var(--mint); box-shadow: 0 0 12px rgba(156, 224, 198, .65); }
100
+ .project-status.is-warning { background: var(--amber); }
101
+ .project-status.is-danger { background: var(--red); }
102
+ .project-title { display: block; overflow: hidden; font-size: .88rem; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
103
+ .project-meta { display: block; margin-top: 5px; overflow: hidden; color: var(--muted); font-size: .7rem; text-overflow: ellipsis; white-space: nowrap; }
104
+ .project-count { color: var(--faint); font-size: .7rem; }
105
+ .empty-state, .detail-placeholder { display: grid; place-items: center; align-content: center; min-height: 360px; color: var(--muted); text-align: center; }
106
+ .empty-state { gap: 9px; padding: 20px; font-size: .78rem; }
107
+ .empty-state strong { color: var(--text); }
108
+ .empty-orbit, .detail-glyph { color: var(--amber); font-size: 2rem; }
109
+ .detail-placeholder { max-width: 350px; margin: auto; }
110
+ .detail-placeholder h2 { margin-bottom: 11px; font-size: 2.3rem; }
111
+ .detail-placeholder p:last-child { color: var(--muted); font-size: .84rem; line-height: 1.55; }
112
+ .detail-header { display: flex; justify-content: space-between; gap: 20px; padding-bottom: 22px; border-bottom: 1px solid var(--line); }
113
+ .detail-header h2 { margin: 0; font-size: clamp(2rem, 4vw, 3.4rem); line-height: .95; }
114
+ .detail-header .eyebrow { margin-bottom: 9px; }
115
+ .health-badge { align-self: start; border: 1px solid rgba(156, 224, 198, .26); border-radius: 999px; padding: 7px 10px; color: var(--mint); background: rgba(156, 224, 198, .06); font-size: .67rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; white-space: nowrap; }
116
+ .health-badge.is-warning { border-color: rgba(246, 189, 114, .3); color: var(--amber); background: rgba(246, 189, 114, .06); }
117
+ .health-badge.is-danger { border-color: rgba(245, 139, 131, .3); color: var(--red); background: rgba(245, 139, 131, .06); }
118
+ .detail-facts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 18px 0 27px; }
119
+ .fact { padding: 13px; border-radius: var(--radius-sm); background: rgba(7, 16, 21, .36); }
120
+ .fact-label { display: block; margin-bottom: 7px; color: var(--faint); font-size: .62rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
121
+ .fact-value { display: block; overflow: hidden; color: var(--text); font-size: .82rem; text-overflow: ellipsis; white-space: nowrap; }
122
+ .change-heading { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 10px; }
123
+ .change-heading h3 { margin: 0; font-size: .8rem; letter-spacing: .08em; text-transform: uppercase; }
124
+ .change-heading span { color: var(--faint); font-size: .72rem; }
125
+ .change-list { display: grid; gap: 8px; }
126
+ .change-item { display: grid; grid-template-columns: 8px minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 12px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: rgba(7, 16, 21, .24); }
127
+ .change-indicator { width: 7px; height: 7px; border-radius: 50%; background: var(--faint); }
128
+ .change-indicator.is-current { background: var(--amber); box-shadow: 0 0 11px rgba(246, 189, 114, .6); }
129
+ .change-name { overflow: hidden; font-size: .79rem; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
130
+ .change-warning { display: block; margin-top: 4px; color: var(--amber); font-size: .68rem; }
131
+ .change-tasks { color: var(--muted); font-size: .68rem; white-space: nowrap; }
132
+ .stale-note { margin-top: 16px; color: var(--amber); font-size: .73rem; }
133
+ .workspace-header { display: grid; grid-template-columns: minmax(130px, .45fr) minmax(0, 1.5fr) auto; align-items: end; gap: 24px; margin-bottom: 24px; }
134
+ .workspace-header h1 { margin: 0 0 8px; font-size: clamp(2.4rem, 5vw, 4.7rem); line-height: .9; }
135
+ .back-link { align-self: start; color: var(--muted); font-size: .76rem; text-decoration: none; }
136
+ .back-link:hover { color: var(--mint-bright); }
137
+ .sync-badge { align-self: start; border: 1px solid var(--line); border-radius: 999px; padding: 8px 11px; color: var(--muted); font-size: .66rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
138
+ .sync-badge.is-online { border-color: rgba(156, 224, 198, .3); color: var(--mint); background: rgba(156, 224, 198, .06); }
139
+ .sync-badge.is-warning { border-color: rgba(246, 189, 114, .3); color: var(--amber); background: rgba(246, 189, 114, .06); }
140
+ .workspace-layout { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 14px; }
141
+ .workspace-rail { align-self: start; padding: 15px; }
142
+ .workspace-nav { display: grid; gap: 4px; }
143
+ .workspace-nav a { padding: 11px 12px; border-left: 2px solid transparent; border-radius: 6px; color: var(--muted); font-size: .78rem; text-decoration: none; transition: background .2s, color .2s, border-color .2s; }
144
+ .workspace-nav a:hover, .workspace-nav a.is-active { border-left-color: var(--amber); color: var(--text); background: rgba(246, 189, 114, .08); }
145
+ .workspace-meta { display: grid; gap: 8px; margin-top: 26px; padding-top: 18px; border-top: 1px solid var(--line); }
146
+ .workspace-meta .fact { padding: 10px; }
147
+ .workspace-content { min-height: 560px; padding: 28px; }
148
+ .workspace-section-heading { display: flex; align-items: end; justify-content: space-between; gap: 20px; padding-bottom: 20px; border-bottom: 1px solid var(--line); }
149
+ .workspace-section-heading h2 { margin: 0; font-size: clamp(2rem, 4vw, 3.4rem); line-height: .9; }
150
+ .workspace-intro { max-width: 650px; margin-top: 26px; color: var(--text); font-size: 1.1rem; line-height: 1.6; }
151
+ .workspace-intro .muted { margin-top: 22px; font-size: .76rem; }
152
+ .workspace-open { display: inline-flex; margin: 18px 0 24px; color: var(--mint); font-size: .76rem; text-decoration: none; }
153
+ .workspace-open:hover { color: var(--mint-bright); }
154
+ .memory-filter-strip, .category-strip { display: flex; flex-wrap: wrap; gap: 7px; margin: 18px 0; }
155
+ .filter-chip, .category-chip { padding: 6px 9px; border: 1px solid var(--line); border-radius: 999px; color: var(--muted); font-size: .65rem; }
156
+ .filter-chip.is-active, .category-chip { border-color: rgba(156, 224, 198, .24); color: var(--mint); background: rgba(156, 224, 198, .05); }
157
+ .memory-inline-search { display: block; margin: 18px 0; }
158
+ .memory-inline-search input { width: 100%; padding: 11px 13px; outline: 0; }
159
+ .memory-document-list { display: grid; gap: 8px; }
160
+ .memory-document-row { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 11px; align-items: center; padding: 13px; border: 1px solid var(--line); border-radius: var(--radius-sm); color: var(--text); background: rgba(7, 16, 21, .28); text-decoration: none; transition: border-color .2s, background .2s, transform .2s; }
161
+ .memory-document-row:hover { border-color: var(--line-strong); background: rgba(156, 224, 198, .07); transform: translateX(2px); }
162
+ .memory-document-glyph { display: grid; place-items: center; width: 27px; height: 27px; border: 1px solid rgba(246, 189, 114, .26); border-radius: 7px; color: var(--amber); background: rgba(246, 189, 114, .07); font-size: .72rem; font-weight: 700; }
163
+ .memory-document-copy { min-width: 0; }
164
+ .memory-document-copy strong, .memory-document-meta { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
165
+ .memory-document-copy strong { font-size: .8rem; }
166
+ .memory-document-meta { margin-top: 4px; color: var(--muted); font-size: .67rem; }
167
+ .memory-document-size { color: var(--faint); font-size: .66rem; white-space: nowrap; }
168
+ .reader-heading { padding-bottom: 15px; border-bottom: 1px solid var(--line); }
169
+ .reader-heading h2 { margin: 0; font-size: clamp(2rem, 4vw, 3.4rem); line-height: .92; }
170
+ .reader-meta { display: flex; flex-wrap: wrap; gap: 10px; margin: 15px 0; color: var(--muted); font-size: .68rem; }
171
+ .reader-meta span { padding: 6px 8px; border: 1px solid var(--line); border-radius: 5px; }
172
+ .reader-actions { display: flex; gap: 8px; margin-bottom: 19px; }
173
+ .reader-toggle, .reader-copy { border: 1px solid var(--line); border-radius: 7px; padding: 8px 10px; color: var(--muted); background: transparent; font-size: .7rem; }
174
+ .reader-toggle:hover, .reader-copy:hover { border-color: var(--mint); color: var(--mint-bright); }
175
+ .markdown-reader { max-width: 850px; color: #d6e4de; font-family: "Cascadia Code", "Consolas", monospace; font-size: .82rem; line-height: 1.7; }
176
+ .markdown-reader h2, .markdown-reader h3, .markdown-reader h4 { margin: 1.5em 0 .55em; color: var(--mint-bright); font-family: Georgia, serif; letter-spacing: -.03em; }
177
+ .markdown-reader h2 { font-size: 1.8rem; }
178
+ .markdown-reader h3 { font-size: 1.35rem; }
179
+ .markdown-reader h4 { font-size: 1.1rem; }
180
+ .markdown-reader p { margin: 0 0 .7em; white-space: pre-wrap; }
181
+ .markdown-reader li { margin-left: 1.2em; color: var(--mint); }
182
+ .markdown-reader pre { overflow: auto; margin: 0; padding: 16px; border: 1px solid var(--line); border-radius: var(--radius-sm); color: var(--mint-bright); background: rgba(7, 16, 21, .5); white-space: pre-wrap; }
183
+ .markdown-gap { height: .35em; }
184
+ .sync-callout, .workspace-error { margin-top: 24px; padding: 17px; border: 1px solid rgba(156, 224, 198, .2); border-radius: var(--radius-sm); color: var(--muted); background: rgba(156, 224, 198, .05); font-size: .8rem; line-height: 1.5; }
185
+ .workspace-error { border-color: rgba(245, 139, 131, .28); color: var(--red); background: rgba(245, 139, 131, .07); }
186
+ .footer-note { display: flex; justify-content: center; gap: 8px; padding: 18px 0 28px; color: var(--faint); font-size: .7rem; }
187
+ .footer-separator { color: var(--line-strong); }
188
+ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
189
+
190
+ @media (max-width: 820px) {
191
+ .app-shell { padding: 0 18px; }
192
+ .main-content { padding-top: 45px; }
193
+ .metrics-grid { grid-template-columns: repeat(2, 1fr); }
194
+ .workspace-grid { grid-template-columns: 1fr; }
195
+ .project-panel, .detail-panel { min-height: auto; }
196
+ .detail-panel { min-height: 420px; }
197
+ .workspace-layout { grid-template-columns: 1fr; }
198
+ .workspace-rail { order: 0; }
199
+ .workspace-nav { grid-template-columns: repeat(5, 1fr); }
200
+ .workspace-nav a { border-left: 0; border-bottom: 2px solid transparent; padding: 9px 6px; text-align: center; }
201
+ .workspace-nav a:hover, .workspace-nav a.is-active { border-bottom-color: var(--amber); border-left-color: transparent; }
202
+ .workspace-meta { display: none; }
203
+ }
204
+
205
+ @media (max-width: 560px) {
206
+ .topbar { min-height: 76px; }
207
+ .connection-cluster > #connection-label { display: none; }
208
+ .global-search { margin-left: 5px; }
209
+ .global-search input { width: 92px; }
210
+ .hero-row { align-items: start; flex-direction: column; }
211
+ .hero-row h1 { font-size: 2.8rem; }
212
+ .panel-heading { flex-direction: column; }
213
+ .search-field, .search-field input { width: 100%; }
214
+ .detail-facts { grid-template-columns: 1fr; }
215
+ .detail-header { flex-direction: column; }
216
+ .workspace-header { grid-template-columns: 1fr auto; align-items: start; gap: 13px; }
217
+ .workspace-header .back-link { grid-column: 1 / -1; }
218
+ .workspace-header h1 { font-size: 2.8rem; }
219
+ .workspace-content { padding: 20px 15px; }
220
+ .workspace-nav { grid-template-columns: repeat(3, 1fr); }
221
+ .memory-document-row { grid-template-columns: 28px minmax(0, 1fr); }
222
+ .memory-document-size { display: none; }
223
+ .footer-note { flex-direction: column; align-items: center; gap: 4px; }
224
+ .footer-separator { display: none; }
225
+ }
226
+
227
+ @media (prefers-reduced-motion: reduce) {
228
+ *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; }
229
+ }