Hwandji's picture
feat: initial HuggingFace Space deployment
4343907
// SAAP Global Styles
@import './tokens.scss';
@import './mixins.scss';
@import './utilities.scss';
// === BASE STYLES ===
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
scroll-behavior: smooth;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
font-family: var(--saap-font-family);
font-size: var(--saap-text-base);
font-weight: var(--saap-font-normal);
line-height: var(--saap-leading-normal);
color: var(--saap-neutral-800);
background-color: var(--saap-neutral-50);
min-height: 100vh;
}
// === TYPOGRAPHY ===
h1, h2, h3, h4, h5, h6 {
font-weight: var(--saap-font-semibold);
line-height: var(--saap-leading-tight);
margin-bottom: var(--saap-space-4);
color: var(--saap-neutral-900);
}
h1 {
font-size: var(--saap-text-5xl);
font-weight: var(--saap-font-bold);
color: var(--saap-primary-800);
}
h2 {
font-size: var(--saap-text-4xl);
color: var(--saap-primary-600);
}
h3 {
font-size: var(--saap-text-3xl);
}
h4 {
font-size: var(--saap-text-2xl);
font-weight: var(--saap-font-medium);
}
h5 {
font-size: var(--saap-text-xl);
font-weight: var(--saap-font-medium);
}
h6 {
font-size: var(--saap-text-lg);
font-weight: var(--saap-font-medium);
}
p {
margin-bottom: var(--saap-space-4);
color: var(--saap-neutral-700);
}
small {
font-size: var(--saap-text-sm);
color: var(--saap-neutral-600);
}
code {
font-family: var(--saap-font-mono);
font-size: 0.9em;
padding: var(--saap-space-1) var(--saap-space-2);
background-color: var(--saap-neutral-100);
border-radius: var(--saap-border-radius-sm);
color: var(--saap-neutral-800);
}
pre {
font-family: var(--saap-font-mono);
padding: var(--saap-space-4);
background-color: var(--saap-neutral-100);
border-radius: var(--saap-border-radius);
overflow-x: auto;
margin-bottom: var(--saap-space-4);
code {
padding: 0;
background: none;
}
}
// === LINKS ===
a {
color: var(--saap-primary-600);
text-decoration: none;
transition: var(--saap-transition-fast);
&:hover {
color: var(--saap-primary-800);
text-decoration: underline;
}
&:focus {
outline: 2px solid var(--saap-primary-400);
outline-offset: 2px;
border-radius: var(--saap-border-radius-sm);
}
}
// === BUTTONS ===
button {
font-family: inherit;
cursor: pointer;
border: none;
background: none;
padding: 0;
transition: var(--saap-transition);
&:focus {
outline: 2px solid var(--saap-primary-400);
outline-offset: 2px;
}
&:disabled {
cursor: not-allowed;
opacity: 0.6;
}
}
// === FORM ELEMENTS ===
input, textarea, select {
font-family: inherit;
font-size: inherit;
border: 1px solid var(--saap-neutral-300);
border-radius: var(--saap-border-radius);
padding: var(--saap-space-3) var(--saap-space-4);
background-color: white;
transition: var(--saap-transition-fast);
&:focus {
outline: none;
border-color: var(--saap-primary-400);
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}
&:disabled {
background-color: var(--saap-neutral-100);
cursor: not-allowed;
opacity: 0.6;
}
&::placeholder {
color: var(--saap-neutral-500);
}
}
textarea {
resize: vertical;
min-height: 100px;
}
// === SCROLLBARS ===
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--saap-neutral-100);
}
::-webkit-scrollbar-thumb {
background: var(--saap-neutral-400);
border-radius: var(--saap-border-radius);
&:hover {
background: var(--saap-neutral-500);
}
}
// === SELECTION ===
::selection {
background: var(--saap-primary-200);
color: var(--saap-primary-900);
}
// === FOCUS STYLES ===
.focus-ring {
&:focus {
outline: 2px solid var(--saap-primary-400);
outline-offset: 2px;
}
}
// === SCREEN READER ===
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
// === ANIMATIONS ===
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideInDown {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
// === UTILITY ANIMATIONS ===
.fade-in {
animation: fadeIn 0.3s ease-in-out;
}
.slide-in-up {
animation: slideInUp 0.3s ease-out;
}
.slide-in-down {
animation: slideInDown 0.3s ease-out;
}
.pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
.spin {
animation: spin 1s linear infinite;
}