/* ============================================================ 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; } }