Feedback sweep: spinners on every async button, toasts for action outcomes, top activity bar, loading states on every page, terminal connecting overlay, dashboard save indicator, task pane pinned above the package list with auto-scroll and completion toast
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
d08b246b5f
commit
724f30c02b
@@ -59,6 +59,7 @@ button { font: inherit; color: inherit; background: none; border: 0; cursor: poi
|
||||
/* main + terminal */
|
||||
.main { flex: 1; min-width: 0; position: relative; background: #0d1117; }
|
||||
.term { position: absolute; inset: 0; padding: 6px 0 0 6px; }
|
||||
.term-inner { height: 100%; }
|
||||
.term .xterm { height: 100%; }
|
||||
.xterm-viewport::-webkit-scrollbar { width: 8px; } .xterm-viewport::-webkit-scrollbar-thumb { background: var(--border); }
|
||||
|
||||
@@ -207,3 +208,24 @@ button { font: inherit; color: inherit; background: none; border: 0; cursor: poi
|
||||
.modal label { display: flex; flex-direction: column; gap: 6px; font-size: 12px; }
|
||||
.modal input { padding: 9px 10px; background: var(--bg); border: 1px solid var(--border); border-radius: 6px; color: var(--fg); font-size: 16px; }
|
||||
.btn.danger { color: var(--bad); border-color: var(--bad); } .btn.danger:disabled { opacity: .4; }
|
||||
|
||||
/* feedback: spinners, buttons, toasts, activity bar */
|
||||
.spin { display: inline-block; border: 2px solid rgba(128,128,128,.35); border-top-color: currentColor; border-radius: 50%; animation: spin .7s linear infinite; vertical-align: -2px; margin-right: 6px; flex-shrink: 0; box-sizing: border-box; }
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
.btn, .primary, .login button { display: inline-flex; align-items: center; justify-content: center; }
|
||||
.btn.busy, .primary.busy { opacity: .85; cursor: progress; }
|
||||
.loading { gap: 10px; padding: 24px; height: auto; min-height: 120px; }
|
||||
.loading .spin { margin: 0; }
|
||||
.tools-row { display: flex; gap: 6px; } .tools-row input { flex: 1; min-width: 0; }
|
||||
.toasts { position: fixed; left: 50%; bottom: calc(var(--footer-h) + 16px + env(safe-area-inset-bottom)); transform: translateX(-50%); z-index: 60; display: flex; flex-direction: column; gap: 6px; align-items: center; pointer-events: none; }
|
||||
.toast { pointer-events: auto; padding: 8px 14px; border-radius: 8px; background: var(--bg3); border: 1px solid var(--border); font-size: 13px; box-shadow: 0 4px 16px rgba(0,0,0,.45); max-width: 90vw; cursor: pointer; animation: toast-in .15s ease-out; }
|
||||
.toast.ok { border-color: var(--ok); } .toast.err { border-color: var(--bad); color: var(--bad); }
|
||||
@keyframes toast-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
|
||||
.netbar { position: fixed; top: 0; left: 0; right: 0; height: 2px; z-index: 70; background: var(--accent2); opacity: 0; transition: opacity .2s .3s; pointer-events: none; }
|
||||
.netbar.on { opacity: 1; animation: netbar 1.1s ease-in-out infinite; }
|
||||
@keyframes netbar { 0% { transform: scaleX(0); transform-origin: left; } 50% { transform: scaleX(1); transform-origin: left; } 51% { transform-origin: right; } 100% { transform: scaleX(0); transform-origin: right; } }
|
||||
.term-overlay { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: rgba(13,17,23,.55); color: var(--muted); z-index: 2; gap: 4px; font-size: 13px; }
|
||||
.saved { font-size: 11px; color: var(--muted); display: inline-flex; align-items: center; }
|
||||
.task.running .logs-bar { background: rgba(57,135,229,.12); }
|
||||
.task.failed .logs-bar { background: rgba(255,123,114,.12); }
|
||||
.task.done .logs-bar { background: rgba(63,185,80,.10); }
|
||||
|
||||
Reference in New Issue
Block a user