:root{
  --ground:#F5F4F0; --panel:#FFFFFF; --ink:#1A1D21; --muted:#5B616B; --line:#E3E1DB; --line2:#EFEDE8;
  --accent:#1D4ED8; --accent-ink:#1E3A8A; --accent-soft:#E8EEFC; --accent-ring:#DCE6FB;
  --pers-bg:#FDEBD8; --pers-ink:#7C2D12; --pers-row:#FFF7EE; --pers-num:#C2410C;
  --bubble:#F1F0EC; --ok:#15803D; --done:#6B7280;
  --mono:'JetBrains Mono',ui-monospace,monospace;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --ground:#121417; --panel:#1A1D21; --ink:#ECEDEE; --muted:#A3A9B3; --line:#2C3036; --line2:#24282D;
    --accent:#5B8CFF; --accent-ink:#B9CCFF; --accent-soft:#1E2A47; --accent-ring:#22325A;
    --pers-bg:#3A2614; --pers-ink:#F6C99A; --pers-row:#221B15; --pers-num:#FB923C;
    --bubble:#24282D; --done:#8A919B;
  }
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--ground);color:var(--ink);font-family:Inter,system-ui,sans-serif}
button{font:inherit;cursor:pointer;color:inherit}
button:disabled{opacity:.35;cursor:default}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.mono{font-family:var(--mono)}

header.top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding:14px 20px;background:var(--panel);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:12px}
.logo{width:36px;height:36px;border-radius:8px;background:var(--ink);display:flex;align-items:center;justify-content:center}
.logo svg{stroke:var(--panel)}
.brand b{display:block;font-size:17px}
.brand small{color:var(--muted);font-size:12px}
.weeknav{display:flex;align-items:center;gap:8px}
.btn{height:44px;min-width:44px;padding:0 14px;border-radius:8px;border:1px solid var(--line);background:var(--panel);display:inline-flex;align-items:center;justify-content:center;gap:6px;font-weight:600;font-size:14px}
.btn.icon{padding:0}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.outline{border-color:var(--accent);color:var(--accent)}
.range{font-family:var(--mono);font-weight:600;padding:0 6px}

nav.week{display:grid;grid-template-columns:repeat(10,minmax(76px,1fr));gap:8px;padding:14px 20px;background:var(--panel);border-bottom:1px solid var(--line);overflow-x:auto}
.day{min-height:72px;border-radius:10px;border:1px solid var(--line);background:var(--ground);display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;padding:10px 12px;text-align:left}
.day .lbl{font-size:12px;font-weight:600;letter-spacing:.04em;color:var(--muted)}
.day .row{display:flex;justify-content:space-between;align-items:baseline;width:100%}
.day .num{font-family:var(--mono);font-size:22px;font-weight:700}
.day .cnt{font-size:12px;color:var(--muted)}
.day[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--panel)}
.day[aria-pressed="true"] .lbl,.day[aria-pressed="true"] .cnt{color:var(--panel)}
.day.today:not([aria-pressed="true"]){border:2px solid var(--accent)}
.day.drop{outline:3px dashed var(--accent);outline-offset:2px}

.layout{display:flex;flex-wrap:wrap;gap:20px;padding:20px;align-items:flex-start}
main{flex:999 1 520px;min-width:0;display:flex;flex-direction:column;gap:20px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.card-h{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:16px 18px;border-bottom:1px solid var(--line)}
.card-h h2{margin:0;font-size:19px}
.card-h .sub{font-size:13px;color:var(--muted);margin-top:2px}
.tag{font-size:11px;font-weight:600;padding:4px 8px;border-radius:999px;white-space:nowrap}
.tag.work{background:var(--accent-soft);color:var(--accent-ink)}
.tag.personal{background:var(--pers-bg);color:var(--pers-ink)}

ol.tasks,ul.tasks{list-style:none;margin:0;padding:0}
.task{display:flex;align-items:center;gap:10px;padding:10px 14px 10px 18px;border-bottom:1px solid var(--line2);background:var(--panel)}
.task.dragging{opacity:.4}
.task.over{box-shadow:inset 0 3px 0 var(--accent)}
.task .n{font-family:var(--mono);font-size:19px;font-weight:700;color:var(--accent);width:30px;flex:none;cursor:grab}
.task.personal{background:var(--pers-row)}
.task.personal .n{color:var(--pers-num)}
.task .date{font-size:12px;border:1px solid var(--line);border-radius:8px;height:40px;padding:0 6px;background:var(--panel);color:var(--ink);font:inherit;font-size:12px}
.when{display:inline-block;font-family:var(--mono);font-size:11px;font-weight:700;padding:2px 6px;border-radius:6px;background:var(--line2);color:var(--ink)}
.when.today{background:var(--ink);color:var(--panel)}
.when.late{background:#FDE2E2;color:#991B1B}
.group-h{display:flex;justify-content:space-between;align-items:baseline;padding:10px 18px;background:var(--ground);border-bottom:1px solid var(--line2);font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--muted)}
.group-h.late{color:#B91C1C}
.check{width:44px;height:44px;flex:none;border:none;background:transparent;display:flex;align-items:center;justify-content:center}
.check span{width:22px;height:22px;border-radius:6px;border:2px solid #9CA3AF;display:flex;align-items:center;justify-content:center}
.task.done .check span{background:var(--ink);border-color:var(--ink)}
.task.done .check svg{stroke:var(--panel)}
.task .body{flex:1;min-width:0}
.task .t{font-size:15px;font-weight:600;overflow-wrap:anywhere}
.task .m{font-size:12px;color:var(--muted);margin-top:3px}
.task.done .t{text-decoration:line-through;color:var(--done);font-weight:500}
.task .acts{display:flex;gap:4px;flex:none}
.task .acts .btn{width:40px;min-width:40px;height:40px}
.empty{padding:36px 18px;text-align:center;color:var(--muted);font-size:14px}
.addrow{display:flex;gap:8px;padding:12px 14px}
.addrow input,.chatform input{flex:1;min-width:0;height:44px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);padding:0 12px;font:inherit;font-size:14px}
.addrow select{height:44px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);padding:0 8px;font:inherit}

aside{flex:1 1 360px;min-width:0;max-width:480px;background:var(--panel);border:1px solid var(--line);border-radius:12px;display:flex;flex-direction:column;height:calc(100vh - 230px);min-height:520px;position:sticky;top:20px}
.jv-h{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line)}
.jv-h h2{margin:0;font-size:16px}
.dot{width:10px;height:10px;border-radius:50%;background:#9CA3AF}
.dot.on{background:var(--ok)}
.jv-h small{margin-left:auto;color:var(--muted);font-family:var(--mono);font-size:12px}
.voice{padding:14px 18px;border-bottom:1px solid var(--line);background:var(--ground);display:flex;align-items:center;gap:14px}
.mic{width:56px;height:56px;border-radius:50%;border:none;background:var(--accent);display:flex;align-items:center;justify-content:center;flex:none;box-shadow:0 0 0 6px var(--accent-ring);touch-action:none;-webkit-user-select:none;user-select:none}
.mic svg{stroke:#fff}
.mic.rec{background:#B91C1C;box-shadow:0 0 0 8px #FBD5D5}
.mic.busy{background:var(--muted)}
.voice .st{font-size:14px;font-weight:600}
.voice .hint{font-size:12px;color:var(--muted);margin-top:2px}
.msgs{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}
.msg{max-width:88%;padding:10px 14px;font-size:14px;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
.msg.me{align-self:flex-end;background:var(--ink);color:var(--panel);border-radius:12px 12px 2px 12px}
.msg.bot{align-self:flex-start;background:var(--bubble);border-radius:12px 12px 12px 2px}
.msg .src{display:block;font-size:10px;opacity:.65;margin-bottom:3px;letter-spacing:.04em;text-transform:uppercase}
.followup{align-self:stretch;border:1px solid var(--accent);background:var(--accent-soft);padding:12px 14px;border-radius:12px;font-size:14px}
.followup b{display:block;font-size:11px;letter-spacing:.06em;color:var(--accent-ink)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.chip{min-height:36px;padding:0 12px;border-radius:999px;border:1px solid var(--line);background:var(--panel);font-size:13px}
.chip.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.chatform{display:flex;gap:8px;padding:12px;border-top:1px solid var(--line)}

/* ---- καρτέλα project ---- */
.task .open-btn{flex:1;min-width:0;border:none;background:transparent;text-align:left;padding:4px 0;cursor:pointer}
.task .open-btn:hover .t{text-decoration:underline;text-underline-offset:3px}
.clip{display:inline-flex;align-items:center;gap:3px;font-family:var(--mono);font-size:11px;font-weight:700;color:var(--muted)}
.sheet{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;justify-content:flex-end;z-index:20}
.sheet[hidden]{display:none}
.sheet-card{background:var(--panel);width:100%;max-width:560px;height:100%;display:flex;flex-direction:column;box-shadow:-8px 0 24px rgba(0,0,0,.15)}
.sheet-h{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line)}
.sheet-body{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:14px}
.sheet-f{display:flex;gap:8px;padding:12px 18px;border-top:1px solid var(--line)}
.d-title{font:inherit;font-size:20px;font-weight:700;border:1px solid transparent;border-radius:8px;padding:8px;background:transparent;color:var(--ink)}
.d-title:hover,.d-title:focus{border-color:var(--line)}
.d-row{display:flex;gap:12px;flex-wrap:wrap}
.d-row .d-field{flex:1 1 160px}
.d-field{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:600;color:var(--muted)}
.d-field input,.d-field select,.d-field textarea{font:inherit;font-size:14px;font-weight:400;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:10px;min-height:44px}
.d-field textarea{resize:vertical}
.d-files-h{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:6px}
.d-files-h h3{margin:0;font-size:15px}
.drop{border:2px dashed var(--line);border-radius:12px;padding:12px;min-height:120px;display:flex;flex-direction:column;gap:10px}
.drop.over{border-color:var(--accent);background:var(--accent-soft)}
.drop-hint{font-size:12px;color:var(--muted);text-align:center;margin-top:auto}
.files{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.file{position:relative;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--ground);display:flex;flex-direction:column}
.file .thumb{aspect-ratio:4/3;display:flex;align-items:center;justify-content:center;background:var(--line2);border:none;padding:0;cursor:pointer;width:100%}
.file .thumb img{width:100%;height:100%;object-fit:cover}
.file .ext{font-family:var(--mono);font-weight:700;font-size:15px;color:var(--accent-ink);background:var(--accent-soft);padding:8px 10px;border-radius:8px}
.file .fn{font-size:12px;padding:6px 8px 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file .fs{font-size:11px;color:var(--muted);padding:0 8px 6px}
.file .fdel{position:absolute;top:4px;right:4px;width:32px;height:32px;min-width:32px;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;border:none;display:flex;align-items:center;justify-content:center}
.prog{font-size:13px;color:var(--accent-ink)}
.viewer{position:fixed;inset:0;background:rgba(0,0,0,.9);z-index:30;display:flex;align-items:center;justify-content:center;padding:16px}
.viewer[hidden]{display:none}
.viewer img{max-width:100%;max-height:100%;object-fit:contain}
.viewer .btn{position:absolute;top:16px;right:16px}

#login{position:fixed;inset:0;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center;padding:16px;z-index:10}
#login.show{display:flex}
#login form{background:var(--panel);padding:24px;border-radius:12px;width:100%;max-width:360px;display:flex;flex-direction:column;gap:12px}
#login input{height:44px;border-radius:8px;border:1px solid var(--line);padding:0 12px;font:inherit;background:var(--panel);color:var(--ink)}

@media (max-width: 900px){
  .layout{padding:12px;gap:12px}
  aside{position:static;height:auto;max-width:none;min-height:0;order:-1}
  .msgs{max-height:35vh}
  .msgs{max-height:50vh}
  .task .acts .btn.del{display:none}
  
  header.top{padding:10px 14px}
  .weeknav .range{font-size:13px}
  nav.week{grid-template-columns:repeat(10,64px);padding:10px 12px;gap:6px}
  .day{min-height:60px;padding:8px 9px}
  .day .num{font-size:19px}
  .card-h .tag{display:none}
  .task{display:grid;grid-template-columns:26px 40px 1fr;column-gap:8px;row-gap:6px;align-items:start;padding:12px 14px 10px}
  .task .n{grid-column:1;grid-row:1;width:auto;font-size:17px;padding-top:9px}
  .task .check{grid-column:2;grid-row:1}
  .task .open-btn{grid-column:3;grid-row:1;padding:4px 0 0;min-height:0;height:auto}
  .task .chips{grid-column:3;grid-row:2}
  .task .acts{grid-column:3;grid-row:3;display:flex;gap:6px;width:100%}
  .task .acts .date{flex:1;min-width:0;height:36px}
  .task .acts .btn{width:36px;min-width:36px;height:36px}
  .task .m{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .task.done .chips{display:none}
  .addrow{flex-wrap:wrap}
  .addrow input{flex:1 1 100%}
  .addrow select{flex:1}
  .addrow .btn{flex:1}
  .fin-cards{grid-template-columns:1fr 1fr;padding:10px}
  .fin-card b{font-size:15px}

  .fab{display:flex}
}
.fab{display:none;position:fixed;right:16px;bottom:16px;z-index:5}

.day.donepill .num{display:flex;align-items:center;color:var(--ok,#15803D)}
.day.donepill[aria-pressed="true"] .num{color:var(--panel)}
.day.donepill svg{stroke:currentColor}

/* ---- στάδια, οικονομικά ---- */
.d-sec{font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin:18px 0 8px}
.d-sec small{text-transform:none;letter-spacing:0;font-weight:500}
.stages{display:flex;flex-wrap:wrap;gap:6px}
.stages button{border:1px solid var(--line);background:var(--ground);border-radius:999px;padding:7px 12px;font-size:13px;font-weight:600;color:var(--muted)}
.stages button[aria-checked="true"]{background:var(--ink);border-color:var(--ink);color:var(--panel)}
.d-links{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 0}
.d-links a{font-size:13px;font-weight:600;border:1px solid var(--line);border-radius:8px;padding:6px 10px;color:var(--ink);text-decoration:none}
.fin-sum{margin-top:12px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:13px;display:grid;grid-template-columns:1fr auto;gap:4px 12px;background:var(--ground)}
.fin-sum b{font-family:var(--mono)}
.fin-sum .due{color:#B91C1C;font-weight:700}
.stg{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:#E8EAEE;color:#374151;white-space:nowrap}
.stg.offer{background:#FEF3C7;color:#92400E}.stg.approved{background:#E0E7FF;color:#3730A3}
.stg.progress{background:#DBEAFE;color:#1E40AF}.stg.delivered{background:#CFFAFE;color:#155E75}
.stg.invoiced{background:#FFEDD5;color:#9A3412}.stg.paid{background:#DCFCE7;color:#166534}
.owe{font-family:var(--mono);font-weight:700;color:#9A3412;font-size:12px}
.fin-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;padding:14px 16px}
.fin-card{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--ground)}
.fin-card small{display:block;font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--muted);text-transform:uppercase}
.fin-card b{font-family:var(--mono);font-size:18px}
.fin-card.hot b{color:#9A3412}
.fin-tbl{width:100%;border-collapse:collapse;font-size:13px}
.fin-tbl th{text-align:left;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--line)}
.fin-tbl td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.fin-tbl td.num,.fin-tbl th.num{text-align:right;font-family:var(--mono)}
.fin-tbl tr.work td:first-child{box-shadow:inset 3px 0 0 #1D4ED8}
.fin-tbl button.lnk{background:none;border:0;padding:0;font:inherit;font-weight:600;text-align:left;color:var(--ink);cursor:pointer}
.fin-wrap{overflow-x:auto}
[hidden]{display:none!important}

.task .chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;flex:none}
