Spaces:
Running
Running
| /* ============================================================ | |
| GLASSGRID — LAYOUT SYSTEM | |
| Structural layout only. Zero color/visual values here. | |
| All visual styling references tokens via component classes. | |
| ============================================================ */ | |
| /* ── Page Shell ── */ | |
| .app-shell { | |
| display: flex; | |
| flex-direction: column; | |
| min-height: 100vh; | |
| position: relative; | |
| overflow-x: hidden; | |
| } | |
| /* ── Content Area ── */ | |
| .content-area { | |
| flex: 1; | |
| padding-top: var(--navbar-height); | |
| padding-bottom: var(--bottombar-height); | |
| overflow-y: auto; | |
| overflow-x: hidden; | |
| } | |
| /* ── Page Container ── */ | |
| .page-container { | |
| max-width: var(--page-max-width); | |
| width: 100%; | |
| margin: 0 auto; | |
| padding: 0 var(--page-padding); | |
| } | |
| /* ── Feed Layout ── */ | |
| .feed-layout { | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--content-gap); | |
| padding: var(--space-4) 0; | |
| } | |
| /* ── Explore Grid ── */ | |
| .explore-grid { | |
| display: grid; | |
| grid-template-columns: repeat(3, 1fr); | |
| gap: 2px; | |
| } | |
| .explore-grid-item { | |
| aspect-ratio: 1; | |
| overflow: hidden; | |
| position: relative; | |
| } | |
| /* ── Story Reel ── */ | |
| .story-reel-wrapper { | |
| overflow-x: auto; | |
| overflow-y: hidden; | |
| scrollbar-width: none; | |
| -ms-overflow-style: none; | |
| padding: var(--space-4) var(--page-padding); | |
| } | |
| .story-reel-wrapper::-webkit-scrollbar { | |
| display: none; | |
| } | |
| .story-reel { | |
| display: flex; | |
| gap: var(--space-3); | |
| width: max-content; | |
| } | |
| /* ── Navbar ── */ | |
| .navbar { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: var(--navbar-height); | |
| z-index: var(--z-nav); | |
| display: flex; | |
| align-items: center; | |
| padding: 0 var(--page-padding); | |
| } | |
| .navbar-inner { | |
| max-width: var(--page-max-width); | |
| width: 100%; | |
| margin: 0 auto; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| height: 100%; | |
| } | |
| /* ── Bottom Navigation ── */ | |
| .bottombar { | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| height: var(--bottombar-height); | |
| z-index: var(--z-nav); | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-around; | |
| padding: 0 var(--space-2); | |
| padding-bottom: env(safe-area-inset-bottom); | |
| } | |
| .bottombar-item { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| gap: var(--space-1); | |
| flex: 1; | |
| padding: var(--space-2); | |
| min-height: 44px; | |
| } | |
| /* ── Post Card ── */ | |
| .post-card { | |
| display: flex; | |
| flex-direction: column; | |
| overflow: hidden; | |
| border-radius: var(--post-radius); | |
| } | |
| .post-card__header { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-3); | |
| padding: var(--space-3) var(--space-4); | |
| } | |
| .post-card__media { | |
| position: relative; | |
| width: 100%; | |
| aspect-ratio: 1; | |
| overflow: hidden; | |
| } | |
| .post-card__media--landscape { aspect-ratio: 16/9; } | |
| .post-card__media--portrait { aspect-ratio: 4/5; } | |
| .post-card__media--square { aspect-ratio: 1; } | |
| .post-card__actions { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-4); | |
| padding: var(--space-3) var(--space-4); | |
| } | |
| .post-card__caption { | |
| padding: 0 var(--space-4) var(--space-3); | |
| } | |
| .post-card__comments-preview { | |
| padding: 0 var(--space-4) var(--space-4); | |
| } | |
| /* ── Profile Header ── */ | |
| .profile-header { | |
| padding: var(--space-6) var(--page-padding); | |
| } | |
| .profile-header__identity { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-4); | |
| } | |
| .profile-header__stats { | |
| display: grid; | |
| grid-template-columns: repeat(3, 1fr); | |
| text-align: center; | |
| padding: var(--space-5) 0; | |
| } | |
| .profile-header__bio { | |
| padding: 0 0 var(--space-5); | |
| } | |
| /* ── Comment Box ── */ | |
| .comment-box { | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--space-3); | |
| } | |
| .comment-box__item { | |
| display: flex; | |
| gap: var(--space-3); | |
| } | |
| .comment-box__input-row { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-3); | |
| padding: var(--space-3) var(--page-padding); | |
| } | |
| /* ── Avatar ── */ | |
| .avatar { | |
| flex-shrink: 0; | |
| border-radius: var(--radius-full); | |
| overflow: hidden; | |
| position: relative; | |
| } | |
| .avatar--xs { width: 24px; height: 24px; } | |
| .avatar--sm { width: 32px; height: 32px; } | |
| .avatar--md { width: 40px; height: 40px; } | |
| .avatar--lg { width: 56px; height: 56px; } | |
| .avatar--xl { width: 80px; height: 80px; } | |
| .avatar--2xl { width: 96px; height: 96px; } | |
| /* ── Story Item ── */ | |
| .story-item { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: var(--space-2); | |
| cursor: pointer; | |
| } | |
| .story-item__ring { | |
| border-radius: var(--radius-full); | |
| padding: 2px; | |
| position: relative; | |
| } | |
| /* ── Action Button ── */ | |
| .action-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: var(--space-2); | |
| min-height: 44px; | |
| min-width: 44px; | |
| border-radius: var(--button-radius); | |
| padding: var(--space-2) var(--space-5); | |
| position: relative; | |
| transition: | |
| transform var(--duration-fast) var(--ease-spring), | |
| background var(--duration-fast) var(--ease-out), | |
| box-shadow var(--duration-fast) var(--ease-out); | |
| } | |
| /* ── Modal / Sheet ── */ | |
| .modal-overlay { | |
| position: fixed; | |
| inset: 0; | |
| z-index: var(--z-modal); | |
| display: flex; | |
| align-items: flex-end; | |
| } | |
| .modal-sheet { | |
| width: 100%; | |
| max-width: var(--page-max-width); | |
| margin: 0 auto; | |
| border-radius: var(--radius-2xl) var(--radius-2xl) 0 0; | |
| padding: var(--space-6) var(--page-padding); | |
| max-height: 90vh; | |
| overflow-y: auto; | |
| } | |
| /* ── Admin Panel Layout ── */ | |
| .admin-panel { | |
| min-height: 100vh; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .admin-sidebar { | |
| display: none; | |
| } | |
| .admin-content { | |
| flex: 1; | |
| padding: var(--space-4); | |
| padding-top: calc(var(--navbar-height) + var(--space-4)); | |
| } | |
| .admin-section { | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--space-4); | |
| margin-bottom: var(--space-8); | |
| } | |
| .admin-grid-2 { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: var(--space-3); | |
| } | |
| .admin-token-row { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-3); | |
| padding: var(--space-3) var(--space-4); | |
| } | |
| /* ── Toast ── */ | |
| .toast-container { | |
| position: fixed; | |
| bottom: calc(var(--bottombar-height) + var(--space-4)); | |
| left: 50%; | |
| transform: translateX(-50%); | |
| z-index: var(--z-toast); | |
| display: flex; | |
| flex-direction: column-reverse; | |
| gap: var(--space-2); | |
| align-items: center; | |
| pointer-events: none; | |
| width: calc(100% - var(--space-8)); | |
| max-width: var(--page-max-width); | |
| } | |
| .toast { | |
| padding: var(--space-3) var(--space-5); | |
| border-radius: var(--radius-full); | |
| pointer-events: auto; | |
| } | |
| /* ── Badge ── */ | |
| .badge { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: var(--space-1) var(--space-3); | |
| border-radius: var(--badge-radius); | |
| font: var(--text-micro); | |
| } | |
| /* ── Tablet+ adjustments ── */ | |
| @media (min-width: 640px) { | |
| .explore-grid { | |
| grid-template-columns: repeat(3, 1fr); | |
| gap: 3px; | |
| } | |
| .admin-sidebar { | |
| display: flex; | |
| flex-direction: column; | |
| width: 240px; | |
| min-height: 100vh; | |
| padding: var(--space-6) var(--space-4); | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| } | |
| .admin-content { | |
| margin-left: 240px; | |
| padding: var(--space-8) var(--space-6); | |
| padding-top: var(--space-8); | |
| } | |
| .admin-panel { | |
| flex-direction: row; | |
| } | |
| } | |
| @media (min-width: 768px) { | |
| .modal-overlay { | |
| align-items: center; | |
| } | |
| .modal-sheet { | |
| border-radius: var(--radius-2xl); | |
| max-height: 80vh; | |
| } | |
| } | |