infinite-agents-public/src_group/ui_hybrid_2/styles.css

446 lines
9.0 KiB
CSS

/* Digital Minimalism Theme - Input Intelligence Styles */
:root {
/* Monochromatic palette */
--color-primary: #000000;
--color-secondary: #666666;
--color-tertiary: #999999;
--color-background: #ffffff;
--color-surface: #f8f8f8;
--color-border: #e5e5e5;
--color-error: #000000;
--color-success: #000000;
--color-warning: #666666;
/* Spacing system */
--space-xs: 0.5rem;
--space-sm: 1rem;
--space-md: 1.5rem;
--space-lg: 2rem;
--space-xl: 3rem;
--space-xxl: 4rem;
/* Typography */
--font-primary: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
--font-mono: 'SF Mono', Monaco, Consolas, monospace;
--font-size-sm: 0.875rem;
--font-size-base: 1rem;
--font-size-lg: 1.25rem;
--font-size-xl: 2rem;
/* Animation */
--transition-base: 0.2s ease;
--transition-slow: 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: var(--font-primary);
font-size: var(--font-size-base);
line-height: 1.6;
color: var(--color-primary);
background-color: var(--color-background);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.container {
width: 100%;
max-width: 480px;
padding: var(--space-lg);
}
/* Header */
.header {
text-align: center;
margin-bottom: var(--space-xxl);
}
.title {
font-size: var(--font-size-xl);
font-weight: 300;
letter-spacing: -0.02em;
margin-bottom: var(--space-xs);
}
.subtitle {
font-size: var(--font-size-sm);
color: var(--color-secondary);
font-weight: 400;
}
/* Form Layout */
.intelligent-form {
display: flex;
flex-direction: column;
gap: var(--space-xl);
}
/* Input Groups */
.input-group {
position: relative;
}
.input-label {
display: block;
font-size: var(--font-size-sm);
font-weight: 500;
margin-bottom: var(--space-xs);
color: var(--color-primary);
transition: color var(--transition-base);
}
.input-wrapper {
position: relative;
display: flex;
align-items: center;
}
/* Intelligent Input */
.intelligent-input {
width: 100%;
padding: var(--space-sm) 0;
font-size: var(--font-size-base);
font-family: inherit;
border: none;
border-bottom: 1px solid var(--color-border);
background: transparent;
color: var(--color-primary);
transition: border-color var(--transition-base);
outline: none;
}
.intelligent-input::placeholder {
color: var(--color-tertiary);
}
.intelligent-input:focus {
border-bottom-color: var(--color-primary);
}
.intelligent-input.valid {
border-bottom-color: var(--color-primary);
}
.intelligent-input.invalid {
border-bottom-color: var(--color-primary);
}
/* Input Progress */
.input-progress {
position: absolute;
bottom: 0;
left: 0;
height: 1px;
background-color: var(--color-primary);
transition: width var(--transition-slow);
width: 0;
}
.input-group.active .input-progress {
width: 100%;
}
/* Input Indicator */
.input-indicator {
position: absolute;
right: 0;
width: 8px;
height: 8px;
border-radius: 50%;
background-color: var(--color-border);
transition: all var(--transition-base);
opacity: 0;
}
.input-group.valid .input-indicator {
background-color: var(--color-primary);
opacity: 1;
}
.input-group.invalid .input-indicator {
background-color: var(--color-primary);
opacity: 1;
animation: pulse 1s infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.2); opacity: 0.5; }
}
/* Hints and Errors */
.input-hint {
font-size: var(--font-size-sm);
color: var(--color-tertiary);
margin-top: var(--space-xs);
transition: opacity var(--transition-base);
}
.input-error {
font-size: var(--font-size-sm);
color: var(--color-error);
margin-top: var(--space-xs);
opacity: 0;
transform: translateY(-4px);
transition: all var(--transition-base);
position: absolute;
}
.input-error.visible {
opacity: 1;
transform: translateY(0);
position: static;
}
/* Suggestions */
.suggestions-list {
position: absolute;
top: calc(100% + var(--space-xs));
left: 0;
right: 0;
background: var(--color-background);
border: 1px solid var(--color-border);
border-radius: 4px;
list-style: none;
opacity: 0;
visibility: hidden;
transform: translateY(-8px);
transition: all var(--transition-base);
z-index: 10;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
}
.suggestions-list.visible {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.suggestion-item {
padding: var(--space-sm);
cursor: pointer;
transition: background-color var(--transition-base);
font-size: var(--font-size-sm);
}
.suggestion-item:hover,
.suggestion-item.selected {
background-color: var(--color-surface);
}
/* Card Type Indicator */
.card-type {
position: absolute;
right: 0;
font-size: var(--font-size-sm);
font-family: var(--font-mono);
color: var(--color-secondary);
opacity: 0;
transition: opacity var(--transition-base);
}
.card-type.visible {
opacity: 1;
}
/* Password Toggle */
.password-toggle {
position: absolute;
right: 0;
background: none;
border: none;
cursor: pointer;
padding: var(--space-xs);
color: var(--color-secondary);
transition: color var(--transition-base);
}
.password-toggle:hover {
color: var(--color-primary);
}
.password-toggle-icon::before {
content: '👁';
font-size: var(--font-size-lg);
filter: grayscale(1);
}
.password-toggle.visible .password-toggle-icon::before {
content: '👁‍🗨';
}
/* Password Strength */
.password-strength {
margin-top: var(--space-sm);
display: flex;
align-items: center;
gap: var(--space-sm);
opacity: 0;
transition: opacity var(--transition-base);
}
.password-strength.visible {
opacity: 1;
}
.strength-meter {
flex: 1;
height: 2px;
background-color: var(--color-border);
border-radius: 1px;
overflow: hidden;
}
.strength-fill {
height: 100%;
background-color: var(--color-primary);
transition: width var(--transition-slow);
width: 0;
}
.strength-text {
font-size: var(--font-size-sm);
color: var(--color-secondary);
min-width: 80px;
text-align: right;
}
/* Form Progress */
.form-progress {
margin-top: var(--space-lg);
padding-top: var(--space-lg);
border-top: 1px solid var(--color-border);
}
.progress-bar {
height: 2px;
background-color: var(--color-surface);
border-radius: 1px;
overflow: hidden;
margin-bottom: var(--space-sm);
}
.progress-fill {
height: 100%;
background-color: var(--color-primary);
transition: width var(--transition-slow);
}
.progress-text {
font-size: var(--font-size-sm);
color: var(--color-secondary);
text-align: center;
}
/* Submit Button */
.submit-button {
margin-top: var(--space-lg);
padding: var(--space-md) var(--space-lg);
font-size: var(--font-size-base);
font-weight: 500;
font-family: inherit;
background-color: var(--color-primary);
color: var(--color-background);
border: none;
border-radius: 2px;
cursor: pointer;
transition: all var(--transition-base);
position: relative;
overflow: hidden;
}
.submit-button:disabled {
background-color: var(--color-surface);
color: var(--color-tertiary);
cursor: not-allowed;
}
.submit-button:not(:disabled):hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.submit-button:not(:disabled):active {
transform: translateY(0);
box-shadow: none;
}
.button-loader {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 20px;
height: 20px;
border: 2px solid var(--color-background);
border-top-color: transparent;
border-radius: 50%;
animation: spin 0.8s linear infinite;
opacity: 0;
}
.submit-button.loading .button-text {
opacity: 0;
}
.submit-button.loading .button-loader {
opacity: 1;
}
@keyframes spin {
to { transform: translate(-50%, -50%) rotate(360deg); }
}
/* Footer Stats */
.footer {
margin-top: var(--space-xxl);
padding-top: var(--space-lg);
border-top: 1px solid var(--color-border);
}
.stats {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-lg);
text-align: center;
}
.stat-item {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.stat-value {
font-size: var(--font-size-lg);
font-weight: 300;
font-variant-numeric: tabular-nums;
}
.stat-label {
font-size: var(--font-size-sm);
color: var(--color-secondary);
}
/* Responsive */
@media (max-width: 640px) {
.container {
padding: var(--space-md);
}
.title {
font-size: 1.5rem;
}
.intelligent-form {
gap: var(--space-lg);
}
}