Files
project-friction-design/components.css
2026-04-30 19:44:31 -04:00

536 lines
12 KiB
CSS

/* Project Friction - Components CSS */
/* Reusable UI components for the museum exhibit */
/* Navigation Cards */
.nav-card {
background: var(--color-white);
border: 2px solid #e9ecef;
border-radius: var(--radius-lg);
padding: var(--spacing-xl);
margin-bottom: var(--spacing-lg);
cursor: pointer;
transition: all var(--transition-normal);
position: relative;
overflow: hidden;
}
.nav-card::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 5px;
background: var(--theme-color);
transition: width var(--transition-normal);
}
.nav-card:hover {
transform: translateX(5px);
box-shadow: var(--shadow-lg);
border-color: var(--theme-color);
}
.nav-card:hover::before {
width: 8px;
}
.nav-card[data-section="context"] { --theme-color: var(--color-context); }
.nav-card[data-section="rcaf"] { --theme-color: var(--color-rcaf); }
.nav-card[data-section="rcn"] { --theme-color: var(--color-rcn); }
.nav-card[data-section="army"] { --theme-color: var(--color-army); }
.nav-card[data-section="legacy"] { --theme-color: var(--color-legacy); }
.nav-card-header {
display: flex;
align-items: center;
gap: var(--spacing-lg);
margin-bottom: var(--spacing-md);
}
.nav-card-icon {
font-size: 28px;
}
.nav-card-title {
flex: 1;
}
.nav-card-title h3 {
font-size: 16px;
margin-bottom: var(--spacing-xs);
color: var(--color-black);
font-family: var(--font-primary);
}
.nav-card-title span {
font-size: 12px;
color: var(--color-dark-gray);
font-family: var(--font-secondary);
}
.nav-card-preview {
font-size: 13px;
line-height: 1.6;
color: var(--color-dark-gray);
margin-bottom: var(--spacing-md);
font-family: var(--font-secondary);
}
.nav-card-links {
display: flex;
gap: var(--spacing-lg);
font-size: 12px;
color: var(--color-rcaf);
font-family: var(--font-secondary);
}
.nav-card-link {
display: flex;
align-items: center;
gap: var(--spacing-xs);
}
/* Interactive Map Buttons */
.map-button {
display: inline-flex;
align-items: center;
gap: var(--spacing-sm);
padding: var(--spacing-md) var(--spacing-lg);
background: linear-gradient(135deg, var(--color-rcaf) 0%, #2980b9 100%);
color: var(--color-white);
border: none;
border-radius: 25px;
font-size: 14px;
cursor: pointer;
transition: all var(--transition-normal);
margin: var(--spacing-md) var(--spacing-md) var(--spacing-md) 0;
box-shadow: 0 2px 5px rgba(52, 152, 219, 0.3);
font-family: var(--font-secondary);
}
.map-button:hover {
transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(52, 152, 219, 0.4);
}
.map-button.active {
background: linear-gradient(135deg, var(--color-accent) 0%, #c0392b 100%);
box-shadow: 0 2px 5px rgba(192, 57, 43, 0.3);
}
.map-button-icon {
font-size: 16px;
}
/* Fact Boxes */
.fact-box {
background: linear-gradient(to right, #fef5e7, #fdf2e9);
border-left: 5px solid #f39c12;
padding: var(--spacing-xl);
margin: var(--spacing-xl) 0;
border-radius: var(--radius-sm);
box-shadow: var(--shadow-sm);
}
.fact-box h3 {
font-size: 16px;
color: #d68910;
margin-bottom: var(--spacing-md);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1px;
font-family: var(--font-secondary);
}
.fact-box ul {
list-style: none;
}
.fact-box li {
padding: 6px 0;
color: #7f6000;
font-size: 14px;
display: flex;
align-items: flex-start;
font-family: var(--font-secondary);
}
.fact-box li::before {
content: "▸";
margin-right: var(--spacing-md);
color: #f39c12;
font-weight: bold;
}
/* Quote Blocks */
.quote-block {
background: var(--color-light-gray);
border-left: 4px solid var(--color-secondary);
padding: var(--spacing-xl);
margin: var(--spacing-xxl) 0;
font-style: italic;
position: relative;
border-radius: var(--radius-sm);
}
.quote-block::before {
content: """;
font-size: 60px;
color: #cbd5e0;
position: absolute;
top: -10px;
left: 10px;
font-family: var(--font-primary);
}
.quote-text {
font-size: 17px;
line-height: 1.6;
color: var(--color-secondary);
margin-bottom: var(--spacing-md);
padding-left: 30px;
font-family: var(--font-primary);
}
.quote-attribution {
text-align: right;
font-size: 14px;
color: var(--color-dark-gray);
font-style: normal;
font-family: var(--font-secondary);
}
/* Timeline Cards */
.timeline-card {
background: var(--color-white);
border: 1px solid var(--color-gray);
border-radius: var(--radius-md);
padding: var(--spacing-xl);
margin: var(--spacing-xl) 0;
position: relative;
transition: all var(--transition-normal);
}
.timeline-card:hover {
box-shadow: var(--shadow-lg);
transform: translateX(5px);
}
.timeline-date {
position: absolute;
left: -15px;
top: var(--spacing-xl);
background: var(--color-accent);
color: var(--color-white);
padding: var(--spacing-sm) var(--spacing-md);
border-radius: var(--radius-sm);
font-size: 12px;
font-weight: bold;
font-family: var(--font-secondary);
}
.timeline-content {
margin-left: var(--spacing-xl);
}
.timeline-content h4 {
font-size: 18px;
color: var(--color-primary);
margin-bottom: var(--spacing-md);
font-family: var(--font-primary);
}
.timeline-content p {
font-size: 14px;
line-height: 1.6;
color: var(--color-dark-gray);
font-family: var(--font-secondary);
}
/* Media Gallery */
.media-section {
margin: var(--spacing-xxl) 0;
padding: var(--spacing-xl);
background: var(--color-light-gray);
border-radius: var(--radius-md);
}
.media-header {
display: flex;
align-items: center;
gap: var(--spacing-md);
margin-bottom: var(--spacing-lg);
}
.media-header h3 {
font-size: 18px;
color: var(--color-primary);
font-family: var(--font-primary);
}
.media-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: var(--spacing-lg);
}
.media-item {
position: relative;
aspect-ratio: 4/3;
background: #ddd;
border-radius: var(--radius-sm);
overflow: hidden;
cursor: pointer;
transition: transform var(--transition-normal);
}
.media-item:hover {
transform: scale(1.05);
box-shadow: var(--shadow-lg);
}
.media-caption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);
color: var(--color-white);
padding: var(--spacing-md);
font-size: 12px;
font-family: var(--font-secondary);
}
/* Document Section */
.document-section {
background: var(--color-white);
border: 2px solid #ecf0f1;
border-radius: var(--radius-md);
padding: var(--spacing-xl);
margin: var(--spacing-xl) 0;
}
.document-header {
display: flex;
align-items: center;
gap: var(--spacing-md);
margin-bottom: var(--spacing-lg);
padding-bottom: var(--spacing-md);
border-bottom: 2px solid #ecf0f1;
}
.document-header h3 {
font-size: 16px;
color: var(--color-primary);
font-family: var(--font-primary);
}
.document-list {
list-style: none;
}
.document-list li {
padding: var(--spacing-md) 0;
border-bottom: 1px solid #f5f5f5;
}
.document-link {
display: flex;
align-items: center;
gap: var(--spacing-md);
color: var(--color-rcaf);
text-decoration: none;
transition: all var(--transition-fast);
font-family: var(--font-secondary);
font-size: 14px;
}
.document-link:hover {
color: #2980b9;
padding-left: var(--spacing-md);
}
/* Article Index */
.article-index {
padding: var(--spacing-xl);
background: var(--color-white);
border-radius: var(--radius-md);
border: 1px solid var(--color-gray);
margin: var(--spacing-xl) 0;
}
.article-index h3 {
font-size: 16px;
margin-bottom: var(--spacing-lg);
padding-bottom: var(--spacing-md);
border-bottom: 2px solid var(--color-rcaf);
color: var(--color-primary);
font-family: var(--font-primary);
}
.article-list {
list-style: none;
}
.article-list li {
padding: var(--spacing-sm) 0;
border-bottom: 1px solid #f1f3f5;
}
.article-list a {
color: var(--color-rcaf);
text-decoration: none;
font-size: 14px;
display: flex;
align-items: center;
gap: var(--spacing-sm);
transition: all var(--transition-fast);
font-family: var(--font-secondary);
}
.article-list a:hover {
padding-left: var(--spacing-md);
color: #0056b3;
}
/* Info Box */
.info-box {
background: linear-gradient(to right, var(--color-light-gray), var(--color-white));
border-left: 4px solid var(--color-rcaf);
padding: var(--spacing-lg);
margin: var(--spacing-xl) 0;
border-radius: var(--radius-sm);
}
.info-box h4 {
font-size: 14px;
margin-bottom: var(--spacing-md);
color: var(--color-black);
font-family: var(--font-secondary);
font-weight: 600;
}
.info-box ul {
list-style: none;
}
.info-box li {
font-size: 13px;
padding: 4px 0;
color: #495057;
font-family: var(--font-secondary);
}
/* Story Map Banner */
.story-map-banner {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: var(--color-white);
padding: var(--spacing-xl);
border-radius: var(--radius-lg);
margin: var(--spacing-xl) 0;
cursor: pointer;
transition: transform var(--transition-normal);
}
.story-map-banner:hover {
transform: scale(1.02);
box-shadow: 0 5px 20px rgba(102, 126, 234, 0.4);
}
.story-map-banner h4 {
font-size: 18px;
margin-bottom: var(--spacing-sm);
display: flex;
align-items: center;
gap: var(--spacing-md);
font-family: var(--font-primary);
}
.story-map-banner p {
font-size: 14px;
opacity: 0.9;
line-height: 1.6;
font-family: var(--font-secondary);
}
/* Section Headers */
.chapter-header {
margin: var(--spacing-xxl) 0 var(--spacing-xl) 0;
padding-bottom: var(--spacing-md);
border-bottom: 2px solid var(--color-context);
}
.chapter-header h2 {
font-size: 24px;
color: var(--color-primary);
font-family: var(--font-primary);
font-weight: normal;
}
.chapter-date {
font-size: 14px;
color: var(--color-dark-gray);
margin-top: var(--spacing-sm);
font-style: italic;
font-family: var(--font-secondary);
}
/* Buttons */
.btn {
padding: var(--spacing-md) var(--spacing-lg);
border: none;
border-radius: var(--radius-sm);
cursor: pointer;
font-size: 14px;
font-family: var(--font-secondary);
transition: all var(--transition-fast);
display: inline-flex;
align-items: center;
gap: var(--spacing-sm);
}
.btn-primary {
background: var(--color-rcaf);
color: var(--color-white);
}
.btn-primary:hover {
background: #2980b9;
transform: translateY(-2px);
}
.btn-secondary {
background: var(--color-gray);
color: var(--color-black);
}
.btn-secondary:hover {
background: #adb5bd;
}
/* Close button */
.close-btn,
.close-info {
position: absolute;
top: var(--spacing-md);
right: var(--spacing-md);
width: 30px;
height: 30px;
border: none;
background: rgba(0,0,0,0.1);
border-radius: var(--radius-full);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
color: var(--color-dark-gray);
transition: all var(--transition-fast);
}
.close-btn:hover,
.close-info:hover {
background: rgba(0,0,0,0.2);
color: var(--color-black);
}