diff --git a/web-svelte/src/lib/components/Button.svelte b/web-svelte/src/lib/components/Button.svelte index f890df9..5f3e679 100644 --- a/web-svelte/src/lib/components/Button.svelte +++ b/web-svelte/src/lib/components/Button.svelte @@ -74,9 +74,10 @@ {disabled} {onclick} class={cn( - "inline-flex items-center justify-center rounded-lg border font-medium cursor-pointer", - "transition-colors duration-150", + "inline-flex items-center justify-center border font-medium cursor-pointer", + "transition-all duration-150 rounded-xl", "disabled:opacity-50 disabled:cursor-not-allowed", + "active:scale-[0.98]", variantClasses.base, variantClasses.hover, sizeClasses, diff --git a/web-svelte/src/lib/components/ConnectionsPanel.svelte b/web-svelte/src/lib/components/ConnectionsPanel.svelte index 444aa93..45e63cc 100644 --- a/web-svelte/src/lib/components/ConnectionsPanel.svelte +++ b/web-svelte/src/lib/components/ConnectionsPanel.svelte @@ -41,8 +41,7 @@ bind:this={sectionEl} style="opacity: 0;" class={cn( - "flex flex-col overflow-hidden rounded-xl border shadow-sm transition-all duration-200", - "hover:shadow-lg hover:-translate-y-px", + "flex flex-col overflow-hidden rounded-3xl border shadow-sm transition-all duration-200", "bg-card border-border", )} > @@ -55,7 +54,7 @@ )} >

{t("connections")}

diff --git a/web-svelte/src/lib/components/DeleteModal.svelte b/web-svelte/src/lib/components/DeleteModal.svelte index c51f97f..d1f16df 100644 --- a/web-svelte/src/lib/components/DeleteModal.svelte +++ b/web-svelte/src/lib/components/DeleteModal.svelte @@ -106,9 +106,8 @@ @@ -145,7 +145,7 @@ placeholder={t("name_placeholder")} required autocomplete="off" - class="w-full px-3 py-2 border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" + class="w-full h-9 px-3 py-2 border rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" />
@@ -161,7 +161,7 @@ min="1" max="65535" required - class="w-full px-3 py-2 border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" + class="w-full h-9 px-3 py-2 border rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" />
diff --git a/web-svelte/src/lib/components/NewConnection.svelte b/web-svelte/src/lib/components/NewConnection.svelte index 2b249a8..c37f286 100644 --- a/web-svelte/src/lib/components/NewConnection.svelte +++ b/web-svelte/src/lib/components/NewConnection.svelte @@ -84,7 +84,7 @@

@@ -104,7 +104,7 @@ placeholder={t("tunnel_name_hint")} required autocomplete="off" - class="w-full px-3 py-2 border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" + class="w-full h-9 px-3 py-2 border rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" />

@@ -119,7 +119,7 @@ min="1" max="65535" required - class="w-full px-3 py-2 border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" + class="w-full h-9 px-3 py-2 border rounded-xl text-sm focus:outline-none focus:ring-2 focus:ring-offset-1 bg-input-bg text-text border-border focus:ring-primary transition-all duration-200" />
diff --git a/web-svelte/src/lib/components/TunnelCard.svelte b/web-svelte/src/lib/components/TunnelCard.svelte index 960adaa..ed5f602 100644 --- a/web-svelte/src/lib/components/TunnelCard.svelte +++ b/web-svelte/src/lib/components/TunnelCard.svelte @@ -200,11 +200,11 @@
('dracula'); diff --git a/web-svelte/src/styles/app.css b/web-svelte/src/styles/app.css index d8242f4..a13a738 100644 --- a/web-svelte/src/styles/app.css +++ b/web-svelte/src/styles/app.css @@ -16,3 +16,10 @@ html, body { * { box-sizing: border-box; } + +@media (prefers-reduced-motion: reduce) { + * { + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + } +} diff --git a/web-svelte/src/styles/themes.css b/web-svelte/src/styles/themes.css index 0390184..5b125df 100644 --- a/web-svelte/src/styles/themes.css +++ b/web-svelte/src/styles/themes.css @@ -23,6 +23,8 @@ @import './themes/_blue-light.css'; @import './themes/_purple.css'; @import './themes/_purple-light.css'; +@import './themes/_rust.css'; +@import './themes/_rust-dark.css'; @theme { --color-bg: var(--color-bg); diff --git a/web-svelte/src/styles/themes/_rust-dark.css b/web-svelte/src/styles/themes/_rust-dark.css new file mode 100644 index 0000000..abe84a5 --- /dev/null +++ b/web-svelte/src/styles/themes/_rust-dark.css @@ -0,0 +1,63 @@ +/* =========================================== + RUST DARK - Rust Language Theme (Dark) + Inspired by rust-lang.org dark branding + =========================================== */ + +:root[data-theme="rust-dark"] { + /* Base - dark warm */ + --color-bg: #1a1210; + --color-card: #2a1f18; + --color-text: #f0e6d9; + --color-heading: #ffffff; + --color-muted: #9a8873; + --color-border: #3d2d24; + --color-border-light: #2a1f18; + + /* Primary - Rust orange */ + --color-primary: #e05824; + --color-primary-hover: #f06834; + --color-hover: #3d2d24; + + /* Buttons */ + --color-btn-primary: #e05824; + --color-btn-text: #ffffff; + --color-btn-primary-hover: #f06834; + + /* Start/Stop */ + --color-btn-start: #5cb85c; + --color-btn-start-hover: #6fc96f; + --color-btn-stop: #dc2626; + --color-btn-stop-hover: #ef4444; + + /* Danger */ + --color-btn-danger: #dc2626; + --color-btn-danger-hover: #ef4444; + + /* Status */ + --color-status-running: #5cb85c; + --color-status-starting: #e05824; + --color-status-installing: #c97a3c; + --color-status-error: #dc2626; + --color-status-stopped: #9a8873; + + /* Logs */ + --color-logs-bg: #120e0a; + --color-logs-text: #f0e6d9; + + /* URL bar */ + --color-url-bg: #3d2d24; + --color-url-text: #e05824; + + /* Inputs */ + --color-input-bg: #2a1f18; + --color-input-text: #f0e6d9; + --color-input-placeholder: #7a6a5a; + --color-input-disabled: #3d2d24; + + /* Badge */ + --color-badge-text: #1a1210; + + /* Secondary button */ + --color-secondary-btn: #3d2d24; + --color-secondary-btn-text: #f0e6d9; +} \ No newline at end of file diff --git a/web-svelte/src/styles/themes/_rust.css b/web-svelte/src/styles/themes/_rust.css new file mode 100644 index 0000000..317e390 --- /dev/null +++ b/web-svelte/src/styles/themes/_rust.css @@ -0,0 +1,63 @@ +/* =========================================== + RUST - Rust Language Theme (Light) + Inspired by rust-lang.org branding + =========================================== */ + +:root[data-theme="rust"] { + /* Base - warm cream */ + --color-bg: #fdf6ec; + --color-card: #ffffff; + --color-text: #3d1c0a; + --color-heading: #2a1205; + --color-muted: #8b6b4d; + --color-border: #e8d5c4; + --color-border-light: #f5ebe0; + + /* Primary - Rust orange */ + --color-primary: #e05824; + --color-primary-hover: #c44d1f; + --color-hover: #f5ebe0; + + /* Buttons */ + --color-btn-primary: #e05824; + --color-btn-text: #ffffff; + --color-btn-primary-hover: #c44d1f; + + /* Start/Stop */ + --color-btn-start: #3d8b40; + --color-btn-start-hover: #2f7032; + --color-btn-stop: #b91c1c; + --color-btn-stop-hover: #991b1b; + + /* Danger */ + --color-btn-danger: #b91c1c; + --color-btn-danger-hover: #991b1b; + + /* Status */ + --color-status-running: #3d8b40; + --color-status-starting: #e05824; + --color-status-installing: #8b4513; + --color-status-error: #b91c1c; + --color-status-stopped: #9ca3af; + + /* Logs */ + --color-logs-bg: #faf3e8; + --color-logs-text: #3d1c0a; + + /* URL bar */ + --color-url-bg: #f5ebe0; + --color-url-text: #e05824; + + /* Inputs */ + --color-input-bg: #ffffff; + --color-input-text: #3d1c0a; + --color-input-placeholder: #b89e7d; + --color-input-disabled: #f5ebe0; + + /* Badge */ + --color-badge-text: #ffffff; + + /* Secondary button */ + --color-secondary-btn: #f0e6d9; + --color-secondary-btn-text: #3d1c0a; +} \ No newline at end of file