{"_id":"@cristiancuray/mz-css","_rev":"5-3fe0dbc270396e5286584e0d8cff528f","name":"@cristiancuray/mz-css","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.3":{"name":"@cristiancuray/mz-css","version":"1.0.3","keywords":["css","sass","scss","grid","responsive","materialize","material-design","flexbox","4k","5k","framework"],"author":{"name":"Cristian Curay","email":"cristian@cristiancuray.net"},"license":"MIT","_id":"@cristiancuray/mz-css@1.0.3","maintainers":[{"name":"cristiancuray","email":"cristiancuray@gmail.com"}],"homepage":"https://github.com/cristiancuray/materialize-grid-css#readme","bugs":{"url":"https://github.com/cristiancuray/materialize-grid-css/issues"},"bin":{"mz-css":"bin/cli.js"},"dist":{"shasum":"2fb5bb610e889de9ab77e892e48f5608d2d178cd","tarball":"https://registry.npmjs.org/@cristiancuray/mz-css/-/mz-css-1.0.3.tgz","fileCount":50,"integrity":"sha512-uDds7wgYy1W7DlapkiAZ0drSGUYkB+3GH6/acxSPqQvB0JM+siQxDN9iha+24BXE7q2/tje3DCAxc0wjJr1IFQ==","signatures":[{"sig":"MEUCIQDHUB7PVWl+rEi/uCJ/X/ej33if1ze4VR0nH1R9yWwO5gIgMXrfMsCsru52ovjVh50wX9TUxiZa+IHHUzJtWjr6aeg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":922272},"main":"css/main.css","sass":"sass/main.scss","style":"css/main.css","engines":{"node":">=16.0.0"},"gitHead":"66df464b25deb85f4f25ef24646a9ce6ac17ae4a","scripts":{"build":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed","clean":"rm -rf css/*.css css/*.map","watch":"sass --watch sass/main.scss:css/main.css sass/social-icons.scss:css/social-icons.css","build:purge":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed && purgecss --config purgecss.config.js --output css/","build:expanded":"sass sass/main.scss css/main.css --style=expanded && sass sass/social-icons.scss css/social-icons.css --style=expanded"},"_npmUser":{"name":"cristiancuray","email":"cristiancuray@gmail.com"},"repository":{"url":"git+https://github.com/cristiancuray/materialize-grid-css.git","type":"git"},"_npmVersion":"10.9.3","description":"mz.css is a framework-agnostic CSS/SASS library with responsive grid up to 5K, local fonts/icons, and optional reusable JavaScript interactions","directories":{},"_nodeVersion":"22.20.0","dependencies":{"purgecss":"^6.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/mz-css_1.0.3_1774490377229_0.9004816940307281","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@cristiancuray/mz-css","version":"1.0.4","keywords":["css","sass","scss","grid","responsive","materialize","material-design","flexbox","4k","5k","framework"],"author":{"name":"Cristian Curay","email":"cristian@cristiancuray.net"},"license":"MIT","_id":"@cristiancuray/mz-css@1.0.4","maintainers":[{"name":"cristiancuray","email":"cristiancuray@gmail.com"}],"homepage":"https://github.com/cristian1898/mz-css#readme","bugs":{"url":"https://github.com/cristian1898/mz-css/issues"},"bin":{"mz-css":"bin/cli.js"},"dist":{"shasum":"3fa60ec985a0e9721dba09ad579f870f46e911bc","tarball":"https://registry.npmjs.org/@cristiancuray/mz-css/-/mz-css-1.0.4.tgz","fileCount":50,"integrity":"sha512-khVuYfxFlNKzJXzjCSjABlrxJyLZ4Q1o5yLlAvusrQB/iJviiBGoQ+bt2I7O6uYt+cO3+jn87jEq6zZXT3KjTg==","signatures":[{"sig":"MEYCIQC8bZtVSLPcvRz87rjscS39pJTDJGT8jgObexH9MqRHzAIhAL3UdBAKCEqzDOtFwRMj2jwmfT7M2d+BGpuuOhmIJJFh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":922388},"main":"css/main.css","sass":"sass/main.scss","style":"css/main.css","engines":{"node":">=16.0.0"},"gitHead":"e786017db4b17e732605a68945cce70de189dd7b","scripts":{"build":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed","clean":"rm -rf css/*.css css/*.map","watch":"sass --watch sass/main.scss:css/main.css sass/social-icons.scss:css/social-icons.css","build:purge":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed && purgecss --config purgecss.config.js --output css/","build:expanded":"sass sass/main.scss css/main.css --style=expanded && sass sass/social-icons.scss css/social-icons.css --style=expanded"},"_npmUser":{"name":"cristiancuray","email":"cristiancuray@gmail.com"},"repository":{"url":"git+https://github.com/cristian1898/mz-css.git","type":"git"},"_npmVersion":"10.9.3","description":"mz.css is a framework-agnostic CSS/SASS library with responsive grid up to 5K, local fonts/icons, and optional reusable JavaScript interactions","directories":{},"_nodeVersion":"22.20.0","dependencies":{"purgecss":"^6.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/mz-css_1.0.4_1774490737893_0.9051903866691493","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@cristiancuray/mz-css","version":"1.0.5","keywords":["css","sass","scss","grid","responsive","materialize","material-design","flexbox","4k","5k","framework"],"author":{"name":"Cristian Curay","email":"cristian@cristiancuray.net"},"license":"MIT","_id":"@cristiancuray/mz-css@1.0.5","maintainers":[{"name":"cristiancuray","email":"cristiancuray@gmail.com"}],"homepage":"https://github.com/cristian1898/mz-css#readme","bugs":{"url":"https://github.com/cristian1898/mz-css/issues"},"bin":{"mz-css":"bin/cli.js"},"dist":{"shasum":"8d43c1fd63224fde8f5f81d2d650f0dade2bc749","tarball":"https://registry.npmjs.org/@cristiancuray/mz-css/-/mz-css-1.0.5.tgz","fileCount":49,"integrity":"sha512-35zqy4Jpv/yTJEUVW2KvCA3JEi95e81gBbMJq8QopwToYN3hGJX8P1uobcDdhlNUS9WhDyus+bF9dTRKkpMXbQ==","signatures":[{"sig":"MEQCIEf4t3/iDfs3uYT7W327cpqLmMYl/NowIXEM3nT+7RffAiAPbu0YnBtemgCYQgyYqCB/Z96ZgMO+DmN0PvPWFs1Suw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":958006},"main":"css/main.css","sass":"sass/main.scss","style":"css/main.css","engines":{"node":">=16.0.0"},"gitHead":"33dfff070faf130e3fedc1b81a253929804e8ba9","scripts":{"build":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed","clean":"rm -rf css/*.css css/*.map","watch":"sass --watch sass/main.scss:css/main.css sass/social-icons.scss:css/social-icons.css","build:purge":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed && purgecss --config purgecss.config.js --output css/","build:expanded":"sass sass/main.scss css/main.css --style=expanded && sass sass/social-icons.scss css/social-icons.css --style=expanded"},"_npmUser":{"name":"cristiancuray","email":"cristiancuray@gmail.com"},"repository":{"url":"git+https://github.com/cristian1898/mz-css.git","type":"git"},"_npmVersion":"11.13.0","description":"mz.css is a framework-agnostic CSS/SASS library with responsive grid up to 5K, local fonts/icons, and optional reusable JavaScript interactions","directories":{},"_nodeVersion":"24.14.1","dependencies":{"purgecss":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/mz-css_1.0.5_1778626151211_0.9681063157611094","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@cristiancuray/mz-css","version":"1.0.6","keywords":["css","sass","scss","grid","responsive","materialize","material-design","flexbox","4k","5k","framework"],"author":{"name":"Cristian Curay","email":"cristian@cristiancuray.net"},"license":"MIT","_id":"@cristiancuray/mz-css@1.0.6","maintainers":[{"name":"cristiancuray","email":"cristiancuray@gmail.com"}],"homepage":"https://github.com/cristian1898/mz-css#readme","bugs":{"url":"https://github.com/cristian1898/mz-css/issues"},"bin":{"mz-css":"bin/cli.js"},"dist":{"shasum":"fcf6ff9ff972df687d3b2409ce071a9e1b58113b","tarball":"https://registry.npmjs.org/@cristiancuray/mz-css/-/mz-css-1.0.6.tgz","fileCount":50,"integrity":"sha512-b17t/FYoDbS0L76jhXZ8M9qo/a9H4wde92fVeMP+U63YJDt5ttRfvMiJpojx4Pq6gUNbZgZA2C9G/G0P0QNFzA==","signatures":[{"sig":"MEUCIQD2/c3d8NkFn4zmI1oEUS7NlPG0tnDTvrPxTUkdR+KpKgIgPTeYK79tx007GmcKzBCXF88sDDbzRp6zAMwbN2lRjfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":963103},"main":"css/main.css","sass":"sass/main.scss","style":"css/main.css","engines":{"node":">=16.0.0"},"gitHead":"5bf799e1c5947f09c33e538dd1f28504c3ef552f","scripts":{"build":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed","clean":"rm -rf css/*.css css/*.map","watch":"sass --watch sass/main.scss:css/main.css sass/social-icons.scss:css/social-icons.css","build:purge":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed && purgecss --config purgecss.config.js --output css/","build:expanded":"sass sass/main.scss css/main.css --style=expanded && sass sass/social-icons.scss css/social-icons.css --style=expanded"},"_npmUser":{"name":"cristiancuray","email":"cristiancuray@gmail.com"},"repository":{"url":"git+https://github.com/cristian1898/mz-css.git","type":"git"},"_npmVersion":"11.13.0","description":"mz.css is a framework-agnostic CSS/SASS library with responsive grid up to 5K, local fonts/icons, and optional reusable JavaScript interactions","directories":{},"_nodeVersion":"24.14.1","dependencies":{"purgecss":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/mz-css_1.0.6_1778627422657_0.10208899422132478","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@cristiancuray/mz-css","version":"1.0.7","description":"mz.css is a framework-agnostic CSS/SASS library with responsive grid up to 5K, local fonts/icons, and optional reusable JavaScript interactions","main":"css/main.css","sass":"sass/main.scss","style":"css/main.css","bin":{"mz-css":"bin/cli.js"},"scripts":{"build":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed","build:expanded":"sass sass/main.scss css/main.css --style=expanded && sass sass/social-icons.scss css/social-icons.css --style=expanded","build:purge":"sass sass/main.scss css/main.css --style=compressed && sass sass/social-icons.scss css/social-icons.css --style=compressed && purgecss --config purgecss.config.js --output css/","watch":"sass --watch sass/main.scss:css/main.css sass/social-icons.scss:css/social-icons.css","clean":"rm -rf css/*.css css/*.map"},"keywords":["css","sass","scss","grid","responsive","materialize","material-design","flexbox","4k","5k","framework"],"author":{"name":"Cristian Curay","email":"cristian@cristiancuray.net"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/cristian1898/mz-css.git"},"bugs":{"url":"https://github.com/cristian1898/mz-css/issues"},"homepage":"https://github.com/cristian1898/mz-css#readme","publishConfig":{"access":"public"},"devDependencies":{"sass":"^1.77.0"},"dependencies":{"purgecss":"^8.0.0"},"engines":{"node":">=16.0.0"},"gitHead":"53021a5cc8a2bf976bb642595597efae24422a85","_id":"@cristiancuray/mz-css@1.0.7","_nodeVersion":"24.14.1","_npmVersion":"11.13.0","dist":{"integrity":"sha512-vIcwRvaXIYWcN7SUuGuqetClNJ8ABthx9joeTYzPKqp95YdLuyr/MqWFMqGfawSrMsam1hUYG5Wh2nkw0tAnxA==","shasum":"066e4a5efb5e65a4ad8efef3f4177cdbc5843a17","tarball":"https://registry.npmjs.org/@cristiancuray/mz-css/-/mz-css-1.0.7.tgz","fileCount":50,"unpackedSize":963085,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID0L2rY+e9INPQICalngPSkI7Os7uM7rfSpd1NxKFPi9AiEAzXWSQyVQ2zW58BzPJJZqJb1i180NKAvSMgKBcqEq1UA="}]},"_npmUser":{"name":"cristiancuray","email":"cristiancuray@gmail.com"},"directories":{},"maintainers":[{"name":"cristiancuray","email":"cristiancuray@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mz-css_1.0.7_1778627659254_0.7964605002165235"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-26T01:59:37.157Z","modified":"2026-05-12T23:14:19.544Z","1.0.3":"2026-03-26T01:59:37.449Z","1.0.4":"2026-03-26T02:05:38.123Z","1.0.5":"2026-05-12T22:49:11.378Z","1.0.6":"2026-05-12T23:10:22.860Z","1.0.7":"2026-05-12T23:14:19.427Z"},"bugs":{"url":"https://github.com/cristian1898/mz-css/issues"},"author":{"name":"Cristian Curay","email":"cristian@cristiancuray.net"},"license":"MIT","homepage":"https://github.com/cristian1898/mz-css#readme","keywords":["css","sass","scss","grid","responsive","materialize","material-design","flexbox","4k","5k","framework"],"repository":{"type":"git","url":"git+https://github.com/cristian1898/mz-css.git"},"description":"mz.css is a framework-agnostic CSS/SASS library with responsive grid up to 5K, local fonts/icons, and optional reusable JavaScript interactions","maintainers":[{"name":"cristiancuray","email":"cristiancuray@gmail.com"}],"readme":"# mz.css\n\nLibrería CSS/SASS ligera inspirada en MaterializeCSS con sistema de grid responsivo hasta 5K y componentes CSS-only sin JavaScript.\n\n**Autor:** Cristian Curay <cristian@cristiancuray.net>  \n**Versión:** 1.0.3\n\n## ✨ Características\n\n- 🎯 **Sistema de grid** de 12 columnas con soporte hasta 5K (5120px)\n- 📱 **9 breakpoints responsivos**: `s`, `m`, `l`, `xl`, `xxl`, `hd`, `qhd`, `uhd`, `fk`\n- 🎨 **Paleta de colores** Material Design completamente personalizable\n- 🎯 **Clases de color compatibles con Materialize**: `teal lighten-2`, `blue-text text-darken-2`, etc.\n- 🔤 **Fuentes incluidas**: Lato (default), Roboto, Roboto Mono, Material Icons\n- ⚡ **CSS-only interactivo**: Modals, dropdowns, tabs, accordions sin JavaScript\n- 🧩 **24+ componentes**: Buttons, badges, cards, forms, tables, alerts, datepicker, file input, etc.\n- 📦 **Sin dependencias obligatorias** de JavaScript (DatePicker incluye helper opcional)\n- ⚙️ **Interactividad opcional reusable** con `js/base-ui.js` (SSR/SPA/framework agnostic)\n- 🔧 **CLI incluido** para purgar CSS no usado\n- 🌐 Compatible con Angular, React, Vue, Svelte, Next.js, etc.\n\n## 📦 Instalación\n\n```bash\nnpm install @cristiancuray/mz-css\n```\n\n## 🚀 Uso\n\n### CSS puro\n\n```html\n<link rel=\"stylesheet\" href=\"node_modules/@cristiancuray/mz-css/css/main.css\">\n```\n\n### SASS/SCSS\n\n```scss\n// Importar toda la librería\n@use '@cristiancuray/mz-css/sass/main';\n\n// O importar módulos individuales\n@use '@cristiancuray/mz-css/sass/grid';\n@use '@cristiancuray/mz-css/sass/buttons';\n@use '@cristiancuray/mz-css/sass/cards';\n```\n\n### Personalizar variables\n\n```scss\n@use '@cristiancuray/mz-css/sass/variables' with (\n  $color-primary: #6200ea,\n  $font-family-base: $font-family-roboto,\n  $gutter: 20px\n);\n@use '@cristiancuray/mz-css/sass/main';\n```\n\n## 📐 Sistema de Grid\n\n### Breakpoints\n\n| Clase | Min-width | Dispositivo |\n|-------|-----------|-------------|\n| `s` | 600px | Móviles |\n| `m` | 768px | Tablets |\n| `l` | 992px | Laptops |\n| `xl` | 1200px | Monitores HD |\n| `xxl` | 1500px | Monitores grandes |\n| `hd` | 1920px | Full HD |\n| `qhd` | 2560px | 2K / QHD |\n| `uhd` | 3840px | 4K UHD |\n| `fk` | 5120px | 5K |\n\n### Ejemplo\n\n```html\n<div class=\"container\">\n  <div class=\"row\">\n    <div class=\"col s12 m6 l4 xl3\">Columna responsiva</div>\n    <div class=\"col s12 m6 l4 xl3\">Columna responsiva</div>\n    <div class=\"col s12 m6 l4 xl3\">Columna responsiva</div>\n    <div class=\"col s12 m6 l4 xl3\">Columna responsiva</div>\n  </div>\n</div>\n```\n\n### Offsets\n\n```html\n<div class=\"col s12 m6 offset-m3\">Columna centrada</div>\n```\n\n## 🧩 Componentes\n\n### Buttons\n\n```html\n<!-- Variantes -->\n<button class=\"btn btn-primary\">Primary</button>\n<button class=\"btn btn-outline-primary\">Outline</button>\n<button class=\"btn btn-soft-primary\">Soft</button>\n<button class=\"btn btn-ghost\">Ghost</button>\n\n<!-- Tamaños -->\n<button class=\"btn btn-primary btn-xs\">Extra Small</button>\n<button class=\"btn btn-primary btn-sm\">Small</button>\n<button class=\"btn btn-primary btn-lg\">Large</button>\n<button class=\"btn btn-primary btn-xl\">Extra Large</button>\n\n<!-- Con iconos -->\n<button class=\"btn btn-primary\">\n  <i class=\"material-icons\">add</i>\n  Add Item\n</button>\n\n<!-- Icon button -->\n<button class=\"btn btn-icon btn-primary\">\n  <i class=\"material-icons\">favorite</i>\n</button>\n\n<!-- Button group -->\n<div class=\"btn-group\">\n  <button class=\"btn btn-primary\">Left</button>\n  <button class=\"btn btn-primary\">Middle</button>\n  <button class=\"btn btn-primary\">Right</button>\n</div>\n\n<!-- Pill shape -->\n<button class=\"btn btn-primary btn-pill\">Pill Button</button>\n\n<!-- Loading state -->\n<button class=\"btn btn-primary btn-loading\">Loading</button>\n\n<!-- FAB (Floating Action Button) -->\n<button class=\"btn btn-primary btn-fab\">\n  <i class=\"material-icons\">add</i>\n</button>\n```\n\n### Badges & Chips\n\n```html\n<!-- Badges -->\n<span class=\"badge badge-primary\">Primary</span>\n<span class=\"badge badge-soft-success\">Soft</span>\n<span class=\"badge badge-outline-danger\">Outline</span>\n<span class=\"badge badge-primary badge-pill\">Pill</span>\n\n<!-- Badge dot (indicador) -->\n<span class=\"badge badge-danger badge-dot\"></span>\n<span class=\"badge badge-success badge-dot badge-dot-pulse\"></span>\n\n<!-- Status badges -->\n<span class=\"badge-status badge-status-online\">Online</span>\n<span class=\"badge-status badge-status-busy\">Busy</span>\n\n<!-- Version badge -->\n<span class=\"badge-version\">\n  <span class=\"badge-version-label\">version</span>\n  <span class=\"badge-version-number\">1.0.2</span>\n</span>\n\n<!-- Tags -->\n<span class=\"tag tag-primary\">Feature</span>\n<span class=\"tag tag-success\">Complete</span>\n\n<!-- Chips -->\n<span class=\"chip\">Basic Chip</span>\n<span class=\"chip chip-avatar\">\n  <img src=\"avatar.jpg\" class=\"chip-img\">\n  John Doe\n  <button class=\"chip-close\"></button>\n</span>\n```\n\n### Cards\n\n```html\n<!-- Card básica -->\n<div class=\"card\">\n  <div class=\"card-header\">\n    <h3 class=\"card-title\">Title</h3>\n  </div>\n  <div class=\"card-body\">\n    <p>Card content goes here.</p>\n  </div>\n  <div class=\"card-footer\">\n    <button class=\"btn btn-primary\">Action</button>\n  </div>\n</div>\n\n<!-- Card con imagen -->\n<div class=\"card\">\n  <img src=\"image.jpg\" class=\"card-img-top\" alt=\"...\">\n  <div class=\"card-body\">\n    <h3 class=\"card-title\">Card Title</h3>\n    <p class=\"card-text\">Description text.</p>\n  </div>\n</div>\n\n<!-- Card hover -->\n<div class=\"card card-hover\">...</div>\n\n<!-- Pricing card -->\n<div class=\"card card-pricing\">\n  <div class=\"card-pricing-header\">\n    <span class=\"card-pricing-name\">Pro Plan</span>\n    <div class=\"card-pricing-price\">\n      <span class=\"card-pricing-currency\">$</span>\n      <span class=\"card-pricing-amount\">29</span>\n      <span class=\"card-pricing-period\">/month</span>\n    </div>\n  </div>\n  <ul class=\"card-pricing-features\">\n    <li class=\"card-pricing-feature\">\n      <i class=\"material-icons\">check</i>\n      Feature 1\n    </li>\n  </ul>\n</div>\n```\n\n### Dropdowns (CSS-only)\n\n```html\n<!-- Dropdown con checkbox hack -->\n<div class=\"dropdown\">\n  <input type=\"checkbox\" id=\"dd1\" class=\"dropdown-toggle-input\">\n  <label for=\"dd1\" class=\"dropdown-toggle\">Options</label>\n  <div class=\"dropdown-menu\">\n    <a href=\"#\" class=\"dropdown-item\">\n      <i class=\"material-icons\">person</i>\n      Profile\n    </a>\n    <a href=\"#\" class=\"dropdown-item\">Settings</a>\n    <div class=\"dropdown-divider\"></div>\n    <a href=\"#\" class=\"dropdown-item dropdown-item-danger\">Sign out</a>\n  </div>\n</div>\n\n<!-- Dropdown hover -->\n<div class=\"dropdown dropdown-hover\">\n  <button class=\"dropdown-toggle\">Hover Menu</button>\n  <div class=\"dropdown-menu\">\n    <a href=\"#\" class=\"dropdown-item\">Action 1</a>\n    <a href=\"#\" class=\"dropdown-item\">Action 2</a>\n  </div>\n</div>\n\n<!-- Posiciones -->\n<div class=\"dropdown-menu dropdown-menu-end\">...</div> <!-- Derecha -->\n<div class=\"dropup\">...</div> <!-- Arriba -->\n```\n\n### Tabs (CSS-only)\n\n```html\n<div class=\"tabs\">\n  <input type=\"radio\" name=\"tabs\" id=\"tab1\" class=\"tab-input\" checked>\n  <input type=\"radio\" name=\"tabs\" id=\"tab2\" class=\"tab-input\">\n  \n  <ul class=\"tab-nav\">\n    <li class=\"tab-item\">\n      <label for=\"tab1\" class=\"tab-link\">Home</label>\n    </li>\n    <li class=\"tab-item\">\n      <label for=\"tab2\" class=\"tab-link\">Profile</label>\n    </li>\n  </ul>\n  \n  <div class=\"tab-content\">\n    <div id=\"tabpane1\" class=\"tab-pane\">Home content</div>\n    <div id=\"tabpane2\" class=\"tab-pane\">Profile content</div>\n  </div>\n</div>\n\n<!-- Variantes -->\n<div class=\"tabs tabs-pills\">...</div>\n<div class=\"tabs tabs-underline\">...</div>\n<div class=\"tabs tabs-boxed\">...</div>\n```\n\n### Accordions (CSS-only)\n\n```html\n<div class=\"accordion\">\n  <div class=\"accordion-item\">\n    <input type=\"checkbox\" id=\"acc1\" class=\"accordion-input\" checked>\n    <label for=\"acc1\" class=\"accordion-header\">Section 1</label>\n    <div class=\"accordion-body\">\n      <div class=\"accordion-content\">\n        Content for section 1.\n      </div>\n    </div>\n  </div>\n  <div class=\"accordion-item\">\n    <input type=\"checkbox\" id=\"acc2\" class=\"accordion-input\">\n    <label for=\"acc2\" class=\"accordion-header\">Section 2</label>\n    <div class=\"accordion-body\">\n      <div class=\"accordion-content\">\n        Content for section 2.\n      </div>\n    </div>\n  </div>\n</div>\n\n<!-- Variantes -->\n<div class=\"accordion accordion-flush\">...</div>\n<div class=\"accordion accordion-separated\">...</div>\n<div class=\"accordion accordion-plus-minus\">...</div>\n```\n\n### Tooltips (CSS-only)\n\n```html\n<!-- Usando data-tooltip -->\n<button data-tooltip=\"This is a tooltip!\">Hover me</button>\n<button data-tooltip=\"Bottom tooltip\" data-tooltip-position=\"bottom\">Bottom</button>\n<button data-tooltip=\"Left tooltip\" data-tooltip-position=\"left\">Left</button>\n<button data-tooltip=\"Right tooltip\" data-tooltip-position=\"right\">Right</button>\n\n<!-- Colores -->\n<span data-tooltip=\"Info\" data-tooltip-color=\"primary\">Primary</span>\n<span data-tooltip=\"Success\" data-tooltip-color=\"success\">Success</span>\n<span data-tooltip=\"Error\" data-tooltip-color=\"danger\">Danger</span>\n\n<!-- Multiline -->\n<span data-tooltip=\"Long text here...\" data-tooltip-multiline>Multiline</span>\n\n<!-- Help tooltip -->\n<span class=\"help-tooltip\" data-tooltip=\"Help text here\"></span>\n```\n\n### Modals (CSS-only)\n\n```html\n<!-- Trigger -->\n<label for=\"modal1\" class=\"btn btn-primary\">Open Modal</label>\n\n<!-- Modal -->\n<input type=\"checkbox\" id=\"modal1\" class=\"modal-toggle\">\n<div class=\"modal\">\n  <label for=\"modal1\" class=\"modal-backdrop\"></label>\n  <div class=\"modal-box\">\n    <label for=\"modal1\" class=\"modal-close\">&times;</label>\n    <h3 class=\"modal-title\">Modal Title</h3>\n    <p>Modal content goes here.</p>\n    <div class=\"modal-actions\">\n      <label for=\"modal1\" class=\"btn btn-outline-secondary\">Cancel</label>\n      <button class=\"btn btn-primary\">Confirm</button>\n    </div>\n  </div>\n</div>\n```\n\n### Alerts\n\n```html\n<div class=\"alert alert-success\">\n  <i class=\"material-icons alert-icon\">check_circle</i>\n  <div class=\"alert-content\">\n    <div class=\"alert-title\">Success!</div>\n    <div class=\"alert-message\">Your action was completed.</div>\n  </div>\n</div>\n\n<!-- Variantes -->\n<div class=\"alert alert-danger\">...</div>\n<div class=\"alert alert-warning\">...</div>\n<div class=\"alert alert-info\">...</div>\n\n<!-- Con botón de cerrar -->\n<div class=\"alert alert-info alert-dismissible\">\n  <span class=\"alert-message\">Dismissible alert</span>\n  <input type=\"checkbox\" id=\"alert1\" class=\"alert-close-toggle\">\n  <label for=\"alert1\" class=\"alert-close\">&times;</label>\n</div>\n```\n\n### Navbar\n\n```html\n<nav class=\"navbar\">\n  <div class=\"navbar-brand\">\n    <a href=\"#\" class=\"navbar-logo\">Logo</a>\n  </div>\n  \n  <input type=\"checkbox\" id=\"nav-toggle\" class=\"navbar-toggle-input\">\n  <label for=\"nav-toggle\" class=\"navbar-toggle\">\n    <span class=\"navbar-toggle-icon\"></span>\n  </label>\n  \n  <div class=\"navbar-menu\">\n    <ul class=\"navbar-nav\">\n      <li class=\"navbar-item\">\n        <a href=\"#\" class=\"navbar-link active\">Home</a>\n      </li>\n      <li class=\"navbar-item\">\n        <a href=\"#\" class=\"navbar-link\">About</a>\n      </li>\n    </ul>\n  </div>\n</nav>\n```\n\n### Sidebar\n\n```html\n<input type=\"checkbox\" id=\"sidebar-toggle\" class=\"sidebar-toggle\">\n<aside class=\"sidebar\">\n  <div class=\"sidebar-header\">\n    <span class=\"sidebar-logo\">Dashboard</span>\n  </div>\n  <nav class=\"sidebar-nav\">\n    <a href=\"#\" class=\"sidebar-link active\">\n      <i class=\"material-icons\">dashboard</i>\n      <span>Dashboard</span>\n    </a>\n    <a href=\"#\" class=\"sidebar-link\">\n      <i class=\"material-icons\">people</i>\n      <span>Users</span>\n    </a>\n  </nav>\n</aside>\n```\n\n### Forms\n\n```html\n<!-- Input básico -->\n<div class=\"input-field\">\n  <label for=\"name\">Name</label>\n  <input type=\"text\" id=\"name\" placeholder=\"Your name\">\n</div>\n\n<!-- Input con label flotante -->\n<div class=\"input-field input-float\">\n  <input type=\"email\" id=\"email\" placeholder=\" \">\n  <label for=\"email\">Email</label>\n</div>\n\n<!-- Estados de validación -->\n<div class=\"input-field input-success\">...</div>\n<div class=\"input-field input-error\">...</div>\n\n<!-- Select -->\n<div class=\"input-field\">\n  <label for=\"country\">Country</label>\n  <select id=\"country\">\n    <option value=\"\">Select...</option>\n    <option value=\"us\">United States</option>\n  </select>\n</div>\n\n<!-- Checkbox -->\n<label class=\"checkbox\">\n  <input type=\"checkbox\">\n  <span class=\"checkbox-mark\"></span>\n  Accept terms\n</label>\n\n<!-- Radio -->\n<label class=\"radio\">\n  <input type=\"radio\" name=\"plan\" value=\"free\">\n  <span class=\"radio-mark\"></span>\n  Free Plan\n</label>\n```\n\n### DatePicker (CSS + JS opcional)\n\nEl componente DatePicker funciona con estructura CSS-only para abrir/cerrar con checkbox hack y puede usar un helper JavaScript opcional para navegacion, seleccion, eventos e i18n.\n\n```html\n<div\n  id=\"demo-datepicker\"\n  class=\"datepicker-wrapper\"\n  data-value=\"2024-03-20\"\n  data-format=\"DD/MM/YYYY\"\n  data-locale=\"es\"\n>\n  <input type=\"checkbox\" id=\"datepicker-toggle-demo\" class=\"datepicker-toggle\">\n  <label for=\"datepicker-toggle-demo\" class=\"datepicker-overlay\"></label>\n\n  <div class=\"datepicker-input\">\n    <input type=\"text\" placeholder=\"Select date\" readonly>\n    <span class=\"datepicker-icon\"><i class=\"material-icons\">calendar_today</i></span>\n  </div>\n  <label for=\"datepicker-toggle-demo\" class=\"datepicker-trigger\"></label>\n\n  <div class=\"datepicker\">\n    <div class=\"datepicker-nav\">\n      <button type=\"button\" class=\"datepicker-nav-btn\"><i class=\"material-icons\">chevron_left</i></button>\n      <span class=\"datepicker-title\">March 2024</span>\n      <button type=\"button\" class=\"datepicker-nav-btn\"><i class=\"material-icons\">chevron_right</i></button>\n    </div>\n\n    <div class=\"datepicker-calendar\">\n      <div class=\"datepicker-weekdays\"></div>\n      <div class=\"datepicker-days\"></div>\n    </div>\n\n    <div class=\"datepicker-footer\">\n      <button type=\"button\" class=\"datepicker-btn btn-today\">Today</button>\n      <button type=\"button\" class=\"datepicker-btn btn-cancel\">Cancel</button>\n      <button type=\"button\" class=\"datepicker-btn btn-ok\">OK</button>\n    </div>\n  </div>\n</div>\n\n<script src=\"node_modules/@cristiancuray/mz-css/js/datepicker.js\"></script>\n<script>\n  const instances = DatePicker.init();\n  const demo = DatePicker.getInstance('#demo-datepicker');\n\n  // Cambio de locale en runtime\n  demo?.setLocale('es');\n\n  demo?.on('change', (date) => {\n    console.log('Selected date:', date);\n  });\n</script>\n```\n\nOpciones principales:\n\n- `format`: formato de salida (`YYYY-MM-DD`, `DD/MM/YYYY`, etc.)\n- `locale`: idioma (`en`, `es`, `pt`, `fr`)\n- `firstDayOfWeek`: inicio de semana (`0` domingo, `1` lunes)\n- `minDate` / `maxDate`: limites de fecha\n- `disabledDates`: fechas deshabilitadas\n\nAPI publica:\n\n- `getValue()` / `getFormattedValue()`\n- `setValue(date)` / `clear()`\n- `open()` / `close()`\n- `setLocale(locale)`\n- `on(event, callback)` / `off(event, callback)`\n\n### Base UI (JS opcional para componentes)\n\n`base-ui.js` agrega interacciones reutilizables sobre componentes CSS-only, con API simple y flags por feature.\n\n```html\n<script src=\"node_modules/@cristiancuray/mz-css/js/base-ui.js\"></script>\n<script>\n  const ui = BaseCSSUI.init({\n    forms: true,\n    paginator: true,\n    alerts: true,\n    auth: true,\n    navbar: true,\n    sidebar: true,\n    modals: true,\n    cardsButtonsBadges: true,\n    tabs: true,\n    accordion: true,\n    tooltips: true,\n    fileUpload: true\n  });\n\n  // Crear una instancia aislada en un root especifico\n  // const scoped = BaseCSSUI.create({ tabs: true, tooltips: true });\n  // scoped.init(document.getElementById('my-section'));\n</script>\n```\n\n### Tables\n\n```html\n<table class=\"table table-striped table-hover\">\n  <thead>\n    <tr>\n      <th>Name</th>\n      <th>Email</th>\n      <th class=\"numeric\">Age</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>John Doe</td>\n      <td>john@email.com</td>\n      <td class=\"numeric\">28</td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- Tabla responsiva -->\n<div class=\"table-responsive\">\n  <table class=\"table\">...</table>\n</div>\n\n<!-- Tabla con filtros avanzados + sort + búsqueda inteligente -->\n<div id=\"users-filter-demo\" class=\"table-filter-demo\">\n  <div class=\"table-filter-toolbar\">\n    <input id=\"users-smart-search\" type=\"search\" placeholder=\"Buscar por coincidencia...\">\n    <input id=\"users-date-from\" type=\"date\">\n    <input id=\"users-date-to\" type=\"date\">\n    <select id=\"users-score-op\">\n      <option value=\"\">Sin filtro</option>\n      <option value=\">\">Mayor que</option>\n      <option value=\"<\">Menor que</option>\n      <option value=\"=\">Igual</option>\n    </select>\n    <input id=\"users-score-value\" type=\"number\" placeholder=\"Score\">\n    <select id=\"users-sort-by\">\n      <option value=\"\">Sin ordenar</option>\n      <option value=\"createdAt\">Fecha alta</option>\n      <option value=\"score\">Score</option>\n    </select>\n    <select id=\"users-sort-dir\">\n      <option value=\"asc\">Asc</option>\n      <option value=\"desc\">Desc</option>\n    </select>\n  </div>\n\n  <table id=\"users-filter-table\" class=\"table table-striped table-hover table-bordered\">\n    <thead>\n      <tr>\n        <th>Nombre</th>\n        <th>\n          Rol\n          <button type=\"button\" class=\"filter-trigger\" data-filter-column=\"role\">\n            <i class=\"material-icons\">filter_alt</i>\n          </button>\n          <div class=\"filter-menu\" data-filter-menu=\"role\"></div>\n        </th>\n        <th>\n          Estado\n          <button type=\"button\" class=\"filter-trigger\" data-filter-column=\"status\">\n            <i class=\"material-icons\">filter_alt</i>\n          </button>\n          <div class=\"filter-menu\" data-filter-menu=\"status\"></div>\n        </th>\n      </tr>\n    </thead>\n    <tbody>\n      <tr data-role=\"Admin\" data-status=\"Activo\" data-created-at=\"2025-01-12\" data-score=\"95\">...</tr>\n      <tr data-role=\"Analista\" data-status=\"Pendiente\" data-created-at=\"2025-02-19\" data-score=\"67\">...</tr>\n    </tbody>\n  </table>\n</div>\n\n<script>\n  // Data desde JSON/array\n  const usersData = [\n    { id: 1, name: 'Camila Rivera', role: 'Admin', status: 'Activo', createdAt: '2025-01-12', score: 95 }\n  ];\n\n  // Props/config simple para prender o apagar capacidades\n  const tableConfig = {\n    data: usersData,\n    features: {\n      menuFilters: true,\n      smartSearch: true,\n      sort: true,\n      dateRange: true,\n      numericCompare: true\n    }\n  };\n\n  // const table = createSmartTable(tableConfig)\n  // table.setFeature('smartSearch', false)\n  // table.setFeature('dateRange', true)\n  // (implementacion completa en test-lib/index.html)\n\n  // Incluye:\n  // - filtros por valores unicos desde data-* con buscador interno en cada menu flotante\n  // - filtro por fecha (desde/hasta)\n  // - comparadores numericos (> >= = <= <)\n  // - sort asc/desc por columna\n  // - busqueda inteligente por coincidencia\n  // initFloatingTableFilters();\n</script>\n```\n\n### Dividers\n\n```html\n<hr class=\"divider\">\n<hr class=\"divider divider-dashed\">\n<hr class=\"divider divider-gradient\">\n\n<!-- Con texto -->\n<div class=\"divider-text\">\n  <span>OR</span>\n</div>\n```\n\n### Shadow Utilities\n\n```html\n<div class=\"shadow-sm\">Small shadow</div>\n<div class=\"shadow\">Default shadow</div>\n<div class=\"shadow-md\">Medium shadow</div>\n<div class=\"shadow-lg\">Large shadow</div>\n<div class=\"shadow-xl\">Extra large shadow</div>\n<div class=\"shadow-none\">No shadow</div>\n```\n\n### Text Utilities\n\n```html\n<!-- Sintaxis compatible con Materialize -->\n<div class=\"card-panel teal lighten-2\">Teal lighten-2</div>\n<span class=\"blue-text text-darken-2\">Dark blue text</span>\n<span class=\"red accent-2 white-text\">Accent background</span>\n\n<!-- Colores -->\n<span class=\"text-primary\">Primary text</span>\n<span class=\"text-success\">Success text</span>\n<span class=\"bg-primary text-light\">Background</span>\n\n<!-- Tamaños -->\n<span class=\"text-xs\">Extra small</span>\n<span class=\"text-sm\">Small</span>\n<span class=\"text-lg\">Large</span>\n<span class=\"text-xl\">Extra large</span>\n\n<!-- Peso -->\n<span class=\"font-light\">Light</span>\n<span class=\"font-bold\">Bold</span>\n\n<!-- Alineación -->\n<p class=\"text-center\">Centered</p>\n<p class=\"text-right\">Right aligned</p>\n\n<!-- Familias de fuentes -->\n<span class=\"font-lato\">Lato font</span>\n<span class=\"font-roboto\">Roboto font</span>\n<span class=\"font-mono\">Monospace font</span>\n```\n\n## 🔧 CLI - PurgeCSS\n\nLa librería incluye un CLI para eliminar CSS no utilizado:\n\n```bash\n# Crear configuración\nnpx mz-css init\n\n# Purgar CSS no usado\nnpx mz-css purge\n\n# Con opciones\nnpx mz-css purge --output dist/ --css path/to/file.css\n\n# Ver ayuda\nnpx mz-css help\n```\n\n### Resultado típico\n\n```\n[mz.css] Original size: 169 KB\n[mz.css] Purged CSS: 45 KB (73% reduction)\n[mz.css] Output: ./dist/main.css\n```\n\n## 📁 Estructura\n\n```\nmz.css/\n├── css/\n│   └── main.css              # CSS compilado\n├── js/\n│   ├── datepicker.js         # Helper JS opcional para DatePicker\n│   └── base-ui.js            # Interacciones opcionales para componentes\n├── sass/\n│   ├── _variables.scss       # Variables globales\n│   ├── _fonts.scss           # @font-face\n│   ├── main.scss             # Entry point\n│   ├── base.scss             # Reset y base\n│   ├── grid.scss             # Sistema de grid\n│   ├── buttons.scss          # Botones\n│   ├── badges.scss           # Badges y chips\n│   ├── cards.scss            # Cards\n│   ├── dropdowns.scss        # Dropdowns\n│   ├── tabs.scss             # Tabs\n│   ├── accordions.scss       # Accordions\n│   ├── tooltips.scss         # Tooltips\n│   ├── modals.scss           # Modals\n│   ├── navbar.scss           # Navbar\n│   ├── sidebar.scss          # Sidebar\n│   ├── forms.scss            # Formularios\n│   ├── file-input.scss       # File input/upload\n│   ├── table.scss            # Tablas\n│   ├── alerts.scss           # Alertas\n│   ├── dividers.scss         # Divisores\n│   ├── paginator.scss        # Paginación\n│   ├── icon.scss             # Iconos\n│   ├── text.scss             # Utilidades de texto\n│   ├── shadows.scss          # Utilidades de sombras\n│   ├── datepicker.scss       # DatePicker\n│   ├── bento.scss            # Bento grid\n│   └── auth.scss             # Auth forms\n├── fonts/\n│   ├── lato/                 # Fuente Lato\n│   ├── roboto/               # Fuente Roboto\n│   ├── roboto-mono/          # Fuente monospace\n│   └── material-icons/       # Iconos Material\n├── bin/\n│   └── cli.js                # CLI para purge\n└── package.json\n```\n\n## 🛠 Desarrollo\n\n```bash\n# Instalar dependencias\nnpm install\n\n# Compilar SASS\nnpm run build\n\n# Compilar expandido (debug)\nnpm run build:expanded\n\n# Watch mode\nnpm run watch\n```\n\n## 📄 Licencia\n\nMIT License - Cristian Curay <cristian@cristiancuray.net>\n","readmeFilename":"README.md"}