Skeuomorphic UI
Use When
- A card, button, switch, dial, input, toolbar, or control should feel tactile.
- A flat surface needs physical depth without becoming glossy or cartoonish.
- The design calls for pressed, carved, raised, soft-plastic, soft-metal, or premium hardware-like UI.
Surface Recipe
- Start with a rounded shape and a soft vertical gradient: lighter top, darker bottom.
- Add a 1px gradient-border wrapper to simulate a reflective edge.
- Stack outer shadows for elevation and inset shadows for carved depth.
- Add a fine top-edge highlight and a darker lower edge.
- Use text shadows and icon shadows sparingly for an embossed feel.
- Add micro-details only when scale supports it: dots, grain, seams, or tiny specular marks.
- Keep transitions smooth and short:
160ms to 240ms.
Base Tokens
Tune these per brand and theme.
:root {
--sk-bg-top: #f8fafc;
--sk-bg-mid: #e9eef5;
--sk-bg-bottom: #cfd7e4;
--sk-edge-top: rgba(255, 255, 255, 0.82);
--sk-edge-bottom: rgba(79, 93, 122, 0.34);
--sk-shadow: rgba(31, 41, 55, 0.18);
--sk-shadow-deep: rgba(31, 41, 55, 0.28);
--sk-highlight: rgba(255, 255, 255, 0.72);
}
Raised Surface
Use for cards, panels, primary buttons, tabs, and control housings.
.sk-surface {
position: relative;
border: 1px solid transparent;
border-radius: 22px;
background:
linear-gradient(180deg, var(--sk-bg-top), var(--sk-bg-mid) 48%, var(--sk-bg-bottom)) padding-box,
linear-gradient(180deg, var(--sk-edge-top), rgba(255, 255, 255, 0.22) 45%, var(--sk-edge-bottom)) border-box;
box-shadow:
0 18px 34px var(--sk-shadow),
0 5px 12px rgba(31, 41, 55, 0.12),
inset 0 1px 0 var(--sk-highlight),
inset 0 -1px 0 rgba(79, 93, 122, 0.24);
transition:
box-shadow 200ms ease,
transform 200ms ease,
background 200ms ease;
}
.sk-surface::after {
content: "";
position: absolute;
inset: 1px 1px auto;
height: 35%;
border-radius: inherit;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.42), transparent);
pointer-events: none;
}
Pressed Surface
Use for active buttons, toggled controls, selected tabs, and inset wells.
.sk-surface.is-pressed {
transform: translateY(1px);
background:
linear-gradient(180deg, #d5dce8, #eef2f7 52%, #f8fafc) padding-box,
linear-gradient(180deg, rgba(72, 84, 112, 0.38), rgba(255, 255, 255, 0.62)) border-box;
box-shadow:
inset 0 4px 10px rgba(31, 41, 55, 0.22),
inset 0 -1px 0 rgba(255, 255, 255, 0.72),
0 4px 10px rgba(31, 41, 55, 0.10);
}
Embossed Text And Icons
Use for labels inside tactile controls. Keep it subtle.
.sk-label {
color: #334155;
text-shadow:
0 1px 0 rgba(255, 255, 255, 0.78),
0 -1px 0 rgba(31, 41, 55, 0.12);
}
.sk-icon {
filter:
drop-shadow(0 1px 0 rgba(255, 255, 255, 0.78))
drop-shadow(0 -1px 0 rgba(31, 41, 55, 0.14));
}
Micro Texture
Use micro texture at low opacity. It should be felt, not noticed.
.sk-texture {
background-image:
radial-gradient(circle at 20% 30%, rgba(255, 255, 255, 0.34) 0 1px, transparent 1.5px),
radial-gradient(circle at 70% 65%, rgba(31, 41, 55, 0.08) 0 1px, transparent 1.5px);
background-size: 18px 18px, 22px 22px;
}
Taste Rules
- Use one physical material per component: soft plastic, enamel, ceramic, metal, or rubber.
- Keep depth directional: light from top, shadow below.
- Avoid pure black shadows; use tinted grays or brand-tinted darks.
- Do not mix glassmorphism, neumorphism, and skeuomorphism in the same component.
- Reserve heavy pressed effects for interactive states, not every surface.
- Reduce texture on small controls so the UI stays crisp.
Quick Checks
- Raised state has a brighter top edge and darker lower edge.
- Pressed state reverses depth with inset shadows.
- Rounded corners stay smooth at the actual rendered size.
- The gradient border is 1px and does not overpower the content.
- Text and icons remain readable after shadow effects.
1---2name: skeuomorphic-ui3description: Create skeuomorphic web UI surfaces with layered gradients, stacked inner and outer shadows, reflective gradient borders, micro texture, and embossed text or icon details. Use when asked for pressed, carved, tactile, realistic, soft-plastic, soft-metal, or premium physical interface styling.4---5
6# Skeuomorphic UI
7
8## Use When
9- A card, button, switch, dial, input, toolbar, or control should feel tactile.
10- A flat surface needs physical depth without becoming glossy or cartoonish.
11- The design calls for pressed, carved, raised, soft-plastic, soft-metal, or premium hardware-like UI.
12
13## Surface Recipe
141. Start with a rounded shape and a soft vertical gradient: lighter top, darker bottom.
152. Add a 1px gradient-border wrapper to simulate a reflective edge.
163. Stack outer shadows for elevation and inset shadows for carved depth.
174. Add a fine top-edge highlight and a darker lower edge.
185. Use text shadows and icon shadows sparingly for an embossed feel.
196. Add micro-details only when scale supports it: dots, grain, seams, or tiny specular marks.
207. Keep transitions smooth and short: `160ms` to `240ms`.
21
22## Base Tokens
23Tune these per brand and theme.
24
25```css
26:root {
27 --sk-bg-top: #f8fafc;
28 --sk-bg-mid: #e9eef5;
29 --sk-bg-bottom: #cfd7e4;
30 --sk-edge-top: rgba(255, 255, 255, 0.82);
31 --sk-edge-bottom: rgba(79, 93, 122, 0.34);
32 --sk-shadow: rgba(31, 41, 55, 0.18);
33 --sk-shadow-deep: rgba(31, 41, 55, 0.28);
34 --sk-highlight: rgba(255, 255, 255, 0.72);
35}
36```
37
38## Raised Surface
39Use for cards, panels, primary buttons, tabs, and control housings.
40
41```css
42.sk-surface {
43 position: relative;
44 border: 1px solid transparent;
45 border-radius: 22px;
46 background:
47 linear-gradient(180deg, var(--sk-bg-top), var(--sk-bg-mid) 48%, var(--sk-bg-bottom)) padding-box,
48 linear-gradient(180deg, var(--sk-edge-top), rgba(255, 255, 255, 0.22) 45%, var(--sk-edge-bottom)) border-box;
49 box-shadow:
50 0 18px 34px var(--sk-shadow),
51 0 5px 12px rgba(31, 41, 55, 0.12),
52 inset 0 1px 0 var(--sk-highlight),
53 inset 0 -1px 0 rgba(79, 93, 122, 0.24);
54 transition:
55 box-shadow 200ms ease,
56 transform 200ms ease,
57 background 200ms ease;
58}
59
60.sk-surface::after {
61 content: "";
62 position: absolute;
63 inset: 1px 1px auto;
64 height: 35%;
65 border-radius: inherit;
66 background: linear-gradient(180deg, rgba(255, 255, 255, 0.42), transparent);
67 pointer-events: none;
68}
69```
70
71## Pressed Surface
72Use for active buttons, toggled controls, selected tabs, and inset wells.
73
74```css
75.sk-surface.is-pressed {
76 transform: translateY(1px);
77 background:
78 linear-gradient(180deg, #d5dce8, #eef2f7 52%, #f8fafc) padding-box,
79 linear-gradient(180deg, rgba(72, 84, 112, 0.38), rgba(255, 255, 255, 0.62)) border-box;
80 box-shadow:
81 inset 0 4px 10px rgba(31, 41, 55, 0.22),
82 inset 0 -1px 0 rgba(255, 255, 255, 0.72),
83 0 4px 10px rgba(31, 41, 55, 0.10);
84}
85```
86
87## Embossed Text And Icons
88Use for labels inside tactile controls. Keep it subtle.
89
90```css
91.sk-label {
92 color: #334155;
93 text-shadow:
94 0 1px 0 rgba(255, 255, 255, 0.78),
95 0 -1px 0 rgba(31, 41, 55, 0.12);
96}
97
98.sk-icon {
99 filter:
100 drop-shadow(0 1px 0 rgba(255, 255, 255, 0.78))
101 drop-shadow(0 -1px 0 rgba(31, 41, 55, 0.14));
102}
103```
104
105## Micro Texture
106Use micro texture at low opacity. It should be felt, not noticed.
107
108```css
109.sk-texture {
110 background-image:
111 radial-gradient(circle at 20% 30%, rgba(255, 255, 255, 0.34) 0 1px, transparent 1.5px),
112 radial-gradient(circle at 70% 65%, rgba(31, 41, 55, 0.08) 0 1px, transparent 1.5px);
113 background-size: 18px 18px, 22px 22px;
114}
115```
116
117## Taste Rules
118- Use one physical material per component: soft plastic, enamel, ceramic, metal, or rubber.
119- Keep depth directional: light from top, shadow below.
120- Avoid pure black shadows; use tinted grays or brand-tinted darks.
121- Do not mix glassmorphism, neumorphism, and skeuomorphism in the same component.
122- Reserve heavy pressed effects for interactive states, not every surface.
123- Reduce texture on small controls so the UI stays crisp.
124
125## Quick Checks
126- Raised state has a brighter top edge and darker lower edge.
127- Pressed state reverses depth with inset shadows.
128- Rounded corners stay smooth at the actual rendered size.
129- The gradient border is 1px and does not overpower the content.
130- Text and icons remain readable after shadow effects.