Initial commit: Diario Conversazioni Olimpic Nastri
- Django 5.2 + PostgreSQL + Gunicorn - Conversazioni, Obiettivi, Documenti PDF, Persone - Commenti e aggiornamenti con modifica/eliminazione - Agenda, ricerca live, giorni rimanenti scadenze - Bootstrap 5 + HTMX + toast notifications - Deploy: Nginx + Gunicorn + SSL
This commit is contained in:
329
static/css/style.css
Normal file
329
static/css/style.css
Normal file
@@ -0,0 +1,329 @@
|
||||
/* ── 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;
|
||||
}
|
||||
Reference in New Issue
Block a user