claritykit-svelte
Version:
A comprehensive Svelte component library focused on accessibility, ADHD-optimized design, developer experience, and full SSR compatibility
315 lines (268 loc) • 7.01 kB
CSS
/**
* ClarityKit Component Base Styles
* ADHD-Optimized Design System
*/
/* Import design tokens */
@import './tokens.css';
/* Base reset for components */
.ck-component {
box-sizing: border-box;
font-family: var(--ck-font-sans);
font-size: var(--ck-text-base);
line-height: var(--ck-leading-normal);
color: var(--ck-text-primary);
}
.ck-component *,
.ck-component *::before,
.ck-component *::after {
box-sizing: inherit;
}
/* Focus management - critical for ADHD users */
.ck-focusable {
outline: none;
transition: box-shadow var(--ck-transition);
}
.ck-focusable:focus-visible {
box-shadow: var(--ck-focus-ring);
outline-offset: var(--ck-focus-ring-offset);
}
/* Button base styles */
.ck-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--ck-space-2);
padding: var(--ck-space-3) var(--ck-space-4);
min-height: var(--ck-button-height-md);
border: 1px solid transparent;
border-radius: var(--ck-radius-md);
font-family: inherit;
font-size: var(--ck-text-base);
font-weight: var(--ck-font-medium);
line-height: 1;
text-decoration: none;
cursor: pointer;
transition: all var(--ck-transition);
user-select: none;
white-space: nowrap;
}
.ck-button:disabled {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
/* Button variants */
.ck-button--primary {
background-color: var(--ck-accent);
color: var(--ck-text-inverse);
border-color: var(--ck-accent);
}
.ck-button--primary:hover:not(:disabled) {
background-color: var(--ck-accent-hover);
border-color: var(--ck-accent-hover);
}
.ck-button--secondary {
background-color: var(--ck-bg-secondary);
color: var(--ck-text-primary);
border-color: var(--ck-border);
}
.ck-button--secondary:hover:not(:disabled) {
background-color: var(--ck-bg-tertiary);
border-color: var(--ck-border-light);
}
.ck-button--ghost {
background-color: transparent;
color: var(--ck-text-primary);
border-color: transparent;
}
.ck-button--ghost:hover:not(:disabled) {
background-color: var(--ck-bg-hover);
}
.ck-button--danger {
background-color: var(--ck-error);
color: var(--ck-text-inverse);
border-color: var(--ck-error);
}
.ck-button--danger:hover:not(:disabled) {
background-color: var(--ck-error-hover);
border-color: var(--ck-error-hover);
}
/* Button sizes */
.ck-button--sm {
min-height: var(--ck-button-height-sm);
padding: var(--ck-space-2) var(--ck-space-3);
font-size: var(--ck-text-sm);
}
.ck-button--lg {
min-height: var(--ck-button-height-lg);
padding: var(--ck-space-4) var(--ck-space-6);
font-size: var(--ck-text-lg);
}
/* Input base styles */
.ck-input {
display: block;
width: 100%;
min-height: var(--ck-input-height-md);
padding: var(--ck-space-3) var(--ck-space-4);
background-color: var(--ck-bg-secondary);
border: 1px solid var(--ck-border);
border-radius: var(--ck-radius-md);
font-family: inherit;
font-size: var(--ck-text-base);
color: var(--ck-text-primary);
transition: all var(--ck-transition);
}
.ck-input::placeholder {
color: var(--ck-text-muted);
}
.ck-input:hover {
border-color: var(--ck-border-light);
}
.ck-input:focus {
outline: none;
border-color: var(--ck-accent);
box-shadow: var(--ck-focus-ring);
}
.ck-input--error {
border-color: var(--ck-error);
}
.ck-input--error:focus {
border-color: var(--ck-error);
box-shadow: 0 0 0 3px rgba(191, 97, 106, 0.4);
}
/* Card base styles */
.ck-card {
background-color: var(--ck-bg-secondary);
border: 1px solid var(--ck-border);
border-radius: var(--ck-radius-lg);
box-shadow: var(--ck-shadow-sm);
overflow: hidden;
}
.ck-card--elevated {
box-shadow: var(--ck-shadow-md);
}
.ck-card--interactive {
cursor: pointer;
transition: all var(--ck-transition);
}
.ck-card--interactive:hover {
box-shadow: var(--ck-shadow-lg);
transform: translateY(-1px);
}
/* Modal base styles */
.ck-modal-backdrop {
position: fixed;
inset: 0;
background-color: rgba(46, 52, 64, 0.8);
backdrop-filter: blur(4px);
z-index: var(--ck-z-modal-backdrop);
display: flex;
align-items: center;
justify-content: center;
padding: var(--ck-space-4);
}
.ck-modal {
background-color: var(--ck-bg-secondary);
border: 1px solid var(--ck-border);
border-radius: var(--ck-radius-lg);
box-shadow: var(--ck-shadow-xl);
max-width: 90vw;
max-height: 90vh;
overflow-y: auto;
z-index: var(--ck-z-modal);
}
/* Alert base styles */
.ck-alert {
display: flex;
align-items: flex-start;
gap: var(--ck-space-3);
padding: var(--ck-space-4);
border-radius: var(--ck-radius-md);
border-left: 4px solid;
}
.ck-alert--success {
background-color: rgba(163, 190, 140, 0.1);
border-left-color: var(--ck-success);
color: var(--ck-success);
}
.ck-alert--warning {
background-color: rgba(235, 203, 139, 0.1);
border-left-color: var(--ck-warning);
color: var(--ck-warning);
}
.ck-alert--error {
background-color: rgba(191, 97, 106, 0.1);
border-left-color: var(--ck-error);
color: var(--ck-error);
}
.ck-alert--info {
background-color: rgba(94, 129, 172, 0.1);
border-left-color: var(--ck-info);
color: var(--ck-info);
}
/* Loading spinner */
.ck-spinner {
display: inline-block;
width: 1.5rem;
height: 1.5rem;
border: 2px solid var(--ck-border);
border-top: 2px solid var(--ck-accent);
border-radius: 50%;
animation: ck-spin 1s linear infinite;
}
@keyframes ck-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Status indicator */
.ck-status-indicator {
display: inline-flex;
align-items: center;
gap: var(--ck-space-2);
font-size: var(--ck-text-sm);
font-weight: var(--ck-font-medium);
}
.ck-status-indicator__dot {
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
flex-shrink: 0;
}
.ck-status-indicator--success .ck-status-indicator__dot {
background-color: var(--ck-success);
}
.ck-status-indicator--warning .ck-status-indicator__dot {
background-color: var(--ck-warning);
}
.ck-status-indicator--error .ck-status-indicator__dot {
background-color: var(--ck-error);
}
.ck-status-indicator--info .ck-status-indicator__dot {
background-color: var(--ck-info);
}
/* Utility classes */
.ck-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;
}
.ck-focus-trap {
outline: none;
}
/* Responsive helpers */
@media (max-width: 640px) {
.ck-button {
min-height: var(--ck-button-height-lg);
font-size: var(--ck-text-lg);
}
.ck-input {
min-height: var(--ck-input-height-lg);
font-size: var(--ck-text-lg);
}
}