/** * Masonry Grid — Deux modes d'affichage : * 1. Variable : CSS Grid avec tailles small/medium/large * 2. Uniform : CSS Columns masonry (comme Google Keep) */ /* ─── Container ──────────────────────────────────── */ .masonry-container { width: 100%; padding: 0 8px 40px 8px; } /* ═══════════════════════════════════════════════════ MODE 1 : VARIABLE (CSS Grid avec tailles différentes) ═══════════════════════════════════════════════════ */ .masonry-css-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); grid-auto-rows: auto; gap: 12px; align-items: start; grid-auto-flow: dense; } .masonry-sortable-item[data-size="medium"] { grid-column: span 2; } .masonry-sortable-item[data-size="large"] { grid-column: span 3; } /* ═══════════════════════════════════════════════════ MODE 2 : UNIFORM — CSS Columns masonry (Google Keep) ═══════════════════════════════════════════════════ */ .masonry-container[data-card-size-mode="uniform"] .masonry-css-grid { display: block; column-width: 240px; column-gap: 12px; orphans: 1; widows: 1; } .masonry-container[data-card-size-mode="uniform"] .masonry-sortable-item, .masonry-container[data-card-size-mode="uniform"] .masonry-sortable-item[data-size="medium"], .masonry-container[data-card-size-mode="uniform"] .masonry-sortable-item[data-size="large"] { break-inside: avoid; margin-bottom: 12px; display: inline-block; width: 100%; grid-column: unset; } /* ─── Sortable items ─────────────────────────────── */ .masonry-sortable-item { break-inside: avoid; box-sizing: border-box; will-change: transform; transition: opacity 0.15s ease-out; } /* ─── Note card base ─────────────────────────────── */ .note-card { width: 100% !important; min-width: 0; box-sizing: border-box; } /* ─── Drag overlay ───────────────────────────────── */ .masonry-drag-overlay { cursor: grabbing; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.25), 0 8px 16px rgba(0, 0, 0, 0.15); border-radius: 12px; opacity: 0.95; pointer-events: none; } /* ─── Mobile (< 480px) ───────────────────────────── */ @media (max-width: 479px) { .masonry-css-grid { grid-template-columns: 1fr; gap: 10px; } .masonry-sortable-item[data-size="medium"], .masonry-sortable-item[data-size="large"] { grid-column: span 1; } .masonry-container[data-card-size-mode="uniform"] .masonry-css-grid { column-width: 100%; column-gap: 10px; } .masonry-container { padding: 0 4px 16px 4px; } } /* ─── Small tablet (480–767px) ───────────────────── */ @media (min-width: 480px) and (max-width: 767px) { .masonry-css-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; } .masonry-sortable-item[data-size="large"] { grid-column: span 2; } .masonry-container { padding: 0 8px 20px 8px; } } /* ─── Tablet (768–1023px) ────────────────────────── */ @media (min-width: 768px) and (max-width: 1023px) { .masonry-css-grid { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; } } /* ─── Desktop (1024–1279px) ─────────────────────── */ @media (min-width: 1024px) and (max-width: 1279px) { .masonry-css-grid { grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 12px; } } /* ─── Large Desktop (1280px+) ───────────────────── */ @media (min-width: 1280px) { .masonry-css-grid { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px; } .masonry-container { max-width: 1600px; margin: 0 auto; padding: 0 12px 32px 12px; } } /* ─── Print ──────────────────────────────────────── */ @media print { .masonry-sortable-item { break-inside: avoid; page-break-inside: avoid; } } /* ─── Reduced motion ─────────────────────────────── */ @media (prefers-reduced-motion: reduce) { .masonry-sortable-item { transition: none; } }