← Commit history

dashboard 1.9.60: input feedback states everywhere

John Lauer ·54ba7d9cbf ·1mo ago ·parent 9282535
7 files changed +41−16
CHANGELOG.md+10
@@ -3,6 +3,16 @@ All notable changes to the Adom Bridge Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/fusion-bridge ยท GitHub backup: `adom-inc/fusion-bridge` +## 1.9.60 - 2026-08-18 (dashboard only; bridge zip stays 1.9.59)++- **Every interactive element now acknowledges the human (John: the UI must say "yes, you just+  hovered me / yes, you just pressed me").** Added across the Dashboard: :hover border/background+  shifts, :active pressed states (translateY + scale compress, darker fill), iconbtn press-shrink,+  pill hover/press, toggle hover ring + iOS-style knob stretch on press, prompt-row hover,+  input focus ring, and :focus-visible outlines for keyboard users. Transitions tuned (150ms+  hover, 60ms press - a press must feel instant).+- Companion: new `input-feedback` sub-skill in adom/adom-ui-design (the acknowledgment doctrine).+ ## 1.9.59 - 2026-08-17  - **Janitor tick section-scoping (found by the badge-shed watcher within the hour).** The seat
bin/fusion-dashboard
⋯ 1 unchanged line ⋯
dashboard/Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "fusion-dashboard"-version = "1.9.54"+version = "1.9.60" edition = "2021"  [dependencies]
dashboard/ui/index.html+17−5
@@ -24,7 +24,9 @@ header{height:44px;display:flex;align-items:center;gap:12px;padding:0 16px;backg .meta{font:12px 'JetBrains Mono',monospace;color:var(--text-2)} .actions{margin-left:auto;display:flex;gap:8px} .iconbtn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:1px solid transparent;border-radius:8px;color:var(--text-body);cursor:pointer}+.iconbtn{transition:background .15s ease,border-color .15s ease,transform .06s ease} .iconbtn:hover{background:var(--elevated);border-color:var(--border)}+.iconbtn:active{transform:scale(.9);background:var(--overlay)} main{max-width:1080px;margin:0 auto;padding:20px 16px 60px} h2{font-family:'Familjen Grotesk',sans-serif;font-size:17px;color:var(--text);margin:26px 0 12px} .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}@@ -36,12 +38,17 @@ h2{font-family:'Familjen Grotesk',sans-serif;font-size:17px;color:var(--text);ma .led.warn{background:var(--yellow)} .led-label{font-weight:500;color:var(--text)} .led-sub{font-size:12.5px;color:var(--text-2);margin-top:6px}-.btn{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 14px;border-radius:8px;border:1px solid var(--border);background:var(--elevated);color:var(--text);font:500 14px 'Satoshi',sans-serif;cursor:pointer;transition:background .15s ease}-.btn:hover{background:var(--overlay)}+.btn{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 14px;border-radius:8px;border:1px solid var(--border);background:var(--elevated);color:var(--text);font:500 14px 'Satoshi',sans-serif;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .06s ease}+.btn:hover{background:var(--overlay);border-color:#4b5563}+.btn:active{transform:translateY(1px) scale(.98);background:var(--surface)} .btn.primary{background:var(--accent);border-color:var(--accent);color:#05221f} .btn.primary:hover{background:var(--accent-hover)}+.btn.primary:active{background:#009d97;border-color:#009d97;transform:translateY(1px) scale(.98)}+.btn:focus-visible,.iconbtn:focus-visible,.tpill:focus-visible,.toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px} .btnrow{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}-.prompt{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:8px}+.prompt{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:8px;transition:border-color .15s ease}+.prompt:hover{border-color:#4b5563}+input:focus-visible{outline:none;border-color:var(--accent) !important} .prompt code{font:13px 'JetBrains Mono',monospace;color:var(--text-body);flex:1;white-space:normal} .copy{flex:none} .bar{height:8px;background:var(--elevated);border:1px solid var(--border);border-radius:999px;overflow:hidden;margin-top:10px;display:none}@@ -53,7 +60,10 @@ h2{font-family:'Familjen Grotesk',sans-serif;font-size:17px;color:var(--text);ma dialog{margin:auto;background:var(--overlay);color:var(--text-body);border:1px solid var(--border);border-radius:12px;padding:20px;max-width:520px;width:92vw} dialog::backdrop{background:rgba(0,0,0,.55)} .setrow{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border-bottom:1px solid var(--border)}-.toggle{width:42px;height:24px;border-radius:999px;background:var(--elevated);border:1px solid var(--border);position:relative;cursor:pointer;flex:none}+.toggle{width:42px;height:24px;border-radius:999px;background:var(--elevated);border:1px solid var(--border);position:relative;cursor:pointer;flex:none;transition:border-color .15s ease}+.toggle:hover{border-color:var(--accent)}+.toggle:active::after{width:22px}+.toggle.is-on:active::after{left:17px} .toggle::after{content:'';position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:999px;background:var(--text-2);transition:all .15s ease} .toggle.is-on{background:var(--accent);border-color:var(--accent)} .toggle.is-on::after{left:21px;background:#05221f}@@ -66,7 +76,9 @@ dialog::backdrop{background:rgba(0,0,0,.55)} #appinfo a{color:var(--accent)} .brand{cursor:default} #targets{display:flex;gap:8px;margin:0 0 14px}-.tpill{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text-body);cursor:pointer;font:500 13.5px 'Satoshi',sans-serif}+.tpill{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text-body);cursor:pointer;font:500 13.5px 'Satoshi',sans-serif;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .06s ease}+.tpill:hover{border-color:#4b5563;background:var(--elevated);color:var(--text)}+.tpill:active{transform:translateY(1px) scale(.97)} .tpill.active{border-color:var(--accent);color:var(--text);background:var(--elevated)} .tdot{width:8px;height:8px;border-radius:999px;background:var(--text-2)} .tdot.on{background:var(--green)}
install.sh+1−1
@@ -21,7 +21,7 @@ echo "Installed fusion-bridge skills: $(ls "$PKG_DIR/skills" 2>/dev/null | tr '\ # binary (the three-artifact pattern: bridge zip -> ab, THIS pkg -> container skills + # this download, page media -> wiki). Per the wiki's PKG_VS_RELEASE policy, binaries are # platform-tagged RELEASE assets, never tarball content - the installer fetches them.-DASH_VERSION="1.9.54"+DASH_VERSION="1.9.60" DASH_URL="https://wiki.adom.inc/download/adom/fusion-bridge/${DASH_VERSION}/fusion-dashboard" DEST="" if [ -w /usr/local/bin ]; then DEST=/usr/local/bin
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "fusion-bridge",-  "version": "1.9.54",+  "version": "1.9.60",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {
page.json+11−8
@@ -1,16 +1,20 @@ {   "slug": "fusion-bridge",-  "version": "1.9.54",+  "version": "1.9.60",   "type": "app",   "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.",   "dependencies": {-    "adom/adom-desktop": "*"+    "adom/adom-desktop": "^1.9.0"   },   "scripts": {     "install": "./install.sh",     "uninstall": "./uninstall.sh"   },   "tags": [+    "ab",+    "bridge",+    "fusion",+    "desktop-app",     "fusion360",     "autodesk",     "cad",@@ -70,7 +74,10 @@     "build a basic parts library",     "add a 3d model to a component",     "make a fusion 360 library with 3d",-    "set up the fusion bridge"+    "set up the fusion bridge",+    "fusion dashboard",+    "fusion status page",+    "open the fusion launch page"   ],   "discovery_pitch": "Use the Adom Bridge Fusion 360 bridge when the user wants to DRIVE Autodesk Fusion 360 from the cloud: open/search their team's Fusion cloud designs, lay out a PCB or do electronics, export STEP/IGES/STL/Gerbers/BOM, or build a component library with real rendering 3D. It runs Fusion on the user's own machine via Adom Bridge. NOT for web/browser/login/form-filling (that's the native-browser extension) and NOT for KiCad (that's the kicad bridge).",   "brief": "Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.",@@ -99,9 +106,5 @@       "label": "Part volume",       "prompt": "How much material does each printed part in this assembly use?"     }-  ],-  "author": {-    "name": "John Lauer",-    "email": "[email protected]"-  }+  ] }\ No newline at end of file