/* ── Olimpic Nastri — Style v2 ─────────────────────────────────────────── */ :root { --bs-body-bg: #f0f2f5; --accent: #4361ee; --accent-soft: #eef0fd; --accent-hover: #3451d1; --danger: #ef4444; --success-bg: #dcfce7; --success-fg: #15803d; } body { background: var(--bs-body-bg); font-size: .93rem; } /* ── Navbar ── */ .navbar { background: #1a1f36 !important; box-shadow: 0 2px 8px rgba(0,0,0,.25); padding-top: .6rem; padding-bottom: .6rem; } .navbar-brand { font-weight: 800; font-size: 1.05rem; letter-spacing: .5px; color: #fff !important; } .navbar-brand span { color: #7c8ff9; } .nav-link { color: rgba(255,255,255,.75) !important; font-weight: 500; transition: color .15s; } .nav-link:hover, .nav-link.active { color: #fff !important; } /* ── Cards ── */ .card { border: none; border-radius: 12px; box-shadow: 0 1px 6px rgba(0,0,0,.07); background: #fff; transition: box-shadow .2s ease, transform .2s ease; } .card:hover { box-shadow: 0 4px 16px rgba(0,0,0,.1); } .card-header-accent { background: var(--accent-soft); border-bottom: 1px solid #d9ddfc; border-radius: 12px 12px 0 0 !important; padding: .75rem 1.25rem; font-weight: 600; font-size: .85rem; color: var(--accent); letter-spacing: .3px; } /* ── Animations ── */ @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .fade-in { animation: fadeIn .3s ease both; } .fade-in-delay-1 { animation-delay: .05s; } .fade-in-delay-2 { animation-delay: .1s; } .fade-in-delay-3 { animation-delay: .15s; } /* HTMX transitions */ .htmx-settling { opacity: 0; } .htmx-settling .container-lg, .htmx-settling .fade-in { animation: none; } #main-content { transition: opacity .15s ease; } #main-content.htmx-swapping { opacity: 0; } /* ── Timeline ── */ .timeline { position: relative; padding-left: 28px; } .timeline::before { content: ''; position: absolute; left: 10px; top: 4px; bottom: 4px; width: 2px; background: #e0e4f0; border-radius: 2px; } .tl-item { position: relative; margin-bottom: 1.4rem; } .tl-dot { position: absolute; left: -24px; top: 3px; width: 14px; height: 14px; border-radius: 50%; border: 2px solid #fff; box-shadow: 0 0 0 2px currentColor; } .tl-dot.conv { color: var(--accent); background: var(--accent); } .tl-dot.agg { color: #f97316; background: #f97316; } .tl-dot.doc { color: #10b981; background: #10b981; } /* ── Badge stati ── */ .badge-stato { font-size: .7rem; font-weight: 600; padding: .3em .65em; border-radius: 6px; } .stato-aperto { background: #dbeafe; color: #1d4ed8; } .stato-in_corso { background: #ffedd5; color: #c2410c; } .stato-completato{ background: #dcfce7; color: #15803d; } .stato-sospeso { background: #f1f5f9; color: #64748b; } /* ── Progress slider AJAX ── */ .slider-wrap { position: relative; } .progress-slider { -webkit-appearance: none; width: 100%; height: 6px; border-radius: 4px; outline: none; cursor: pointer; background: linear-gradient( to right, var(--accent) 0%, var(--accent) var(--val, 0%), #dee2e6 var(--val, 0%), #dee2e6 100% ); transition: opacity .15s; } .progress-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 18px; height: 18px; border-radius: 50%; cursor: pointer; background: var(--accent); border: 3px solid #fff; box-shadow: 0 1px 4px rgba(67,97,238,.5); transition: transform .15s; } .progress-slider::-webkit-slider-thumb:hover { transform: scale(1.15); } .slider-label { font-size: .78rem; font-weight: 700; color: var(--accent); min-width: 36px; text-align: right; } .slider-saving { font-size: .72rem; color: #94a3b8; } /* ── Pill tipo ── */ .pill-collettivo { background:#ede9fe; color:#6d28d9; } .pill-individuale{ background:#fce7f3; color:#9d174d; } .pill-tipo { font-size:.7rem; font-weight:600; padding:.25em .6em; border-radius:20px; } /* ── Misc ── */ .section-title { font-weight: 700; font-size: .8rem; text-transform: uppercase; letter-spacing: .8px; color: #94a3b8; margin-bottom: .75rem; } .btn-icon { width: 32px; height: 32px; padding: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; } .avatar { width: 28px; height: 28px; border-radius: 50%; background: var(--accent); color: #fff; font-size: .7rem; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; } .avatar-lg { width: 48px; height: 48px; font-size: 1rem; } hr.soft { border-color: #f1f3f9; } /* ── Forms ── */ textarea.form-control, input.form-control { border-radius: 10px; border-color: #e2e8f0; } textarea.form-control:focus, input.form-control:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(67,97,238,.12); } .form-select { border-radius: 10px; border-color: #e2e8f0; } .form-select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(67,97,238,.12); } /* ── Buttons ── */ .btn-primary { background: var(--accent); border-color: var(--accent); border-radius: 9px; font-weight: 600; } .btn-primary:hover { background: var(--accent-hover); border-color: var(--accent-hover); } .btn-outline-secondary { border-radius: 9px; } .btn-outline-danger { border-radius: 9px; } /* ── Search bar ── */ .search-wrapper { position: relative; } .search-wrapper .form-control { padding-left: 2.2rem; border-radius: 20px; background: rgba(255,255,255,.1); border-color: rgba(255,255,255,.15); color: #fff; font-size: .85rem; transition: background .2s, border-color .2s, width .3s; width: 200px; } .search-wrapper .form-control::placeholder { color: rgba(255,255,255,.5); } .search-wrapper .form-control:focus { background: rgba(255,255,255,.18); border-color: rgba(255,255,255,.3); color: #fff; width: 280px; box-shadow: none; } .search-wrapper .search-icon { position: absolute; left: .75rem; top: 50%; transform: translateY(-50%); color: rgba(255,255,255,.5); font-size: .8rem; pointer-events: none; } .search-results-dropdown { position: absolute; top: 100%; left: 0; right: 0; margin-top: 4px; background: #fff; border-radius: 12px; box-shadow: 0 8px 24px rgba(0,0,0,.15); z-index: 1050; max-height: 400px; overflow-y: auto; display: none; } .search-results-dropdown.show { display: block; } .search-results-dropdown .result-item { padding: .6rem 1rem; cursor: pointer; transition: background .1s; color: #1a1f36; text-decoration: none; display: block; } .search-results-dropdown .result-item:hover { background: var(--accent-soft); } .search-results-dropdown .result-type { font-size: .65rem; font-weight: 700; text-transform: uppercase; letter-spacing: .5px; color: var(--accent); margin-bottom: .15rem; } /* ── Toast container ── */ .toast-container { position: fixed; bottom: 1.5rem; right: 1.5rem; z-index: 1090; } .toast { border-radius: 10px; border: none; box-shadow: 0 4px 16px rgba(0,0,0,.12); animation: fadeIn .25s ease; } /* ── Person card ── */ .person-card { text-align: center; padding: 1.5rem 1rem; } .person-card .avatar { margin-bottom: .75rem; } .person-card .stat { font-size: .75rem; color: #94a3b8; } .person-card .stat-num { font-weight: 700; color: var(--accent); font-size: .9rem; } /* ── Document badge ── */ .doc-badge { background: #ecfdf5; color: #059669; font-size: .7rem; font-weight: 600; padding: .25em .6em; border-radius: 6px; } /* ── Clickable card ── */ .card-link { text-decoration: none; color: inherit; display: block; } .card-link:hover .card { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,.1); } /* ── Empty state ── */ .empty-state { text-align: center; padding: 3rem 1rem; color: #94a3b8; } .empty-state i { font-size: 2.5rem; opacity: .3; margin-bottom: .75rem; display: block; } /* ── Countdown badges ── */ .countdown { font-size: .7rem; font-weight: 600; padding: .2em .55em; border-radius: 6px; display: inline-block; } .countdown-urgent { background: #fef2f2; color: #dc2626; } .countdown-soon { background: #fff7ed; color: #c2410c; } .countdown-ok { background: #ecfdf5; color: #059669; } /* ── Agenda ── */ .agenda-row { transition: background .15s ease; } .agenda-row:hover { background: #f8fafc; } .agenda-row-scaduto { background: #fef2f2; } .agenda-row-scaduto:hover { background: #fee2e2; } .agenda-date { width: 42px; } .agenda-day { font-size: 1.1rem; font-weight: 700; line-height: 1.1; color: #1a1f36; } .agenda-month { font-size: .6rem; text-transform: uppercase; letter-spacing: .5px; color: #94a3b8; } .agenda-icon { width: 32px; height: 32px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: .85rem; flex-shrink: 0; } .agenda-icon-scadenza { background: var(--accent-soft); color: var(--accent); } .agenda-icon-conv { background: #f0f9ff; color: #0284c7; } .agenda-icon-danger { background: #fef2f2; color: #dc2626; } /* ── Comment actions dropdown ── */ .card .dropdown .btn-icon { opacity: 0; transition: opacity .15s; } .card:hover .dropdown .btn-icon { opacity: 1; } /* ── @Mentions ── */ .mention-link { color: var(--accent); font-weight: 600; text-decoration: none; background: var(--accent-soft); padding: .1em .35em; border-radius: 4px; } .mention-link:hover { text-decoration: underline; color: var(--accent-hover); } .mention-dropdown { position: absolute; bottom: 100%; left: 0; right: 0; margin-bottom: 4px; background: #fff; border-radius: 10px; box-shadow: 0 4px 16px rgba(0,0,0,.15); z-index: 1050; max-height: 220px; overflow-y: auto; display: none; } .mention-dropdown.show { display: block; } .mention-item { padding: .5rem .75rem; cursor: pointer; display: flex; align-items: center; gap: .5rem; font-size: .85rem; transition: background .1s; } .mention-item:hover, .mention-item.active { background: var(--accent-soft); } .mention-item small { margin-left: auto; } /* ── Tag pills ── */ .tag-pill { font-size: .68rem; font-weight: 600; padding: .2em .55em; border-radius: 20px; display: inline-flex; align-items: center; gap: .25rem; border: 1.5px solid; } .tag-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; } /* ── Appuntamento ── */ .agenda-icon-appuntamento { background: #fef3c7; color: #d97706; } .appuntamento-card { border-left: 3px solid #d97706 !important; }