UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

UI polish: deferred a11y items (stacked on #66) - #67

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred
Jul 27, 2026
Merged

UI polish: deferred a11y items (stacked on #66)#67
kateebonner merged 2 commits into
local/amicodefrom
kate/ui-polish-deferred

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Stacked on #66 (which stacks on #65) — the diff unique here is the last commit.

The four items deferred from the #66 audit, done properly:

  1. Institution autocomplete → combobox.role=combobox + aria-expanded/aria-controls/aria-activedescendant on the input, listbox/option semantics on the dropdown, ArrowUp/Down navigation with a visible active highlight, Enter picks, Escape closes. The ⌘V paste fallback still rides the same keydown.
  2. Context-tree keyboard navigation. The canvas is focusable (role=application); arrow keys walk the tree in draw order, Home/End jump, Enter/Space opens the focused node (file tab or Vault panel — same paths as clicking). The engine gained focus(id) (camera-glance + ring, label raised), and a visually-hidden aria-live region announces each focused node.
  3. "Amico remembers" disclosures. Details now unfold inline on click/Enter with aria-expanded, instead of living in a hover-only title tooltip invisible to keyboard and touch.
  4. One input recipe. New .amc-input (+ --compact) class replaces the three divergent inline recipes (onboarding wizard, profile editor, connections credential forms — 14 inputs). Focus ring and disabled/placeholder styles are part of the recipe.

Still open by choice: the solver toggle's ⚡ emoji (needs Kate's call).

Verification: typecheck clean (app, ui), 787 tests green, lint 0 errors.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 17:49
Multi-agent audit (48 findings, adversarially triaged) against the
amicode design system and ui-ux-pro-max critical checklists. Fixes:
Tokens: update pill off the grey-on-light icon-accent color-mix fills
onto --accent-fill-soft/--accent-edge; connections project rows off
banned v1 vars (--border-weak-base/--surface-base); ask-card selected
edge onto --accent-edge; new --accent-fill-hover token replaces two
hand-rolled accent mixes; titlebar tabs onto the radius scale; channel
badge raw hex dropped; run-gallery scrim into the 40-60% band.
Type scale: off-scale weights (450/530/550/640/750/800) and sizes
(9/11.5/12.5/15px) across solver-toggle, defaults-capsule, amicode.css,
home-cards onto the sanctioned scales; off-grid paddings/gaps onto the
4px grid.
Interaction: bounds-moving press/hover transforms (translateY) replaced
with elevation/fill feedback; hover+focus-visible states added to yellow
CTA, action cards, rail inspect/retry, starter chips, suggestion rows;
busy save button gets wait cursor + reduced emphasis; sub-150ms
transitions raised; MeetAmico shine + lift gated on reduced motion.
A11y: onboarding-wizard inputs no longer strip the focus outline;
action cards and MeetAmico are keyboard-operable (role, tabIndex,
Enter/Space); profile inputs get real labels; edit-profile toggle gets
aria-label/expanded; vault-panel text-glyph arrows replaced with the
icon family; context-tree legend unhidden from AT; vault mount chips
join the accent selected pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…av, disclosures, one input recipe
- Institution autocomplete is a real combobox: role/aria-expanded/
aria-activedescendant, arrow-key navigation, Enter picks, Escape
closes; options are listbox options with an active highlight.
- Context tree is keyboard-operable: the canvas takes focus, arrows walk
the tree's flat order, Home/End jump, Enter/Space opens the focused
node; the engine gained focus(id) and an aria-live region announces
each node. role=img corrected to role=application.
- 'Amico remembers' details unfold inline as disclosures instead of
hiding in a hover-only title tooltip.
- ONE text-input recipe: .amc-input (+ --compact) in amicode.css
replaces the three divergent inline recipes across the onboarding
wizard, profile editor, and connections forms — focus ring included so
no caller ever strips an outline again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonnerforce-pushed the kate/ui-polish-deferred branch from 5c28312 to b183578CompareJuly 27, 2026 21:49
kateebonner added a commit that referenced this pull request Jul 27, 2026
Vault browser replaces git review in the session side panel (stacked on #67)
@kateebonner
kateebonner merged commit b183578 into local/amicodeJul 27, 2026
0 of 4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kateebonner