- Modello Tag con nome e colore, M2M su Conversazione - Modello Appuntamento con luogo, note, partecipanti, link a Conversazione - @menzioni nei commenti e aggiornamenti: @username → link al profilo - Autocomplete JS per @menzioni nelle textarea - Auto-data conversazioni (default=now) - CRUD completo appuntamenti con permessi autore - Appuntamenti in agenda, dashboard, dettaglio conversazione - Crea riunione direttamente da una conversazione (pre-compila titolo e partecipanti) - Admin: Tag, Appuntamento registrati
401 lines
11 KiB
CSS
401 lines
11 KiB
CSS
/* ── 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;
|
|
}
|