/* static/css/shared/responsive-utilities.css */ /* Responsive utility classes - Framework-like responsiveness without the framework */ /* ================================ BREAKPOINTS (Mobile-first) ================================ */ :root { --breakpoint-sm: 640px; --breakpoint-md: 768px; --breakpoint-lg: 1024px; --breakpoint-xl: 1280px; --breakpoint-2xl: 1536px; } /* ================================ CONTAINER ================================ */ .container { width: 100%; margin-left: auto; margin-right: auto; padding-left: var(--spacing-md); padding-right: var(--spacing-md); } @media (min-width: 640px) { .container { max-width: 640px; } } @media (min-width: 768px) { .container { max-width: 768px; } } @media (min-width: 1024px) { .container { max-width: 1024px; } } @media (min-width: 1280px) { .container { max-width: 1280px; } } /* ================================ DISPLAY UTILITIES ================================ */ .hidden { display: none !important; } .block { display: block !important; } .inline-block { display: inline-block !important; } .inline { display: inline !important; } .flex { display: flex !important; } .inline-flex { display: inline-flex !important; } .grid { display: grid !important; } /* Responsive Display */ @media (max-width: 639px) { .sm\:hidden { display: none !important; } .sm\:block { display: block !important; } .sm\:flex { display: flex !important; } .sm\:grid { display: grid !important; } } @media (min-width: 640px) and (max-width: 767px) { .md\:hidden { display: none !important; } .md\:block { display: block !important; } .md\:flex { display: flex !important; } .md\:grid { display: grid !important; } } @media (min-width: 768px) and (max-width: 1023px) { .lg\:hidden { display: none !important; } .lg\:block { display: block !important; } .lg\:flex { display: flex !important; } .lg\:grid { display: grid !important; } } @media (min-width: 1024px) { .xl\:hidden { display: none !important; } .xl\:block { display: block !important; } .xl\:flex { display: flex !important; } .xl\:grid { display: grid !important; } } /* ================================ FLEXBOX UTILITIES ================================ */ .flex-row { flex-direction: row; } .flex-col { flex-direction: column; } .flex-row-reverse { flex-direction: row-reverse; } .flex-col-reverse { flex-direction: column-reverse; } .flex-wrap { flex-wrap: wrap; } .flex-nowrap { flex-wrap: nowrap; } .items-start { align-items: flex-start; } .items-center { align-items: center; } .items-end { align-items: flex-end; } .items-stretch { align-items: stretch; } .justify-start { justify-content: flex-start; } .justify-center { justify-content: center; } .justify-end { justify-content: flex-end; } .justify-between { justify-content: space-between; } .justify-around { justify-content: space-around; } .justify-evenly { justify-content: space-evenly; } .flex-1 { flex: 1 1 0%; } .flex-auto { flex: 1 1 auto; } .flex-none { flex: none; } .gap-0 { gap: 0; } .gap-1 { gap: var(--spacing-xs); } .gap-2 { gap: var(--spacing-sm); } .gap-3 { gap: var(--spacing-md); } .gap-4 { gap: var(--spacing-lg); } .gap-5 { gap: var(--spacing-xl); } .gap-6 { gap: var(--spacing-2xl); } /* ================================ GRID UTILITIES ================================ */ .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } .grid-cols-12 { grid-template-columns: repeat(12, minmax(0, 1fr)); } /* Responsive Grid */ @media (min-width: 640px) { .sm\:grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sm\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } } @media (min-width: 768px) { .md\:grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } } @media (min-width: 1024px) { .lg\:grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .lg\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .lg\:grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } } /* ================================ SPACING UTILITIES ================================ */ /* Margin */ .m-0 { margin: 0; } .m-1 { margin: var(--spacing-xs); } .m-2 { margin: var(--spacing-sm); } .m-3 { margin: var(--spacing-md); } .m-4 { margin: var(--spacing-lg); } .m-5 { margin: var(--spacing-xl); } .m-auto { margin: auto; } .mx-auto { margin-left: auto; margin-right: auto; } .my-auto { margin-top: auto; margin-bottom: auto; } .mt-0 { margin-top: 0; } .mt-1 { margin-top: var(--spacing-xs); } .mt-2 { margin-top: var(--spacing-sm); } .mt-3 { margin-top: var(--spacing-md); } .mt-4 { margin-top: var(--spacing-lg); } .mt-5 { margin-top: var(--spacing-xl); } .mb-0 { margin-bottom: 0; } .mb-1 { margin-bottom: var(--spacing-xs); } .mb-2 { margin-bottom: var(--spacing-sm); } .mb-3 { margin-bottom: var(--spacing-md); } .mb-4 { margin-bottom: var(--spacing-lg); } .mb-5 { margin-bottom: var(--spacing-xl); } .ml-0 { margin-left: 0; } .ml-1 { margin-left: var(--spacing-xs); } .ml-2 { margin-left: var(--spacing-sm); } .ml-3 { margin-left: var(--spacing-md); } .ml-4 { margin-left: var(--spacing-lg); } .ml-auto { margin-left: auto; } .mr-0 { margin-right: 0; } .mr-1 { margin-right: var(--spacing-xs); } .mr-2 { margin-right: var(--spacing-sm); } .mr-3 { margin-right: var(--spacing-md); } .mr-4 { margin-right: var(--spacing-lg); } .mr-auto { margin-right: auto; } /* Padding */ .p-0 { padding: 0; } .p-1 { padding: var(--spacing-xs); } .p-2 { padding: var(--spacing-sm); } .p-3 { padding: var(--spacing-md); } .p-4 { padding: var(--spacing-lg); } .p-5 { padding: var(--spacing-xl); } .px-0 { padding-left: 0; padding-right: 0; } .px-1 { padding-left: var(--spacing-xs); padding-right: var(--spacing-xs); } .px-2 { padding-left: var(--spacing-sm); padding-right: var(--spacing-sm); } .px-3 { padding-left: var(--spacing-md); padding-right: var(--spacing-md); } .px-4 { padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); } .py-0 { padding-top: 0; padding-bottom: 0; } .py-1 { padding-top: var(--spacing-xs); padding-bottom: var(--spacing-xs); } .py-2 { padding-top: var(--spacing-sm); padding-bottom: var(--spacing-sm); } .py-3 { padding-top: var(--spacing-md); padding-bottom: var(--spacing-md); } .py-4 { padding-top: var(--spacing-lg); padding-bottom: var(--spacing-lg); } /* ================================ WIDTH & HEIGHT UTILITIES ================================ */ .w-full { width: 100%; } .w-auto { width: auto; } .w-1\/2 { width: 50%; } .w-1\/3 { width: 33.333333%; } .w-2\/3 { width: 66.666667%; } .w-1\/4 { width: 25%; } .w-3\/4 { width: 75%; } .h-full { height: 100%; } .h-auto { height: auto; } .h-screen { height: 100vh; } .min-h-screen { min-height: 100vh; } .max-w-full { max-width: 100%; } /* ================================ TEXT UTILITIES ================================ */ .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } .text-xs { font-size: var(--font-xs); } .text-sm { font-size: var(--font-sm); } .text-base { font-size: var(--font-base); } .text-lg { font-size: var(--font-lg); } .text-xl { font-size: var(--font-xl); } .text-2xl { font-size: var(--font-2xl); } .text-3xl { font-size: var(--font-3xl); } .font-normal { font-weight: 400; } .font-medium { font-weight: 500; } .font-semibold { font-weight: 600; } .font-bold { font-weight: 700; } .uppercase { text-transform: uppercase; } .lowercase { text-transform: lowercase; } .capitalize { text-transform: capitalize; } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* ================================ POSITION UTILITIES ================================ */ .relative { position: relative; } .absolute { position: absolute; } .fixed { position: fixed; } .sticky { position: sticky; } .top-0 { top: 0; } .right-0 { right: 0; } .bottom-0 { bottom: 0; } .left-0 { left: 0; } .z-0 { z-index: 0; } .z-10 { z-index: 10; } .z-20 { z-index: 20; } .z-30 { z-index: 30; } .z-40 { z-index: 40; } .z-50 { z-index: 50; } /* ================================ OVERFLOW UTILITIES ================================ */ .overflow-auto { overflow: auto; } .overflow-hidden { overflow: hidden; } .overflow-visible { overflow: visible; } .overflow-scroll { overflow: scroll; } .overflow-x-auto { overflow-x: auto; } .overflow-y-auto { overflow-y: auto; } /* ================================ BORDER UTILITIES ================================ */ .rounded-none { border-radius: 0; } .rounded-sm { border-radius: var(--radius-sm); } .rounded { border-radius: var(--radius-md); } .rounded-lg { border-radius: var(--radius-lg); } .rounded-xl { border-radius: var(--radius-xl); } .rounded-full { border-radius: var(--radius-full); } .border { border: 1px solid var(--border-color); } .border-0 { border: 0; } .border-2 { border: 2px solid var(--border-color); } /* ================================ SHADOW UTILITIES ================================ */ .shadow-none { box-shadow: none; } .shadow-sm { box-shadow: var(--shadow-sm); } .shadow { box-shadow: var(--shadow-md); } .shadow-lg { box-shadow: var(--shadow-lg); } .shadow-xl { box-shadow: var(--shadow-xl); } /* ================================ RESPONSIVE HELPERS ================================ */ /* Hide on mobile, show on desktop */ .mobile-hidden { display: none; } @media (min-width: 768px) { .mobile-hidden { display: block; } } /* Show on mobile, hide on desktop */ .desktop-hidden { display: block; } @media (min-width: 768px) { .desktop-hidden { display: none; } } /* Tablet specific */ @media (min-width: 640px) and (max-width: 1023px) { .tablet-only { display: block; } } /* ================================ CURSOR & POINTER EVENTS ================================ */ .cursor-pointer { cursor: pointer; } .cursor-default { cursor: default; } .cursor-not-allowed { cursor: not-allowed; } .pointer-events-none { pointer-events: none; } /* ================================ OPACITY UTILITIES ================================ */ .opacity-0 { opacity: 0; } .opacity-25 { opacity: 0.25; } .opacity-50 { opacity: 0.5; } .opacity-75 { opacity: 0.75; } .opacity-100 { opacity: 1; } /* ================================ TRANSITION UTILITIES ================================ */ .transition { transition: all var(--transition-base); } .transition-fast { transition: all var(--transition-fast); } .transition-slow { transition: all var(--transition-slow); } .transition-none { transition: none; }