very big css rework

This commit is contained in:
2025-08-25 21:12:37 +07:00
parent bf33114b67
commit 0dee6824ad
+370 -307
View File
@@ -1,307 +1,370 @@
@import "tailwindcss"; @import "tailwindcss";
@custom-variant dark (&:where(.dark-theme, .dark-theme *)); @custom-variant dark (&:where(.dark-theme, .dark-theme *));
@theme { @theme {
--ui-primary: var(--color-deep-dark); --ui-primary: var(--color-deep-dark);
--ui-container: var(--container-5xl); --ui-container: var(--container-5xl);
--ui-radius: var(--radius-sm); --ui-radius: var(--radius-sm);
--ui-bg: var(--color-cloud-light); --ui-bg: white;
--ui-bg-muted: var(--color-cloud-semilight); --ui-bg-muted: var(--color-cloud-semilight);
--ui-bg-elevated: var(--color-cloud-medium); --ui-bg-elevated: var(--color-cloud-medium);
--ui-bg-inverted: var(--color-deep-dark); --ui-bg-inverted: var(--color-deep-dark);
--ui-bg-muted-inverted: var(--color-deep-semidark); --ui-bg-muted-inverted: var(--color-deep-semidark);
--ui-bg-elevated-inverted: var(--color-deep-medium); --ui-bg-elevated-inverted: var(--color-deep-medium);
--ui-border: var(--color-cloud-medium); --ui-border: var(--color-cloud-medium);
--ui-border-accented: var(--color-cloud-semidark); --ui-border-accented: var(--color-cloud-semidark);
--ui-text: var(--color-deep-dark); --ui-text: var(--color-deep-dark);
--ui-text-muted: var(--color-smoke-medium); --ui-text-muted: var(--color-smoke-medium);
--ui-text-blind: var(--color-smoke-dark); --ui-text-blind: var(--color-smoke-dark);
--ui-header-logo-inverted: 1; --ui-text-inverted: var(--color-cloud-light);
--color-primary-dark: oklch(0.56 0.2408 260.82); --ui-text-muted-inverted: var(--color-cloud-medium);
--color-primary: oklch(0.56 0.2408 260.82); --ui-text-blind-inverted: var(--color-cloud-dark);
--color-primary-ghost: oklch(0.56 0.2408 260.82 / 0); --ui-header-logo-inverted: 1;
--color-primary-light: oklch(0.68 0.1765 252.26); --color-primary-dark: oklch(0.56 0.2408 260.82);
--color-primary-lighter: oklch(0.76 0.13 250.21); --color-primary: oklch(0.56 0.2408 260.82);
--color-primary-content: oklch(0.975 0.0234 256.1); --color-primary-ghost: oklch(0.56 0.2408 260.82 / 0);
--color-deep-dark: oklch(0.18 0.0026 247.98); --color-primary-light: oklch(0.68 0.1765 252.26);
--color-deep-semidark: oklch(0.21 0.0042 264.48); --color-primary-lighter: oklch(0.76 0.13 250.21);
--color-deep-medium: oklch(0.25 0.0048 248.02); --color-primary-content: oklch(0.975 0.0234 256.1);
--color-deep-semilight: oklch(0.28 0.0062 258.36); --color-deep-dark: oklch(0.185 0 0);
--color-deep-light: oklch(0.32 0.0076 264.46); --color-deep-semidark: oklch(0.225 0 0);
--color-smoke-dark: oklch(0.38 0.0058 258.35); --color-deep-medium: oklch(0.245 0 0);
--color-smoke-semidark: oklch(0.41 0.0064 247.98); --color-deep-semilight: oklch(0.265 0 0);
--color-smoke-medium: oklch(0.44 0.007 264.5); --color-deep-light: oklch(0.285 0 0);
--color-smoke-semilight: oklch(0.47 0.0075 255.52); --color-smoke-dark: oklch(0.405 0 0);
--color-smoke-light: oklch(0.5 0.0088 260.73); --color-smoke-semidark: oklch(0.425 0 0);
--color-cloud-dark: oklch(0.8781 0.0105 261.79); --color-smoke-medium: oklch(0.445 0 0);
--color-cloud-semidark: oklch(0.9049 0.011 256.7); --color-smoke-semilight: oklch(0.465 0 0);
--color-cloud-medium: oklch(0.9322 0.0109 256.7); --color-smoke-light: oklch(0.485 0 0);
--color-cloud-semilight: oklch(0.9567 0.012 259.82); --color-cloud-dark: oklch(0.905 0 0);
--color-cloud-light: oklch(0.9747 0.0119 259.82); --color-cloud-semidark: oklch(0.925 0 0);
--color-mc-outline: 30, 30, 31; --color-cloud-medium: oklch(0.945 0 0);
--color-mc-inline: 255, 255, 255, 0.2; --color-cloud-semilight: oklch(0.965 0 0);
--color-mc-primary: 79, 160, 51; --color-cloud-light: oklch(0.985 0 0);
--color-mc-primary-hover: 60, 133, 39; --color-mc-outline: 30, 30, 31;
--color-mc-primary-up: 29, 77, 19; --color-mc-inline: 255, 255, 255, 0.2;
--color-mc-primary-down: 40, 100, 28; --color-mc-primary: 79, 160, 51;
--color-mc-surface: 244, 246, 249; --color-mc-primary-hover: 60, 133, 39;
--color-mc-surface-container: 230, 232, 235; --color-mc-primary-up: 29, 77, 19;
--color-mc-surface-hover: 208, 209, 212; --color-mc-primary-down: 40, 100, 28;
--color-mc-surface-up: 88, 88, 90; --color-mc-surface: 244, 246, 249;
--color-mc-surface-down: 177, 178, 181; --color-mc-surface-container: 230, 232, 235;
--color-mc-input: 49, 50, 51; --color-mc-surface-hover: 208, 209, 212;
--color-mc-input-shadow: 36, 36, 37; --color-mc-surface-up: 88, 88, 90;
--color-mc-container: 72, 73, 74; --color-mc-surface-down: 177, 178, 181;
--color-mc-container-up: 49, 50, 51; --color-mc-input: 49, 50, 51;
--color-mc-container-hover: 88, 88, 90; --color-mc-input-shadow: 36, 36, 37;
--color-mc-container-down: 49, 50, 51; --color-mc-container: 72, 73, 74;
--color-mc-container-top: 90, 91, 92; --color-mc-container-up: 49, 50, 51;
--color-mc-container-bottom: 50, 51, 52; --color-mc-container-hover: 88, 88, 90;
--color-mc-container-down: 49, 50, 51;
--font-sans: TikTokSans, NotoSansThai, sans-serif; --color-mc-container-top: 90, 91, 92;
--font-mono: NotoSansMono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --color-mc-container-bottom: 50, 51, 52;
--ease-fluid: 0.2, 0, 0, 1; --font-display: Inter, NotoSansThai, sans-serif;
--ease-fluid-in: .6, .2, .7, .4; --font-sans: Inter, NotoSansThai, sans-serif;
} --font-sans--font-feature-settings: "liga", "calt", "ss01", "cv05", "cv06", "cv11";
@supports (font-variation-settings: normal) { --font-mono: RobotoMono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
:root { --font-serif: RobotoSerif, Georgia, Garamond, "Times New Roman", Times, serif;
--font-sans: TikTokSansVariable, NotoSansThaiVariable, sans-serif;
--font-monospace: NotoSansMonoVariable, NotoSansThaiVariable, sans-serif; --ease-fluid: 0.2, 0, 0, 1;
font-optical-sizing: auto; --ease-fluid-in: .6, .2, .7, .4;
font-variation-settings: }
"slnt" 0, @supports (font-variation-settings: normal) {
"wdth" 92.5; :root {
} --font-display: InterVariable, NotoSansThai, sans-serif;
} --font-sans: InterVariable, NotoSansThaiVariable, sans-serif;
.dark-mode { --font-monospace: RobotoMonoVariable, NotoSansThaiVariable, sans-serif;
--ui-primary: var(--color-cloud-light); --font-serif: RobotoSerifVariable, Georgia, Garamond, "Times New Roman", Times, serif;
--ui-bg: var(--color-deep-dark); font-optical-sizing: auto;
--ui-bg-muted: var(--color-deep-semidark); }
--ui-bg-elevated: var(--color-deep-medium); }
--ui-border: var(--color-deep-medium); .dark-mode {
--ui-border-accented: var(--color-deep-light); --ui-primary: var(--color-cloud-light);
--ui-text: var(--color-cloud-light); --ui-bg: var(--color-deep-dark);
--ui-text-muted: var(--color-cloud-dark); --ui-bg-muted: var(--color-deep-semidark);
--ui-header-logo-inverted: 0; --ui-bg-elevated: var(--color-deep-medium);
} --ui-bg-inverted: var(--color-cloud-light);
/* fix for tiktok sans variable font */ --ui-bg-muted-inverted: var(--color-cloud-semilight);
em, i, [style*="italic"], [class*="italic"] { --ui-bg-elevated-inverted: var(--color-cloud-medium);
font-style: normal; /* prevent default italic skew */ --ui-border: var(--color-deep-medium);
font-variation-settings: 'slnt' -6; --ui-border-accented: var(--color-deep-light);
} --ui-text: var(--color-cloud-light);
@keyframes ring { --ui-text-muted: var(--color-cloud-medium);
0% { --ui-text-blind: var(--color-cloud-dark);
outline: 0px solid var(--ui-ring-color); --ui-text-inverted: var(--color-deep-light);
outline-offset: var(--ui-ring-offset); --ui-text-muted-inverted: var(--color-deep-medium);
} --ui-text-blind-inverted: var(--color-deep-dark);
25% { --ui-header-logo-inverted: 0;
outline: 12px solid var(--ui-ring-color); }
outline-offset: var(--ui-ring-offset); @keyframes ring {
} 0% {
100% { outline: 0px solid var(--ui-ring-color);
outline: var(--ui-ring-size) solid var(--ui-ring-color); outline-offset: var(--ui-ring-offset);
outline-offset: var(--ui-ring-offset); }
} 25% {
} outline: 12px solid var(--ui-ring-color);
*:focus-visible { outline-offset: var(--ui-ring-offset);
--ui-ring-size: 2px; }
--ui-ring-color: var(--color-primary); 100% {
--ui-ring-offset: 0; outline: var(--ui-ring-size) solid var(--ui-ring-color);
animation: ring 0.5s cubic-bezier(var(--ease-fluid)); outline-offset: var(--ui-ring-offset);
outline: var(--ui-ring-size) solid var(--ui-ring-color); }
outline-offset: var(--ui-ring-offset); }
} *:focus-visible {
h1,h2,h3,h4,h5,h6 { --ui-ring-size: 2px;
color: var(--ui-text); --ui-ring-color: var(--color-primary);
} --ui-ring-offset: 0;
body,main { animation: ring 0.5s cubic-bezier(var(--ease-fluid));
font-family: var(--font-sans); outline: var(--ui-ring-size) solid var(--ui-ring-color);
padding: 0; outline-offset: var(--ui-ring-offset);
margin: 0; }
color: var(--ui-text-muted); h1,h2,h3,h4,h5,h6 {
background-color: var(--ui-bg); @apply font-display;
font-size: 20px; color: var(--ui-text);
line-height: 1.35; }
font-weight: 500; body,main {
} font-family: var(--font-sans);
.web-header, .web-footer, main, footer { padding: 0;
padding: 0 calc(var(--spacing)*4); margin: 0;
} color: var(--ui-text-muted);
.web-header { background-color: var(--ui-bg);
display: flex; line-height: 1.35;
flex-direction: row; }
position: sticky; .web-header {
top: 0; padding: 0 calc(var(--spacing)*4);
height: calc(var(--spacing)*16); display: flex;
z-index: 1000; flex-direction: row;
@apply bg-(--ui-bg-elevated); position: sticky;
} top: 0;
.web-nav, .web-footer-content, .article { height: calc(var(--spacing)*14);
margin: 1rem auto; z-index: 1000;
width: 100%; @apply bg-(--ui-bg) shadow-xs shadow-[rgb(0,0,0,0.07)] transition-shadow;
max-width: var(--ui-container); }
} .web-header.web-header-bg {
.web-heading { .web-nav-title {
margin: 0 auto; @apply text-(--color-cloud-light)
display: flex; }
flex-direction: row; @apply bg-(--color-deep-semidark) text-(--color-cloud-medium);
align-items: center; }
justify-content: space-between; .web-header-emit-shadow-when-top.shadow-active {
width: 100%; @apply shadow-lg;
height: 100%; }
max-width: var(--ui-container); .web-nav, .web-footer-content, .article {
.web-heading-left-section { width: 100%;
width: fit-content; }
display: flex; .web-heading {
flex-direction: row; margin: 0 auto;
justify-content: start; display: flex;
height: 100%; flex-direction: row;
align-items: center; align-items: center;
} justify-content: space-between;
.web-heading-right-section { width: 100%;
display: flex; height: 100%;
width: fit-content; max-width: var(--ui-container);
flex-direction: row; .web-heading-left-section {
justify-content: end; width: fit-content;
height: 100%; display: flex;
align-items: center; flex-direction: row;
} justify-content: start;
} height: 100%;
p { align-items: center;
@apply my-2; }
} .web-heading-right-section {
.font-hero { display: flex;
@apply text-6xl sm:text-7xl md:text-8xl font-bold my-[.2em]; width: fit-content;
font-variation-settings: flex-direction: row;
"wdth" 125; justify-content: end;
} height: 100%;
.font-hero-desc { align-items: center;
@apply text-2xl font-medium; }
} }
.web-title { p {
@apply text-5xl sm:text-6xl my-[.2em] transition-[color] ease-fluid duration-100; @apply my-[1em];
font-variation-settings: }
"wdth" 125; .font-hero {
a { @apply text-5xl sm:text-6xl md:text-7xl font-bold my-[.2em];
cursor: pointer; }
} .font-hero-desc {
.inline-icon { @apply text-xl font-medium;
@apply transition-[opacity_margin] ease-fluid duration-100 select-none; }
opacity: 0.5; .web-title {
} @apply text-3xl sm:text-4xl my-[.7em] transition-[color] ease-fluid duration-100;
&:hover .inline-icon { a {
opacity: 1; cursor: pointer;
margin-left: 0.5rem; }
} .inline-icon {
&:active a { @apply transition-[opacity_margin] ease-fluid duration-100 select-none;
@apply text-primary; opacity: 0.5;
} }
&:focus-visible a { &:hover .inline-icon {
@apply underline; opacity: 1;
} margin-left: 0.5rem;
&.link { }
color: var(--ui-text); &:active a {
} @apply text-primary;
} }
.web-nav-title { &:focus-visible a {
@apply text-xl font-bold; @apply underline;
font-variation-settings: 'wdth' 75; }
} &.link {
.web-hero { color: var(--ui-text);
margin-block: clamp(calc(var(--spacing) * 16), 9vw, calc(var(--spacing) * 48)); }
} }
.web-section { .web-nav-title {
@apply my-24; @apply text-lg font-bold;
} }
.project-card { .web-hero.web-hero-bg {
--ui-ring-offset: -2px; @apply bg-(--color-deep-semidark) text-(--color-cloud-medium);
height: 100%; h1,h2,h3,h4,h5,h6 {
padding: 1rem; @apply text-(--color-cloud-light)
@apply bg-(--ui-bg-muted) hover:bg-(--ui-bg-elevated); }
h3 { @apply text-3xl font-bold; font-variation-settings: 'wdth' 125; } }
h3,p { z-index: 1; } .web-hero {
img { @apply mb-2 aspect-video object-cover w-full; } padding: clamp(calc(var(--spacing) * 32), 9vw, calc(var(--spacing) * 48)) calc(var(--spacing)*4);
p { @apply flex flex-col items-center text-center;
@apply line-clamp-2; }
margin: 0; .web-section {
height: 2.5em; @apply my-16 px-4;
width: 100%; max-width: var(--ui-container);
} margin: calc(var(--spacing)*16) auto;
.iconify { }
background-color: var(--ui-text); .web-section:first-child {
width: calc(var(--spacing)*16); @apply mt-0;
height: calc(var(--spacing)*16); }
} .project-cards, .font-cards {
} @apply flex flex-col gap-1;
.hamburger-toggle { }
@apply flex md:hidden h-16 w-9 cursor-pointer items-center justify-center hover:bg-(--ui-text)/5 active:bg-(--ui-text)/10 transition-colors duration-100 ease-fluid; .project-cards .project-card:not(:last-child):not(:first-child):not(:only-child), .font-cards .font-card:not(:last-child):not(:first-child):not(:only-child) {
} @apply rounded-md;
.hamburger-menu { }
@apply flex flex-col fixed left-0 top-16 w-full bg-(--ui-bg-elevated) h-full z-[1000] border-(--ui-border-accented) border-t; .project-cards .project-card:last-child:not(:only-child), .font-cards .font-card:last-child:not(:only-child) {
.nav-wrapper { @apply rounded-t-md;
list-style-type: none; }
display: flex; .project-cards .project-card:first-child:not(:only-child), .font-cards .font-card:first-child:not(:only-child) {
flex-direction: column; @apply rounded-b-md;
margin: 0; }
padding-left: calc(var(--spacing)*4); .project-card, .font-card {
width: 100%; height: 100%;
.nav-link { padding: 1rem;
height: calc(var(--spacing)*16); @apply flex flex-col items-center sm:flex-row sm:gap-4 bg-(--ui-bg-muted) hover:bg-(--ui-bg-elevated) rounded-3xl transition-colors duration-100 ease-fluid;
width: 100%; h3 { @apply text-2xl font-bold; }
@apply ml-0; h3,p { z-index: 1; }
a { img { @apply mb-2 sm:mb-0 aspect-video object-cover w-full sm:max-w-56; }
display: flex; p {
align-items: center; @apply line-clamp-2;
font-variation-settings: 'wdth' 75; margin: 0;
height: calc(var(--spacing)*16); width: 100%;
width: 100%; }
@apply pl-3 cursor-pointer hover:bg-(--ui-text)/5 active:bg-(--ui-text)/10 transition-colors duration-100 ease-fluid; .iconify {
} background-color: var(--ui-text);
a.router-link-exact-active { width: calc(var(--spacing)*16);
@apply border-l-2 border-primary box-border pl-2.5 text-primary; height: calc(var(--spacing)*16);
} }
} .project-card-content, .font-card-content {
} @apply block w-full;
} }
.nav-links { &:disabled, &[disabled] {
@apply hidden md:flex; @apply opacity-50 pointer-events-none cursor-not-allowed;
height: 100%; }
.nav-wrapper { }
list-style-type: none; .font-card {
display: flex; @apply flex-row;
flex-direction: row; }
height: 100%; .hamburger-toggle {
.nav-link { @apply flex md:hidden h-14 w-9 cursor-pointer items-center justify-center hover:bg-(--ui-text)/5 active:bg-(--ui-text)/10 transition-colors duration-100 ease-fluid;
height: 100%; }
@apply ml-0; .hamburger-menu {
a { @apply flex flex-col fixed left-0 top-14 w-full bg-(--color-deep-semidark) text-(--color-cloud-medium) h-full z-[1000];
display: flex; .nav-wrapper {
align-items: center; list-style-type: none;
font-variation-settings: 'wdth' 75; display: flex;
height: 100%; flex-direction: column;
@apply px-3 cursor-pointer hover:bg-(--ui-text)/5 active:bg-(--ui-text)/10 transition-colors duration-100 ease-fluid; margin: 0;
} padding: 0 calc(var(--spacing)*4);
a.router-link-exact-active { width: 100%;
@apply border-t-2 border-primary box-border pb-0.5 text-primary; .nav-link {
} height: calc(var(--spacing)*14);
} width: 100%;
} @apply ml-0;
} a {
code, pre, tt, kbd, samp { display: flex;
font-size: 1em; align-items: center;
} height: calc(var(--spacing)*14);
.link { width: 100%;
&:hover { @apply pl-3 cursor-pointer hover:bg-(--ui-text)/5 active:bg-(--ui-text)/10 transition-colors duration-100 ease-fluid;
@apply underline text-(--ui-text); }
} a.router-link-exact-active {
&.link-no-underline { @apply border-l-2 border-primary box-border pl-2.5 text-primary;
@apply no-underline; }
} }
} }
ul,li { @apply ml-[1em] } }
ul { @apply list-disc; } .nav-links {
@apply hidden md:flex;
.btn { height: 100%;
height: 48px; .nav-wrapper {
} list-style-type: none;
display: flex;
flex-direction: row;
height: 100%;
.nav-link {
height: 100%;
@apply ml-0;
a {
display: flex;
align-items: center;
height: 100%;
@apply px-3 cursor-pointer hover:text-primary active:opacity-80 transition-colors duration-100 ease-fluid;
}
a.router-link-exact-active {
@apply text-primary;
}
}
}
}
code, pre, tt, kbd, samp {
font-size: 1em;
}
.link {
&:hover {
@apply underline text-(--ui-text);
}
&.link-no-underline {
@apply no-underline;
}
}
ul,li { @apply ml-[1em] }
ul { @apply list-disc; }
button.btn, a.btn {
@apply cursor-pointer;
}
.btn {
@apply h-10 bg-primary text-primary-content px-4 rounded-[20px];
}
.btn.btn-sm {
@apply h-9;
}
.btn.btn-neutral {
@apply bg-(--ui-bg-muted) text-(--ui-text);
&:hover {
@apply bg-(--ui-bg-elevated);
}
&:active {
@apply bg-(--ui-border-accented);
}
}
img {
@apply rounded-lg;
}
.prose {
h1,h2,h3,h4,h5,h6 {
@apply font-bold;
}
h2 {
@apply text-3xl my-6;
}
}