diff --git a/src/assets/input-border.scss b/src/assets/input-border.scss
new file mode 100644
index 0000000000..4fbf269adf
--- /dev/null
+++ b/src/assets/input-border.scss
@@ -0,0 +1,57 @@
+/*!
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+/**
+ * Similar as inputBorder but without active styles.
+ */
+@mixin inputLikeBorder($legacySelector, $borderColor: var(--color-border-maxcontrast)) {
+ --input-border-box-shadow-light: 0 -1px #{$borderColor},
+ 0 0 0 1px color-mix(in srgb, #{$borderColor}, 65% transparent);
+ --input-border-box-shadow-dark: 0 1px #{$borderColor},
+ 0 0 0 1px color-mix(in srgb, #{$borderColor}, 65% transparent);
+ --input-border-box-shadow: var(--input-border-box-shadow-light);
+ border: none;
+ border-radius: var(--border-radius-element);
+ box-shadow: var(--input-border-box-shadow);
+
+ &:hover:not([disabled]) {
+ box-shadow: 0 0 0 1px $borderColor;
+ }
+
+ // override with system theme
+ @media (prefers-color-scheme: dark) {
+ --input-border-box-shadow: var(--input-border-box-shadow-dark);
+ }
+
+ // override with nextcloud theme
+ @at-root [data-theme-dark] #{&} {
+ --input-border-box-shadow: var(--input-border-box-shadow-dark);
+ }
+ @at-root [data-theme-light] #{&} {
+ --input-border-box-shadow: var(--input-border-box-shadow-light);
+ }
+
+ @at-root #{$legacySelector} #{&} {
+ box-shadow: 0 0 0 1px $borderColor;
+
+ &:hover:not([disabled]) {
+ box-shadow: 0 0 0 2px $borderColor;
+ }
+ }
+}
+
+/**
+ * Create a consistent border for an input element.
+ * With Nextcloud 32+ there is no real border anymore but we use a box-shadow.
+ */
+@mixin inputBorder($legacySelector, $borderColor: var(--color-border-maxcontrast)) {
+ @include inputLikeBorder($legacySelector, $borderColor);
+
+ &:focus-within:not([disabled]),
+ &:active:not([disabled]) {
+ box-shadow: 0 0 0 2px $borderColor,
+ 0 0 0 4px var(--color-main-background) !important;
+ }
+}
diff --git a/src/components/NcInputField/NcInputField.vue b/src/components/NcInputField/NcInputField.vue
index 096f552e89..1463ec51e6 100644
--- a/src/components/NcInputField/NcInputField.vue
+++ b/src/components/NcInputField/NcInputField.vue
@@ -106,11 +106,11 @@ For a list of all available props and attributes, please check the [HTMLInputEle
diff --git a/src/components/NcSelect/NcSelect.vue b/src/components/NcSelect/NcSelect.vue
index b30b7f5233..553b0c0a11 100644
--- a/src/components/NcSelect/NcSelect.vue
+++ b/src/components/NcSelect/NcSelect.vue
@@ -325,6 +325,7 @@ export default {
diff --git a/styleguide/assets/dark.css b/styleguide/assets/dark.css
index d71151fdf4..c625f9d8e4 100644
--- a/styleguide/assets/dark.css
+++ b/styleguide/assets/dark.css
@@ -3,93 +3,108 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
[data-theme-dark] {
- --color-main-background:#171717;
- --color-main-background-rgb:23,23,23;
- --color-main-background-translucent:rgba(var(--color-main-background-rgb), .97);
- --color-main-background-blur:rgba(var(--color-main-background-rgb), .85);
- --filter-background-blur:blur(25px);
- --gradient-main-background:var(--color-main-background) 0%, var(--color-main-background-translucent) 85%, transparent 100%;
- --color-background-hover:#212121;
- --color-background-dark:#292929;
- --color-background-darker:#3b3b3b;
- --color-placeholder-light:#313131;
- --color-placeholder-dark:#4a4a4a;
- --color-main-text:#EBEBEB;
- --color-text-maxcontrast:#999999;
- --color-text-maxcontrast-default:#999999;
- --color-text-maxcontrast-background-blur:#a8a8a8;
- --color-text-light:var(--color-main-text);
- --color-text-lighter:var(--color-text-maxcontrast);
- --color-scrollbar:#3d3d3d;
- --color-error:#FF3333;
- --color-error-rgb:255,51,51;
- --color-error-hover:#ff6666;
- --color-error-text:#ff8080;
- --color-warning:#FFCC00;
- --color-warning-rgb:255,204,0;
- --color-warning-hover:#ffd633;
- --color-warning-text:#FFCC00;
- --color-success:#3B973B;
- --color-success-rgb:59,151,59;
- --color-success-hover:#4cb94c;
- --color-success-text:#5ec05e;
- --color-info:#00AEFF;
- --color-info-rgb:0,174,255;
- --color-info-hover:#33beff;
- --color-info-text:#00AEFF;
- --color-favorite:#ffde00;
- --color-loading-light:#777;
- --color-loading-dark:#CCC;
- --color-box-shadow-rgb:0,0,0;
- --color-box-shadow:#000000;
- --color-border:#292929;
- --color-border-dark:#3b3b3b;
- --color-border-maxcontrast:#7d7d7d;
- --font-face:system-ui, -apple-system, "Segoe UI", Roboto, Oxygen-Sans, Cantarell, Ubuntu, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- --default-font-size:15px;
- --default-line-height:24px;
- --animation-quick:100ms;
- --animation-slow:300ms;
- --border-width-input:1px;
- --border-width-input-focused:2px;
- --border-radius:3px;
- --border-radius-large:10px;
- --border-radius-rounded:28px;
- --border-radius-element:8px;
- --border-radius-pill:100px;
- --default-clickable-area:34px;
- --clickable-area-large:48px;
- --clickable-area-small:24px;
- --default-grid-baseline:4px;
- --header-height:50px;
- --header-menu-item-height:44px;
- --navigation-width:300px;
- --sidebar-min-width:300px;
- --sidebar-max-width:500px;
- --body-container-radius:calc(var(--default-grid-baseline) * 3);
- --body-container-margin:calc(var(--default-grid-baseline) * 2);
- --body-height:calc(100% - env(safe-area-inset-bottom) - var(--header-height) - var(--body-container-margin));
- --breakpoint-mobile:1024px;
- --background-invert-if-dark:invert(100%);
- --background-invert-if-bright:no;
- --background-image-invert-if-bright:no;
- --primary-invert-if-bright:invert(100%);
- --primary-invert-if-dark:no;
- --color-primary:#00679e;
- --color-primary-text:#ffffff;
- --color-primary-hover:#045783;
- --color-primary-light:#14232c;
- --color-primary-light-text:#99c2d8;
- --color-primary-light-hover:#1e2d35;
- --color-primary-element:#0091f2;
- --color-primary-element-hover:#079cff;
- --color-primary-element-text:#000000;
- --color-primary-element-text-dark:#0a0a0a;
- --color-primary-element-light:#14232c;
- --color-primary-element-light-hover:#1e2d35;
- --color-primary-element-light-text:#99d3f9;
- --gradient-primary-background:linear-gradient(40deg, var(--color-primary) 0%, var(--color-primary-hover) 100%);
- --color-background-plain:#00679e;
- --color-background-plain-text:#ffffff;
- --image-background:url('./img/background/jo-myoung-hee-fluid-dark.webp');
+ --color-main-background: #171717;
+ --color-main-background-rgb: 23, 23, 23;
+ --color-main-background-translucent: rgba(var(--color-main-background-rgb), .97);
+ --color-main-background-blur: rgba(var(--color-main-background-rgb), .85);
+ --filter-background-blur: blur(25px);
+ --gradient-main-background: var(--color-main-background) 0%, var(--color-main-background-translucent) 85%, transparent 100%;
+ --color-background-hover: #212121;
+ --color-background-dark: #292929;
+ --color-background-darker: #3b3b3b;
+ --color-placeholder-light: #313131;
+ --color-placeholder-dark: #4a4a4a;
+ --color-main-text: #EBEBEB;
+ --color-text-maxcontrast: #999999;
+ --color-text-maxcontrast-default: #999999;
+ --color-text-maxcontrast-background-blur: #a8a8a8;
+ --color-text-error: #ff6f6f;
+ --color-text-success: #49bb37;
+ --color-border: #292929;
+ --color-border-dark: #3b3b3b;
+ --color-border-maxcontrast: #7d7d7d;
+ --color-border-error: var(--color-element-error);
+ --color-border-success: var(--color-element-success);
+ --color-element-error: #FF5050;
+ --color-element-info: #0099E0;
+ --color-element-success: #40A330;
+ --color-element-warning: #FFCC00;
+ --color-error: #552121;
+ --color-error-hover: #7a2f2f;
+ --color-error-text: #FFCCCC;
+ --color-warning: #3D3010;
+ --color-warning-hover: #65501b;
+ --color-warning-text: #FFEEC5;
+ --color-success: #11321A;
+ --color-success-hover: #1e582e;
+ --color-success-text: #D5F2DC;
+ --color-info: #003553;
+ --color-info-hover: #005686;
+ --color-info-text: #00AEFF;
+ --color-favorite: #ffde00;
+ --color-error-rgb: 85, 33, 33;
+ --color-warning-rgb: 61, 48, 16;
+ --color-success-rgb: 17, 50, 26;
+ --color-info-rgb: 0, 53, 83;
+ --color-loading-light: #777;
+ --color-loading-dark: #CCC;
+ --color-scrollbar: var(--color-border-maxcontrast) transparent;
+ --color-box-shadow-rgb: 0, 0, 0;
+ --color-box-shadow: #000000;
+ --color-background-assistant: #221D2B;
+ --color-border-assistant: linear-gradient(125deg, #0C3A65 50%, #6204A5 125%);
+ --color-element-assistant: linear-gradient(238deg, #A569D3 12%, #00679E 39%, #422083 86%);
+ --color-element-assistant-icon: linear-gradient(285deg, #CDACE7 15.28%, #008FDB 39.98%, #A180E0 82.05%);
+ --font-face: system-ui, -apple-system, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, Ubuntu, 'Helvetica Neue', 'Noto Sans', 'Liberation Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
+ --default-font-size: 15px;
+ --font-size-small: 13px;
+ --default-line-height: 1.5;
+ --animation-quick: 100ms;
+ --animation-slow: 300ms;
+ --border-width-input: 1px;
+ --border-width-input-focused: 2px;
+ --border-radius-small: 4px;
+ --border-radius-element: 8px;
+ --border-radius-container: 12px;
+ --border-radius-container-large: 16px;
+ --border-radius: var(--border-radius-small);
+ --border-radius-large: var(--border-radius-element);
+ --border-radius-rounded: 28px;
+ --border-radius-pill: 100px;
+ --default-clickable-area: 34px;
+ --clickable-area-large: 48px;
+ --clickable-area-small: 24px;
+ --default-grid-baseline: 4px;
+ --header-height: 50px;
+ --header-menu-item-height: 44px;
+ --header-menu-icon-mask: linear-gradient(var(--color-background-plain-text) 25%, color-mix(in srgb, var(--color-background-plain-text), 55% transparent) 90%) alpha;
+ --navigation-width: 300px;
+ --sidebar-min-width: 300px;
+ --sidebar-max-width: 500px;
+ --body-container-radius: var(--border-radius-container-large);
+ --body-container-margin: calc(var(--default-grid-baseline) * 2);
+ --body-height: calc(100% - env(safe-area-inset-bottom) - var(--header-height) - var(--body-container-margin));
+ --breakpoint-mobile: 1024px;
+ --background-invert-if-dark: invert(100%);
+ --background-invert-if-bright: no;
+ --background-image-invert-if-bright: no;
+ --primary-invert-if-bright: invert(100%);
+ --primary-invert-if-dark: no;
+ --color-primary: #00679e;
+ --color-primary-text: #ffffff;
+ --color-primary-hover: #045783;
+ --color-primary-element: #0091f2;
+ --color-primary-element-hover: #17a2ff;
+ --color-primary-element-text: #000000;
+ --color-primary-element-text-dark: #121212;
+ --color-primary-light: #14232c;
+ --color-primary-light-hover: #1f2e36;
+ --color-primary-light-text: #99c2d8;
+ --color-primary-element-light: var(--color-primary-light);
+ --color-primary-element-light-text: var(--color-primary-light-text);
+ --color-primary-element-light-hover: var(--color-primary-light-hover);
+ --gradient-primary-background: linear-gradient(40deg, var(--color-primary) 0%, var(--color-primary-hover) 100%);
+ --color-background-plain: #00679e;
+ --color-background-plain-text: #ffffff;
+ --image-background: url('./img/background/jo-myoung-hee-fluid-dark.webp');
}