// 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; }