Files
roi-theme/assets/css/css-global-responsive.css
FrankZamora de5fff4f5c Fase 1: Estructura Base y DI Container - Clean Architecture
COMPLETADO: Fase 1 de la migración a Clean Architecture + POO

## Estructura de Carpetas
- ✓ Estructura completa de 4 capas (Domain, Application, Infrastructure, Presentation)
- ✓ Carpetas de Use Cases (SaveComponent, GetComponent, DeleteComponent, SyncSchema)
- ✓ Estructura de tests (Unit, Integration, E2E)
- ✓ Carpetas de schemas y templates

## Composer y Autoloading
- ✓ PSR-4 autoloading configurado para ROITheme namespace
- ✓ Autoloader optimizado regenerado

## DI Container
- ✓ DIContainer implementado con patrón Singleton
- ✓ Métodos set(), get(), has() para gestión de servicios
- ✓ Getters específicos para ComponentRepository, ValidationService, CacheService
- ✓ Placeholders que serán implementados en Fase 5
- ✓ Prevención de clonación y deserialización

## Interfaces
- ✓ ComponentRepositoryInterface (Domain)
- ✓ ValidationServiceInterface (Application)
- ✓ CacheServiceInterface (Application)
- ✓ Component entity placeholder (Domain)

## Bootstrap
- ✓ functions.php actualizado con carga de Composer autoloader
- ✓ Inicialización del DIContainer
- ✓ Helper function roi_container() disponible globalmente

## Tests
- ✓ 10 tests unitarios para DIContainer (100% cobertura)
- ✓ Total: 13 tests unitarios, 28 assertions
- ✓ Suite de tests pasando correctamente

## Validación
- ✓ Script de validación automatizado (48/48 checks pasados)
- ✓ 100% de validaciones exitosas

La arquitectura base está lista para la Fase 2.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 13:48:24 -06:00

354 lines
5.4 KiB
CSS

/**
* Responsive Design Styles
*
* Media queries and responsive adjustments
* @package ROI_Theme
* @since 1.0.0
*/
/* Extra small devices (phones, less than 576px) */
@media (max-width: 575.98px) {
:root {
--bs-gutter-x: 1rem;
}
body {
font-size: 14px;
}
h1 {
font-size: 24px;
}
h2 {
font-size: 20px;
}
h3 {
font-size: 18px;
}
.container-fluid {
padding: 0 10px;
}
/* Navigation adjustments */
.navbar {
padding: 0.5rem 0;
}
.navbar-brand {
font-size: 18px;
}
/* Content area */
main {
padding: 0.5rem;
}
/* Sidebar */
.sidebar {
margin-top: 2rem;
}
/* Tables become scrollable */
table {
font-size: 12px;
margin-bottom: 1rem;
overflow-x: auto;
}
.table-responsive {
margin-bottom: 1rem;
}
/* Buttons */
.btn {
padding: 0.375rem 0.75rem;
font-size: 14px;
}
.btn-lg {
padding: 0.5rem 1rem;
font-size: 16px;
}
/* Cards */
.card {
margin-bottom: 1rem;
}
/* Forms */
.form-group {
margin-bottom: 1rem;
}
.form-control {
padding: 0.375rem 0.75rem;
font-size: 16px;
}
/* Modals */
.modal-dialog {
margin: 0.5rem;
}
.modal-content {
border-radius: 4px;
}
/* Images */
img {
max-width: 100%;
height: auto;
}
/* Lists */
ul,
ol {
padding-left: 1.5rem;
}
/* Spacing utilities */
.mt-1,
.my-1 {
margin-top: 0.25rem !important;
}
.mb-1,
.my-1 {
margin-bottom: 0.25rem !important;
}
.p-1 {
padding: 0.25rem !important;
}
}
/* Small devices (landscape phones, 576px and up) */
@media (min-width: 576px) {
body {
font-size: 14px;
}
h1 {
font-size: 28px;
}
h2 {
font-size: 22px;
}
h3 {
font-size: 18px;
}
}
/* Medium devices (tablets, 768px and up) */
@media (min-width: 768px) {
body {
font-size: 15px;
}
h1 {
font-size: 32px;
}
h2 {
font-size: 26px;
}
h3 {
font-size: 20px;
}
/* Two column layout for medium screens */
.row-md-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.5rem;
}
/* Navigation */
.navbar {
padding: 1rem 0;
}
/* Sidebar */
.main-content {
display: grid;
grid-template-columns: 1fr 300px;
gap: 2rem;
}
.main-content.no-sidebar {
grid-template-columns: 1fr;
}
}
/* Large devices (desktops, 992px and up) */
@media (min-width: 992px) {
body {
font-size: 16px;
}
h1 {
font-size: 36px;
}
h2 {
font-size: 28px;
}
h3 {
font-size: 22px;
}
/* Three column layout for large screens */
.row-lg-3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
}
/* Main content with sidebars */
.main-content {
display: grid;
grid-template-columns: 1fr 300px;
gap: 2rem;
}
.main-content.with-left-sidebar {
grid-template-columns: 250px 1fr 300px;
}
.content-wrapper {
max-width: 1200px;
margin: 0 auto;
}
}
/* Extra large devices (large desktops, 1200px and up) */
@media (min-width: 1200px) {
body {
font-size: 16px;
}
h1 {
font-size: 40px;
}
h2 {
font-size: 32px;
}
h3 {
font-size: 24px;
}
.container {
max-width: 1140px;
}
.container-lg {
max-width: 1280px;
}
.container-xl {
max-width: 1400px;
}
}
/* XXL devices (1400px and up) */
@media (min-width: 1400px) {
.container {
max-width: 1320px;
}
.container-xl {
max-width: 1500px;
}
.container-xxl {
max-width: 1700px;
}
}
/* Landscape orientation adjustments */
@media (orientation: landscape) and (max-height: 500px) {
header {
padding: 0.5rem 0;
}
main {
padding: 0.5rem 0;
}
.btn {
padding: 0.25rem 0.5rem;
font-size: 12px;
}
}
/* High DPI displays */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
}
/* Touch devices */
@media (hover: none) and (pointer: coarse) {
button,
.btn,
a {
min-height: 44px;
min-width: 44px;
}
input[type="checkbox"],
input[type="radio"] {
width: 20px;
height: 20px;
}
}
/* Reduced motion preferences */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/* Dark mode support */
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
}
body {
background-color: #1a1a1a;
color: #e0e0e0;
}
a {
color: #64b5f6;
}
a:visited {
color: #ba68c8;
}
code,
pre {
background-color: #2d2d2d;
color: #e0e0e0;
}
}