UNPKG

friday-widgets

Version:

Professional embeddable accounting widgets for vertical SaaS platforms. Layer Financial-inspired design with comprehensive financial reporting capabilities.

398 lines (345 loc) 9.94 kB
@import url('https://rsms.me/inter/inter.css'); /* Friday Design System - Inspired by Layer Financial */ .Friday__component, .Friday__portal, .Friday__view, .Friday__tooltip, .Friday__drawer, .Friday__variables { /* Colors */ --color-black: #1a1a1a; --color-white: white; --color-blue: hsl(217deg 100% 92%); --color-info: #0968f8; --color-info-bg: #d6e6ff; --color-info-fg: #0056d7; --color-success: hsl(145deg 45% 42%); --color-success-bg: hsl(145deg 59% 86%); --color-success-fg: hsl(145deg 63% 29%); --color-warning: hsl(43deg 100% 44%); --color-warning-bg: hsl(43deg 100% 84%); --color-warning-fg: hsl(43deg 88% 26%); --color-error: hsl(0deg 76% 50%); --color-error-bg: hsl(0deg 83% 86%); --color-error-fg: hsl(0deg 88% 32%); /* Base color scale */ --color-dark-h: 220; --color-dark-s: 15%; --color-dark-l: 7%; --color-dark: hsl(var(--color-dark-h) var(--color-dark-s) var(--color-dark-l)); --color-light-h: 220; --color-light-s: 5%; --color-light-l: 95%; --color-light: hsl(var(--color-light-h) var(--color-light-s) var(--color-light-l)); --color-base-0: #fff; --color-base-50: hsl(var(--color-dark-h) 5% 98%); --color-base-100: hsl(var(--color-dark-h) 5% 95%); --color-base-200: hsl(var(--color-dark-h) 5% 91%); --color-base-300: hsl(var(--color-dark-h) 6% 85%); --color-base-400: hsl(var(--color-dark-h) 7% 75%); --color-base-500: hsl(var(--color-dark-h) 8% 50%); --color-base-600: hsl(var(--color-dark-h) 10% 40%); --color-base-700: hsl(var(--color-dark-h) 12% 27%); --color-base-800: hsl(var(--color-dark-h) 15% 20%); --color-base-900: hsl(var(--color-dark-h) 18% 14%); --color-base-1000: hsl(var(--color-dark-h) 20% 7%); /* Semantic colors */ --color-primary: var(--color-dark); --color-accent: var(--color-info); --color-secondary: var(--color-base-500); /* Text colors */ --text-color-primary: var(--color-dark); --text-color-secondary: var(--color-base-600); --text-color-muted: var(--color-base-500); --text-color-inverse: var(--color-white); /* Background colors */ --bg-primary: var(--color-base-0); --bg-secondary: var(--color-base-50); --bg-tertiary: var(--color-base-100); --bg-element-focus: var(--color-base-50); --bg-element-hover: var(--color-base-100); /* Border colors */ --border-primary: var(--color-base-200); --border-secondary: var(--color-base-300); --border-focus: var(--color-accent); /* Typography */ --font-family: 'InterVariable', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-family-numeric: 'InterVariable', 'Inter', 'SF Mono', Consolas, monospace; --text-2xs: 10px; --text-xs: 11px; --text-sm: 12px; --text-md: 14px; --text-lg: 16px; --text-xl: 18px; --text-2xl: 20px; --text-3xl: 24px; --text-heading: var(--text-3xl); --text-heading-secondary: var(--text-2xl); --text-heading-sm: var(--text-lg); --text-heading-xs: var(--text-md); --font-weight-normal: 460; --font-weight-medium: 500; --font-weight-semibold: 540; --font-weight-bold: 600; /* Spacing */ --spacing-4xs: 2px; --spacing-3xs: 4px; --spacing-2xs: 6px; --spacing-xs: 8px; --spacing-sm: 12px; --spacing-md: 16px; --spacing-lg: 20px; --spacing-xl: 24px; --spacing-2xl: 32px; --spacing-3xl: 40px; --spacing-4xl: 48px; --spacing-5xl: 64px; /* Radius */ --radius-xs: 4px; --radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 16px; --radius-full: 9999px; /* Shadows */ --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); /* Component specific */ --max-component-width: 1408px; --transition-fast: 150ms ease; --transition-normal: 250ms ease; --transition-slow: 350ms ease; } /* Base component styles */ .Friday__component { font-family: var(--font-family); font-size: var(--text-md); line-height: 1.5; color: var(--text-color-primary); background: var(--bg-primary); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); overflow: hidden; max-width: var(--max-component-width); } /* Button styles */ .Friday__button { display: inline-flex; align-items: center; justify-content: center; gap: var(--spacing-xs); padding: var(--spacing-xs) var(--spacing-md); border: 1px solid transparent; border-radius: var(--radius-sm); font-family: var(--font-family); font-size: var(--text-sm); font-weight: var(--font-weight-medium); line-height: 1.5; text-decoration: none; cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; user-select: none; } .Friday__button:disabled { opacity: 0.5; cursor: not-allowed; } .Friday__button--primary { background: var(--color-accent); color: var(--text-color-inverse); border-color: var(--color-accent); } .Friday__button--primary:hover:not(:disabled) { background: hsl(217deg 100% 45%); border-color: hsl(217deg 100% 45%); } .Friday__button--secondary { background: var(--bg-primary); color: var(--text-color-primary); border-color: var(--border-primary); } .Friday__button--secondary:hover:not(:disabled) { background: var(--bg-element-hover); border-color: var(--border-secondary); } .Friday__button--success { background: var(--color-success); color: var(--text-color-inverse); border-color: var(--color-success); } .Friday__button--success:hover:not(:disabled) { background: var(--color-success-fg); border-color: var(--color-success-fg); } .Friday__button--error { background: var(--color-error); color: var(--text-color-inverse); border-color: var(--color-error); } .Friday__button--error:hover:not(:disabled) { background: var(--color-error-fg); border-color: var(--color-error-fg); } .Friday__button--sm { padding: var(--spacing-2xs) var(--spacing-sm); font-size: var(--text-xs); } .Friday__button--lg { padding: var(--spacing-sm) var(--spacing-lg); font-size: var(--text-md); } /* Input styles */ .Friday__input { display: block; width: 100%; padding: var(--spacing-xs) var(--spacing-sm); border: 1px solid var(--border-primary); border-radius: var(--radius-sm); font-family: var(--font-family); font-size: var(--text-sm); line-height: 1.5; color: var(--text-color-primary); background: var(--bg-primary); transition: all var(--transition-fast); } .Friday__input:focus { outline: none; border-color: var(--border-focus); box-shadow: 0 0 0 3px hsla(217, 100%, 50%, 0.1); } .Friday__input::placeholder { color: var(--text-color-muted); } /* Select styles */ .Friday__select { display: block; width: 100%; padding: var(--spacing-xs) var(--spacing-sm); border: 1px solid var(--border-primary); border-radius: var(--radius-sm); font-family: var(--font-family); font-size: var(--text-sm); line-height: 1.5; color: var(--text-color-primary); background: var(--bg-primary); cursor: pointer; transition: all var(--transition-fast); } .Friday__select:focus { outline: none; border-color: var(--border-focus); box-shadow: 0 0 0 3px hsla(217, 100%, 50%, 0.1); } /* Table styles */ .Friday__table { width: 100%; border-collapse: collapse; font-size: var(--text-sm); } .Friday__table th, .Friday__table td { padding: var(--spacing-sm); text-align: left; border-bottom: 1px solid var(--border-primary); } .Friday__table th { font-weight: var(--font-weight-semibold); color: var(--text-color-secondary); background: var(--bg-secondary); } .Friday__table tbody tr:hover { background: var(--bg-element-hover); } /* Card styles */ .Friday__card { background: var(--bg-primary); border: 1px solid var(--border-primary); border-radius: var(--radius-md); padding: var(--spacing-lg); box-shadow: var(--shadow-sm); } .Friday__card--elevated { box-shadow: var(--shadow-md); } /* Badge styles */ .Friday__badge { display: inline-flex; align-items: center; padding: var(--spacing-3xs) var(--spacing-xs); border-radius: var(--radius-full); font-size: var(--text-2xs); font-weight: var(--font-weight-medium); text-transform: uppercase; letter-spacing: 0.05em; } .Friday__badge--success { background: var(--color-success-bg); color: var(--color-success-fg); } .Friday__badge--warning { background: var(--color-warning-bg); color: var(--color-warning-fg); } .Friday__badge--error { background: var(--color-error-bg); color: var(--color-error-fg); } .Friday__badge--info { background: var(--color-info-bg); color: var(--color-info-fg); } /* Loading states */ .Friday__loading { display: flex; align-items: center; justify-content: center; padding: var(--spacing-3xl); color: var(--text-color-muted); } .Friday__spinner { width: 20px; height: 20px; border: 2px solid var(--border-primary); border-top-color: var(--color-accent); border-radius: 50%; animation: Friday__spin 1s linear infinite; } @keyframes Friday__spin { to { transform: rotate(360deg); } } /* Error states */ .Friday__error { display: flex; align-items: center; gap: var(--spacing-xs); padding: var(--spacing-md); background: var(--color-error-bg); color: var(--color-error-fg); border: 1px solid var(--color-error); border-radius: var(--radius-sm); font-size: var(--text-sm); } /* Responsive utilities */ @media (max-width: 768px) { .Friday__component { border-radius: 0; box-shadow: none; } .Friday__button { width: 100%; justify-content: center; } .Friday__table { font-size: var(--text-xs); } .Friday__table th, .Friday__table td { padding: var(--spacing-xs); } }