diff --git a/nest/dashboard/static/css/tools.css b/nest/dashboard/static/css/tools.css
new file mode 100644
index 0000000..3beaa95
--- /dev/null
+++ b/nest/dashboard/static/css/tools.css
@@ -0,0 +1,60 @@
+.tool-choices { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; }
+.tool-choice { display: flex; align-items: center; gap: 11px; padding: 12px; border: 1px solid var(--line); border-radius: 13px; background: #ffffff75; cursor: pointer; }
+.tool-choice:hover { background: #fff; }
+.tool-choice.is-selected { background: var(--yellow-soft); border-color: #ded09a; }
+.tool-choice > span { display: grid; gap: 2px; min-width: 0; }
+.tool-choice strong { font-size: 11px; }
+.tool-choice small { color: var(--muted); font-size: 9px; }
+.tool-choice input, .tool-card input { flex: 0 0 auto; }
+.tools-section-heading { margin-block: 7px 15px; }
+.tools-section-heading .button-row { justify-content: flex-end; }
+.tools-section-heading .button-row > span { font-size: 10px; }
+.tools-note { min-height: 22px; margin-bottom: 12px; }
+.tools-error { margin-bottom: 12px; }
+.tools-error:empty { display: none; }
+.tools-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
+.tool-card { display: flex; flex-direction: column; min-width: 0; padding: 18px; border-radius: 18px; border: 1px solid #ffffffbd; background: #faf9fcbf; box-shadow: var(--shadow-card); }
+.tool-card-heading { display: flex; gap: 11px; align-items: center; cursor: pointer; }
+.tool-card-heading > span { min-width: 0; display: grid; gap: 4px; }
+.tool-card-heading strong { font-size: 14px; letter-spacing: -.02em; }
+.tool-card-heading small { font-size: 9px; color: var(--muted); }
+.tool-card > p { margin: 12px 0 5px; color: var(--muted); font-size: 10px; }
+.tool-source { font-size: 8px; color: var(--faint); margin-bottom: 17px; }
+.tool-card-footer { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; margin-top: auto; }
+.tool-installed { border-color: #b8c6ae70; }
+.tool-installed button:disabled { cursor: default; background: var(--sage-soft); color: #64705c; opacity: 1; }
+.tool-state { font-size: 9px; color: var(--muted); }
+.tool-state-good { color: #68765c; }
+.tool-state-error { color: #a45f57; }
+.tool-state-active { color: #827037; }
+.tool-state-active::before { content: ''; display: inline-block; width: 5px; height: 5px; margin-right: 5px; border-radius: 50%; background: var(--yellow); animation: tool-pulse 1.5s ease-in-out infinite; }
+.tool-usage { margin-top: 13px; padding-top: 10px; border-top: 1px solid var(--line); font-size: 9px; color: var(--muted); }
+.tool-usage summary { cursor: pointer; }
+.tool-usage code { display: block; margin: 9px 0; font-family: var(--mono); font-size: 9px; overflow-wrap: anywhere; }
+.tool-job { margin-top: 22px; padding: 22px; }
+.tool-job .section-heading { flex-wrap: wrap; gap: 10px; margin-bottom: 8px; }
+.tool-job .select-wrap { max-width: 100%; }
+.tool-job select { max-width: 100%; }
+.tool-job-message { color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }
+.tool-progress { display: block; width: 100%; height: 5px; margin: 15px 0; border: none; border-radius: 10px; background: #e7e2eb; accent-color: #b8ad69; }
+.tool-progress::-webkit-progress-bar { background: #e7e2eb; border-radius: 10px; }
+.tool-progress::-webkit-progress-value { background: #c3b875; border-radius: 10px; }
+.tool-progress::-moz-progress-bar { background: #c3b875; border-radius: 10px; }
+.tool-job-items { padding: 0; margin: 0; list-style: none; }
+.tool-job-items > li { padding: 10px 0; border-top: 1px solid var(--line); }
+.tool-job-items summary { cursor: pointer; font-size: 11px; }
+.tool-job-items summary > .tool-state { float: right; margin-left: 12px; }
+.tool-job-items .form-error { margin-top: 10px; }
+.tool-output { max-height: 240px; overflow: auto; margin: 10px 0 0; padding: 15px; border-radius: 12px; background: #34313c; color: #ede8f1; white-space: pre-wrap; overflow-wrap: anywhere; font: 10px/1.7 var(--mono); }
+.tools-recovery { margin-top: 16px; }
+@keyframes tool-pulse { 50% { opacity: .35; } }
+@media (max-width: 1250px) { .tools-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
+@media (max-width: 700px) {
+ .tools-section-heading { align-items: flex-start; flex-direction: column; }
+ .tools-section-heading .button-row { justify-content: flex-start; }
+ .tools-grid { grid-template-columns: 1fr; }
+ .tool-card { padding: 16px; }
+ .tool-job { padding: 16px; }
+ .tool-choice { padding: 10px; gap: 8px; }
+}
+@media (prefers-reduced-motion: reduce) { .tool-state-active::before { animation: none; } }
diff --git a/nest/dashboard/static/index.html b/nest/dashboard/static/index.html
index 39c7730..ad904f5 100644
--- a/nest/dashboard/static/index.html
+++ b/nest/dashboard/static/index.html
@@ -12,10 +12,12 @@
+
-
+
+