Controls share one radius scale, a 32px height and an accent focus ring. Management, publish and room forms sit on flat bordered surfaces with stacked labels. Alerts render as callouts, empty lists as quiet dashed states, and disclosures use a turning chevron. Hover and pressed states transition briefly unless motion is reduced.
- commit
- ddccb24bbf0bd23b4d8a3d573e2e22975351913c
- parent
- 6b2b10970f6c620fe5d99bd13ecff4af1339f8af
- author
- Dami <dami.etoile@gmail.com>
| M | tinyclient/ | 6 | ++-- |
| M | tinyclient/ | 4 | +- |
| M | tinyclient/ | 4 | +- |
| M | tinyclient/ | 2 | +- |
| M | tinyclient/ | 2 | +- |
| M | tinyclient/ | 2 | +- |
| M | tinyclient/ | 2 | +- |
| M | tinyclient/ | 2 | +- |
| M | tinyclient/ | 51 | ++++++++++++++++++------------ |
| M | tinyclient/ | 2 | +- |
@@ -7,7 +7,7 @@
77 {{range .Feed}}{{$r := asMap .}}<tr><td>{{template "nostrKey" (str (index $r "owner"))}}</td><td><a href="/repo?owner={{urlquery (str (index $r "owner"))}}&repo={{urlquery (str (index $r "identifier"))}}&view=home">{{str (index $r "identifier")}}</a>{{if index $r "private"}} <small>private</small>{{end}}</td><td>{{refName (index $r "head")}}</td></tr>88 {{end}}</tbody>99 </table>10-{{else}}<p>No repositories were reported.</p>10+{{else}}<p data-empty>No repositories were reported.</p>1111 {{end}}{{with (asMap .Event).next_cursor}}<p id="pages"><a href="{{browsePageURL "/repos" $.Query "cursor" .}}">next page</a></p>1212 {{end}}</section>1313 {{end}}@@ -63,7 +63,7 @@
6363 {{with $item.Grant}}<agent-grant-request request="{{$item.ID}}" data-review="{{.Raw}}"{{if .Error}} data-stale="true"{{end}}><h4>Proposed grant change</h4><table><thead><tr><th>scope</th><th>current</th><th>proposed</th></tr></thead><tbody>{{range .Rows}}{{if ne .Before .After}}<tr><th>{{.Label}}</th><td>{{.Before}}</td><td>{{.After}}</td></tr>{{end}}{{end}}</tbody></table>{{with .Error}}<p role="alert">{{.}}</p>{{else}}<button type="button" data-grant-approve data-primary disabled>Approve and grant</button>{{end}}<button type="button" data-grant-deny data-danger disabled>Deny</button></agent-grant-request>{{end}}6464 <footer>{{if and (ne $item.Type "question") (ne $item.Type "grant")}}<nostr-react event="{{$item.ID}}" pubkey="{{$item.Asker}}" kind="{{$item.Kind}}"><button name="reaction" value="+" data-primary>{{if eq $item.Type "wiki-proposal"}}Accept{{else if eq $item.Type "wiki-merge"}}Accept{{else}}Approve{{end}}</button> <button name="reaction" value="-" data-danger>{{if eq $item.Type "wiki-proposal"}}Reject{{else if eq $item.Type "wiki-merge"}}Reject{{else}}Deny{{end}}</button></nostr-react> {{end}}<details><summary>Reply</summary><nostr-compose kind="1111" root="{{$item.ID}}" root-pubkey="{{$item.Asker}}" root-kind="{{$item.Kind}}"{{with $item.Coordinate}} coordinate="{{.}}"{{end}}><label>Reply <textarea name="content" required></textarea></label><button>Sign and reply</button></nostr-compose></details> <a href="{{$item.Open}}">open</a></footer>6565 </approval-item>66-{{end}}{{else}}<p>Nothing waits for your decision.</p>66+{{end}}{{else}}<p data-empty>Nothing waits for your decision.</p>6767 {{end}}{{if $done}}<h3>Answered</h3>6868 <table id="rows">6969 <thead><tr><th>asker</th><th>request</th><th>answer</th></tr></thead>@@ -84,7 +84,7 @@
8484 {{range .Feed}}{{$s := asMap .}}<tr><td>{{template "nostrKey" (str (index $s "author"))}}</td><td><a href="{{str (index $s "url")}}">{{str (index $s "label")}}</a> <small>{{str (index $s "paths")}} paths</small></td><td>{{when (index $s "created_at")}}</td></tr>8585 {{end}}</tbody>8686 </table>87-{{else}}<p>No sites are published.</p>87+{{else}}<p data-empty>No sites are published.</p>8888 {{end}}</section>8989 {{end}}9090 @@ -9,7 +9,7 @@
99 {{$items := collabItems .Event}}{{if $items}}<table id="rows">1010 <thead><tr><th>status</th><th>title</th><th>author</th><th>opened</th></tr></thead>1111 <tbody>{{range $item := $items}}{{$item := asMap $item}}{{$s := collabProposal $item $.Actor (index $data "can_approve")}}<tr{{if $s.Shown}} data-state="{{$s.State}}"{{end}}><td>{{index $item "status"}}</td><td><a href="{{if $issues}}{{repoURL $.Query "issue" (str (index $item "id"))}}{{else}}{{repoURL $.Query "pr" (str (index $item "id"))}}{{end}}">{{index $item "title"}}</a>{{if $s.Shown}} <small>proposed | {{$s.State}}</small>{{end}}{{with collabLabels $item}} <small>{{join . ", "}}</small>{{end}}</td><td>{{template "nostrName" (str (index $item "author"))}}</td><td><time datetime="{{datetime (index $item "created_at")}}">{{when (index $item "created_at")}}</time></td></tr>12-{{end}}</tbody></table>{{else}}<p>No matching {{if $issues}}issues{{else}}pull requests{{end}}.</p>{{end}}12+{{end}}</tbody></table>{{else}}<p data-empty>No matching {{if $issues}}issues{{else}}pull requests{{end}}.</p>{{end}}1313 {{with index $data "next_cursor"}}<p id="pages"><a href="{{browsePageURL "/repo" $.Query "cursor" .}}">next page</a></p>{{end}}1414 {{if .Actor}}<details id="collaboration-new"><summary>{{if $issues}}New issue{{else}}New pull request{{end}}</summary>1515 <nostr-compose kind="{{if $issues}}1621{{else}}1618{{end}}" coordinate="{{$coordinate}}">@@ -32,7 +32,7 @@
3232 {{$replies := $diff.Thread}}{{if $replies}}<ol id="events">3333 {{range $reply := $replies}}{{$r := asMap $reply}}<li>{{template "collaborationProposal" (collabProposal $r $.Actor $can)}}{{template "nostrEvent" $reply}}{{with reviewLabel $reply}}<p><small>on {{.}}</small></p>{{end}}3434 {{if $.Actor}}<details><summary>Reply to this comment</summary><nostr-compose kind="1111" coordinate="{{$coordinate}}" root="{{index $item "id"}}" root-pubkey="{{index $item "author"}}" root-kind="{{index $item "kind"}}" parent="{{index $r "id"}}" parent-pubkey="{{index $r "pubkey"}}" parent-kind="1111"><label>Reply <textarea name="content" required></textarea></label><button>Sign and reply</button></nostr-compose></details>{{end}}</li>35-{{end}}</ol>{{else}}<p>No replies yet.</p>{{end}}35+{{end}}</ol>{{else}}<p data-empty>No replies yet.</p>{{end}}3636 {{with index $data "reply_cursor"}}<p id="pages"><a href="{{browsePageURL "/repo" $.Query "cursor" .}}">older replies</a></p>{{end}}3737 {{if .Actor}}<h2>Reply</h2>{{with $anchor}}<p id="reply-anchor">Commenting on <code>{{.File}}</code> line {{.Line}} ({{.Side}} side). <a href="{{repoURL $.Query "pr" (str (index $item "id"))}}">Comment on the whole change instead</a></p>{{end}}<nostr-compose id="reply-compose" kind="1111" coordinate="{{$coordinate}}" root="{{index $item "id"}}" root-pubkey="{{index $item "author"}}" root-kind="{{index $item "kind"}}">{{with $anchor}}<input type="hidden" name="file" value="{{.File}}"><input type="hidden" name="line" value="{{.Line}}"><input type="hidden" name="side" value="{{.Side}}">{{end}}<label>Comment <textarea name="content" required></textarea></label><button>Sign and reply</button></nostr-compose>3838 {{if index $data "can_status"}}<details id="status-controls"><summary>Change status</summary><nostr-compose kind="status" coordinate="{{$coordinate}}" root="{{index $item "id"}}" root-pubkey="{{index $item "author"}}" root-kind="{{index $item "kind"}}"><label>Status <select name="status"><option value="1630">Reopen</option><option value="1631">{{if $issues}}Resolve{{else}}Mark merged{{end}}</option><option value="1632">Close</option><option value="1633">Draft</option></select></label><label>Comment <textarea name="content"></textarea></label><button>Sign and update</button></nostr-compose></details>{{end}}@@ -21,7 +21,7 @@
2121 {{if .Review}}<h3>Access requests</h3>2222 {{with pendingRequests .Requests}}<table id="requests"><thead><tr><th>person</th><th>reason</th><th>asked</th><th></th></tr></thead><tbody>2323 {{range .}}{{$r := asMap .}}{{$pk := str (index $r "pubkey")}}<tr><td>{{template "nostrName" $pk}}</td><td>{{with str (index $r "reason")}}{{.}}{{else}}<small>no reason given</small>{{end}}</td><td><time datetime="{{datetime (index $r "requested_at")}}">{{short (index $r "requested_at")}}</time></td><td><rpc-form method="approvejoin" refresh><input type="hidden" name="param" value=""{{$pk}}""><button>Approve</button></rpc-form><rpc-form method="denyjoin" refresh><input type="hidden" name="param" value=""{{$pk}}""><button>Deny</button></rpc-form></td></tr>24-{{end}}</tbody></table>{{else}}<p>No pending requests.</p>{{end}}24+{{end}}</tbody></table>{{else}}<p data-empty>No pending requests.</p>{{end}}2525 {{with decidedRequests .Requests}}<ul id="decided">{{range .}}{{$r := asMap .}}{{$status := str (index $r "status")}}<li data-state="{{$status}}">{{template "nostrName" (str (index $r "pubkey"))}} <small>{{$status}}{{with index $r "decided_at"}}{{if short .}} <time datetime="{{datetime .}}">{{short .}}</time>{{end}}{{end}}{{with str (index $r "decided_by")}} by {{template "nostrName" .}}{{end}}</small></li>{{end}}</ul>{{end}}2626 {{end}}<h3>Invites</h3>2727 <rpc-form method="createinvite">@@ -71,7 +71,7 @@
7171 {{$events := index . "events"}}{{if $events}}<ol id="events">7272 {{range $events}}<li>{{template "nostrEvent" .}}</li>7373 {{end}}</ol>74-{{else}}<p>No events from this agent yet.</p>74+{{else}}<p data-empty>No events from this agent yet.</p>7575 {{end}}{{end}}7676 {{$edit := agentByKey .Feed (.Query.Get "edit")}}{{$es := asMap (index (asMap $edit) "scope")}}<h3 id="grant">{{if $edit}}Replace the grant for {{agentLabel $edit}}{{else}}New agent{{end}}</h3>7777 {{if $edit}}<p>Signing publishes a replacement grant for the same key.</p>@@ -213,5 +213,5 @@ then feature modules are loaded for the current page. */}}
213213 {{define "eventList"}}{{if .Feed}}<ol id="events">214214 {{range .Feed}}<li>{{template "nostrEvent" .}}</li>215215 {{end}}</ol>216-{{else}}<p>No events.</p>216+{{else}}<p data-empty>No events.</p>217217 {{end}}{{end}}@@ -96,7 +96,7 @@ func TestPeoplePageListsAccessRequestsWithDecisions(t *testing.T) {
9696 recorder = httptest.NewRecorder()9797 app.ServeHTTP(recorder, httptest.NewRequest(http.MethodGet, "/manage/people", nil))9898 body = recorder.Body.String()99- for _, want := range []string{`<h3>Access requests</h3>`, `<p>No pending requests.</p>`, `<ul id="decided">`, `<td>0 pending</td>`} {99+ for _, want := range []string{`<h3>Access requests</h3>`, `<p data-empty>No pending requests.</p>`, `<ul id="decided">`, `<td>0 pending</td>`} {100100 if !strings.Contains(body, want) {101101 t.Errorf("empty people page missing %q", want)102102 }@@ -27,7 +27,7 @@
2727 {{with index $repo "events"}}<ol id="events">2828 {{range .}}<li>{{template "nostrEvent" .}}</li>2929 {{end}}</ol>30-{{else}}<p>No repository activity.</p>30+{{else}}<p data-empty>No repository activity.</p>3131 {{end}}</section>3232 {{else if or (eq $view "issues") (eq $view "prs") (eq $view "issue") (eq $view "pr")}}{{template "collaboration" .}}3333 {{end}}{{end}}{{end}}@@ -12,7 +12,7 @@ establishes the initial state. */}}
1212 {{range .Feed}}{{$r := asMap .}}{{$id := str (index $r "id")}}{{$picture := socialMediaURL (str (index $r "picture"))}}<tr><td><a href="/rooms/{{$id}}"><room-avatar picture="{{$picture}}" fallback="{{roomAvatarURL $.URL $id}}" aria-hidden="true"><img src="{{if $picture}}{{$picture}}{{else}}{{roomAvatarURL $.URL $id}}{{end}}" alt="" width="32" height="32" loading="lazy"></room-avatar>{{or (str (index $r "name")) $id}}</a></td><td><status-badge kind="{{if eq (str (index $r "access")) "members"}}members{{else}}open{{end}}">{{if eq (str (index $r "access")) "members"}}members only{{else}}open{{end}}</status-badge>{{with str (index $r "about")}} <small>{{.}}</small>{{end}}</td><td>{{str (index $r "members")}}</td><td>{{with index $r "last_message_at"}}<time datetime="{{datetime .}}">{{when .}}</time>{{else}}no messages{{end}}</td></tr>1313 {{end}}</tbody>1414 </table>15-{{else}}<p>No rooms yet.</p>15+{{else}}<p data-empty>No rooms yet.</p>1616 {{end}}{{with (asMap .Event).next_cursor}}<p id="pages"><a href="{{browsePageURL "/chat" $.Query "cursor" .}}">next page</a></p>1717 {{end}}{{if and .Actor (not (restricted .Error))}}<h2 id="new-room">New room</h2>1818 <room-create><label>Name <input name="name" required maxlength="200" placeholder="build"></label><label>Id <input name="id" maxlength="64" pattern="[a-z0-9_-]{1,64}" placeholder="from the name"></label><label>Access <select name="access"><option value="open">open</option><option value="members">members only</option></select></label><label>About <textarea name="about" maxlength="2000"></textarea></label><button data-primary>Create room</button></room-create>@@ -12,10 +12,17 @@ code,kbd,samp,pre{font-family:var(--mono);font-size:13px}
1212 h1{font-size:24px;margin:0 0 12px}h2{font-size:17px;margin:22px 0 8px}h3{font-size:14px;margin:18px 0 6px}1313 p{margin:0 0 10px}1414 small{color:var(--muted)}15-[role=alert]{color:var(--alert)}16-[role=status]{color:var(--muted)}17-input,select,textarea,button{font:inherit;color:inherit;background:var(--paper);border:1px solid var(--line);padding:4px 8px;box-sizing:border-box;max-width:100%}18-button{cursor:pointer;background:var(--rail)}button:active{background:var(--hover)}@media(hover:hover){button:hover{background:var(--hover)}}button:disabled{cursor:default;color:var(--muted)}15+#content [role=alert]{margin:0 0 14px;padding:10px 14px;border:1px solid var(--del);border-radius:8px;background:var(--del);color:var(--alert)}[role=alert]{color:var(--alert)}16+[role=status]{color:var(--muted)}p[data-empty]{margin:8px 0 16px;padding:22px 16px;border:1px dashed var(--line);border-radius:8px;color:var(--muted);text-align:center}17+input,select,textarea,button{font:inherit;color:inherit;background:var(--paper);border:1px solid var(--line);border-radius:6px;padding:5px 10px;box-sizing:border-box;max-width:100%;accent-color:var(--accent)}18+input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]),select,button{min-height:32px}19+input[type=checkbox],input[type=radio]{width:15px;height:15px;padding:0;margin:0 6px 0 0;vertical-align:-2px}20+input[type=file]{padding:4px 0;border:0;background:transparent}21+:is(input,select,textarea):focus-visible{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}22+:is(button,a,summary,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px}23+@media(hover:hover){:is(input,select,textarea):hover:not(:focus):not(:disabled){border-color:var(--muted)}}24+@media(prefers-reduced-motion:no-preference){button,input,select,textarea,#rail nav a,#rows tbody tr,summary{transition:background-color .12s,border-color .12s,color .12s,filter .12s}}25+button{cursor:pointer;background:var(--rail);padding:5px 12px;font-size:13px;font-weight:500;line-height:20px}button:active{background:var(--hover)}@media(hover:hover){button:hover{background:var(--hover)}}button:disabled{cursor:default;color:var(--muted)}1926 /* Three button levels: the quiet default, one primary action per view, and destructive. */2027 button[data-primary]{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:500}button[data-primary]:active{filter:brightness(.85);background:var(--accent)}@media(hover:hover){button[data-primary]:hover{filter:brightness(.92);background:var(--accent)}}2128 button[data-danger]{color:var(--alert)}button[data-danger]:active{background:var(--del)}@media(hover:hover){button[data-danger]:hover{background:var(--del)}}@@ -27,7 +34,7 @@ status-badge[kind=wait],status-badge[kind=pending],status-badge[kind=paused],sta
2734 status-badge[kind=alert],status-badge[kind=denied],status-badge[kind=rejected],status-badge[kind=revoked]{color:var(--alert);background:var(--del)}2835 status-badge[kind=agent]{color:var(--ink);background:transparent;border:1px solid var(--ink);line-height:16px}2936 h1 status-badge,h2 status-badge{margin-left:8px;vertical-align:middle}30-textarea{width:100%;min-height:5em;font-family:var(--mono);font-size:13px}37+textarea{width:100%;min-height:5em;padding:8px 10px;border-radius:8px;font-family:var(--mono);font-size:13px;line-height:1.5}3138 pre{white-space:pre-wrap;overflow-wrap:anywhere}3239 img{max-width:100%}3340 @@ -145,11 +152,12 @@ dl{margin:.5rem 0}dt{font-weight:600}dd{margin:0 0 .35rem 1rem}
145152 [data-markdown-table] [data-align=left]{text-align:left}[data-markdown-table] [data-align=center]{text-align:center}[data-markdown-table] [data-align=right]{text-align:right}146153 147154 /* rpc-form, signed-form, publish-list: one signed call each. */148-rpc-form,signed-form,publish-list,nostr-compose,file-tools,file-upload,file-workspace-root:not([hidden]){display:block;border-bottom:1px solid var(--line);padding:10px 0}155+rpc-form,signed-form,publish-list,nostr-compose,file-tools,file-upload,file-workspace-root:not([hidden]){display:block;margin:0 0 12px;padding:14px 16px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}156+rpc-form>button,signed-form>button,rpc-form>form>button,signed-form>form>button{vertical-align:bottom;margin-bottom:8px}149157 nostr-compose,file-tools,file-upload,file-workspace-root{max-width:720px}150158 file-tools h3,file-upload h3{margin:0 0 4px}file-tools p,file-upload p{margin:6px 0}151-rpc-form label,signed-form label,publish-list label,nostr-compose label,file-tools label,file-upload label,#collaboration-filter label,#file-search label,#wiki-search label{display:inline-block;margin:0 10px 6px 0;vertical-align:top;font:13px var(--sans);color:var(--muted)}152-rpc-form label input,rpc-form label select,signed-form label input,nostr-compose label input,nostr-compose label select,file-tools label input,file-tools label select,file-upload label input,#collaboration-filter label input,#collaboration-filter label select,#file-search label input,#wiki-search label input{display:block;margin-top:2px;font:13px var(--mono);min-width:200px}159+rpc-form label,signed-form label,publish-list label,nostr-compose label,file-tools label,file-upload label,#collaboration-filter label,#file-search label,#wiki-search label{display:inline-block;margin:0 12px 8px 0;vertical-align:top;font:12px/1.4 var(--sans);color:var(--muted)}160+rpc-form label input,rpc-form label select,signed-form label input,nostr-compose label input,nostr-compose label select,file-tools label input,file-tools label select,file-upload label input,#collaboration-filter label input,#collaboration-filter label select,#file-search label input,#wiki-search label input{display:block;margin-top:4px;font:13px var(--mono);min-width:220px;color:var(--ink)}153161 file-upload label[data-share]{display:block}file-upload input[data-share-url]{width:100%}154162 file-upload form>label,file-upload [data-share] label{display:block;max-width:100%;margin-right:0}155163 file-upload select,file-upload progress{display:block;width:100%;max-width:100%;margin:6px 0 10px}@@ -162,7 +170,8 @@ file-upload label:has([type=checkbox]),#panel file-upload label:has([type=checkb
162170 #panel file-upload [hidden],file-upload [hidden],file-tools [hidden],#panel push-toggle [hidden]{display:none}163171 #panel push-toggle label{display:inline-block;margin:6px 12px 0 0}#panel push-toggle label input{display:inline-block;width:auto;min-width:0;margin:0 4px 0 0;vertical-align:middle}#panel push-toggle form{margin-top:4px}164172 file-upload p[data-drop]{margin:6px 0;color:var(--muted);font-size:12px}file-upload p[data-drop]>button{display:block;margin-bottom:4px}file-upload[data-over]{outline:1px dashed var(--accent);outline-offset:4px}165-#panel file-upload,#panel file-mirror{border:0;padding:0;max-width:none}#panel details{margin-top:8px}#panel details>summary{cursor:pointer;color:var(--muted);font-size:12px}173+#panel file-upload,#panel file-mirror{border:0;background:none;border-radius:0;margin:0;padding:0;max-width:none}#panel details{margin-top:8px}#panel details>summary{cursor:pointer;color:var(--muted);font-size:12px}174+summary{cursor:pointer;list-style:none}summary::-webkit-details-marker{display:none}summary::before{content:"";display:inline-block;width:6px;height:6px;margin:0 8px 1px 1px;border:solid var(--muted);border-width:0 1.5px 1.5px 0;transform:rotate(-45deg);transition:transform .12s}details[open]>summary::before{transform:rotate(45deg)}#topbar summary::before,#menu::before,#context-toggle::before{display:none}166175 rpc-form label:has(textarea),publish-list label:has(textarea),nostr-compose label:has(textarea){display:block}167176 rpc-form output,signed-form output,publish-list output,nostr-compose output,file-tools output,file-upload output,file-workspace-root output,private-services output{display:block;font:12px var(--mono);color:var(--muted);margin-top:4px;overflow-wrap:anywhere}168177 rpc-form output[data-error],file-tools output[data-error],file-upload output[data-error]{color:var(--alert)}@@ -179,14 +188,14 @@ agent-card h3{margin:0 0 4px;border:0;font-size:15px}agent-card h3 small{font:12
179188 agent-card table{border-collapse:collapse;font:13px var(--mono);width:auto;margin:0}180189 agent-card th{text-align:left;font-weight:normal;color:var(--muted);width:9em;padding:3px 0;border:0;vertical-align:top}agent-card td{padding:3px 0;border:0;overflow-wrap:anywhere}181190 agent-card td code{color:var(--muted)}182-agent-card p{margin:8px 0 0}agent-card rpc-form{display:inline-block;border:0;padding:0;margin:0 8px 0 0;vertical-align:top}agent-card rpc-form output:empty{display:none}191+agent-card p{margin:8px 0 0}agent-card rpc-form{display:inline-block;border:0;background:none;padding:0;margin:0 8px 0 0;vertical-align:top}agent-card rpc-form output:empty{display:none}183192 agent-card p>a{display:inline-block;font:12px var(--mono);line-height:29px;vertical-align:top;margin-right:10px}#rows td status-badge+small{margin-left:6px}184193 /* #requests: access requests waiting for a decision, with their controls. #decided lists the last answered ones. */185194 #requests{border-collapse:collapse;width:100%;max-width:720px;font:13px var(--mono)}186195 #requests th{text-align:left;font:12px var(--mono);color:var(--muted);font-weight:normal;padding:0 6px;height:28px;border-bottom:1px solid var(--line)}187196 #requests td{padding:8px 6px;border-bottom:1px solid var(--line);vertical-align:top;overflow-wrap:anywhere;line-height:1.35}188197 #requests td:nth-child(2){font-family:var(--sans)}#requests td:nth-child(3){white-space:nowrap;color:var(--muted);font-size:12px}#requests td:last-child{white-space:nowrap;width:150px}189-#requests rpc-form{display:inline-block;border:0;padding:0;margin:0 6px 0 0;vertical-align:middle}#requests rpc-form output:empty{display:none}#requests button{font-size:12px;padding:1px 6px}198+#requests rpc-form{display:inline-block;border:0;background:none;padding:0;margin:0 6px 0 0;vertical-align:middle}#requests rpc-form output:empty{display:none}#requests button{font-size:12px;padding:2px 8px;min-height:26px;line-height:18px}190199 #decided{list-style:none;margin:8px 0 0;padding:0;max-width:720px}#decided li{padding:3px 0;font:13px var(--mono)}#decided li small{color:var(--muted)}191200 #decided li[data-state=approved] small{color:var(--accent)}#decided li[data-state=denied] small{color:var(--alert)}192201 @@ -195,25 +204,25 @@ agent-card p>a{display:inline-block;font:12px var(--mono);line-height:29px;verti
195204 #custom-views th{text-align:left;font:12px var(--mono);color:var(--muted);font-weight:normal;padding:0 6px;height:28px;border-bottom:1px solid var(--line)}196205 #custom-views td{padding:8px 6px;border-bottom:1px solid var(--line);vertical-align:top;overflow-wrap:anywhere;line-height:1.35}197206 #custom-views td:nth-child(7){white-space:nowrap;color:var(--muted);font-size:12px}#custom-views td:last-child{white-space:nowrap;width:210px}198-#custom-views rpc-form{display:inline-block;border:0;padding:0;margin:0 6px 0 0;vertical-align:middle}#custom-views rpc-form output:empty{display:none}#custom-views button{font-size:12px;padding:1px 6px}207+#custom-views rpc-form{display:inline-block;border:0;background:none;padding:0;margin:0 6px 0 0;vertical-align:middle}#custom-views rpc-form output:empty{display:none}#custom-views button{font-size:12px;padding:2px 8px;min-height:26px;line-height:18px}199208 #custom-views-empty{color:var(--muted);font:13px var(--sans)}200209 view-form{display:block;border-bottom:1px solid var(--line);padding:10px 0;max-width:720px}201210 view-form label{display:inline-block;margin:0 10px 6px 0;vertical-align:top;font:13px var(--sans);color:var(--muted)}202-view-form label input,view-form label select{display:block;margin-top:2px;font:13px var(--mono);min-width:200px}211+view-form label input,view-form label select{display:block;margin-top:4px;font:13px var(--mono);min-width:220px;color:var(--ink)}203212 view-form [role=alert]{color:var(--alert);font:13px var(--sans);margin:8px 0 4px}view-form label[data-secret] input{min-width:320px}204213 /* figure[data-view]: a transparent artifact with a native source disclosure. */205214 figure[data-view]{margin:12px 0}view-artifact{display:block}view-artifact img{display:block;max-width:100%;height:auto;background:transparent}view-artifact img[hidden]{display:none}view-artifact details{margin-top:6px}view-artifact details>summary{cursor:pointer;color:var(--muted);font:12px var(--mono)}view-artifact pre{margin:6px 0 0}206215 /* agent-callback: one registered callback on an agent card, with its controls. */207216 agent-callback{display:block;margin:0 0 4px}agent-callback code{color:inherit}208-agent-callback rpc-form{display:inline-block;border:0;padding:0;margin:0 0 0 6px;vertical-align:middle}agent-callback rpc-form output:empty{display:none}agent-callback button{font-size:12px;padding:1px 6px}217+agent-callback rpc-form{display:inline-block;border:0;background:none;padding:0;margin:0 0 0 6px;vertical-align:middle}agent-callback rpc-form output:empty{display:none}agent-callback button{font-size:12px;padding:2px 8px;min-height:26px;line-height:18px}209218 #rows:has(td[data-state]){table-layout:fixed}#rows:has(td[data-state]) td:nth-child(3){width:110px}#rows:has(td[data-state]) td:last-child{width:150px}210219 [data-state=active],#rows td[data-state=active]{color:var(--accent)}[data-state=paused],#rows td[data-state=paused]{color:var(--bark)}[data-state=revoked],#rows td[data-state=revoked]{color:var(--alert)}211220 agent-grant,profile-form{display:block;border-bottom:1px solid var(--line);padding:10px 0;max-width:720px}212221 agent-grant label,profile-form label{display:inline-block;margin:0 10px 6px 0;vertical-align:top;font:13px var(--sans);color:var(--muted)}213-agent-grant label input,agent-grant label select,profile-form label input{display:block;margin-top:2px;font:13px var(--mono);min-width:200px}profile-form label:has(textarea){display:block}profile-form textarea{display:block;width:100%;max-width:520px;min-height:3em;font:13px var(--mono)}profile-form output{white-space:pre-wrap}222+agent-grant label input,agent-grant label select,profile-form label input{display:block;margin-top:4px;font:13px var(--mono);min-width:220px;color:var(--ink)}profile-form label:has(textarea){display:block}profile-form textarea{display:block;width:100%;max-width:520px;min-height:3em;font:13px var(--mono)}profile-form output{white-space:pre-wrap}214223 agent-grant label:has(textarea),agent-grant label[data-secret]{display:block}agent-grant label[data-secret] input{width:100%}agent-grant label[hidden]{display:none}215224 agent-grant output,profile-form output{display:block;font:12px var(--mono);color:var(--muted);margin-top:4px;overflow-wrap:anywhere}agent-grant output[data-error],profile-form output[data-error]{color:var(--alert)}216-#panel rpc-form{border:0;padding:4px 0}#panel rpc-form output:empty{display:none}225+#panel rpc-form{border:0;background:none;border-radius:0;margin:0;padding:4px 0}#panel rpc-form output:empty{display:none}217226 connect-card{display:block;border-bottom:1px solid var(--line);padding:10px 0;max-width:720px}connect-card h3{margin:0 0 4px;border:0;font-size:15px}connect-card h3 small{font:12px var(--mono);color:var(--muted)}connect-card p{margin:0 0 6px;color:var(--muted)}connect-card label{display:inline-block;font:13px var(--sans);color:var(--muted);margin:0 10px 6px 0}connect-card label input{display:block;font:13px var(--mono);min-width:200px}connect-card a,connect-card button{margin-right:10px;font-size:13px}connect-card output{display:block;font:12px var(--mono);color:var(--muted);overflow-wrap:anywhere}connect-card details img{display:block;margin:6px 0;background:#fff;padding:6px;border:1px solid var(--line)}218227 219228 /* json-view: structured rendering of any JSON payload. */@@ -296,7 +305,7 @@ wiki-proposal[data-state=pending],collaboration-proposal[data-state=pending]{bor
296305 #events li>collaboration-proposal,diff-view td>collaboration-proposal{margin:6px 0 8px;max-width:none}#collaboration-list #rows tr[data-state] td:nth-child(2)>small:first-of-type{font:12px var(--mono)}#collaboration-list #rows tr[data-state=pending] td:nth-child(2)>small:first-of-type{color:var(--bark)}#collaboration-list #rows tr[data-state=approved] td:nth-child(2)>small:first-of-type{color:var(--accent)}#collaboration-list #rows tr[data-state=rejected] td:nth-child(2)>small:first-of-type{color:var(--alert)}297306 #merge-status{font:12px var(--mono);color:var(--muted)}#wiki-compare h2{margin-top:18px}#wiki-redirects,#wiki-revision-note{font:12px var(--mono);color:var(--muted)}#wiki-revision-note{margin:0 0 10px}wiki-proposal>small{display:block;margin-top:4px;font:12px var(--mono);color:var(--muted)}#wiki-page #rows td small{font:12px var(--mono);color:var(--muted)}298307 wiki-compose{display:block;max-width:720px;border-bottom:1px solid var(--line);padding:10px 0}299-wiki-compose label{display:inline-block;margin:0 10px 6px 0;vertical-align:top;font:13px var(--sans);color:var(--muted)}wiki-compose label input{display:block;margin-top:2px;font:13px var(--mono);min-width:200px}308+wiki-compose label{display:inline-block;margin:0 10px 6px 0;vertical-align:top;font:13px var(--sans);color:var(--muted)}wiki-compose label input{display:block;margin-top:4px;font:13px var(--mono);min-width:220px;color:var(--ink)}300309 wiki-compose label:has(textarea){display:block}wiki-compose textarea{min-height:14em}wiki-compose button{margin-right:6px}301310 wiki-compose output{display:block;font:12px var(--mono);color:var(--muted);margin-top:4px;overflow-wrap:anywhere}wiki-compose output[data-error]{color:var(--alert)}302311 @@ -377,9 +386,9 @@ room-files button{position:absolute;right:0;top:0;width:44px;height:44px;padding
377386 room-compose output,room-create output,room-action output{display:block;font:12px var(--mono);color:var(--muted);margin-top:4px;overflow-wrap:anywhere}378387 room-compose output:empty{display:none}379388 room-compose output[data-error],room-create output[data-error],room-action output[data-error]{color:var(--alert)}380-room-create{display:block;max-width:720px;border-bottom:1px solid var(--line);padding:10px 0}381-room-create label{display:inline-block;margin:0 10px 6px 0;vertical-align:top;font:13px var(--sans);color:var(--muted)}382-room-create label input,room-create label select{display:block;margin-top:2px;font:13px var(--mono);min-width:200px}room-create label:has(textarea){display:block}389+room-create{display:block;max-width:720px;margin:0 0 12px;padding:14px 16px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}390+room-create label{display:inline-block;margin:0 12px 8px 0;vertical-align:top;font:12px/1.4 var(--sans);color:var(--muted)}391+room-create label input,room-create label select{display:block;margin-top:4px;font:13px var(--mono);min-width:220px;color:var(--ink)}room-create label:has(textarea){display:block}383392 room-action{display:block}#panel room-action label{margin-top:6px}#panel room-action button{margin-top:8px}384393 #members li[data-agent] small{color:var(--bark)}385394 #panel #members li{font:12px var(--mono);line-height:22px}@@ -561,7 +570,7 @@ social-compose input:not([type=file]),social-compose textarea{width:100%;box-siz
561570 #direct-chat>header{padding-bottom:14px;border-bottom:1px solid var(--line)}562571 #direct-chat h1{font-size:23px;overflow-wrap:anywhere}563572 direct-start,direct-chats,direct-thread,direct-compose,direct-settings{display:block;min-width:0}564-direct-start{margin:12px 0 18px;padding:14px;background:var(--rail);border:1px solid var(--line);border-radius:10px}573+direct-start{margin:12px 0 18px;padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:8px}565574 direct-start label{display:block;color:var(--muted);font-size:12px}566575 direct-start input{display:block;width:100%;margin:6px 0 10px;min-height:42px;font-size:16px}567576 direct-start button,direct-compose button{min-height:40px;padding:8px 16px;border-radius:7px}direct-compose button{background:var(--accent);color:var(--paper);border:0}@@ -9,7 +9,7 @@
99 {{range .Feed}}{{$p := asMap .}}{{$v := asMap (index $p "version")}}{{$s := wikiProposal $v $.Actor $can}}<tr{{if $s.Shown}} data-state="{{$s.State}}"{{end}}><td><a href="{{wikiURL (str (index $p "d"))}}">{{str (index $p "title")}}</a>{{if $s.Shown}} <small>proposed | {{$s.State}}</small>{{end}}</td><td>{{template "nostrName" (str (index $v "author"))}}</td><td>{{str (index $p "versions")}}</td><td>{{str (index $p "open_merges")}} open</td><td>{{when (index $v "created_at")}}</td></tr>1010 {{end}}</tbody>1111 </table>12-{{else}}<p>No pages yet.</p>12+{{else}}<p data-empty>No pages yet.</p>1313 {{end}}{{with (asMap .Event).next_cursor}}<p id="pages"><a href="{{browsePageURL "/wiki" $.Query "cursor" .}}">next page</a></p>1414 {{end}}</section>1515 {{end}}