besper-frontend-site-dev-main
Version:
Professional B-esper Frontend Site - Site-wide integration toolkit for full website bot deployment
575 lines (494 loc) • 11 kB
CSS
/* Main Component Styles - Core UI components */
/* Button Components */
.bsp-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--spacing-2);
padding: var(--spacing-3) var(--spacing-6);
font-size: var(--font-size-base);
font-weight: var(--font-weight-medium);
line-height: 1;
border-radius: var(--radius-lg);
border: 1px solid transparent;
cursor: pointer;
transition: all var(--transition-fast);
text-decoration: none;
white-space: nowrap;
user-select: none;
outline: none;
}
.bsp-btn:focus {
outline: 2px solid var(--primary-blue);
outline-offset: 2px;
}
.bsp-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
/* Button Variants */
.bsp-btn-primary {
background-color: var(--primary-blue);
color: var(--white);
border-color: var(--primary-blue);
}
.bsp-btn-primary:hover {
background-color: var(--primary-blue-dark);
border-color: var(--primary-blue-dark);
}
.bsp-btn-secondary {
background-color: transparent;
color: var(--primary-blue);
border-color: var(--primary-blue);
}
.bsp-btn-secondary:hover {
background-color: var(--primary-blue);
color: var(--white);
}
.bsp-btn-outline {
background-color: transparent;
color: var(--gray-700);
border-color: var(--gray-300);
}
.bsp-btn-outline:hover {
background-color: var(--gray-50);
border-color: var(--gray-400);
}
.bsp-btn-ghost {
background-color: transparent;
color: var(--gray-700);
border-color: transparent;
}
.bsp-btn-ghost:hover {
background-color: var(--gray-100);
}
.bsp-btn-success {
background-color: var(--success);
color: var(--white);
border-color: var(--success);
}
.bsp-btn-success:hover {
background-color: #059669;
border-color: #059669;
}
.bsp-btn-warning {
background-color: var(--warning);
color: var(--white);
border-color: var(--warning);
}
.bsp-btn-warning:hover {
background-color: #d97706;
border-color: #d97706;
}
.bsp-btn-error {
background-color: var(--error);
color: var(--white);
border-color: var(--error);
}
.bsp-btn-error:hover {
background-color: #dc2626;
border-color: #dc2626;
}
/* Button Sizes */
.bsp-btn-sm {
padding: var(--spacing-2) var(--spacing-4);
font-size: var(--font-size-sm);
}
.bsp-btn-lg {
padding: var(--spacing-4) var(--spacing-8);
font-size: var(--font-size-lg);
}
.bsp-btn-xl {
padding: var(--spacing-5) var(--spacing-10);
font-size: var(--font-size-xl);
}
/* Button with Icon */
.bsp-btn .bsp-icon {
width: 1.25em;
height: 1.25em;
}
.bsp-btn-sm .bsp-icon {
width: 1em;
height: 1em;
}
.bsp-btn-lg .bsp-icon {
width: 1.5em;
height: 1.5em;
}
/* Card Components */
.bsp-card {
background-color: var(--white);
border: 1px solid var(--gray-200);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-sm);
overflow: hidden;
transition: box-shadow var(--transition-fast);
}
.bsp-card:hover {
box-shadow: var(--shadow-md);
}
.bsp-card-header {
padding: var(--spacing-6);
border-bottom: 1px solid var(--gray-200);
background-color: var(--gray-50);
}
.bsp-card-body {
padding: var(--spacing-6);
}
.bsp-card-footer {
padding: var(--spacing-6);
border-top: 1px solid var(--gray-200);
background-color: var(--gray-50);
}
/* Form Components */
.bsp-form-group {
margin-bottom: var(--spacing-5);
}
.bsp-label {
display: block;
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
color: var(--gray-700);
margin-bottom: var(--spacing-2);
}
.bsp-label-required::after {
content: ' *';
color: var(--error);
}
.bsp-input {
display: block;
width: 100%;
padding: var(--spacing-3);
font-size: var(--font-size-base);
line-height: var(--line-height-normal);
color: var(--gray-900);
background-color: var(--white);
border: 1px solid var(--gray-300);
border-radius: var(--radius-lg);
transition:
border-color var(--transition-fast),
box-shadow var(--transition-fast);
}
.bsp-input:focus {
outline: none;
border-color: var(--primary-blue);
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}
.bsp-input:disabled {
background-color: var(--gray-100);
color: var(--gray-500);
cursor: not-allowed;
}
.bsp-input.bsp-input-error {
border-color: var(--error);
}
.bsp-input.bsp-input-error:focus {
border-color: var(--error);
box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
}
.bsp-textarea {
display: block;
width: 100%;
min-height: 120px;
padding: var(--spacing-3);
font-size: var(--font-size-base);
line-height: var(--line-height-normal);
color: var(--gray-900);
background-color: var(--white);
border: 1px solid var(--gray-300);
border-radius: var(--radius-lg);
resize: vertical;
transition:
border-color var(--transition-fast),
box-shadow var(--transition-fast);
}
.bsp-textarea:focus {
outline: none;
border-color: var(--primary-blue);
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}
.bsp-select {
display: block;
width: 100%;
padding: var(--spacing-3);
font-size: var(--font-size-base);
line-height: var(--line-height-normal);
color: var(--gray-900);
background-color: var(--white);
border: 1px solid var(--gray-300);
border-radius: var(--radius-lg);
transition: border-color var(--transition-fast);
cursor: pointer;
}
.bsp-select:focus {
outline: none;
border-color: var(--primary-blue);
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}
.bsp-form-error {
display: block;
margin-top: var(--spacing-1);
font-size: var(--font-size-sm);
color: var(--error);
}
.bsp-form-help {
display: block;
margin-top: var(--spacing-1);
font-size: var(--font-size-sm);
color: var(--gray-500);
}
/* Checkbox and Radio */
.bsp-checkbox,
.bsp-radio {
position: relative;
display: inline-flex;
align-items: center;
gap: var(--spacing-2);
cursor: pointer;
user-select: none;
}
.bsp-checkbox input,
.bsp-radio input {
position: absolute;
opacity: 0;
cursor: pointer;
}
.bsp-checkbox-indicator,
.bsp-radio-indicator {
width: 20px;
height: 20px;
border: 2px solid var(--gray-300);
background-color: var(--white);
transition: all var(--transition-fast);
}
.bsp-checkbox-indicator {
border-radius: var(--radius);
}
.bsp-radio-indicator {
border-radius: var(--radius-full);
}
.bsp-checkbox input:checked + .bsp-checkbox-indicator,
.bsp-radio input:checked + .bsp-radio-indicator {
background-color: var(--primary-blue);
border-color: var(--primary-blue);
}
.bsp-checkbox input:checked + .bsp-checkbox-indicator::after {
content: '';
position: absolute;
left: 6px;
top: 2px;
width: 6px;
height: 10px;
border: solid var(--white);
border-width: 0 2px 2px 0;
transform: rotate(45deg);
}
.bsp-radio input:checked + .bsp-radio-indicator::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 8px;
height: 8px;
border-radius: var(--radius-full);
background-color: var(--white);
transform: translate(-50%, -50%);
}
/* Table Components */
.bsp-table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
font-size: var(--font-size-sm);
}
.bsp-table th,
.bsp-table td {
padding: var(--spacing-3);
text-align: left;
border-bottom: 1px solid var(--gray-200);
}
.bsp-table th {
background-color: var(--gray-50);
font-weight: var(--font-weight-semibold);
color: var(--gray-900);
}
.bsp-table tbody tr:hover {
background-color: var(--gray-50);
}
/* Badge Components */
.bsp-badge {
display: inline-flex;
align-items: center;
padding: var(--spacing-1) var(--spacing-3);
font-size: var(--font-size-xs);
font-weight: var(--font-weight-medium);
border-radius: var(--radius-full);
text-transform: uppercase;
letter-spacing: 0.025em;
}
.bsp-badge-primary {
background-color: rgba(37, 99, 235, 0.1);
color: var(--primary-blue);
}
.bsp-badge-success {
background-color: rgba(16, 185, 129, 0.1);
color: var(--success);
}
.bsp-badge-warning {
background-color: rgba(245, 158, 11, 0.1);
color: var(--warning);
}
.bsp-badge-error {
background-color: rgba(239, 68, 68, 0.1);
color: var(--error);
}
.bsp-badge-neutral {
background-color: var(--gray-100);
color: var(--gray-600);
}
/* Alert Components */
.bsp-alert {
padding: var(--spacing-4);
border-radius: var(--radius-lg);
border: 1px solid;
margin-bottom: var(--spacing-4);
}
.bsp-alert-success {
background-color: rgba(16, 185, 129, 0.1);
border-color: var(--success);
color: #047857;
}
.bsp-alert-warning {
background-color: rgba(245, 158, 11, 0.1);
border-color: var(--warning);
color: #92400e;
}
.bsp-alert-error {
background-color: rgba(239, 68, 68, 0.1);
border-color: var(--error);
color: #991b1b;
}
.bsp-alert-info {
background-color: rgba(59, 130, 246, 0.1);
border-color: var(--info);
color: #1e40af;
}
/* Loading Spinner */
.bsp-spinner {
display: inline-block;
width: 20px;
height: 20px;
border: 2px solid var(--gray-200);
border-top: 2px solid var(--primary-blue);
border-radius: 50%;
animation: bsp-spin 1s linear infinite;
}
@keyframes bsp-spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.bsp-spinner-lg {
width: 32px;
height: 32px;
border-width: 3px;
}
/* Icon */
.bsp-icon {
display: inline-block;
width: 1.25rem;
height: 1.25rem;
stroke: currentColor;
fill: none;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
.bsp-icon-sm {
width: 1rem;
height: 1rem;
}
.bsp-icon-lg {
width: 1.5rem;
height: 1.5rem;
}
.bsp-icon-xl {
width: 2rem;
height: 2rem;
}
/* Text-based Icon Circles */
.bsp-icon-circle {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.5rem;
height: 2.5rem;
border-radius: 50%;
background-color: var(--primary-blue);
color: white;
font-weight: 600;
font-size: 1rem;
text-transform: uppercase;
}
.bsp-icon-circle-sm {
width: 1.5rem;
height: 1.5rem;
font-size: 0.75rem;
}
.bsp-icon-circle-lg {
width: 3rem;
height: 3rem;
font-size: 1.25rem;
}
.bsp-icon-circle-xl {
width: 4rem;
height: 4rem;
font-size: 1.5rem;
}
/* Empty State Icons */
.bsp-empty-icon {
display: flex;
justify-content: center;
margin-bottom: 1rem;
}
.bsp-empty-icon .bsp-icon-circle {
width: 4rem;
height: 4rem;
font-size: 1.5rem;
background-color: var(--gray-200);
color: var(--gray-600);
}
/* Team Avatar Styles */
.bsp-team-avatar {
width: 4rem;
height: 4rem;
border-radius: 50%;
background-color: var(--primary-blue);
color: white;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 1.25rem;
margin: 0 auto 1rem auto;
text-transform: uppercase;
}
/* Value Icon Styles */
.bsp-value-icon {
width: 3rem;
height: 3rem;
border-radius: 50%;
background-color: var(--success);
color: white;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 1.125rem;
margin-bottom: 1rem;
text-transform: uppercase;
}