diff --git a/app/backend/static/css/output.css b/app/backend/static/css/output.css
index 537e845..ea7bce5 100644
--- a/app/backend/static/css/output.css
+++ b/app/backend/static/css/output.css
@@ -6,10 +6,8 @@
--font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
--color-red-50: oklch(97.1% 0.013 17.38);
- --color-red-200: oklch(88.5% 0.062 18.334);
--color-red-400: oklch(70.4% 0.191 22.216);
--color-red-500: oklch(63.7% 0.237 25.331);
- --color-red-600: oklch(57.7% 0.245 27.325);
--color-amber-500: oklch(76.9% 0.188 70.08);
--color-yellow-500: oklch(79.5% 0.184 86.047);
--color-purple-50: oklch(97.7% 0.014 308.299);
@@ -17,7 +15,6 @@
--color-black: #000;
--color-white: #fff;
--spacing: 0.25rem;
- --container-xs: 20rem;
--container-sm: 24rem;
--container-md: 28rem;
--container-lg: 32rem;
@@ -315,9 +312,6 @@
.mt-3 {
margin-top: calc(var(--spacing) * 3);
}
- .mt-6 {
- margin-top: calc(var(--spacing) * 6);
- }
.mr-1 {
margin-right: var(--spacing);
}
@@ -330,18 +324,12 @@
.mb-2 {
margin-bottom: calc(var(--spacing) * 2);
}
- .mb-3 {
- margin-bottom: calc(var(--spacing) * 3);
- }
.mb-4 {
margin-bottom: calc(var(--spacing) * 4);
}
.mb-6 {
margin-bottom: calc(var(--spacing) * 6);
}
- .ml-0\.5 {
- margin-left: calc(var(--spacing) * 0.5);
- }
.ml-1 {
margin-left: var(--spacing);
}
@@ -465,27 +453,18 @@
.w-11 {
width: calc(var(--spacing) * 11);
}
- .w-14 {
- width: calc(var(--spacing) * 14);
- }
.w-16 {
width: calc(var(--spacing) * 16);
}
.w-32 {
width: calc(var(--spacing) * 32);
}
- .w-40 {
- width: calc(var(--spacing) * 40);
- }
.w-48 {
width: calc(var(--spacing) * 48);
}
.w-\[260px\] {
width: 260px;
}
- .w-fit {
- width: fit-content;
- }
.w-full {
width: 100%;
}
@@ -510,9 +489,6 @@
.max-w-sm {
max-width: var(--container-sm);
}
- .max-w-xs {
- max-width: var(--container-xs);
- }
.min-w-0 {
min-width: 0;
}
@@ -775,12 +751,6 @@
--tw-border-style: none;
border-style: none;
}
- .border-\[\#58a6ff\] {
- border-color: #58a6ff;
- }
- .border-\[\#30363d\] {
- border-color: #30363d;
- }
.border-error-container\/40 {
border-color: color-mix(in srgb, #f9dedc 40%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -847,9 +817,6 @@
.border-primary {
border-color: var(--color-primary);
}
- .border-red-200 {
- border-color: var(--color-red-200);
- }
.border-secondary\/20 {
border-color: color-mix(in srgb, #006e2f 20%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -865,27 +832,6 @@
.border-transparent {
border-color: transparent;
}
- .bg-\[\#0d1117\] {
- background-color: #0d1117;
- }
- .bg-\[\#3fb950\] {
- background-color: #3fb950;
- }
- .bg-\[\#8b949e\] {
- background-color: #8b949e;
- }
- .bg-\[\#161b22\] {
- background-color: #161b22;
- }
- .bg-\[\#191c1e\] {
- background-color: #191c1e;
- }
- .bg-black\/30 {
- background-color: color-mix(in srgb, #000 30%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- background-color: color-mix(in oklab, var(--color-black) 30%, transparent);
- }
- }
.bg-black\/40 {
background-color: color-mix(in srgb, #000 40%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -967,9 +913,6 @@
.bg-red-50 {
background-color: var(--color-red-50);
}
- .bg-red-500 {
- background-color: var(--color-red-500);
- }
.bg-secondary {
background-color: var(--color-secondary);
}
@@ -1006,24 +949,12 @@
.bg-surface-container-low {
background-color: var(--color-surface-container-low);
}
- .bg-surface-container-low\/30 {
- background-color: color-mix(in srgb, #f0f2f5 30%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- background-color: color-mix(in oklab, var(--color-surface-container-low) 30%, transparent);
- }
- }
.bg-surface-container-low\/50 {
background-color: color-mix(in srgb, #f0f2f5 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-surface-container-low) 50%, transparent);
}
}
- .bg-tertiary\/10 {
- background-color: color-mix(in srgb, #7e23cc 10%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- background-color: color-mix(in oklab, var(--color-tertiary) 10%, transparent);
- }
- }
.bg-tertiary\/20 {
background-color: color-mix(in srgb, #7e23cc 20%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -1048,12 +979,6 @@
background-color: color-mix(in oklab, var(--color-white) 40%, transparent);
}
}
- .bg-white\/50 {
- background-color: color-mix(in srgb, #fff 50%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- background-color: color-mix(in oklab, var(--color-white) 50%, transparent);
- }
- }
.bg-white\/70 {
background-color: color-mix(in srgb, #fff 70%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -1195,9 +1120,6 @@
.pb-4 {
padding-bottom: calc(var(--spacing) * 4);
}
- .pb-16 {
- padding-bottom: calc(var(--spacing) * 16);
- }
.pl-2 {
padding-left: calc(var(--spacing) * 2);
}
@@ -1305,9 +1227,6 @@
.whitespace-pre-wrap {
white-space: pre-wrap;
}
- .text-\[\#8b949e\] {
- color: #8b949e;
- }
.text-\[\#191c1e\] {
color: #191c1e;
}
@@ -1332,18 +1251,6 @@
.text-on-surface-variant {
color: var(--color-on-surface-variant);
}
- .text-on-surface-variant\/40 {
- color: color-mix(in srgb, #424656 40%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- color: color-mix(in oklab, var(--color-on-surface-variant) 40%, transparent);
- }
- }
- .text-on-surface-variant\/50 {
- color: color-mix(in srgb, #424656 50%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- color: color-mix(in oklab, var(--color-on-surface-variant) 50%, transparent);
- }
- }
.text-outline {
color: var(--color-outline);
}
@@ -1371,12 +1278,6 @@
.text-red-400 {
color: var(--color-red-400);
}
- .text-red-500 {
- color: var(--color-red-500);
- }
- .text-red-600 {
- color: var(--color-red-600);
- }
.text-secondary {
color: var(--color-secondary);
}
@@ -1523,10 +1424,6 @@
-webkit-user-select: all;
user-select: all;
}
- .select-none {
- -webkit-user-select: none;
- user-select: none;
- }
.group-hover\:scale-110 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
@@ -1586,12 +1483,6 @@
scale: var(--tw-scale-x) var(--tw-scale-y);
}
}
- .last\:border-0 {
- &:last-child {
- border-style: var(--tw-border-style);
- border-width: 0px;
- }
- }
.hover\:border-error {
&:hover {
@media (hover: hover) {
@@ -1606,23 +1497,6 @@
}
}
}
- .hover\:border-primary\/30 {
- &:hover {
- @media (hover: hover) {
- border-color: color-mix(in srgb, #0050cb 30%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
- }
- }
- }
- }
- .hover\:bg-\[\#30363d\] {
- &:hover {
- @media (hover: hover) {
- background-color: #30363d;
- }
- }
- }
.hover\:bg-black\/10 {
&:hover {
@media (hover: hover) {
@@ -1697,13 +1571,6 @@
}
}
}
- .hover\:bg-red-600 {
- &:hover {
- @media (hover: hover) {
- background-color: var(--color-red-600);
- }
- }
- }
.hover\:bg-surface-container {
&:hover {
@media (hover: hover) {
@@ -1718,13 +1585,6 @@
}
}
}
- .hover\:text-\[\#c9d1d9\] {
- &:hover {
- @media (hover: hover) {
- color: #c9d1d9;
- }
- }
- }
.hover\:text-error {
&:hover {
@media (hover: hover) {
@@ -1753,16 +1613,6 @@
}
}
}
- .hover\:text-primary\/50 {
- &:hover {
- @media (hover: hover) {
- color: color-mix(in srgb, #0050cb 50%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- color: color-mix(in oklab, var(--color-primary) 50%, transparent);
- }
- }
- }
- }
.hover\:text-primary\/80 {
&:hover {
@media (hover: hover) {
@@ -1780,20 +1630,6 @@
}
}
}
- .hover\:text-red-600 {
- &:hover {
- @media (hover: hover) {
- color: var(--color-red-600);
- }
- }
- }
- .hover\:text-white {
- &:hover {
- @media (hover: hover) {
- color: var(--color-white);
- }
- }
- }
.hover\:underline {
&:hover {
@media (hover: hover) {
@@ -1850,14 +1686,6 @@
}
}
}
- .focus\:ring-primary\/30 {
- &:focus {
- --tw-ring-color: color-mix(in srgb, #0050cb 30%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- --tw-ring-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
- }
- }
- }
.focus\:outline-none {
&:focus {
--tw-outline-style: none;
diff --git a/app/backend/static/js/clipboard.js b/app/backend/static/js/clipboard.js
index 82122d3..678ad0b 100644
--- a/app/backend/static/js/clipboard.js
+++ b/app/backend/static/js/clipboard.js
@@ -1,10 +1,14 @@
-function copyToClipboard(text) {
+document.addEventListener('click', function(e) {
+ const btn = e.target.closest('[data-copy]');
+ if (!btn) return;
+ const text = btn.getAttribute('data-copy');
+ if (!text) return;
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(text).catch(() => fallbackCopy(text));
} else {
fallbackCopy(text);
}
-}
+});
function fallbackCopy(text) {
const ta = document.createElement('textarea');
diff --git a/app/backend/views/brief.html b/app/backend/views/brief.html
index cf6fc4c..ab5ca90 100644
--- a/app/backend/views/brief.html
+++ b/app/backend/views/brief.html
@@ -19,82 +19,7 @@
{{.Title}}
-
-
-
-
-
- Color Palette — Lumina System
-
-
-
Primary #0050cb
-
Secondary #006e2f
-
Tertiary #7e23cc
-
Error #b3261e
-
Surface #f7f9fb
-
On-Surface #191c1e
-
On-Surface-Var #424656
-
Outline-Var #c2c6d8
-
-
-
-
-
-
-
- Typography
-
-
-
Heading XL — Inter 800
text-xl font-bold tracking-tight
-
Heading Base — Inter 700
text-base font-bold
-
Body — Inter 500
text-sm font-medium
-
Caption — Inter 400/500
text-xs text-on-surface-variant
-
Monospace — JetBrains Mono 400/600
text-xs font-mono
-
-
-
-
-
-
-
- Elevation & Layout
-
-
-
-
-
-
-
-
- Keyboard Shortcuts
-
-
-
New Host Cmd + N
-
New Snippet Cmd + I
-
Toggle View Cmd + T
-
Search Cmd + P
-
Quick Terminal Cmd + K
-
Close Panel Esc
-
-
-
+ {{template "brief_content" .}}
diff --git a/app/backend/views/brief_content.html b/app/backend/views/brief_content.html
new file mode 100644
index 0000000..a3f09d6
--- /dev/null
+++ b/app/backend/views/brief_content.html
@@ -0,0 +1,78 @@
+{{define "brief_content"}}
+
+
+
+
+
+ Color Palette — Lumina System
+
+
+
Primary #0050cb
+
Secondary #006e2f
+
Tertiary #7e23cc
+
Error #b3261e
+
Surface #f7f9fb
+
On-Surface #191c1e
+
On-Surface-Var #424656
+
Outline-Var #c2c6d8
+
+
+
+
+
+
+
+ Typography
+
+
+
Heading XL — Inter 800
text-xl font-bold tracking-tight
+
Heading Base — Inter 700
text-base font-bold
+
Body — Inter 500
text-sm font-medium
+
Caption — Inter 400/500
text-xs text-on-surface-variant
+
Monospace — JetBrains Mono 400/600
text-xs font-mono
+
+
+
+
+
+
+
+ Elevation & Layout
+
+
+
+
+
+
+
+
+ Keyboard Shortcuts
+
+
+
New Host Cmd + N
+
New Snippet Cmd + I
+
Toggle View Cmd + T
+
Search Cmd + P
+
Quick Terminal Cmd + K
+
Close Panel Esc
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/app/backend/views/host_modal.html b/app/backend/views/host_modal.html
index 9ff497e..d7436d1 100644
--- a/app/backend/views/host_modal.html
+++ b/app/backend/views/host_modal.html
@@ -57,13 +57,13 @@
API Node
+ class="py-2.5 px-3 border rounded-lg font-bold text-xs uppercase tracking-wider transition-all">API Node
DB Node
+ class="py-2.5 px-3 border rounded-lg font-bold text-xs uppercase tracking-wider transition-all">DB Node
Web Node
+ class="py-2.5 px-3 border rounded-lg font-bold text-xs uppercase tracking-wider transition-all">Web Node
diff --git a/app/backend/views/index.html b/app/backend/views/index.html
index d0038a3..84506fb 100644
--- a/app/backend/views/index.html
+++ b/app/backend/views/index.html
@@ -17,12 +17,15 @@
{{template "nav" .}}
-
- Hosts
- Manage connections, monitor uptime, and deploy
+
+
+
Hosts
+
Manage connections, monitor uptime, and deploy
+
diff --git a/app/backend/views/key_grid.html b/app/backend/views/key_grid.html
index 86d9f29..1e89edf 100644
--- a/app/backend/views/key_grid.html
+++ b/app/backend/views/key_grid.html
@@ -1,87 +1,85 @@
{{define "credential_grid"}}
-
- {{range $i, $key := .Keys}}
-
-
-
-
-
-
{{.Name}}
- {{.Type}}
-
+{{range $i, $key := .Keys}}
+
+
+
+
+
+
{{.Name}}
+ {{.Type}}
-
- {{if eq .Strength "secure"}}
-
-
- SECURE
-
- {{else if eq .Strength "moderate"}}
-
-
- MODERATE
-
- {{else}}
-
-
- WEAK
-
- {{end}}
-
-
- User Login
- {{.Username}}
-
-
+ {{if eq .Strength "secure"}}
+
+
+ SECURE
+
+ {{else if eq .Strength "moderate"}}
+
+
+ MODERATE
+
+ {{else}}
+
+
+ WEAK
+
+ {{end}}
+
- {{if .Fingerprint}}
-
- SHA256 FINGERPRINT
- {{.Fingerprint}}
-
- {{end}}
+
+
+ User Login
+ {{.Username}}
-
-
-
Created {{.CreatedAt}}
-
-
- {{if .URL}}
- {{.URL}}
- {{end}}
-
-
-
+
-
- {{end}}
- {{if eq (len .Keys) 0}}
-
- No credentials found. Add your first credential.
+ {{if .Fingerprint}}
+
+ SHA256 FINGERPRINT
+ {{.Fingerprint}}
+
+ {{end}}
+
+
+
+
Created {{.CreatedAt}}
+
+
+ {{if .URL}}
+ {{.URL}}
+ {{end}}
+
+
+
+
+
- {{end}}
{{end}}
+
+{{if eq (len .Keys) 0}}
+
+ No credentials found. Add your first credential.
+
+{{end}}
+{{end}}
diff --git a/app/backend/views/keychain.html b/app/backend/views/keychain.html
index 78f6a53..4917804 100644
--- a/app/backend/views/keychain.html
+++ b/app/backend/views/keychain.html
@@ -44,7 +44,7 @@
-
+
{{template "credential_grid" .}}
@@ -70,7 +70,7 @@
Register Secure Credential
Cancel
-