.ico{flex-shrink:0}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:currentColor;flex-shrink:0}
.dot-lg{width:14px;height:14px}

:root{
  /* Neutral, cool-toned grays -- the earlier warm/cream bias read as
     "brown" against real content, so these lean neutral-to-cool instead,
     without touching the pink/teal/etc. accent hues. */
  --bg:#F6F7F8;--w:#fff;--bd:#E5E7EA;--bd2:#D3D7DC;
  --tx:#1C1F23;--tx2:#6B7078;--tx3:#9CA1AA;
  /* Same hues, a touch less saturated/bright -- reads calmer and more
     "professional software" than the previous neon versions, without
     losing which color means what. */
  --pk:#D6428F;--pkl:#FDE8F4;
  --tl:#0E8A97;--tll:#E0F4F6;
  --gn:#2FAE5C;--gnl:#DCFCE7;
  --ye:#E0942A;--yel:#FEF3C7;
  --rd:#D64B4B;--rdl:#FEE2E2;
  --bl:#3D6FD6;--bll:#DBEAFE;
  --pu:#7C5CD9;--pul:#EDE9FE;
  --sh:0 1px 3px rgba(33,30,27,.05),0 6px 16px rgba(33,30,27,.05);
  --shm:0 8px 28px rgba(33,30,27,.12);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;overflow:hidden}
body{font-family:'Inter',sans-serif;background:var(--bg);color:var(--tx);font-size:13px;display:flex}

/* Landing page: public marketing pitch, no auth form -- a real product
   screenshot instead of a feature list, one primary action ("Kostenlos
   starten"), login reachable via the nav. Hands off to the separate
   #login-screen card below (see app.js showAuthScreen/showLandingScreen). */
.landing-bg{position:relative;display:flex;flex-direction:column;width:100vw;height:100vh;height:100dvh;overflow-y:auto;background:var(--bg)}
.landing-nav{display:flex;align-items:center;justify-content:space-between;padding:18px 32px;flex-shrink:0;flex-wrap:wrap;gap:10px}
.landing-brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:15px}
.landing-nav-actions{display:flex;align-items:center;gap:20px}
.landing-nav-link{font-size:12.5px;color:var(--tx2);text-decoration:none;font-weight:600}
.landing-nav-link:hover{color:var(--tx)}
.landing-hero{flex:1;display:flex;align-items:center;gap:48px;max-width:1200px;width:100%;margin:0 auto;padding:16px 32px 36px}
.landing-hero-copy{flex:1;min-width:0;max-width:420px}
.landing-hero-copy h1{font-size:32px;font-weight:800;line-height:1.24;margin-bottom:12px}
.landing-sub{font-size:14px;color:var(--tx2);line-height:1.6;margin-bottom:22px}
.landing-cta-row{display:flex;align-items:center;gap:16px;margin-bottom:12px;flex-wrap:wrap}
.landing-cta{padding:11px 22px;font-size:13.5px}
.landing-cta-link{font-size:11.5px;color:var(--tx2);text-decoration:underline}
.landing-trust{font-size:11px;color:var(--tx3)}
/* container-type so the callout badges below can size themselves in cqw
   (% of THIS element's own width) -- ties their font-size/padding to how
   large the screenshot itself is actually rendered, so they stay the same
   RELATIVE size at any viewport instead of the fixed-px approach that
   previously made them balloon to oversized once the image scaled down
   from its native capture width and cover the content they point at. */
.landing-shot-wrap{position:relative;flex:1.55;min-width:0;container-type:inline-size}
.landing-shot{display:block;width:100%;border-radius:12px;border:1px solid var(--bd);box-shadow:0 20px 50px rgba(28,31,35,.16),0 4px 14px rgba(28,31,35,.08)}
/* A quiet, looping product tour: each badge pops in over its anchor, holds,
   then fades before the next one takes its turn. All six share one 18s
   timeline (six 3s slots) via the SAME keyframes -- a negative animation-delay
   just rewinds each badge's personal clock into a different slot, so they
   never need their own @keyframes or JS scheduling to stay in sequence. */
.shot-tag{position:absolute;background:#000;box-shadow:var(--shm);border-radius:99px;padding:clamp(3px,0.55cqw,7px) clamp(7px,1.3cqw,14px);font-size:clamp(9px,1.05cqw,13px);font-weight:700;color:#fff;white-space:nowrap;pointer-events:none;opacity:0;animation:shotTagTour 18s cubic-bezier(.22,1,.36,1) infinite}
.shot-tag:nth-of-type(1){animation-delay:0s}
.shot-tag:nth-of-type(2){animation-delay:-15s}
.shot-tag:nth-of-type(3){animation-delay:-12s}
.shot-tag:nth-of-type(4){animation-delay:-9s}
.shot-tag:nth-of-type(5){animation-delay:-6s}
.shot-tag:nth-of-type(6){animation-delay:-3s}
@keyframes shotTagTour{
  0%{opacity:0;transform:translate(-50%,-35%) scale(.85)}
  4%{opacity:1;transform:translate(-50%,-50%) scale(1)}
  13%{opacity:1;transform:translate(-50%,-50%) scale(1)}
  16.5%{opacity:0;transform:translate(-50%,-62%) scale(.92)}
  100%{opacity:0;transform:translate(-50%,-62%) scale(.92)}
}
@media (prefers-reduced-motion:reduce){
  .shot-tag{animation:none;opacity:1;transform:translate(-50%,-50%)}
}
/* One flowing row, not a boxed-in grid or a row of pills -- no background
   of its own (blends straight into the page background), just a minimal
   dot bullet + text per item, wrapping only if it doesn't fit. */
.landing-capabilities{width:100%;max-width:900px;margin:0 auto;padding:0 32px 4px;flex-shrink:0;transform:translateY(-40px)}
.landing-cap-kicker{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--tx3);text-align:center;margin-bottom:16px}
.landing-cap-grid{display:flex;justify-content:center;flex-wrap:wrap;row-gap:10px;column-gap:28px}
.landing-cap-grid div{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--tx2);font-weight:500}
.landing-cap-grid div::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--gn);flex-shrink:0}
.landing-bg .login-footer{margin:26px 0 32px}
@media (max-width:900px){
  .landing-hero{flex-direction:column;padding:6px 20px 30px;gap:28px}
  .landing-hero-copy{max-width:520px;text-align:center}
  .landing-cta-row{justify-content:center}
  .landing-shot-wrap{width:100%}
  .shot-tag{display:none}
  /* The -40px tuck above is tuned for the desktop side-by-side layout;
     stacked on mobile it pulls this section up into the screenshot's
     bottom edge instead. */
  .landing-capabilities{transform:none}
}
@media (max-width:480px){
  .landing-nav{padding:14px 18px}
  .landing-nav-link-opt{display:none}
  .landing-hero-copy h1{font-size:24px}
}

/* Login / register card -- reached via "Kostenlos starten"/"Einloggen"
   above, or directly for a deep link (invite, password reset, SSO error). */
.login-bg{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;width:100vw;height:100vh;height:100dvh;overflow-y:auto;background:var(--bg);padding:28px 20px}
.login-footer{position:relative;z-index:1;flex-shrink:0;text-align:center;font-size:11.5px;color:var(--tx3)}
.login-footer a{color:var(--tx2);text-decoration:none;font-weight:600}
.login-footer a:hover{text-decoration:underline}
.login-card{position:relative;z-index:1;background:var(--w);border-radius:14px;box-shadow:var(--shm);padding:26px;width:400px;max-width:100%;flex-shrink:0}
.login-back-link{display:inline-block;font-size:11.5px;font-weight:600;color:var(--tx2);text-decoration:none;margin-bottom:14px}
.login-back-link:hover{color:var(--pk)}
.login-title{font-size:22px;font-weight:700;margin-bottom:4px;display:flex;align-items:center;gap:10px}
.login-sub{font-size:12px;color:var(--tx2);margin-bottom:16px}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.field{margin-bottom:10px}
.field label{font-size:11px;font-weight:600;color:var(--tx2);display:block;margin-bottom:4px}
.field input,.field select{width:100%;padding:8px 10px;border:1px solid var(--bd);border-radius:10px;font-family:inherit;font-size:13px;background:var(--w);color:var(--tx)}
.field input:focus,.field select:focus{outline:2px solid var(--pkl);border-color:var(--pk)}
.sso-btn{width:100%;justify-content:center;padding:9px;margin-bottom:6px;text-decoration:none}
.sso-divider{display:flex;align-items:center;gap:10px;margin:10px 0;font-size:11px;color:var(--tx3)}
.sso-divider::before,.sso-divider::after{content:"";flex:1;height:1px;background:var(--bd)}
.login-tabs{display:flex;gap:6px;margin-bottom:14px}
.login-tab{flex:1;padding:8px 12px;border-radius:10px;font-size:12px;font-weight:600;text-align:center;cursor:pointer;border:none;background:var(--bg);color:var(--tx2);font-family:inherit}
.login-tab.on{background:var(--pk);color:#fff}
.interval-tabs{display:flex;gap:6px;margin-bottom:14px;max-width:280px}
.interval-tab{flex:1;padding:6px 12px;border-radius:10px;font-size:12px;font-weight:600;text-align:center;cursor:pointer;border:none;background:var(--bg);color:var(--tx2);font-family:inherit}
.interval-tab.on{background:var(--pk);color:#fff}
.user-pill{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:10px;border:1px solid var(--bd);cursor:pointer;transition:all .12s;background:var(--w);width:100%;font-family:inherit;text-align:left;margin-bottom:6px}
.user-pill:hover{border-color:var(--pk);background:var(--pkl)}
.user-pill .ua{width:30px;height:30px}

.pw-strength{display:flex;align-items:center;gap:8px;margin:-4px 0 10px}
.pw-strength-track{flex:1;height:5px;border-radius:99px;background:var(--bd)}
.pw-strength-fill{height:100%;border-radius:99px;transition:width .15s ease,background-color .15s ease}
.pw-strength-fill.weak{background:var(--rd)}
.pw-strength-fill.medium{background:var(--ye)}
.pw-strength-fill.strong{background:var(--gn)}
.pw-strength-label{font-size:10.5px;font-weight:700;flex-shrink:0}
.pw-strength-label.weak{color:var(--rd)}
.pw-strength-label.medium{color:var(--ye)}
.pw-strength-label.strong{color:var(--gn)}
.pw-reqs{margin:-2px 0 10px;display:flex;flex-direction:column;gap:2px}
.pw-req{font-size:10.5px;color:var(--tx3)}
.pw-req.ok{color:var(--gn)}

/* Registration: "Mit Vorlage starten" / "Leeres Projekt" choice */
.reg-start-opts{display:flex;gap:8px}
.reg-start-opt{flex:1;display:flex;align-items:flex-start;gap:8px;padding:10px;border-radius:10px;border:1px solid var(--bd);background:var(--w);cursor:pointer;text-align:left;font-family:inherit}
.reg-start-opt:hover{border-color:var(--bd2)}
.reg-start-opt.on{border-color:var(--pk);background:var(--pkl)}
.reg-start-ico{font-size:16px;flex-shrink:0}
.reg-start-title{font-size:12px;font-weight:600;color:var(--tx)}
.reg-start-sub{font-size:10.5px;color:var(--tx2);margin-top:1px}

/* Sidebar and topbar float as rounded cards (same language as .hub-card)
   instead of edge-to-edge bars with hairline borders. */
.sb{width:198px;flex-shrink:0;background:var(--w);border:1px solid var(--bd);border-radius:16px;box-shadow:var(--sh);overflow:hidden;margin:12px 0 12px 12px;display:flex;flex-direction:column;height:calc(100vh - 24px);height:calc(100dvh - 24px)}
.sb-logo{padding:15px 13px 11px;border-bottom:1px solid var(--bd);display:flex;align-items:center;gap:9px}
.sb-close{display:none;margin-left:auto;width:28px;height:28px;border-radius:8px;border:1px solid var(--bd);background:var(--w);color:var(--tx);font-size:15px;cursor:pointer;align-items:center;justify-content:center;flex-shrink:0;font-family:inherit}
.sb-close:hover{background:var(--bg)}
.li{width:30px;height:30px;border-radius:10px;background:linear-gradient(135deg,var(--pk),#A83872);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:13px;flex-shrink:0}
.sb-nav{padding:10px 8px;flex:1;overflow-y:auto;min-height:0}
.ns{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--tx3);padding:8px 6px 4px}
.ni{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;cursor:pointer;font-size:12px;color:var(--tx2);margin-bottom:1px;transition:all .12s;border:none;background:none;font-family:inherit;width:100%;text-align:left}
.ni:hover{background:var(--bg);color:var(--tx)}
/* Neutral selected state (not forced pink) so it doesn't fight the per-
   section badge color next to it -- e.g. selecting "Controlling" (amber
   badge) no longer paints the whole row pink. */
.ni.on{background:var(--bg);color:var(--tx);font-weight:600;box-shadow:inset 2px 0 0 var(--pk)}
/* Small colored icon badge per nav item (grouped by section) instead of a
   bare emoji floating with no color -- leans into color as the visual
   device the way the reference design's feature-card icons do. */
.ni-ico{width:22px;height:22px;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0}
.ni-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nb{flex-shrink:0;margin-left:auto;background:var(--pk);color:#fff;font-size:9px;font-weight:700;padding:1px 5px;border-radius:99px}
.nb-lock{background:var(--tx3)}
.sb-user{padding:10px 12px;border-top:1px solid var(--bd);display:flex;align-items:center;gap:9px;cursor:pointer;position:relative}
.sb-user:hover{background:var(--bg)}
.ua{width:30px;height:30px;border-radius:99px;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:#fff;flex-shrink:0}

/* User popup */
.user-popup{position:absolute;bottom:54px;left:8px;right:8px;background:var(--w);border:1px solid var(--bd);border-radius:10px;box-shadow:var(--shm);padding:8px;z-index:100;max-height:60vh;overflow-y:auto}
.user-popup h4{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--tx3);padding:6px 4px}
.user-popup-item{display:flex;align-items:center;gap:8px;padding:6px 7px;border-radius:8px;cursor:pointer}
.user-popup-item:hover{background:var(--bg)}
.user-popup-item.on{background:var(--pkl)}
.user-popup-item .ua{width:26px;height:26px;font-size:9px}

/* Organization switcher */
.sb-org{padding:10px 13px;border-bottom:1px solid var(--bd);display:flex;align-items:center;gap:9px;cursor:pointer;position:relative}
.sb-org:hover{background:var(--bg)}
.org-popup{position:absolute;top:calc(100% + 4px);left:8px;right:8px;background:var(--w);border:1px solid var(--bd);border-radius:10px;box-shadow:var(--shm);padding:8px;z-index:100;max-height:60vh;overflow-y:auto}
.org-popup h4{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--tx3);padding:6px 4px}
.org-popup-item{display:flex;align-items:center;gap:8px;padding:6px 7px;border-radius:8px;cursor:pointer;font-size:12px}
.org-popup-item:hover{background:var(--bg)}
.org-popup-item.on{background:var(--pkl);color:var(--pk);font-weight:600}

.main{flex:1;display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden;min-width:0;padding-top:12px}
.topbar{height:52px;background:var(--w);border:1px solid var(--bd);border-radius:14px;box-shadow:var(--sh);margin:0 16px;display:flex;align-items:center;padding:0 16px;gap:10px;flex-shrink:0}
.topbar-t{font-size:15px;font-weight:700;flex:1}
.content{flex:1;overflow-y:auto;padding:16px}

.btn{padding:6px 12px;border-radius:9px;font-size:12px;font-weight:600;cursor:pointer;border:none;font-family:inherit;transition:all .12s;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.btn-pk{background:var(--pk);color:#fff}.btn-pk:hover{background:#A83872}
.btn-g{background:var(--w);color:var(--tx);border:1px solid var(--bd)}.btn-g:hover{background:var(--bg);border-color:var(--bd2)}
.row-ib{background:none;border:none;color:var(--tx3);cursor:pointer;padding:4px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:0;transition:background .12s,color .12s}.row-ib:hover{background:var(--bg);color:var(--tx)}.row-ib.del:hover{color:var(--rd)}
.row-ib+.row-ib{margin-left:2px}
.btn-rd{background:var(--rd);color:#fff}.btn-rd:hover{background:#dc2626}
.btn-am{background:#FFB32E;color:#fff}.btn-am:hover{background:#E6A029}
.card{background:var(--w);border:1px solid var(--bd);border-radius:14px;padding:18px;box-shadow:var(--sh)}
.resizable-list{resize:vertical;overflow-y:auto;min-height:44px}
.badge{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:99px;font-size:10px;font-weight:600}
.bg{background:var(--gnl);color:#16A34A}.by{background:var(--yel);color:#D97706}.br{background:var(--rdl);color:#DC2626}
.bb{background:var(--bll);color:#2563EB}.bp{background:var(--pul);color:#7C3AED}.bpk{background:var(--pkl);color:var(--pk)}
.bgr{background:var(--bg);color:var(--tx2);border:1px solid var(--bd)}.bt{background:var(--tll);color:var(--tl)}
.pbar{height:5px;background:var(--bg);border-radius:99px;overflow:hidden}.pfill{height:100%;border-radius:99px;transition:width .3s}
.av{width:26px;height:26px;border-radius:99px;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:#fff;flex-shrink:0;border:2px solid var(--w)}
.avs{display:flex}.avs .av{margin-left:-6px}.avs .av:first-child{margin-left:0}
.ph{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px;gap:10px;flex-wrap:wrap}
.pt{font-size:17px;font-weight:700}.ps{font-size:11px;color:var(--tx2);margin-top:2px}
.vs{display:flex;gap:6px}
/* Pill nav rows (Meine Aufgaben, project sub-nav): btn-pk has no border while
   btn-g has 1px, and emoji glyphs (⏱) inflate the line box -- pin both so
   every pill is the same height, also when the row wraps on mobile. */
.pill-nav{align-items:center}
.pill-nav>.btn{height:30px;line-height:16px;box-sizing:border-box}
.pill-nav>.btn-pk{border:1px solid var(--pk)}
/* Borderless .vb segments need the grey track to show which one is active */
.vs:has(> .vb){gap:3px;background:var(--bg);border:1px solid var(--bd);border-radius:8px;padding:2px}
.vb{padding:4px 10px;border-radius:5px;font-size:11px;font-weight:500;cursor:pointer;border:none;background:none;font-family:inherit;color:var(--tx2);transition:all .12s}
.vb.on{background:var(--w);color:var(--tx);box-shadow:var(--sh);font-weight:600}
.view{display:none}.view.on{display:block}
select,input,textarea{background:var(--w);border:1px solid var(--bd);color:var(--tx);padding:5px 9px;border-radius:8px;font-family:inherit;font-size:12px}
input[type=date]{padding:4px 8px}
/* Filter bar (CRM lists/pipeline): one grid, every field label-over-control
   with identical label height and control height, so labels and boxes line
   up in a row instead of drifting with each control's intrinsic size. */
.filter-bar{padding:14px 16px;margin-bottom:14px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;align-items:end}
.fb-field{display:flex;flex-direction:column;gap:4px;min-width:0}
.fb-field.fb-wide{grid-column:span 2}
.fb-field>label{font-size:10.5px;font-weight:500;color:var(--tx2);line-height:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fb-field>input,.fb-field>select{width:100%;min-width:0;height:32px;padding:0 10px}
.filter-bar .fb-reset{height:32px;justify-self:start;white-space:nowrap}
@media (max-width:640px){.fb-field.fb-wide{grid-column:1/-1}}
button{cursor:pointer}

.week-badge{background:var(--pkl);color:var(--pk);border:1px solid rgba(233,30,140,.2);border-radius:8px;padding:5px 12px;font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:6px}
/* The 2W/4W/8W planning-window toggle inline inside the week-badge pill --
   shares the Dashboard forecast chart, Dashboard KPI tiles, and
   Team-Übersicht utilization (see state.planningWeeks in app.js). */
.wb-btn{background:transparent;border:1px solid rgba(233,30,140,.35);color:var(--pk);border-radius:5px;padding:1px 6px;font-size:10px;font-weight:700;cursor:pointer;line-height:1.5}
/* Same light-pink-chip treatment as the "Heute" marker and the milestone
   accent border elsewhere on this page, instead of a solid pk fill --
   a same-size box in solid color next to outlined siblings reads as
   visually heavier/bigger than they are, which is exactly what made the
   selected week button look "taller" than the others despite being the
   same box size. */
.wb-btn.on{background:var(--pkl);color:var(--pk);border-color:var(--pk)}
.wb-btn:hover:not(.on){background:rgba(233,30,140,.12)}

.empty{color:var(--tx3);font-size:12px;text-align:center;padding:20px}
.attach-dropzone{flex:1;min-width:220px;border:1px dashed var(--bd);border-radius:8px;padding:8px 10px;display:flex;align-items:center;gap:8px;cursor:pointer;transition:border-color .15s,background .15s}
.attach-dropzone.drag-over{border-color:var(--pk);background:var(--pkl)}
.upload-panel{position:fixed;right:16px;bottom:16px;z-index:1200;width:360px;max-width:calc(100vw - 32px);max-height:50vh;overflow-y:auto;background:var(--bg2,var(--bg));border:1px solid var(--bd);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.18);font-size:11px}
.upload-panel-head{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border-bottom:1px solid var(--bd);font-weight:700;font-size:12px;position:sticky;top:0;background:inherit}
.upload-panel-row{padding:8px 10px;border-bottom:1px dashed var(--bd)}
.upload-panel-row:last-child{border-bottom:none}
.upload-panel-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.upload-panel-bar{height:4px;border-radius:2px;background:var(--bd);margin:5px 0;overflow:hidden}
.upload-panel-bar>div{height:100%;width:0;background:var(--pk);transition:width .2s}
.upload-panel-row.ok .upload-panel-bar>div{background:var(--gn)}
.upload-panel-row.err .upload-panel-bar>div{background:var(--rd);width:100%}
.upload-panel-status{color:var(--tx2);word-break:break-word}
.upload-panel-row.err .upload-panel-status{color:var(--rd)}

/* Plan gating (see plans.py / app.js applyPlanStateToNav, planLockedHtml):
   a module not included in the org's current plan stays visible but
   dimmed, rather than being hidden or only failing after a click -- reuses
   the app's existing "muted = reduced opacity" idiom (e.g. .pc.drag-src)
   instead of a blur, which is cheaper to keep legible in dark mode. */
.ni-locked{opacity:.5}
.sb-nav.hide-locked .ni.ni-locked{display:none}
.locked-badge{display:inline-flex;align-items:center;gap:4px;background:var(--pkl);color:var(--pk);font-size:10px;font-weight:700;padding:3px 10px;border-radius:99px}
.locked-cta{border-color:var(--pkl)}

/* Nav entries for modules the org hasn't switched on at all stay collapsed
   by default (clean sidebar during normal use) but can be revealed with one
   click via #nav-more-toggle, so users can still discover what's available
   -- see app.js applyPlanStateToNav / toggleHiddenNavModules. */
.ni.ni-hidden{display:none}
.sb-nav.show-hidden .ni.ni-hidden{display:flex}
.ni-more{display:none;align-items:center;justify-content:center;gap:6px;width:100%;padding:7px 8px;margin-top:6px;border:1px dashed var(--bd);border-radius:8px;background:none;color:var(--tx3);font-size:11px;font-weight:600;cursor:pointer;font-family:inherit}
.ni-more:hover{background:var(--bg);color:var(--tx2)}

/* DASHBOARD */
.sg{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:16px}
/* min-width:0 stops a .sc whose content can't shrink (e.g. the donut-chart
   tile's flex row: fixed-size SVG + text side by side) from forcing its
   grid track past minmax()'s 180px floor -- without it, that one track's
   content-based automatic minimum can blow the whole .sg row wider than
   its container, and since .main clips overflow, the excess silently
   disappears off the right edge instead of wrapping or scrolling. */
.sc{background:var(--w);border:1px solid var(--bd);border-radius:14px;padding:15px;box-shadow:var(--sh);min-width:0}
.si{width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:14px;margin-bottom:10px}
.sv{font-size:24px;font-weight:700;line-height:1}.sl{font-size:11px;color:var(--tx2);margin-top:3px}.sd{font-size:10px;margin-top:5px}
.pg{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}
/* Fixed height (not just min-height) so every tile is identical regardless
   of row. .pf pins to the bottom via margin-top:auto so leftover space (a
   one-line title, no alert box) is absorbed invisibly in the middle instead
   of the footer drifting or the card resizing. */
.pc{background:var(--w);border:1px solid var(--bd);border-left:3px solid var(--bd);border-radius:0 14px 14px 0;padding:14px;cursor:grab;transition:all .15s;box-shadow:var(--sh);position:relative;display:flex;flex-direction:column;height:224px;overflow:hidden}
.pc:hover{box-shadow:var(--shm)}
.pc.drag-src{opacity:.35;transform:scale(.98)}.pc.drag-ov{outline:2px dashed var(--pk);outline-offset:2px;background:var(--pkl)}
.drag-h{position:absolute;top:10px;right:10px;color:var(--tx3);font-size:11px;cursor:grab}

/* Touch drag & drop (see initTouchDnD in app.js): native HTML5 [draggable]
   never fires from a touchscreen, so touch gestures are bridged into the
   same dragstart/dragover/drop events every *DnD() setup function already
   listens for. -webkit-touch-callout/user-select keep a long-press from
   opening the OS text-selection/callout menu on every draggable card, row
   or handle instead of picking it up. */
[draggable="true"]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
.touch-drag-ghost{position:fixed;pointer-events:none;z-index:99999;opacity:.92;box-shadow:var(--shm);transform:scale(1.03)}
tr.ms-drag-row{cursor:grab}
tr.ms-drag-row.drag-src{opacity:.35}
tr.ms-drop-row.ms-drop-hover td{background:var(--pkl)!important;box-shadow:inset 0 0 0 2px var(--pk)}
tr.ms-drag-row.ms-drop-hover td{box-shadow:inset 0 2px 0 var(--pk)}
tr.ms-drag-row .drag-handle{cursor:grab}
.pc-alert{display:flex;align-items:center;gap:6px;background:var(--rdl);border-radius:6px;padding:3px 7px;min-width:0;flex:1;margin-left:8px}
.pc-alert-ic{width:13px;height:13px;border-radius:50%;background:var(--w);color:var(--rd);display:flex;align-items:center;justify-content:center;font-size:8px;flex-shrink:0}
.pc-alert-tx{min-width:0;font-size:10px;line-height:1.4;color:var(--rd);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pn{font-size:14px;font-weight:700;margin-bottom:3px;padding-right:18px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pm{font-size:10px;color:var(--tx2);margin-bottom:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pm-av{display:inline-block;vertical-align:middle;margin-right:5px}
/* Tinted inset box (same var(--bg)-on-var(--w) idiom already used for the
   "4-Wochen-Fenster" etc. sidebar panels in Projektdetail) instead of a bare
   divider-row -- the numbers need to read as the card's headline stat, not
   blend into the surrounding text. */
.pmg{display:grid;grid-template-columns:1fr auto 1fr auto 1fr;align-items:center;margin-bottom:10px;background:var(--bg);border-radius:10px;padding:9px 4px}
.pmg.pmg-2{grid-template-columns:1fr auto 1fr}
.pmg-div{width:1px;background:var(--bd);height:26px;justify-self:center}
.pmi{text-align:center}.pmv{font-size:17px;font-weight:700;line-height:1.2;margin-top:2px}.pml{font-size:9px;color:var(--tx3);text-transform:uppercase;letter-spacing:.02em}
.pf{display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding-top:8px}

/* Apple Health/Stocks-style chart entrance, shared by every line/area chart
   in the app (Dashboard forecast + Projektdetail Meilenstein-Timeline) so
   they read as one consistent chart language: gradient-filled smooth curves
   that grow up from their own baseline rather than just appearing. */
@keyframes chartGrow{from{transform:scaleY(.82);opacity:0}to{transform:scaleY(1);opacity:1}}
.chart-grow{transform-origin:bottom;animation:chartGrow .55s cubic-bezier(.22,1,.36,1) both}
@media (prefers-reduced-motion: reduce){.ms-util-chart{animation:none}}

/* KANBAN */
.kboard{display:flex;gap:12px;overflow-x:auto;padding-bottom:4px;height:calc(100vh - 148px);height:calc(100dvh - 148px)}
.kcol{width:242px;flex-shrink:0;background:var(--bg);border-radius:10px;border:1px solid var(--bd);display:flex;flex-direction:column;max-height:100%}
.kcol-status{width:auto;flex:1 1 242px;min-width:242px}
.kch{padding:10px 12px;display:flex;align-items:center;gap:7px;border-bottom:1px solid var(--bd);flex-shrink:0}
.kcd{width:8px;height:8px;border-radius:99px;flex-shrink:0}.kct{font-size:12px;font-weight:700;flex:1}
.kcc{background:var(--w);border:1px solid var(--bd);border-radius:99px;font-size:10px;font-weight:600;padding:1px 6px;color:var(--tx2)}
.ktasks{padding:8px;display:flex;flex-direction:column;gap:7px;overflow-y:auto;flex:1;min-height:60px}

/* CRM Pipeline board: a fixed, small number of columns (Lead/Opportunity/
   Customer/Verloren) next to a KPI sidebar -- unlike the project Kanban
   (many columns, meant to scroll), these should always fit side by side
   without horizontal scrolling. Equal-share flex columns instead of the
   default fixed+non-shrinking width, and no horizontal scrollbar. */
#crm-pipeline-board{overflow-x:visible}
#crm-pipeline-board .kcol{width:auto;flex:1 1 0;min-width:0;flex-shrink:1}

/* Ticket Kanban: six fixed columns (Posteingang -> Archiviert) that share
   the width equally and only scroll horizontally on narrow screens; each
   column's card list scrolls on its own, so the board stays one screen tall. */
.tk-board{height:calc(100vh - 330px);height:calc(100dvh - 330px);min-height:420px;overflow-x:hidden}
.tk-board .tk-col{width:auto;flex:1 1 0;min-width:0;transition:background .12s,border-color .12s}
.tk-board .kct{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tk-col-btn{white-space:nowrap;flex-shrink:0}
@media (max-width:1600px){.tk-col-btn span{display:none}}
.tk-board .tk-col.drop-ov{border-color:var(--pk);background:var(--pkl)}
.tk-col-btn{padding:1px 6px;font-size:10px}
.tk-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.tk-toolbar select,.tk-toolbar input{width:auto}
.tk-search{min-width:240px;flex:0 1 300px}
.tk-check{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--tx2);cursor:pointer;white-space:nowrap}
.tk-check input{width:auto}
.tk-dot-hint{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--pk)}
.tk-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:6px}
.tk-card-head .ktitle{margin-bottom:2px;word-break:break-word}
.tk-card-head .row-ib{margin:-4px -4px 0 0}
.tk-sender{font-size:10px;color:var(--tx2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tk-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.tk-chip{display:inline-flex;align-items:center;gap:4px;font-size:10px;color:var(--tx2);background:var(--bg);border:1px solid var(--bd);border-radius:99px;padding:1px 7px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tk-card .kft{gap:6px}
.tk-timer{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:var(--tx2);font-variant-numeric:tabular-nums}
.tk-timer.run{color:var(--tx)}
.tk-warn-label{flex:1;min-width:0;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--tk-warn,transparent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tk-av-empty{width:22px;height:22px;border-radius:99px;border:1px dashed var(--bd2);color:var(--tx3);display:inline-flex;align-items:center;justify-content:center}
.tk-unread{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--pk);margin-right:5px;vertical-align:1px}
/* Timer-Regel überschritten: card tinted in the rule's color, with a
   matching left edge so it reads even at a glance across the board. */
.tk-card.tk-warn{background:color-mix(in srgb,var(--tk-warn) 12%,var(--w));border-color:color-mix(in srgb,var(--tk-warn) 55%,var(--bd));box-shadow:inset 3px 0 0 var(--tk-warn),var(--sh)}
.tk-card.tk-warn .tk-timer{color:var(--tx)}
.tk-suggest{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--tx2);background:var(--pkl);border-radius:8px;padding:7px 10px;margin:4px 0 12px}
.tk-suggest .ico{color:var(--pk)}
.tk-req{color:var(--pk)}
.tk-swatch{display:inline-block;width:16px;height:16px;border-radius:5px;flex-shrink:0}
.tk-swatch-btn{border:none;cursor:pointer;width:20px;height:20px}
.tk-detail-timer{display:flex;gap:22px;flex-wrap:wrap;align-items:flex-end;background:var(--bg);border:1px solid var(--bd);border-radius:10px;padding:10px 14px;margin-bottom:12px}
.tk-detail-timer-v{display:flex;align-items:center;gap:6px;font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.tk-detail-timer-l{font-size:10px;color:var(--tx2);margin-top:2px}
.tk-num,.tmt th.tk-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
/* Auswertung: grouped weekly bars (Eingang/Abschluss), plain HTML. */
.tk-legend{display:flex;gap:14px;font-size:11px;color:var(--tx2)}
.tk-legend span{display:inline-flex;align-items:center;gap:5px}
.tk-legend i{width:10px;height:10px;border-radius:3px;display:inline-block}
.tk-weeks{display:flex;gap:10px;align-items:stretch;height:170px;border-bottom:1px solid var(--bd)}
.tk-week{flex:1;display:flex;flex-direction:column;min-width:0;cursor:default;border-radius:6px;padding:4px 2px 0}
.tk-week:hover{background:var(--bg)}
.tk-week-bars{flex:1;display:flex;gap:2px;align-items:flex-end;justify-content:center}
.tk-bar{width:min(18px,40%);min-height:2px;border-radius:4px 4px 0 0}
.tk-week-label{font-size:10px;color:var(--tx3);text-align:center;padding:4px 0}
.hr-tabs.tk-tabs{margin:4px 0 14px}
@media (max-width:900px){
  .tk-board{height:auto;max-height:none;overflow-x:auto}
  .tk-board .tk-col{max-height:560px;min-width:232px}
  .tk-search{flex-basis:100%}
}

/* Compact KPI row (e.g. Tickets' 8-tile status breakdown) -- narrower tiles
   than the default .sg so they all fit on a single row on one screen
   instead of wrapping across several. */
.sg-compact{grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}
.sg-compact .sc{padding:8px 10px}
.sg-compact .si{width:24px;height:24px;font-size:11px;margin-bottom:6px}
.sg-compact .sv{font-size:18px}
.sg-compact .sl{font-size:10px}
.kcard{background:var(--w);border:1px solid var(--bd);border-radius:10px;padding:10px;cursor:grab;transition:all .15s;box-shadow:var(--sh);user-select:none;position:relative}
.kcard:hover{box-shadow:var(--shm);border-color:var(--bd2)}.kcard.dragging{opacity:.4}.kcard.drag-ov{border:2px dashed var(--pk);background:var(--pkl)}
.kactions{position:absolute;top:6px;right:6px;display:flex;gap:2px;opacity:0;transition:opacity .12s;background:var(--w);border-radius:6px;box-shadow:var(--sh)}
.kcard:hover .kactions{opacity:1}
.kactions button{border:none;background:none;cursor:pointer;font-size:11px;padding:3px 5px;border-radius:5px;color:var(--tx2);line-height:1}
.kactions button:hover{background:var(--bg);color:var(--tx)}
.ktitle{font-size:12px;font-weight:600;line-height:1.3;margin-bottom:4px}.kproj{font-size:10px;color:var(--tx2);margin-bottom:5px}
.kdep{font-size:10px;color:var(--tx3);background:var(--bg);border:1px solid var(--bd);border-radius:4px;padding:1px 5px;display:inline-block;margin-bottom:5px}
.kft{display:flex;align-items:center;justify-content:space-between;margin-top:6px;padding-top:6px;border-top:1px solid var(--bd)}
.kddate{font-size:10px;color:var(--tx3)}.kddate.late{color:var(--rd);font-weight:600}.khours{font-size:10px;background:var(--bg);padding:2px 6px;border-radius:5px;color:var(--tx2);font-family:monospace}
.dropzone{border:2px dashed var(--bd);border-radius:8px;padding:10px;text-align:center;font-size:10px;color:var(--tx3);margin:0 8px 4px;transition:all .15s;flex-shrink:0}
.dropzone.active{border-color:var(--pk);background:var(--pkl);color:var(--pk)}
.pb-dropzone.active{border-color:var(--pk) !important;background:var(--pkl) !important;color:var(--pk) !important}
.kadd{display:flex;align-items:center;gap:5px;padding:7px 8px;color:var(--tx3);font-size:11px;cursor:pointer;border-radius:8px;margin:0 8px 8px;transition:all .12s;flex-shrink:0}
.kadd:hover{background:var(--w);color:var(--pk)}

/* Ticket board: cards fade/slide in on every render (assignment, status
   change) so a moved ticket reads as having moved, not just appeared in a
   different spot after a silent re-render. */
@keyframes ticket-card-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
#ticket-board .kcard{animation:ticket-card-in .22s ease-out}
@media (prefers-reduced-motion: reduce){#ticket-board .kcard{animation:none}}

/* DETAIL */
/* minmax(0,1fr) everywhere below (not bare 1fr): a bare `1fr` track's
   automatic minimum is its content's min-content size, so a wide descendant
   anywhere inside the column (e.g. a .tt/.tmt table with its own
   min-width -- see the mobile table rule further down) forces the WHOLE
   grid track, and with it every sibling card sharing that column, wider
   than the viewport -- overflowing the entire page horizontally instead of
   just scrolling inside that one table's own card. minmax(0,1fr) has an
   explicit 0 minimum, so the track still shrinks to the container and only
   that one table scrolls internally, exactly as intended. */
.dg{display:grid;grid-template-columns:minmax(0,1fr) 272px;gap:14px}
/* Dateien view: narrow project-folder list beside the wide file list --
   was previously an inline style="grid-template-columns:260px 1fr" on .dg,
   which (being an inline style) always outranked the responsive .dg rules
   below, so the two columns never stacked on mobile and the file list was
   silently clipped off the right edge of the screen. */
.dg-files{grid-template-columns:260px minmax(0,1fr)}
.prio-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:14px}
.owner-milestone-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:10px;align-items:stretch;margin-bottom:14px}
.cal-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:14px}
.crm-pipeline-layout{display:flex;gap:14px;align-items:flex-start}
.crm-stat-sidebar{display:flex;flex-direction:column;gap:8px;width:200px;flex:0 0 200px}
.pl-kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:12px}
.two-col-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;margin-bottom:14px}
.two-col-grid-tables{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;margin-bottom:14px}
.istrip{display:flex;border:1px solid var(--bd);border-radius:14px;overflow:hidden;background:var(--w);box-shadow:var(--sh);margin-bottom:14px;flex-wrap:wrap}
.ic{flex:1;min-width:120px;padding:10px 14px;border-right:1px solid var(--bd)}.ic:last-child{border-right:none}
.il{font-size:10px;color:var(--tx3);text-transform:uppercase;letter-spacing:.05em;margin-bottom:3px}.iv{font-size:14px;font-weight:700}
.tt{width:100%;border-collapse:collapse}
.tt th{text-align:left;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--tx3);padding:8px 10px;border-bottom:1px solid var(--bd);background:var(--bg)}
.tt td{padding:9px 10px;border-bottom:1px solid var(--bd);vertical-align:middle}
.tt tbody tr:hover td{background:var(--bg)}.tt tbody tr:last-child td{border-bottom:none}
.chk{width:15px;height:15px;border-radius:4px;border:2px solid var(--bd2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;background:var(--w)}
.chk.done{background:var(--gn);border-color:var(--gn);color:#fff;font-size:9px}
.dep{font-size:9px;color:var(--tx3);background:var(--bg);border:1px solid var(--bd);border-radius:3px;padding:1px 4px}
/* Summary widgets (Kanban sidebar, Projektdetail sidebar) -- icon + title +
   a hero number, generously rounded/spaced in the vein of an Apple
   Health/Fitness widget rather than a dense data table. */
.widget{background:var(--w);border:1px solid var(--bd);border-radius:18px;padding:16px;margin-bottom:12px;box-shadow:var(--sh);transition:box-shadow .2s,border-color .2s}
.widget:hover{box-shadow:var(--shm);border-color:var(--bd2)}
.widget-hd{display:flex;align-items:center;gap:9px;margin-bottom:14px}
.widget-ico{width:28px;height:28px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0}
.widget-title{font-size:12px;font-weight:700;color:var(--tx);letter-spacing:-.01em;flex:1;min-width:0}
.widget-big{font-size:28px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1}
.widget-sub{font-size:11px;color:var(--tx3);margin-top:3px}
.widget-row{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;padding:6px 0}
.widget-row+.widget-row{border-top:1px solid var(--bg)}
.widget-row .l{color:var(--tx2)}
.widget-row .v{font-weight:700;font-variant-numeric:tabular-nums}
.widget-empty{font-size:11px;color:var(--tx3);padding:4px 0}

/* Brief highlight pulse on a value that just changed on re-render (e.g.
   after a Kanban status drag) -- a plain innerHTML swap is invisible as an
   "update", so freshly-changed numbers get one flash to confirm it landed.
   Plays automatically since the element is newly inserted into the DOM. */
@keyframes widget-pop{0%{transform:scale(1)}40%{transform:scale(1.08);color:var(--pk)}100%{transform:scale(1)}}
.widget-flash{animation:widget-pop .5s ease-out}
@media (prefers-reduced-motion: reduce){.widget-flash{animation:none}}

/* TIMELINE/GANTT */
.gwrap{background:var(--w);border:1px solid var(--bd);border-radius:10px;overflow:hidden;box-shadow:var(--sh)}
.grow{display:grid;border-bottom:1px solid var(--bd);min-height:46px;transition:background .1s}
.grow:last-child{border-bottom:none}
.grow:hover{background:var(--bg)}
.grow:hover .gtask{background:var(--bg)}
.gtask{padding:8px 12px;font-size:12px;display:flex;align-items:center;gap:7px;background:var(--w);border-right:1px solid var(--bd);position:sticky;left:0;z-index:6;transition:background .1s}
.gchart{position:relative;min-height:46px}
/* One shared "bar" language across the chart: same radius/shadow/weight for
   the future bar, past-entry chips, and the off-window flush marker, so a
   row's mix of past + future segments reads as one bar, not several
   differently-styled pieces bolted together. State (deadline breach, etc.)
   layers a ring on top instead of swapping the shape. */
.gbar{position:absolute;top:50%;transform:translateY(-50%);min-width:8px;box-sizing:border-box;border-radius:6px;display:flex;align-items:center;padding:0 7px;font-size:9px;font-weight:700;color:#fff;cursor:pointer;white-space:nowrap;overflow:hidden;transition:filter .1s,box-shadow .1s}
.gbar:hover{filter:brightness(.9)}
/* Elevated variant for the single-project Gantt's one continuous "remaining
   work" bar per row -- a soft shadow instead of a hard border gives it depth
   without changing its box model, and a deadline breach layers a matching
   red ring on top instead of swapping to a differently-shaped bar. */
.gbar-elevated{box-shadow:0 1px 3px rgba(0,0,0,.14);text-shadow:0 0 2px rgba(0,0,0,.35)}
.gbar-elevated:hover{box-shadow:0 2px 7px rgba(0,0,0,.2)}
.gbar-elevated.gbar-deadline{box-shadow:0 0 0 2px #7C2D12,0 2px 7px rgba(0,0,0,.2)}
.gbar-past{position:absolute;top:50%;transform:translateY(-50%);border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:#fff;box-sizing:border-box;border:1.5px solid rgba(255,255,255,.8);box-shadow:0 1px 3px rgba(0,0,0,.14);overflow:hidden}
.gbar-flush{position:absolute;top:50%;transform:translateY(-50%);width:8px;opacity:.65;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.14);transition:opacity .1s}
.gbar-flush:hover{opacity:.85}

/* Drag-to-connect dependency handle at each task bar's end */
.gdep-handle{position:absolute;width:10px;height:10px;margin-left:-5px;margin-top:-5px;border-radius:50%;background:var(--pk);border:2px solid var(--w);box-shadow:0 0 0 1px var(--pk);cursor:crosshair;opacity:0;transition:opacity .15s,transform .15s}
.grow:hover .gdep-handle{opacity:.85}
.gdep-handle:hover{opacity:1;transform:scale(1.3)}
#gantt-content.gdep-dragging .gdep-handle{opacity:0;pointer-events:none}
.grow.gdep-drop-target .gchart{background:var(--pkl);outline:2px dashed var(--pk);outline-offset:-2px}
.gnow{position:absolute;top:0;bottom:0;width:2px;background:var(--pk);opacity:.75;z-index:5}
.gweek{position:absolute;top:0;bottom:0;border-left:1px dashed var(--bd2);z-index:2}

/* PERSONAL */
.daybar{flex:1;border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:5px 3px;cursor:pointer;font-size:10px;font-weight:600;border:1px solid transparent;transition:all .12s;min-width:38px}
.daybar:hover{border-color:var(--bd2)}
.daybar.off{background:repeating-linear-gradient(45deg,var(--bg),var(--bg) 3px,var(--bd) 3px,var(--bd) 4px);color:var(--tx3)}
.daybar.free{background:var(--bg);color:var(--tx3)}.daybar.low{background:#DCFCE7;color:#16A34A}
.daybar.mid{background:#FEF3C7;color:#D97706}.daybar.high{background:#FEE2E2;color:#DC2626}


.prio-row{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--bd);cursor:grab;transition:background .1s;user-select:none;background:var(--w)}
.prio-row:hover{background:var(--bg)}
.prio-row:last-child{border-bottom:none}

/* TEAM */
.tmt{width:100%;border-collapse:collapse}
.tmt th{text-align:left;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--tx3);padding:9px 12px;border-bottom:1px solid var(--bd);background:var(--bg)}
/* Scrollable contract list: header and yearly-sum footer stay visible while scrolling */
.contract-table-scroll thead th{position:sticky;top:0;z-index:1}
.contract-table-scroll tfoot td{position:sticky;bottom:0;background:var(--w);border-top:1px solid var(--bd)}
/* Contract list: compact cells so all columns fit the card without horizontal scrolling */
.contract-table{width:100%}
.contract-table th,.contract-table td{padding:8px 7px;vertical-align:top}
.contract-table th:first-child,.contract-table td:first-child{padding-left:14px}
.contract-table .num{text-align:right;white-space:nowrap;font-size:12px;font-variant-numeric:tabular-nums}
.tmt td{padding:10px 12px;border-bottom:1px solid var(--bd);vertical-align:middle}
.tmt tbody tr:hover td{background:var(--bg)}
.wlbar{height:6px;background:var(--bg);border-radius:99px;overflow:hidden;width:100px}
.wlfill{height:100%;border-radius:99px}
.ptag{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;background:var(--bg);border:1px solid var(--bd);border-radius:99px;font-size:10px;margin:1px}
.pdot{width:5px;height:5px;border-radius:99px;flex-shrink:0}

/* NOTIF */
.nitem{display:flex;align-items:flex-start;gap:10px;padding:11px 14px;border-bottom:1px solid var(--bd);cursor:pointer;transition:background .1s}
.nitem:hover{background:var(--bg)}.nitem.unread{border-left:3px solid var(--pk)}
.nico{width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.ntit{font-size:12px;font-weight:600;margin-bottom:1px}.nsub{font-size:11px;color:var(--tx2)}.ntime{font-size:10px;color:var(--tx3);white-space:nowrap}
.tog{width:36px;height:20px;border-radius:99px;position:relative;cursor:pointer}
.tog.on{background:var(--pk)}.tog.off{background:var(--bd2)}
.tog::after{content:'';position:absolute;width:14px;height:14px;background:#fff;border-radius:99px;top:3px;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:left .15s}
.tog.on::after{left:19px}.tog.off::after{left:3px}

/* Calendar */
.cal-grid{background:var(--w);border:1px solid var(--bd);border-radius:10px;overflow:hidden;box-shadow:var(--sh)}
.cal-row{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--bd)}
.cal-row:last-child{border-bottom:none}
.cal-hd{text-align:center;padding:8px;font-size:10px;font-weight:600;text-transform:uppercase;color:var(--tx2);border-right:1px solid var(--bd);background:var(--bg)}
.cal-hd:last-child{border-right:none}
.cal-day{border-right:1px solid var(--bd);padding:7px;min-height:85px}.cal-day:last-child{border-right:none}
.cal-day.tod{background:#FFF8FC}.cal-day.off{background:var(--bg)}.cal-day.othermonth{background:var(--bg);opacity:.5}.cal-day.weekend{background:#F9FAFB}
.cal-bk{font-size:9px;font-weight:700;color:var(--tl);background:var(--tll);border-radius:3px;padding:1px 4px;margin-bottom:3px;display:inline-block}
.cal-dn{font-size:10px;font-weight:600;color:var(--tx2);margin-bottom:4px}
.cal-dn.tn{width:18px;height:18px;background:var(--pk);color:#fff;border-radius:99px;display:flex;align-items:center;justify-content:center;font-size:9px}
.cal-ev{font-size:9px;font-weight:600;padding:2px 5px;border-radius:4px;margin-bottom:2px;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}

/* Modal */
.modal-bg{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999;align-items:center;justify-content:center}
.modal-bg.on{display:flex}
/* Wraps the (internally scrolling) .modal box so the close button can sit
   fixed at its corner without scrolling away with the content, and without
   being wiped by showModal()'s innerHTML replacement of #modal-content. */
.modal-wrap{position:relative;max-width:92vw;max-height:90vh;max-height:90dvh}
.modal{background:var(--w);border-radius:16px;padding:18px;width:480px;max-width:92vw;max-height:90vh;max-height:90dvh;overflow-y:auto;box-shadow:var(--shm)}
.modal.modal-wide{width:min(1160px, 95vw)}
/* Mid-size for dense forms (e.g. project modal) that feel cramped at 480px */
.modal.modal-md{width:min(640px, 95vw);padding:22px}
.modal.modal-md .row{gap:16px;margin-bottom:12px}
.modal.modal-md .field{margin-bottom:12px}
.modal .hint{font-size:10px;color:var(--tx3);margin-top:4px;line-height:1.4}
.modal-close{position:absolute;top:-10px;right:-10px;width:28px;height:28px;border-radius:99px;border:1px solid var(--bd);background:var(--w);color:var(--tx2);font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:var(--shm);z-index:1}
.modal-close:hover{background:var(--bg);color:var(--tx)}
/* Fixed row height (instead of plain align-items:stretch, whose resolved
   height depended on content and left the OUTER .modal ALSO scrolling
   alongside the chat list's own internal scroll -- two active scroll
   regions stacked on top of each other reads as "scrolling is weird" since
   the wheel's target depends on exact cursor position). Each column owns
   exactly one well-defined scroll area, both starting/ending at the same
   height. This value is a fallback for the instant before JS measures the
   left column's actual content (see alignTaskDetailColumns) and overrides
   it inline -- short tasks shrink the row so the chat panel's bottom lands
   exactly where the left column's content (the button row) ends, instead
   of always stretching to this full budget. */
.td-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:22px;height:calc(90vh - 130px);height:calc(90dvh - 130px);min-height:420px}
.td-left-col{overflow-y:auto;overflow-x:hidden;min-height:0;padding-right:4px}
.td-chat{display:flex;flex-direction:column;height:100%;min-height:0;border:1px solid var(--bd);border-radius:10px;overflow:hidden;background:var(--bg)}
.td-chat-head{padding:10px 12px;border-bottom:1px solid var(--bd);font-size:11px;font-weight:700;text-transform:uppercase;color:var(--tx3);flex-shrink:0}
.td-chat-list{flex:1;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:10px}
.td-chat-input{padding:8px;border-top:1px solid var(--bd);display:flex;gap:6px;flex-shrink:0;background:var(--w)}
.td-chat-input textarea{resize:none;flex:1}
.td-chat.drop-hover{outline:2px dashed var(--pk);outline-offset:-4px}
.td-chat-attach{align-self:flex-end;padding:8px 9px}
.td-chat-pending{gap:6px;padding:8px 8px 0;border-top:1px solid var(--bd);background:var(--w);flex-wrap:wrap;flex-shrink:0}
.td-pending-img{position:relative;width:58px;height:58px;border-radius:8px;overflow:hidden;border:1px solid var(--bd);background:var(--bg)}
.td-pending-img img{width:100%;height:100%;object-fit:cover;cursor:pointer;display:block}
.td-pending-img button{position:absolute;top:3px;width:18px;height:18px;border-radius:99px;border:none;background:rgba(0,0,0,.6);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.td-pending-del{right:3px}
.td-pending-edit{left:3px}
.td-chat-imgs{display:grid;grid-template-columns:repeat(2,minmax(0,120px));gap:4px;margin-bottom:3px}
.td-chat-imgs.single{grid-template-columns:minmax(0,220px)}
.td-chat-img{padding:0;border:1px solid var(--bd);border-radius:10px;overflow:hidden;background:var(--bg);cursor:zoom-in;display:block;min-height:60px}
.td-chat-img img{display:block;width:100%;max-height:220px;object-fit:cover}
.td-chat-imgs:not(.single) .td-chat-img img{height:100px}
.td-chat-img.broken{cursor:default;min-height:40px}
.td-chat-img.broken::after{content:"Bild nicht verfügbar";display:block;padding:10px;font-size:10px;color:var(--tx3)}
.img-overlay{position:fixed;inset:0;z-index:1500;background:rgba(10,10,14,.88);display:flex;flex-direction:column}
.img-overlay-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;flex-shrink:0;color:#fff;flex-wrap:wrap}
.img-overlay-count{font-size:12px;opacity:.8}
.img-overlay-stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:0 16px 16px;position:relative}
.img-overlay-stage img,.img-overlay-stage canvas{max-width:100%;max-height:100%;object-fit:contain;border-radius:6px;box-shadow:0 10px 40px rgba(0,0,0,.5);background:#fff}
.img-overlay-stage canvas{cursor:crosshair;touch-action:none}
.img-nav{position:absolute;top:50%;transform:translateY(-50%);width:42px;height:42px;border-radius:99px;border:none;background:rgba(255,255,255,.15);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.img-nav:hover{background:rgba(255,255,255,.28)}
.img-nav.prev{left:14px}
.img-nav.next{right:14px}
.annot-bar{justify-content:flex-start}
.annot-group{display:flex;gap:4px;align-items:center;padding:3px;border-radius:9px;background:rgba(255,255,255,.08)}
.annot-btn{width:32px;height:32px;border-radius:7px;border:none;background:transparent;color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.annot-btn:hover{background:rgba(255,255,255,.14)}
.annot-btn.on{background:var(--pk)}
.annot-dot{display:block;border-radius:99px;background:currentColor}
.annot-color{width:22px;height:22px;border-radius:99px;border:2px solid rgba(255,255,255,.35);cursor:pointer;padding:0;margin:0 2px}
.annot-color.on{border-color:#fff;box-shadow:0 0 0 2px var(--pk)}
.mention-dropdown{position:absolute;bottom:calc(100% + 4px);left:8px;right:8px;max-height:180px;overflow-y:auto;background:var(--w);border:1px solid var(--bd);border-radius:8px;box-shadow:var(--shm);z-index:20;padding:4px}
.mention-opt{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;font-size:13px;cursor:pointer}
.mention-opt.active,.mention-opt:hover{background:var(--pkl)}

/* Reusable searchable user-picker */
.upicker{position:relative}
.upicker-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:5px;min-height:22px}
.upicker-empty{font-size:11px;color:var(--tx3)}
.upicker-chip{display:inline-flex;align-items:center;gap:5px;background:var(--bg);border:1px solid var(--bd);border-radius:99px;padding:2px 8px 2px 3px;font-size:11px;color:var(--tx)}
.upicker-chip-x{cursor:pointer;color:var(--tx3);font-size:13px;line-height:1;padding:0 1px}
.upicker-chip-x:hover{color:var(--rd)}
.upicker-input{width:100%;box-sizing:border-box}
.upicker-list{position:absolute;top:calc(100% + 2px);left:0;right:0;max-height:200px;overflow-y:auto;background:var(--w);border:1px solid var(--bd);border-radius:8px;box-shadow:var(--shm);z-index:20;padding:4px}
/* Opened when there isn't enough room below the field (e.g. the picker sits
   near the bottom of a scrolling modal on a small/mobile screen) -- flips
   the list above the input instead of leaving it clipped by the modal's
   own overflow:auto, which otherwise hid most options below the fold. */
.upicker-list.upicker-up{top:auto;bottom:calc(100% + 2px)}
.upicker-opt{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;font-size:12px;cursor:pointer}
.upicker-opt:hover{background:var(--pkl)}
.upicker-opt.sel{background:var(--bg)}
.tdeps-details{margin-bottom:6px;border:1px solid var(--bd);border-radius:8px;padding:5px 8px;background:var(--bg)}
.tdeps-details[open]{padding-bottom:8px}
.tdeps-details summary{font-size:10px;font-weight:600;color:var(--tx2);cursor:pointer;list-style:none;user-select:none}
.tdeps-details summary::-webkit-details-marker{display:none}
.tdeps-details summary::before{content:"▸";display:inline-block;width:12px;color:var(--tx3);transition:transform .1s}
.tdeps-details[open] summary::before{transform:rotate(90deg)}
.tdeps-details[open] summary{margin-bottom:2px}
.tdeps-count{color:var(--pk);font-weight:700}
.tdeps-details .upicker{margin-top:6px}
.td-checklist-box{border:1px solid var(--bd);border-radius:10px;padding:6px;background:var(--bg);max-height:220px;overflow-y:auto;display:flex;flex-direction:column;gap:4px}
.td-checklist-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;background:var(--w);transition:background .12s}
.td-checklist-item:hover{background:var(--pkl)}
.td-checklist-item input[type="checkbox"]{width:16px;height:16px;accent-color:var(--pk);cursor:pointer;flex-shrink:0}
.td-checklist-item .txt{flex:1;font-size:12px;cursor:text}
.td-checklist-item .txt.done{text-decoration:line-through;color:var(--tx3)}
.td-checklist-item .td-checklist-edit{flex:1;font-size:12px;font-family:inherit;color:inherit;background:var(--w);border:1px solid var(--pk);border-radius:5px;padding:2px 6px;min-width:0}
.td-checklist-item button{background:none;border:none;color:var(--tx3);cursor:pointer;font-size:14px;line-height:1;opacity:0;transition:opacity .12s;flex-shrink:0}
.td-checklist-item:hover button{opacity:1}
.td-checklist-item button:hover{color:var(--rd)}
.td-checklist-item .drag-handle{color:var(--tx3);cursor:grab;font-size:13px;line-height:1;opacity:0;transition:opacity .12s;flex-shrink:0}
.td-checklist-item:hover .drag-handle{opacity:1}
@media (max-width: 760px) {
  .td-layout{grid-template-columns:minmax(0,1fr);height:auto;min-height:0}
  /* overflow-x:hidden is inherited from the base (unmedia'd) rule above --
     per the CSS overflow spec, if one axis is 'visible' and the other isn't,
     the 'visible' axis is silently computed as 'auto' instead. Left alone
     that quietly re-creates the cramped inner scrollbox this rule is meant
     to remove, so overflow-x needs the same override. */
  .td-left-col{overflow-y:visible;overflow-x:visible}
  .td-chat{height:360px;min-height:0}
}
/* Native multi-selects (e.g. task "Zugewiesen") default to the OS's blue/grey
   selection highlight, which clashes with the app's pink accent -- match it
   instead so a selected option reads as "chosen", not "system default". */
.modal select[multiple] option:checked{background:var(--pkl) linear-gradient(0deg, var(--pkl) 0%, var(--pkl) 100%);color:var(--pk);font-weight:600}
.modal h3{font-size:15px;font-weight:700;margin-bottom:4px}
.modal .sub{font-size:11px;color:var(--tx2);margin-bottom:10px}
.modal .row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;margin-bottom:6px}
.modal .row-3{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr)}
.modal label{font-size:10px;font-weight:600;color:var(--tx2);display:block;margin-bottom:3px}
.modal input,.modal select,.modal textarea{width:100%;padding:6px 10px;border:1px solid var(--bd);border-radius:8px;font-family:inherit;font-size:12px}
.modal input[type="checkbox"]{width:auto;padding:0;border:none;flex-shrink:0}
.modal .field{margin-bottom:6px}
.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:10px}

.toast{position:fixed;bottom:20px;right:20px;background:var(--tx);color:#fff;padding:10px 16px;border-radius:10px;font-size:12px;z-index:9999;box-shadow:var(--shm);opacity:0;transform:translateY(10px);transition:all .25s;pointer-events:none}
.toast.on{opacity:1;transform:translateY(0)}

.version-label{position:fixed;bottom:4px;right:8px;font-size:10px;color:var(--tx3);opacity:.45;z-index:1;pointer-events:none;user-select:none}

.empg{display:grid;grid-template-columns:300px minmax(0,1fr);gap:14px}

/* Add task floating bar */
.add-task-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) 100px 100px auto;gap:8px;align-items:end}

/* Overrun (Stunden überschritten) */
.overrun-chip{display:inline-flex;align-items:center;gap:3px;background:var(--rd);color:#fff;border-radius:99px;padding:1px 6px;font-size:9px;font-weight:700;white-space:nowrap}
.overrun-soft{background:var(--rdl);color:var(--rd);font-weight:600;padding:1px 6px;border-radius:4px;font-size:9px;display:inline-flex;align-items:center;gap:3px}
.overrun-stripe{background:repeating-linear-gradient(45deg,transparent,transparent 4px,rgba(239,68,68,.35) 4px,rgba(239,68,68,.35) 7px),var(--rd);position:absolute;height:100%;top:0;border-radius:5px}

/* Queue overlay markers */
.qmark{position:absolute;top:0;bottom:0;pointer-events:none;z-index:1}
.qmark.weekend{background:repeating-linear-gradient(135deg,rgba(168,176,192,.18) 0,rgba(168,176,192,.18) 4px,transparent 4px,transparent 7px)}
.qmark.vacation{background:rgba(0,151,167,.12);border-left:2px solid var(--tl);border-right:2px solid var(--tl)}
.qmark.meeting{background:rgba(245,158,11,.12);border-left:2px solid var(--ye);border-right:2px solid var(--ye)}
.qmark.sick{background:rgba(239,68,68,.10);border-left:2px solid var(--rd);border-right:2px solid var(--rd)}
.qmark.training{background:rgba(34,197,94,.10);border-left:2px solid var(--gn);border-right:2px solid var(--gn)}
.qmark-lbl{position:absolute;top:17px;left:50%;transform:translateX(-50%);font-size:9px;font-weight:700;background:var(--w);padding:1px 4px;border-radius:3px;white-space:nowrap;pointer-events:none;z-index:4;box-shadow:0 0 0 1px var(--bd)}

/* Burger / mobile */
.burger{display:none;width:34px;height:34px;border-radius:8px;border:1px solid var(--bd);background:var(--w);color:var(--tx);font-size:18px;cursor:pointer;flex-shrink:0;align-items:center;justify-content:center;font-family:inherit}
.burger:hover{background:var(--bg)}

/* Topbar layout: allow it to scroll on small screens */
.topbar{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin}
.topbar-t{flex-shrink:0;min-width:120px}

/* RESPONSIVE — Tablet */
@media (max-width: 1100px) {
  .dg{grid-template-columns:minmax(0,1fr)}
  .empg{grid-template-columns:minmax(0,1fr)}
  .prio-layout{grid-template-columns:minmax(0,1fr)}
  .owner-milestone-grid{grid-template-columns:minmax(0,1fr)}
  .cal-layout{grid-template-columns:minmax(0,1fr)}
  .crm-pipeline-layout{flex-direction:column;align-items:stretch}
  .crm-stat-sidebar{width:100%;flex:1 1 auto}
  .two-col-grid-tables{grid-template-columns:minmax(0,1fr)}
  .istrip{flex-wrap:wrap}
  .ic{flex:1 0 30%}
  /* #kanban-layout's inline align-items:flex-start is meant for the desktop
     row layout (board + sidebar top-aligned side by side) -- stacked into a
     column here, that same flex-start leaves .kboard sized to its own
     max-content width (the full un-clipped sum of every column) instead of
     stretching to the viewport, so its overflow-x:auto scrollbar never had
     anything to actually constrain: columns past the first were simply
     clipped by .main's overflow:hidden with no way to scroll to them at
     all. Stretch makes .kboard's own box match the container width again,
     so the horizontal scroll it already sets up actually engages. */
  #kanban-layout{flex-direction:column;align-items:stretch!important}
  #kanban-absences{flex-basis:auto;width:100%;max-height:none}
  /* The sidebar's inline flex:0 0 260px turns into a 260px HEIGHT once the
     layout is a column, and its margin-left:auto shoved the widgets right
     (half-width, off-center) instead of stretching them under the board. */
  #kanban-sidebar{flex:0 0 auto!important;margin-left:0!important;max-height:none!important;overflow:visible!important}
}

/* RESPONSIVE — Mobile */
@media (max-width: 760px) {
  .sb{position:fixed;left:0;top:0;bottom:0;height:auto;margin:0;border-left:none;border-radius:0 16px 16px 0;z-index:200;transform:translateX(-100%);transition:transform .2s ease;width:240px}
  .main{padding-top:8px}
  .sb.show{transform:translateX(0);box-shadow:var(--shm)}
  .main{margin-left:0 !important}
  .burger{display:inline-flex}
  .sb-close{display:inline-flex}
  .topbar{padding:0 10px;gap:6px;margin:0 8px}
  .week-badge{display:none}
  .content{padding:12px}
  .ph{flex-direction:column;align-items:stretch;gap:8px}
  .ph > div:last-child{display:flex;flex-wrap:wrap;gap:6px}
  .pg{grid-template-columns:minmax(0,1fr)}
  .sg{grid-template-columns:repeat(2,minmax(0,1fr))}
  .two-col-grid{grid-template-columns:minmax(0,1fr)}
  .pl-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* Two KPIs per row instead of one -- a single column turned the project
     detail strip into eight full-width rows, a whole screen of numbers. */
  .istrip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .ic{min-width:0;border-right:none;border-bottom:1px solid var(--bd)}
  .ic:nth-child(odd){border-right:1px solid var(--bd)}
  .ic:last-child,.ic:nth-last-child(2):nth-child(odd){border-bottom:none}
  .ic:last-child:nth-child(odd){grid-column:1/-1;border-right:none}
  /* An odd number of stat cards leaves the last one alone at half width. */
  .sg > .sc:last-child:nth-child(odd){grid-column:1/-1}
  .modal{padding:16px;width:96vw;max-height:94vh;max-height:94dvh}
  .modal .row{grid-template-columns:minmax(0,1fr)}
  .topbar-t{font-size:13px;min-width:90px}
  .add-task-row{grid-template-columns:minmax(0,1fr)}
  /* Backdrop when sidebar open */
  body.sb-open::after{content:"";position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:150}

  /* Kanban-style boards (project Kanban, ticket board, CRM pipeline, personal
     board): one column at a time with a peek of the next, snapping into
     place on swipe, instead of a slice of 2-3 fixed-242px columns that never
     lines up with the screen edge. */
  .kboard,#pb-board{scroll-snap-type:x mandatory}
  .kcol-status,.pb-col{scroll-snap-align:start}
  .kcol-status{flex:0 0 88vw;width:88vw;min-width:0}
  #pb-board .pb-col{flex:0 0 88vw!important;min-width:0!important}
  /* The project Kanban's own board no longer needs the desktop's precise
     "100vh minus header" height (that offset assumes the single-line
     desktop topbar+filter row, not the taller wrapped mobile header) --
     each column instead caps its own height and scrolls its task list
     internally, so the page can still be scrolled to reach the sidebar
     widgets below the board. */
  .kboard{height:auto;max-height:none}
  .kcol-status{max-height:min(65dvh,520px)}

  /* Bigger touch targets for the org/user switcher popups -- the default
     6px/7px padding is comfortable with a mouse pointer but easy to
     mis-tap on a phone. */
  .org-popup-item,.user-popup-item{padding:11px 9px;font-size:13px}
  .sb-org,.sb-user{padding:13px}

  /* Data tables (.tt/.tmt): on a phone-width viewport a table's columns
     shrink to fit before the browser ever engages horizontal scroll, which
     squeezes every cell's text down to one word (or one character) per
     line instead of scrolling -- exactly the "Alle Buchungen" / project
     task table breakage. Giving the table a floor width forces the scroll
     that .card[style*="overflow:hidden"] (below) already enables instead
     of letting content get crushed. */
  .tt,.tmt{min-width:560px}
  /* The task table's "Stunden buchen" button is the one action button that
     still carries a text label (its siblings -- edit/archive/delete -- are
     already icon-only with a title tooltip); at this width that label alone
     was inflating the actions column past 200px, dragging the table's own
     natural width far beyond the 560px floor above and pushing every other
     column offscreen. Icon-only here too, matching the siblings. */
  .tt .btn-txt{display:none}

  /* Flex rows inside modals (e.g. a <select> next to a submit button, like
     the ticket "Mit anderem Ticket zusammenführen" row) commonly mix a
     flex:1 field with an auto-width .btn -- and .btn forces
     white-space:nowrap, so on a narrow modal the button's un-wrappable
     text pushes the row wider than the modal and the overflow is clipped
     silently off the right edge of the screen. Letting these rows wrap is
     a no-op when everything already fits (flex-wrap only engages on
     overflow), so it only helps the case that was breaking. */
  .modal div[style*="display:flex"]{flex-wrap:wrap}
  .modal div[style*="display:flex"] > select{min-width:0;flex:1 1 160px}

  /* Inline flex filter cards (Produkte, Kampagnen, Verträge, ...): their
     controls keep intrinsic/fixed widths, so on a phone they wrap into a
     ragged, half-empty layout. A two-column grid with full-width controls
     matches .filter-bar (Team, Kunden). */
  .filter-flex{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px!important}
  .filter-flex > *{min-width:0}
  .filter-flex input:not([type="checkbox"]):not([type="radio"]),.filter-flex select{width:100%!important;min-width:0}
  .filter-flex > div:has(> .btn){grid-column:1/-1;display:flex;flex-wrap:wrap;gap:6px}
  .filter-flex > div:has(> .btn) > label{display:none}
  .filter-flex > .btn{grid-column:1/-1;justify-self:start}

  /* Wide tables scroll sideways inside their card, but nothing told the
     user so -- the cut-off column just looked broken. Edge shadows appear
     only on the side that still has content (background-attachment trick). */
  .card:has(> .tmt, > .tt, > div > .tmt){
    background:
      linear-gradient(to right, var(--w) 30%, transparent) left center / 28px 100% no-repeat local,
      linear-gradient(to left, var(--w) 30%, transparent) right center / 28px 100% no-repeat local,
      radial-gradient(farthest-side at 0 50%, rgba(0,0,0,.14), transparent) left center / 12px 100% no-repeat scroll,
      radial-gradient(farthest-side at 100% 50%, rgba(0,0,0,.14), transparent) right center / 12px 100% no-repeat scroll,
      var(--w);
  }

  /* Pinnwand toolbar: the desktop spacer pushes the wrapped second row in
     from the left; "Strg+V" means nothing on a phone. */
  .hub-board-head .hub-head-sp,.hub-board-head .hub-paste-hint{display:none}
}

/* iOS Safari zooms the whole page into any focused field below 16px and
   never zooms back out. Only iOS (the -webkit-touch-callout probe) gets the
   bigger text, so desktop/Android density stays as designed. */
@supports (-webkit-touch-callout:none){
  @media (max-width:760px){
    input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),select,textarea{font-size:16px!important}
  }
}

/* Larger desktops: more density */
@media (min-width: 1600px) {
  .content{padding:22px 28px}
  .pg{grid-template-columns:repeat(auto-fill,minmax(340px,1fr))}
}
@media (min-width: 2000px) {
  .pg{grid-template-columns:repeat(auto-fill,minmax(360px,1fr))}
}

/* Timeline / Gantt: handle scrollable horizontally */
.gwrap{overflow-x:auto}
#gantt-container{max-width:100%}

/* Table cards use inline overflow:hidden purely to clip the header's square
   corners to the card's rounded radius -- on narrow viewports a wide table
   (many columns) would then be silently clipped with no way to reach the
   hidden columns. Overriding to overflow-x:auto keeps the rounded-corner
   clipping (auto still clips to the border-radius box) but adds a scrollbar
   once content is wider than the card, on any screen size. */
.card[style*="overflow:hidden"]{overflow-x:auto !important;-webkit-overflow-scrolling:touch}

/* A toolbar row (title + count/filters) sitting above such a table is only
   as wide as the visible card, while the table below it can be much wider
   (that's the whole point of the scrollbar above) -- without this, scrolling
   the card right slides the toolbar's own box out of view too, leaving a
   blank strip where its background/text used to be instead of the row just
   staying put like a normal sticky header. */
.card[style*="overflow:hidden"] > div:first-child{position:sticky;left:0}

/* Generic scrollbars - subtle */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--bd2);border-radius:5px}
::-webkit-scrollbar-thumb:hover{background:var(--tx3)}
::-webkit-scrollbar-track{background:transparent}

/* Multi-project gantt grouping */
.gantt-group-header{display:grid;font-size:11px;font-weight:700;border-top:1px solid var(--bd);border-bottom:1px solid var(--bd)}
/* Sticky like .gtask -- the header row itself spans the full (very wide)
   scrollable timeline, so without this the project name sits at the far
   left and scrolls out of view once the timeline auto-scrolls to "today". */
.ggh-label{position:sticky;left:0;z-index:9;background:var(--bg);padding:6px 12px;display:flex;align-items:center;gap:8px;overflow:hidden}
.ggh-label span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ggh-meta{background:var(--bg);padding:6px 12px;display:flex;align-items:center;justify-content:flex-end;gap:6px}
.gantt-group-header .pdot{width:8px;height:8px;border-radius:99px;flex-shrink:0}

/* Timeline status sections (Kritisch/In Arbeit/Geplant/Abgeschlossen) --
   lighter than .gantt-group-header (no border-top) since these sit inside
   an already-grouped project, not between top-level groups. */
.gantt-section-header{display:grid;border-bottom:1px solid var(--bd);background:var(--bg)}
.gsh-label{position:sticky;left:0;z-index:9;background:var(--bg);padding:5px 12px;display:flex;align-items:center;gap:8px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--tx2);overflow:hidden;white-space:nowrap}
.gsh-count{font-size:9px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--tx3)}

/* Collapsed "Abgeschlossen" rows -- dimmed so history doesn't visually
   compete with the active work above it. */
.gantt-row-muted{opacity:.6}
.gantt-row-muted:hover{opacity:.85}

/* Dedicated milestone swimlane, above the task rows */
.gantt-milestone-lane{background:var(--pul)}
.gantt-milestone-lane .gtask{background:var(--pul)}

/* Gantt bar layers */
.gbar-bg{position:absolute;top:50%;transform:translateY(-50%);border-radius:5px;cursor:pointer}
.gbar-bg:hover{filter:brightness(1.1)}
.gbar-lbl{position:absolute;top:50%;transform:translateY(-50%);z-index:7;border-radius:5px}
.gbar-marker{position:absolute;border-radius:1px}
.gbar-overrun-ext{position:absolute;top:50%;transform:translateY(-50%)}

/* "Heute" line + label */
.gnow-label{position:absolute;background:var(--pk);color:#fff;font-size:9px;font-weight:700;padding:1px 6px;border-radius:99px;white-space:nowrap;transform:translateX(-50%);z-index:9;top:2px;box-shadow:var(--sh)}
.gnow-label.bottom{top:auto;bottom:2px}

/* Task date label (on left of bar in Gantt rows) */
.task-date-lbl{position:absolute;font-size:9px;color:var(--tx3);transform:translateX(-100%) translateY(-50%);top:50%;padding-right:6px;white-space:nowrap;pointer-events:none}

/* Subtask booking history (inline, expandable) */
.subtask-bookings{background:var(--bg);padding:8px 14px;border-bottom:1px solid var(--bd);font-size:11px}
.subtask-bookings .se{display:flex;justify-content:space-between;padding:3px 0;border-bottom:1px dashed var(--bd)}
.subtask-bookings .se:last-child{border-bottom:none}

/* "+ Task" call-to-action next to the project sub-nav tabs -- same row,
   just visually heavier than the plain .btn-g items around it */
.btn-cta{padding:8px 16px;font-size:12px;box-shadow:0 2px 8px rgba(214,66,143,.35)}
.btn-cta:hover{box-shadow:0 3px 10px rgba(214,66,143,.45)}

/* ── Personalakte (hr_records) ── */
.hr-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:12px 14px;border-bottom:1px solid var(--bd)}
.card.hr-toolbar{border-bottom:1px solid var(--bd);padding:10px 12px}
.hr-toolbar select,.hr-toolbar input{padding:6px 10px;border:1px solid var(--bd);border-radius:9px;font-family:inherit;font-size:12px;background:var(--w);color:var(--tx)}
.hr-search{min-width:240px}
.hr-foot{padding:10px 14px;font-size:11px;color:var(--tx2)}
.hr-row{cursor:pointer}
.hr-note{display:block;font-size:12px;line-height:1.5;color:var(--tx2);padding:10px 14px;margin-bottom:12px;background:var(--bll);border-color:transparent}
.hr-note .ico{vertical-align:-3px;margin-right:6px}
.hr-note-warn{background:var(--yel);color:#92400E}
.hr-note-err{background:var(--rdl);color:var(--rd)}
.modal .hr-form-h{margin:16px 0 8px;padding-top:12px;border-top:1px solid var(--bd);font-size:12px}
.modal label.hr-check{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:500;color:var(--tx);margin:2px 0 10px;cursor:pointer}
.modal label.hr-check input{width:auto;margin:0}
.hr-back{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--tx2);margin-bottom:10px;text-decoration:none}
.hr-back:hover{color:var(--pk)}
.hr-profile{padding:22px 24px 18px}
.hr-profile-head{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.hr-name{font-size:24px;font-weight:700;line-height:1.2;margin-bottom:6px}
.hr-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:12px;color:var(--tx2);margin-bottom:8px}
.hr-chips{display:flex;gap:6px;flex-wrap:wrap}
.hr-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:3px 9px;border:1px solid var(--bd);border-radius:8px;background:var(--w);color:var(--tx)}
.hr-chip .ico{color:var(--tx3)}
.hr-actions{display:flex;gap:6px;flex-wrap:wrap}
.hr-tabs{display:flex;gap:22px;border-bottom:1px solid var(--bd);margin:20px 0 16px;overflow-x:auto}
.hr-tabs button{background:none;border:none;border-bottom:2px solid transparent;padding:8px 0;font-family:inherit;font-size:13px;color:var(--tx2);cursor:pointer;white-space:nowrap;display:inline-flex;gap:6px;align-items:center}
.hr-tabs button.on{color:var(--pk);border-bottom-color:var(--pk);font-weight:600}
.hr-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:99px;background:var(--bg);border:1px solid var(--bd);font-size:10px;font-weight:600;color:var(--tx2)}
.hr-split{display:flex;gap:18px;align-items:flex-start}
.hr-side{display:flex;flex-direction:column;gap:2px;width:240px;flex-shrink:0;border-right:1px solid var(--bd);padding-right:12px}
.hr-side button{display:flex;justify-content:space-between;align-items:center;gap:6px;text-align:left;background:none;border:none;border-radius:9px;padding:8px 10px;font-family:inherit;font-size:12px;color:var(--tx2);cursor:pointer}
.hr-side button:hover{background:var(--bg)}
.hr-side button.on{background:var(--pkl);color:var(--pk);font-weight:600}
.hr-kv{padding:4px 16px}
.hr-kv-row{display:flex;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid var(--bd);font-size:12px}
.hr-kv-row:last-child{border-bottom:none}
.hr-kv .hr-kv-row{display:grid;grid-template-columns:minmax(140px,38%) 1fr}
.hr-kv .hr-kv-row>span{color:var(--tx2)}
.hr-kv .hr-kv-row>b{font-weight:500}
.hr-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.hr-stat{border:1px solid var(--bd);border-radius:12px;padding:12px 14px;background:var(--w)}
.hr-stat-v{font-size:20px;font-weight:700}
.hr-stat-l{font-size:11px;color:var(--tx2);margin-top:2px}
.hr-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-top:12px}
.hr-step{display:flex;gap:10px;font-size:11px;color:var(--tx2);border:1px solid var(--bd);border-radius:12px;padding:10px 12px}
.hr-step b{color:var(--tx);font-size:12px;display:block;margin-bottom:2px}
.hr-step-n{width:24px;height:24px;border-radius:99px;background:var(--pkl);color:var(--pk);font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.hr-meter{height:6px;background:var(--bg);border-radius:99px;margin:0 16px 12px;overflow:hidden}
.hr-meter>div{height:100%;background:var(--pk);border-radius:99px}
.hr-version-upload{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.hr-version-upload input[type="file"]{flex:1;min-width:180px}
.hr-version-upload input:not([type]){flex:2;min-width:180px}
.hr-checklist{display:flex;flex-direction:column;gap:4px;max-height:180px;overflow-y:auto;border:1px solid var(--bd);border-radius:8px;padding:8px}
/* Combobox für HR-Stammdaten (siehe hrComboHtml in app.js): Input mit
   scrollbarem Vorschlags-Dropdown, gefiltert beim Tippen, Tastatur mit
   Pfeiltasten/Enter/Escape. Freie Eingabe bleibt möglich. */
.hr-combo{position:relative}
.hr-combo-list{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;max-height:210px;overflow-y:auto;background:var(--w);border:1px solid var(--bd);border-radius:9px;box-shadow:var(--shm);z-index:60;padding:4px}
.hr-combo-list.open{display:block}
.hr-combo-opt{padding:6px 9px;border-radius:6px;font-size:12px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hr-combo-opt:hover,.hr-combo-opt.sel{background:var(--pkl);color:var(--pk)}
/* Globales Organigramm (Mitarbeiterliste → Button "Organigramm"): mehrere
   Wurzeln stehen nebeneinander, ohne Verbindungslinien zwischen ihnen. */
.hr-org.hr-org-roots>li{padding-top:0}
.hr-org.hr-org-roots>li::before,.hr-org.hr-org-roots>li::after{display:none}
.hr-org-global{min-height:120px}
/* Org chart in the employee file's "Organigramm" tab: pure-CSS tree,
   connectors drawn with pseudo-element borders. Root is the employee's
   manager (if any) -> employee -> direct reports; every node except the
   current one links to that employee's file. */
.hr-org-scroll{overflow-x:auto;padding:6px 2px 2px}
.hr-org,.hr-org ul{display:flex;justify-content:center;list-style:none;position:relative}
.hr-org ul{padding-top:22px}
.hr-org li{display:flex;flex-direction:column;align-items:center;position:relative;padding:22px 7px 0}
.hr-org li::before,.hr-org li::after{content:"";position:absolute;top:0;right:50%;width:50%;height:22px;border-top:2px solid var(--bd2)}
.hr-org li::after{right:auto;left:50%;border-left:2px solid var(--bd2)}
.hr-org li:only-child::before,.hr-org li:only-child::after{display:none}
.hr-org li:only-child{padding-top:0}
.hr-org li:first-child::before,.hr-org li:last-child::after{border:0 none}
.hr-org li:last-child::before{border-right:2px solid var(--bd2);border-radius:0 7px 0 0}
.hr-org li:first-child::after{border-radius:7px 0 0 0}
.hr-org ul ul::before{content:"";position:absolute;top:0;left:50%;width:0;height:22px;border-left:2px solid var(--bd2)}
.hr-org-node{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:120px;max-width:160px;padding:10px 12px;border:1px solid var(--bd);border-radius:12px;background:var(--w);box-shadow:var(--sh);text-decoration:none;color:var(--tx);text-align:center}
a.hr-org-node:hover{border-color:var(--pk);box-shadow:var(--shm)}
.hr-org-node.current{border-color:var(--pk);background:var(--pkl)}
.hr-org-name{font-size:12px;font-weight:600;line-height:1.25}
.hr-org-pos{font-size:10.5px;color:var(--tx2);line-height:1.3}
.hr-org-count{font-size:9.5px;color:var(--tl);background:var(--tll);border-radius:99px;padding:1px 7px;font-weight:600}
@media (max-width:760px){
  .hr-split{flex-direction:column}
  .hr-side{width:100%;border-right:none;border-bottom:1px solid var(--bd);padding:0 0 8px;flex-direction:row;overflow-x:auto}
  .hr-side button{white-space:nowrap}
  .hr-search{min-width:0;width:100%}
  .hr-profile{padding:16px}
  .hr-kv .hr-kv-row{grid-template-columns:1fr}
}

/* List pagination (see paginateTables in app.js) */
.pg-hide{display:none !important}
.list-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:8px 12px;font-size:11px;color:var(--tx2);border-top:1px solid var(--bd)}
.list-pager .btn{padding:4px 8px}
.list-pager .btn:disabled{opacity:.4;cursor:default}
.clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:520px}

/* ── Roby Hub (module roby_hub, see hub.js) ──
   NotebookLM-style three columns: collapsible history | chat | Roby Studio
   + Notizen & To-dos. Fills the content area itself (.content-hub). */
.content.content-hub{padding:14px 16px;overflow:hidden;display:flex;flex-direction:column}
.hub{display:flex;flex-direction:column;gap:12px;height:100%;min-height:0}
.hub-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.hub-head-sp{flex:1}
.hub-dd{display:inline-flex;align-items:center;gap:6px;background:var(--w);border:1px solid var(--bd);border-radius:10px;padding:0 4px 0 10px;height:34px;color:var(--tx2);font-size:12px;box-shadow:var(--sh);max-width:100%}
.hub-dd span{white-space:nowrap}
.hub-dd select{border:none;background:transparent;font:inherit;font-weight:600;color:var(--tx);padding:6px 4px;max-width:260px;cursor:pointer;outline:none}
.hub-search{display:inline-flex;align-items:center;gap:6px;background:var(--w);border:1px solid var(--bd);border-radius:10px;padding:0 10px;height:34px;color:var(--tx3)}
.hub-search input{border:none;outline:none;font:inherit;font-size:12px;width:150px;background:transparent;color:var(--tx)}
.hub-grid{flex:1;min-height:0;display:grid;grid-template-columns:250px minmax(0,1fr) 340px;gap:12px}
.hub-grid.hist-closed{grid-template-columns:44px minmax(0,1fr) 340px}
.hub-card{background:var(--w);border:1px solid var(--bd);border-radius:14px;box-shadow:var(--sh);display:flex;flex-direction:column;min-height:0;overflow:hidden}
.hub-card-head{display:flex;align-items:center;gap:6px;padding:12px 14px 8px;font-size:13px}
.hub-icon-btn{background:none;border:none;color:var(--tx2);cursor:pointer;border-radius:8px;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
.hub-icon-btn:hover{background:var(--bg);color:var(--tx)}
.hub-icon-btn:disabled{opacity:.4;cursor:default}
.hub-icon-btn.rec{color:var(--rd);background:var(--rdl)}
.hub-pill{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:600;color:var(--tx2);background:var(--bg);border-radius:99px;padding:2px 9px;white-space:nowrap}
.hub-pill-ok{color:var(--gn);background:var(--gnl)}
.hub-pill .dot{width:6px;height:6px}
.hub-flash{animation:hubFlash 1.4s ease}
@keyframes hubFlash{0%,40%{background:var(--pkl)}100%{background:transparent}}

/* history */
.hub-hist{padding-bottom:8px}
.hub-grid.hist-closed .hub-hist{align-items:center;padding-top:8px}
.hub-hist .hub-card-head b{flex:1}
.hub-hist-list{flex:1;overflow-y:auto;padding:0 8px}
.hub-hist-group{font-size:11px;font-weight:700;color:var(--tx);padding:10px 6px 4px}
.hub-hist-item{display:flex;align-items:flex-start;gap:8px;width:100%;text-align:left;background:none;border:none;border-radius:10px;padding:7px 6px;cursor:pointer;font:inherit;color:var(--tx)}
.hub-hist-item:hover{background:var(--bg)}
.hub-hist-item.on{background:var(--pkl)}
.hub-hist-ico{width:24px;height:24px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--bll);color:var(--bl)}
.hub-hist-ico.t-chat,.hub-hist-ico.t-roby{background:var(--pul);color:var(--pu)}
.hub-hist-ico.t-note{background:var(--yel);color:var(--ye)}
.hub-hist-ico.t-task{background:var(--gnl);color:var(--gn)}
.hub-hist-txt{flex:1;min-width:0;display:flex;flex-direction:column}
.hub-hist-txt b{font-size:11.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-hist-txt small{font-size:10px;color:var(--tx3)}
.hub-hist-time{font-size:10px;color:var(--tx3);white-space:nowrap;flex-shrink:0}
.hub-hist-foot{margin:6px 10px 0;display:flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--bd);border-radius:10px;padding:9px 12px;font:inherit;font-size:12px;font-weight:500;color:var(--tx);cursor:pointer}

/* chat */
.hub-chat-head{display:flex;align-items:center;gap:8px;padding:14px 18px 10px;font-size:14px}
.hub-chat-body{flex:1;min-height:0;overflow-y:auto;padding:6px 18px 16px;display:flex;flex-direction:column;gap:14px}
.hub-banner{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;background:var(--bll);color:var(--tx);border-radius:10px;padding:9px 12px}
.hub-banner-err{background:var(--rdl)}
.hub-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px 10px;gap:8px}
.hub-empty h2{font-size:20px;font-weight:700;margin-top:18px}
.hub-empty p{font-size:12.5px;color:var(--tx2);max-width:440px;line-height:1.5}
.hub-empty-bubble{position:relative;width:62px;height:50px;border-radius:16px;background:var(--w);box-shadow:0 0 0 18px rgba(214,66,143,.06),0 0 60px 30px rgba(124,92,217,.12),var(--shm);display:flex;align-items:center;justify-content:center;gap:5px}
.hub-empty-bubble::after{content:"";position:absolute;bottom:-7px;left:14px;border:8px solid transparent;border-top-color:var(--w);border-bottom:0}
.hub-empty-bubble span{width:7px;height:7px;border-radius:50%;background:var(--pk)}
.hub-quick-row{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:18px}
.hub-quick{display:inline-flex;align-items:center;gap:7px;background:var(--w);border:1px solid var(--bd);border-radius:10px;padding:9px 13px;font:inherit;font-size:12px;font-weight:500;color:var(--tx);cursor:pointer}
.hub-quick:hover{border-color:var(--pk);color:var(--pk)}
.hub-msg{display:flex;gap:9px;align-items:flex-start;max-width:100%}
.hub-msg.user{justify-content:flex-end}
.hub-msg.user .hub-bubble{background:var(--pkl);border-color:transparent;max-width:75%}
.hub-av{width:28px;height:28px;border-radius:9px;background:var(--pk);color:#fff;font-weight:700;font-size:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.hub-bot-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.hub-bubble{background:var(--w);border:1px solid var(--bd);border-radius:12px;padding:10px 13px;font-size:13px;line-height:1.55;overflow-wrap:anywhere}
.hub-bubble-err{background:var(--rdl);border-color:transparent;color:var(--rd)}
.hub-md>:first-child{margin-top:0}
.hub-md p{margin:0 0 8px}.hub-md p:last-child{margin-bottom:0}
.hub-md ul,.hub-md ol{margin:4px 0 8px 20px}
.hub-md h2,.hub-md h3,.hub-md h4{font-size:13.5px;margin:10px 0 6px}
.hub-md table{border-collapse:collapse;margin:6px 0;font-size:12px;display:block;overflow-x:auto}
.hub-md th,.hub-md td{border:1px solid var(--bd);padding:4px 8px;text-align:left;vertical-align:top}
.hub-md th{background:var(--bg)}
.hub-md pre{background:var(--bg);border-radius:8px;padding:8px 10px;overflow-x:auto;font-size:12px}
.hub-md code{background:var(--bg);border-radius:4px;padding:0 4px;font-size:12px}
.hub-md a{color:var(--pk)}
.hub-typing{display:flex;align-items:center;gap:4px}
.hub-typing span{width:6px;height:6px;border-radius:50%;background:var(--tx3);animation:hubDot 1.2s infinite}
.hub-typing span:nth-child(2){animation-delay:.15s}.hub-typing span:nth-child(3){animation-delay:.3s}
.hub-typing em{font-size:11px;color:var(--tx3);margin-left:6px}
@keyframes hubDot{0%,80%,100%{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
.hub-cites{display:flex;flex-wrap:wrap;gap:6px}
.hub-cite{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;color:var(--bl);background:var(--bll);border-radius:6px;padding:2px 8px;text-decoration:none;max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-msg-actions{display:flex;flex-wrap:wrap;gap:4px}
.hub-msg-actions button{display:inline-flex;align-items:center;gap:4px;background:none;border:1px solid transparent;border-radius:7px;padding:3px 7px;font:inherit;font-size:11px;color:var(--tx2);cursor:pointer}
.hub-msg-actions button:hover{border-color:var(--bd);background:var(--bg);color:var(--tx)}
.hub-split-bar{display:flex;align-items:center;justify-content:space-between;margin:4px 0 6px}
.hub-split-all{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--tx2);cursor:pointer}
.hub-split-add{background:none;border:1px dashed var(--bd);border-radius:8px;padding:4px 10px;font:inherit;font-size:12px;color:var(--tx2);cursor:pointer}
.hub-split-add:hover{border-color:var(--pk);color:var(--pk)}
.hub-split-list{display:flex;flex-direction:column;gap:6px;max-height:min(52vh,520px);overflow:auto;padding-right:2px}
.hub-split-row{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border:1px solid var(--bd);border-radius:10px;background:var(--w);transition:opacity .15s}
.hub-split-row.off{opacity:.45}
.hub-split-row>input[type=checkbox]{margin-top:8px;flex:none}
.hub-split-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.hub-split-main input,.hub-split-main textarea,.hub-split-row>input[type=date]{width:100%;font-family:inherit;font-size:13px;color:var(--tx);background:transparent;border:1px solid transparent;border-radius:7px;padding:5px 7px}
.hub-split-main input{font-weight:600}
.hub-split-main textarea{font-size:12px;color:var(--tx2);resize:vertical;min-height:28px}
.hub-split-main input:hover,.hub-split-main textarea:hover,.hub-split-row>input[type=date]:hover{border-color:var(--bd)}
.hub-split-main input:focus,.hub-split-main textarea:focus,.hub-split-row>input[type=date]:focus{outline:2px solid var(--pkl);border-color:var(--pk);background:var(--w)}
.hub-split-row>input[type=date]{width:136px;flex:none;font-size:12px;color:var(--tx2)}
.hub-split-row .row-ib{margin-top:3px}
.hub-split-ai{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:12px;color:var(--tx2);background:var(--bg);border-radius:9px;padding:7px 10px;margin:0 0 12px}
.hub-split-ai:empty{display:none}
.hub-split-ai.done{color:var(--tx)}
.hub-split-ai.error{color:var(--tx2)}
.hub-split-ai button{background:none;border:none;padding:0;font:inherit;font-size:12px;font-weight:600;color:var(--pk);cursor:pointer}
.hub-split-ai button:hover{text-decoration:underline}
.hub-split-spin{width:12px;height:12px;border-radius:50%;border:2px solid var(--bd);border-top-color:var(--pk);animation:hubSplitSpin .7s linear infinite;flex:none}
@keyframes hubSplitSpin{to{transform:rotate(360deg)}}
.hub-split-who{align-self:flex-start;display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:var(--tx2);background:var(--bg);border-radius:20px;padding:2px 4px 2px 8px;margin-left:7px}
.hub-split-who button{background:none;border:none;padding:2px;border-radius:50%;line-height:0;color:var(--tx3);cursor:pointer}
.hub-split-who button:hover{color:var(--rd);background:var(--w)}
@media (max-width:560px){.hub-split-row{flex-wrap:wrap}.hub-split-row>input[type=date]{margin-left:22px}}

/* workspace sources strip */
.hub-ws-strip{border-top:1px solid var(--bd);border-bottom:1px solid var(--bd);background:var(--bg)}
.hub-ws-bar{display:flex;align-items:center;gap:8px;padding:7px 14px;flex-wrap:wrap}
.hub-ws-toggle{display:inline-flex;align-items:center;gap:5px;background:none;border:none;font:inherit;font-size:12px;cursor:pointer;color:var(--tx)}
.hub-count{font-size:10px;font-weight:700;background:var(--w);border:1px solid var(--bd);border-radius:99px;padding:0 6px}
.hub-status{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:600;border-radius:99px;padding:2px 9px;white-space:nowrap}
.hub-spin{width:9px;height:9px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:hubSpin .8s linear infinite}
@keyframes hubSpin{to{transform:rotate(360deg)}}
.hub-ws-err{font-size:11px;color:var(--rd);max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-sources{max-height:190px;overflow-y:auto;padding:0 14px 8px}
.hub-source{display:flex;align-items:center;gap:8px;padding:5px 0;border-top:1px solid var(--bd);font-size:12px;color:var(--tx2)}
.hub-source-name{flex:1;min-width:0;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* composer */
.hub-composer-wrap{padding:0 18px 16px}
.hub-attach-row{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}
.hub-composer{border:1px solid var(--bd);border-radius:14px;background:var(--w);box-shadow:var(--sh);padding:10px 10px 8px 14px}
.hub-composer:focus-within{border-color:var(--pk)}
.hub-composer.disabled{opacity:.6}
.hub-composer textarea{width:100%;border:none;outline:none;resize:none;font:inherit;font-size:13px;line-height:1.5;background:transparent;color:var(--tx);min-height:24px;max-height:180px}
.hub-composer-row{display:flex;align-items:center;gap:6px;margin-top:6px;flex-wrap:wrap}
.hub-chip{display:inline-flex;align-items:center;gap:5px;background:var(--w);border:1px solid var(--bd);border-radius:9px;padding:5px 10px;font:inherit;font-size:11.5px;color:var(--tx);cursor:pointer}
.hub-chip:hover:not(:disabled){border-color:var(--bd2);background:var(--bg)}
.hub-chip.on{border-color:var(--pk);color:var(--pk);background:var(--pkl)}
.hub-chip:disabled{opacity:.45;cursor:default}
.hub-send{width:36px;height:36px;border-radius:11px;border:none;background:var(--pk);color:#fff;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.hub-send:hover:not(:disabled){background:#A83872}
.hub-send:disabled{opacity:.45;cursor:default}

/* right column */
.hub-side{display:flex;flex-direction:column;gap:12px;min-height:0;overflow-y:auto}
.hub-side .hub-card{flex-shrink:0;overflow:visible}
.hub-info{color:var(--tx3);display:inline-flex}
.hub-tiles{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:4px 12px 4px}
.hub-tile{position:relative;text-align:left;border:none;border-radius:12px;background:var(--tile-bg);padding:11px 34px 11px 11px;cursor:pointer;font:inherit;display:flex;flex-direction:column;gap:5px;min-height:88px}
.hub-tile.wide{grid-column:1/-1;min-height:70px}
.hub-tile:hover{box-shadow:var(--shm)}
.hub-tile.off{opacity:.55}
.hub-tile-t{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--tile-fg)}
.hub-tile-d{font-size:10.5px;color:var(--tx2);line-height:1.4}
.hub-tile-go{position:absolute;right:9px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:50%;background:var(--w);display:flex;align-items:center;justify-content:center;color:var(--tx)}
.hub-studio-foot{padding:8px 14px 12px;font-size:11.5px}
.hub-studio-foot a,.hub-all-link{color:var(--pk);text-decoration:none;font-weight:600}
.hub-tabs{display:flex;gap:14px;padding:0 14px;border-bottom:1px solid var(--bd)}
.hub-tabs button{background:none;border:none;border-bottom:2px solid transparent;padding:6px 2px;font:inherit;font-size:12px;color:var(--tx2);cursor:pointer;margin-bottom:-1px}
.hub-tabs button.on{color:var(--pk);border-bottom-color:var(--pk);font-weight:600}
.hub-notes-list{padding:4px 14px}
.hub-todo,.hub-note{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--bd);font-size:12px}
.hub-todo input{accent-color:var(--pk);width:15px;height:15px;flex-shrink:0;cursor:pointer}
.hub-todo-t,.hub-note-t{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;display:inline-flex;align-items:center;gap:4px}
.hub-note{color:var(--tx2)}
.hub-note-t{color:var(--tx);cursor:default}
.hub-quick-add{display:flex;align-items:center;gap:4px;margin:8px 14px 0;border:1px solid var(--bd);border-radius:10px;padding:0 4px 0 10px;height:34px;box-sizing:border-box}
.hub-quick-add input{flex:1;border:none;outline:none;font:inherit;font-size:12px;padding:7px 0;background:transparent;color:var(--tx)}
.hub-all-link{display:block;padding:10px 14px 12px;font-size:11.5px}

/* modals */
.hub-agent-list{display:flex;flex-direction:column;gap:6px;max-height:55vh;overflow-y:auto}
.hub-agent{display:flex;align-items:center;gap:10px;border:1px solid var(--bd);border-radius:10px;padding:9px 11px}
.hub-agent:hover{background:var(--bg)}
.hub-agent-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.hub-note-full{border:1px solid var(--bd);border-radius:10px;padding:9px 11px;font-size:12.5px}
.hub-admin-list{display:flex;flex-direction:column;gap:10px;max-height:58vh;overflow-y:auto}
.hub-admin-app{border:1px solid var(--bd);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.hub-admin-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.hub-admin-row select,.hub-admin-row .hub-admin-name{flex:1;min-width:160px}
.hub-admin-check input{width:auto;margin:0;flex:none}
.hub-admin-row code{font-size:10.5px;color:var(--tx3)}
.hub-admin-check{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;white-space:nowrap;margin:0}
.hub-admin-grants{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center}

@media (max-width:1180px){
  .hub-grid{position:relative}
  .hub-grid,.hub-grid.hist-closed{grid-template-columns:44px minmax(0,1fr) 300px}
  .hub-grid:not(.hist-closed) .hub-hist{position:absolute;z-index:20;left:0;top:0;bottom:0;width:260px;box-shadow:var(--shm)}
}
@media (max-width:860px){
  .content.content-hub{overflow-y:auto;display:block;padding:10px}
  .hub{height:auto}
  .hub-grid,.hub-grid.hist-closed{display:flex;flex-direction:column}
  .hub-grid:not(.hist-closed) .hub-hist{position:static;width:auto;max-height:300px;box-shadow:var(--sh)}
  .hub-grid.hist-closed .hub-hist{flex-direction:row;padding:4px}
  .hub-chat{min-height:70vh}
  .hub-side{overflow:visible}
  .hub-search input{width:100px}
}

/* Collapsible main menu (desktop) */
.sb-collapse-btn{width:32px;height:32px;border-radius:8px;border:1px solid var(--bd);background:var(--w);color:var(--tx2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
.sb-collapse-btn:hover{color:var(--tx);background:var(--bg)}
@media (min-width:761px){body.sb-collapsed .sb{display:none !important}}
@media (max-width:760px){.sb-collapse-btn{display:none}}

/* Roby Hub: resizable columns, Chat/Apps switch */
.hub-grid{grid-template-columns:var(--hub-left,250px) 8px minmax(0,1fr) 8px var(--hub-right,340px);gap:2px}
.hub-grid.hist-closed{grid-template-columns:44px 8px minmax(0,1fr) 8px var(--hub-right,340px)}
.hub-gutter{cursor:col-resize;border-radius:4px;position:relative}
.hub-gutter::after{content:"";position:absolute;top:50%;left:3px;width:2px;height:36px;margin-top:-18px;border-radius:2px;background:var(--bd2);opacity:0;transition:opacity .15s}
.hub-gutter:hover::after,body.hub-resizing .hub-gutter::after{opacity:1}
.hub-grid.hist-closed .hub-gutter[data-side=left]{cursor:default}
.hub-grid.hist-closed .hub-gutter[data-side=left]::after{display:none}
body.hub-resizing{cursor:col-resize;user-select:none}
.hub-seg{display:inline-flex;background:var(--w);border:1px solid var(--bd);border-radius:10px;padding:3px;box-shadow:var(--sh);height:34px}
.hub-seg button{display:inline-flex;align-items:center;gap:5px;border:none;background:none;border-radius:7px;padding:0 11px;font:inherit;font-size:12px;font-weight:600;color:var(--tx2);cursor:pointer}
.hub-seg button.on{background:var(--pkl);color:var(--pk)}
.hub-title-edit{cursor:text;border-radius:6px;padding:1px 4px;margin-left:-4px}
.hub-title-edit:hover{background:var(--bg)}
.hub-quick-bp{text-align:left;max-width:280px}
.hub-quick-bp span{display:flex;flex-direction:column}
.hub-quick-bp small{font-size:10.5px;color:var(--tx3);font-weight:400}
.hub-attach-row{align-items:center}
.hub-attach-sp{flex:1}
.hub-act-strong{color:var(--pk) !important;border-color:var(--pkl) !important;background:var(--pkl) !important}
.hub-check .hub-bubble{background:var(--gnl);border-color:transparent}
.hub-check.warn .hub-bubble{background:var(--yel)}
.hub-av-check{background:var(--gn)}
.hub-check.warn .hub-av-check{background:var(--ye)}
.hub-check-label{font-size:10.5px;font-weight:600;color:var(--tx2)}

/* Lektorat review */
.hub-lek-list{display:flex;flex-direction:column;gap:10px;max-height:60vh;overflow-y:auto}
.hub-lek-para{border:1px solid var(--bd);border-radius:10px;padding:10px 12px}
.hub-lek-ctx{font-size:12px;color:var(--tx2);margin-bottom:8px;line-height:1.5}
.hub-lek-patch{border-top:1px dashed var(--bd);padding:7px 0;font-size:12.5px}
.hub-lek-patch del{color:var(--rd);background:var(--rdl);text-decoration:line-through}
.hub-lek-patch ins{color:var(--gn);background:var(--gnl);text-decoration:none}
.hub-lek-patch.rejected{opacity:.5}
.hub-lek-btns{display:flex;gap:6px;margin-top:5px}
.hub-lek-btns button{border:1px solid var(--bd);background:var(--w);border-radius:7px;padding:3px 10px;font:inherit;font-size:11px;cursor:pointer}
.hub-lek-btns button.on{border-color:var(--pk);color:var(--pk);background:var(--pkl)}

/* App-Übersicht */
.hub-apps{flex:1;min-height:0;overflow-y:auto;background:var(--w);border:1px solid var(--bd);border-radius:14px;box-shadow:var(--sh);padding:18px 20px}
.hub-apps-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:6px}
.hub-apps-head h2{font-size:17px;margin-bottom:3px}
.hub-apps-sec{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--tx3);margin:16px 0 8px;background:none;border:none;font-family:inherit;padding:0}
.hub-apps-toggle{cursor:pointer}
.hub-apps-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.hub-app{border:1px solid var(--bd);border-radius:12px;background:var(--w);display:flex;flex-direction:column;transition:box-shadow .12s,border-color .12s}
.hub-app:hover{box-shadow:var(--shm);border-color:var(--bd2)}
.hub-app.dragging{opacity:.4}
.hub-app.is-hidden{opacity:.55}
.hub-app-main{display:flex;gap:10px;align-items:flex-start;text-align:left;background:none;border:none;padding:12px 12px 6px;font:inherit;cursor:pointer;color:var(--tx)}
.hub-app-logo{width:34px;height:34px;border-radius:10px;color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.hub-app-txt{display:flex;flex-direction:column;min-width:0}
.hub-app-txt b{font-size:12.5px}
.hub-app-txt small{font-size:11px;color:var(--tx2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.hub-app-foot{display:flex;align-items:center;gap:4px;padding:0 6px 6px 12px;flex-wrap:wrap}
.hub-icon-btn.fav{color:var(--ye)}
.hub-app-new{align-items:center;justify-content:center;gap:4px;padding:16px;border-style:dashed;color:var(--tx2);font:inherit;cursor:pointer;text-align:center;min-height:96px}
.hub-app-new b{font-size:12.5px;color:var(--tx)}
.hub-app-new small{font-size:11px}
@media (max-width:1180px){
  .hub-grid,.hub-grid.hist-closed{grid-template-columns:44px 8px minmax(0,1fr) 8px var(--hub-right,300px)}
}
@media (max-width:860px){
  .hub-gutter{display:none}
  .hub-apps{overflow:visible}
}

/* Slim, unobtrusive scrollbars everywhere (the default ones looked heavy
   next to the rounded cards). */
*{scrollbar-width:thin;scrollbar-color:var(--bd2) transparent}
*::-webkit-scrollbar{width:6px;height:6px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:var(--bd2);border-radius:99px}
*::-webkit-scrollbar-thumb:hover{background:var(--tx3)}
.sb-hide{margin-left:auto;width:26px;height:26px;border:none;border-radius:7px;background:none;color:var(--tx3);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s,background .15s;flex-shrink:0}
.sb:hover .sb-hide,.sb-hide:focus-visible{opacity:1}
.sb-hide:hover{background:var(--bg);color:var(--tx)}
@media (max-width:760px){.sb-hide{display:none}}
/* The topbar toggle only shows while the menu is hidden (hiding happens via
   the icon in the sidebar header). */
@media (min-width:761px){
  .sb-collapse-btn{display:none}
  body.sb-collapsed .sb-collapse-btn{display:inline-flex;width:auto;padding:0 10px;gap:6px;font:inherit;font-size:12px;font-weight:600;color:var(--tx2)}
  body.sb-collapsed .sb-collapse-btn::after{content:"Menü"}
}

/* Columns can be dragged fully shut and back open (see hubStartResize). */
.hub-grid.right-closed .hub-side{display:none}
.hub-grid.right-closed .hub-gutter[data-side=right]::after,
.hub-grid.hist-closed .hub-gutter[data-side=left]::after{display:block;opacity:1;background:var(--pk);height:48px;margin-top:-24px}
.hub-grid.hist-closed .hub-gutter[data-side=left]{cursor:col-resize}

/* Roby Hub: areas Chat | Robys | Projekte */
.hub-seg-main button{padding:0 13px}
.hub-seg-sm{height:34px}
.hub-seg-sm button{font-size:11.5px;padding:0 9px}
.hub-scope-pill{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;border-radius:10px;background:var(--bg);border:1px dashed var(--bd2);font-size:12px;color:var(--tx2)}
.hub-dd select optgroup{font-weight:600;color:var(--tx3)}
.hub-proj-row{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:22px;max-width:640px}
.hub-proj-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--bd);background:var(--w);border-radius:99px;padding:5px 11px;font:inherit;font-size:11.5px;color:var(--tx);cursor:pointer}
.hub-proj-chip:hover{border-color:var(--pk);color:var(--pk)}
.hub-tabs-studio{margin:0 0 8px}

/* Pinnwand */
.hub-board-wrap{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;background:var(--w);border:1px solid var(--bd);border-radius:14px;box-shadow:var(--sh);padding:14px 16px;overflow:hidden}
.hub-board-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.hub-color-row{display:flex;gap:4px}
.hub-color{width:20px;height:20px;border-radius:50%;border:1px solid var(--bd2);cursor:pointer;padding:0}
.hub-color.on{outline:2px solid var(--pk);outline-offset:1px}
.hub-color.sm{width:12px;height:12px}
.hub-board{position:relative;flex:1;min-height:360px;border-radius:12px;background-color:var(--bg);background-image:radial-gradient(var(--bd2) 1px,transparent 1px);background-size:18px 18px;overflow:hidden;container-type:size}
.hub-sticky{position:absolute;width:200px;height:150px;left:calc(var(--x) * (100cqw - 200px));top:calc(var(--y) * (100cqh - 150px));border-radius:4px 4px 12px 4px;box-shadow:0 2px 6px rgba(28,31,35,.12),0 8px 18px rgba(28,31,35,.06);padding:10px 11px 7px;display:flex;flex-direction:column;cursor:grab;touch-action:none;user-select:none}
.hub-sticky.dragging{cursor:grabbing;box-shadow:var(--shm);z-index:5;transform:rotate(-1.2deg)}
.hub-sticky-text{flex:1;font-size:12.5px;line-height:1.45;white-space:pre-wrap;overflow:hidden;color:var(--tx)}
.hub-sticky-edit{flex:1;min-height:100px;border:none;background:rgba(255,255,255,.55);border-radius:6px;font:inherit;font-size:12.5px;padding:4px;resize:none;outline:none}
.hub-sticky-foot{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--tx2);margin-top:6px}
.hub-sticky-tools{display:inline-flex;align-items:center;gap:3px;opacity:0;transition:opacity .15s}
.hub-sticky:hover .hub-sticky-tools{opacity:1}
.hub-sticky .hub-icon-btn{width:22px;height:22px}
.hub-board-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;font-size:12.5px;color:var(--tx3)}
.hub-board-archive{max-height:180px;overflow-y:auto;border-top:1px solid var(--bd);padding-top:8px;font-size:12px}
.hub-note-dot{width:10px;height:10px;border-radius:3px;flex-shrink:0;border:1px solid var(--bd2)}
@media (max-width:860px){
  .hub-board{min-height:70vh}
  .hub-sticky{width:160px;left:calc(var(--x) * (100cqw - 160px))}
}

.hub-chat-title{min-width:0;max-width:52%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-head-icon{width:34px;height:34px;border-radius:10px;border:1px solid var(--bd);background:var(--w);box-shadow:var(--sh);color:var(--tx2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
.hub-head-icon:hover{color:var(--pk);border-color:var(--pk)}
.hub-search input{width:130px}

/* Recording indicator (Spracheingabe / Diktat) */
.hub-rec{display:flex;align-items:center;gap:10px;margin-top:6px;padding:6px 4px 2px;flex-wrap:wrap}
.hub-rec-dot{width:10px;height:10px;border-radius:50%;background:var(--rd);box-shadow:0 0 0 0 rgba(214,75,75,.5);animation:hubRecPulse 1.2s infinite}
@keyframes hubRecPulse{0%{box-shadow:0 0 0 0 rgba(214,75,75,.55)}70%{box-shadow:0 0 0 9px rgba(214,75,75,0)}100%{box-shadow:0 0 0 0 rgba(214,75,75,0)}}
.hub-rec-label{font-size:12px;font-weight:600;color:var(--tx)}
.hub-rec-time{font-size:12px;font-variant-numeric:tabular-nums;color:var(--tx2);min-width:34px}
.hub-rec-bars{flex:1;display:flex;align-items:center;gap:3px;height:26px;min-width:80px}
.hub-rec-bar{flex:1;max-width:5px;height:100%;border-radius:3px;background:var(--pk);transform:scaleY(.15);transition:transform .08s linear}
@media (prefers-reduced-motion:reduce){.hub-rec-dot{animation:none}}

.hub-pill-docs{color:var(--bl);background:var(--bll)}
.hub-docs{font-size:10.5px;color:var(--bl)}
.hub-proj-label{margin-top:22px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--tx3)}
.hub-proj-row{margin-top:8px}
.hub-pick{text-align:left;font:inherit;cursor:pointer;padding:0}
.hub-pick .hub-app-foot{padding:4px 12px 10px}
.hub-app-main{flex:1}
.hub-app-foot{margin-top:auto;min-height:34px}

.hub-tiles-featured{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));padding:0}

/* Right column: studio / notes split, adjustable in height */
.hub-side{overflow:hidden;gap:0}
.hub-side .hub-studio{flex:none;overflow:auto}
.hub-side .hub-notes{flex:1 1 auto;min-height:0;overflow:auto}
.hub-grid.right-closed .hub-side{display:none}
.hub-vgutter{flex:none;height:12px;cursor:row-resize;position:relative}
.hub-vgutter::after{content:"";position:absolute;left:50%;top:5px;width:36px;height:2px;margin-left:-18px;border-radius:2px;background:var(--bd2);opacity:0;transition:opacity .15s}
.hub-vgutter:hover::after,body.hub-resizing-v .hub-vgutter::after{opacity:1}
body.hub-resizing-v{cursor:row-resize;user-select:none}
@media (max-width:860px){.hub-vgutter{display:none}.hub-side{gap:12px}}

/* Pinnwand as a flipchart: paper sheet on a clamp bar, sticky notes with tape */
.hub-board-wrap{background:linear-gradient(180deg,#eceef1,#e4e7eb)}
.hub-board{background-color:#fffefb;background-image:linear-gradient(rgba(61,111,214,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(61,111,214,.06) 1px,transparent 1px);background-size:28px 28px;border-radius:2px 2px 10px 10px;box-shadow:0 1px 2px rgba(0,0,0,.06),0 12px 30px rgba(28,31,35,.12);margin:18px 6px 4px;overflow:visible}
.hub-board::before{content:"";position:absolute;left:-10px;right:-10px;top:-18px;height:22px;border-radius:7px;background:linear-gradient(180deg,#5b6170,#3c414c);box-shadow:0 3px 6px rgba(0,0,0,.25)}
.hub-board::after{content:"";position:absolute;left:12%;right:12%;top:-12px;height:10px;background:radial-gradient(circle at 6px 5px,#c9ced6 3px,transparent 3.5px) 0 0/48px 10px repeat-x;opacity:.9}
.hub-sticky{border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.08),0 6px 14px rgba(28,31,35,.14);transform:rotate(var(--tilt,-.6deg))}
.hub-sticky:nth-child(3n){--tilt:.8deg}
.hub-sticky:nth-child(3n+1){--tilt:-1deg}
.hub-sticky::before{content:"";position:absolute;top:-9px;left:50%;width:62px;height:18px;margin-left:-31px;background:rgba(255,255,255,.55);border:1px solid rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.08);transform:rotate(-2deg)}
.hub-sticky.dragging{transform:rotate(0) scale(1.03)}
.hub-sticky-text{font-family:'Segoe Print','Bradley Hand','Comic Sans MS',Inter,sans-serif;font-size:13px}

/* Pinnwand v2: binding bar as its own element, resizable notes, grid layout */
.hub-board::before,.hub-board::after{content:none}
.hub-board{margin:0 6px 4px;border-radius:0 0 10px 10px}
.hub-flip-bar{flex:none;height:22px;margin:4px 0 0;border-radius:7px;background:linear-gradient(180deg,#5b6170,#3c414c);box-shadow:0 3px 6px rgba(0,0,0,.25);position:relative;z-index:1}
.hub-flip-bar::after{content:"";position:absolute;left:10%;right:10%;top:6px;height:10px;background:radial-gradient(circle at 6px 5px,#c9ced6 3px,transparent 3.5px) 0 0/48px 10px repeat-x}
.hub-sticky{width:var(--w,200px);height:var(--h,150px);left:calc(var(--x) * (100cqw - var(--w,200px)));top:calc(var(--y) * (100cqh - var(--h,150px)));overflow:hidden;min-width:120px;min-height:40px;max-width:640px;max-height:560px}
.hub-board.grid-mode{display:flex;flex-wrap:wrap;align-content:flex-start;gap:26px 22px;padding:30px 26px;overflow:auto;container-type:normal}
.hub-board.grid-mode .hub-sticky{position:relative;left:auto;top:auto;cursor:default}
.hub-board.grid-mode .hub-board-empty{position:static;flex:1;min-height:300px}

/* Answer fullscreen */
.hub-full{position:fixed;inset:0;z-index:300;background:var(--w);display:flex;flex-direction:column;animation:hubFullIn .15s ease}
@keyframes hubFullIn{from{opacity:0;transform:scale(.985)}to{opacity:1;transform:none}}
.hub-full-head{display:flex;align-items:center;gap:10px;padding:14px 24px;border-bottom:1px solid var(--bd)}
.hub-full-body{flex:1;overflow:auto;padding:28px max(24px,calc((100vw - 1100px) / 2));font-size:14px;line-height:1.65}
.hub-full-body .hub-md table{display:table;width:100%;font-size:13px}
@media print{body>*:not(.hub-full){display:none !important}.hub-full{position:static}.hub-full-head button{display:none}}
.hub-admin-default{display:flex;gap:14px;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:12px 14px;margin-bottom:12px;border-radius:12px;background:var(--pkl)}
.hub-admin-default select{min-width:240px}
.hub-pill-btn{border:none;cursor:pointer;font-family:inherit}
.hub-pill-btn:hover{color:var(--pk)}

/* Roby switcher in the chat head */
.hub-roby-pick{display:flex;flex-wrap:wrap;gap:6px;min-width:0}
.hub-roby-pick button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--bd);background:var(--w);border-radius:99px;padding:5px 12px;font:inherit;font-size:12px;font-weight:500;color:var(--tx2);cursor:pointer;white-space:nowrap}
.hub-roby-pick button:hover{border-color:var(--bd2);color:var(--tx)}
.hub-roby-pick button.on{border-color:var(--pk);background:var(--pkl);color:var(--pk);font-weight:600}
.hub-roby-pick .hub-roby-more{border-style:dashed}

/* Pinnwand v3: resize grip, handwritten headings, arrows */
.hub-flip-bar{display:none}
.hub-board{margin:0 2px 4px;border-radius:10px}
.hub-resize-grip{position:absolute;right:0;bottom:0;width:18px;height:18px;cursor:nwse-resize;z-index:2;opacity:.45;background:linear-gradient(135deg,transparent 50%,rgba(28,31,35,.35) 50%,rgba(28,31,35,.35) 58%,transparent 58%,transparent 70%,rgba(28,31,35,.35) 70%,rgba(28,31,35,.35) 78%,transparent 78%)}
.hub-sticky:hover .hub-resize-grip,.hub-sticky.resizing .hub-resize-grip{opacity:.9}
.hub-sticky.resizing{box-shadow:0 0 0 2px var(--pk),var(--shm)}
.hub-heading{background:transparent !important;box-shadow:none !important;transform:none !important;padding:4px 8px}
.hub-heading::before{display:none}
.hub-heading-text{font-family:'Segoe Print','Bradley Hand','Comic Sans MS',cursive;font-size:24px;font-weight:700;color:#2b3445;line-height:1.2;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:6px;text-decoration-color:rgba(214,66,143,.55)}
.hub-heading-tools{position:absolute;top:-4px;right:18px;opacity:0;transition:opacity .15s}
.hub-heading:hover .hub-heading-tools{opacity:1}
.hub-heading:hover{outline:1px dashed var(--bd2);outline-offset:2px}
.hub-board.grid-mode .hub-heading{flex-basis:100%;width:auto !important;height:auto !important;min-height:44px}
.hub-hand-btn{font-family:'Segoe Print','Bradley Hand','Comic Sans MS',cursive;font-weight:700}
.hub-arrows{position:absolute;left:0;top:0;pointer-events:none;overflow:visible;z-index:0}
.hub-board .hub-sticky{z-index:1}
.hub-arrow{pointer-events:auto;cursor:pointer}
.hub-arrow-hit{fill:none;stroke:transparent;stroke-width:16}
.hub-arrow-line{fill:none;stroke:#3a4253;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;opacity:.85}
.hub-arrow:hover .hub-arrow-line{stroke:var(--rd)}
.hub-board.connecting .hub-sticky{cursor:crosshair}
.hub-board.connecting .hub-sticky:hover{box-shadow:0 0 0 2px var(--pk),var(--shm)}
.hub-sticky.connect-src{box-shadow:0 0 0 3px var(--pk),var(--shm)}

/* Pinnwand polish */
.hub-board.grid-mode .hub-heading{flex:0 0 100%;margin-top:6px}
.hub-heading .hub-resize-grip{opacity:0}
.hub-heading:hover .hub-resize-grip{opacity:.6}
.hub-sticky-foot>span:first-child{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-sticky-text{word-break:break-word;hyphens:auto}
.hub-board.grid-mode .hub-heading{max-width:none}
/* Free layout: a big sheet (fixed height) that scrolls, so positions are the same on every screen */
.hub-board-wrap{overflow:auto}
.hub-board:not(.grid-mode){flex:none;height:1400px;min-height:1400px}

/* ── Pinnwand v4: endless canvas + notes list on the right ── */
.hub-page{height:100%}
.hub-board-wrap{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;overflow:hidden;padding:12px 14px}
.hub-board-wrap.hub-board-full{position:fixed;inset:0;z-index:250;border-radius:0;border:none;padding:14px 18px}
.hub-board-switch{display:flex;align-items:center;gap:4px;min-width:0;flex-wrap:wrap}
.hub-board-switch .hub-dd select{max-width:220px}
.hub-plus{font-size:11px;font-weight:700;margin-left:-3px}
.hub-board-body{flex:1;min-height:0;display:flex;gap:12px}
.hub-canvas-scroll{position:relative;flex:1;min-width:0;overflow:auto;border-radius:12px;background:#fffefb;background-image:linear-gradient(rgba(61,111,214,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(61,111,214,.06) 1px,transparent 1px);background-size:28px 28px;background-attachment:local;box-shadow:inset 0 0 0 1px var(--bd),0 8px 22px rgba(28,31,35,.08);cursor:grab}
.hub-canvas-scroll.panning{cursor:grabbing}
.hub-board-wrap .hub-board,.hub-board-wrap .hub-board:not(.grid-mode){position:relative;flex:none;margin:0;min-height:0;border-radius:0;background:none;box-shadow:none;container-type:normal;overflow:visible}
.hub-board-wrap .hub-sticky{position:absolute;cursor:grab}
.hub-sticky.selected{box-shadow:0 0 0 2px var(--pk),0 10px 24px rgba(28,31,35,.18)}
.hub-heading.selected{outline:2px solid var(--pk);outline-offset:3px;box-shadow:none !important}
.hub-board-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;font-size:13px;color:var(--tx3);pointer-events:none}
.hub-board-empty b{color:var(--tx2)}
.hub-board-list{width:270px;flex:none;display:flex;flex-direction:column;gap:8px;min-height:0;overflow:auto;border:1px solid var(--bd);border-radius:12px;background:var(--w);padding:12px}
.hub-board-list-head{display:flex;align-items:center;gap:6px;font-size:13px}
.hub-board-new{display:flex;flex-direction:column;gap:6px}
.hub-board-new textarea{width:100%;resize:vertical;min-height:52px;border:1px solid var(--bd);border-radius:9px;padding:7px 9px;font:inherit;font-size:12.5px}
.hub-board-new-row{display:flex;align-items:center;justify-content:space-between;gap:6px}
.hub-board-filter{border:1px solid var(--bd);border-radius:9px;padding:6px 9px;font:inherit;font-size:12px}
.hub-board-items{display:flex;flex-direction:column;gap:6px}
.hub-board-item{display:flex;align-items:flex-start;gap:8px;padding:8px 9px;border:1px solid var(--bd);border-radius:9px;background:var(--w);font-size:12px;cursor:grab;user-select:none}
.hub-board-item:hover{border-color:var(--bd2);box-shadow:var(--sh)}
.hub-board-item .hub-note-dot{margin-top:3px}
.hub-board-item-t{flex:1;min-width:0;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4}
.hub-board-item-grip{color:var(--tx3);letter-spacing:-2px;font-size:11px}
.hub-board-item.on-board{cursor:pointer;opacity:.6;background:var(--bg)}
.hub-board-item-on{color:var(--pk)}
.hub-board-item.archived{cursor:default}
.hub-board-archive-btn{display:flex;align-items:center;gap:6px;border:none;background:none;font:inherit;font-size:11.5px;color:var(--tx2);cursor:pointer;padding:4px 0}
@media (max-width:860px){
  .hub-board-body{flex-direction:column}
  .hub-board-list{width:auto;max-height:260px}
  .hub-canvas-scroll{min-height:60vh}
}
.hub-board-newbtn{padding:5px 10px;font-size:11.5px;margin-left:4px}
.hub-app-std{border-color:var(--bd2);background:linear-gradient(180deg,var(--w),var(--bg))}
.hub-project-head{font-size:13px}.hub-project-head a{color:var(--tx2);text-decoration:none;display:inline-flex;align-items:center;gap:6px}
.content.content-hub.content-pboard{padding:16px}
.content-pboard .hub-page{gap:0}

/* Pinnwand images */
.hub-image{background:var(--w) !important;padding:6px;border-radius:6px;box-shadow:0 2px 8px rgba(28,31,35,.16) !important;transform:none !important}
.hub-image::before{display:none}
.hub-image img{width:100%;height:100%;object-fit:contain;display:block;border-radius:3px;background:var(--bg);pointer-events:none;user-select:none}
.hub-image .hub-heading-tools{top:4px;right:6px;background:rgba(255,255,255,.9);border-radius:8px}
.hub-image:hover .hub-heading-tools{opacity:1}
.hub-paste-hint{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.hub-hist-more{display:block;width:100%;padding:10px;text-align:center;font-size:11px;color:var(--tx3);background:none;border:0;cursor:pointer}
button.hub-hist-more:hover{color:var(--pk)}
.hub-toast-undo{margin-left:12px;background:none;border:0;color:#ffd166;font-weight:700;font-size:12px;cursor:pointer;padding:0}
.toast.on{pointer-events:auto}
.hub-board-item-del,.hub-note-del{opacity:0;transition:opacity .15s;flex-shrink:0}
.hub-board-item:hover .hub-board-item-del,.hub-note:hover .hub-note-del,.hub-board-item.archived .hub-board-item-del{opacity:1}
.hub-board-item-del:hover,.hub-note-del:hover{color:var(--rd)}
@media (hover:none){.hub-board-item-del,.hub-note-del{opacity:1}}
/* Same box as .hub-search / .hub-quick-add (34px, radius 10, 14px inset like the lists) so every hub search field has one size. */
.hub-mini-search{display:flex;align-items:center;gap:6px;margin:8px 14px 6px;padding:0 10px;height:34px;box-sizing:border-box;border:1px solid var(--bd);border-radius:10px;background:var(--w);color:var(--tx3)}
.hub-mini-search:focus-within{border-color:var(--pk)}
.hub-mini-search input{flex:1;min-width:0;border:0;outline:0;background:none;font:inherit;font-size:12px;padding:0;height:100%;min-height:0;box-shadow:none;color:var(--tx)}
.hub-mini-search .hub-icon-btn{width:24px;height:24px}
.hub-tiles-found{max-height:340px;overflow-y:auto}

/* ── Neuigkeiten: full-screen news overlay (app.js openNewsOverlay) ── */
.news-ov{position:fixed;inset:0;z-index:2000;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(17,19,24,.62);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);opacity:0;transition:opacity .2s ease}
.news-ov.on{opacity:1}
.news-card{position:relative;display:flex;flex-direction:column;width:min(760px,100%);max-height:calc(100dvh - 48px);background:var(--w);border-radius:20px;box-shadow:0 24px 70px rgba(0,0,0,.35);overflow:hidden;transform:translateY(14px) scale(.98);transition:transform .25s ease}
.news-ov.on .news-card{transform:none}
.news-x{position:absolute;top:12px;right:12px;z-index:2;width:34px;height:34px;border-radius:50%;border:none;background:rgba(255,255,255,.88);color:var(--tx);font-size:14px;cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.12)}
.news-x:hover{background:#fff}
.news-hero{flex-shrink:0;max-height:42vh;overflow:hidden;background:var(--bg);display:flex;align-items:center;justify-content:center}
.news-hero img{display:block;width:100%;max-height:42vh;object-fit:cover}
.news-hero-plain{height:120px;background:linear-gradient(120deg,var(--pk) 0%,var(--pu) 55%,var(--tl) 100%)}
.news-hero-plain span{font-size:44px;filter:drop-shadow(0 4px 10px rgba(0,0,0,.2))}
.news-main{padding:26px 34px 10px;overflow-y:auto;min-height:0}
.news-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11.5px;color:var(--tx2);margin-bottom:10px}
.news-pill{background:var(--pkl);color:var(--pk);font-weight:700;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;padding:4px 10px;border-radius:999px}
.news-title{font-size:26px;line-height:1.2;font-weight:800;letter-spacing:-.01em;color:var(--tx);margin-bottom:12px}
.news-body{font-size:14.5px;line-height:1.65;color:var(--tx)}
.news-body p{margin:0 0 12px}
.news-body ul,.news-body ol{margin:0 0 12px 22px}
.news-body li{margin:3px 0}
.news-body h2,.news-body h3,.news-body h4{font-size:16px;margin:16px 0 6px}
.news-body a{color:var(--pk);font-weight:600}
.news-body img{max-width:100%}
.news-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 34px 22px;border-top:1px solid var(--bd)}
.news-dots{display:flex;gap:6px}
.news-dots button{width:8px;height:8px;border-radius:999px;border:none;padding:0;background:var(--bd2);cursor:pointer;transition:width .2s,background .2s}
.news-dots button.on{width:22px;background:var(--pk)}
.news-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;margin-left:auto}
.news-actions .btn{padding:9px 18px;font-size:13px}
.news-cta{text-decoration:none}
@media (max-width:760px){
  .news-ov{padding:0}
  .news-card{width:100%;height:100dvh;max-height:100dvh;border-radius:0}
  .news-main{padding:20px 18px 8px;flex:1}
  .news-title{font-size:22px}
  .news-foot{padding:14px 18px calc(16px + env(safe-area-inset-bottom))}
  .news-actions{width:100%}
  .news-actions .btn{flex:1;text-align:center;justify-content:center}
}
/* Superadmin editor */
.news-img-prev{display:flex;align-items:center;gap:10px;margin-top:6px}
.news-img-prev img{max-height:80px;max-width:180px;border-radius:8px;border:1px solid var(--bd)}
.news-org-list{display:flex;flex-wrap:wrap;gap:6px;max-height:120px;overflow-y:auto;padding:6px;border:1px solid var(--bd);border-radius:8px}
.news-org{display:flex !important;align-items:center;gap:5px;font-size:11.5px !important;font-weight:500 !important;color:var(--tx) !important;margin:0 !important;padding:3px 8px;background:var(--bg);border-radius:999px;cursor:pointer}


/* ═════════════ SIMPLE BY DEFAULT + MOTION ═════════════
   Same look as before -- this layer only adds calm, quick motion and
   tightens small details. Everything respects prefers-reduced-motion. */
:root{
  --ease-out:cubic-bezier(.22,1,.36,1);
  --ease-spring:cubic-bezier(.34,1.56,.64,1);
  --dur-1:.14s;--dur-2:.24s;--dur-3:.42s;
}

/* Sidebar: optional Funktionen the user hasn't switched on */
.sb-nav .ni.ni-off{display:none}
.ni-add{display:flex;align-items:center;gap:8px;width:100%;padding:7px 8px;margin-top:10px;border:1px dashed var(--bd2);border-radius:9px;background:none;color:var(--tx2);font-size:11.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:background var(--dur-2),color var(--dur-2),border-color var(--dur-2)}
.ni-add:hover{background:var(--pkl);border-color:var(--pk);color:var(--pk)}
.ni-add-ico{width:22px;height:22px;border-radius:7px;background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:500;line-height:1;transition:transform var(--dur-3) var(--ease-spring),background var(--dur-2)}
.ni-add:hover .ni-add-ico{transform:rotate(90deg);background:var(--w)}

/* Nav items: soft hover, springy icon, animated active bar */
.ni{position:relative;transition:background-color var(--dur-2) var(--ease-out),color var(--dur-2) var(--ease-out)}
.ni .ni-ico{transition:transform var(--dur-3) var(--ease-spring)}
.ni:hover .ni-ico{transform:scale(1.1)}
/* Press feedback on the icon only: shrinking the whole entry moved its edge
   out from under the pointer, so a press near the edge lost the click. */
.ni:active .ni-ico{transform:scale(.92)}
.ni.on{box-shadow:none}
.ni.on::before{content:"";position:absolute;left:-8px;top:7px;bottom:7px;width:3px;border-radius:0 3px 3px 0;background:var(--pk);animation:navBarIn var(--dur-3) var(--ease-spring)}
@keyframes navBarIn{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}
.sb-org,.sb-user{transition:background-color var(--dur-2)}

/* Popups (user / org menu) */
.user-popup{animation:popUp var(--dur-2) var(--ease-out);transform-origin:bottom center}
.org-popup{animation:popDown var(--dur-2) var(--ease-out);transform-origin:top center}
.user-popup-item,.org-popup-item{transition:background-color var(--dur-1)}
@keyframes popUp{from{opacity:0;transform:translateY(6px) scale(.97)}to{opacity:1;transform:none}}
@keyframes popDown{from{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:none}}

/* View change: content slides in softly, first blocks slightly staggered */
.content.view-enter > *{animation:viewIn var(--dur-3) var(--ease-out) both}
.content.view-enter > *:nth-child(2){animation-delay:.04s}
.content.view-enter > *:nth-child(3){animation-delay:.08s}
.content.view-enter > *:nth-child(4){animation-delay:.12s}
.content.view-enter > *:nth-child(n+5){animation-delay:.16s}
@keyframes viewIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.content.view-enter .pc,.content.view-enter .widget,.content.view-enter .kcard{animation:cardIn .5s var(--ease-out) both}
.content.view-enter .pc:nth-child(2),.content.view-enter .widget:nth-child(2),.content.view-enter .kcard:nth-child(2){animation-delay:.05s}
.content.view-enter .pc:nth-child(3),.content.view-enter .widget:nth-child(3),.content.view-enter .kcard:nth-child(3){animation-delay:.1s}
.content.view-enter .pc:nth-child(4),.content.view-enter .widget:nth-child(4),.content.view-enter .kcard:nth-child(4){animation-delay:.15s}
.content.view-enter .pc:nth-child(n+5),.content.view-enter .widget:nth-child(n+5),.content.view-enter .kcard:nth-child(n+5){animation-delay:.2s}
@keyframes cardIn{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}

/* Buttons: tactile press, gentle lift on primary */
.btn{transition:background-color var(--dur-2) var(--ease-out),border-color var(--dur-2),color var(--dur-2),box-shadow var(--dur-2) var(--ease-out),transform var(--dur-1) var(--ease-out)}
.btn:active{transform:scale(.97)}
.btn-pk:hover{box-shadow:0 4px 14px rgba(214,66,143,.28)}
.btn:focus-visible,.ni:focus-visible,.ni-add:focus-visible,.feat-card:focus-visible{outline:2px solid var(--pk);outline-offset:2px}
.vb{transition:background-color var(--dur-2) var(--ease-out),color var(--dur-2),box-shadow var(--dur-2)}

/* Cards: hover lift */
.pc{transition:transform var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out),border-color var(--dur-2)}
.pc:hover{transform:translateY(-2px)}
.kcard{transition:transform var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out),border-color var(--dur-2),opacity var(--dur-2)}
.kcard:hover{transform:translateY(-1px)}
.kcard.dragging{transform:rotate(1.5deg) scale(.98)}
.widget{transition:box-shadow var(--dur-2) var(--ease-out),border-color var(--dur-2),transform var(--dur-2) var(--ease-out)}
.ic{transition:background-color var(--dur-2)}
.ic:hover{background:var(--bg)}

/* Toggle switch with a little spring */
.tog{transition:background-color var(--dur-2) var(--ease-out)}
.tog::after{transition:left var(--dur-3) var(--ease-spring)}

/* Progress bars fill smoothly */
.pfill{transition:width .6s var(--ease-out)}

/* Modal: backdrop fade + soft pop */
.modal-bg{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.modal-bg.on{animation:fadeIn var(--dur-2) ease-out}
.modal-bg.on .modal-wrap{animation:modalIn .34s var(--ease-out)}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes modalIn{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}
.modal input,.modal select,.modal textarea{transition:border-color var(--dur-1),box-shadow var(--dur-2)}
.modal input:focus,.modal select:focus,.modal textarea:focus{outline:none;border-color:var(--pk);box-shadow:0 0 0 3px var(--pkl)}
.modal-close{transition:transform var(--dur-2) var(--ease-out),background-color var(--dur-1)}
.modal-close:hover{transform:rotate(90deg)}

/* Toast: springy slide-up */
.toast{transform:translateY(14px) scale(.96);transition:opacity var(--dur-2) ease-out,transform .38s var(--ease-spring)}
.toast.on{transform:none}

/* "Mehr Optionen" in forms -- keeps the first view of a form short */
.more-opts{margin:6px 0 4px;border-top:1px solid var(--bd);padding-top:8px}
.more-opts > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--tx2);padding:4px 0;user-select:none;transition:color var(--dur-1)}
.more-opts > summary::-webkit-details-marker{display:none}
.more-opts > summary::before{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform var(--dur-2) var(--ease-out);margin-right:2px}
.more-opts[open] > summary::before{transform:rotate(45deg)}
.more-opts > summary:hover{color:var(--pk)}
.more-opts[open] .more-opts-body{animation:slideDown var(--dur-3) var(--ease-out)}
.more-opts-body{padding-top:8px}
@keyframes slideDown{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.modal label.chk{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--tx);margin:0;cursor:pointer;
  /* reset the 15px task-checkbox square that .chk otherwise carries */
  width:auto;height:auto;border:0;border-radius:0;background:none;flex-shrink:1}
.modal label.chk input[type=checkbox]{width:auto;padding:0;margin:0;flex-shrink:0}

/* Funktionen dialog */
.feat-wrap{display:flex;flex-direction:column;gap:14px;margin-top:6px}
.feat-group-h{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--tx3);margin-bottom:6px}
.feat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.feat-card{display:flex;align-items:center;gap:10px;text-align:left;padding:10px 12px;border:1px solid var(--bd);border-radius:12px;background:var(--w);cursor:pointer;font-family:inherit;color:var(--tx);transition:border-color var(--dur-2),background-color var(--dur-2),transform var(--dur-1) var(--ease-out),box-shadow var(--dur-2)}
.feat-card:hover{border-color:var(--bd2);box-shadow:var(--sh)}
.feat-card:active{transform:scale(.98)}
.feat-card.on{border-color:var(--pk);background:var(--pkl)}
.feat-card.disabled{cursor:default;opacity:.55}
.feat-card.disabled:hover{box-shadow:none;border-color:var(--bd)}
.feat-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.feat-l{font-size:12.5px;font-weight:600}
.feat-d{font-size:10.5px;color:var(--tx2)}
.feat-tog{width:32px;height:18px;border-radius:99px;background:var(--bd2);position:relative;flex-shrink:0;transition:background-color var(--dur-2)}
.feat-tog::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:99px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:transform var(--dur-3) var(--ease-spring)}
.feat-card.on .feat-tog{background:var(--pk)}
.feat-card.on .feat-tog::after{transform:translateX(14px)}
.feat-wrap .feat-group{animation:viewIn var(--dur-3) var(--ease-out) both}
.feat-wrap .feat-group:nth-child(2){animation-delay:.04s}
.feat-wrap .feat-group:nth-child(3){animation-delay:.08s}
.feat-wrap .feat-group:nth-child(n+4){animation-delay:.12s}

/* Smoother mobile drawer */
@media (max-width:760px){
  .sb{transition:transform .32s var(--ease-out),box-shadow .32s}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-delay:0s !important;transition-duration:.01ms !important}
  .pc:hover,.kcard:hover{transform:none}
}

/* Topbar title hides when the page header already names the view */
.topbar-t{transition:opacity var(--dur-2) var(--ease-out),transform var(--dur-2) var(--ease-out)}
.topbar-t.topbar-t-dup{opacity:0;transform:translateY(-4px);pointer-events:none}
/* Calmer planning badge: neutral frame, pink only on the active choice */
.week-badge{background:var(--w);color:var(--tx2);border-color:var(--bd)}

/* Compact sidebar: with only a handful of entries, one-item section
   headings are noise -- they collapse into small gaps instead. */
.sb-nav.nav-compact .ns{font-size:0;padding:0;height:10px}
.sb-nav.nav-compact .ns:first-child{height:0}

/* Quiet one-line hints instead of colored banners */
.quiet-hint{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--tx3);margin:0 0 10px 2px}

/* KPI tiles: same hover lift as the cards */
.sc{transition:transform var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out)}
.sc:hover{transform:translateY(-2px);box-shadow:var(--shm)}
.sc .si{transition:transform var(--dur-3) var(--ease-spring)}
.sc:hover .si{transform:scale(1.08) rotate(-4deg)}
.content.view-enter .sc{animation:cardIn .5s var(--ease-out) both}
.content.view-enter .sc:nth-child(2){animation-delay:.04s}
.content.view-enter .sc:nth-child(3){animation-delay:.08s}
.content.view-enter .sc:nth-child(4){animation-delay:.12s}
.content.view-enter .sc:nth-child(n+5){animation-delay:.16s}
@media (prefers-reduced-motion:reduce){.sc:hover{transform:none}}
.wb-btn{border-color:var(--bd);color:var(--tx2);transition:background-color var(--dur-2),color var(--dur-2),border-color var(--dur-2)}
.wb-btn.on{background:var(--pk);color:#fff;border-color:var(--pk)}
.wb-btn:hover:not(.on){background:var(--bg);color:var(--tx)}
/* Topbar recedes when it only carries the planning switch */
.topbar{transition:background-color var(--dur-3),border-color var(--dur-3),box-shadow var(--dur-3)}
.topbar:has(.topbar-t-dup){background:transparent;border-color:transparent;box-shadow:none}
@media (max-width:760px){.topbar:has(.topbar-t-dup){background:var(--w);border-color:var(--bd)}}

/* ═════════════ APPLE-STYLE REFINEMENTS ═════════════ */
/* System font on Apple devices (SF Pro), Inter everywhere else */
body{font-family:-apple-system,BlinkMacSystemFont,'Inter',system-ui,sans-serif;-webkit-font-smoothing:antialiased}
.pt{font-size:22px;font-weight:700;letter-spacing:-.01em}
.ps{font-size:12px;margin-top:3px}

/* Consistent radii: tiles/cards 14, controls 8 */
:root{--r-card:14px;--r-ctl:8px}
.widget{border-radius:var(--r-card)}
.kcol{border-radius:12px}
.btn{border-radius:var(--r-ctl)}

/* View switchers = segmented control: grey track, white sliding-in thumb.
   Pink stays reserved for the one primary action of the page. */
.pill-nav{gap:2px !important;background:var(--bg);border:1px solid var(--bd);border-radius:10px;padding:2px}
.pill-nav>.btn{height:28px;border:none !important;background:transparent;color:var(--tx2);font-weight:500;box-shadow:none}
.pill-nav>.btn:hover{background:rgba(0,0,0,.04);color:var(--tx)}
.pill-nav>.btn-pk,.pill-nav>.btn-pk:hover{background:var(--w);color:var(--tx);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.1),0 0 0 .5px rgba(0,0,0,.04);animation:segIn var(--dur-2) var(--ease-out)}
@keyframes segIn{from{opacity:.4;transform:scale(.94)}to{opacity:1;transform:none}}

/* KPI tiles: neutral by default, red only when something needs attention */
.sc .si{background:var(--bg);color:var(--tx2)}
.sc .sv{color:var(--tx)}
.sc .sd{color:var(--tx3)}
.sc.sc-alert .si{background:var(--rdl);color:var(--rd)}
.sc.sc-alert .sv,.sc.sc-alert .sd{color:var(--rd)}

/* Milestone status rows: neutral row, the icon carries the status */
.ms-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:10px;background:var(--bg);transition:background-color var(--dur-2)}
.ms-row:hover{background:var(--bd)}
.ms-ico{width:24px;height:24px;border-radius:99px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ms-ico.ok{background:var(--gnl);color:var(--gn)}
.ms-ico.late{background:var(--rdl);color:var(--rd)}

/* Resize grips only on hover */
.resizable-list{resize:none}
.resizable-list:hover{resize:vertical}

/* "Überblick" on Meine Aufgaben -- secondary info below the task list */
.overview{margin-top:22px}
.overview>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:8px;font-size:17px;font-weight:700;letter-spacing:-.01em;color:var(--tx);margin-bottom:12px;user-select:none}
.overview>summary::-webkit-details-marker{display:none}
.overview>summary::after{content:"";width:7px;height:7px;border-right:2px solid var(--tx3);border-bottom:2px solid var(--tx3);transform:rotate(45deg) translateY(-2px);transition:transform var(--dur-2) var(--ease-out)}
.overview:not([open])>summary::after{transform:rotate(-45deg)}
.overview[open] .overview-body{animation:slideDown var(--dur-3) var(--ease-out)}

/* Long priority lists: time groups, compact rows, collapse + filter */
.prio-row{padding:8px 14px}
.prio-row[hidden]{display:none}
#prio-list:not(.show-all):not(.filtering) .prio-row.prio-extra{display:none}
.prio-group{display:flex;align-items:center;gap:6px;padding:10px 14px 4px;font-size:12px;font-weight:600;color:var(--tx2);background:var(--w)}
.prio-group span{font-size:10.5px;font-weight:600;color:var(--tx3);background:var(--bg);border-radius:99px;padding:0 7px}
.prio-group[hidden]{display:none}
.prio-filter{font-family:inherit;font-size:12px;padding:5px 10px;border:1px solid var(--bd);border-radius:var(--r-ctl);background:var(--bg);color:var(--tx);transition:border-color var(--dur-1),box-shadow var(--dur-2),background-color var(--dur-2)}
input.prio-filter{width:170px}
.prio-filter:focus{outline:none;background:var(--w);border-color:var(--pk);box-shadow:0 0 0 3px var(--pkl)}
.prio-more-btn{display:block;width:100%;padding:10px;border:none;border-top:1px solid var(--bd);background:var(--w);color:var(--pk);font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;transition:background-color var(--dur-2)}
.prio-more-btn:hover{background:var(--pkl)}
#prio-list.show-all .prio-row.prio-extra{animation:viewIn var(--dur-3) var(--ease-out) both}
/* Section title row (e.g. "Projekte" on the Übersicht) */
.section-h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:22px 0 12px}
.section-t{font-size:17px;font-weight:700;letter-spacing:-.01em}


/* ═════════════ FINE MOTION (Apple-like) ═════════════ */
/* Sliding segmented thumb */
.pill-nav{position:relative;isolation:isolate}
.pill-nav>.btn{position:relative;z-index:1}
.pill-nav>.btn-pk,.pill-nav>.btn-pk:hover{background:transparent;box-shadow:none;animation:none}
.seg-thumb{position:absolute;z-index:0;border-radius:7px;background:var(--w);box-shadow:0 1px 3px rgba(0,0,0,.1),0 0 0 .5px rgba(0,0,0,.04);pointer-events:none}
.seg-thumb.seg-anim{transition:left .42s var(--ease-spring),top .42s var(--ease-spring),width .42s var(--ease-spring),height .42s var(--ease-spring)}

/* Sidebar indicator that glides between entries */
.sb-nav{position:relative}
.ni.on::before{display:none}
.nav-ind{position:absolute;left:0;top:0;width:3px;border-radius:0 3px 3px 0;background:var(--pk);pointer-events:none;z-index:2;transition:transform .5s var(--ease-spring),height .5s var(--ease-spring),opacity .2s}

/* Charts draw themselves in */
.content.view-enter .fc-line{stroke-dasharray:3000;stroke-dashoffset:3000;animation:lineDraw 1.4s var(--ease-out) .15s forwards}
.content.view-enter .fc-area{animation:areaIn 1s var(--ease-out) .3s both;transform-origin:bottom;transform-box:fill-box}
/* Übersicht chart: hovering a week shows a thin guide line (details in the tooltip) instead of a box that would wash out the curves */
.fc-week{position:absolute;top:0;z-index:1}
.fc-week::after{content:"";position:absolute;top:0;bottom:0;left:50%;border-left:1px solid var(--tx3);opacity:0;transition:opacity .15s}
.fc-week:hover::after{opacity:.35}
@keyframes lineDraw{to{stroke-dashoffset:0}}
@keyframes areaIn{from{opacity:0;transform:scaleY(.6)}to{opacity:1;transform:none}}
.content.view-enter .donut-arc{animation:donutIn 1.1s var(--ease-out) .1s both}
@keyframes donutIn{from{stroke-dasharray:0 252}}
.content.view-enter .pfill{animation:barGrow .9s var(--ease-out) .15s both;transform-origin:left}
@keyframes barGrow{from{transform:scaleX(0)}}

/* Pointer spotlight on cards and tiles */
.sc,.feat-card{position:relative}
.pc::after,.sc::after,.feat-card::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .35s var(--ease-out);background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),rgba(214,66,143,.07),transparent 70%)}
.pc:hover::after,.sc:hover::after,.feat-card:hover::after{opacity:1}

/* Dialog open: the page recedes slightly behind it, like an iOS sheet */
@media (min-width:761px){
  .main,.sb{transition:transform .45s var(--ease-out),filter .45s var(--ease-out)}
  body:has(.modal-bg.on) .main,body:has(.modal-bg.on) .sb{transform:scale(.985);filter:saturate(.9)}
}

/* Toast as HUD pill with a status icon that pops in */
.toast{display:flex;align-items:center;gap:8px;border-radius:99px;padding:9px 16px 9px 10px;background:rgba(28,31,35,.92);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.toast-ico{width:18px;height:18px;border-radius:99px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}
.toast-ico.ok{background:var(--gn)}
.toast-ico.err{background:var(--rd)}
.toast.on .toast-ico{animation:icoPop .5s var(--ease-spring) .08s both}
@keyframes icoPop{from{transform:scale(0) rotate(-30deg)}to{transform:none}}

@media (prefers-reduced-motion:reduce){
  .content.view-enter .fc-line{stroke-dasharray:none;stroke-dashoffset:0}
  body:has(.modal-bg.on) .main,body:has(.modal-bg.on) .sb{transform:none;filter:none}
}

/* ── Ticket merge flow ── */
.merge-back{display:inline-flex;align-items:center;gap:4px;border:none;background:none;color:var(--pk);font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;padding:0;margin-bottom:10px}
.merge-search{width:100%;padding:9px 12px;border:1px solid var(--bd);border-radius:10px;font-family:inherit;font-size:13px;margin:10px 0}
.merge-list{display:flex;flex-direction:column;gap:6px;max-height:52vh;overflow-y:auto}
.merge-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:10px 12px;border:1px solid var(--bd);border-radius:12px;background:var(--w);cursor:pointer;font-family:inherit;color:var(--tx);transition:border-color var(--dur-2),background-color var(--dur-2),transform var(--dur-1) var(--ease-out)}
.merge-item:hover{border-color:var(--pk);background:var(--pkl)}
.merge-item:active{transform:scale(.99)}
.merge-item-t{display:block;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.merge-item-s{display:block;font-size:11px;color:var(--tx3);margin-top:2px}
.merge-list .merge-item{animation:viewIn var(--dur-3) var(--ease-out) both}
.merge-flow{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;margin:14px 0}
.merge-card{border:1px solid var(--bd);border-radius:14px;padding:12px 14px;min-width:0;animation:cardIn .45s var(--ease-out) both}
.merge-card.src{background:var(--bg);border-style:dashed;animation-name:mergeSrcIn}
.merge-card.dst{border-color:var(--pk);box-shadow:0 0 0 3px var(--pkl);animation-delay:.08s}
.merge-card-role{font-size:11px;font-weight:600;color:var(--tx3);margin-bottom:4px}
.merge-card.dst .merge-card-role{color:var(--pk)}
.merge-card-t{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.merge-card-s{font-size:11px;color:var(--tx3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.merge-swap{width:34px;height:34px;border-radius:99px;border:1px solid var(--bd);background:var(--w);color:var(--tx2);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .4s var(--ease-spring),color var(--dur-2),border-color var(--dur-2)}
.merge-swap:hover{transform:rotate(180deg);color:var(--pk);border-color:var(--pk)}
@keyframes mergeSrcIn{from{opacity:0;transform:translateX(-10px)}to{opacity:1;transform:none}}
.merge-what{background:var(--bg);border-radius:12px;padding:12px 14px}
.merge-what-h{font-size:13px;font-weight:600;margin-bottom:6px}
.merge-what ul{list-style:none;display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--tx2);line-height:1.45}
.merge-what li{display:flex;gap:7px;align-items:flex-start}
.merge-what li svg{color:var(--gn);flex-shrink:0;margin-top:3px}
.merge-banner{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;background:var(--bll);color:var(--tx);font-size:12px;margin:0 0 12px}
.merge-children{display:flex;flex-direction:column;gap:6px}
.merge-child{border:1px solid var(--bd);border-radius:10px;background:var(--w)}
.merge-child summary{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12px;cursor:pointer;list-style:none}
.merge-child summary::-webkit-details-marker{display:none}
.merge-child-body{padding:0 12px 10px;font-size:12px;line-height:1.6;white-space:pre-wrap;color:var(--tx2);max-height:220px;overflow-y:auto}
.merge-child[open] .merge-child-body{animation:slideDown var(--dur-3) var(--ease-out)}
.tk-merged{display:inline-flex;align-items:center;gap:2px;font-size:10px;font-weight:600;color:var(--tx2);background:var(--bg);border-radius:99px;padding:0 6px;margin-left:4px}
@media (max-width:600px){.merge-flow{grid-template-columns:1fr}.merge-swap{justify-self:center;transform:rotate(90deg)}}

/* ── Schnellsuche ── */
.sb-search{display:flex;align-items:center;gap:8px;margin:10px 8px 0;padding:7px 10px;border:1px solid var(--bd);border-radius:9px;background:var(--bg);color:var(--tx3);font-family:inherit;font-size:12px;cursor:pointer;transition:border-color var(--dur-2),color var(--dur-2),background-color var(--dur-2)}
.sb-search span{flex:1;text-align:left}
.sb-search:hover{border-color:var(--bd2);color:var(--tx2);background:var(--w)}
.sb-search kbd,.spot-input-row kbd{font-family:inherit;font-size:10px;font-weight:600;color:var(--tx3);background:var(--w);border:1px solid var(--bd);border-radius:5px;padding:1px 5px}
#spotlight{position:fixed;inset:0;z-index:1200;display:none;align-items:flex-start;justify-content:center;padding-top:14vh;background:rgba(20,22,26,.28);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
#spotlight.on{display:flex;animation:fadeIn .18s ease-out}
.spot-panel{width:min(620px,92vw);background:rgba(255,255,255,.96);border:1px solid var(--bd);border-radius:16px;box-shadow:0 24px 60px rgba(0,0,0,.22),0 0 0 .5px rgba(0,0,0,.05);overflow:hidden;animation:spotIn .32s var(--ease-spring)}
@keyframes spotIn{from{opacity:0;transform:translateY(-10px) scale(.97)}to{opacity:1;transform:none}}
.spot-input-row{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--bd);color:var(--tx3)}
.spot-input-row input{flex:1;border:none;outline:none;background:none;font-family:inherit;font-size:17px;color:var(--tx)}
.spot-results{max-height:min(420px,56vh);overflow-y:auto;padding:6px}
.spot-group{font-size:11px;font-weight:600;color:var(--tx3);padding:8px 10px 4px}
.spot-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:none;border-radius:10px;background:none;text-align:left;font-family:inherit;color:var(--tx);cursor:pointer}
.spot-item.sel{background:var(--pkl)}
.spot-dot{width:8px;height:8px;border-radius:99px;flex-shrink:0}
.spot-txt{flex:1;min-width:0;display:flex;flex-direction:column}
.spot-t{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.spot-s{font-size:11px;color:var(--tx3)}
.spot-enter{font-size:12px;color:var(--pk);opacity:0;transition:opacity var(--dur-1)}
.spot-item.sel .spot-enter{opacity:1}
.spot-empty{padding:22px;text-align:center;font-size:12px;color:var(--tx3)}
.kcard[hidden]{display:none}

/* ── Project detail refinements ── */
.il{text-transform:none;letter-spacing:0;font-size:11px;color:var(--tx3)}
.iv{font-size:16px;font-weight:700;letter-spacing:-.01em}
.tt th{text-transform:none;letter-spacing:0;font-size:11px}
/* Row actions appear on hover (always visible on touch screens) */
.row-actions{display:inline-flex;align-items:center;gap:2px;opacity:0;transform:translateX(4px);transition:opacity var(--dur-2) var(--ease-out),transform var(--dur-2) var(--ease-out)}
tr:hover .row-actions,.row-actions:focus-within{opacity:1;transform:none}
@media (hover:none){.row-actions{opacity:1;transform:none}}
.row-book{display:inline-flex;align-items:center;gap:4px;font-family:inherit;font-size:11px;font-weight:600;color:var(--pk);background:var(--pkl);border:none;border-radius:7px;padding:4px 9px;cursor:pointer;margin-right:4px;transition:background-color var(--dur-2),transform var(--dur-1) var(--ease-out)}
.row-book:hover{background:#FAD3E9}
.row-book:active{transform:scale(.96)}
/* Overrun = thin red accent; the chip carries the message */
.tt tr.row-overrun td:first-child{box-shadow:inset 3px 0 0 var(--rd)}
/* ── Task chat composer (iMessage-style) ── */
.td-chat-input{padding:10px 12px}
.td-composer{flex:1;display:flex;align-items:flex-end;gap:6px;padding:4px;border:1px solid var(--bd);border-radius:20px;background:var(--w);transition:border-color var(--dur-2),box-shadow var(--dur-2)}
.td-composer:focus-within{border-color:var(--pk);box-shadow:0 0 0 3px var(--pkl)}
.modal .td-composer textarea{flex:1;min-width:0;border:none;outline:none;box-shadow:none;background:transparent;padding:7px 4px;font-size:13px;line-height:18px;height:32px;max-height:120px;resize:none;overflow-y:auto}
.modal .td-composer textarea:focus{box-shadow:none;border:none}
.td-composer-btn,.td-composer-send{width:32px;height:32px;border-radius:99px;border:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;cursor:pointer;transition:background-color var(--dur-2),color var(--dur-2),transform var(--dur-1) var(--ease-out)}
.td-composer-btn{background:transparent;color:var(--tx3)}
.td-composer-btn:hover{background:var(--bg);color:var(--tx)}
.td-composer-send{background:var(--bd);color:#fff}
.td-composer.has-text .td-composer-send{background:var(--pk);animation:icoPop .35s var(--ease-spring)}
.td-composer-btn:active,.td-composer-send:active{transform:scale(.92)}

/* ═════════════ Sentence case everywhere (Apple-style labels) ═════════════
   Small grey UPPERCASE labels -> normal case, slightly larger, semibold.
   Data inputs (Gutscheincode, Ländercode) and the marketing page keep theirs. */
.ns,.user-popup h4,.org-popup h4,.pml,.tk-warn-label,.tmt th,.cal-hd,.td-chat-head,.gsh-label,.hub-apps-sec,.hub-proj-label,.feat-group-h{text-transform:none;letter-spacing:0}
.ns{font-size:11px;font-weight:600;padding:10px 6px 4px}
.user-popup h4,.org-popup h4,.feat-group-h{font-size:11.5px;font-weight:600}
.pml{font-size:10.5px}
.tmt th,.cal-hd{font-size:11px}
.td-chat-head{font-size:13px;font-weight:600;color:var(--tx)}
.gsh-label,.hub-apps-sec,.hub-proj-label{font-size:12px;font-weight:600}
.tk-warn-label{font-size:10.5px}
/* KPI tiles on every page: decorative colours -> neutral; red (problem) and
   green (money in / success) keep their meaning. */
.sc .sv:not([style*="--rd"]):not([style*="--gn"]){color:var(--tx) !important}
.sc .si:not([style*="--rdl"]):not([style*="--gnl"]){background:var(--bg) !important;color:var(--tx2)}

/* ═════════════ Mobile refinements ═════════════ */
@media (max-width:760px){
  /* Slim, transparent top bar: just a round menu button */
  .topbar,.topbar:has(.topbar-t-dup){background:transparent;border-color:transparent;box-shadow:none;height:44px;padding:0 4px;margin:0 12px}
  .burger{width:38px;height:38px;border-radius:99px;background:var(--w);border:1px solid var(--bd);box-shadow:var(--sh);font-size:18px;align-items:center;justify-content:center}
  .content{padding:8px 14px 24px}
  .pt{font-size:24px}
  /* Switchers scroll sideways instead of wrapping onto two rows */
  .pill-nav{flex-wrap:nowrap !important;overflow-x:auto;max-width:100%;scrollbar-width:none}
  .pill-nav::-webkit-scrollbar{display:none}
  .pill-nav>.btn{flex-shrink:0}
  /* Compact KPI tiles */
  .sg{gap:8px}
  .sc{padding:12px;border-radius:12px}
  .sc .si{width:26px;height:26px;margin-bottom:6px;border-radius:8px}
  .sv{font-size:20px}
  .sd{display:none}
  .overview>summary,.section-t{font-size:18px}
  #spotlight{padding-top:8vh}
}
/* Kanban: quieter "Wartet auf" line instead of a bordered box */
.kdep{display:flex;align-items:flex-start;gap:5px;border:none !important;background:none !important;padding:0 !important;margin:6px 0 2px;font-size:11px;color:var(--tx3);line-height:1.35}
.kdep svg{flex-shrink:0;margin-top:1px}
.kdep span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* ═════════════ PLANUNGSASSISTENT ═════════════ */
/* One question per screen: what should happen now so the dates hold.
   Built from the app's own surfaces (.card, .btn, tokens); pink only for
   the one action per card and the assistant's mark, red only for "late". */

/* Thinking (shown while the backend simulates) */
.adv-think{display:flex;flex-direction:column;align-items:center;gap:14px;padding:40px 0 36px}
.adv-net{width:min(380px,90%);height:auto;overflow:visible}
.adv-e{stroke:url(#advg);stroke-width:1.6;stroke-linecap:round;stroke-dasharray:120;stroke-dashoffset:120;opacity:.75;animation:advDraw .8s var(--ease-out) var(--d) forwards}
@keyframes advDraw{to{stroke-dashoffset:0}}
.adv-n{fill:var(--w);stroke:url(#advg);stroke-width:2;transform-box:fill-box;transform-origin:center;transform:scale(0);animation:advPop .4s cubic-bezier(.34,1.56,.64,1) var(--d) forwards,advNode 1.6s ease-in-out calc(var(--d) + .5s) infinite}
@keyframes advPop{to{transform:scale(1)}}
@keyframes advNode{50%{fill:#F9A8D4}}
.adv-scan{fill:url(#advg);opacity:.12;animation:advScan 1.4s ease-in-out infinite}
@keyframes advScan{from{transform:translateX(-40px)}to{transform:translateX(330px)}}
.adv-think-t{font-size:14px;font-weight:600;color:var(--tx)}
.adv-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.adv-steps li{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--tx2);opacity:0;animation:advStepIn .35s var(--ease-out) var(--d) forwards}
.adv-step-dot{width:14px;height:14px;border-radius:99px;border:2px solid var(--bd);border-top-color:var(--pk);animation:advSpin .7s linear infinite,advDone .25s var(--ease-out) calc(var(--d) + .5s) forwards}
@keyframes advStepIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes advSpin{to{transform:rotate(360deg)}}
@keyframes advDone{to{border-color:var(--gn);background:var(--gn);animation-play-state:paused}}

.pa-icon{width:34px;height:34px;padding:0;justify-content:center}
.pa-sec{font-size:13px;font-weight:600;color:var(--tx);margin:24px 2px 10px}
.ax-dot{display:inline-block;width:8px;height:8px;border-radius:99px;flex-shrink:0}

/* Status */
.pa-hero{display:flex;align-items:center;gap:28px;padding:22px 24px;animation:advStepIn .4s var(--ease-out) both}
.pa-hero-text{flex:1;min-width:0}
.pa-eyebrow{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--pk)}
.pa-hero h2{font-size:22px;line-height:1.25;font-weight:700;letter-spacing:-.01em;color:var(--tx);margin:6px 0 0}
.pa-hero p{font-size:13.5px;line-height:1.5;color:var(--tx2);margin:6px 0 0}
.pa-ring{position:relative;display:flex;flex-direction:column;align-items:center;flex-shrink:0}
.pa-ring svg{transform:rotate(-90deg)}
.pa-ring circle{fill:none;stroke-width:10;stroke-linecap:round}
.pa-ring-bg{stroke:var(--bg)}
.pa-ring-now{stroke:var(--pk);animation:paArc 1s var(--ease-out) .1s both}
.pa-ring-next{stroke:var(--pk);opacity:.22;animation:paArc 1s var(--ease-out) .3s both}
@keyframes paArc{from{stroke-dasharray:0 999}}
.pa-ring-v{position:absolute;top:0;left:0;width:112px;height:112px;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}
.pa-ring-v b{font-size:28px;font-weight:700;color:var(--tx);font-variant-numeric:tabular-nums}
.pa-ring-v span{font-size:11px;color:var(--tx3);margin-top:3px}
.pa-ring-l{font-size:11.5px;color:var(--tx2);margin-top:6px}

/* Decision cards */
.pa-cards{display:flex;flex-direction:column;gap:10px}
.pa-card{position:relative;display:flex;align-items:flex-start;gap:20px;padding:18px 20px;background:var(--w);border:1px solid var(--bd);border-radius:14px;box-shadow:var(--sh);overflow:hidden;
  max-height:900px;opacity:0;animation:advStepIn .4s var(--ease-out) calc(.1s + var(--i,0) * 70ms) forwards;
  transition:max-height .45s var(--ease-out) .5s,padding .45s var(--ease-out) .5s,margin .45s .5s,opacity .3s .5s,border-color .3s}
.pa-card-body{flex:1;min-width:0}
.pa-scope{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--tx3)}
.pa-sev{width:7px;height:7px;border-radius:99px;background:var(--tx3);flex-shrink:0}
.pa-sev.late{background:var(--rd)}
.pa-sev.tight{background:var(--ye)}
.pa-sev.info{background:var(--bl)}
.pa-card h3{font-size:15px;font-weight:600;color:var(--tx);margin:5px 0 0;letter-spacing:-.005em}
.pa-why{font-size:13px;color:var(--tx2);margin:3px 0 0}
.pa-effect{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--tx);margin:2px 0 0}
.pa-effect svg{color:var(--gn);flex-shrink:0}
.pa-card-act{flex-shrink:0;align-self:center}
.pa-card-act .btn{padding:8px 16px;font-size:12.5px}
.pa-done{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--w) 88%,transparent);color:var(--gn);opacity:0;pointer-events:none;transition:opacity .25s}
.pa-done svg{width:44px;height:44px;padding:10px;border-radius:99px;background:var(--gnl);transform:scale(.6);transition:transform .35s cubic-bezier(.34,1.56,.64,1)}
.pa-card.is-done{max-height:0;padding-top:0;padding-bottom:0;margin-bottom:-10px;opacity:0;border-color:transparent}
.pa-card.is-done .pa-done{opacity:1}
.pa-card.is-done .pa-done svg{transform:scale(1)}

/* Details on demand */
.pa-more{margin-top:8px}
.pa-more>summary{list-style:none;display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--tx3);cursor:pointer;user-select:none}
.pa-more>summary::-webkit-details-marker{display:none}
.pa-more>summary::after{content:"";width:5px;height:5px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);margin-left:3px;transition:transform var(--dur-2)}
.pa-more[open]>summary::after{transform:rotate(-135deg)}
.pa-more>summary:hover{color:var(--pk)}
.pa-more p{font-size:12.5px;line-height:1.55;color:var(--tx2);margin:8px 0 0;max-width:720px}
.pa-chain{display:flex;align-items:flex-start;gap:6px}
.pa-chain svg{flex-shrink:0;margin-top:3px;color:var(--tx3)}
.pa-chain span{color:var(--tx3)}
.pa-more-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.pa-sm{padding:5px 11px;font-size:11.5px}

.pa-rest{margin-top:10px}
.pa-rest>summary,.pa-fine>summary{list-style:none;display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:500;color:var(--tx2);cursor:pointer;padding:6px 2px;user-select:none}
.pa-rest>summary::-webkit-details-marker,.pa-fine>summary::-webkit-details-marker{display:none}
.pa-rest>summary:hover,.pa-fine>summary:hover{color:var(--pk)}
.pa-rest[open]>summary{margin-bottom:8px}
.pa-allgood{display:flex;align-items:center;gap:10px;padding:16px 18px;font-size:13.5px;color:var(--tx)}
.pa-allgood svg{color:var(--gn)}

/* Next days */
.pa-week{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));padding:0;overflow:hidden}
.pa-day{padding:12px 12px 14px;border-left:1px solid var(--bd);min-height:96px;min-width:0}
.pa-day.first{border-left:none}
.pa-day-h{font-size:11.5px;color:var(--tx3);margin-bottom:8px}
.pa-day-h b{color:var(--tx);font-weight:600}
.pa-day.first .pa-day-h b{color:var(--pk)}
.pa-day-it{display:flex;align-items:center;gap:7px;padding:4px 0;cursor:pointer;min-width:0}
.pa-day-it:hover .pa-day-n{color:var(--pk)}
.pa-day-bar{width:4px;border-radius:2px;flex-shrink:0;min-height:4px;max-height:32px}
.pa-day-n{flex:1;min-width:0;font-size:12px;font-weight:500;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-day-hrs{font-size:10.5px;color:var(--tx3);flex-shrink:0}
.pa-day-free{font-size:11.5px;color:var(--tx3)}
.pa-day-away{display:inline-block;font-size:10.5px;font-weight:600;color:var(--tx2);background:var(--bg);border-radius:6px;padding:2px 7px;margin-bottom:4px}

/* Folded "all fine" */
.pa-fine{margin-top:18px}
.pa-fine>summary svg{color:var(--gn)}
.pa-fine-list{padding:4px 0;margin-top:6px}
.pa-fine-row{display:flex;align-items:center;gap:9px;padding:8px 16px;cursor:pointer;font-size:12.5px}
.pa-fine-row+.pa-fine-row{border-top:1px solid var(--bd)}
.pa-fine-row:hover{background:var(--bg)}
.pa-fine-n{flex:1;min-width:0;font-weight:500;color:var(--tx);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-fine-m{font-size:11.5px;color:var(--tx3);white-space:nowrap}

/* "Meine Aufgaben" hint + "Deadline in Gefahr" dialog */
.adv-hint{display:flex;align-items:center;gap:12px;padding:12px 14px;margin-bottom:12px;background:var(--w);border:1px solid var(--bd);border-radius:14px;box-shadow:var(--sh);animation:advStepIn .4s var(--ease-out) both}
.adv-ico{width:28px;height:28px;border-radius:99px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--pkl);color:var(--pk)}
.adv-ico.adv-critical{background:var(--rdl);color:var(--rd)}
.adv-main{flex:1;min-width:0}
.adv-t{font-size:13px;font-weight:600;color:var(--tx);line-height:1.35}
.adv-x{font-size:12px;color:var(--tx2);line-height:1.5;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.adv-acts{display:flex;flex-wrap:wrap;gap:6px}
.adv-acts .btn{padding:5px 11px;font-size:12px}
.ms-ico.tight{background:var(--yel);color:var(--ye)}

@media (max-width:760px){
  .pa-hero{flex-direction:column;align-items:flex-start;gap:16px;padding:18px}
  .pa-hero h2{font-size:19px}
  .pa-ring{flex-direction:row;gap:12px;align-self:center}
  .pa-card{flex-direction:column;gap:12px;padding:16px}
  .pa-card-act{align-self:stretch}
  .pa-card-act .btn{width:100%;justify-content:center}
  .pa-week{grid-template-columns:repeat(5,minmax(132px,1fr));overflow-x:auto}
  .adv-hint{flex-wrap:wrap}
}
@media (prefers-reduced-motion:reduce){
  .adv-step-dot,.adv-n,.adv-scan,.pa-ring-now,.pa-ring-next{animation:none !important}
  .adv-e{stroke-dashoffset:0;animation:none}
  .adv-n{transform:none}
  .pa-card,.pa-hero,.adv-steps li{animation:none !important;opacity:1}
}

/* ── Card v3: problem → steps → result ── */
.pa-card h3{font-size:15.5px;line-height:1.35}
.pa-why{font-size:12.5px;color:var(--tx3)}
.pa-plan{margin-top:14px;padding:12px 14px 10px;border-radius:12px;background:var(--bg)}
.pa-plan-k{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--pk);margin-bottom:4px}
.pa-steps{list-style:none;margin:0;padding:0}
.pa-step{position:relative;display:grid;grid-template-columns:26px 1fr auto;align-items:center;gap:10px;padding:7px 0;
  opacity:0;animation:advStepIn .35s var(--ease-out) calc(.25s + var(--i,0) * 70ms) forwards}
.pa-step+.pa-step::before{content:"";position:absolute;left:12px;top:-8px;height:16px;width:2px;border-radius:1px;background:var(--bd2)}
.pa-step-av{display:inline-flex;width:26px;height:26px}
.pa-step-av .av{width:26px;height:26px;font-size:10.5px;box-shadow:0 0 0 2px var(--bg)}
.pa-step-ico{width:26px;height:26px;border-radius:99px;display:inline-flex;align-items:center;justify-content:center;background:var(--w);border:1px solid var(--bd);color:var(--tx2)}
.pa-step-t{font-size:13px;line-height:1.45;color:var(--tx);min-width:0}
.pa-step-t b{font-weight:600}
.pa-muted{color:var(--tx3);font-weight:400}
.pa-step-when{font-size:11px;font-weight:500;color:var(--tx2);background:var(--w);border:1px solid var(--bd);border-radius:99px;padding:2px 9px;white-space:nowrap}
.pa-result{display:flex;align-items:center;gap:8px;margin-top:10px;padding:9px 12px;border-radius:10px;font-size:13px;font-weight:600;
  opacity:0;animation:advStepIn .4s var(--ease-out) .55s forwards}
.pa-result svg{flex-shrink:0}
.pa-result.ok{background:var(--gnl);color:#15803D}
.pa-result.warn{background:var(--yel);color:#B45309}
.pa-result.neutral{background:var(--bll);color:var(--bl)}
.pa-result-also{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:12px;color:#B45309}
.pa-card-act{align-self:flex-end}
.pa-more{margin-top:10px}
@media (max-width:760px){
  .pa-step{grid-template-columns:26px 1fr}
  .pa-step-when{grid-column:2;justify-self:start;margin-top:-2px}
  .pa-step+.pa-step::before{height:12px;top:-6px}
}
@media (prefers-reduced-motion:reduce){.pa-step,.pa-result{animation:none;opacity:1}}

/* Summary: optimization potential + what is affected */
.pa-potential{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px;padding:8px 12px;border-radius:10px;background:var(--gnl);color:#15803D;font-size:13px}
.pa-potential-k{font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#15803D;opacity:.85}
.pa-potential b{font-weight:700}
.pa-risks{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.pa-risk{display:inline-flex;align-items:center;gap:7px;max-width:100%;padding:5px 10px;border-radius:99px;border:1px solid var(--bd);background:var(--w);font-family:inherit;font-size:12px;color:var(--tx);cursor:pointer;transition:border-color var(--dur-2),box-shadow var(--dur-2)}
.pa-risk:hover{border-color:var(--pk);box-shadow:0 0 0 3px var(--pkl)}
.pa-risk-n{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}
.pa-risk-s{color:var(--tx3);white-space:nowrap}
.pa-risk-ok{display:inline-flex;width:16px;height:16px;border-radius:99px;align-items:center;justify-content:center;background:var(--gnl);color:var(--gn)}
.pa-card.pa-flash{opacity:1;animation:paFlash 1.4s ease-out}
@keyframes paFlash{25%{box-shadow:0 0 0 3px var(--pk),var(--sh)}}

/* ── Planungsassistent v4: overview + one plan per project, app type scale ── */
/* Type follows the rest of the app: 13px body, 14–16px titles. */
.pa-hero h2{font-size:16px;letter-spacing:-.005em}
.pa-hero p{font-size:12.5px}
.pa-card h3{font-size:14px}
.pa-why{font-size:12px}
.pa-step-t{font-size:12.5px}
.pa-result{font-size:12.5px}
.pa-ring-v b{font-size:24px}

.pa-sum{padding:16px 18px 8px;margin-bottom:14px}
.pa-sum-head{display:flex;align-items:center;gap:16px}
.pa-sum-text{flex:1;min-width:0}
.pa-sum-t{font-size:16px;font-weight:700;margin-top:4px;letter-spacing:-.005em}
.pa-sum-s{font-size:12.5px;color:var(--tx2);margin-top:3px}
.pa-sum-s b{color:var(--tx);font-weight:600}
.pa-mring{position:relative;width:64px;height:64px;flex-shrink:0}
.pa-mring svg{transform:rotate(-90deg)}
.pa-mring circle{fill:none;stroke-width:6;stroke-linecap:round}
.pa-mring-v{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--tx3)}
.pa-mring-v b{font-size:17px;font-weight:700;color:var(--tx)}

.pa-ov{margin-top:12px;border-top:1px solid var(--bd)}
.pa-ov-row{display:grid;grid-template-columns:10px minmax(0,1.4fr) minmax(0,1fr) auto minmax(0,1.6fr);align-items:center;gap:10px;width:100%;
  padding:9px 2px;border:0;border-bottom:1px solid var(--bd);background:none;font:inherit;font-size:12.5px;color:var(--tx);text-align:left;cursor:pointer}
.pa-ov-row:last-child{border-bottom:0}
.pa-ov-row:hover{background:var(--bg)}
.pa-ov-n{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-ov-lead{color:var(--tx3);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-ov-a{justify-self:end;min-width:0}
.pa-ov-after{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--tx2);white-space:nowrap}
.pa-ov-after.ok{color:#15803D}
.pa-ov-after.warn{color:#B45309}

.pa-proj{position:relative;padding:16px 18px;margin-bottom:12px;opacity:0;animation:advStepIn .35s var(--ease-out) calc(var(--i,0) * 60ms) forwards}
.pa-proj-h{display:flex;align-items:center;gap:10px}
.pa-proj-t{flex:1;min-width:0}
.pa-proj-n{font-size:14px;font-weight:600}
.pa-proj-m{font-size:11.5px;color:var(--tx3);margin-top:1px}

.pa-dates{margin-top:10px}
.pa-d{display:grid;grid-template-columns:14px minmax(0,1fr) auto auto auto;align-items:center;gap:10px;padding:6px 0;font-size:12.5px;border-top:1px solid var(--bd)}
.pa-d:first-child{border-top:0}
.pa-d-ico{color:var(--tx3);font-size:11px;text-align:center}
.pa-d-n{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-d-due{color:var(--tx3);font-size:12px;white-space:nowrap}
.pa-d-now{font-size:11.5px;font-weight:600;white-space:nowrap}
.pa-d-now.late{color:var(--rd)}
.pa-d-now.tight{color:var(--ye)}
.pa-d-plan{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;min-width:118px;justify-content:flex-end}
.pa-d-plan.ok{color:#15803D;font-weight:600}
.pa-d-plan.muted{color:var(--tx3)}

.pa-proj .pa-plan{margin-top:12px}
.pa-plan-f{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px;padding-top:10px;border-top:1px solid var(--bd)}
.pa-plan-r{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:#15803D}
.pa-more-steps>summary{list-style:none;cursor:pointer;font-size:12px;color:var(--tx2);padding:4px 0 2px 36px}
.pa-more-steps>summary::-webkit-details-marker{display:none}

.pa-dec{margin-top:12px}
.pa-dec-k{font-size:11px;font-weight:600;color:var(--tx3);text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}
.pa-dec-row{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-top:1px solid var(--bd);transition:opacity var(--dur-2) var(--ease-out)}
.pa-dec .pa-dec-row:first-of-type{border-top:0}
.pa-dec-row>.pa-sev{margin-top:6px}
.pa-dec-b{flex:1;min-width:0}
.pa-dec-t{font-size:12.5px;line-height:1.4}
.pa-dec-s{font-size:12px;color:var(--tx2);margin-top:2px}
.pa-dec-row .pa-more{margin-top:2px}
.pa-dec-row .pa-more>summary{font-size:11.5px}
.pa-dec-row .pa-more p{font-size:12px}
.pa-dec-row>.btn{flex-shrink:0;margin-top:-1px}
.pa-dec-row.is-done{opacity:.4;pointer-events:none}
.pa-proj.is-done{opacity:.55;pointer-events:none}
.pa-xc-ico{width:26px;height:26px;border-radius:99px;display:inline-flex;align-items:center;justify-content:center;background:var(--bg);color:var(--tx2)}
.pa-xc .pa-dec-row{border-top:1px solid var(--bd);margin-top:4px}

@media (max-width:760px){
  .pa-ov-row{grid-template-columns:10px minmax(0,1fr) auto;row-gap:2px}
  .pa-ov-lead{display:none}
  .pa-ov-a{grid-column:2 / 4;justify-self:start}
  .pa-d{grid-template-columns:14px minmax(0,1fr) auto}
  .pa-d-due{display:none}
  .pa-d-plan{grid-column:2 / 4;justify-content:flex-start;min-width:0}
  .pa-plan-f{flex-wrap:wrap}
}
@media (prefers-reduced-motion:reduce){.pa-proj{animation:none;opacity:1}}

/* ── Planungsassistent v5: same card language as Meine Aufgaben ──
   card (padding 0) → 13px header bar → 12px rows with 10px meta → tinted chips */
.pa-box{padding:0;overflow:hidden;margin-bottom:12px;opacity:0;animation:advStepIn .3s var(--ease-out) calc(var(--i,0) * 50ms) forwards}
.pa-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--bd)}
.pa-head-t{flex:1;min-width:0}
.pa-head-n{font-size:13px;font-weight:600;line-height:1.35}
.pa-head-m{font-size:11px;color:var(--tx3);margin-top:1px}
.pa-head-r{display:flex;align-items:center;gap:8px;flex-shrink:0}
.pa-cnt{font-size:11px;font-weight:400;color:var(--tx3)}
.pa-cnt::before{content:"· "}
.pa-dot{width:8px;height:8px;border-radius:99px;flex-shrink:0}
.pa-ms{width:8px;text-align:center;font-size:10px;color:var(--tx3);flex-shrink:0}

.pa-row{display:flex;align-items:center;gap:10px;padding:8px 14px;border-bottom:1px solid var(--bd);background:var(--w)}
.pa-row:last-child{border-bottom:0}
.pa-click{cursor:pointer;transition:background .1s}
.pa-click:hover{background:var(--bg)}
.pa-row-b{flex:1;min-width:0}
.pa-row-t{font-size:12px;font-weight:600;line-height:1.4}
.pa-row-t b{font-weight:700}
.pa-row-m{font-size:10px;color:var(--tx2);margin-top:2px}
.pa-row-r{display:flex;align-items:center;gap:5px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}

.pa-chip{display:inline-flex;align-items:center;gap:3px;font-size:9.5px;font-weight:600;border-radius:4px;padding:2px 6px;white-space:nowrap}
.pa-chip.late{color:var(--rd);background:var(--rdl)}
.pa-chip.tight{color:#D97706;background:var(--yel)}
.pa-chip.ok{color:#16A34A;background:var(--gnl)}
.pa-chip.muted{color:var(--tx2);background:var(--bg);border:1px solid var(--bd)}

.pa-sub{display:flex;align-items:center;gap:6px;padding:10px 14px 4px;font-size:12px;font-weight:600;color:var(--tx2);background:var(--w)}
.pa-sub span{font-size:10.5px;font-weight:600;color:var(--tx3);background:var(--bg);border-radius:99px;padding:0 7px}

.pa-box .pa-steps{list-style:none;margin:0;padding:0 14px 4px}
.pa-box .pa-step{display:grid;grid-template-columns:22px 1fr auto;gap:10px;padding:6px 0;opacity:1;animation:none}
.pa-box .pa-step+.pa-step::before{left:10px;top:-7px;height:14px}
.pa-box .pa-step-av,.pa-box .pa-step-av .av,.pa-box .pa-step-ico{width:22px;height:22px}
.pa-box .pa-step-av .av{font-size:9px;box-shadow:none}
.pa-box .pa-step-t{font-size:12px}
.pa-box .pa-step-when{font-size:10px;font-weight:400;color:var(--tx2);background:none;border:0;padding:0}
.pa-more-steps>summary{padding:2px 0 6px 46px}

.pa-result-row,.pa-box .pa-result{display:flex;align-items:center;gap:6px;margin:0;padding:8px 14px;border-radius:0;border-top:1px solid var(--bd);
  background:var(--w);font-size:11.5px;font-weight:600;color:#16A34A;opacity:1;animation:none}
.pa-box .pa-result.warn{color:#D97706}
.pa-box .pa-result.neutral{color:var(--bl)}
.pa-box .pa-result-also{padding:0 14px 8px;font-size:11px}
.pa-box>.pa-sub+.pa-row,.pa-box>.pa-sub+.pa-steps{border-top:0}

.pa-box .pa-more{margin:0}
.pa-pad{padding:6px 14px 10px;border-top:1px solid var(--bd)}
.pa-box .pa-more>summary{font-size:11px;color:var(--tx3)}
.pa-box .pa-more p{font-size:11.5px;color:var(--tx2);margin:6px 0 0;line-height:1.5}
.pa-box .pa-more-acts{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.pa-dec-row{align-items:flex-start}
.pa-dec-row>.pa-sev{margin-top:5px}
.pa-dec-row .pa-more{margin-top:2px}
.pa-wait{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--tx2)}
.pa-box .btn.pa-sm{padding:5px 10px;font-size:11px;display:inline-flex;align-items:center;gap:5px}

.pa-rest>summary{list-style:none;cursor:pointer;font-size:12px;color:var(--tx2);margin:0 0 12px 2px}
.pa-rest>summary::-webkit-details-marker{display:none}
.pa-box .pa-week{border:0;box-shadow:none;border-radius:0;margin:0}
.pa-box.is-done{opacity:.5;pointer-events:none}
.pa-in .pa-head{background:var(--pkl)}

@media (max-width:760px){
  .pa-row{flex-wrap:wrap}
  .pa-row-r{width:100%;justify-content:flex-start;padding-left:18px}
  .pa-head{flex-wrap:wrap}
}
@media (prefers-reduced-motion:reduce){.pa-box{animation:none;opacity:1}}
.pa-box.pa-flash{opacity:1;animation:paFlash 1.4s ease-out}

/* ── Planungsassistent v6: portfolio overview ── */
.pa-stack{display:flex;gap:2px;height:10px;margin:12px 14px 4px;border-radius:99px;overflow:hidden;background:var(--bg)}
.pa-stack span{min-width:3px;transition:flex .6s var(--ease-out)}
.pa-pf-rows{padding:4px 0}
.pa-pf-row{display:grid;grid-template-columns:minmax(150px,1.1fr) minmax(120px,2fr) 92px minmax(130px,1.2fr) auto;align-items:center;gap:14px;
  padding:7px 14px;border-bottom:1px solid var(--bd);transition:background .15s}
.pa-pf-row:last-child{border-bottom:0}
.pa-pf-row.is-focus{background:var(--pkl)}
.pa-pf-name{display:flex;align-items:center;gap:10px;min-width:0;border-radius:6px}
.pa-pf-name .pa-row-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-prio{font-size:9px;font-weight:600;color:var(--pk);background:var(--pkl);border-radius:4px;padding:1px 5px;vertical-align:1px}
.pa-pf-track{position:relative;height:8px;border-radius:99px;background:var(--bg)}
.pa-pf-fill,.pa-pf-ghost{position:absolute;left:0;top:0;bottom:0;border-radius:99px}
.pa-pf-fill{transition:width .7s var(--ease-out)}
.pa-pf-ghost{background:var(--bd2);opacity:.6}
.pa-pf-h{font-size:11px;color:var(--tx2);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.pa-pf-h b{color:var(--tx);font-weight:600}
.pa-pf-h span{display:block;font-size:9.5px;color:var(--tx3)}
.pa-pf-st{min-width:0;overflow:hidden}
.pa-pf-st .pa-chip{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.pa-star{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--bd);background:var(--w);color:var(--tx3);border-radius:99px;
  padding:3px 9px;font:inherit;font-size:10.5px;cursor:pointer;transition:color .15s,background .15s,border-color .15s}
.pa-star:hover{color:var(--pk);border-color:var(--pk)}
.pa-star.on{color:#fff;background:var(--pk);border-color:var(--pk)}
.pa-star.is-busy{opacity:.5;pointer-events:none}
.pa-pf-foot{display:flex;align-items:center;gap:6px;padding:8px 14px 10px;font-size:10.5px;color:var(--tx3);border-top:1px solid var(--bd)}
.pa-wi{display:flex;align-items:center;gap:10px;margin:8px 14px 6px;padding:10px 12px;border-radius:10px;background:var(--pkl);
  animation:advStepIn .3s var(--ease-out)}
.pa-wi-ico{width:26px;height:26px;border-radius:99px;display:inline-flex;align-items:center;justify-content:center;background:var(--pk);color:#fff;flex-shrink:0}
.pa-wi .pa-row-m{font-size:11px;color:var(--tx)}

.pa-todo{border-bottom:1px solid var(--bd)}
.pa-todo:last-child{border-bottom:0}
.pa-todo>summary{list-style:none;border-bottom:0}
.pa-todo>summary::-webkit-details-marker{display:none}
.pa-chev{display:inline-flex;color:var(--tx3);transition:transform .2s var(--ease-out)}
.pa-todo[open] .pa-chev{transform:rotate(90deg)}
.pa-todo-x{border-top:1px solid var(--bd);background:var(--w);padding-left:22px}
.pa-todo-x .pa-row:last-child{border-bottom:0}

@media (max-width:860px){
  .pa-pf-row{grid-template-columns:minmax(0,1fr) auto;row-gap:6px}
  .pa-pf-track{grid-column:1 / 3}
  .pa-pf-h{text-align:left}
  .pa-pf-st{grid-column:1 / 2}
}
@media (prefers-reduced-motion:reduce){.pa-pf-fill,.pa-stack span{transition:none}}

/* ── v6b: ranked priorities + "Wenn vorgezogen" effect ── */
.pa-star-n{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:99px;background:#fff;color:var(--pk);font-size:9.5px;font-weight:700}
.pa-wi-hint{color:var(--tx3) !important;font-size:10px !important;margin-top:3px}
.pa-eff{margin-top:6px;padding:7px 10px;border-radius:8px;background:var(--bg);display:flex;flex-direction:column;gap:3px}
.pa-eff-k{font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--tx3)}
.pa-eff-l{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:11px;font-weight:400;color:var(--tx)}
.pa-eff-l b{font-weight:600}
.pa-eff-l svg{flex-shrink:0;color:var(--tx3)}
.pa-eff-l.ok,.pa-eff-l.ok svg{color:#16A34A;font-weight:600}
.pa-eff-l.warn,.pa-eff-l.warn svg{color:#D97706;font-weight:600}
.pa-eff-l.muted{color:var(--tx2)}
.pa-dec-row .pa-row-r{flex-direction:column;align-items:flex-end;gap:6px}

/* ── Planungsassistent v8: Portfolio (Lage · Potenzial · Zeitachse · Entscheidungen), Projekt-Potenzial, Abstimmung ── */
.pa-votebar{display:flex;align-items:center;gap:8px;width:100%;margin-bottom:12px;padding:9px 14px;border:1px solid var(--pk);border-radius:12px;
  background:var(--pkl);color:var(--pk);font:inherit;font-size:12px;font-weight:600;cursor:pointer;text-align:left}
.pa-votebar span{margin-left:auto;display:inline-flex;align-items:center;gap:4px}

.pa-lage{padding:18px 20px 16px}
.pa-lage-top{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.pa-lage-text{flex:1;min-width:260px}
.pa-lage-t{font-size:17px;font-weight:700;letter-spacing:-.01em}
.pa-lage-s{font-size:12.5px;color:var(--tx2);margin-top:4px}
.pa-kpis{display:flex;gap:8px}
.pa-kpi{min-width:104px;padding:10px 14px;border-radius:12px;display:flex;flex-direction:column;gap:2px}
.pa-kpi b{font-size:22px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}
.pa-kpi span{font-size:11px;font-weight:600}
.pa-kpi.crit{background:var(--rdl);color:var(--rd)}
.pa-kpi.risk{background:var(--yel);color:#B45309}
.pa-kpi.ok{background:var(--gnl);color:#15803D}

.pa-pot{display:flex;gap:24px;align-items:flex-start;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px solid var(--bd)}
.pa-pot-text{flex:1.2;min-width:280px}
.pa-pot-k{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--tx3)}
.pa-pot-t{font-size:13.5px;font-weight:700;margin-top:3px}
.pa-pot-s{font-size:11.5px;color:var(--tx2);margin-top:3px}
.pa-pot-viz{flex:1;min-width:240px}
.pa-pot-bar{display:flex;height:10px;border-radius:99px;background:var(--bg);overflow:hidden;border:1px solid var(--bd)}
.pa-pot-bar span{height:100%;transition:width .7s var(--ease-out)}
.pa-pot-bar .g{background:#2F8F6B}.pa-pot-bar .y{background:#D9A441}
.pa-pot-l{font-size:11.5px;color:var(--tx2);margin-top:7px}
.pa-pot-l b{color:var(--tx);font-weight:600}
.pa-pot-leg{display:flex;align-items:center;gap:6px;font-size:10.5px;color:var(--tx3);margin-top:4px}
.pa-pot-leg span{width:9px;height:9px;border-radius:2px;display:inline-block;margin-left:6px}
.pa-pot-leg span:first-child{margin-left:0}
.pa-pot-leg .g{background:#2F8F6B}.pa-pot-leg .y{background:#D9A441}.pa-pot-leg .o{background:var(--bg);border:1px solid var(--bd)}

.pa-grid{display:grid;grid-template-columns:minmax(0,1.85fr) minmax(300px,1fr);gap:12px;align-items:start}
@media (max-width:1100px){.pa-grid{grid-template-columns:1fr}}

/* timeline */
.pa-tl-head,.pa-tl-row{display:grid;grid-template-columns:190px minmax(0,1fr) 128px 26px;gap:12px;align-items:center;padding:0 14px}
.pa-tl-head{font-size:10.5px;color:var(--tx3);padding-top:8px;padding-bottom:6px;border-bottom:1px solid var(--bd)}
.pa-tl-head .r{text-align:right;grid-column:3 / 5}
.pa-tl-kws{display:flex}
.pa-tl-kws span{flex:1;font-weight:600;color:var(--tx2);font-size:10px}
.pa-tl-row{min-height:52px;border-bottom:1px solid var(--bd);opacity:0;animation:advStepIn .3s var(--ease-out) calc(var(--i,0) * 35ms) forwards}
.pa-tl-row:last-child{border-bottom:0}
.pa-tl-row.is-changed{background:linear-gradient(90deg,rgba(214,66,143,.05),transparent)}
.pa-tl-name{display:flex;align-items:center;gap:9px;min-width:0;padding:6px 0}
.pa-tl-name u{text-decoration:none}
.pa-tl-name:hover u{text-decoration:underline}
.pa-tl-name .pa-row-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pa-sevdot{width:8px;height:8px;border-radius:99px;flex-shrink:0}
.pa-sevdot.crit{background:var(--rd)}.pa-sevdot.risk{background:var(--ye)}.pa-sevdot.ok{background:#2F8F6B}
.pa-req{font-size:9px;font-weight:600;color:#B45309;background:var(--yel);border:1px dashed #D9A441;border-radius:4px;padding:0 5px;vertical-align:1px}
.pa-tl-track{position:relative;height:52px;background-image:linear-gradient(90deg,var(--bd) 1px,transparent 1px);background-repeat:repeat-x}
.pa-tl-today{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:#7C8DF0;opacity:.7}
.pa-tl-span{position:absolute;top:50%;height:8px;margin-top:-4px;border-radius:99px;transition:left .7s var(--ease-out),width .7s var(--ease-out)}
.pa-tl-span.late{background:repeating-linear-gradient(-45deg,rgba(214,75,75,.35) 0 5px,rgba(214,75,75,.12) 5px 10px)}
.pa-tl-span.buf{background:var(--bd)}
.pa-tl-ms{position:absolute;top:50%;width:11px;height:11px;margin:-6px 0 0 -6px;transform:rotate(45deg);background:var(--w);border:2px solid var(--tx);border-radius:2px;z-index:2;transition:left .7s var(--ease-out)}
.pa-tl-dot{position:absolute;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:99px;border:2px solid var(--w);box-shadow:0 0 0 1.5px currentColor;z-index:3;transition:left .8s var(--ease-out)}
.pa-tl-dot.crit{background:var(--rd);color:var(--rd)}.pa-tl-dot.risk{background:#E07A3A;color:#E07A3A}.pa-tl-dot.ok{background:#2F8F6B;color:#2F8F6B}
.pa-tl-ghost{position:absolute;top:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:99px;border:1.5px dashed var(--tx3);z-index:1}
.pa-tl-dev{text-align:right}
.pa-dev{display:inline-block;font-size:11px;font-weight:700;border-radius:5px;padding:2px 7px;font-variant-numeric:tabular-nums}
.pa-dev.crit{background:var(--rd);color:#fff}.pa-dev.risk{background:#FCE4D6;color:#C2410C}.pa-dev.ok{background:var(--gnl);color:#15803D;font-weight:600}
.pa-dev-was{font-size:10px;color:var(--tx3);margin-right:4px}
.pa-dev-note{font-size:10px;font-weight:600;color:var(--tx2);margin-top:3px}
.pa-tl-row .pa-star{padding:3px 6px}

/* decisions */
.pa-decs-list{padding:10px;display:flex;flex-direction:column;gap:10px}
.pa-dc{border:1px solid var(--bd);border-radius:12px;padding:12px 13px;background:var(--w);transition:border-color .15s,box-shadow .15s}
.pa-dc.on{border-color:var(--pk);box-shadow:0 0 0 3px var(--pkl)}
.pa-dc-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.pa-dc-who{font-size:10.5px;color:var(--tx3)}
.pa-tag{display:inline-block;font-size:10px;font-weight:600;border-radius:99px;padding:2px 8px;white-space:nowrap}
.pa-tag.plan,.pa-tag.apply{background:var(--bll);color:var(--bl)}
.pa-tag.move{background:var(--pul);color:var(--pu)}
.pa-dc-t{font-size:13px;font-weight:600;line-height:1.4;margin-top:7px}
.pa-dc-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.pa-gain{font-size:10.5px;font-weight:700;color:#fff;background:var(--tx);border-radius:5px;padding:2px 7px}
.pa-wchip{font-size:10.5px;font-weight:600;color:#B45309;background:var(--yel);border-radius:5px;padding:2px 7px}
.pa-dc-imp{margin-top:8px;display:flex;flex-direction:column;gap:3px}
.pa-dc-imp>div{display:grid;grid-template-columns:1fr auto 12px auto;gap:6px;align-items:center;font-size:11.5px;color:var(--tx2)}
.pa-dc-imp svg{color:var(--tx3)}
.pa-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;color:var(--tx2);text-align:right}
.pa-dc-imp .pa-mono.good,.pa-mono.good{color:#15803D;background:var(--gnl);border-radius:4px;padding:1px 5px}
.pa-dc-imp .pa-mono.warn{color:#B45309;background:var(--yel);border-radius:4px;padding:1px 5px}
.pa-dc-imp .pa-mono.bad,.pa-mono.bad{color:var(--rd);background:var(--rdl);border-radius:4px;padding:1px 5px}
.pa-dc-act{display:flex;gap:6px;align-items:center;margin-top:10px}
.pa-dc .btn.pa-sm{padding:5px 11px;font-size:11px;display:inline-flex;align-items:center;gap:5px}
.pa-ghost{border-color:transparent !important;background:none !important;color:var(--tx3) !important}
.pa-pvbar{position:sticky;bottom:0;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 13px;border-top:1px solid var(--bd);background:var(--pkl)}

/* project screen */
.pa-crumb{font-size:12px;color:var(--tx2);margin:0 0 10px 2px}
.pa-crumb a{color:var(--pk);cursor:pointer;text-decoration:underline}
.pa-pp{padding:14px}
.pa-pp-t{font-size:14px;font-weight:700;margin-bottom:10px}
.pa-pks{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:12px}
@media (max-width:760px){.pa-pks{grid-template-columns:repeat(2,minmax(0,1fr))}}
.pa-pk{border:1px solid var(--bd);border-radius:10px;padding:9px 11px}
.pa-pk-l{font-size:10.5px;color:var(--tx2);font-weight:600}
.pa-pk-v{display:flex;align-items:center;gap:6px;margin-top:4px;font-size:15px;font-variant-numeric:tabular-nums;color:var(--tx3)}
.pa-pk-v svg{color:var(--tx3)}
.pa-pk-v b{color:var(--tx);font-weight:700}
.pa-pk-v b.good{color:#15803D}.pa-pk-v b.bad{color:#C2410C}
.pa-pk-s{font-size:9.5px;color:var(--tx3);margin-top:2px}
.pa-lever .pa-tag{flex-shrink:0;min-width:96px;text-align:center}
.pa-lever-bar{width:120px;height:6px;border-radius:99px;background:var(--bg);overflow:hidden;flex-shrink:0}
.pa-lever-bar span{display:block;height:100%;background:#2F8F6B;border-radius:99px}
.pa-rest-row{display:flex;align-items:center;gap:6px;padding:10px 14px;border-top:1px solid var(--bd);font-size:11.5px;color:var(--tx2)}

/* Abstimmung */
.pa-steps4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;padding:14px 16px}
@media (max-width:900px){.pa-steps4{grid-template-columns:1fr 1fr}}
.pa-s4{display:flex;gap:10px;opacity:.6}
.pa-s4.cur,.pa-s4.done{opacity:1}
.pa-s4-n{width:24px;height:24px;border-radius:99px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:var(--bg);color:var(--tx2);border:1px solid var(--bd)}
.pa-s4.done .pa-s4-n{background:#2F8F6B;color:#fff;border-color:#2F8F6B}
.pa-s4.cur .pa-s4-n{background:var(--pk);color:#fff;border-color:var(--pk)}
.pa-s4-t{font-size:12.5px;font-weight:700}
.pa-s4-d{font-size:11px;color:var(--tx2);margin-top:2px;line-height:1.45}
.pa-vgrid{display:grid;grid-template-columns:240px minmax(0,1fr) 320px;gap:12px;align-items:start}
@media (max-width:1100px){.pa-vgrid{grid-template-columns:1fr}}
.pa-vk{font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--tx2);margin:12px 2px 6px}
.pa-vk span{font-weight:400;text-transform:none;letter-spacing:0;color:var(--tx3)}
.pa-vcol .pa-vk:first-child{margin-top:0}
.pa-vl{display:block;width:100%;text-align:left;font:inherit;background:var(--w);border:1px solid var(--bd);border-radius:12px;padding:11px 12px;margin-bottom:8px;cursor:pointer}
.pa-vl.on{border-color:var(--pk);box-shadow:0 0 0 3px var(--pkl)}
.pa-vl-t{font-size:12.5px;font-weight:600;line-height:1.35}
.pa-vl-m{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:10.5px;color:var(--tx3)}
.pa-st{font-size:10px;font-weight:600;border-radius:5px;padding:2px 7px;white-space:nowrap}
.pa-st.ok{background:var(--gnl);color:#15803D}.pa-st.bad{background:var(--rdl);color:var(--rd)}.pa-st.wait{background:var(--yel);color:#B45309}
.pa-vd{padding:16px 18px}
.pa-vd-h{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.pa-tagline{font-size:10.5px;font-weight:600;color:var(--bl)}
.pa-vd-t{font-size:16px;font-weight:700;margin-top:3px}
.pa-vd-res{display:inline-block;margin-top:10px;font-size:11.5px;font-weight:600;color:#15803D;background:var(--gnl);border-radius:6px;padding:3px 9px}
.pa-vd-info{display:flex;gap:10px;margin-top:12px;padding:11px 13px;border-radius:10px;background:var(--bg);font-size:11.5px;color:var(--tx2);line-height:1.5}
.pa-vd-info b{color:var(--tx)}
.pa-vd-info svg{flex-shrink:0;margin-top:2px}
.pa-vp{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--bd);border-radius:10px}
.pa-vp-r{text-align:right}
.pa-chips{display:flex;flex-wrap:wrap;gap:6px}
.pa-pill{font:inherit;font-size:11px;border:1px solid var(--bd);background:var(--w);color:var(--tx);border-radius:99px;padding:4px 11px;cursor:default}
button.pa-pill{cursor:pointer}
.pa-pill.on{border-color:var(--pk);background:var(--pkl);color:var(--pk);font-weight:600}
.pa-po{margin-top:16px;padding-top:14px;border-top:1px solid var(--bd);display:flex;flex-direction:column;gap:8px}
.pa-po-act{display:flex;gap:8px;margin-top:6px;flex-wrap:wrap}
.pa-vd .btn.pa-sm,.pa-po-act .btn{padding:7px 13px;font-size:11.5px}
.pa-vs{padding:16px}
.pa-vs-h{display:flex;align-items:center;gap:10px}
.pa-vs-t{font-size:15px;font-weight:700;margin-top:12px;line-height:1.35}
.pa-vs-ch{margin-top:12px;padding:10px 12px;border-radius:10px;background:var(--bg)}
.pa-vs-ch .pa-vk{margin:0 0 6px}
.pa-vs-l{font-size:12px;color:var(--tx);margin-top:3px}
.pa-vs-why{font-size:11.5px;color:var(--tx2);margin-top:10px;line-height:1.5}
.pa-vs-why b{color:var(--tx)}
.pa-vs-act{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:14px 0 8px}
.pa-vs-act .btn{justify-content:center;padding:9px}
.pa-pad0{padding:2px}
.pa-mchip{font-size:10.5px;font-weight:600;color:var(--tx2);background:var(--bg);border:1px solid var(--bd);border-radius:5px;padding:1px 7px}
.pa-vs-act .btn:disabled,.pa-dc .btn:disabled{opacity:.45;cursor:not-allowed}

/* ── PO-Freigabe ── */
.pa-pobar{display:flex;align-items:center;gap:12px;padding:11px 14px}
.pa-pobar-ico{width:30px;height:30px;border-radius:99px;display:inline-flex;align-items:center;justify-content:center;background:var(--bg);color:var(--tx3);flex-shrink:0}
.pa-pobar-ico.on{background:var(--gnl);color:#15803D}
.pa-pobar .pa-row-m{font-size:11.5px}
.pa-pobar .btn.pa-sm{padding:6px 12px;font-size:11.5px}
.pa-po-modal .sub{margin-bottom:12px}
.pa-po-entry{display:flex;align-items:center;gap:8px;padding:9px 0;border-bottom:1px solid var(--bd)}
.pa-po-edit,.pa-po-add{display:flex;flex-direction:column;gap:6px;padding:8px 0 12px}
.pa-po-add select{max-width:320px}
.pa-po-r{display:flex;align-items:center;gap:6px;font-size:12px}
.pa-po-pjs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 12px;padding-left:22px;max-height:180px;overflow:auto}
.pa-po-pj{display:flex;align-items:center;gap:6px;font-size:12px}
.pa-po-modal .btn.pa-sm{align-self:flex-start;padding:6px 12px;font-size:11.5px}
.pa-po-modal label.pa-po-r,.pa-po-modal label.pa-po-pj{display:flex !important;flex-direction:row;align-items:center;gap:7px;margin:0;font-size:12px;font-weight:500;color:var(--tx);text-transform:none;letter-spacing:0}
.pa-po-modal input[type=radio],.pa-po-modal input[type=checkbox]{width:auto !important;height:auto;margin:0;flex:0 0 auto;padding:0}
.pa-po-modal .pa-po-pj .pa-dot{flex:0 0 8px}

/* Kundenübersicht: Fokus-Chips (Alle Kunden / Offene Leads / Nächste Schritte / Angebote) */
.focus-chips{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.focus-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:99px;border:1px solid var(--bd);background:var(--w);color:var(--tx2);font:inherit;font-size:12px;font-weight:500;cursor:pointer;transition:background-color .15s,border-color .15s,color .15s}
.focus-chip:hover{border-color:var(--bd2);color:var(--tx)}
.focus-chip.on{background:var(--tx);border-color:var(--tx);color:var(--w);font-weight:600}
.focus-chip-n{display:inline-block;min-width:18px;padding:0 6px;border-radius:99px;background:var(--bg);color:var(--tx2);font-size:10px;font-weight:700;line-height:17px;text-align:center}
.focus-chip.on .focus-chip-n{background:rgba(255,255,255,.2);color:var(--w)}

/* Vertragsformular: Erinnerung & Dokumente */
.ctm-reminder{border:1px solid var(--bd);border-radius:10px;padding:10px 12px;margin-bottom:10px;background:var(--bg)}

/* Fristen-Zeitstrahl (Verträge) */
.ctl{display:flex;flex-direction:column;gap:2px}
.ctl-row{display:grid;grid-template-columns:minmax(120px,200px) 1fr 92px;gap:12px;align-items:center;padding:5px 6px;border-radius:8px;cursor:pointer}
.ctl-row:not(.ctl-head):hover{background:var(--bg)}
.ctl-head{cursor:default;padding-bottom:2px}
.ctl-label{min-width:0}
.ctl-name{font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ctl-sub{font-size:10px;color:var(--tx3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ctl-track{position:relative;height:22px;border-radius:6px;background:linear-gradient(var(--bd),var(--bd)) center/100% 1px no-repeat}
.ctl-head .ctl-track{background:none;height:16px}
.ctl-month{position:absolute;top:0;font-size:9.5px;color:var(--tx3);transform:translateX(-50%);white-space:nowrap}
.ctl-today{position:absolute;left:0;top:0;font-size:9.5px;font-weight:700;color:var(--pk)}
.ctl-band{position:absolute;top:5px;height:12px;border-radius:6px;opacity:.55}
.ctl-band.ctl-rd{background:var(--rdl)}.ctl-band.ctl-ye{background:var(--yel)}.ctl-band.ctl-ok{background:var(--bll)}
.ctl-mark{position:absolute;top:50%;width:11px;height:11px;transform:translate(-50%,-50%);border-radius:50%;background:var(--tx2);box-shadow:0 0 0 2px var(--w)}
.ctl-mark.ctl-notice{border-radius:2px;transform:translate(-50%,-50%) rotate(45deg);width:10px;height:10px}
.ctl-notice.ctl-rd{background:var(--rd)}.ctl-notice.ctl-ye{background:var(--ye)}.ctl-notice.ctl-ok{background:var(--bl)}
.ctl-mark.ctl-renew{background:var(--w);border:2.5px solid var(--bl);width:12px;height:12px}
.ctl-when{font-size:10px;color:var(--tx2);line-height:1.3;text-align:right}
.ctl-when b{font-size:11px;color:var(--tx)}
.ctl-when.ctl-rd b{color:var(--rd)}.ctl-when.ctl-ye b{color:#B7741A}
.ctl-legend{display:flex;flex-wrap:wrap;gap:14px;align-items:center;font-size:10px;color:var(--tx3);padding:8px 6px 0;border-top:1px solid var(--bd);margin-top:6px}
.ctl-legend span{display:inline-flex;align-items:center;gap:6px}
.ctl-legend .ctl-mark{position:relative;top:auto;transform:none;display:inline-block;box-shadow:none}
.ctl-legend .ctl-mark.ctl-notice{transform:rotate(45deg)}
.ctl-band-key{display:inline-block;width:22px;height:9px;border-radius:5px;background:var(--bll)}
.ctl-now{border:1px solid var(--rdl);background:color-mix(in srgb,var(--rdl) 35%,var(--w));border-radius:10px;padding:8px 10px;margin-bottom:12px}
.ctl-now-t{font-size:12px;font-weight:600;color:var(--rd);margin-bottom:4px;display:flex;align-items:center;gap:6px}
.ctl-now-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:12px;padding:4px 2px;cursor:pointer;border-radius:6px}
.ctl-now-row:hover{background:var(--w)}
@media (max-width:720px){.ctl-row{grid-template-columns:1fr;gap:4px}.ctl-head .ctl-label,.ctl-when{display:none}}

/* Meine Aufgaben: Vertragsfristen (Liste sidebar, two counts) */
.cr-card{margin-bottom:12px;padding:10px 12px;cursor:pointer;transition:border-color .15s,box-shadow .15s}
.cr-card:hover{border-color:var(--bd2);box-shadow:var(--sh)}
.cr-title{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;margin-bottom:8px}
.cr-nums{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.cr-num{border-radius:8px;padding:6px 10px;display:flex;align-items:baseline;gap:6px}
.cr-num b{font-size:18px;line-height:1}
.cr-num span{font-size:11px}
.cr-rd{background:var(--rdl);color:var(--rd)}.cr-ye{background:var(--yel);color:#B7741A}
