
/* ---------------------------------------------------------------------------
   Yazi tipleri — kendi sunucumuzdan (r145).

   Uygulama bugune kadar HIC yazi tipi gondermiyordu: CSS `Inter, Segoe UI,
   Arial, Noto Sans Arabic` diyordu ama ne `@font-face` ne de tek bir font
   dosyasi vardi. Yani her cihaz kendi sistem fontunu ciziyordu; Arapca arayuz
   Mac'te Geeza Pro, Windows'ta Segoe UI Arabic, Android'de Noto Naskh
   gorunuyordu ve tipografi hiyerarsisi cihazdan cihaza degisiyordu. Eksiklik
   hicbir yerde hata vermedigi icin fark edilmemisti (olculdu: Inter, DM Sans
   ve sahte bir aile ayni metin genisligini veriyordu).

   Google Fonts'tan yuklemek mumkun degil: CSP `style-src 'self'` ve
   `font-src 'self' data:` — dis kaynak stil de font da engelli. Bu yuzden
   dosyalar depoda ve kendi sunucumuzdan servis ediliyor.

   Yalnizca 400 ve 700 gonderiliyor: CSS'te 500 hic kullanilmiyor. 600, 800 ve
   900 kullanildigi icin `font-synthesis:none` sart — yoksa tarayici eksik
   agirligi SAHTE KALIN uretir ve bu ozellikle Arapca'da bozuk gorunur.
   Referans prototip de ayni onlemi aliyor.

   `unicode-range` sayesinde Latin arayuzdeki kullanici Arapca dosyayi
   (328 KB) hic indirmiyor; yalnizca DM Sans (120 KB) iniyor.
   --------------------------------------------------------------------------- */
@font-face{
  font-family:'DM Sans';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/dmsans-400-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'DM Sans';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/dmsans-400-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'DM Sans';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/dmsans-700-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'DM Sans';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/dmsans-700-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Noto Sans Arabic';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/notoarabic-400-arabic.woff2') format('woff2');
  unicode-range:U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}
@font-face{
  font-family:'Noto Sans Arabic';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/notoarabic-700-arabic.woff2') format('woff2');
  unicode-range:U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}
/* IBM Plex Sans Arabic — tek aile hem Arapca hem Latin karakterleri tasiyor;
   kendi sunucumuzda barindiriliyor (CSP font-src 'self'), PWA cevrimdisi calisir.
   Yukaridaki DM Sans / Noto Sans Arabic bloklari artik font yigininda kullanilmiyor. */
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/plexarabic-400-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/plexarabic-400-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/plexarabic-400-arabic.woff2') format('woff2');
  unicode-range:U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('/static/fonts/plexarabic-500-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('/static/fonts/plexarabic-500-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('/static/fonts/plexarabic-500-arabic.woff2') format('woff2');
  unicode-range:U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('/static/fonts/plexarabic-600-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('/static/fonts/plexarabic-600-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('/static/fonts/plexarabic-600-arabic.woff2') format('woff2');
  unicode-range:U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/plexarabic-700-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/plexarabic-700-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Sans Arabic';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/plexarabic-700-arabic.woff2') format('woff2');
  unicode-range:U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}

html{
  /* rem'in dayandigi kok boyut. Kullanici tercihi buradan uygulanir; boylece
     "yazi boyutu" ayari yalnizca body'yi degil butun arayuzu olcekler.
     Onceden her bilesen mutlak px kullandigi icin ayar fiilen calismiyordu. */
  font-size:var(--nx-user-font-size,16px);
}
:root {
  /* MASTER GROUP marka jetonlari (tokens/design-tokens.json v3.0).
     Lacivert yapiyi kurar, altin yon gosterir. Marka kurali altini %5 ile
     sinirliyor, bu yuzden altin ayri bir degisken: dolu dugme veya genis
     yuzey olarak degil, kucuk imza olarak kullanilir. */
  /* Krem yon (C): zemin markanin kagit tonunda, cizgiler ve ikincil
     yuzeyler sogutulmus gri yerine ayni sicak aileden. Onceki gri-mavi
     cizgiler krem zeminin uzerinde yabanci duruyordu. */
  /* r153 — Vercel ve Stripe olculdu: ikisi de zemine doku/isik KOYMUYOR.
     Onlari tasarimli gosteren sey yuksek kontrast, tek yaricap olcegi, hap
     kontroller ve bol bosluk. Krem zemin soguk notre cekildi (#FAFAFA),
     ikincil metin #6E7580'den #5A6672'ye tasindi -- soluk gri yazilar
     okunmuyordu. */
  --nx-bg:#FAFAFA;--nx-surface:#FFFFFF;--nx-surface-2:#F4F5F6;--nx-text:#0B1F31;--nx-muted:#5A6672;--nx-border:#E8EAEC;
  --nx-primary:#0A334B;--nx-primary-strong:#071E2B;--nx-primary-soft:#E8EEF1;--nx-danger:#B94B55;--nx-warning:#B97816;--nx-info:#2E70B8;
  --nx-accent:#DCA953;--nx-accent-strong:#B9822E;--nx-accent-soft:#F2E2BD;
  /* Uc deger: girdi 6, kart 10, dugme hap. Stripe her yerde tek bir 4px,
   Vercel dugmelerin hepsini hap yapiyor. Golge kaldirildi: Vercel 900
   ogede yalnizca 20 golge kullaniyor, ayrim kil payi cizgiyle veriliyor. */
--nx-radius:10px;--nx-radius-sm:6px;--nx-radius-pill:999px;--nx-shadow:none;--nx-pill:#0B1F31;--nx-pill-text:#B9CBD8;--nx-pill-active:#FFFFFF;--nx-safe-top:env(safe-area-inset-top,0px);--nx-safe-right:env(safe-area-inset-right,0px);--nx-safe-bottom:env(safe-area-inset-bottom,0px);--nx-safe-left:env(safe-area-inset-left,0px);

  /* --- Bosluk olcegi -------------------------------------------------------
     Once 2,3,5,6,7,9,10,14 px karisik kullaniliyordu; arayuz sistemli degil
     elle ayarlanmis gorunuyordu. Tek olcek: 4'un katlari. */
  --nx-s-hair:1px;  /* etiket/deger ikilisi: bosluk degil, tipografik sikilik */
  --nx-s1:4px;--nx-s2:8px;--nx-s3:12px;--nx-s4:16px;--nx-s5:20px;--nx-s6:24px;
  --nx-s8:32px;--nx-s10:40px;--nx-s12:48px;--nx-s16:64px;--nx-s20:80px;

  /* --- Hareket -------------------------------------------------------------
     Sure ve egri tek yerden. Yayli (spring/bounce) davranis bilerek yok:
     kurumsal bir is yuzeyinde ziplama ucuz gorunuyor. */
  --nx-dur-micro:140ms;      /* dugme, satir vurgusu */
  --nx-dur-standard:200ms;   /* durum degisimi, rozet */
  --nx-dur-panel:300ms;      /* cekmece, modal */
  --nx-dur-page:520ms;       /* modul gecisi */
  --nx-dur-signature:700ms;  /* ust sinir; asilmaz */
  --nx-dur-spin:800ms;--nx-dur-shimmer:1400ms;  /* dongusel: gecis degil */
  --nx-ease-standard:cubic-bezier(.2,0,0,1);
  --nx-ease-enter:cubic-bezier(0,0,.2,1);
  --nx-ease-exit:cubic-bezier(.4,0,1,1);

  /* --- Katman sirasi -------------------------------------------------------
     Once 2,4,12,15,20,31,36,50,90,100,200 gibi rastgele sayilardi; hangisinin
     hangisinin ustunde oldugu ancak dosyayi tarayarak anlasiliyordu. */
  --nx-z-raised:2;--nx-z-sticky:20;--nx-z-fab:40;--nx-z-nav:50;
  --nx-z-overlay:100;--nx-z-toast:200;

  /* --- Durum renkleri ------------------------------------------------------
     Dosyaya dagilmis ham hex'lerin tek kaynagi. Her durumun uc tonu var:
     dolu (isaret), yumusak (zemin), yazi (okunur metin). */
  --nx-success:#2F9E63;--nx-success-soft:#E7F4EC;--nx-success-text:#176A3A;
  --nx-danger-soft:#FDECEB;--nx-danger-text:#B3261E;
  --nx-warning-soft:#FDF3E0;--nx-warning-text:#8A6A22;

  /* Dolu durum haplari (r109). Yumusak tonlar hucre zeminleri icin; bunlar
     grup basliklari ve satirlar icin DOLU rozet. Kural ClickUp'tan olculdu:
     yalnizca "baslamamis" soluk zemin + koyu yazi kaliyor, digerlerinin hepsi
     dolu renk + beyaz yazi. Boylece liste karnavala donmuyor. */
  --nx-on-fill:#FFFFFF;
  --nx-neutral-fill:#6A7A85;
  /* Turetilmis jetonlar. Bunlar stil sayfasinda okunuyordu ama hicbir yerde
     tanimli degildi, yani o kurallarin zemini/cercevesi hic uygulanmiyordu.
     Var olan jetonlardan turetiliyorlar ki koyu temada da kendiliginden
     dogru olsunlar. */
  --nx-surface-soft:var(--nx-surface-2);
  --nx-line:var(--nx-border);
  --nx-border-strong:color-mix(in srgb,var(--nx-border) 55%,var(--nx-muted));
  --nx-warning-border:color-mix(in srgb,var(--nx-warning-text) 35%,var(--nx-border));
  --nx-vh:1vh;
  --next-visual-height:100vh;--next-visual-width:100vw;--next-visual-top:0px;--next-visual-left:0px;--next-keyboard-inset:0px;color-scheme:light;
}
:root[data-theme="dark"]{--nx-bg:#041722;--nx-surface:#082A3D;--nx-surface-2:#061F2D;--nx-text:#EAF1F6;--nx-muted:#9BB0BF;--nx-border:#164055;--nx-primary:#5B9BC4;--nx-primary-strong:#8FBEDC;--nx-primary-soft:#0C3247;--nx-accent:#DCA953;--nx-accent-strong:#EFC97E;--nx-accent-soft:#3A2E17;--nx-shadow:none;--nx-pill:#12293A;--nx-pill-text:#9DB4C4;--nx-pill-active:#EAF1F6;
  /* r204 — Durum renkleri koyu temada YENIDEN tanimlanir.
     Once yalnizca :root'ta (acik tema) vardi: `-soft` jetonlari beyaza yakin
     kaldigi icin geciken rozeti / onay seridi koyu arayuzde parlak bir yama
     oluyordu, `-text` jetonlari ise koyu yuzeyde 2.2-3.0:1'e dusuyordu
     (WCAG AA normal metin esigi 4.5:1). Olculen yeni oranlar:
       danger-text  #F2A0A0 : soft 7.77 | surface 7.32 | bg 8.96
       warning-text #EFC97E : soft 8.42 | surface 9.46 | bg 11.58
       success-text #7FD6A4 : soft 7.85 | surface 8.56 | bg 10.48
     Dolu jetonlar hem beyaz metni hem de yuzeye karsi 3:1 sekil kontrastini
     korumak icin kil payi aciliyor: danger beyaz 4.83 / yuzey 3.09,
     info beyaz 4.74 / yuzey 3.15. Acik temaya DOKUNULMADI. */
  --nx-danger:#BA4F59;--nx-danger-soft:#3A181C;--nx-danger-text:#F2A0A0;
  --nx-warning:#C4831E;--nx-warning-soft:#3A2E17;--nx-warning-text:#EFC97E;
  --nx-success:#33A166;--nx-success-soft:#0F3423;--nx-success-text:#7FD6A4;
  --nx-info:#3075C0;
  color-scheme:dark}
@media(prefers-color-scheme:dark){:root[data-theme="system"]{--nx-bg:#041722;--nx-surface:#082A3D;--nx-surface-2:#061F2D;--nx-text:#EAF1F6;--nx-muted:#9BB0BF;--nx-border:#164055;--nx-primary:#5B9BC4;--nx-primary-strong:#8FBEDC;--nx-primary-soft:#0C3247;--nx-accent:#DCA953;--nx-accent-strong:#EFC97E;--nx-accent-soft:#3A2E17;--nx-shadow:none;--nx-pill:#12293A;--nx-pill-text:#9DB4C4;--nx-pill-active:#EAF1F6;
  /* r204 — yukaridaki koyu tema jetonlarinin sistem tercihi karsiligi.
     Iki blok birebir ayni kalmali; biri guncellenip digeri unutulursa
     "sistem" secenegindeki kullanici eski (kirik) renkleri gorur. */
  --nx-danger:#BA4F59;--nx-danger-soft:#3A181C;--nx-danger-text:#F2A0A0;
  --nx-warning:#C4831E;--nx-warning-soft:#3A2E17;--nx-warning-text:#EFC97E;
  --nx-success:#33A166;--nx-success-soft:#0F3423;--nx-success-text:#7FD6A4;
  --nx-info:#3075C0;
  color-scheme:dark}}
*{box-sizing:border-box}html,body,#ctt-next-root{margin:0;min-height:100%;width:100%}html{background:var(--nx-bg);font-family:'IBM Plex Sans Arabic',-apple-system,'Segoe UI',Arial,sans-serif;font-synthesis:none}body{margin:0;background:var(--nx-bg);color:var(--nx-text);font-size:0.875rem;line-height:1.45;overflow-x:hidden}button,input,select,textarea{font:inherit}button{color:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid rgba(10,51,75,.30);outline:3px solid color-mix(in srgb,var(--nx-primary) 28%,transparent);outline-offset:2px}
.nx-app-shell{min-height:var(--next-visual-height,100dvh);display:grid;grid-template-columns:248px minmax(0,1fr);background:var(--nx-bg)}.nx-sidebar{grid-column:1;grid-row:1;position:sticky;top:0;height:100dvh;background:var(--nx-surface);border-inline-end:1px solid var(--nx-border);padding:14px 12px;display:flex;flex-direction:column;gap:16px;z-index:20}.nx-main-column{grid-column:2;grid-row:1;min-width:0;min-height:100dvh}.nx-brand,.nx-login-brand,.nx-mobile-brand{display:flex;align-items:center;gap:12px;min-width:0}.nx-brand-mark{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;background:var(--nx-primary);color:#fff;font-weight:700;font-size:1.0625rem;box-shadow:none;flex:0 0 auto}.nx-brand>span:last-child,.nx-login-brand>div{min-width:0;display:grid}.nx-brand strong,.nx-login-brand strong{font-size:0.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-brand small,.nx-login-brand small{font-size:0.8125rem;color:var(--nx-muted)}
.nx-sidebar-nav{display:grid;gap:4px}.nx-nav-item{position:relative;border:0;background:transparent;border-radius:var(--nx-radius);padding:9px 10px;min-height:40px;display:flex;align-items:center;gap:12px;text-align:start;cursor:pointer;color:var(--nx-muted);min-width:0}.nx-nav-item:hover{background:var(--nx-surface-2);color:var(--nx-text)}.nx-nav-item.active{background:var(--nx-primary-soft);color:var(--nx-primary-strong);font-weight:700}.nx-nav-item .nx-icon{width:24px;text-align:center;font-size:1.125rem}.nx-nav-item span:nth-child(2){min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-nav-badge{margin-inline-start:auto;background:var(--nx-danger);color:white;border-radius:var(--nx-radius-pill);min-width:20px;height:20px;padding:0 5px;display:grid;place-items:center;font-size:0.7812rem}.nx-sidebar-foot{margin-top:auto;border-top:1px solid var(--nx-border);padding:12px 5px 0;display:grid;gap:8px}.nx-sidebar-foot small{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-link-button{border:0;background:transparent;color:var(--nx-primary);padding:2px 0;text-align:start;cursor:pointer;font-weight:700}
.nx-topbar{height:62px;position:sticky;top:0;z-index:15;background:var(--nx-surface);background:color-mix(in srgb,var(--nx-surface) 92%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--nx-border);display:flex;align-items:center;gap:16px;padding:8px 18px}.nx-topbar-context{display:grid;min-width:0}.nx-topbar-context strong{font-size:0.9375rem}.nx-topbar-context small{font-size:0.7812rem;color:var(--nx-muted)}.nx-topbar-actions{margin-inline-start:auto;display:flex;align-items:center;gap:8px}.nx-mobile-brand{display:none}.nx-icon-button,.nx-pill-button,.nx-avatar{border:1px solid var(--nx-border);background:var(--nx-surface);height:36px;min-width:36px;border-radius:var(--nx-radius);display:grid;place-items:center;cursor:pointer;position:relative;padding:0 9px}.nx-icon-button:hover,.nx-pill-button:hover{border-color:var(--nx-primary);color:var(--nx-primary)}.nx-notification-toggle b{position:absolute;inset-block-start:-5px;inset-inline-end:-6px;background:var(--nx-danger);color:#fff;min-width:17px;height:17px;padding:0 4px;border-radius:var(--nx-radius-pill);font-size:0.75rem;display:grid;place-items:center}.nx-avatar{border-radius:50%;background:var(--nx-primary-soft);color:var(--nx-primary-strong);font-weight:600}.nx-content{padding:18px;max-width:1580px;margin:0 auto;width:100%;min-width:0}.nx-page{display:grid;gap:16px}.nx-page-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:2px 2px 0}.nx-page-heading h1{margin:0;font-size:1.5625rem;letter-spacing:-.02em}.nx-page-heading p{margin:3px 0 0;color:var(--nx-muted)}.nx-eyebrow{font-size:0.6875rem!important;font-weight:600;color:var(--nx-muted)!important}
/* Hap dugme: kullanicinin acikca begendigi bicim. Yatay dolgu artti cunku
   yuvarlak kenarda ayni dolgu gorsel olarak daralir. */
.nx-button{min-height:38px;border-radius:var(--nx-radius-pill);padding:0 18px;border:1px solid var(--nx-border-strong);background:var(--nx-surface);font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px}.nx-button:hover:not(:disabled){border-color:var(--nx-primary)}.nx-button:disabled{opacity:.55;cursor:not-allowed}.nx-button-primary{background:var(--nx-primary);border-color:var(--nx-primary);color:#fff}.nx-button-primary:hover:not(:disabled){background:var(--nx-primary-strong);color:#fff}.nx-button-danger{color:var(--nx-danger);border-color:color-mix(in srgb,var(--nx-danger) 35%,var(--nx-border))}.nx-badge{display:inline-flex;align-items:center;justify-content:center;min-height:24px;padding:2px 8px;border-radius:var(--nx-radius-pill);font-size:0.8125rem;font-weight:600;background:var(--nx-surface-2);color:var(--nx-muted);border:1px solid var(--nx-border)}.nx-badge-info{background:#e9f2ff;color:#095bbf;border-color:#cfe2ff}.nx-badge-warning{background:#fff4dd;color:#815000;border-color:#ffe0a3}.nx-badge-danger{background:#fff0ef;color:#a31910;border-color:#ffd2ce}.nx-badge-success{background:#e9f8f0;color:var(--nx-success-text);border-color:#ccebd9}
.nx-command-grid{display:grid;grid-template-columns:minmax(260px,1.25fr) minmax(260px,1.25fr) minmax(145px,.55fr) minmax(145px,.55fr);gap:12px}.nx-command-card,.nx-stat-card{border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface);min-height:86px;padding:12px;text-align:start}.nx-command-card{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:12px;cursor:pointer}.nx-command-card:hover{border-color:var(--nx-primary);box-shadow:none}.nx-command-card.primary{border-color:color-mix(in srgb,var(--nx-primary) 36%,var(--nx-border));background:linear-gradient(145deg,var(--nx-surface),var(--nx-primary-soft))}.nx-command-icon{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:var(--nx-primary-soft);color:var(--nx-primary-strong);font-size:1.25rem;font-weight:700}.nx-command-card>span:nth-child(2){display:grid;gap:4px;min-width:0}.nx-command-card strong{font-size:0.875rem}.nx-command-card small{color:var(--nx-muted);overflow-wrap:anywhere}.nx-command-card>b{font-size:1.5625rem}.nx-stat-card{display:flex;flex-direction:column;justify-content:center;gap:4px}.nx-stat-card span{color:var(--nx-muted);font-size:0.8125rem}.nx-stat-card strong{font-size:1.6875rem}.nx-panel{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius);padding:13px}.nx-panel>header{display:flex;align-items:center;gap:8px;margin-bottom:10px}.nx-panel>header h2{margin:0;font-size:0.9375rem}.nx-task-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-task-card{border:1px solid var(--nx-border);border-radius:11px;background:var(--nx-surface-2);padding:10px;display:grid;gap:8px;min-width:0}.nx-task-card-top{display:flex;align-items:flex-start;gap:8px}.nx-task-card h3{margin:0;font-size:0.875rem;line-height:1.35;min-width:0;flex:1}.nx-task-card p{margin:0;color:var(--nx-muted);font-size:0.8125rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.nx-task-meta{display:flex;justify-content:space-between;gap:8px;color:var(--nx-muted);font-size:0.7812rem;flex-wrap:wrap}.nx-progress{height:5px;border-radius:var(--nx-radius-pill);background:var(--nx-border);overflow:hidden}.nx-progress span{display:block;height:100%;background:var(--nx-primary);border-radius:inherit}.nx-task-row{display:grid;grid-template-columns:minmax(0,1fr) 120px 52px;gap:12px;align-items:center;padding:9px 4px;border-bottom:1px solid var(--nx-border)}.nx-task-row:last-child{border-bottom:0}.nx-task-row>div{display:grid;min-width:0}.nx-task-row strong,.nx-task-row small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-task-row small{color:var(--nx-muted)}
.nx-state{min-height:130px;display:flex;align-items:center;justify-content:center;gap:12px;color:var(--nx-muted);padding:18px;text-align:center}.nx-state.compact{min-height:64px}.nx-spinner{width:21px;height:21px;border:3px solid var(--nx-border);border-top-color:var(--nx-primary);border-radius:50%;animation:nx-spin var(--nx-dur-spin) linear infinite}@keyframes nx-spin{to{transform:rotate(360deg)}}.nx-empty{flex-direction:column}.nx-empty-icon{font-size:1.625rem}.nx-error{border:1px solid #ffd1ce;background:#fff3f2;color:#932018;border-radius:var(--nx-radius);min-height:72px}.nx-migration-panel{max-width:760px;justify-self:center;text-align:center;padding:28px;display:grid;justify-items:center;gap:12px}.nx-migration-panel h2,.nx-migration-panel p{margin:0}.nx-migration-panel p{color:var(--nx-muted)}.nx-migration-mark{width:54px;height:54px;border-radius:16px;background:var(--nx-primary-soft);display:grid;place-items:center;font-size:1.5625rem;color:var(--nx-primary)}
.nx-boot{min-height:var(--next-visual-height,100dvh);display:grid;place-items:center;padding:max(18px,env(safe-area-inset-top)) 16px max(18px,env(safe-area-inset-bottom))}

/* === Giris ekrani (r167) ===============================================
   Olcum: GOLDORA CRM'in giris ekrani (crm.goldoratr.com) tarayicida olculdu --
   marka renginde tam sayfa + ustten ve alt kosesinden iki yumusak isik + dev
   ama cok soluk marka damgasi + ortada TEK acik kart (380px, derin golge
   `0 24px 64px`). Kullanici o dili ornek gostererek istedi.

   Onceki duzen ekrani ikiye boluyordu (yarim lacivert panel + form); kullanici
   "ortadan bolunmus" halini begenmedi. Ayrica paneldeki logo `mg-lockup-dark`
   gorseliydi ve o PNG'nin ICINDE lacivert bir zemin gomulu -- panelin
   lacivertiyle tam eslesmedigi icin logonun arkasinda gorunur bir kutu
   birakiyordu. Simdi saydam `mg-mark` kullaniliyor. */
.nx-login-shell{min-height:var(--next-visual-height,100dvh);display:grid;place-items:center;
  padding:max(24px,env(safe-area-inset-top)) 16px max(24px,env(safe-area-inset-bottom));
  position:relative;overflow:hidden;
  background:
    radial-gradient(90% 70% at 50% 0%, rgba(35,105,150,.55) 0%, rgba(0,0,0,0) 62%),
    radial-gradient(70% 60% at 12% 100%, rgba(217,160,58,.20) 0%, rgba(0,0,0,0) 60%),
    #072A3E}
.nx-login-damga{position:fixed;inset-block-end:-16%;inset-inline-end:-10%;
  width:min(58vw,620px);height:auto;opacity:.06;pointer-events:none;user-select:none;z-index:0}
.nx-login-tagline{margin:0;text-align:center;font-size:.78rem;color:var(--nx-muted);line-height:1.45}
/* Kisa ekranda (yatay telefon, kucuk dizustu) kart ortalanirsa ustu kesiliyor;
   yukaridan baslayip sayfa kaydiriliyor. Damga `fixed` oldugu icin kaydirma
   alanina hicbir sey eklemiyor. */
@media(max-height:700px){
  .nx-login-shell{align-content:start;overflow-y:auto}
}
.nx-login-card{position:relative;z-index:1;width:min(400px,calc(100vw - 32px));
  background:var(--nx-surface);border:0;border-radius:14px;padding:32px 26px 26px;
  box-shadow:0 24px 64px rgba(0,0,0,.34);display:grid;gap:14px}.nx-login-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.nx-login-head h1{font-size:1.4375rem;margin:0}.nx-form{display:grid;gap:12px}.nx-form label:not(.nx-check){display:grid;gap:4px;font-weight:700;font-size:0.8125rem}.nx-form input:not([type="checkbox"]),.nx-form select,.nx-form textarea{width:100%;height:42px;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2);color:var(--nx-text);padding:0 11px}.nx-check{display:flex;align-items:center;gap:8px;color:var(--nx-muted);font-size:0.8125rem}.nx-check input{width:17px;height:17px}.nx-helper{margin:0;color:var(--nx-muted);font-size:0.8125rem;text-align:center}.nx-boot{align-content:center;color:var(--nx-muted)}
.nx-overlay-layer{position:fixed;inset:0;z-index:100;pointer-events:none}.nx-overlay-backdrop{position:absolute;inset:0;border:0;background:rgba(15,23,34,.42);pointer-events:auto}.nx-overlay{position:absolute;background:var(--nx-surface);border:1px solid var(--nx-border);box-shadow:var(--nx-shadow);display:flex;flex-direction:column;pointer-events:auto;max-height:calc(var(--next-visual-height,100dvh) - 24px);overflow:hidden}.nx-overlay-drawer{inset-block:12px;inset-inline-end:12px;width:min(430px,calc(100vw - 24px));border-radius:var(--nx-radius)}.nx-overlay-modal{left:50%;top:50%;transform:translate(-50%,-50%);width:min(500px,calc(100vw - 24px));border-radius:var(--nx-radius)}.nx-overlay-bottom-sheet{display:none}.nx-overlay-header{min-height:54px;padding:9px 12px;border-bottom:1px solid var(--nx-border);display:flex;align-items:center;gap:12px}.nx-overlay-header h2{margin:0;font-size:0.9375rem;flex:1}.nx-overlay-body{overflow:auto;overscroll-behavior:contain;padding:12px;min-height:0}.nx-overlay-footer{border-top:1px solid var(--nx-border);padding:9px 12px calc(9px + env(safe-area-inset-bottom));display:flex;justify-content:flex-end;gap:8px;background:var(--nx-surface);flex:0 0 auto}.nx-notification-list{display:grid;gap:8px}.nx-notification{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:var(--nx-radius);padding:9px;display:grid;grid-template-columns:7px minmax(0,1fr);gap:8px;text-align:start;cursor:pointer}.nx-notification.unread{border-color:color-mix(in srgb,var(--nx-primary) 35%,var(--nx-border));background:var(--nx-primary-soft)}.nx-notification-dot{width:7px;height:7px;border-radius:50%;background:transparent;margin-top:6px}.nx-notification.unread .nx-notification-dot{background:var(--nx-primary)}.nx-notification>span:last-child{display:grid;gap:4px}.nx-notification strong{font-size:0.8125rem}.nx-notification small{color:var(--nx-muted);font-size:0.8125rem}.nx-notification time{color:var(--nx-muted);font-size:0.75rem}.nx-toast{position:fixed;z-index:200;inset-inline-end:16px;inset-block-start:76px;max-width:min(440px,calc(100vw - 32px));border:1px solid var(--nx-border);border-radius:11px;background:var(--nx-surface);box-shadow:var(--nx-shadow);padding:10px 10px 10px 12px;display:flex;align-items:center;gap:12px}.nx-toast span{flex:1}.nx-toast-error{border-color:#ffccc8;color:var(--nx-danger-text)}.nx-toast-success{border-color:#c9ebd8;color:var(--nx-success-text)}.nx-mobile-nav{display:none}.nx-more-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-more-item{min-height:64px;border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:12px;display:flex;align-items:center;gap:12px;padding:10px;text-align:start}.nx-more-item .nx-icon{font-size:1.25rem;width:28px}.nx-account-card{margin-top:12px;padding:10px;border:1px solid var(--nx-border);border-radius:12px;display:flex;align-items:center;gap:12px}.nx-account-card>div{display:grid;min-width:0;flex:1}.nx-account-card small{color:var(--nx-muted);overflow:hidden;text-overflow:ellipsis}.nx-bottom-sheet-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
@media(max-width:1100px){.nx-command-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-task-list{grid-template-columns:1fr}}
@media(max-width:767px){
  body{font-size:0.875rem}.nx-app-shell{display:block;min-height:var(--next-visual-height,100dvh);padding-bottom:calc(62px + var(--nx-safe-bottom))}.nx-sidebar{display:none}.nx-main-column{min-height:0}.nx-topbar{height:56px;padding:7px 10px;top:0}.nx-topbar-context{display:none}.nx-mobile-brand{display:flex;min-width:0}.nx-mobile-brand strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px;font-size:0.8125rem}.nx-mobile-brand .nx-brand-mark{width:31px;height:31px;border-radius:9px;font-size:0.875rem}.nx-topbar-actions{gap:4px}.nx-pill-button{display:none}.nx-avatar{width:34px;height:34px;min-width:34px}.nx-icon-button{height:34px;min-width:34px}.nx-content{padding:10px}.nx-page{gap:12px}.nx-page-heading{align-items:center}.nx-page-heading h1{font-size:1.1875rem}.nx-page-heading p:not(.nx-eyebrow){font-size:0.8125rem}.nx-page-heading>.nx-button{min-height:35px;padding:0 10px}.nx-command-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-command-card,.nx-stat-card{min-height:72px;padding:9px;border-radius:11px}.nx-command-card{grid-template-columns:34px minmax(0,1fr) auto;gap:8px}.nx-command-icon{width:34px;height:34px;border-radius:9px;font-size:1.0625rem}.nx-command-card strong{font-size:0.8125rem}.nx-command-card small{font-size:0.7812rem;line-height:1.3}.nx-command-card>b,.nx-stat-card strong{font-size:1.25rem}.nx-stat-card span{font-size:0.7812rem}.nx-panel{padding:10px;border-radius:var(--nx-radius)}.nx-task-card{padding:9px}.nx-task-row{grid-template-columns:minmax(0,1fr) 78px 40px;font-size:0.8125rem}.nx-mobile-nav{position:fixed;z-index:50;inset-inline:0;bottom:0;height:calc(58px + var(--nx-safe-bottom));padding:4px 6px var(--nx-safe-bottom);display:grid;grid-template-columns:repeat(4,minmax(0,1fr));background:color-mix(in srgb,var(--nx-surface) 96%,transparent);backdrop-filter:blur(14px);border-top:1px solid var(--nx-border)}.nx-mobile-nav .nx-nav-item{min-height:50px;padding:3px;display:grid;justify-items:center;align-content:center;gap:var(--nx-s-hair);border-radius:8px;text-align:center}.nx-mobile-nav .nx-nav-item .nx-icon{font-size:1.125rem;width:auto}.nx-mobile-nav .nx-nav-item span:nth-child(2){font-size:0.75rem;max-width:100%;white-space:nowrap}.nx-mobile-nav .nx-nav-badge{position:absolute;top:2px;inset-inline-end:22%;margin:0}.nx-overlay-drawer{inset:0;width:100%;max-height:var(--next-visual-height,100dvh);border-radius:0}.nx-overlay-modal{width:calc(100vw - 20px);max-height:calc(var(--next-visual-height,100dvh) - 20px)}.nx-overlay-bottom-sheet{display:flex;inset-inline:8px;bottom:calc(8px + var(--nx-safe-bottom));max-height:min(72dvh,calc(var(--next-visual-height,100dvh) - 18px));border-radius:var(--nx-radius)}.nx-overlay-footer{padding-bottom:calc(9px + var(--nx-safe-bottom))}/* Telefonda bildirim serdi UST'te duruyordu ve sayfa basligiyla ayni
   satiri paylasiyordu: olculdu, 375px'de serit 64-132, baslik 79-107 --
   yani selamlamanin uzerini kapatiyordu. Surum uyarisi gibi kalici bir
   serit kapatilana kadar basligi gizli tutuyor. Telefonda alta alindi;
   alt gezinme cubugunun uzerinde duruyor ve hicbir icerigi ortmuyor. */
.nx-toast{inset-inline:10px;inset-block-start:auto;
  inset-block-end:calc(70px + var(--nx-safe-bottom));max-width:none}.nx-login-card{padding:17px;border-radius:15px}.nx-login-head h1{font-size:1.25rem}.nx-form input:not([type="checkbox"]){height:44px}.nx-login-shell{align-items:center;padding-inline:10px}.nx-state{min-height:100px}.nx-migration-panel{padding:20px}.nx-compact-task-table{padding:7px}
}
@media(max-width:390px){.nx-mobile-brand strong{max-width:125px}.nx-command-grid{grid-template-columns:1fr}.nx-command-card{min-height:66px}.nx-stat-card{min-height:58px;flex-direction:row;align-items:center;justify-content:space-between}.nx-more-grid{grid-template-columns:1fr 1fr}.nx-bottom-sheet-actions{grid-template-columns:1fr}}
@media(max-height:650px) and (max-width:767px){.nx-login-card{margin-bottom:calc(12px + env(safe-area-inset-bottom))}.nx-overlay-bottom-sheet{max-height:calc(var(--next-visual-height,100dvh) - 10px)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}
.nx-inline-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.nx-overlay-footer>.nx-inline-actions{width:100%}
/* Keep the notification trigger reachable so a second tap closes the drawer. */
.nx-notification-drawer-layer{inset-block-start:62px}
.nx-notification-drawer-layer .nx-overlay-backdrop{inset-block-start:0}
@media(max-width:767px){.nx-notification-drawer-layer{inset-block-start:56px}}

/* Phase 2B — professional My Tasks workspace. */
.nx-panel-link{margin-inline-start:auto;font-size:0.8125rem}.nx-task-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;align-items:start}.nx-task-card-button{width:100%;text-align:start;color:inherit;cursor:pointer;font:inherit}.nx-task-card-button:hover{border-color:color-mix(in srgb,var(--nx-primary) 48%,var(--nx-border));box-shadow:0 7px 20px color-mix(in srgb,var(--nx-primary) 8%,transparent)}.nx-task-card-button.is-overdue{border-inline-start:3px solid var(--nx-danger)}.nx-task-title-wrap{display:grid;min-width:0;flex:1;gap:4px}.nx-task-id{font-size:0.75rem;color:var(--nx-muted);font-variant-numeric:tabular-nums}.nx-task-card-flags{display:flex;gap:4px;flex-wrap:wrap}.nx-task-card-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 12px;color:var(--nx-muted);font-size:0.7812rem}.nx-task-card-facts span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-task-progress-line{display:grid;grid-template-columns:minmax(0,1fr) 38px;align-items:center;gap:8px}.nx-task-progress-line>b{text-align:end;font-size:0.7812rem}.nx-task-card-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid var(--nx-border);padding-top:6px;font-size:0.7812rem;color:var(--nx-muted)}.nx-task-card-footer strong{color:var(--nx-primary);font-size:0.7812rem}.nx-ownership-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-ownership-switch>button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:12px;padding:10px;display:grid;grid-template-columns:34px minmax(0,1fr) auto;gap:8px;align-items:center;text-align:start;cursor:pointer;min-height:64px}.nx-ownership-switch>button>span{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;background:var(--nx-surface-2);font-size:1.0625rem;font-weight:700}.nx-ownership-switch>button>div{display:grid;min-width:0}.nx-ownership-switch strong{font-size:0.875rem}.nx-ownership-switch small{font-size:0.7812rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-ownership-switch b{font-size:1.25rem}.nx-ownership-switch>button.active{border-color:color-mix(in srgb,var(--nx-primary) 45%,var(--nx-border));background:var(--nx-primary-soft)}.nx-ownership-switch>button.active>span{background:var(--nx-primary);color:#fff}.nx-task-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.nx-task-toolbar>*{flex:0 1 auto;min-width:0}.nx-task-search{flex:1 1 230px}.nx-task-search,.nx-sort{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius);min-height:40px;display:flex;align-items:center;gap:8px;padding:0 10px}.nx-task-search input,.nx-sort select{border:0;outline:0;background:transparent;color:var(--nx-text);min-width:0;width:100%;height:38px}.nx-sort span{font-size:0.7812rem;color:var(--nx-muted);white-space:nowrap}.nx-sort select{font-size:0.8125rem}.nx-filter-strip{display:flex;align-items:center;gap:8px;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin;padding:1px 1px 4px}.nx-filter-strip>button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius-pill);min-height:32px;padding:4px 8px 4px 10px;display:flex;align-items:center;gap:8px;white-space:nowrap;cursor:pointer;font-size:0.8125rem}.nx-filter-strip>button b{min-width:20px;height:20px;border-radius:var(--nx-radius-pill);background:var(--nx-surface-2);display:grid;place-items:center;font-size:0.75rem}.nx-filter-strip>button.active{background:var(--nx-primary-soft);border-color:color-mix(in srgb,var(--nx-primary) 45%,var(--nx-border));color:var(--nx-primary-strong);font-weight:600}.nx-filter-strip>button.active b{background:var(--nx-primary);color:#fff}.nx-task-workspace{width:min(640px,calc(100vw - 24px))}.nx-task-workspace-body{display:grid;gap:8px}.nx-task-summary,.nx-workspace-section,.nx-action-reason{border:1px solid var(--nx-border);border-radius:11px;background:var(--nx-surface-2);padding:10px}.nx-task-summary-head{display:flex;align-items:flex-start;gap:8px}.nx-task-summary-head>div{display:grid;min-width:0;flex:1}.nx-task-summary h3{font-size:1.0rem;line-height:1.35;margin:1px 0 0}.nx-task-summary>p{margin:8px 0 0;color:var(--nx-muted);font-size:0.8125rem;white-space:pre-wrap}.nx-muted{color:var(--nx-muted)!important}.nx-detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:9px}.nx-detail-grid>div{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:8px;padding:6px;display:grid;gap:4px;min-width:0}.nx-detail-grid span,.nx-workspace-compact-facts span{font-size:0.75rem;color:var(--nx-muted)}.nx-detail-grid strong,.nx-workspace-compact-facts strong{font-size:0.7812rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-workspace-section>header{display:flex;align-items:center;gap:8px;margin-bottom:7px}.nx-workspace-section h4{margin:0;font-size:0.8125rem;flex:1}.nx-person-list{display:flex;gap:4px;flex-wrap:wrap}.nx-person-chip{border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);padding:6px 8px;display:grid;gap:var(--nx-s-hair);min-width:130px;max-width:220px}.nx-person-chip span{font-size:0.8125rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-person-chip small{font-size:0.75rem;color:var(--nx-muted)}.nx-checklist-readonly,.nx-approval-steps{display:grid;gap:4px}.nx-check-item,.nx-approval-step{display:grid;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:8px;border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface);padding:6px 7px}.nx-check-item>span,.nx-approval-step>span{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--nx-surface-2);font-size:0.7812rem}.nx-check-item>div,.nx-approval-step>div{display:grid;min-width:0}.nx-check-item strong,.nx-approval-step strong{font-size:0.7812rem}.nx-check-item small,.nx-approval-step small{font-size:0.75rem;color:var(--nx-muted)}.nx-check-item.done strong{text-decoration:line-through;color:var(--nx-muted)}.nx-approval-step>.nx-badge{font-size:0.75rem;min-height:20px}.nx-workspace-compact-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.nx-workspace-compact-facts>div{display:grid;gap:var(--nx-s-hair)}.nx-task-workspace-actions{width:100%;display:grid;gap:8px}.nx-assignment-response,.nx-workflow-actions{display:flex;gap:8px;flex-wrap:wrap}.nx-assignment-response .nx-button{flex:1}.nx-action-reason label{display:grid;gap:4px;font-size:0.8125rem}.nx-action-reason textarea{width:100%;min-height:72px;resize:vertical;border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface);color:var(--nx-text);padding:8px}.nx-task-workspace .nx-state{min-height:72px;padding:10px}.nx-task-workspace .nx-empty-icon{font-size:1.125rem}
@media(max-width:1240px){.nx-task-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:767px){.nx-task-heading p:not(.nx-eyebrow){display:none}.nx-ownership-switch{gap:8px}.nx-ownership-switch>button{min-height:58px;padding:8px;grid-template-columns:30px minmax(0,1fr) auto;gap:8px}.nx-ownership-switch>button>span{width:30px;height:30px}.nx-ownership-switch strong{font-size:0.8125rem}.nx-ownership-switch small{font-size:0.75rem}.nx-ownership-switch b{font-size:1.0625rem}.nx-task-search{flex:1 1 100%}.nx-task-search,.nx-sort{padding:0 8px}.nx-sort span{display:none}.nx-filter-strip{margin-inline:-10px;padding-inline:10px}.nx-task-grid{grid-template-columns:1fr;gap:8px}.nx-task-card-facts{grid-template-columns:1fr}.nx-task-card-footer{font-size:0.75rem}.nx-task-workspace-layer{inset:0}.nx-task-workspace{width:100%;max-height:var(--next-visual-height,100dvh)}.nx-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-workspace-compact-facts{grid-template-columns:repeat(4,minmax(0,1fr))}.nx-task-workspace .nx-overlay-body{padding:8px}.nx-task-workspace .nx-overlay-footer{padding:7px 8px calc(7px + var(--nx-safe-bottom))}.nx-workflow-actions{overflow-x:auto;flex-wrap:nowrap;padding-bottom:1px}.nx-workflow-actions .nx-button{white-space:nowrap;flex:0 0 auto;min-height:36px}.nx-person-chip{min-width:calc(50% - 3px);max-width:calc(50% - 3px)}}
@media(max-width:390px){.nx-ownership-switch{grid-template-columns:1fr 1fr}.nx-ownership-switch small{display:none}.nx-task-toolbar{grid-template-columns:1fr}.nx-sort span{display:inline}.nx-workspace-compact-facts{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-person-chip{min-width:100%;max-width:100%}}
/* Keep every primary task filter visible; no horizontally hidden mobile controls. */
.nx-filter-strip{flex-wrap:wrap;overflow:visible;scrollbar-width:none}.nx-filter-strip>button{flex:0 0 auto}
@media(max-width:767px){.nx-filter-strip{margin-inline:0;padding-inline:0}.nx-filter-strip>button{min-height:30px;padding:3px 7px;font-size:0.7812rem}}

/* Phase 2C — React task creation workspace. */
.nx-heading-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.nx-compact-create{min-height:32px;border:1px solid var(--nx-primary);border-radius:9px;background:var(--nx-primary);color:#fff;padding:4px 10px;font-weight:600;cursor:pointer}.nx-task-create{width:min(1120px,calc(100vw - 24px));max-height:calc(var(--next-visual-height,100dvh) - 20px)}.nx-task-create .nx-overlay-header{min-height:52px}.nx-task-create .nx-overlay-body{padding:10px;background:var(--nx-bg)}.nx-task-create .nx-overlay-footer{padding:8px 10px calc(8px + var(--nx-safe-bottom))}.nx-create-workspace{display:grid;gap:8px;min-width:0}.nx-create-topline{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--nx-surface);border:1px solid var(--nx-border);border-radius:var(--nx-radius);padding:7px}/* Koyu hap segment (r153). Kullanicinin arayuzde begendigini soyledigi tek
   parca buydu: dolu koyu zemin, secili olan beyaz. */
.nx-segmented{display:inline-flex;align-items:center;gap:2px;padding:3px;border:0;background:var(--nx-pill);border-radius:var(--nx-radius-pill);min-width:0}.nx-segmented>button{border:0;background:transparent;border-radius:var(--nx-radius-pill);min-height:30px;padding:4px 13px;cursor:pointer;font-size:0.8125rem;font-weight:700;color:var(--nx-pill-text);white-space:nowrap}.nx-segmented>button.active{background:var(--nx-pill-active);color:#0B1F31;box-shadow:none}.nx-create-type{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.nx-create-type label,.nx-mini-check{display:inline-flex;align-items:center;gap:4px;font-size:0.7812rem;color:var(--nx-muted);cursor:pointer}.nx-create-type input,.nx-mini-check input{margin:0}.nx-source-link-banner{display:grid;grid-template-columns:28px minmax(0,1fr) 28px;align-items:center;gap:8px;border:1px solid color-mix(in srgb,var(--nx-primary) 34%,var(--nx-border));background:var(--nx-primary-soft);border-radius:var(--nx-radius);padding:7px 9px}.nx-source-link-banner>span{width:28px;height:28px;border-radius:8px;background:var(--nx-primary);color:#fff;display:grid;place-items:center;font-size:1.0625rem}.nx-source-link-banner>div{display:grid;min-width:0}.nx-source-link-banner strong{font-size:0.8125rem}.nx-source-link-banner small{font-size:0.75rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-source-link-banner>button,.nx-small-danger{border:0;background:transparent;color:var(--nx-danger);cursor:pointer;font-weight:700;font-size:1.0625rem;min-width:28px;min-height:28px;border-radius:7px}.nx-small-danger:hover{background:color-mix(in srgb,var(--nx-danger) 8%,transparent)}.nx-create-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:8px;align-items:start;min-width:0}.nx-create-main,.nx-create-side{display:grid;gap:8px;min-width:0}.nx-create-side{position:sticky;top:0}.nx-create-section{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius);padding:10px;display:grid;gap:8px;min-width:0}.nx-create-section>header{display:flex;align-items:center;gap:8px;min-width:0}.nx-create-section>header>div{display:grid;min-width:0;flex:1}.nx-create-section h3{margin:0;font-size:0.8125rem}.nx-create-section header small{font-size:0.75rem;color:var(--nx-muted);line-height:1.35}.nx-create-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-field{display:grid;gap:4px;min-width:0}.nx-field-wide{grid-column:1/-1}.nx-field>span{font-size:0.75rem;color:var(--nx-muted);font-weight:700}.nx-field input,.nx-field select,.nx-create-section>textarea,.nx-create-section>input[type=file],.nx-create-add-row select,.nx-create-person select,.nx-create-point input,.nx-create-point select,.nx-create-approval-row input,.nx-create-approval-row select,.nx-approval-builder>select{width:100%;min-width:0;min-height:37px;border:1px solid var(--nx-border);border-radius:var(--nx-design-control-radius);background:var(--nx-surface);color:var(--nx-text);padding:6px 8px}.nx-field textarea,.nx-create-section>textarea{width:100%;min-height:68px;max-height:180px;resize:vertical;border:1px solid var(--nx-border);border-radius:var(--nx-design-control-radius);background:var(--nx-surface);color:var(--nx-text);padding:7px 8px}.nx-create-add-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.nx-create-participants,.nx-create-list{display:grid;gap:4px}.nx-create-person{display:grid;grid-template-columns:minmax(130px,1fr) minmax(130px,180px) auto 32px;align-items:center;gap:8px;border:1px solid var(--nx-border);border-radius:var(--nx-radius-sm);background:var(--nx-surface-2);padding:6px}.nx-create-person strong{font-size:0.7812rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-create-person select{min-height:32px;font-size:0.7812rem}.nx-create-point{display:grid;grid-template-columns:24px minmax(180px,1fr) minmax(140px,190px) auto 32px;align-items:center;gap:8px;border:1px solid var(--nx-border);border-radius:var(--nx-radius-sm);background:var(--nx-surface-2);padding:6px}.nx-create-point>span,.nx-create-approval-row>span{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--nx-surface);border:1px solid var(--nx-border);font-size:0.75rem}.nx-create-point input,.nx-create-point select,.nx-create-approval-row input,.nx-create-approval-row select{min-height:32px;font-size:0.7812rem}.nx-toggle{position:relative;width:38px;height:22px;flex:0 0 auto;cursor:pointer}.nx-toggle input{position:absolute;opacity:0;pointer-events:none}.nx-toggle span{display:block;width:100%;height:100%;border-radius:var(--nx-radius-pill);background:var(--nx-border);position:relative}.nx-toggle span::after{content:"";position:absolute;width:16px;height:16px;inset-block-start:3px;inset-inline-start:3px;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.2);transition:var(--nx-dur-micro) var(--nx-ease-standard)}.nx-toggle input:checked+span{background:var(--nx-primary)}.nx-toggle input:checked+span::after{inset-inline-start:19px}.nx-approval-builder{display:grid;gap:8px}.nx-create-approval-row{display:grid;grid-template-columns:24px minmax(160px,1fr) minmax(180px,1fr) 32px;align-items:center;gap:8px;border:1px solid var(--nx-border);border-radius:var(--nx-radius-sm);background:var(--nx-surface-2);padding:6px}.nx-approval-preview{display:grid;gap:4px}.nx-approval-preview>span{display:grid;grid-template-columns:22px minmax(0,1fr);align-items:center;gap:8px;border:1px solid var(--nx-border);border-radius:8px;padding:5px 7px;background:var(--nx-surface-2);font-size:0.7812rem}.nx-approval-preview b{width:22px;height:22px;border-radius:50%;background:var(--nx-primary-soft);color:var(--nx-primary-strong);display:grid;place-items:center}.nx-next-task-box{border-top:1px solid var(--nx-border);padding-top:8px;display:grid;gap:8px}.nx-file-summary{display:flex;gap:4px;flex-wrap:wrap}.nx-file-summary span{max-width:100%;border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:var(--nx-radius-pill);padding:3px 7px;font-size:0.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-create-footer{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}.nx-create-footer-summary{display:flex;align-items:center;gap:4px;flex-wrap:wrap;min-width:0}.nx-create-footer-summary span{font-size:0.75rem;color:var(--nx-muted);border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:var(--nx-radius-pill);padding:3px 6px}.nx-create-footer-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}.nx-create-footer-actions .nx-button{min-width:138px}.nx-create-approval[data-enabled="true"]{border-color:color-mix(in srgb,var(--nx-primary) 38%,var(--nx-border));box-shadow:inset 3px 0 0 var(--nx-primary)}[dir="rtl"] .nx-create-approval[data-enabled="true"]{box-shadow:inset -3px 0 0 var(--nx-primary)}
@media(max-width:980px){.nx-task-create{width:min(850px,calc(100vw - 20px))}.nx-create-layout{grid-template-columns:minmax(0,1fr) 250px}.nx-create-person{grid-template-columns:minmax(110px,1fr) minmax(115px,150px) auto 30px}.nx-create-point{grid-template-columns:24px minmax(130px,1fr) minmax(110px,150px) auto 30px}.nx-create-approval-row{grid-template-columns:24px minmax(130px,1fr) minmax(140px,1fr) 30px}}
@media(max-width:767px){.nx-heading-actions .nx-button:not(.nx-button-primary){display:none}.nx-task-create-layer{inset:0}.nx-task-create{inset:0!important;left:0!important;top:0!important;transform:none!important;width:100%!important;max-height:var(--next-visual-height,100dvh)!important;border-radius:0!important;border:0}.nx-task-create .nx-overlay-header{min-height:50px;padding:7px 9px}.nx-task-create .nx-overlay-body{padding:7px}.nx-task-create .nx-overlay-footer{padding:7px 8px calc(7px + var(--nx-safe-bottom))}.nx-create-topline{align-items:stretch;flex-direction:column}.nx-create-type{justify-content:space-between;padding-inline:3px}.nx-create-layout{grid-template-columns:1fr;gap:8px}.nx-create-side{position:static;grid-row:auto}.nx-create-section{padding:8px;gap:8px}.nx-create-grid{grid-template-columns:1fr 1fr}.nx-create-person{grid-template-columns:minmax(0,1fr) 120px 30px}.nx-create-person .nx-mini-check{grid-column:1/3}.nx-create-point{grid-template-columns:22px minmax(0,1fr) 30px}.nx-create-point select{grid-column:2/3}.nx-create-point .nx-mini-check{grid-column:2/3}.nx-create-approval-row{grid-template-columns:22px minmax(0,1fr) 30px}.nx-create-approval-row select{grid-column:2/3}.nx-create-footer{display:grid;gap:4px}.nx-create-footer-summary{display:none}.nx-create-footer-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}.nx-create-footer-actions .nx-button{min-width:0;min-height:42px;white-space:normal;line-height:1.15;padding:5px 7px}.nx-create-section>textarea,.nx-field textarea{min-height:64px}.nx-task-create input,.nx-task-create select,.nx-task-create textarea{font-size:16px}.nx-task-create .nx-field>span,.nx-task-create header small,.nx-task-create .nx-mini-check{font-size:0.7812rem}}
@media(max-width:390px){.nx-create-grid{grid-template-columns:1fr}.nx-create-type{gap:8px}.nx-create-person{grid-template-columns:minmax(0,1fr) 30px}.nx-create-person select{grid-column:1/2}.nx-create-person .nx-mini-check{grid-column:1/2}.nx-create-point{grid-template-columns:22px minmax(0,1fr) 30px}.nx-create-approval-row{grid-template-columns:22px minmax(0,1fr) 30px}.nx-create-footer-actions{grid-template-columns:1fr 1fr}}
/* React 16 compatibility wrappers used instead of JSX fragments. */
.nx-create-fragment{display:grid;gap:8px;min-width:0}
.nx-create-grid-contents{display:contents}
.nx-create-side-fields,.nx-create-side-advanced{display:grid;gap:12px;min-width:0}

/* Phase 2D — unified React task editing workspace. Natural-height cards, one scroller, no filler space. */
.nx-task-workspace-v2{width:min(1240px,calc(100vw - 24px));max-height:calc(var(--next-visual-height,100dvh) - 20px)}
.nx-task-workspace-v2 .nx-overlay-header{min-height:50px;padding:7px 10px}
.nx-task-workspace-v2 .nx-overlay-body{padding:9px;background:var(--nx-bg);overflow-y:auto;overflow-x:hidden;min-height:0;overscroll-behavior:contain}
.nx-task-workspace-v2 .nx-overlay-footer{padding:7px 9px calc(7px + var(--nx-safe-bottom));background:var(--nx-surface)}
.nx-task-workspace-v2-body{display:grid;gap:8px;min-width:0;align-content:start}
.nx-task-summary-v2{border:1px solid var(--nx-border);border-radius:11px;background:var(--nx-surface);padding:8px 10px;min-width:0}
.nx-task-summary-v2 .nx-task-summary-head{display:flex;align-items:center;gap:12px}
.nx-task-summary-v2 .nx-task-summary-head>div:first-child{display:grid;gap:var(--nx-s-hair);min-width:0;flex:1}
.nx-task-summary-v2 .nx-task-summary-head>div:last-child{display:flex;align-items:center;gap:4px;flex:0 0 auto}
.nx-task-summary-v2 h3{margin:0;font-size:0.875rem;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-task-summary-v2 small{font-size:0.75rem;color:var(--nx-muted)}
.nx-workspace-tabs{display:flex;align-items:center;gap:4px;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface);padding:3px;position:sticky;top:-9px;z-index:4}
.nx-workspace-tabs>button{border:0;background:transparent;color:var(--nx-muted);border-radius:7px;min-height:31px;padding:4px 10px;white-space:nowrap;cursor:pointer;font-size:0.7812rem;font-weight:750}
.nx-workspace-tabs>button.active{background:var(--nx-primary-soft);color:var(--nx-primary-strong)}
.nx-task-workspace-grid{display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:8px;align-items:start;min-width:0;direction:ltr}
.nx-task-workspace-grid>main{grid-column:1;min-width:0;display:grid;gap:8px;direction:ltr}
.nx-task-workspace-grid>aside{grid-column:2;min-width:0;display:grid;gap:8px;direction:ltr;position:sticky;top:36px}
[dir="rtl"] .nx-task-workspace-grid>main,[dir="rtl"] .nx-task-workspace-grid>aside{direction:rtl}
.nx-workspace-tab-body,.nx-settings-stack{display:grid;gap:8px;min-width:0;align-content:start}
.nx-workspace-card,.nx-action-reason{border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface);padding:9px;display:grid;gap:8px;min-width:0;height:auto;min-height:0;align-content:start}
.nx-section-head{display:flex;align-items:center;gap:8px;min-width:0;margin:0}
.nx-section-head>div{display:grid;gap:var(--nx-s-hair);min-width:0;flex:1}
.nx-section-head h4,.nx-workspace-card h4,.nx-workspace-card h5{margin:0;font-size:0.8125rem}
.nx-section-head small{font-size:0.75rem;color:var(--nx-muted);line-height:1.35}
.nx-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;min-width:0}
.nx-task-workspace-v2 .nx-field{display:grid;gap:4px;min-width:0}
.nx-task-workspace-v2 .nx-field>span{font-size:0.75rem;color:var(--nx-muted);font-weight:700}
.nx-task-workspace-v2 input:not([type="checkbox"]):not([type="radio"]),.nx-task-workspace-v2 select,.nx-task-workspace-v2 textarea{width:100%;min-width:0;border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface);color:var(--nx-text);padding:6px 8px}
.nx-task-workspace-v2 input:not([type="checkbox"]):not([type="radio"]),.nx-task-workspace-v2 select{min-height:36px}
.nx-task-workspace-v2 textarea{min-height:62px;max-height:190px;resize:vertical}
.nx-workspace-editor-head textarea{min-height:72px}
.nx-person-list{display:flex;gap:4px;flex-wrap:wrap}
.nx-task-workspace-v2 .nx-person-chip{min-width:130px;max-width:240px;padding:5px 7px}
.nx-participant-editor-list{display:grid;gap:4px}
.nx-participant-editor-row{display:grid;grid-template-columns:minmax(140px,1fr) minmax(120px,155px) auto auto 30px;gap:4px;align-items:center;border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface-2);padding:5px;min-width:0}
.nx-participant-editor-row>div:first-child{display:grid;min-width:0}
.nx-participant-editor-row strong{font-size:0.7812rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-participant-editor-row small{font-size:0.75rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-participant-editor-row select{min-height:32px!important;font-size:0.7812rem}
.nx-inline-actions,.nx-point-actions,.nx-approval-decision-actions{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.nx-inline-actions .nx-button,.nx-point-actions .nx-button,.nx-approval-decision-actions .nx-button{min-height:31px;padding:3px 8px;font-size:0.7812rem}
.nx-create-add-row,.nx-new-point-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(150px,210px) auto auto;gap:8px;align-items:center;min-width:0}
.nx-point-editor-list{display:grid;gap:4px;min-width:0}
.nx-point-editor-row{display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:8px;align-items:start;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface-2);padding:6px;min-width:0}
.nx-point-editor-row.done{opacity:.82}.nx-point-editor-row.done .nx-point-display>label span{text-decoration:line-through;color:var(--nx-muted)}
.nx-point-order{display:grid;justify-items:center;gap:4px}
.nx-point-order>span{width:24px;height:24px;border-radius:50%;border:1px solid var(--nx-border);background:var(--nx-surface);display:grid;place-items:center;font-size:0.75rem;font-weight:600}
.nx-point-order>div{display:flex;gap:4px}.nx-point-order button,.nx-point-actions button:not(.nx-button),.nx-approval-edit-row button,.nx-linked-task-chip>button,.nx-inline-editor header>button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius-sm);min-width:23px;min-height:23px;padding:0 4px;cursor:pointer}
.nx-point-main{display:grid;gap:4px;min-width:0}
.nx-point-display{display:grid;gap:4px;min-width:0}.nx-point-check{display:flex;align-items:flex-start;gap:8px;min-width:0;font-size:0.8125rem;font-weight:700}.nx-point-check input{margin-top:2px}.nx-point-check span{overflow-wrap:anywhere}.nx-point-display>small{font-size:0.75rem;color:var(--nx-muted)}
.nx-point-edit-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(145px,200px) auto;gap:4px;align-items:center;min-width:0}.nx-point-edit-grid .nx-inline-actions{grid-column:1/-1}
.nx-point-links{display:grid;gap:4px;border-top:1px dashed var(--nx-border);padding-top:5px}.nx-point-link-rule{display:flex;align-items:center;gap:4px;font-size:0.75rem;color:var(--nx-muted)}.nx-point-link-rule select{width:auto!important;min-height:28px!important;font-size:0.75rem}
.nx-linked-task-chip{display:grid;grid-template-columns:24px minmax(0,1fr) auto 25px;gap:8px;align-items:center;border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:8px;padding:5px;min-width:0}.nx-linked-task-chip>span{width:24px;height:24px;border-radius:7px;background:var(--nx-primary-soft);color:var(--nx-primary-strong);display:grid;place-items:center}.nx-linked-task-chip>div{display:grid;min-width:0}.nx-linked-task-chip strong{font-size:0.7812rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-linked-task-chip small{font-size:0.75rem;color:var(--nx-muted)}
.nx-point-actions{justify-content:flex-end;max-width:245px}.nx-point-actions .nx-button{white-space:nowrap}
.nx-inline-editor{border-color:color-mix(in srgb,var(--nx-primary) 35%,var(--nx-border));background:color-mix(in srgb,var(--nx-primary-soft) 42%,var(--nx-surface))}
.nx-dependency-list,.nx-comment-list,.nx-file-list,.nx-approval-current,.nx-history-list,.nx-timeline{display:grid;gap:4px}
.nx-dependency-row,.nx-file-row,.nx-comment-list>article,.nx-history-list>div,.nx-timeline-item{border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface-2);padding:6px 7px;min-width:0}
.nx-dependency-row,.nx-file-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px}.nx-dependency-row>div,.nx-file-row>div{display:grid;min-width:0}.nx-dependency-row strong,.nx-file-row strong{font-size:0.7812rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-dependency-row small,.nx-file-row small{font-size:0.75rem;color:var(--nx-muted)}
.nx-dependency-add{display:grid;grid-template-columns:minmax(180px,1fr) 120px 120px 90px auto;gap:4px;align-items:end}
.nx-comment-list>article{display:grid;gap:4px}.nx-comment-list header{display:flex;gap:8px;align-items:center}.nx-comment-list header strong{font-size:0.7812rem}.nx-comment-list header time{margin-inline-start:auto;font-size:0.75rem;color:var(--nx-muted)}.nx-comment-list p{font-size:0.8125rem;white-space:pre-wrap;overflow-wrap:anywhere;margin:2px 0}.nx-comment-list footer{display:flex;align-items:center;gap:8px;color:var(--nx-muted);font-size:0.75rem}
.nx-comment-composer{display:grid;gap:8px;border-top:1px solid var(--nx-border);padding-top:7px}.nx-comment-composer>div,.nx-file-uploader{display:grid;grid-template-columns:minmax(130px,190px) minmax(0,1fr) auto;gap:8px;align-items:center}
.nx-file-uploader input[type=file]{padding:5px;min-height:36px}.nx-file-row .nx-inline-actions{justify-content:flex-end}
.nx-approval-step{grid-template-columns:24px minmax(0,1fr) auto auto;padding:6px}.nx-approval-step>div:nth-child(2){display:grid;min-width:0}.nx-approval-step strong{font-size:0.7812rem}.nx-approval-step small{font-size:0.75rem;color:var(--nx-muted)}
.nx-approval-editor{display:grid;gap:4px;border-top:1px solid var(--nx-border);padding-top:7px}.nx-approval-edit-row{display:grid;grid-template-columns:24px minmax(130px,1fr) minmax(150px,1fr) auto;gap:4px;align-items:center;background:var(--nx-surface-2);border:1px solid var(--nx-border);padding:5px;border-radius:8px}.nx-approval-edit-row>span{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--nx-surface);border:1px solid var(--nx-border);font-size:0.75rem}.nx-approval-edit-row>div{display:flex;gap:4px}
.nx-decision-panel{border-color:color-mix(in srgb,var(--nx-warning) 35%,var(--nx-border))}.nx-history-list>div,.nx-timeline-item{display:grid;grid-template-columns:24px minmax(0,1fr);gap:8px;align-items:start}.nx-history-list>div>span,.nx-timeline-item>span{width:20px;height:20px;border-radius:50%;background:var(--nx-primary-soft);color:var(--nx-primary-strong);display:grid;place-items:center;font-size:0.75rem}.nx-history-list>div>div,.nx-timeline-item>div{display:grid;min-width:0}.nx-history-list strong,.nx-timeline-item strong{font-size:0.7812rem}.nx-history-list small,.nx-timeline-item small{font-size:0.75rem;color:var(--nx-muted);overflow-wrap:anywhere}
.nx-task-workspace-actions-v2{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}.nx-workspace-save-state{display:flex;align-items:center;gap:8px;min-width:0}.nx-workspace-save-state>span{font-size:0.75rem;color:var(--nx-danger);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:380px}.nx-workspace-footer-buttons{display:flex;align-items:center;justify-content:flex-end;gap:4px;min-width:0;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin}.nx-workspace-footer-buttons>.nx-button,.nx-workspace-footer-buttons .nx-assignment-response>.nx-button{white-space:nowrap;min-height:34px;padding:3px 9px;font-size:0.7812rem;flex:0 0 auto}.nx-workspace-footer-buttons .nx-assignment-response{display:flex;gap:4px;flex:0 0 auto}
.nx-workspace-confirm-layer{position:absolute;inset:0;z-index:12;background:rgba(15,23,34,.42);display:grid;place-items:center;padding:14px}.nx-workspace-confirm{width:min(440px,100%);border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:12px;box-shadow:var(--nx-shadow);padding:14px;display:grid;gap:8px}.nx-workspace-confirm strong{font-size:0.875rem}.nx-workspace-confirm p{margin:0;color:var(--nx-muted);font-size:0.8125rem}.nx-workspace-confirm>div{display:flex;gap:8px;flex-wrap:wrap}.nx-action-reason{border-color:color-mix(in srgb,var(--nx-warning) 38%,var(--nx-border));background:color-mix(in srgb,#fff4dd 28%,var(--nx-surface))}
@media(max-width:1050px){.nx-task-workspace-v2{width:min(1000px,calc(100vw - 18px))}.nx-task-workspace-grid{grid-template-columns:minmax(0,1fr) 300px}.nx-participant-editor-row{grid-template-columns:minmax(110px,1fr) 120px auto 30px}.nx-participant-editor-row .nx-mini-check{grid-column:1/3}.nx-dependency-add{grid-template-columns:minmax(150px,1fr) 110px 110px}.nx-dependency-add .nx-field:nth-child(4){grid-column:1/2}.nx-dependency-add>.nx-button{align-self:end}}
@media(max-width:767px){.nx-task-workspace-v2{inset:0!important;left:0!important;top:0!important;transform:none!important;width:100%!important;max-height:var(--next-visual-height,100dvh)!important;border-radius:0!important;border:0}.nx-task-workspace-v2 .nx-overlay-header{min-height:48px;padding:6px 8px}.nx-task-workspace-v2 .nx-overlay-body{padding:6px}.nx-task-workspace-v2 .nx-overlay-footer{padding:6px 7px calc(6px + var(--nx-safe-bottom))}.nx-task-workspace-v2-body{gap:8px}.nx-task-summary-v2{padding:6px 8px}.nx-task-summary-v2 h3{font-size:0.8125rem}.nx-workspace-tabs{top:-6px;border-radius:8px}.nx-workspace-tabs>button{min-height:30px;padding:4px 8px;font-size:0.7812rem}.nx-task-workspace-grid,.nx-task-workspace-grid.mobile{display:block;direction:inherit}.nx-task-workspace-grid>main{display:grid;direction:inherit;gap:8px}.nx-task-workspace-grid>aside{display:none}.nx-workspace-tab-body,.nx-settings-stack{gap:8px}.nx-workspace-card,.nx-action-reason{padding:7px;gap:8px;border-radius:9px}.nx-form-grid{grid-template-columns:1fr 1fr;gap:8px}.nx-task-workspace-v2 input:not([type="checkbox"]):not([type="radio"]),.nx-task-workspace-v2 select,.nx-task-workspace-v2 textarea{font-size:16px}.nx-task-workspace-v2 input:not([type="checkbox"]):not([type="radio"]),.nx-task-workspace-v2 select{min-height:40px}.nx-task-workspace-v2 textarea{min-height:70px}.nx-participant-editor-row{grid-template-columns:minmax(0,1fr) 122px 30px;gap:4px}.nx-participant-editor-row .nx-mini-check{grid-column:1/3}.nx-participant-editor-row>button{grid-column:3}.nx-create-add-row,.nx-new-point-row{grid-template-columns:minmax(0,1fr) 110px;gap:4px}.nx-create-add-row>.nx-button,.nx-new-point-row>.nx-button{min-height:40px}.nx-new-point-row .nx-mini-check{grid-column:1/2}.nx-point-editor-row{grid-template-columns:32px minmax(0,1fr);gap:4px;padding:5px}.nx-point-order>div{display:grid}.nx-point-main{min-width:0}.nx-point-actions{grid-column:1/-1;max-width:none;justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap;padding-bottom:1px}.nx-point-actions .nx-button{flex:0 0 auto;white-space:nowrap;min-height:34px}.nx-point-edit-grid{grid-template-columns:1fr}.nx-point-edit-grid .nx-mini-check{justify-self:start}.nx-linked-task-chip{grid-template-columns:22px minmax(0,1fr) auto 24px}.nx-dependency-add{grid-template-columns:1fr 1fr}.nx-dependency-add .nx-field:first-child{grid-column:1/-1}.nx-dependency-add>.nx-button{grid-column:1/-1}.nx-comment-composer>div,.nx-file-uploader{grid-template-columns:1fr 1fr}.nx-comment-composer>div>.nx-button,.nx-file-uploader>.nx-button{grid-column:1/-1}.nx-approval-step{grid-template-columns:22px minmax(0,1fr) auto}.nx-approval-decision-actions{grid-column:2/-1}.nx-approval-edit-row{grid-template-columns:22px minmax(0,1fr) 30px}.nx-approval-edit-row select{grid-column:2/3}.nx-approval-edit-row>div{grid-column:3;grid-row:1/3;display:grid}.nx-task-workspace-actions-v2{display:grid;gap:4px}.nx-workspace-save-state{min-height:20px}.nx-workspace-save-state>span{max-width:100%;white-space:normal;line-height:1.2}.nx-workspace-footer-buttons{justify-content:flex-start;width:100%;padding-bottom:1px}.nx-workspace-footer-buttons>.nx-button,.nx-workspace-footer-buttons .nx-assignment-response>.nx-button{min-height:39px;font-size:0.8125rem}.nx-workspace-confirm-layer{position:fixed;padding:10px 10px calc(10px + var(--nx-safe-bottom))}.nx-workspace-confirm>div{display:grid;grid-template-columns:1fr}.nx-workspace-confirm .nx-button{min-height:42px}}
@media(max-width:390px){.nx-form-grid{grid-template-columns:1fr}.nx-field-wide{grid-column:auto}.nx-participant-editor-row{grid-template-columns:minmax(0,1fr) 30px}.nx-participant-editor-row select,.nx-participant-editor-row .nx-mini-check{grid-column:1/2}.nx-create-add-row,.nx-new-point-row{grid-template-columns:1fr}.nx-new-point-row .nx-mini-check{grid-column:auto}.nx-dependency-add{grid-template-columns:1fr}.nx-dependency-add .nx-field:first-child,.nx-dependency-add>.nx-button{grid-column:auto}.nx-comment-composer>div,.nx-file-uploader{grid-template-columns:1fr}.nx-comment-composer>div>.nx-button,.nx-file-uploader>.nx-button{grid-column:auto}.nx-task-summary-v2 .nx-task-summary-head>div:last-child{align-self:flex-start}}

/* Phase 2E — supporting React modules. Compact, content-sized and shared across desktop/mobile. */
body{font-size:var(--nx-user-font-size,14px)}
:root[data-motion="off"] *, :root[data-motion="off"] *::before, :root[data-motion="off"] *::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
:root[data-density="compact"] .nx-panel{padding:10px}:root[data-density="compact"] .nx-page{gap:12px}:root[data-density="compact"] .nx-task-card{padding:8px}:root[data-density="compact"] .nx-button{min-height:34px}
.nx-heading-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nx-module-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start;min-width:0}.nx-help-note{display:block;color:var(--nx-muted);font-size:0.7812rem;line-height:1.4;margin-top:7px}.nx-inline-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nx-form-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.nx-form-grid label,.nx-settings-form label{display:grid;gap:4px;min-width:0}.nx-form-grid label>span,.nx-settings-form label>span{font-size:0.7812rem;color:var(--nx-muted);font-weight:700}.nx-form-grid input,.nx-form-grid select,.nx-form-grid textarea,.nx-settings-form input,.nx-settings-form select{width:100%;min-width:0;min-height:38px;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);color:var(--nx-text);padding:6px 8px}.nx-form-grid textarea{resize:vertical}.nx-form-span{grid-column:1/-1}
.nx-search-panel{display:grid;gap:8px}.nx-search-bar{display:grid;grid-template-columns:minmax(220px,1fr) minmax(140px,190px) auto;gap:8px}.nx-search-bar input,.nx-search-bar select,.nx-search-scope select,.nx-dashboard-picker select{min-width:0;min-height:39px;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);color:var(--nx-text);padding:6px 9px}.nx-search-scope{display:grid;grid-template-columns:repeat(2,minmax(160px,240px));gap:8px}.nx-search-filters{margin:0!important}.nx-search-results header>small{margin-inline-start:auto;color:var(--nx-muted)}.nx-result-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-result-card{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:var(--nx-radius);min-height:72px;padding:8px;display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:8px;text-align:start;cursor:pointer}.nx-result-card:hover{border-color:var(--nx-primary)}.nx-result-icon{width:34px;height:34px;border-radius:9px;background:var(--nx-primary-soft);color:var(--nx-primary-strong);display:grid;place-items:center;font-weight:700}.nx-result-copy{display:grid;gap:4px;min-width:0}.nx-result-copy strong,.nx-result-copy small,.nx-result-copy em{overflow:hidden;text-overflow:ellipsis}.nx-result-copy strong{white-space:nowrap;font-size:0.8125rem}.nx-result-copy small{font-size:0.7812rem;color:var(--nx-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.nx-result-copy em{font-size:0.75rem;color:var(--nx-muted);font-style:normal;white-space:nowrap}.nx-pagination{display:flex;align-items:center;justify-content:center;gap:12px;padding-top:9px;border-top:1px solid var(--nx-border);margin-top:9px}.nx-pagination span{font-size:0.8125rem;color:var(--nx-muted)}
.nx-attendance-command-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(280px,.8fr);gap:12px;align-items:start}.nx-today-attendance,.nx-shift-card{min-height:0}.nx-attendance-times{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:9px}.nx-attendance-times>div{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:9px;padding:8px;display:grid;gap:4px}.nx-attendance-times span{font-size:0.75rem;color:var(--nx-muted)}.nx-attendance-times strong{font-size:0.9375rem}.nx-compact-facts{display:flex;gap:8px;flex-wrap:wrap}.nx-compact-facts span{border:1px solid var(--nx-border);border-radius:var(--nx-radius-pill);padding:4px 7px;background:var(--nx-surface-2);font-size:0.7812rem}.nx-leave-form{display:grid;gap:8px}.nx-record-list{display:grid;gap:4px}.nx-record-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;border-bottom:1px solid var(--nx-border);padding:7px 2px}.nx-record-row:last-child{border-bottom:0}.nx-record-row>span{display:grid;min-width:0}.nx-record-row strong{font-size:0.8125rem}.nx-record-row small{font-size:0.75rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-record-metrics{display:flex!important;align-items:center;gap:4px}.nx-record-metrics b{font-size:0.8125rem}.nx-record-metrics em{font-style:normal;font-size:0.75rem;color:var(--nx-warning)}
.nx-metric-grid{display:grid;grid-template-columns:repeat(6,minmax(120px,1fr));gap:8px}.nx-metric-card{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:11px;padding:10px;display:grid;gap:4px;min-height:70px}.nx-metric-card span{font-size:0.7812rem;color:var(--nx-muted)}.nx-metric-card strong{font-size:1.4375rem}.nx-metric-card.warning{border-color:color-mix(in srgb,var(--nx-warning) 30%,var(--nx-border))}.nx-metric-card.danger{border-color:color-mix(in srgb,var(--nx-danger) 30%,var(--nx-border))}.nx-metric-card.info{border-color:color-mix(in srgb,var(--nx-info) 30%,var(--nx-border))}.nx-metric-card.success{border-color:#b9e4cd}.nx-custom-dashboard-section{display:grid;gap:8px}.nx-custom-dashboard-section header>div,.nx-panel header>div{display:grid;min-width:0}.nx-panel header>div>small{font-size:0.75rem;color:var(--nx-muted)}.nx-dashboard-picker{max-width:420px}.nx-custom-dashboard-data{display:grid;gap:8px}.nx-mini-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.nx-mini-metrics span{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:8px;padding:7px;font-size:0.7812rem;display:flex;justify-content:space-between;gap:8px}.nx-report-task-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-report-task-list button,.nx-management-task-list button{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:9px;padding:7px 8px;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:start;cursor:pointer}.nx-report-task-list button:hover,.nx-management-task-list button:hover{border-color:var(--nx-primary)}.nx-report-task-list button>span,.nx-management-task-list button>span{display:grid;min-width:0}.nx-report-task-list strong,.nx-management-task-list strong{font-size:0.8125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-report-task-list small,.nx-management-task-list small{font-size:0.75rem;color:var(--nx-muted)}.nx-report-table{overflow-x:auto}.nx-report-table-head,.nx-report-table-row{display:grid;grid-template-columns:minmax(180px,1.5fr) repeat(4,minmax(90px,.6fr));gap:8px;align-items:center;min-width:640px;padding:7px;border-bottom:1px solid var(--nx-border);font-size:0.7812rem}.nx-report-table-head{font-weight:600;color:var(--nx-muted);background:var(--nx-surface-2);border-radius:8px 8px 0 0}
.nx-management-metrics{grid-template-columns:repeat(5,minmax(120px,1fr))}.nx-department-health-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.nx-health-card{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:var(--nx-radius);padding:8px;display:grid;gap:8px}.nx-health-card>strong{font-size:0.8125rem}.nx-health-card>div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}.nx-health-card>div span{font-size:0.75rem;color:var(--nx-muted);display:flex;justify-content:space-between}.nx-health-card>div span.danger{color:var(--nx-danger)}.nx-health-card>small{font-size:0.75rem;color:var(--nx-muted)}.nx-management-task-list{display:grid;gap:4px}.nx-audit-list{display:grid;gap:4px}.nx-audit-list>div{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 2px;border-bottom:1px solid var(--nx-border)}.nx-audit-list>div:last-child{border-bottom:0}.nx-audit-list span{display:grid;min-width:0}.nx-audit-list strong{font-size:0.7812rem}.nx-audit-list small,.nx-audit-list time{font-size:0.75rem;color:var(--nx-muted)}
.nx-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-settings-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-settings-form label{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:9px;padding:7px}.nx-settings-form label input[type="range"]{padding:0;border:0;min-height:28px;background:transparent}.nx-settings-form label input[type="color"]{padding:2px;min-height:38px}.nx-settings-form label>b{font-size:0.75rem;color:var(--nx-muted);justify-self:end}.nx-setting-switch{grid-template-columns:minmax(0,1fr) auto!important;align-items:center}.nx-setting-switch input{width:18px!important;height:18px;min-height:18px!important}.nx-account-summary{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(150px,.5fr) auto;align-items:center;gap:8px}.nx-account-summary>span{display:grid;min-width:0}.nx-account-summary strong{font-size:0.8125rem}.nx-account-summary small{font-size:0.75rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-migration-note p{margin:0;color:var(--nx-muted);font-size:0.7812rem}
@media(max-width:1100px){.nx-metric-grid{grid-template-columns:repeat(3,minmax(120px,1fr))}.nx-department-health-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-search-results .nx-result-list{grid-template-columns:1fr}.nx-report-task-list{grid-template-columns:1fr}}
@media(max-width:767px){.nx-module-grid,.nx-settings-grid,.nx-attendance-command-grid{grid-template-columns:1fr}.nx-form-grid{grid-template-columns:1fr 1fr}.nx-search-bar{grid-template-columns:minmax(0,1fr) 110px}.nx-search-bar .nx-button{grid-column:1/-1}.nx-search-scope{grid-template-columns:1fr 1fr}.nx-result-list{grid-template-columns:1fr}.nx-result-card{grid-template-columns:32px minmax(0,1fr) auto;padding:7px}.nx-attendance-times{grid-template-columns:repeat(3,minmax(0,1fr))}.nx-metric-grid,.nx-management-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-department-health-grid{grid-template-columns:1fr}.nx-mini-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-settings-form{grid-template-columns:1fr}.nx-account-summary{grid-template-columns:minmax(0,1fr) auto}.nx-account-summary>span:nth-of-type(2){grid-column:1/-1}.nx-account-summary>.nx-button{grid-column:1/-1}.nx-page-heading{align-items:flex-start}.nx-heading-actions{justify-content:flex-end}.nx-search-page input,.nx-search-page select,.nx-attendance-page input,.nx-attendance-page select,.nx-attendance-page textarea,.nx-settings-page input,.nx-settings-page select{font-size:16px}}
@media(max-width:390px){.nx-form-grid,.nx-search-scope{grid-template-columns:1fr}.nx-attendance-times{grid-template-columns:1fr 1fr}.nx-attendance-times>div:last-child{grid-column:1/-1}.nx-metric-grid,.nx-management-metrics{grid-template-columns:1fr 1fr}.nx-record-row{grid-template-columns:minmax(0,1fr) auto}.nx-record-row>.nx-button{grid-column:1/-1}.nx-mini-metrics{grid-template-columns:1fr 1fr}.nx-result-card>.nx-badge{display:none}}
.nx-page,.nx-panel,.nx-panel>header,.nx-custom-dashboard-data,.nx-mini-metrics,.nx-report-task-list{min-width:0}.nx-dashboard-picker{width:min(420px,100%);max-width:100%;min-width:0}.nx-dashboard-picker select{width:100%}.nx-report-table{width:100%;max-width:100%;min-width:0;overflow-x:auto;overscroll-behavior-inline:contain}.nx-reports-page>*{min-width:0}
.nx-management-page{min-width:0}

/* Phase 2F — administration + controlled interface designer */
.nx-launcher{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius);padding:12px;display:grid;gap:8px;min-width:0}.nx-launcher>header{display:flex;align-items:center;gap:12px}.nx-launcher>header>div{display:grid;min-width:0}.nx-launcher h2{margin:0;font-size:0.875rem}.nx-launcher header small{color:var(--nx-muted);font-size:0.7812rem}.nx-launcher>header .nx-link-button{margin-inline-start:auto}.nx-launcher-loading{min-height:74px;display:flex;align-items:center;justify-content:center;flex-direction:row}.nx-launcher-grid{--nx-launcher-cols:6;display:grid;grid-template-columns:repeat(var(--nx-launcher-cols),minmax(0,1fr));grid-auto-flow:dense;gap:8px;min-width:0}.nx-launcher-tile{grid-column:span min(var(--nx-launcher-w,1),var(--nx-launcher-cols));grid-row:span var(--nx-launcher-h,1);order:var(--nx-launcher-order,0);border:1px solid color-mix(in srgb,var(--nx-launcher-accent,var(--nx-primary)) 24%,var(--nx-border));background:color-mix(in srgb,var(--nx-launcher-accent,var(--nx-primary)) 7%,var(--nx-surface));border-radius:12px;min-height:64px;padding:9px;display:flex;align-items:center;gap:8px;text-align:start;cursor:pointer;min-width:0}.nx-launcher-tile:hover{border-color:var(--nx-launcher-accent,var(--nx-primary));box-shadow:0 6px 18px color-mix(in srgb,var(--nx-launcher-accent,var(--nx-primary)) 10%,transparent)}.nx-launcher-tile[data-shape="square"]{border-radius:4px}.nx-launcher-tile[data-shape="pill"]{border-radius:var(--nx-radius-pill)}.nx-launcher-tile[data-shape="circle"]{border-radius:50%;aspect-ratio:1;justify-content:center;flex-direction:column;text-align:center}.nx-launcher-glyph{width:34px;height:34px;flex:0 0 34px;display:grid;place-items:center;border-radius:var(--nx-radius);background:color-mix(in srgb,var(--nx-launcher-accent,var(--nx-primary)) 14%,var(--nx-surface));color:var(--nx-launcher-accent,var(--nx-primary));font-size:1.125rem;font-weight:700}.nx-launcher-tile strong{font-size:0.8125rem;line-height:1.25;overflow-wrap:anywhere}.nx-home-stats{margin-top:-2px}
.nx-admin-page{min-width:0}.nx-admin-tabs{display:flex;gap:8px;overflow-x:auto;scrollbar-width:thin;padding:2px 0 6px;overscroll-behavior-inline:contain}.nx-admin-tabs button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius);min-height:42px;padding:7px 10px;display:flex;align-items:center;gap:8px;white-space:nowrap;cursor:pointer;color:var(--nx-muted)}.nx-admin-tabs button span{font-size:1.0625rem}.nx-admin-tabs button strong{font-size:0.8125rem}.nx-admin-tabs button.active{background:var(--nx-primary-soft);border-color:color-mix(in srgb,var(--nx-primary) 38%,var(--nx-border));color:var(--nx-primary-strong)}.nx-admin-section,.nx-admin-overview{display:grid;gap:12px;min-width:0}.nx-admin-metrics{grid-template-columns:repeat(6,minmax(110px,1fr))}.nx-admin-quick{display:flex;gap:8px;flex-wrap:wrap}.nx-admin-health{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.nx-admin-health>span{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:9px;padding:8px;display:grid;gap:4px;color:var(--nx-muted);font-size:0.7812rem}.nx-admin-health b{font-size:0.875rem;color:var(--nx-text)}.nx-admin-toolbar{display:flex;align-items:center;gap:8px}.nx-admin-toolbar input{min-width:0;flex:1;max-width:560px}.nx-admin-card-list{display:grid;gap:8px}.nx-admin-row{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:11px;padding:8px 9px;display:grid;grid-template-columns:38px minmax(0,1fr) auto auto;align-items:center;gap:8px;min-width:0}.nx-admin-row.inactive,.nx-admin-mini-list>div.inactive{opacity:.62}.nx-admin-avatar{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--nx-primary-soft);color:var(--nx-primary-strong);font-weight:700}.nx-admin-row-main{display:grid;min-width:0}.nx-admin-row-main strong,.nx-admin-row-main small,.nx-admin-row-main em{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-admin-row-main strong{font-size:0.8125rem}.nx-admin-row-main small{font-size:0.7812rem;color:var(--nx-muted)}.nx-admin-row-main em{font-style:normal;font-size:0.75rem;color:var(--nx-muted)}.nx-admin-row-actions{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}.nx-admin-row-actions .nx-button{min-height:32px;padding-inline:9px;font-size:0.7812rem}.nx-admin-structure{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-admin-mini-list{display:grid;gap:4px;max-height:520px;overflow-y:auto}.nx-admin-mini-list>div{border-bottom:1px solid var(--nx-border);padding:7px 2px;display:flex;align-items:center;gap:8px;min-width:0}.nx-admin-mini-list>div:last-child{border-bottom:0}.nx-admin-mini-list>div>span{display:grid;min-width:0;flex:1}.nx-admin-mini-list strong,.nx-admin-mini-list small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nx-admin-mini-list strong{font-size:0.8125rem}.nx-admin-mini-list small{font-size:0.75rem;color:var(--nx-muted)}.nx-admin-mini-list>div>div{display:flex;gap:4px}.nx-admin-mini-list .nx-button{min-height:30px;padding-inline:8px;font-size:0.7812rem}.nx-access-target{display:grid;grid-template-columns:minmax(160px,.5fr) minmax(220px,1fr) auto;gap:8px;align-items:end;margin-bottom:10px}.nx-access-target label,.nx-admin-field{display:grid;gap:4px;min-width:0}.nx-access-target label>span,.nx-admin-field>span{font-size:0.75rem;font-weight:600;color:var(--nx-muted)}.nx-permission-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.nx-permission-grid>label{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:9px;padding:7px;display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:start;cursor:pointer;min-width:0}.nx-permission-grid input{margin-top:2px}.nx-permission-grid span{display:grid;min-width:0}.nx-permission-grid strong{font-size:0.7812rem}.nx-permission-grid small{font-size:0.75rem;color:var(--nx-muted);line-height:1.3}.nx-preview-card p{margin:9px 0 0;color:var(--nx-muted);font-size:0.7812rem}.nx-interface-summary>.nx-button{justify-self:start}.nx-admin-interface-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:9px}.nx-admin-interface-summary>div{border:1px solid var(--nx-border);background:var(--nx-surface-2);padding:9px;border-radius:var(--nx-radius);display:grid}.nx-admin-interface-summary strong{font-size:1.375rem}.nx-admin-interface-summary span{font-size:0.75rem;color:var(--nx-muted)}.nx-admin-callout{border:1px solid color-mix(in srgb,var(--nx-primary) 24%,var(--nx-border));background:var(--nx-primary-soft);border-radius:var(--nx-radius);padding:9px;display:flex;align-items:flex-start;gap:8px;margin-bottom:9px}.nx-admin-callout>span{font-size:1.25rem;color:var(--nx-primary)}.nx-admin-callout div{display:grid}.nx-admin-callout strong{font-size:0.8125rem}.nx-admin-callout p{margin:2px 0 0;color:var(--nx-muted);font-size:0.75rem}.nx-admin-editor{width:min(760px,calc(100vw - 24px));max-height:min(780px,calc(var(--next-visual-height,100dvh) - 24px))}.nx-admin-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-admin-field input,.nx-admin-field select,.nx-admin-field textarea,.nx-admin-toolbar input,.nx-access-target select{width:100%;min-height:38px;border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);border-radius:9px;padding:7px 9px}.nx-admin-field textarea{min-height:74px;resize:vertical}.nx-admin-checkbox{align-self:end;min-height:38px}.nx-editor-footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;width:100%}.nx-admin-assignment-list{display:grid;gap:4px;margin-bottom:12px}.nx-admin-assignment-list>div{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:9px;padding:7px;display:flex;align-items:center;gap:8px}.nx-admin-assignment-list span{display:grid;min-width:0;flex:1}.nx-admin-assignment-list strong{font-size:0.7812rem}.nx-admin-assignment-list small{font-size:0.75rem;color:var(--nx-muted)}
.nx-interface-builder-layer{z-index:90}.nx-interface-builder{width:min(1320px,calc(100vw - 24px));height:min(840px,calc(var(--next-visual-height,100dvh) - 24px));max-height:calc(var(--next-visual-height,100dvh) - 24px)}.nx-interface-builder .nx-overlay-body{overflow:hidden;padding:10px}.nx-builder-toolbar{display:grid;grid-template-columns:auto minmax(180px,1fr) auto auto;gap:8px;align-items:end;margin-bottom:9px}.nx-builder-toolbar>label:not(.nx-switch){display:grid;gap:4px}.nx-builder-toolbar label>span{font-size:0.75rem;font-weight:600;color:var(--nx-muted)}.nx-builder-toolbar input,.nx-builder-toolbar select,.nx-builder-form input,.nx-builder-form select{min-height:36px;border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);border-radius:8px;padding:6px 8px}.nx-segmented button:last-child{border-inline-end:0}.nx-builder-main{height:calc(100% - 56px);display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:12px;min-width:0;min-height:0}.nx-builder-preview,.nx-builder-inspector{border:1px solid var(--nx-border);border-radius:11px;background:var(--nx-surface-2);min-width:0;min-height:0}.nx-builder-preview{padding:9px;overflow:auto}.nx-builder-preview>header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.nx-builder-preview>header>div{display:grid;min-width:0;flex:1}.nx-builder-preview>header small{font-size:0.75rem;color:var(--nx-muted)}.nx-builder-grid{--builder-cols:6;display:grid;grid-template-columns:repeat(var(--builder-cols),minmax(76px,1fr));grid-auto-flow:dense;grid-auto-rows:76px;gap:8px;align-content:start}.nx-builder-grid[data-platform="android"],.nx-builder-grid[data-platform="iphone"]{--builder-cols:2;max-width:430px;margin:0 auto}.nx-builder-tile{position:relative;grid-column:span var(--nx-launcher-w,1);grid-row:span var(--nx-launcher-h,1);order:var(--nx-launcher-order,0);border:1px solid color-mix(in srgb,var(--nx-launcher-accent) 30%,var(--nx-border));background:color-mix(in srgb,var(--nx-launcher-accent) 7%,var(--nx-surface));border-radius:12px;padding:8px;display:grid;align-content:center;justify-items:start;gap:4px;cursor:grab;user-select:none;touch-action:none;overflow:hidden}.nx-builder-tile.selected{outline:2px solid var(--nx-primary);outline-offset:1px}.nx-builder-tile.disabled{opacity:.5}.nx-builder-tile[data-shape="square"]{border-radius:4px}.nx-builder-tile[data-shape="pill"]{border-radius:var(--nx-radius-pill)}.nx-builder-tile[data-shape="circle"]{border-radius:50%;justify-items:center;text-align:center}.nx-builder-tile .nx-launcher-glyph{width:27px;height:27px;font-size:0.875rem}.nx-builder-tile strong{font-size:0.7812rem}.nx-builder-tile small{font-size:0.75rem;color:var(--nx-muted);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.nx-resize-handle{position:absolute;inset-inline-end:3px;inset-block-end:3px;width:23px;height:23px;border:0;border-radius:7px;background:var(--nx-surface);box-shadow:0 2px 8px rgba(0,0,0,.12);cursor:nwse-resize;touch-action:none}.nx-builder-inspector{padding:9px;overflow-y:auto}.nx-builder-form{display:grid;gap:8px}.nx-builder-form h3,.nx-builder-history h3{font-size:0.8125rem;margin:0 0 2px}.nx-builder-form>label,.nx-builder-form fieldset{display:grid;gap:4px;margin:0}.nx-builder-form label>span,.nx-builder-form legend{font-size:0.75rem;font-weight:600;color:var(--nx-muted)}.nx-builder-two{display:grid;grid-template-columns:1fr 1fr;gap:8px}.nx-builder-two label{display:grid;gap:4px}.nx-builder-form fieldset{border:1px solid var(--nx-border);border-radius:9px;padding:7px}.nx-role-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}.nx-role-grid label{display:flex;gap:4px;align-items:center;font-size:0.75rem}.nx-role-grid label.disabled{opacity:.45}.nx-builder-history{border-top:1px solid var(--nx-border);margin-top:10px;padding-top:9px;display:grid;gap:4px}.nx-builder-history>div{display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--nx-border);padding:5px 0}.nx-builder-history>div>span{display:grid;flex:1}.nx-builder-history small{font-size:0.75rem;color:var(--nx-muted)}.nx-builder-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%}.nx-builder-footer>span{font-size:0.7812rem;color:var(--nx-muted)}.nx-builder-footer>span.dirty{color:var(--nx-warning);font-weight:600}.nx-builder-footer>div{display:flex;gap:8px}
@media(max-width:1180px){.nx-admin-metrics{grid-template-columns:repeat(3,minmax(110px,1fr))}.nx-permission-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-builder-main{grid-template-columns:minmax(0,1fr) 300px}.nx-builder-grid{--builder-cols:4}.nx-launcher-grid{--nx-launcher-cols:4}}
@media(max-width:767px){.nx-launcher{padding:9px}.nx-launcher-grid{--nx-launcher-cols:2}.nx-launcher-tile{min-height:58px;padding:7px}.nx-launcher-tile[data-shape="circle"]{aspect-ratio:auto;border-radius:var(--nx-radius-pill);flex-direction:row;text-align:start}.nx-admin-tabs{margin-inline:-2px}.nx-admin-tabs button{min-height:39px;padding:6px 9px}.nx-admin-tabs button strong{font-size:0.7812rem}.nx-admin-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-admin-health{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-admin-toolbar{align-items:stretch}.nx-admin-toolbar input{font-size:16px}.nx-admin-row{grid-template-columns:34px minmax(0,1fr) auto}.nx-admin-avatar{width:34px;height:34px}.nx-admin-row>.nx-badge{display:none}.nx-admin-row-actions{grid-column:1/-1;justify-content:flex-end;border-top:1px solid var(--nx-border);padding-top:6px}.nx-admin-structure{grid-template-columns:1fr}.nx-access-target{grid-template-columns:1fr 1fr}.nx-access-target>.nx-button{grid-column:1/-1}.nx-permission-grid{grid-template-columns:1fr}.nx-admin-interface-summary{grid-template-columns:repeat(3,minmax(0,1fr))}.nx-admin-editor{width:100vw;max-width:none;height:var(--next-visual-height,100dvh);max-height:var(--next-visual-height,100dvh);border-radius:0}.nx-admin-form-grid{grid-template-columns:1fr}.nx-admin-field input,.nx-admin-field select,.nx-admin-field textarea,.nx-access-target select{font-size:16px}.nx-interface-builder{width:100vw;max-width:none;height:var(--next-visual-height,100dvh);max-height:var(--next-visual-height,100dvh);border-radius:0}.nx-interface-builder .nx-overlay-body{overflow:auto}.nx-builder-toolbar{grid-template-columns:1fr 1fr}.nx-builder-toolbar>.nx-segmented{grid-column:1/-1}.nx-builder-main{height:auto;grid-template-columns:1fr}.nx-builder-preview{min-height:300px;max-height:46vh}.nx-builder-inspector{overflow:visible}.nx-builder-grid{--builder-cols:2;grid-auto-rows:70px}.nx-builder-footer{align-items:flex-start}.nx-builder-footer>div{display:grid;grid-template-columns:1fr 1fr}.nx-builder-footer .nx-button-primary{grid-column:1/-1}.nx-interface-builder .nx-overlay-footer{padding-bottom:calc(8px + var(--nx-safe-bottom))}}
@media(max-width:390px){.nx-admin-metrics{grid-template-columns:1fr 1fr}.nx-admin-health{grid-template-columns:1fr 1fr}.nx-access-target{grid-template-columns:1fr}.nx-admin-interface-summary{grid-template-columns:1fr 1fr}.nx-admin-interface-summary>div:last-child{grid-column:1/-1}.nx-builder-toolbar{grid-template-columns:1fr}.nx-builder-toolbar>*{grid-column:1!important}.nx-builder-two,.nx-role-grid{grid-template-columns:1fr}.nx-builder-footer{display:grid}.nx-builder-footer>div{width:100%}}
/* Phase 2F mobile administration: keep every administration section visible without horizontal tab scrolling. */
@media(max-width:767px){
  .nx-admin-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;overflow:visible;margin-inline:0;padding:0 0 6px}
  .nx-admin-tabs button{width:100%;min-width:0;justify-content:flex-start;white-space:normal;line-height:1.15;padding:6px 8px}
  .nx-admin-tabs button strong{overflow-wrap:anywhere;text-align:start}
}
@media(max-width:390px){
  .nx-admin-tabs button{padding:6px;gap:4px}
  .nx-admin-tabs button span{font-size:0.9375rem}
  .nx-admin-tabs button strong{font-size:0.75rem}
}

/* Phase 2G — controlled personalization, release readiness and promotion safety */
.nx-launcher-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nx-template-buttons{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.nx-builder-policy{display:grid;gap:12px;padding-top:12px;border-top:1px solid var(--nx-border)}.nx-builder-policy h3{margin:0}.nx-policy-body{display:grid;gap:8px}.nx-interface-personalizer .nx-overlay-panel{width:min(1080px,calc(100vw - 24px));max-height:min(860px,calc(var(--nx-vh,100vh) - 20px))}.nx-personalizer-grid{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:16px;align-items:start}.nx-personalizer-preview{min-width:0;border:1px solid var(--nx-border);border-radius:var(--nx-radius);padding:12px;background:var(--nx-surface-soft)}.nx-personalizer-controls{position:sticky;top:0;display:grid;gap:12px;border:1px solid var(--nx-border);border-radius:var(--nx-radius);padding:12px;background:var(--nx-surface)}.nx-personalizer-controls h3{margin:0}.nx-personalizer-controls label{display:grid;gap:8px}.nx-constraint-list{display:grid;gap:8px;font-size:.85rem;color:var(--nx-muted)}.nx-launcher-tile.selected{outline:2px solid var(--nx-primary);outline-offset:2px}.nx-launcher-tile.is-hidden-preview{opacity:.42;filter:saturate(.35)}
.nx-release-readiness{display:grid;gap:12px}.nx-rollout-summary header,.nx-admin-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.nx-rollout-summary h2,.nx-admin-card h3{margin:0}.nx-rollout-summary p{margin:4px 0 0;color:var(--nx-muted)}.nx-rollout-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.nx-gate-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.nx-gate{display:grid;grid-template-columns:1fr auto;gap:4px 8px;padding:10px;border:1px solid var(--nx-border);border-radius:12px;background:var(--nx-surface-soft)}.nx-gate small{grid-column:1/-1;color:var(--nx-muted)}.nx-gate.pass>span{color:var(--nx-success)}.nx-gate.fail>span{color:var(--nx-danger)}.nx-warning-box{margin-top:10px;padding:10px;border:1px solid var(--nx-warning-border,var(--nx-border));border-radius:12px;background:var(--nx-surface-soft);display:grid;gap:8px}.nx-chip-row{display:flex;gap:8px;flex-wrap:wrap}.nx-chip-row span{padding:4px 8px;border-radius:var(--nx-radius-pill);border:1px solid var(--nx-border);font-size:.78rem}.nx-policy-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.nx-policy-controls>label:not(.nx-switch){display:grid;gap:4px}.nx-device-acceptance-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}.nx-device-acceptance-grid article{display:grid;gap:4px;padding:12px;border:1px solid var(--nx-border);border-radius:12px}.nx-device-acceptance-grid article .nx-badge{justify-self:start}.nx-acceptance-history{display:grid;gap:8px;margin-top:10px}.nx-acceptance-history>div{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;border-top:1px solid var(--nx-border)}.nx-acceptance-history span{display:grid;gap:4px}.nx-device-checklist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-device-checklist label{display:flex;align-items:center;gap:8px;padding:10px;border:1px solid var(--nx-border);border-radius:var(--nx-radius)}.nx-device-lab .nx-overlay-panel{width:min(680px,calc(100vw - 24px))}
@media(max-width:767px){.nx-personalizer-grid{grid-template-columns:1fr}.nx-personalizer-controls{position:static}.nx-policy-controls{grid-template-columns:1fr}.nx-device-checklist{grid-template-columns:1fr}.nx-device-acceptance-grid{grid-template-columns:1fr}.nx-rollout-actions>*{flex:1 1 150px}.nx-interface-personalizer .nx-overlay-panel{width:100%;max-height:var(--nx-vh,100dvh);border-radius:0}.nx-template-buttons{width:100%;overflow:visible}.nx-template-buttons .nx-button{flex:1 1 46%}}

/* Phase 2H specialist administration: compact system, backup, privacy and operations tools. */
.nx-specialist-admin{display:grid;gap:12px;min-width:0}.nx-specialist-tabs{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nx-specialist-tabs>button:not(.nx-button){border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);border-radius:var(--nx-radius);min-height:38px;padding:6px 10px;display:flex;align-items:center;gap:8px;cursor:pointer}.nx-specialist-tabs>button:not(.nx-button).active{border-color:color-mix(in srgb,var(--nx-primary) 42%,var(--nx-border));background:var(--nx-primary-soft);color:var(--nx-primary-strong)}.nx-specialist-tabs>button strong{font-size:0.7812rem}.nx-specialist-tabs>.nx-button{margin-inline-start:auto}.nx-specialist-stack{display:grid;gap:12px;min-width:0}.nx-specialist-list{display:grid;gap:8px}.nx-specialist-row{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:11px;padding:9px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px;min-width:0}.nx-specialist-main{display:grid;gap:4px;min-width:0}.nx-specialist-main>strong{font-size:0.8125rem;overflow-wrap:anywhere}.nx-specialist-main>small,.nx-specialist-main>p{font-size:0.75rem;color:var(--nx-muted);margin:0;overflow-wrap:anywhere}.nx-specialist-main>.nx-chip-row{margin-top:2px}.nx-inline-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nx-key-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-key-grid>span{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:9px;padding:8px;display:grid;gap:4px;min-width:0;font-size:0.7812rem;overflow-wrap:anywhere}.nx-key-grid>span.wide,.nx-admin-field.wide,.nx-warning-box.wide{grid-column:1/-1}.nx-key-grid b{font-size:0.75rem;color:var(--nx-muted);text-transform:uppercase;letter-spacing:.04em}.nx-timeline-list{display:grid;gap:8px}.nx-timeline-list>div{display:grid;grid-template-columns:16px minmax(0,1fr);gap:8px;border-bottom:1px solid var(--nx-border);padding:6px 0}.nx-timeline-list>div:last-child{border-bottom:0}.nx-timeline-list>div>div{display:grid;gap:4px;min-width:0}.nx-timeline-list strong{font-size:0.7812rem}.nx-timeline-list small{font-size:0.75rem;color:var(--nx-muted)}.nx-timeline-list code{display:block;white-space:pre-wrap;overflow-wrap:anywhere;background:var(--nx-surface-2);border-radius:7px;padding:6px;font-size:0.75rem}.nx-network-qr{width:132px;height:132px;max-width:100%;object-fit:contain;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:#fff;padding:5px;margin:8px 0}.nx-danger-text{color:var(--nx-danger)!important}.nx-specialist-dialog{width:min(620px,calc(100vw - 24px))}.nx-specialist-admin .nx-admin-metrics article{min-width:0}
@media(max-width:767px){.nx-specialist-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.nx-specialist-tabs>button:not(.nx-button){width:100%;justify-content:flex-start}.nx-specialist-tabs>.nx-button{grid-column:1/-1;margin-inline-start:0}.nx-specialist-row{grid-template-columns:1fr}.nx-specialist-row>.nx-admin-row-actions{grid-column:1;justify-content:flex-start}.nx-key-grid{grid-template-columns:1fr}.nx-key-grid>span.wide{grid-column:1}.nx-specialist-dialog{width:100vw;max-width:none;height:var(--next-visual-height,100dvh);max-height:var(--next-visual-height,100dvh);border-radius:0}.nx-network-qr{justify-self:start}}


/* Phase 2J — cross-client runtime hardening and browser fallbacks. */
@supports (height:100dvh){:root{--next-visual-height:100dvh;/* Tablo kabinin ust noktasi: viewport.ts calisincaya kadar gecerli olan
   makul varsayilan. JS olcumu satir ici stil olarak bunun uzerine yazar. */
  --nx-tablo-ust:260px}}
@supports not (backdrop-filter:blur(1px)){.nx-topbar,.nx-mobile-nav{background:var(--nx-surface)}}
.nx-native-settings{grid-column:1/-1;display:grid;gap:8px;padding:9px;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2)}.nx-native-settings small{color:var(--nx-muted)}
@media(max-width:767px){
  /* r182 -- iPhone'da ust cubuk listeyle birlikte ASAGI kayiyordu.
   Sebep: mobil kuralda `top:var(--next-visual-top,0px)` vardi ve bu degisken
   `visualViewport.offsetTop`tan geliyor (services/viewport.ts:46). Ama
   `position:sticky` GORSEL goruntuye degil DUZEN goruntusune gore konumlanir;
   ikisini toplamak cift sayim demek. iOS'ta adres cubugu animasyonu ve
   lastik-bant kaydirmasi sirasinda `offsetTop` buyudugu icin cubuk sayfanin
   ortasina/altina itiliyordu.

   Tarayicida kanitlandi: degisken 120px yapilinca cubugun `top` degeri
   0'dan 120'ye cikiyor -- bildirilen belirtinin aynisi.

   Dogrusu `top:0`. Centik/guvenli alan zaten ASAGIDAKI kuralda dolgu ile
   karsilaniyor, `top` ile degil. Degisken silinmedi: viewport.ts klavye
   payini hesaplarken kullanmaya devam ediyor. */
:root[data-client-platform="iphone"] .nx-topbar{height:auto;min-height:calc(56px + var(--nx-safe-top));padding-top:calc(7px + var(--nx-safe-top));padding-inline-start:calc(10px + var(--nx-safe-left));padding-inline-end:calc(10px + var(--nx-safe-right))}
  :root[data-client-platform="iphone"] .nx-content{padding-inline-start:calc(10px + var(--nx-safe-left));padding-inline-end:calc(10px + var(--nx-safe-right))}
  :root[data-client-platform="iphone"] .nx-toast{inset-block-start:auto;inset-block-end:calc(70px + var(--nx-safe-bottom));inset-inline-start:calc(10px + var(--nx-safe-left));inset-inline-end:calc(10px + var(--nx-safe-right))}
  :root[data-client-platform="android"] .nx-overlay-body,:root[data-client-platform="iphone"] .nx-overlay-body{-webkit-overflow-scrolling:touch}
}

.nx-release-identity{font-size:.78rem;color:var(--nx-muted);overflow-wrap:anywhere;margin-top:6px}.nx-device-acceptance-grid article small{overflow-wrap:anywhere}

/* r54 regression-restoration: admin broadcast composer + release label */
.nx-broadcast-composer{display:grid;gap:12px;margin-block-end:14px;padding:14px;border:1px solid var(--nx-line);border-radius:var(--nx-radius);background:var(--nx-surface-soft,#f7faf9)}
.nx-broadcast-composer header strong,.nx-broadcast-composer header small{display:block}.nx-broadcast-composer header small{color:var(--nx-muted);margin-top:4px}.nx-broadcast-composer label{display:grid;gap:8px}.nx-broadcast-composer label>span{display:flex;justify-content:space-between;gap:12px;font-weight:700}.nx-broadcast-composer label>span small{font-variant-numeric:tabular-nums;color:var(--nx-muted)}.nx-broadcast-composer input,.nx-broadcast-composer textarea{width:100%;box-sizing:border-box}.nx-broadcast-composer textarea{resize:vertical;min-height:110px}.nx-release-label{opacity:.72;font-variant-numeric:tabular-nums}
@media(max-width:640px){.nx-broadcast-composer{padding:12px}.nx-broadcast-composer .nx-inline-actions{display:grid;grid-template-columns:1fr}.nx-broadcast-composer .nx-button{width:100%}}

/* r55 — Admin-controlled per-platform visual design tokens.
   r153: varsayilanlar yeni tasarima cekildi. Bu katman temel kurallari
   eziyor, yani yaricap ve golgeyi yalnizca yukarida degistirmek ise
   yaramiyordu -- olculdu: dugme hala 10px cikiyordu. Kullanicinin arayuz
   tasarimcisindan verdigi kendi degerleri yine bunlari eziyor; degisen
   sadece VARSAYILAN. */
:root{
  --nx-design-surface-radius:10px;
  --nx-design-control-radius:6px;
  --nx-design-button-radius:999px;
  --nx-design-content-gap:16px;
  --nx-design-panel-padding:13px;
  --nx-design-sidebar-width:248px;
  --nx-design-surface-shadow:none;
  --nx-radius:var(--nx-user-surface-radius,var(--nx-design-surface-radius,10px));
}
.nx-app-shell{grid-template-columns:var(--nx-design-sidebar-width) minmax(0,1fr)}

:root[data-interface-platform="web"] .nx-content{padding:calc(var(--nx-design-content-gap) + 4px)}
:root[data-interface-platform="android"] .nx-content,
:root[data-interface-platform="iphone"] .nx-content{padding:var(--nx-design-content-gap)}
.nx-page{gap:var(--nx-design-content-gap)}
.nx-panel{padding:var(--nx-design-panel-padding)}
.nx-panel,.nx-command-card,.nx-stat-card,.nx-task-card,.nx-result-card,.nx-metric-card,.nx-workspace-card,.nx-workspace-section,.nx-task-summary-v2,.nx-admin-card,.nx-rollout-summary,.nx-launcher,.nx-personalizer-preview,.nx-personalizer-controls,.nx-gate,.nx-specialist-row,.nx-device-acceptance-grid article,.nx-overlay-panel{border-radius:var(--nx-user-surface-radius,var(--nx-design-surface-radius))}
.nx-panel,.nx-command-card,.nx-stat-card,.nx-launcher,.nx-admin-card,.nx-rollout-summary,.nx-overlay-panel{box-shadow:var(--nx-design-surface-shadow)}
.nx-button,.nx-icon-button,.nx-pill-button,.nx-nav-item,.nx-more-item,.nx-admin-tabs button,.nx-specialist-tabs>button:not(.nx-button),.nx-device-checklist label{border-radius:var(--nx-design-button-radius)}
#ctt-next-root input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),
#ctt-next-root select,
#ctt-next-root textarea{border-radius:var(--nx-design-control-radius)}
:root[data-button-style="soft"] .nx-button-primary{background:var(--nx-primary-soft);color:var(--nx-primary-strong);border-color:color-mix(in srgb,var(--nx-primary) 32%,var(--nx-border))}
:root[data-button-style="soft"] .nx-button-primary:hover:not(:disabled){background:color-mix(in srgb,var(--nx-primary) 17%,var(--nx-surface));color:var(--nx-primary-strong)}
:root[data-icon-style="outline"] .nx-command-icon,
:root[data-icon-style="outline"] .nx-launcher-glyph{background:transparent;border:1px solid color-mix(in srgb,var(--nx-primary) 35%,var(--nx-border));box-shadow:none}
:root[data-icon-style="solid"] .nx-command-icon,
:root[data-icon-style="solid"] .nx-launcher-glyph{background:var(--nx-primary);color:#fff;border-color:var(--nx-primary)}
@media(min-width:768px){
  :root[data-navigation="compact"] .nx-app-shell{grid-template-columns:82px minmax(0,1fr)}
  
  :root[data-navigation="compact"] .nx-sidebar{padding-inline:9px}
  :root[data-navigation="compact"] .nx-brand{justify-content:center}
  :root[data-navigation="compact"] .nx-brand>span:last-child,
  :root[data-navigation="compact"] .nx-sidebar-nav .nx-nav-item span:nth-child(2),
  :root[data-navigation="compact"] .nx-sidebar-foot{display:none}
  :root[data-navigation="compact"] .nx-sidebar-nav .nx-nav-item{justify-content:center;padding-inline:7px}
  :root[data-navigation="compact"] .nx-nav-badge{position:absolute;inset-inline-end:0;inset-block-start:1px}
}

/* Full-app preview inside the interface designer. */
.nx-builder-appearance{display:grid;gap:8px;padding:0 0 12px;margin-bottom:12px;border-bottom:1px solid var(--nx-border)}
.nx-builder-appearance>header{display:flex;align-items:flex-start;gap:8px}.nx-builder-appearance>header>div{display:grid;gap:4px;min-width:0;flex:1}.nx-builder-appearance h3{margin:0;font-size:0.8125rem}.nx-builder-appearance header small,.nx-builder-appearance>p{font-size:0.75rem;color:var(--nx-muted);margin:0;line-height:1.5}.nx-builder-appearance>label{display:grid;gap:4px}.nx-builder-appearance>label>span{font-size:0.75rem;font-weight:600;color:var(--nx-muted)}.nx-builder-appearance select{min-height:36px;border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);padding:6px 8px}.nx-builder-range>span{display:flex;justify-content:space-between;gap:8px}.nx-builder-range>span b{color:var(--nx-text);font-variant-numeric:tabular-nums}.nx-builder-range input{width:100%;accent-color:var(--nx-primary)}
.nx-builder-app-preview{display:grid;grid-template-columns:var(--nx-design-sidebar-width) minmax(0,1fr);min-height:360px;border:1px solid var(--nx-border);border-radius:var(--nx-design-surface-radius);overflow:hidden;background:var(--nx-bg);box-shadow:var(--nx-design-surface-shadow);margin-bottom:12px;direction:inherit}

.nx-builder-mini-sidebar{grid-column:1;grid-row:1;background:var(--nx-surface);border-inline-end:1px solid var(--nx-border);padding:var(--nx-design-panel-padding);display:grid;align-content:start;gap:8px;min-width:0}

.nx-builder-mini-brand{width:34px;height:34px;display:grid;place-items:center;border-radius:var(--nx-design-button-radius);background:var(--nx-primary);color:#fff;margin-bottom:5px}.nx-builder-mini-sidebar>span{display:flex;gap:8px;align-items:center;border-radius:var(--nx-design-button-radius);padding:7px 8px;color:var(--nx-muted);font-size:0.75rem}.nx-builder-mini-sidebar>span.active{background:var(--nx-primary-soft);color:var(--nx-primary-strong)}
.nx-builder-mini-main{grid-column:2;grid-row:1;min-width:0;display:grid;grid-template-rows:auto 1fr auto}.nx-builder-app-preview[data-preview-platform="web"] .nx-builder-mini-main{grid-row:1}.nx-builder-mini-topbar{height:46px;padding:6px var(--nx-design-content-gap);display:flex;align-items:center;gap:8px;background:var(--nx-surface);border-bottom:1px solid var(--nx-border)}.nx-builder-mini-topbar>div{margin-inline-start:auto;display:flex;gap:4px}.nx-builder-mini-topbar button,.nx-builder-mini-actions button,.nx-builder-mini-heading button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-design-button-radius);min-height:30px;padding:4px 9px;font-size:0.75rem}.nx-builder-mini-topbar button{width:30px;padding:0}.nx-builder-mini-actions .primary,.nx-builder-mini-heading .primary{background:var(--nx-primary);border-color:var(--nx-primary);color:#fff}.nx-builder-mini-content{padding:var(--nx-design-content-gap);display:grid;align-content:start;gap:var(--nx-design-content-gap);min-width:0}.nx-builder-mini-heading{display:flex;align-items:end;gap:8px}.nx-builder-mini-heading>span{display:grid;min-width:0;flex:1}.nx-builder-mini-heading small{color:var(--nx-muted);font-size:0.75rem}.nx-builder-mini-heading strong{font-size:0.875rem}.nx-builder-mini-panel{border:1px solid var(--nx-border);border-radius:var(--nx-design-surface-radius);background:var(--nx-surface);padding:var(--nx-design-panel-padding);display:grid;gap:8px;box-shadow:var(--nx-design-surface-shadow);min-width:0}.nx-builder-mini-panel>strong{font-size:0.7812rem}.nx-builder-mini-fields{display:grid;grid-template-columns:1fr 1fr;gap:8px}.nx-builder-mini-fields input,.nx-builder-mini-fields select{width:100%;min-width:0;min-height:34px;border:1px solid var(--nx-border);border-radius:var(--nx-design-control-radius);background:var(--nx-surface-2);color:var(--nx-text);padding:5px 7px;font-size:0.75rem}.nx-builder-mini-actions{display:flex;gap:8px;justify-content:flex-end}.nx-builder-mini-launcher .nx-builder-grid{grid-auto-rows:64px}.nx-builder-mini-launcher .nx-builder-tile{pointer-events:none}.nx-builder-mini-mobile-nav{display:flex;justify-content:space-around;align-items:center;min-height:42px;border-top:1px solid var(--nx-border);background:var(--nx-surface)}.nx-builder-mini-mobile-nav span{width:30px;height:30px;border-radius:var(--nx-design-button-radius);display:grid;place-items:center}.nx-builder-mini-mobile-nav span.active{background:var(--nx-primary-soft);color:var(--nx-primary-strong)}
.nx-builder-app-preview[data-preview-platform="android"],.nx-builder-app-preview[data-preview-platform="iphone"]{grid-template-columns:1fr;max-width:430px;min-height:540px;margin-inline:auto;border-radius:calc(var(--nx-design-surface-radius) + 8px)}.nx-builder-app-preview[data-preview-platform="android"] .nx-builder-mini-main,.nx-builder-app-preview[data-preview-platform="iphone"] .nx-builder-mini-main{grid-column:1}.nx-builder-launcher-editor{display:grid;gap:8px;border-top:1px solid var(--nx-border);padding-top:11px}.nx-builder-launcher-editor>header{display:grid;gap:4px}.nx-builder-launcher-editor>header strong{font-size:0.7812rem}.nx-builder-launcher-editor>header small{font-size:0.75rem;color:var(--nx-muted)}
@media(max-width:767px){.nx-builder-app-preview{min-height:460px}.nx-builder-app-preview[data-preview-platform="web"]{grid-template-columns:72px minmax(0,1fr)}.nx-builder-mini-sidebar b{display:none}.nx-builder-mini-fields{grid-template-columns:1fr}}

/* Phase 2N — daily operations center and structured pilot feedback. */
.nx-operations-center{display:grid;gap:12px;min-width:0}.nx-operations-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-ops-action-list,.nx-ops-history,.nx-ops-feedback{display:grid;gap:8px}.nx-ops-action{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:start;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2);padding:8px}.nx-ops-action>div{display:grid;gap:4px;min-width:0}.nx-ops-action strong{font-size:0.7812rem;overflow-wrap:anywhere}.nx-ops-action small{font-size:0.75rem;color:var(--nx-muted);overflow-wrap:anywhere}.nx-ops-channel-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-ops-channel{display:grid;gap:8px;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2);padding:8px;min-width:0}.nx-ops-channel>div{display:flex;align-items:center;justify-content:space-between;gap:8px}.nx-ops-channel strong{font-size:0.7812rem;text-transform:capitalize}.nx-ops-channel small{font-size:0.75rem;color:var(--nx-muted);overflow-wrap:anywhere}.nx-ops-client-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.nx-ops-client-grid article{display:grid;gap:4px;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2);padding:8px;min-width:0}.nx-ops-client-grid article>div{display:flex;align-items:center;justify-content:space-between;gap:8px}.nx-ops-client-grid strong{font-size:0.75rem;overflow-wrap:anywhere}.nx-ops-client-grid small,.nx-ops-client-grid span{font-size:0.75rem;color:var(--nx-muted);overflow-wrap:anywhere}.nx-ops-history>article{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:center;padding:6px 0;border-bottom:1px solid var(--nx-border)}.nx-ops-history>article:last-child{border-bottom:0}.nx-ops-history>article>div{display:grid;gap:var(--nx-s-hair)}.nx-ops-history strong{font-size:0.75rem}.nx-ops-history small{font-size:0.75rem;color:var(--nx-muted)}.nx-ops-feedback>article{display:grid;gap:4px;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2);padding:8px}.nx-ops-feedback-head{display:flex;align-items:center;gap:8px}.nx-ops-feedback-head strong{font-size:0.7812rem;overflow-wrap:anywhere}.nx-ops-feedback p{margin:0;font-size:0.75rem;white-space:pre-wrap;overflow-wrap:anywhere}.nx-ops-feedback small{font-size:0.75rem;color:var(--nx-muted)}.nx-ops-feedback .nx-button{justify-self:start}.nx-feedback-form{display:grid;gap:8px}.nx-feedback-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-feedback-form label{display:grid;gap:4px}.nx-feedback-form label>span{font-size:0.75rem;color:var(--nx-muted);font-weight:700}.nx-feedback-form input,.nx-feedback-form select,.nx-feedback-form textarea{width:100%;min-width:0;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);color:var(--nx-text);padding:7px 9px}.nx-feedback-form textarea{resize:vertical}.nx-feedback-actions{display:flex;align-items:center;justify-content:space-between;gap:12px}.nx-feedback-actions small{font-size:0.75rem;color:var(--nx-muted);max-width:620px}.nx-form-stack{display:grid;gap:8px}.nx-form-stack label{display:grid;gap:4px}.nx-form-stack textarea{width:100%;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);color:var(--nx-text);padding:8px}.nx-dialog-actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}
@media(max-width:767px){.nx-operations-grid{grid-template-columns:1fr}.nx-ops-channel-grid,.nx-feedback-fields{grid-template-columns:1fr}.nx-ops-client-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-feedback-actions{align-items:flex-start;flex-direction:column}.nx-feedback-actions .nx-button{width:100%}}
@media(max-width:390px){.nx-ops-client-grid{grid-template-columns:1fr}}

/* Phase 2O — compact operator control, health trends and feedback triage. */
.nx-ops-action{grid-template-columns:auto minmax(0,1fr) auto;align-items:center}.nx-ops-action .nx-button{min-height:28px;padding:4px 8px;font-size:0.75rem}.nx-ops-trend{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.nx-ops-trend>div{display:grid;gap:4px;padding:9px;border:1px solid var(--nx-border);border-radius:var(--nx-design-surface-radius,10px);background:var(--nx-surface-2)}.nx-ops-trend span,.nx-ops-trend small{font-size:0.75rem;color:var(--nx-muted)}.nx-ops-trend strong{font-size:1.0rem;font-variant-numeric:tabular-nums}.nx-ops-channel p{margin:0;font-size:0.75rem;line-height:1.45;color:var(--nx-muted);overflow-wrap:anywhere}.nx-ops-errors{display:grid;gap:8px}.nx-ops-errors>article{display:grid;gap:4px;border:1px solid var(--nx-border);border-radius:var(--nx-design-surface-radius,10px);background:var(--nx-surface-2);padding:8px;min-width:0}.nx-ops-errors>article>div{display:flex;gap:8px;align-items:center;min-width:0}.nx-ops-errors>article strong{font-size:0.75rem;overflow-wrap:anywhere;min-width:0}.nx-ops-errors>article b{margin-inline-start:auto;font-size:0.75rem}.nx-ops-errors p{margin:0;font-size:0.75rem;line-height:1.45;overflow-wrap:anywhere}.nx-ops-errors small{font-size:0.75rem;color:var(--nx-muted);overflow-wrap:anywhere}.nx-ops-feedback .nx-inline-actions{display:flex;gap:8px;flex-wrap:wrap}.nx-form-stack select{width:100%;min-width:0;border:1px solid var(--nx-border);border-radius:var(--nx-design-control-radius,9px);background:var(--nx-surface);color:var(--nx-text);padding:8px}
@media(max-width:767px){.nx-ops-action{grid-template-columns:auto minmax(0,1fr)}.nx-ops-action .nx-button{grid-column:2;justify-self:start}.nx-ops-trend{grid-template-columns:1fr}.nx-ops-errors>article>div{align-items:flex-start}.nx-ops-feedback .nx-inline-actions{display:grid;grid-template-columns:1fr 1fr}.nx-ops-feedback .nx-inline-actions .nx-button{width:100%}}

/* Phase 2P — corrective action bridge. */
.nx-ops-corrective-list{display:grid;gap:8px}.nx-ops-corrective-list>article{display:grid;gap:4px;border:1px solid var(--nx-border);border-radius:var(--nx-design-surface-radius,10px);background:var(--nx-surface-2);padding:8px;min-width:0}.nx-ops-corrective-list small{font-size:0.75rem;color:var(--nx-muted);overflow-wrap:anywhere}.nx-ops-corrective-list .nx-inline-actions{display:flex;gap:8px;flex-wrap:wrap}.nx-form-stack input{width:100%;min-width:0;border:1px solid var(--nx-border);border-radius:var(--nx-design-control-radius,9px);background:var(--nx-surface);color:var(--nx-text);padding:8px}.nx-metric-card small{font-size:0.75rem;color:var(--nx-muted)}
@media(max-width:767px){.nx-ops-corrective-list .nx-inline-actions{display:grid;grid-template-columns:1fr 1fr}.nx-ops-corrective-list .nx-inline-actions .nx-button{width:100%}}

/* Phase 2Q — compact filter/report/communications corrections. */
.nx-home-purpose{display:grid;gap:8px}.nx-home-purpose-actions{display:flex;gap:8px;flex-wrap:wrap}
.nx-stat-card small{font-size:0.75rem;color:var(--nx-muted)}
.nx-search-filter-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:start}.nx-search-filter-row>.nx-button{white-space:nowrap}.nx-filter-explanation{margin:0;padding:7px 9px;border:1px dashed var(--nx-border);border-radius:var(--nx-radius-sm);background:var(--nx-surface-2);color:var(--nx-muted);font-size:0.7812rem;line-height:1.55}
.nx-search-results .nx-result-list{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.nx-result-card{min-height:62px;padding:7px}.nx-result-icon{width:30px;height:30px}
.nx-task-empty-panel{width:min(620px,100%);justify-self:center;padding:8px}.nx-task-empty-panel .nx-state{min-height:78px;padding:10px}
.nx-dashboard-view-section{display:grid;gap:8px}.nx-dashboard-built-in{display:grid;gap:8px;max-width:1040px}.nx-dashboard-built-in p{margin:0;color:var(--nx-muted);font-size:0.7812rem;line-height:1.55}.nx-dashboard-view-section .nx-state{min-height:78px;padding:10px}
.nx-communications-admin{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;min-width:0}.nx-channel-panel{display:grid;gap:8px;align-content:start;min-width:0}.nx-channel-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nx-channel-form label{display:grid;gap:4px;min-width:0}.nx-channel-form label>span{font-size:0.75rem;color:var(--nx-muted);font-weight:700}.nx-channel-form input,.nx-channel-form select{width:100%;min-width:0;min-height:38px;border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface);color:var(--nx-text);padding:6px 8px}.nx-channel-wide{grid-column:1/-1}.nx-channel-form .nx-toggle-row{display:flex;align-items:center;gap:8px;min-height:38px}.nx-channel-form .nx-toggle-row input{width:18px;min-height:18px}.nx-channel-actions{display:flex;gap:8px;flex-wrap:wrap}.nx-channel-error{margin:0;padding:7px 9px;border-radius:8px;background:color-mix(in srgb,var(--nx-danger) 9%,var(--nx-surface));color:var(--nx-danger);font-size:0.7812rem}.nx-channel-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.nx-channel-facts span{display:grid;gap:4px;border:1px solid var(--nx-border);border-radius:8px;padding:6px;background:var(--nx-surface-2);min-width:0}.nx-channel-facts small{font-size:0.75rem;color:var(--nx-muted)}.nx-channel-facts b{font-size:0.7812rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:1100px){.nx-communications-admin{grid-template-columns:1fr}.nx-search-results .nx-result-list{grid-template-columns:repeat(auto-fit,minmax(270px,1fr))}}
@media(max-width:767px){.nx-search-filter-row{grid-template-columns:1fr}.nx-search-filter-row>.nx-button{width:100%}.nx-channel-form{grid-template-columns:1fr}.nx-channel-wide{grid-column:auto}.nx-channel-facts{grid-template-columns:1fr 1fr}.nx-communications-admin input,.nx-communications-admin select{font-size:16px}}
/* Phase 2R — desktop-controlled VPS deployment manager */
.nx-deploy-page{display:grid;gap:12px;min-width:0}.nx-deploy-safety{border-color:color-mix(in srgb,var(--nx-accent) 34%,var(--nx-border))}.nx-deploy-rules{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;font-size:0.8125rem;color:var(--nx-muted)}.nx-deploy-rules span{padding:7px 8px;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface-soft)}.nx-deploy-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);gap:12px;align-items:start;min-width:0}.nx-deploy-page .nx-form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-deploy-page label{display:grid;gap:4px;min-width:0}.nx-deploy-page label>span{font-size:0.7812rem;color:var(--nx-muted);font-weight:700}.nx-deploy-page input:not([type=checkbox]),.nx-deploy-page select{width:100%;min-width:0;min-height:38px;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);color:var(--nx-text);padding:6px 8px}.nx-deploy-page .nx-check-row{display:flex;align-items:center;gap:8px;min-height:38px;padding:6px 8px;border:1px solid var(--nx-border);border-radius:9px}.nx-deploy-first{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--nx-border)}.nx-deploy-preflight{display:grid;gap:8px;margin-top:8px;padding:9px;border-radius:var(--nx-radius);background:var(--nx-surface-soft);border:1px solid var(--nx-border)}.nx-deploy-preflight>div:first-child{display:flex;gap:4px;flex-wrap:wrap}.nx-deploy-preflight code,.nx-deploy-package code{display:block;max-width:100%;overflow-wrap:anywhere;font-size:0.75rem;color:var(--nx-muted);direction:ltr;text-align:left}.nx-deploy-existing{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}.nx-deploy-existing>b{grid-column:1/-1}.nx-deploy-existing span{padding:6px;border-radius:8px;background:var(--nx-surface);border:1px solid var(--nx-border);font-size:0.7812rem}.nx-file-drop{border:1px dashed var(--nx-border-strong);border-radius:11px;min-height:76px;display:grid!important;place-items:center;cursor:pointer;background:var(--nx-surface-soft)}.nx-file-drop input{position:absolute;opacity:0;pointer-events:none}.nx-file-drop span{font-size:0.8125rem!important;color:var(--nx-text)!important}.nx-deploy-package{display:grid;gap:4px;margin-top:8px;padding:9px;border:1px solid var(--nx-border);border-radius:var(--nx-radius)}.nx-deploy-package strong{font-size:0.875rem}.nx-deploy-package small{overflow-wrap:anywhere}.nx-deploy-start{display:grid;gap:8px;margin-top:10px}.nx-deploy-start small{color:var(--nx-muted);font-size:0.7812rem;line-height:1.4}.nx-deploy-stages{display:grid;gap:4px}.nx-deploy-stages .stage{display:grid;grid-template-columns:24px minmax(0,1fr);gap:8px;align-items:start;padding:7px 8px;border:1px solid var(--nx-border);border-radius:9px}.nx-deploy-stages .stage>span{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--nx-surface-soft)}.nx-deploy-stages .stage.passed>span{color:var(--nx-success)}.nx-deploy-stages .stage.failed>span{color:var(--nx-danger)}.nx-deploy-stages .stage div{display:grid;gap:4px}.nx-deploy-stages .stage small{color:var(--nx-muted);font-size:0.7812rem;overflow-wrap:anywhere}.nx-deploy-compare{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.nx-deploy-compare strong{width:100%}.nx-deploy-compare span{font-size:0.7812rem;padding:5px 7px;border:1px solid var(--nx-border);border-radius:8px}.nx-deploy-targets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:8px}.nx-deploy-targets button{display:grid;gap:4px;text-align:start;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);padding:8px;color:var(--nx-text);cursor:pointer}.nx-deploy-targets small,.nx-deploy-targets em{font-size:0.75rem;color:var(--nx-muted);font-style:normal;overflow-wrap:anywhere}.nx-deploy-history{display:grid;gap:4px}.nx-deploy-history article{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:center;padding:7px 8px;border-top:1px solid var(--nx-border)}.nx-deploy-history article span{display:grid}.nx-deploy-history small{font-size:0.75rem;color:var(--nx-muted);overflow-wrap:anywhere}.nx-error-banner{padding:8px;border-radius:9px;background:color-mix(in srgb,var(--nx-danger) 10%,transparent);color:var(--nx-danger);overflow-wrap:anywhere}
@media(max-width:900px){.nx-deploy-grid{grid-template-columns:1fr}.nx-deploy-rules{grid-template-columns:1fr 1fr}}
@media(max-width:767px){.nx-deploy-page .nx-form-grid,.nx-deploy-first{grid-template-columns:1fr 1fr}.nx-deploy-rules,.nx-deploy-existing,.nx-deploy-targets{grid-template-columns:1fr 1fr}.nx-deploy-page input:not([type=checkbox]),.nx-deploy-page select{font-size:16px}.nx-deploy-page{padding-bottom:calc(8px + var(--nx-safe-bottom))}}
@media(max-width:390px){.nx-deploy-page .nx-form-grid,.nx-deploy-first,.nx-deploy-rules,.nx-deploy-existing,.nx-deploy-targets{grid-template-columns:1fr}.nx-deploy-existing>b{grid-column:auto}}
/* Phase 2R responsive hardening — prevent hidden upload inputs/admin tabs from widening the viewport */
.nx-file-drop{position:relative;min-width:0;overflow:hidden}
.nx-file-drop input[type=file]{position:absolute!important;width:1px!important;min-width:0!important;height:1px!important;min-height:0!important;padding:0!important;border:0!important;margin:0!important;opacity:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;pointer-events:none}
.nx-deploy-badges{display:flex;gap:4px;flex-wrap:wrap;min-width:0}
.nx-deploy-warnings{display:grid;gap:4px;min-width:0;color:var(--nx-warning,var(--nx-muted))}
@media(min-width:901px){.nx-admin-tabs{flex-wrap:wrap;overflow-x:visible;overscroll-behavior-inline:auto}.nx-admin-tabs button{min-width:0}}

/* r63 consolidated React productivity parity */
.nx-top-create{border:1px solid var(--nx-primary);background:var(--nx-primary);color:#fff;min-height:36px;border-radius:var(--nx-radius);padding:0 12px;display:inline-flex;align-items:center;gap:8px;font-weight:600;cursor:pointer}.nx-top-create:hover{background:var(--nx-primary-strong)}
.nx-global-create-fab{position:fixed;z-index:36;inset-inline-end:max(22px,calc(var(--nx-safe-right) + 14px));inset-block-end:max(22px,calc(var(--nx-safe-bottom) + 14px));border:0;border-radius:var(--nx-radius-pill);background:var(--nx-primary);color:#fff;box-shadow:0 12px 30px color-mix(in srgb,var(--nx-primary) 30%,rgba(0,0,0,.18));min-height:52px;padding:0 18px;display:flex;align-items:center;gap:8px;font-weight:700;cursor:pointer}.nx-global-create-fab>span{font-size:1.375rem;line-height:1}.nx-global-create-fab:hover{background:var(--nx-primary-strong);transform:translateY(-1px)}
.nx-content{padding-bottom:92px}
.nx-task-toolbar{align-items:center}.nx-task-view-toggle{display:inline-flex;gap:4px;border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius);padding:3px}.nx-task-view-toggle button{min-height:32px;border:0;border-radius:7px;padding:0 9px;background:transparent;cursor:pointer;font-weight:700;white-space:nowrap}.nx-task-view-toggle button.active{background:var(--nx-primary-soft);color:var(--nx-primary-strong)}
.nx-column-picker{position:relative;min-width:120px}.nx-column-picker>summary{list-style:none;min-height:40px;border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface);display:flex;align-items:center;justify-content:center;padding:0 10px;cursor:pointer;font-weight:700}.nx-column-picker>summary::-webkit-details-marker{display:none}.nx-column-picker>div{position:absolute;z-index:31;inset-inline-end:0;top:44px;width:min(310px,calc(100vw - 32px));max-height:360px;overflow:auto;border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:12px;padding:7px;box-shadow:var(--nx-shadow)}.nx-column-option{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px;border-bottom:1px solid var(--nx-border)}.nx-column-option:last-child{border-bottom:0}.nx-column-option label{display:flex;align-items:center;gap:8px;min-width:0}.nx-column-option>span{display:flex;gap:4px}.nx-column-option button{width:30px;height:30px;border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:7px;cursor:pointer}
.nx-editable-task-table-panel{padding:0;overflow:hidden}.nx-task-table-scroll{width:100%;overflow:auto;max-height:calc(var(--next-visual-height,100dvh) - 300px);min-height:180px}.nx-editable-task-table{border-collapse:separate;border-spacing:0;min-width:1050px;width:100%;font-size:0.8125rem}.nx-editable-task-table th{position:sticky;top:0;z-index:2;background:var(--nx-surface-2);text-align:start;padding:8px;border-bottom:1px solid var(--nx-border);white-space:nowrap}.nx-editable-task-table td{padding:6px 8px;border-bottom:1px solid var(--nx-border);vertical-align:middle;min-width:110px}.nx-editable-task-table tr:last-child td{border-bottom:0}.nx-editable-task-table tr.saving{opacity:.62}.nx-editable-task-table input,.nx-editable-task-table select{width:100%;min-width:90px;min-height:34px;border:1px solid var(--nx-border);border-radius:7px;background:var(--nx-surface);color:var(--nx-text);padding:4px 6px}.nx-editable-task-table input[type=checkbox]{width:18px;min-width:18px;min-height:18px}.nx-table-task-cell{display:grid;grid-template-columns:minmax(160px,1fr) auto;gap:4px;min-width:240px}.nx-table-task-cell button{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:7px;cursor:pointer;padding:0 8px}.nx-table-people{display:block;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nx-table-progress{display:grid;grid-template-columns:80px auto;align-items:center;gap:4px}
.nx-telegram-settings{display:grid;gap:8px}.nx-telegram-body,.nx-telegram-switches{display:grid;gap:8px}.nx-telegram-identity{display:grid;gap:4px;padding:8px 10px;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface-2)}.nx-telegram-identity small{color:var(--nx-muted)}.nx-telegram-switches{grid-template-columns:repeat(2,minmax(0,1fr))}.nx-telegram-actions{display:flex;gap:8px;flex-wrap:wrap}.nx-telegram-link-card{display:grid;grid-template-columns:150px minmax(0,1fr);gap:12px;align-items:center;border:1px solid var(--nx-border);border-radius:11px;background:var(--nx-surface-2);padding:10px}.nx-telegram-link-card img{width:150px;height:150px;object-fit:contain;border-radius:8px;background:#fff;padding:5px}.nx-telegram-link-card>div{display:grid;gap:8px}.nx-telegram-link-card small{color:var(--nx-muted)}
@media(min-width:1180px){.nx-global-create-fab{inset-inline-end:26px}}
@media(max-width:980px){.nx-task-search{flex:1 1 180px}.nx-task-view-toggle,.nx-column-picker{align-self:stretch}.nx-global-create-fab{inset-block-end:max(76px,calc(var(--nx-safe-bottom) + 68px));min-width:50px;padding:0 14px}.nx-content{padding-bottom:124px}}
@media(max-width:767px){.nx-top-create{display:none}.nx-task-search{flex:1 1 100%}.nx-task-view-toggle{width:100%}.nx-task-view-toggle button{flex:1}.nx-column-picker{width:100%}.nx-column-picker>summary{width:100%}.nx-task-table-scroll{max-height:calc(var(--next-visual-height,100dvh) - 260px)}.nx-global-create-fab>b{display:none}.nx-global-create-fab{width:52px;height:52px;padding:0;justify-content:center;border-radius:50%}.nx-telegram-switches{grid-template-columns:1fr}.nx-telegram-link-card{grid-template-columns:1fr}.nx-telegram-link-card img{margin:auto}}
@media(max-width:390px){.nx-task-toolbar>*{flex:1 1 100%}.nx-telegram-actions .nx-button{width:100%}}
.nx-contact-icon{width:34px;height:34px;border:1px solid var(--nx-border);border-radius:9px;background:var(--nx-surface);display:inline-grid;place-items:center;text-decoration:none;color:var(--nx-text);font-weight:700}.nx-contact-icon:hover,.nx-telegram-person-link:hover{border-color:var(--nx-primary);color:var(--nx-primary)}.nx-telegram-contact{color:#168bd2}.nx-telegram-person-link{display:inline-flex;margin-top:3px;font-size:0.75rem;color:#168bd2;text-decoration:none;font-weight:600}.nx-assignment-actions{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.nx-admin-assignment-list em{font-style:normal;font-size:0.75rem;color:var(--nx-muted);display:block;white-space:pre-wrap}.nx-retention-table{display:grid;gap:0;border:1px solid var(--nx-border);border-radius:var(--nx-radius);overflow:hidden}.nx-retention-head,.nx-retention-row{display:grid;grid-template-columns:minmax(180px,1fr) 180px 180px 90px;align-items:center;gap:8px;padding:7px 9px}.nx-retention-head{background:var(--nx-surface-2);font-size:0.7812rem;color:var(--nx-muted)}.nx-retention-row{border-top:1px solid var(--nx-border)}.nx-retention-row input{min-height:36px;border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface);color:var(--nx-text);padding:5px 7px;width:100%}
@media(max-width:767px){.nx-retention-head{display:none}.nx-retention-row{grid-template-columns:1fr 1fr}.nx-retention-row strong{grid-column:1/-1}.nx-retention-row .nx-button{grid-column:1/-1}.nx-admin-row-actions{flex-wrap:wrap}}

/* Güvenlik yüzeyi: passkey, parola, iki adımlı doğrulama.
   Fiziksel left/right yerine mantıksal özellikler kullanılır, böylece Arapça
   RTL ve İngilizce LTR aynı kuralla doğru çalışır. */
.nx-login-alt{display:grid;gap:8px;margin-block-start:10px}
.nx-login-alt-label{text-align:center;font-size:0.7812rem;color:var(--nx-muted);position:relative}
.nx-login-alt-label::before,.nx-login-alt-label::after{content:"";position:absolute;inset-block-start:50%;width:calc(50% - 18px);height:1px;background:var(--nx-border)}
.nx-login-alt-label::before{inset-inline-start:0}
.nx-login-alt-label::after{inset-inline-end:0}
.nx-security-grid{align-items:start}
.nx-security-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.nx-security-list li{display:flex;align-items:center;justify-content:space-between;gap:8px;
  border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2);padding:7px 9px;min-width:0}
.nx-security-list li>span{display:grid;min-width:0}
.nx-security-list strong{font-size:0.8125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-security-list small{font-size:0.7812rem;color:var(--nx-muted)}
.nx-mfa-qr{width:168px;height:168px;align-self:center;border-radius:var(--nx-radius);background:#fff;padding:7px;border:1px solid var(--nx-border)}
.nx-backup-codes{display:grid;gap:8px;border:1px solid color-mix(in srgb,var(--nx-warning) 40%,var(--nx-border));
  background:color-mix(in srgb,var(--nx-warning) 7%,transparent);border-radius:11px;padding:10px;margin-block-start:9px}
.nx-backup-code-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:4px}
.nx-backup-code-grid code{font-size:0.8125rem;letter-spacing:.5px;text-align:center;
  border:1px solid var(--nx-border);border-radius:7px;background:var(--nx-surface);padding:5px 4px}
@media(max-width:767px){.nx-mfa-qr{width:140px;height:140px}}

/* Kayıtlı görünüm kontrolü: araç çubuğundaki diğer kontrollerle aynı ölçüler. */
.nx-saved-view{display:grid;gap:4px;min-width:0}
.nx-saved-view>span{font-size:0.75rem;color:var(--nx-muted);font-weight:700}
.nx-saved-view select{min-height:32px;min-width:132px;border:1px solid var(--nx-border);border-radius:8px;
  background:var(--nx-surface);color:var(--nx-text);padding:4px 7px;font-size:0.8125rem}
.nx-saved-view-actions{display:flex;align-items:end;gap:4px}
.nx-saved-view-actions button{min-height:32px;padding:4px 9px;font-size:0.7812rem;font-weight:700;cursor:pointer;
  border:1px solid var(--nx-border);border-radius:8px;background:var(--nx-surface);color:var(--nx-text)}
.nx-saved-view-actions button:hover:not(:disabled){background:var(--nx-surface-2)}
.nx-saved-view-actions button:disabled{opacity:.55;cursor:default}
@media(max-width:767px){.nx-saved-view select{min-width:0;width:100%}.nx-saved-view-actions button{flex:1}}

/* RTL'de kenar çubuğu: grid zaten yön duyarlıdır — RTL'de ilk parça sağa gelir,
   .nx-sidebar{grid-column:1} bu yüzden Arapça'da menüyü kendiliğinden sağa koyar.
   Daha önce burada gridi ters çeviren [dir="rtl"] kuralları vardı; onlar doğru
   dönüşü iptal edip menüyü solda tutuyordu. Kenarlıklar da mantıksal
   (border-inline-end) olduğu için kendiliğinden doğru tarafa geçer.
   Buraya yeniden fiziksel yön kuralı eklenmemeli. */

/* MASTER GROUP marka yerlesimi.
   Marka isareti artik harf degil gercek logo, bu yuzden kap seffaf: kendi
   lacivertine sahip bir isaretin altina ikinci bir lacivert zemin koymak
   isareti bogar. Marka politikasi ayrica logoya golge/parlama eklemeyi
   yasakliyor, o yuzden golge de kaldirildi. */
.nx-brand-mark:has(img){background:transparent;box-shadow:none;border-radius:0;width:auto;height:auto}
.nx-brand-mark img{display:block;width:36px;height:auto}
.nx-mobile-brand .nx-brand-mark img{width:31px}

/* Giris ekrani tam kilit. Acik zemin surumundeki "MASTER" yazisi koyu
   lacivert oldugu icin koyu temada okunmaz; bu yuzden iki resmi surum var
   ve tema hangisinin gorunecegine karar veriyor. */
.nx-login-lockup{display:grid;justify-items:center;gap:12px;text-align:center}
.nx-lockup-img{max-width:132px;height:auto}
.nx-lockup-dark{display:none}
[data-theme="dark"] .nx-lockup-light{display:none}
[data-theme="dark"] .nx-lockup-dark{display:block}
@media(prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .nx-lockup-light{display:none}
  :root:not([data-theme="light"]) .nx-lockup-dark{display:block}
}

/* Altin imza. Marka kurali: altin %5'i gecmez ve "buyuk dolu altin blok"
   olmaz — secili durum lacivert kalir, altin yalnizca ince bir isaret olarak
   yonu gosterir. Bu yuzden arka plan degil, 2 piksellik bir kenar kullanilir. */
.nx-nav-item.active{position:relative}
.nx-nav-item.active::before{content:"";position:absolute;inset-block:6px;inset-inline-start:0;
  width:2px;border-radius:2px;background:var(--nx-accent)}
.nx-mobile-nav .nx-nav-item.active::before{inset-block:auto;inset-inline:30%;inset-block-start:2px;height:2px;width:auto}
/* Secili sekmede altin alt cizgi kurali r153'te kaldirildi: secili durum
   artik koyu hapin icinde DOLU beyaz bir cip, yani zaten en guclu isaret.
   Beyaz cipin altina ayrica altin cizgi cekmek bicimi kirletiyordu. */

/* ---------------------------------------------------------------------------
   MASTER GROUP gorsel dili: karakter, sivi cam, Master Axis
   --------------------------------------------------------------------------- */

/* MASTER People karakteri. Marka kurali: normal bir gorunum alaninda birden
   fazla ana karakter olmaz, bu yuzden karakter yalnizca bos/karsilama
   durumlarinda ve tek basina cikar. */
.nx-brand-character{display:block;width:auto;max-width:min(60%,220px);margin-inline:auto;
  filter:drop-shadow(0 10px 24px rgba(7,30,43,.14))}
.nx-empty .nx-brand-character{margin-block-end:4px}
@media(max-width:767px){.nx-brand-character{max-width:min(52%,150px)}}
@media(prefers-reduced-motion:no-preference){
  .nx-empty .nx-brand-character{/* Egri yayliydi (.16,1,.3,1 asiyordu). Kurumsal bir is yuzeyinde ziplama
     ucuz gorunuyor; standart giris egrisine cekildi. */
  animation:nx-character-settle var(--nx-dur-signature) var(--nx-ease-enter) both}
}
@keyframes nx-character-settle{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* Sivi cam. Marka kurali camı yalnizca yuzen/gecici yuzeylerde birakiyor:
   mobil alt navigasyon, ortu katmanlari, gecici kontroller. Her kartin
   varsayilan yuzeyi olarak kullanilmaz — o durumda okunabilirlik duser ve
   "gurultulu glassmorphism" yasak listesinde. */
.nx-mobile-nav,
.nx-overlay-bottom-sheet,
.nx-toast{
  background:color-mix(in srgb,var(--nx-surface) 72%,transparent);
  backdrop-filter:blur(18px) saturate(130%);
  -webkit-backdrop-filter:blur(18px) saturate(130%);
  border-color:color-mix(in srgb,var(--nx-border) 60%,transparent);
}
/* Saydamligi desteklemeyen tarayicida yuzey opak kalir: okunabilirlik
   estetikten once gelir. */
@supports not (backdrop-filter:blur(1px)){
  .nx-mobile-nav,.nx-overlay-bottom-sheet,.nx-toast{
    background:var(--nx-surface)}
}

/* r174 -- gorev detay penceresinin yavasligi. Olculdu: pencere acilirken
   yalnizca 6 istek gidiyor ve en yavasi 66 ms, yani sorun ag degil. Sorun
   surucu panelin `backdrop-filter:blur(18px) saturate(1.3)` kurali: panel
   273.000 px2 kapliyor ve ALTINDA 1.898 dugumluk gorev listesi mount halinde
   duruyor. Saydam yuzey yuzunden tarayici her karede o listeyi yeniden
   boyayip bulaniklastirmak zorunda kaliyor; panelin kendisi 200 dugum, yani
   maliyet panelin icerigi degil arkasi.

   Cam etkisi marka kuralinda "yuzen/gecici yuzeyler" icin. Surucu panel
   gecici degil, icinde form doldurulan bir CALISMA yuzeyi -- opak olmasi
   hem dogru hem hizli. Kucuk ve kisa omurlu yuzeyler (toast, alt sayfa,
   mobil navigasyon) cam kalmaya devam ediyor. */
.nx-overlay-drawer{
  background:var(--nx-surface);
  backdrop-filter:none;-webkit-backdrop-filter:none;
  /* Opak yuzey artik kendi boyama alanini kapatiyor: arkadaki liste
     panelin altinda yeniden boyanmiyor. */
  contain:paint;
}

/* Master Axis: yon ve ilerlemeyi anlatan ince cizgi. Marka kurali "ince,
   seyrek, cogunlukla lacivert/altin" diyor ve bir gorunum alaninda ikiden
   fazla guclu imza istemiyor. Bu yuzden yalnizca sayfa basliginda tek bir
   yatay eksen olarak kullanilir. */
.nx-page-heading .nx-eyebrow{position:relative;padding-inline-start:26px}
.nx-page-heading .nx-eyebrow::before{content:"";position:absolute;inset-block-start:50%;
  inset-inline-start:0;width:18px;height:1px;background:var(--nx-accent)}
.nx-page-heading .nx-eyebrow::after{content:"";position:absolute;inset-block-start:50%;
  inset-inline-start:18px;width:4px;height:4px;border-radius:50%;
  background:var(--nx-accent);transform:translateY(-1.5px)}


/* Cizilmis ikon seti (frontend-react/src/ui/BrandIcons.tsx).
   Olculer burada, yol verisi tek kaynakta: ikonun sekli ile arayuzdeki
   boyutu birbirinden bagimsiz degisebiliyor. Onceki Unicode glifleri
   font-size ile olceklendigi icin her cihazda farkli buyuklukteydi. */
.nx-brand-icon{width:22px;height:22px;flex:0 0 auto;display:block}
.nx-more-item .nx-brand-icon{width:24px;height:24px}
.nx-icon-button .nx-brand-icon,.nx-pill-button .nx-brand-icon{width:20px;height:20px}
.nx-top-create .nx-brand-icon{width:18px;height:18px}
.nx-global-create-fab .nx-brand-icon{width:22px;height:22px}


/* ---- Ana ekran panosu (HomeScreen + ActivityChart) --------------------------
   Marka referansindaki yapi: selamlama, egri, yon oklu sayaclar, son isler.
   Renkler tema degiskenlerinden okunuyor; grafik koyu temada da dogru cikiyor. */
/* Selamlama bandi. Duz bir baslik yerine markali bir yuzey: solda metin ve
   eylemler, sagda MASTER People figuru. Zemin lacivertin cok acik bir tonu -
   panonun geri kalani beyaz kartlardan olustugu icin band onlardan ayrisiyor. */
/* Selamlama: makette duz metin, kart degil. Figur sag sutundaki karakter
   kartinda duruyor - ikisinde birden olmasi fazlaydi. */
.nx-home-hero{display:flex;align-items:flex-end;justify-content:space-between;
  gap:16px;padding:2px 2px 0;background:none;border:0}
.nx-home-hero-text{display:grid;gap:4px;min-width:0;flex:1}
.nx-home-hero h1{margin:0;font-size:1.6875rem;letter-spacing:-.025em}
.nx-home-hero p:not(.nx-eyebrow){margin:0;color:var(--nx-muted)}
.nx-home-hero .nx-heading-actions{margin-top:11px;display:flex;gap:8px;flex-wrap:wrap}
/* Figur band yuksekligini belirlemesin: metin kisayken band gereksiz uzuyordu. */
.nx-home-hero-figure{height:132px;width:auto;flex:0 0 auto;align-self:flex-end;
  margin-block-end:-18px;object-fit:contain;pointer-events:none}

/* Grafik ile son isler yan yana. Grafik tek basina tam genislikteyken saginda
   genis bir bosluk kaliyordu. */
.nx-home-split{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(0,1fr);
  gap:16px;align-items:start}
.nx-home-split>.nx-panel{margin:0}

.nx-activity-chart{display:grid;gap:8px}
/* Zaman ekseni bilerek soldan saga; arayuz RTL oldugu icin metin capalari
   (text-anchor start/end) aynalanip etiketleri panelin disina tasiyordu.
   Yon burada sabitleniyor, ay adlari kendi icinde yine dogru yonde cizilir. */
.nx-activity-chart svg{width:100%;height:190px;overflow:visible;direction:ltr}
.nx-chart-grid line{stroke:var(--nx-border);stroke-width:1}
.nx-chart-scale text,.nx-chart-axis text{fill:var(--nx-muted);font-size:11px}
.nx-chart-area{fill:var(--nx-primary);opacity:.10;stroke:none}
.nx-chart-line{fill:none;stroke-width:2.25;stroke-linecap:round;stroke-linejoin:round;
  vector-effect:non-scaling-stroke}
.nx-chart-completed{stroke:var(--nx-primary)}
.nx-chart-created{stroke:var(--nx-accent)}
.nx-chart-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.nx-chart-legend small{color:var(--nx-muted);margin-inline-start:auto}
.nx-chart-key{display:inline-flex;align-items:center;gap:8px;font-size:0.8125rem;color:var(--nx-muted)}
.nx-chart-key::before{content:"";width:14px;height:3px;border-radius:2px;background:currentColor}
.nx-chart-key.completed{color:var(--nx-primary)}
.nx-chart-key.created{color:var(--nx-accent-strong)}

.nx-trend-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}
.nx-trend-tile{border:1px solid var(--nx-border);background:var(--nx-surface);
  border-radius:var(--nx-radius);padding:12px;min-height:104px;display:grid;
  align-content:start;gap:4px;text-align:start;cursor:default}
button.nx-trend-tile{cursor:pointer}
button.nx-trend-tile:hover{border-color:var(--nx-primary)}
.nx-trend-tile .nx-trend-label{color:var(--nx-muted);font-size:0.8125rem}
.nx-trend-tile strong{font-size:1.75rem;line-height:1.15;letter-spacing:-.02em}
.nx-trend-tile small{color:var(--nx-muted);font-size:0.75rem}
.nx-trend-tile.danger strong{color:var(--nx-danger)}
.nx-trend-tile.info strong{color:var(--nx-primary)}
.nx-trend-delta{display:inline-flex;align-items:center;gap:4px;font-size:0.75rem;font-weight:700}
.nx-trend-delta.up{color:var(--nx-success-text)}
.nx-trend-delta.down{color:var(--nx-danger-text)}
.nx-trend-delta.flat{color:var(--nx-muted)}

.nx-recent-list{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.nx-recent-list button{width:100%;border:0;background:transparent;border-radius:var(--nx-radius);
  padding:8px;display:grid;grid-template-columns:8px minmax(0,1fr) auto;gap:12px;
  align-items:center;text-align:start;cursor:pointer}
.nx-recent-list button:hover{background:var(--nx-surface-2)}
.nx-recent-list strong{display:block;font-size:0.875rem;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.nx-recent-list small{color:var(--nx-muted);font-size:0.75rem}
.nx-recent-list time{color:var(--nx-muted);font-size:0.75rem;white-space:nowrap}
.nx-recent-status{width:8px;height:8px;border-radius:50%;background:var(--nx-border)}
.nx-recent-status.s-completed,.nx-recent-status.s-verified{background:var(--nx-success)}
.nx-recent-status.s-blocked{background:var(--nx-danger)}
/* Durum noktasi altin degil: listede tekrarlanan dekoratif kullanim. */
.nx-recent-status.s-waiting_approval{background:var(--nx-warning)}
.nx-recent-status.s-in_progress,.nx-recent-status.s-accepted{background:var(--nx-primary)}

@media(max-width:1100px){.nx-trend-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .nx-home-split{grid-template-columns:1fr}
  .nx-home-hero-figure{height:108px}}
@media(max-width:767px){
  .nx-home-hero{padding:13px 14px;gap:12px;border-radius:12px}
  .nx-home-hero h1{font-size:1.1875rem}
  .nx-home-hero p:not(.nx-eyebrow){font-size:0.8125rem}
  /* Dar ekranda figur metin genisligini yiyor; band sade kaliyor. */
  .nx-home-hero-figure{display:none}
  .nx-home-split{grid-template-columns:1fr;gap:12px}
  .nx-trend-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .nx-trend-tile{min-height:84px;padding:9px;border-radius:11px}
  .nx-trend-tile strong{font-size:1.375rem}
  .nx-activity-chart svg{height:150px}
  /* Sabit olusturma dugmesi (FAB) zaten ekranda; basliktaki ikizi
     mobilde yer kaplayip iki satira sariyordu. */
  .nx-home-hero .nx-hide-mobile{display:none}
}
@media(max-width:390px){.nx-trend-grid{grid-template-columns:1fr 1fr}}


/* Giris ekraninda karakter. Genis ekranda kartin yaninda durur; dar ekranda
   gizlenir cunku orada tek is forma yer acmak. */
.nx-login-shell{gap:40px}
.nx-login-shell .nx-brand-character{display:none}
@media(min-width:900px){

  .nx-login-shell .nx-brand-character{display:block;filter:drop-shadow(0 18px 40px rgba(10,51,75,.18))}
}


/* ---- Karakterlerin arayuzdeki yerleri -------------------------------------
   Marka kitabi karakteri onboarding, bos durumlar, rehberlik, basari ve
   egitimle sinirliyor. Asagidaki uc yer de o cerceveye giriyor; her panoya
   karakter serpistirilmiyor. */

/* Onaya yollama: altin ucagi firlatan el. Onay kapaliyken sonuk duruyor,
   acildiginda tam renge geliyor - susleme degil, durumun isareti. */
.nx-create-approval>header{display:flex;align-items:center;gap:12px}
.nx-create-approval>header>div{flex:1;min-width:0}
.nx-approval-figure{width:auto;height:56px;flex:0 0 auto;order:-1;
  opacity:.32;filter:grayscale(.7);transition:opacity var(--nx-dur-standard) var(--nx-ease-standard),filter var(--nx-dur-standard) var(--nx-ease-standard)}
.nx-create-approval[data-enabled="true"] .nx-approval-figure{opacity:1;filter:none}

/* Raporlar basligi: oturup veriye bakan analist. */
.nx-reports-heading{align-items:center}
.nx-reports-figure{height:104px;width:auto;flex:0 0 auto;
  margin-block-end:-14px;margin-inline-start:12px}

/* Ust cubuk avatari: marka portresi.
   Genislik acikca veriliyor: .nx-avatar display:grid ve genisligi otomatik,
   icindeki %100 genislikteki gorsel ile dairesel bir bagimlilik olusuyordu ve
   tarayici gorseli dogal boyutunda (208x260) cizip cubugu bozuyordu. */
.nx-avatar-figure{overflow:hidden;padding:0;width:36px;height:36px;
  flex:0 0 36px;background:var(--nx-primary-soft)}
.nx-avatar-figure img{width:100%;height:100%;object-fit:cover;
  object-position:top center;display:block}

@media(max-width:767px){
  /* Dar ekranda bu uc gorsel yer kaplamaktan baska is yapmiyor. */
  .nx-approval-figure{height:40px}
  .nx-reports-figure{display:none}
  .nx-avatar-figure{width:34px;height:34px;flex:0 0 34px}
}


/* ---- Pano: dort sayac karti ------------------------------------------------
   Referans duzen: solda renkli ikon karesi, ortada etiket + buyuk sayi + birim,
   altta onceki doneme gore degisim. */
.nx-stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.nx-stat-tile{border:1px solid var(--nx-border);background:var(--nx-surface);
  border-radius:var(--nx-radius);padding:14px;min-height:112px;
  display:grid;grid-template-columns:44px minmax(0,1fr);grid-template-rows:auto auto;
  gap:4px 12px;align-content:start;text-align:start;cursor:default}
button.nx-stat-tile{cursor:pointer}
button.nx-stat-tile:hover{border-color:var(--nx-primary);
  box-shadow:0 8px 22px color-mix(in srgb,var(--nx-primary) 9%,transparent)}
.nx-stat-icon{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;
  grid-row:span 2;align-self:start}
.nx-stat-icon .nx-brand-icon{width:22px;height:22px}
/* Ton her sayacin anlamini tasiyor: geciken kirmizi, tamamlanan yesil. */
.nx-stat-icon.ton-bilgi{background:var(--nx-primary-soft);color:var(--nx-primary)}
.nx-stat-icon.ton-tehlike{background:color-mix(in srgb,var(--nx-danger) 12%,var(--nx-surface));color:var(--nx-danger)}
.nx-stat-icon.ton-uyari{background:var(--nx-accent-soft);color:var(--nx-accent-strong)}
.nx-stat-icon.ton-basari{background:color-mix(in srgb,var(--nx-success) 13%,var(--nx-surface));color:var(--nx-success-text)}
.nx-stat-body{display:grid;gap:var(--nx-s-hair);min-width:0}
.nx-stat-label{color:var(--nx-muted);font-size:0.75rem;text-transform:uppercase;
  letter-spacing:.06em;font-weight:600}
.nx-stat-body strong{font-size:1.875rem;line-height:1.1;letter-spacing:-.02em}
.nx-stat-unit{color:var(--nx-muted);font-size:0.75rem}
.nx-stat-trend{grid-column:2;display:inline-flex;align-items:center;gap:4px;
  font-size:0.75rem;font-weight:700}
.nx-stat-trend small{font-weight:400;color:var(--nx-muted)}
.nx-stat-trend.ton-iyi{color:var(--nx-success-text)}
.nx-stat-trend.ton-kotu{color:var(--nx-danger-text)}
.nx-stat-trend.ton-notr{color:var(--nx-muted)}

/* ---- Ekip yuku ------------------------------------------------------------- */
.nx-team-workload ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.nx-team-workload li{display:grid;grid-template-columns:34px minmax(0,1fr) minmax(90px,34%);
  align-items:center;gap:12px}
.nx-team-avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;
  background:var(--nx-primary-soft);color:var(--nx-primary-strong);
  font-weight:600;font-size:0.75rem}
.nx-team-name{display:grid;min-width:0}
.nx-team-name strong{font-size:0.8125rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-team-name small{color:var(--nx-muted);font-size:0.75rem}
.nx-team-bar{height:7px;border-radius:var(--nx-radius-pill);background:var(--nx-surface-2);overflow:hidden}
.nx-team-bar i{display:block;height:100%;border-radius:var(--nx-radius-pill);background:var(--nx-primary)}
/* Kisi basina sabit renk: ayni kisi her yenilemede ayni cubugu alsin. */
.nx-team-bar[data-renk="1"] i{background:var(--nx-accent-strong)}
.nx-team-bar[data-renk="2"] i{background:var(--nx-success)}
.nx-team-bar[data-renk="3"] i{background:#7c5cc4}
.nx-team-bar[data-renk="4"] i{background:#3f8ecb}

/* ---- Yaklasan teslimler ---------------------------------------------------- */
.nx-deadlines ul{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.nx-deadlines button{width:100%;border:0;background:transparent;border-radius:var(--nx-radius);
  padding:7px 8px;display:grid;grid-template-columns:42px minmax(0,1fr) auto;
  align-items:center;gap:12px;text-align:start;cursor:pointer}
.nx-deadlines button:hover{background:var(--nx-surface-2)}
.nx-deadline-date{display:grid;justify-items:center;background:var(--nx-surface-2);
  border-radius:9px;padding:4px 0}
.nx-deadline-date small{font-size:0.6875rem;color:var(--nx-muted);
  text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.nx-deadline-date strong{font-size:0.9375rem;line-height:1.1}
.nx-deadline-title strong{font-size:0.8125rem;display:block;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.nx-deadline-priority{font-size:0.6875rem;font-weight:600;white-space:nowrap}
.nx-deadline-priority.p-critical,.nx-deadline-priority.p-high{color:var(--nx-danger-text)}
.nx-deadline-priority.p-normal{color:var(--nx-muted);font-weight:400}
.nx-deadline-priority.p-low{color:var(--nx-muted)}

@media(max-width:1100px){.nx-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:767px){
  .nx-stat-grid{gap:8px}
  .nx-stat-tile{min-height:92px;padding:10px;grid-template-columns:36px minmax(0,1fr);gap:4px 9px;border-radius:12px}
  .nx-stat-icon{width:36px;height:36px;border-radius:var(--nx-radius)}
  .nx-stat-icon .nx-brand-icon{width:19px;height:19px}
  .nx-stat-body strong{font-size:1.5rem}
  .nx-team-workload li{grid-template-columns:30px minmax(0,1fr) 28%}
  .nx-team-avatar{width:30px;height:30px}
}


/* ---- Cizgi yonu (r153): kartlar golgesiz, kil payi cizgiyle ---------------
   Onceki yon tersiydi: kartlarin cizgisi kaldirilip golgeye birakilmisti.
   Olcum: vercel.com 900 ogede 5 cizgi ve 20 golge kullaniyor -- yani neredeyse
   duz bir yuzey ve keskin kenarlar. Golge ekran bulanik gosteriyordu; 1px
   cizgi hem daha keskin hem koyu temada daha guvenilir. */
/* `.nx-login-card` bu listeden CIKARILDI: diger kartlar acik zemin uzerinde
   duruyor ve orada kil payi cizgi dogru ayrimi veriyor. Giris karti ise koyu
   lacivert bir sayfanin uzerinde YUZUYOR; orada cizgi hicbir sey yapmiyor,
   ayrimi golge veriyor. Bu kural sonra geldigi icin kartin kendi golgesini
   siliyordu -- tarayicida olculdu, `box-shadow: none` cikiyordu. */
.nx-panel,.nx-launcher,.nx-stat-tile,.nx-trend-tile,
.nx-account-card,.nx-admin-card,.nx-rollout-summary{
  border-color:var(--nx-border);box-shadow:none}
.nx-topbar{border-bottom-color:var(--nx-border);background:var(--nx-bg);backdrop-filter:none}
.nx-sidebar{border-color:var(--nx-border);background:var(--nx-bg)}
.nx-content{background:var(--nx-bg)}


/* ---- Kabuk: yan menu ve ust cubuk (krem yon) -------------------------------
   Referans duzen: menude marka, aktif oge dolu lacivert hap, sagda sayi
   rozetleri; altta hizli olustur ve calisma alani karti. Ust cubukta genis
   arama kutusu ve saginda ad + unvan tasiyan kullanici karti. */
.nx-sidebar{padding:18px 14px;gap:8px}
.nx-brand{display:flex;align-items:center;gap:12px;padding:2px 6px 16px}
.nx-brand-mark{width:34px;height:30px;display:grid;place-items:center}
.nx-brand strong{font-size:0.9375rem;letter-spacing:.02em;display:block}
.nx-brand small{font-size:0.6875rem;color:var(--nx-muted);display:block}

.nx-nav-item{padding:10px 12px;border-radius:11px;font-weight:600;font-size:0.84375rem;gap:12px}
.nx-nav-item.active{background:var(--nx-primary);color:#fff;font-weight:700}
.nx-nav-item.active .nx-brand-icon{color:#fff}
.nx-nav-item:hover:not(.active){background:var(--nx-surface-2);color:var(--nx-text)}
/* Rozet varsayilan olarak sakin; yalnizca bildirim rozeti dikkat cekiyor. */
.nx-nav-badge{margin-inline-start:auto;background:var(--nx-surface-2);color:var(--nx-muted);
  border-radius:var(--nx-radius-pill);min-width:22px;height:20px;padding:0 6px;display:grid;place-items:center;
  font-size:0.6875rem;font-weight:600}
.nx-nav-badge.uyari{background:var(--nx-accent-soft);color:var(--nx-warning-text)}
.nx-nav-item.active .nx-nav-badge{background:rgba(255,255,255,.2);color:#fff}

.nx-sidebar-foot{margin-top:auto;border-top:0;padding:12px 0 0;display:grid;gap:8px}


/* r155 — kenar cubugunun kimlik karti.
   Onceden `.nx-workspace-card` adini kullaniyordu; ama AYNI adi gorev
   duzenleme ekrani da 12 bolumu icin kullaniyor. Bu satir dosyada daha sonra
   geldigi icin kazaniyordu ve o 12 bolumun HEPSI `display:flex;
   align-items:center` ile yatay sira olarak ciziliyordu -- baslik ve alan
   izgarasi yan yana dusuyordu. Bir sinif adi iki farkli bilesene hizmet
   edemez; kimlik karti kendi adini aldi. */
.nx-workspace-chip{display:flex;align-items:center;gap:12px;padding:10px;
  border:1px solid var(--nx-border);border-radius:var(--nx-radius);
  background:var(--nx-surface)}
.nx-workspace-chip>span:nth-child(2){display:grid;min-width:0;flex:1}
.nx-workspace-chip strong{font-size:0.78125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-workspace-chip small{font-size:0.6875rem;color:var(--nx-muted);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-workspace-mark{width:30px;height:30px;border-radius:9px;background:var(--nx-primary);
  display:grid;place-items:center;flex:0 0 auto}
.nx-workspace-mark img{filter:brightness(0) invert(1)}
.nx-sidebar-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding-inline:2px}
.nx-sidebar-meta .nx-release-label{font-size:0.6875rem;color:var(--nx-muted)}

.nx-topbar{height:64px;padding:8px 20px;gap:16px}
.nx-topbar-search{flex:1;max-width:520px;height:42px;border-radius:12px;
  border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-muted);
  display:flex;align-items:center;gap:12px;padding:0 14px;cursor:pointer;text-align:start}
.nx-topbar-search:hover{border-color:var(--nx-primary)}
.nx-topbar-search>span{flex:1;font-size:0.84375rem}
.nx-topbar-search kbd{font:inherit;font-size:0.6875rem;border:1px solid var(--nx-border);
  border-radius:var(--nx-radius-sm);padding:1px 6px;background:var(--nx-surface-2)}
.nx-user-chip{display:flex;align-items:center;gap:12px;padding-inline-start:12px;
  border-inline-start:1px solid var(--nx-border)}
.nx-user-text{display:grid;min-width:0;text-align:start}
.nx-user-text strong{font-size:0.84375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
.nx-user-text small{font-size:0.71875rem;color:var(--nx-muted)}

@media(max-width:900px){.nx-user-text{display:none}.nx-user-chip{border:0;padding:0}}
@media(max-width:767px){
  .nx-topbar-search{display:none}
  .nx-topbar{height:56px}
}


/* ---- Ana ekran: iki sutun + gorev tablosu + karakter karti ----------------- */
.nx-home-split{display:grid;grid-template-columns:minmax(0,1.62fr) minmax(0,1fr);
  gap:16px;align-items:start}
.nx-home-col{display:grid;gap:16px;min-width:0}

.nx-home-tasks>header{gap:12px}
.nx-home-tasks>header>div{flex:1}
.nx-home-tabs{display:flex;gap:20px;border-bottom:1px solid var(--nx-border);margin:10px -12px 0;padding:0 12px}
.nx-home-tabs button{border:0;background:none;padding:0 0 10px;cursor:pointer;
  font-size:0.8125rem;font-weight:600;color:var(--nx-muted)}
.nx-home-tabs button.active{color:var(--nx-primary);font-weight:600;
  box-shadow:inset 0 -2px 0 var(--nx-primary)}
.nx-home-table{width:100%;border-collapse:collapse;margin-top:2px}
.nx-home-table th{font-size:0.71875rem;font-weight:700;color:var(--nx-muted);
  text-align:start;padding:11px 6px 7px}
.nx-home-table td{font-size:0.8125rem;padding:10px 6px;border-top:1px solid var(--nx-border)}
.nx-home-table tbody tr{cursor:pointer}
.nx-home-table tbody tr:hover{background:var(--nx-surface-2)}
.nx-cell-title{font-weight:600;max-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-cell-due{color:var(--nx-muted);white-space:nowrap}
.nx-cell-priority{font-weight:700;white-space:nowrap}
.nx-cell-priority.p-critical,.nx-cell-priority.p-high{color:var(--nx-danger-text)}
/* Normal oncelik notr: gorevlerin ucte biri normal, altin orada dolgu
   maddesine donuyordu. Agirligi yalnizca yuksek ve kritik tasiyor. */
.nx-cell-priority.p-normal{color:var(--nx-muted);font-weight:400}
.nx-cell-priority.p-low{color:var(--nx-muted)}
.nx-cell-status{display:inline-block;border-radius:var(--nx-radius-pill);padding:3px 10px;
  font-size:0.71875rem;font-weight:700;white-space:nowrap;
  background:var(--nx-surface-2);color:var(--nx-muted)}
.nx-cell-status.s-in_progress,.nx-cell-status.s-accepted{background:var(--nx-primary-soft);color:var(--nx-primary)}
.nx-cell-status.s-completed,.nx-cell-status.s-verified{background:var(--nx-success-soft);color:var(--nx-success-text)}
.nx-cell-status.s-waiting_approval{background:var(--nx-accent-soft);color:var(--nx-warning-text)}
.nx-cell-status.s-blocked{background:var(--nx-danger-soft);color:var(--nx-danger-text)}

/* ============================================================================
   Gruplu gorev listesi (r109)
   Davranis durumun ADINA degil GRUBUNA bagli. Dokuz durum dort gruba dusuyor:
   baslamamis / aktif / bitti / kapali. Rapor ve gecikme hesabi grubu okur,
   ismi degil -- sirket kendi durumunu ekledinde bir sey kirilmasin diye.
   ========================================================================= */
.nx-stpill{display:inline-flex;align-items:center;gap:var(--nx-s1);
  border-radius:var(--nx-radius-pill);padding:3px 10px;font-size:0.6875rem;font-weight:600;
  letter-spacing:.01em;white-space:nowrap;line-height:1.5;
  background:var(--nx-surface-2);color:var(--nx-text)}
.nx-stpill .nx-stdot{width:8px;height:8px;border-radius:50%;
  background:currentColor;opacity:.9;flex:0 0 auto}
.nx-stpill.g-active{background:var(--nx-primary);color:var(--nx-on-fill)}
.nx-stpill.g-blocked{background:var(--nx-danger);color:var(--nx-on-fill)}
.nx-stpill.g-wait{background:var(--nx-warning);color:var(--nx-on-fill)}
.nx-stpill.g-done{background:var(--nx-success);color:var(--nx-on-fill)}
.nx-stpill.g-closed{background:var(--nx-neutral-fill);color:var(--nx-on-fill)}
/* Satir icindeki durum isareti: gruplama durumaysa hap yerine nokta. */
.nx-tg-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto;
  background:var(--nx-surface-2);box-shadow:inset 0 0 0 1.5px var(--nx-muted)}
.nx-tg-dot.g-active{background:var(--nx-primary);box-shadow:none}
.nx-tg-dot.g-blocked{background:var(--nx-danger);box-shadow:none}
.nx-tg-dot.g-wait{background:var(--nx-warning);box-shadow:none}
.nx-tg-dot.g-done{background:var(--nx-success);box-shadow:none}
.nx-tg-dot.g-closed{background:var(--nx-neutral-fill);box-shadow:none}

/* Oncelik bayragi. CLAUDE.md kurali korunuyor: altin mucevher, dolgu degil --
   oncelik altini KULLANMIYOR. Normal oncelik notr; ucte biri normal oldugu
   icin renk verilirse her ucuncu satir yanar. */
.nx-prflag{display:inline-flex;align-items:center;gap:var(--nx-s1);
  font-size:0.71875rem;font-weight:700;color:var(--nx-muted)}
.nx-prflag i{width:0;height:0;border-inline-start:7px solid currentColor;
  border-top:5px solid transparent;border-bottom:5px solid transparent}
.nx-prflag.p-critical{color:var(--nx-danger)}
.nx-prflag.p-high{color:var(--nx-warning)}
.nx-prflag.p-normal,.nx-prflag.p-low{color:var(--nx-muted)}
.nx-prflag.p-low i{opacity:.45}

/* Blok = sirket/departman kumesi. Yan cizgi RTL'de dogru tarafta durur. */
.nx-tg-block{background:var(--nx-surface);border-radius:var(--nx-radius);
  box-shadow:var(--nx-shadow);border-inline-start:3px solid var(--nx-primary);
  overflow:hidden;margin-bottom:var(--nx-s4)}

/* r174 -- her sirketin kendi seridi. Renk, sira numarasindan degil sirket
   kimliginden turetiliyor (bkz. renkIndeksi); boylece filtre degisince ayni
   sirket ayni renkte kaliyor. Serit 3px'ten 5px'e cikti, yoksa fark bakar
   bakmaz gorulmuyordu. Ton, karanlik temada da okunur olacak sekilde secildi
   ve baslikta kucuk bir nokta olarak tekrarlaniyor. */
.nx-tg-block[data-renk]{border-inline-start-width:5px;border-inline-start-color:var(--nx-firma)}
.nx-tg-block[data-renk="0"]{--nx-firma:#2E9BD6}
.nx-tg-block[data-renk="1"]{--nx-firma:#E0A030}
.nx-tg-block[data-renk="2"]{--nx-firma:#3FB37F}
.nx-tg-block[data-renk="3"]{--nx-firma:#B978D9}
.nx-tg-block[data-renk="4"]{--nx-firma:#E2695E}
.nx-tg-block[data-renk="5"]{--nx-firma:#4C7FE0}
.nx-tg-block[data-renk="6"]{--nx-firma:#2FA9A2}
.nx-tg-block[data-renk="7"]{--nx-firma:#D4759F}
.nx-tg-block[data-renk="8"]{--nx-firma:#8FA63C}
.nx-tg-block[data-renk="9"]{--nx-firma:#C97B3F}
.nx-tg-block[data-renk] .nx-tg-blockhead strong::before{
  content:"";display:inline-block;vertical-align:middle;
  width:8px;height:8px;border-radius:50%;background:var(--nx-firma);
  margin-inline-end:var(--nx-s2)}
.nx-tg-blockhead{padding:var(--nx-s3) var(--nx-s4) var(--nx-s1)}
.nx-tg-blockhead small{display:block;font-size:0.6875rem;color:var(--nx-muted);font-weight:600}
.nx-tg-blockhead strong{font-size:0.875rem;font-weight:600}

.nx-tg-group{padding:0 var(--nx-s4) var(--nx-s2)}
.nx-tg-grouphead{display:flex;align-items:center;gap:var(--nx-s2);
  padding:var(--nx-s2) 0}
.nx-tg-caret{background:none;border:0;cursor:pointer;color:var(--nx-muted);
  font-size:0.625rem;padding:2px 4px;border-radius:var(--nx-radius-sm)}
.nx-tg-count{color:var(--nx-muted);font-size:0.71875rem;font-weight:700;
  font-variant-numeric:tabular-nums}
.nx-tg-headadd{margin-inline-start:auto;background:none;border:0;cursor:pointer;
  color:var(--nx-muted);font-size:0.875rem;font-weight:600;
  padding:2px 6px;border-radius:var(--nx-radius-sm);opacity:0;
  transition:opacity var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-tg-grouphead:hover .nx-tg-headadd,.nx-tg-headadd:focus-visible{opacity:1}

/* Sutun basligi her grubun ICINDE tekrarlaniyor -- kaydirinca kaybolmuyor. */
.nx-tg-cols,.nx-tg-row{display:grid;
  grid-template-columns:minmax(0,1fr) 132px 128px 108px;
  align-items:center;gap:var(--nx-s2)}
.nx-tg-cols{padding:var(--nx-s1) var(--nx-s2);border-bottom:1px solid var(--nx-line);
  font-size:0.6875rem;font-weight:700;color:var(--nx-muted)}
.nx-tg-row{padding:var(--nx-s2);border-bottom:1px solid var(--nx-line);
  cursor:pointer;background:none;border-inline:0;border-top:0;width:100%;
  text-align:start;font:inherit;color:inherit}
.nx-tg-row:last-of-type{border-bottom:0}
.nx-tg-row:hover{background:var(--nx-surface-2)}
.nx-tg-row:focus-visible{outline:2px solid var(--nx-primary);outline-offset:-2px}
.nx-tg-name{display:flex;align-items:center;gap:var(--nx-s2);min-width:0}
.nx-tg-title{font-size:0.8125rem;font-weight:600;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.nx-tg-chip{font-size:0.625rem;font-weight:700;padding:1px 7px;border-radius:var(--nx-radius-pill);
  background:var(--nx-primary-soft);color:var(--nx-primary);white-space:nowrap}
.nx-tg-people{display:flex;align-items:center;gap:2px}
.nx-tg-ava{width:22px;height:22px;border-radius:50%;background:var(--nx-primary);
  color:var(--nx-on-fill);font-size:0.5625rem;font-weight:600;
  display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
.nx-tg-due{font-size:0.71875rem;color:var(--nx-muted);font-variant-numeric:tabular-nums}
.nx-tg-due[data-overdue="true"]{color:var(--nx-danger);font-weight:700}

/* Eylemler hover'da beliriyor: satir sakinken yalnizca veri gosteriyor. */
.nx-tg-actions{display:flex;align-items:center;gap:2px;opacity:0;
  transition:opacity var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-tg-row:hover .nx-tg-actions,.nx-tg-row:focus-within .nx-tg-actions{opacity:1}

.nx-tg-add{display:flex;align-items:center;gap:var(--nx-s2);width:100%;
  padding:var(--nx-s2);background:none;border:0;cursor:pointer;
  font:inherit;text-align:start;color:var(--nx-muted);font-size:0.78125rem;
  font-weight:700;border-radius:var(--nx-radius-sm)}
.nx-tg-add:hover{background:var(--nx-surface-2);color:var(--nx-text)}
.nx-tg-add b{color:var(--nx-primary);font-size:0.9375rem}

.nx-tg-newrow{display:flex;align-items:center;gap:var(--nx-s2);
  padding:var(--nx-s2);border-top:1px solid var(--nx-line)}
.nx-tg-newrow input{flex:1;min-width:0}
.nx-tg-newrow .nx-tg-newsave{background:var(--nx-primary);color:var(--nx-on-fill);
  border:0;border-radius:var(--nx-radius-sm);padding:6px 12px;font-weight:700;
  cursor:pointer;font-size:0.78125rem}
.nx-tg-newrow .nx-tg-newcancel{background:none;border:0;cursor:pointer;
  color:var(--nx-muted);font-size:0.78125rem;font-weight:600}

/* Tabloda sutun ekleme basligi ve kart izgarasindaki ekleme karti (r109).
   Ayni "+" davranisi her gorunumde bulunsun diye. */
.nx-th-addcol{width:38px;text-align:center}
.nx-th-addcol button{border:0;background:none;cursor:pointer;color:var(--nx-primary);
  font-size:0.9375rem;font-weight:600;padding:2px 6px;border-radius:var(--nx-radius-sm)}
.nx-th-addcol button:hover{background:var(--nx-surface-2)}
.nx-card-add{border:1.5px dashed var(--nx-line);border-radius:var(--nx-radius);
  min-height:96px;display:grid;place-items:center;background:var(--nx-surface)}
.nx-card-add>button{display:grid;justify-items:center;gap:var(--nx-s1);
  border:0;background:none;cursor:pointer;color:var(--nx-muted);
  font:inherit;font-size:0.8125rem;font-weight:700;padding:var(--nx-s3)}
.nx-card-add>button b{color:var(--nx-primary);font-size:1.25rem}
.nx-card-add:hover{border-color:var(--nx-primary);background:var(--nx-surface-2)}
.nx-card-add .nx-tg-newrow{border-top:0;width:100%;padding:var(--nx-s2)}

/* Karakter karti: durum degistiginde poz ve metin de degisiyor. */
.nx-character-card{display:grid;justify-items:center;text-align:center;gap:4px;padding:18px}
.nx-character-card img{height:172px;width:auto;margin-bottom:4px}
.nx-character-card strong{font-size:0.9375rem}
.nx-character-card p{color:var(--nx-muted);font-size:0.8125rem;line-height:1.55;margin:0}
.nx-character-card .nx-button{margin-top:8px}

@media(max-width:1100px){.nx-home-split{grid-template-columns:1fr}}
@media(max-width:767px){
  .nx-home-split{gap:12px}
  .nx-home-col{gap:12px}
  .nx-home-tabs{gap:16px;overflow-x:auto}
  .nx-home-tabs button{white-space:nowrap}
  .nx-character-card img{height:132px}
}


/* ---- Faz 2: kartlasmayi azalt ----------------------------------------------
   Her icerik yuvarlak dikdortgen istemez. Ekip yuku ve son etkinlik, gorev
   tablosunun yanindaki ikincil bilgi; kart olarak ayni gorsel agirligi
   tasiyorlardi. Baslik + ince ayrac yeterli, sayfa daha sakin. */
.nx-team-workload,.nx-home-recent{background:none;box-shadow:none;border:0;padding:0}
.nx-team-workload>header,.nx-home-recent>header{padding:0 0 var(--nx-s3);
  border-bottom:1px solid var(--nx-border);margin-bottom:var(--nx-s3)}
.nx-team-workload>ul,.nx-home-recent .nx-recent-list{padding:0}
.nx-home-recent .nx-recent-list button{padding-inline:0}


/* ---- Iskelet yukleme -------------------------------------------------------
   Parilti hareketi prefers-reduced-motion altinda duruyor; o durumda duz bir
   yuzey kaliyor ve duzen yine sabit. */
.nx-skeleton{display:grid;gap:var(--nx-s2)}
.nx-skeleton-row{height:14px;border-radius:var(--nx-radius-sm);
  background:linear-gradient(90deg,var(--nx-surface-2) 25%,
    color-mix(in srgb,var(--nx-surface-2) 55%,var(--nx-surface)) 50%,var(--nx-surface-2) 75%);
  background-size:200% 100%;animation:nx-skeleton-kay var(--nx-dur-shimmer) var(--nx-ease-standard) infinite}
.nx-skeleton-row:nth-child(3n){width:82%}
.nx-skeleton-row:nth-child(3n+2){width:94%}
.nx-skeleton-table .nx-skeleton-row{height:36px;border-radius:8px}
.nx-skeleton-card .nx-skeleton-row{height:88px;border-radius:var(--nx-radius)}
@keyframes nx-skeleton-kay{from{background-position:200% 0}to{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.nx-skeleton-row{animation:none;background:var(--nx-surface-2)}}


/* ---- Etkinlik akisi ---------------------------------------------------------
   Kart degil satir: denetim bilgisi kutuya konunca goz asagi tararken hizayi
   kaybediyor. Zaman sabit genislikte ve tabular rakamla; boylece saatler alt
   alta hizali duruyor ve liste bir kutuk gibi okunuyor. */
.nx-activity-feed{background:none;box-shadow:none;border:0;padding:0}
.nx-activity-feed>header{padding:0 0 var(--nx-s3);
  border-bottom:1px solid var(--nx-border);margin-bottom:var(--nx-s3)}
.nx-activity-list{list-style:none;margin:0;padding:0;display:grid;gap:var(--nx-s3)}
.nx-activity-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  gap:var(--nx-s3);align-items:baseline}
.nx-activity-list time{font-size:0.71875rem;color:var(--nx-muted);
  font-variant-numeric:tabular-nums;white-space:nowrap}
.nx-activity-list button{border:0;background:none;padding:0;text-align:start;
  cursor:pointer;font-size:0.8125rem;line-height:1.5;color:var(--nx-text);min-width:0}
.nx-activity-list button:hover b{text-decoration:underline}
.nx-activity-list strong{font-weight:700}
.nx-activity-list span{color:var(--nx-muted)}
.nx-activity-list b{font-weight:600}
/* Nokta yalnizca gercekten ayirt edici eylemlerde renkleniyor; her satiri
   renklendirmek listeyi okunmaz yapiyordu. */
.nx-activity-list i{width:6px;height:6px;border-radius:50%;
  background:var(--nx-border);align-self:center}
.nx-activity-list li.ton-basari i{background:var(--nx-success)}
.nx-activity-list li.ton-onay i{background:var(--nx-accent)}
.nx-activity-list li.ton-uyari i{background:var(--nx-danger)}

/* Hizli erisim basligi tek satir: aciklama bir kez okunur, sonra surekli
   dikey alan harciyordu. */
.nx-launcher>header small{display:none}


/* ---- Gorev tablosu: tarama yuzeyi -----------------------------------------
   Her hucre bir form kontroluydu; 9 sutun x 19 satir = 171 input demek ve goz
   tarayamiyordu. Kontroller yerinde duruyor (satir ici duzenleme kayboluyor
   degil), yalnizca uzerlerine gelinene kadar metin gibi gorunuyorlar. */
.nx-editable-task-table input:not([type="checkbox"]),
.nx-editable-task-table select{
  border-color:transparent;background:transparent;box-shadow:none;
  padding-inline:var(--nx-s1);min-height:32px;
  transition:border-color var(--nx-dur-micro) var(--nx-ease-standard),
             background var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-editable-task-table tr:hover input:not([type="checkbox"]),
.nx-editable-task-table tr:hover select{border-color:var(--nx-border)}
.nx-editable-task-table input:focus,.nx-editable-task-table select:focus{
  border-color:var(--nx-primary);background:var(--nx-surface)}
.nx-editable-task-table input:disabled,.nx-editable-task-table select:disabled{
  opacity:1;color:var(--nx-text)}

/* Durum: hap gorunumu. Deger CSS'e sarmalayicidaki data ile geliyor - select
   kendi degerini secici olarak veremiyor. */
.nx-cell-wrap{display:inline-block;border-radius:var(--nx-radius-pill);padding:1px 2px}
.nx-cell-wrap[data-status="in_progress"],.nx-cell-wrap[data-status="accepted"]{background:var(--nx-primary-soft)}
.nx-cell-wrap[data-status="completed"],.nx-cell-wrap[data-status="verified"]{background:var(--nx-success-soft)}
.nx-cell-wrap[data-status="waiting_approval"]{background:var(--nx-warning-soft)}
.nx-cell-wrap[data-status="blocked"],.nx-cell-wrap[data-status="cancelled"]{background:var(--nx-danger-soft)}
.nx-cell-wrap[data-status] select{font-weight:600;font-size:0.78125rem}

/* Oncelik: yalnizca yuksek ve kritik agirlik tasiyor. Gorevlerin ucte biri
   normal; hepsi renklendiginde hicbiri one cikmiyordu. */
.nx-cell-wrap[data-priority="critical"] select{color:var(--nx-danger-text);font-weight:700}
.nx-cell-wrap[data-priority="high"] select{color:var(--nx-danger-text);font-weight:600;opacity:.8}
.nx-cell-wrap[data-priority="normal"] select,
.nx-cell-wrap[data-priority="low"] select{color:var(--nx-muted)}

/* Geciken: kucuk bir nokta. Kirmizi satir listeyi okunmaz yapiyordu. */
.nx-cell-wrap[data-overdue] input{color:var(--nx-danger-text);font-weight:600}
.nx-cell-wrap[data-overdue]::before{content:"●";font-size:7px;color:var(--nx-danger);
  vertical-align:middle;margin-inline-end:var(--nx-s1)}

/* Siralanabilir baslik */
.nx-th-sortable{cursor:pointer;user-select:none;white-space:nowrap}
.nx-th-sortable:hover{color:var(--nx-text)}
.nx-th-sortable.aktif{color:var(--nx-primary)}
.nx-th-sortable span{margin-inline-start:var(--nx-s1);font-size:0.625rem}


/* Yerlesik kontrol susleri (takvim ikonu, sayi oklari, acilir menu oku) satirin
   uzerine gelinene kadar gizli. Hepsi ayni anda gorununce tablo hala bir form
   gibi okunuyordu; duzenleme yine tek tikla erisilebilir. */
.nx-editable-task-table input::-webkit-calendar-picker-indicator,
.nx-editable-task-table input::-webkit-inner-spin-button,
.nx-editable-task-table input::-webkit-outer-spin-button{
  opacity:0;transition:opacity var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-editable-task-table tr:hover input::-webkit-calendar-picker-indicator,
.nx-editable-task-table input:focus::-webkit-calendar-picker-indicator,
.nx-editable-task-table tr:hover input::-webkit-inner-spin-button,
.nx-editable-task-table tr:hover input::-webkit-outer-spin-button{opacity:.55}
.nx-editable-task-table select{
  appearance:none;-webkit-appearance:none;background-image:none}
.nx-editable-task-table tr:hover select,.nx-editable-task-table select:focus{
  appearance:auto;-webkit-appearance:auto}


/* Kart gorunumundeki tekrarlanan gurultu. Her kartta ayni bos satirlar vardi:
   hicbir sey ilerlememisken "0%" cubugu ve "gorev noktasi yok" notu. Bilgi
   tasimadiklari icin yalnizca kartin yuksekligini artiriyorlardi. */
.nx-task-card .nx-task-progress[data-empty="true"],
.nx-task-card .nx-task-points-empty{display:none}


/* ---- Gorev olusturma: hizli modda katlanan alanlar -------------------------
   Sirket, departman, tarih ve oncelik dordu de dolu geliyor ve cogu kullanici
   icin degismiyor; dordunu birden secici olarak gostermek "hizli" modu yavas
   yapiyordu. Degerler kaybolmuyor, tek satirda ozet olarak duruyor. */
.nx-create-summary{display:flex;align-items:center;gap:var(--nx-s3);flex-wrap:wrap;
  padding:var(--nx-s2) 0;color:var(--nx-muted);font-size:0.8125rem}
.nx-create-summary button{border:0;background:none;color:var(--nx-primary);
  font-weight:700;font-size:0.8125rem;cursor:pointer;padding:0}
.nx-create-summary button::before{content:"+";margin-inline-end:var(--nx-s1);font-weight:600}
.nx-create-summary button:hover{text-decoration:underline}
.nx-create-grid.nx-gizli{display:none}


/* ---- Gorev calisma alani basligi ------------------------------------------
   §14 baslikta kimlik, durum, oncelik, sorumlu, teslim ve ana eylemleri
   istiyor. Durum ve ilerleme zaten vardi; oncelik sag raydaki bir secicide,
   teslim bir form alanindaydi. */
.nx-task-summary-facts{display:flex;align-items:baseline;gap:var(--nx-s6);
  flex-wrap:wrap;padding-top:var(--nx-s3);margin-top:var(--nx-s3);
  border-top:1px solid var(--nx-border)}
.nx-fact{display:grid;gap:2px;min-width:0}
.nx-fact small{font-size:0.6875rem;color:var(--nx-muted);font-weight:600}
.nx-fact b{font-size:0.84375rem;font-weight:600;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;max-width:220px}
/* Oncelik kurali her yerde ayni: yalnizca yuksek ve kritik agirlik tasir. */
.nx-fact-priority.p-critical{color:var(--nx-danger-text);font-weight:700}
.nx-fact-priority.p-high{color:var(--nx-danger-text);opacity:.8}
.nx-fact-priority.p-normal,.nx-fact-priority.p-low{color:var(--nx-muted);font-weight:400}
.nx-fact-overdue{color:var(--nx-danger-text)}
.nx-fact-overdue::before{content:"●";font-size:7px;vertical-align:middle;
  margin-inline-end:var(--nx-s1);color:var(--nx-danger)}
@media(max-width:767px){.nx-task-summary-facts{gap:var(--nx-s4)}.nx-fact b{max-width:140px}}


/* ---- Baglam rayi: okuma kipi ----------------------------------------------
   Kontroller kaldirilmiyor - satir ici duzenleme aynen duruyor - yalnizca
   duzenleme kipi acilana kadar metin gibi gorunuyorlar. Tabloda ayni yontem
   ise yaradi. */
.nx-rail-toggle{display:flex;justify-content:flex-end;padding-bottom:var(--nx-s2)}
.nx-rail-toggle button{border:0;background:none;color:var(--nx-primary);
  font-weight:700;font-size:0.78125rem;cursor:pointer;padding:var(--nx-s1) 0}
.nx-rail-toggle button:hover{text-decoration:underline}
/* Ozgullugu bilerek yuksek: .nx-task-workspace-v2 input:not(...):not(...)
   kurali (0,3,1) daha guclu oldugu icin ilk denemede tarih ve sayi alanlari
   kutu gorunmeye devam ediyordu - seciciler tesadufen calisiyordu cunku orada
   ozgullukler esitti ve bu kural sonra geliyordu. */
.nx-task-workspace-v2 aside.nx-rail-quiet input:not([type="checkbox"]),
.nx-task-workspace-v2 aside.nx-rail-quiet select,
.nx-task-workspace-v2 aside.nx-rail-quiet textarea{
  border-color:transparent;background:transparent;padding-inline:0;
  min-height:auto;pointer-events:none;resize:none}
.nx-task-workspace-v2 aside.nx-rail-quiet select{appearance:none;-webkit-appearance:none}
.nx-task-workspace-v2 aside.nx-rail-quiet input::-webkit-calendar-picker-indicator,
.nx-task-workspace-v2 aside.nx-rail-quiet input::-webkit-inner-spin-button{display:none}
/* Bos bir alan okuma kipinde hicligi ile degil bir tire ile gorunmeli. */
.nx-rail-quiet .nx-field{gap:0}

/* ---------------------------------------------------------------------------
   Faz 8 - Bildirim ekrani.
   Cekmecedeki .nx-notification kartlari dar bir panelde yan yana durmak icin
   tasarlandi; tam sayfa listede ayni kart yatayda dagiliyor. Bu yuzden ekranin
   kendi listesi var: tek sutun, satirlar arasi ince ayrac, okunmamislar icin
   yalnizca bir nokta ve daha koyu bir baslik. Altin yok - bildirim gundelik bir
   akis, mucevher degil.
   --------------------------------------------------------------------------- */
.nx-notifications-page .nx-unread-count{color:var(--nx-primary);font-weight:700}
.nx-notif-filters{display:flex;gap:6px}
.nx-notif-filters button{border:1px solid var(--nx-border);background:var(--nx-surface);
  border-radius:var(--nx-radius-pill);padding:5px 13px;font:inherit;font-size:0.8125rem;color:var(--nx-muted);
  cursor:pointer;transition:color var(--nx-dur-micro) var(--nx-ease-standard),
  border-color var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-notif-filters button:hover{color:var(--nx-text);border-color:var(--nx-primary)}
.nx-notif-filters button.active{background:var(--nx-primary-soft);color:var(--nx-primary-strong);
  border-color:color-mix(in srgb,var(--nx-primary) 35%,var(--nx-border));font-weight:700}
.nx-notif-list{padding:0;overflow:hidden}
.nx-notif-list ul{list-style:none;margin:0;padding:0}
.nx-notif-list li+li{border-top:1px solid var(--nx-border)}
.nx-notif-list li>button{width:100%;border:0;background:transparent;font:inherit;color:inherit;
  text-align:start;cursor:pointer;padding:11px 14px;display:grid;
  grid-template-columns:7px 32px minmax(0,1fr) auto;align-items:center;gap:11px;
  transition:background var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-notif-list li>button:hover{background:var(--nx-surface-2)}
.nx-notif-dot{width:7px;height:7px;border-radius:50%;background:transparent}
.nx-notif-list li.okunmamis .nx-notif-dot{background:var(--nx-primary)}
.nx-notif-list li.okunmamis strong{font-weight:600}
.nx-notif-icon{width:32px;height:32px;border-radius:9px;display:grid;place-items:center}
.nx-notif-icon svg{width:17px;height:17px}
.nx-notif-icon.ton-bilgi{background:var(--nx-primary-soft);color:var(--nx-primary-strong)}
.nx-notif-icon.ton-uyari{background:var(--nx-warning-soft);color:var(--nx-warning-text)}
.nx-notif-icon.ton-tehlike{background:var(--nx-danger-soft);color:var(--nx-danger-text)}
.nx-notif-icon.ton-basari{background:var(--nx-success-soft);color:var(--nx-success-text)}
.nx-notif-text{display:grid;gap:2px;min-width:0}
.nx-notif-text strong{font-size:0.875rem;font-weight:600}
.nx-notif-text small{color:var(--nx-muted);font-size:0.8125rem;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.nx-notif-list time{color:var(--nx-muted);font-size:0.75rem;white-space:nowrap}
.nx-notif-more{width:100%;border:0;border-top:1px solid var(--nx-border);background:transparent;
  font:inherit;font-size:0.8125rem;color:var(--nx-primary);padding:11px;cursor:pointer}
.nx-notif-more:hover{background:var(--nx-surface-2)}
.nx-notif-more:disabled{color:var(--nx-muted);cursor:default}
@media(max-width:767px){
  .nx-notif-list li>button{grid-template-columns:7px 28px minmax(0,1fr) auto;gap:8px;padding:10px}
  .nx-notif-icon{width:28px;height:28px;border-radius:8px}
}


/* === faz9 === */
/* ==== FAZ 9 — Onaylar ve gecmis ==========================================
   Uc gorsel ekleme, hepsi var olan sinif ailelerinin uzerine:
   1. Gorev ozetindeki onay/engel/iade seridi.
   2. Zaman cizelgesi satirlarinin okunur hale gelmesi.
   3. Karari bekleyen gorev kartinin ayirt edilmesi.
   Yeni ekran, yeni panel, yeni renk yok. Altin kullanilmadi.               */


/* ---- 1. Ozet basligindaki onay/engel seridi ------------------------------
   Durum rozeti "bekliyor" diyor; serit "kimde ve neden" diyor. Nadiren
   ciziliyor: yalnizca gorev onayda beklerken, engelliyken ya da onaydan
   iade edilmisken. Sakin durumda hicbir sey eklemiyor.                     */
.nx-approval-strip{display:flex;align-items:flex-start;flex-wrap:wrap;
  gap:var(--nx-s8);margin-block-start:var(--nx-s8);
  padding:var(--nx-s6) var(--nx-s8);
  border:1px solid var(--nx-border);
  border-inline-start:3px solid var(--nx-muted);
  border-radius:var(--nx-radius-sm);background:var(--nx-surface-2)}
.nx-approval-strip>div{display:grid;gap:2px;min-width:0;flex:1 1 220px}
.nx-approval-strip strong{font-size:0.84375rem;font-weight:700;
  overflow-wrap:anywhere}
.nx-approval-strip small{font-size:0.75rem;color:var(--nx-muted);
  overflow-wrap:anywhere}
/* Gerekce/karar notu susturulmus bir yardim metni degil, isin kendisi. */
.nx-approval-strip .nx-approval-strip-note{color:var(--nx-text);
  border-inline-start:2px solid var(--nx-border);
  padding-inline-start:var(--nx-s6);margin-block-start:2px}
.nx-approval-strip>button{margin-inline-start:auto;align-self:center;
  flex:0 0 auto;font:inherit;font-size:0.75rem;cursor:pointer;
  white-space:nowrap;min-height:30px;padding-inline:var(--nx-s8);
  border:1px solid var(--nx-border);border-radius:var(--nx-radius-sm);
  background:var(--nx-surface);color:var(--nx-text);
  transition:border-color var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-approval-strip>button:hover{border-color:var(--nx-primary)}
/* Karar sende: uyari. Engel ya da iade: tehlike. */
.nx-approval-strip.is-mine{border-inline-start-color:var(--nx-warning);
  background:var(--nx-warning-soft)}
.nx-approval-strip.is-mine strong{color:var(--nx-warning-text)}
.nx-approval-strip.is-blocked,.nx-approval-strip.is-returned{
  border-inline-start-color:var(--nx-danger);background:var(--nx-danger-soft)}
.nx-approval-strip.is-blocked strong,
.nx-approval-strip.is-returned strong{color:var(--nx-danger-text)}

/* Onay adimi satirindaki karar notu: adimin altinda, susturulmamis. */
.nx-approval-step .nx-approval-step-note{color:var(--nx-text);
  overflow-wrap:anywhere;margin-block-start:2px}


/* ---- 2. Zaman cizelgesi -------------------------------------------------
   Satirin basindaki 20px'lik daire eskiden bostu. Artik aktorun bas harfini
   tasiyor ve rengi olayin turunu soyluyor: mesaj, dosya, is akisi.
   Ozgulluk notu: styles.css'te `.nx-timeline-item>span` ve
   `.nx-timeline-item small` kurallari var; asagidakiler onlari yenecek
   ozgullukte yazildi (sinif+sinif), sira bagimliligina birakilmadi.       */
.nx-timeline-item.tl-comment>span,
.nx-timeline-item.tl-file>span,
.nx-timeline-item.tl-activity>span{font-weight:700;line-height:1}
.nx-timeline-item.tl-comment>span{background:var(--nx-success-soft);
  color:var(--nx-success-text)}
.nx-timeline-item.tl-file>span{background:var(--nx-surface-2);
  color:var(--nx-muted);border:1px solid var(--nx-border)}
/* Ardisik ayni kayitlarin sayaci: bilgi tasiyor ama basligi bastirmiyor. */
.nx-timeline-item .nx-timeline-count{font-style:normal;font-weight:600;
  color:var(--nx-muted);font-variant-numeric:tabular-nums}
/* Kaydedilmis gerekce/not. Ust satir "ne oldu", bu satir "neden". */
.nx-timeline-item .nx-timeline-detail{color:var(--nx-text);
  border-inline-start:2px solid var(--nx-border);
  padding-inline-start:var(--nx-s6);margin-block-start:2px;
  overflow-wrap:anywhere}


/* ---- 3. Gorev karti: karari bekleyen gorev ------------------------------
   Geciken gorevle ayni dil: baslangic kenarinda ince bir serit. Gecikme
   tehlike, bekleyen karar uyari. Ikisi birdense gecikme kazaniyor.        */
.nx-task-card-button.is-decision{
  border-inline-start:3px solid var(--nx-warning)}
.nx-task-card-button.is-overdue.is-decision{
  border-inline-start-color:var(--nx-danger)}


/* ---- Mobil -------------------------------------------------------------- */
@media(max-width:767px){
  .nx-approval-strip{padding:var(--nx-s4) var(--nx-s6);gap:var(--nx-s4)}
  .nx-approval-strip>button{margin-inline-start:0;width:100%}
}


/* === faz10 === */
/* FAZ 10 — Raporlar, Devam Takibi, Yonetim.
   Hepsi jetondan; ham renk yok, mantiksal ozellik kullaniliyor. */

/* ---- Etkinlik egrisi: etiketler artik SVG'nin disinda -----------------------
   SVG `preserveAspectRatio="none"` ile ciziliyor ki grafik panel genisligine
   yayilsin. `none` x ve y'yi bagimsiz olcekliyor: cizgiler
   `vector-effect:non-scaling-stroke` ile korunuyordu ama ayni SVG icindeki
   `<text>` yatayda eziliyordu (1080px panelde 1.5x gerilme, 360px'te sikisma).
   Olcek ve eksen etiketleri HTML katmanina alindi; yuzdeyle konumlaniyorlar ve
   SVG yuksekligi CSS'te sabit oldugu icin esleme birebir.

   Kutunun tamami LTR: zaman ekseni soldan saga aktigina gore sifir noktasi da,
   ona ait Y olcegi de solda olmali. Cevresindeki baslik ve gosterge RTL kaliyor. */
.nx-chart-plot{position:relative;direction:ltr;padding-inline-start:var(--nx-s8)}
.nx-chart-scale{position:absolute;inset-block:0;inset-inline-start:0;
  width:var(--nx-s8);pointer-events:none}
.nx-chart-scale span{position:absolute;inset-inline-end:var(--nx-s2);
  transform:translateY(-50%);font-size:0.6875rem;color:var(--nx-muted);
  font-variant-numeric:tabular-nums;white-space:nowrap}
.nx-chart-axis{position:relative;direction:ltr;height:15px;
  margin-inline-start:var(--nx-s8)}
.nx-chart-axis span{position:absolute;inset-block-start:0;font-size:0.6875rem;
  color:var(--nx-muted);white-space:nowrap}
.nx-chart-axis span[data-capa="orta"]{transform:translateX(-50%)}
.nx-chart-axis span[data-capa="son"]{transform:translateX(-100%)}

/* viewBox artik 100x100; y ekseni 1.9 kat olcekleniyor ve izgara cizgisi bu
   oranda kalinlasiyordu. Cizgi kalinligi olceklemenin disinda tutuluyor. */
.nx-chart-grid line{vector-effect:non-scaling-stroke}

/* Sifir uzunluklu yol + yuvarlak uc = bozulmayan nokta. `<circle>` bu olcekleme
   altinda elips olurdu. */
.nx-chart-dot{fill:none;stroke-width:7;stroke-linecap:round;stroke-linejoin:round;
  vector-effect:non-scaling-stroke}

/* Gunluk deger ipucu: yerel `<title>`, JS yok - CSP `script-src 'self'`. */
.nx-chart-hit rect{fill:transparent}
.nx-chart-hit rect:hover{fill:color-mix(in srgb,var(--nx-primary) 8%,transparent)}

/* ---- Kirpilmis liste notu --------------------------------------------------
   Rozet tam sayiyi, liste bir kismini gosteriyordu; kac satirin goruldugu
   yazili olmayinca eksik veri fark edilmiyordu. */
.nx-list-block{display:grid;gap:var(--nx-s2);min-width:0}
.nx-list-note{display:block;font-size:0.71875rem;color:var(--nx-muted);
  padding-inline:var(--nx-s1);font-variant-numeric:tabular-nums}

/* ---- Rapor tablosu: tarama yuzeyi ------------------------------------------
   Bes sutunun dordu sayisal. Sola hizali ve orantisiz rakamla 40 satir goz
   taramasina kapali kaliyordu. */
.nx-report-table-head span,.nx-report-table-row span{min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.nx-report-table .nx-num{text-align:end;font-variant-numeric:tabular-nums}
.nx-report-table-row:nth-child(even){
  background:color-mix(in srgb,var(--nx-surface-2) 55%,transparent)}
.nx-report-table-row:hover{background:var(--nx-surface-2)}
.nx-report-table-row:last-child{border-bottom:0}

/* ---- Yer tutan iskeletler --------------------------------------------------
   Sayfanin tamami tek bir donen daireyle degistiginde baslik da kayboluyor ve
   veri gelince duzen ziplyordu. Iskelet gelecek icerigin yerini bastan tutuyor. */
.nx-metric-card.nx-metric-loading{align-content:center;gap:var(--nx-s2)}
.nx-metric-loading .nx-skeleton-row:first-child{width:58%}
.nx-metric-loading .nx-skeleton-row:last-child{width:38%;height:22px}
/* Egri paneli: 190px grafik + 8px bosluk + gosterge. */
.nx-chart-loading .nx-skeleton-card .nx-skeleton-row{height:218px}
.nx-mini-metrics span.nx-mini-loading{display:block;padding:var(--nx-s2)}
.nx-activity-loading .nx-skeleton{gap:var(--nx-s3)}

/* ---- Devam takibi ----------------------------------------------------------
   Yerel tarih/saat girdileri RTL kapsayicida alan sirasini ters cevirebiliyor;
   deger zaten ISO ve tek yonlu okunuyor. Yalnizca girdinin kendisi LTR,
   etiketler ve duzen RTL kaliyor. */
.nx-attendance-page input[type="date"],
.nx-attendance-page input[type="time"]{direction:ltr;text-align:start}
.nx-record-metrics b{font-variant-numeric:tabular-nums}
.nx-record-metrics em{color:var(--nx-warning-text)}
.nx-record-row time{font:inherit;color:inherit}

/* ---- Yonetim ---------------------------------------------------------------
   Sunucu departmanlari zaten riske gore siraliyor; 20 kartin arasinda riskli
   olani gozle bulmak icin ince bir serit yetiyor. Kart dolgusu 2px azaltilarak
   toplam genislik korunuyor. */
.nx-health-card.nx-health-risk{border-inline-start-width:3px;
  border-inline-start-color:var(--nx-danger);padding-inline-start:6px}
.nx-health-card>div span{font-variant-numeric:tabular-nums}
.nx-audit-list>div>span{flex:1 1 auto;min-width:0}
.nx-audit-list .nx-audit-ref{display:block;min-width:0;max-width:26ch;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-audit-list time{font-variant-numeric:tabular-nums;white-space:nowrap}

/* ---- Ekip yuku: son iki cubuk da jetondan -----------------------------------
   Onceki iki deger ham hex idi ve koyu temada degismiyordu. */
.nx-team-bar[data-renk="3"] i{background:var(--nx-primary-strong)}
.nx-team-bar[data-renk="4"] i{
  background:color-mix(in srgb,var(--nx-success) 55%,var(--nx-primary))}

/* ---- Yaklasan teslimler ---------------------------------------------------- */
.nx-deadline-title small{display:block;font-size:0.6875rem;color:var(--nx-muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

@media(max-width:767px){
  /* Mobilde egri 150px; iskelet de ayni yeri tutmali. */
  .nx-chart-loading .nx-skeleton-card .nx-skeleton-row{height:178px}
  .nx-audit-list .nx-audit-ref{max-width:16ch}
}


/* === faz11 === */
/* ==========================================================================
   FAZ 11 — Yonetim, Ayarlar, Interface Designer
   --------------------------------------------------------------------------
   Bu ekranlar yogun yonetici yuzeyleri: oturum iptali, kalici yedek silme,
   hesap silme, VPS dagitimi, saklama politikasi. Buradaki is susleme degil
   NETLIK: hangi eylemin geri alinabildigi, hangisinin alinamadigi bakinca
   anlasilsin ve dort tabin da olcu dili ayni olsun.

   Butun kurallar var olan `nx-` ailelerine bagli ve `.nx-admin-page` /
   `.nx-settings-page` koklerine kapsanmis; baska ajanlarin ekranlarina
   tasmiyor. Ham renk yok — yalnizca jeton ve color-mix.
   ========================================================================== */


/* --------------------------------------------------------------------------
   1. SpecialistAdmin olcu satiri hic izgara degildi
   --------------------------------------------------------------------------
   `.nx-admin-metrics` stil sayfasinda yalnizca `grid-template-columns`
   tanimliyor; `display:grid` `.nx-metric-grid`'den geliyor. AdminScreen ve
   OperationsCenter ikisini birlikte veriyor, SpecialistAdmin yalnizca
   `nx-admin-metrics` veriyor ve cocuklari `<div class="nx-metric-card">`
   degil ciplak `<article>`. Sonuc: dort tabin da ust satiri izgara olmadan,
   kartsiz, alt alta yigilmis metin olarak ciziliyordu.

   Duzeltme kaynagin kendisinde degil burada, cunku `.nx-admin-metrics`
   kuralinin duyarli varyantlari (1180 / 767 / 390) ayni ozgullukte ve onlari
   ezmek mobil duzeni bozardi. Bu yuzden yalnizca SpecialistAdmin kapsaniyor.
   -------------------------------------------------------------------------- */
.nx-specialist-stack>.nx-admin-metrics{
  display:grid;
  /* Dort kart 6 sutunluk sabit izgarada iki bos sutun birakiyordu.
     auto-fit kart sayisi kacsa satiri doldurur. */
  grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:var(--nx-s2);
  min-width:0;
}
.nx-specialist-stack>.nx-admin-metrics>article{
  border:1px solid var(--nx-border);
  background:var(--nx-surface);
  border-radius:var(--nx-radius);
  padding:var(--nx-s3);
  display:grid;
  gap:var(--nx-s-hair);
  align-content:start;
  min-height:70px;
  min-width:0;
}
.nx-specialist-stack>.nx-admin-metrics>article>span{
  font-size:0.7812rem;
  color:var(--nx-muted);
}
.nx-specialist-stack>.nx-admin-metrics>article>strong{
  font-size:1.4375rem;
  line-height:1.15;
}
.nx-specialist-stack>.nx-admin-metrics>article>small{
  font-size:0.75rem;
  color:var(--nx-muted);
  overflow-wrap:anywhere;
}

/* OperationsCenter ust satirinda yedi kart var, izgara ise alti sutun:
   yedincisi tek basina yeni satira dusup yarim kaliyordu. */
.nx-operations-center>.nx-admin-metrics{
  grid-template-columns:repeat(auto-fit,minmax(146px,1fr));
}


/* --------------------------------------------------------------------------
   2. Uyari kutusu uyari gibi gorunmuyordu
   --------------------------------------------------------------------------
   `.nx-warning-box` iki tanimsiz jetona bagliydi: `--nx-warning-border` ve
   `--nx-surface-soft`. Ikisi de `:root` icinde yok. Kenarlik yedege dusup
   notr `--nx-border` oluyor, zemin ise hic uygulanmiyordu — yani bekleyen
   geri yukleme, eksik kapilar ve dagitim uyarilari sirandan bir cerceve
   icinde duruyordu.

   Zemin `--nx-warning-soft` yerine color-mix ile uretiliyor: `-soft`
   jetonlari yalnizca acik temada tanimli, koyu temada beyaza yakin kaliyor.
   -------------------------------------------------------------------------- */
div.nx-warning-box,
section.nx-warning-box{
  border:1px solid color-mix(in srgb,var(--nx-warning) 34%,var(--nx-border));
  background:color-mix(in srgb,var(--nx-warning) 9%,var(--nx-surface));
  border-radius:var(--nx-radius);
  padding:var(--nx-s3);
  gap:var(--nx-s1);
}
div.nx-warning-box>strong,
section.nx-warning-box>strong{
  color:color-mix(in srgb,var(--nx-warning) 72%,var(--nx-text));
  font-size:0.8125rem;
}
div.nx-warning-box>span,
section.nx-warning-box>span,
div.nx-warning-box>small{
  color:var(--nx-text);
  font-size:0.7812rem;
  line-height:1.45;
  overflow-wrap:anywhere;
}


/* --------------------------------------------------------------------------
   3. Geri alinamaz ile geri alinabilir ayni sari kutuydu
   --------------------------------------------------------------------------
   "Bekleyen bir geri yukleme var" ile "bu hesap kalici olarak silinecek"
   ayni uyari kutusunu paylasiyordu. `nx-danger-box` yalnizca geri
   alinamayanlara veriliyor: baslangic kenarinda kalin bir tehlike cizgisi ve
   tehlike zemini. Uyari sari kalir, geri donusu olmayan kirmizidir.
   -------------------------------------------------------------------------- */
div.nx-danger-box,
section.nx-danger-box{
  border-color:color-mix(in srgb,var(--nx-danger) 42%,var(--nx-border));
  background:color-mix(in srgb,var(--nx-danger) 9%,var(--nx-surface));
  border-inline-start-width:3px;
  border-inline-start-color:var(--nx-danger);
}
div.nx-danger-box>strong,
section.nx-danger-box>strong{
  color:var(--nx-danger);
  letter-spacing:-.01em;
}


/* --------------------------------------------------------------------------
   4. Tehlikeli dugmelerin uzerine gelince taahhut etmesi
   --------------------------------------------------------------------------
   `.nx-button-danger` yalnizca metin ve kenarlik rengini degistiriyordu;
   hicbir gecis durumu yoktu, yani "Iptal et" ile "Kaydet" fareyle ayni
   tepkiyi veriyordu. Bu ekranlarda gecis durumu bir uyaridir.

   Iki agirlik var:
   - varsayilan tehlike (geri alinabilir: kullaniciyi pasiflestir, sirketi
     arsivle, oturumu iptal et) → yumusak tehlike dolgusu
   - `.nx-irreversible` (kalici silme) → dolu tehlike; dikkatsiz tiklanacak
     bir sey gibi gorunmemeli
   -------------------------------------------------------------------------- */
.nx-admin-page .nx-button-danger,
.nx-settings-page .nx-button-danger{
  transition:background-color var(--nx-dur-micro) var(--nx-ease-standard),
             border-color var(--nx-dur-micro) var(--nx-ease-standard),
             color var(--nx-dur-micro) var(--nx-ease-standard);
}
.nx-admin-page .nx-button-danger:hover,
.nx-admin-page .nx-button-danger:focus-visible,
.nx-settings-page .nx-button-danger:hover,
.nx-settings-page .nx-button-danger:focus-visible{
  background:color-mix(in srgb,var(--nx-danger) 12%,var(--nx-surface));
  border-color:var(--nx-danger);
}

.nx-admin-page .nx-button-danger.nx-irreversible,
.nx-settings-page .nx-button-danger.nx-irreversible{
  border-color:var(--nx-danger);
  background:color-mix(in srgb,var(--nx-danger) 10%,var(--nx-surface));
}
.nx-admin-page .nx-button-danger.nx-irreversible:hover,
.nx-admin-page .nx-button-danger.nx-irreversible:focus-visible,
.nx-settings-page .nx-button-danger.nx-irreversible:hover,
.nx-settings-page .nx-button-danger.nx-irreversible:focus-visible{
  background:var(--nx-danger);
  border-color:var(--nx-danger);
  color:var(--nx-surface);
}

/* Geri alinamaz bir isi onaylayan pencere dugmesi birincil mavi tasimamali:
   "Kaydet" ile "hesabi kalici sil" ayni renkte olmaz. Sinif JSX'ten geliyor
   (`nx-confirm-irreversible`), `:has()` ile degil — Android TWA icindeki eski
   WebView'lerde `:has()` destegi belirsiz ve bu kural sessizce dusemez. */
.nx-button-primary.nx-confirm-irreversible{
  background:var(--nx-danger);
  border-color:var(--nx-danger);
  color:var(--nx-surface);
}
.nx-button-primary.nx-confirm-irreversible:hover,
.nx-button-primary.nx-confirm-irreversible:focus-visible{
  background:color-mix(in srgb,var(--nx-danger) 84%,var(--nx-text));
}


/* --------------------------------------------------------------------------
   5. Oturum listesi — iptal edilecek seyin ne oldugu gorunsun
   --------------------------------------------------------------------------
   `.nx-session-list` JSX'te veriliyor ama stil sayfasinda karsiligi yoktu:
   satirlar `.nx-admin-mini-list` kurallarina dusuyordu ve orada ayrinti
   satiri tek satira kirpiliyor (`white-space:nowrap`). Oturum satirinin
   ayrinti satiri "cihaz · IP · son gorulme" — yani iptal etmeden once
   bakilacak tek bilgi kirpilan bilgiydi.

   Her oturum artik ayri bir kart: iptal edilen sey somut bir nesne.
   -------------------------------------------------------------------------- */
.nx-admin-page .nx-session-list{
  gap:var(--nx-s1);
}
.nx-admin-page .nx-session-list>div{
  border:1px solid var(--nx-border);
  border-radius:var(--nx-radius);
  background:var(--nx-surface-2);
  padding:var(--nx-s2) var(--nx-s3);
  align-items:center;
  gap:var(--nx-s3);
}
.nx-admin-page .nx-session-list>div:last-child{
  border-bottom:1px solid var(--nx-border);
}
/* Ayrinti satiri iki satira kadar sarsin; kirpilan IP ise yaramaz. */
.nx-admin-page .nx-session-list small{
  white-space:normal;
  overflow:visible;
  text-overflow:clip;
  line-height:1.35;
  overflow-wrap:anywhere;
}


/* --------------------------------------------------------------------------
   6. Production Go / No-Go karti karar karti gibi dursun
   --------------------------------------------------------------------------
   ReleaseReadiness'te bes kart var ve hepsi ayni agirlikta: politika
   anahtarlari, kapi izgarasi, musteri matrisi ve uretim karari. Uretim
   karari digerlerinden farkli bir seydir — geri donusu olan bir ayar degil,
   canliya gecis kapisi.

   Renk kullanilmiyor (durum rozette zaten var); yalnizca baslangic kenarinda
   bir cizgi ve bir tik daha yuksek yuzey. `:has()` kullanilmadi: Android TWA
   icindeki eski WebView'lerde destegi belirsiz ve kart durumdan bagimsiz
   olarak en agir karttir.
   -------------------------------------------------------------------------- */
.nx-release-readiness .nx-go-no-go{
  border-inline-start:3px solid var(--nx-primary);
  background:color-mix(in srgb,var(--nx-primary) 4%,var(--nx-surface));
}
.nx-release-readiness .nx-go-no-go>header h3{
  font-size:1rem;
}
.nx-release-readiness .nx-pilot-operations{
  border-inline-start:3px solid color-mix(in srgb,var(--nx-primary) 42%,var(--nx-border));
}


/* --------------------------------------------------------------------------
   7. Dagitim ilerlemesi
   --------------------------------------------------------------------------
   Calisan bir dagitim sirasinda `.nx-deploy-progress` sayfadaki diger
   panolarla ayni agirlikta duruyordu. Devam eden is one cikmali; bittiginde
   de asamalar tek bakista okunmali.
   -------------------------------------------------------------------------- */
.nx-deploy-page .nx-deploy-progress{
  border-inline-start:3px solid var(--nx-primary);
}
/* Asama satirlarinin ✓/× ikonu, tanimsiz bir jetondan zemin aliyordu
   (bkz. bolum 0); zemin gelince gecen/kalan asama tek bakista okunuyor. */
.nx-deploy-page .nx-deploy-stages .stage.failed{
  border-color:color-mix(in srgb,var(--nx-danger) 34%,var(--nx-border));
}
/* Veri koruyan guncelleme sozu yesil; ilk kurulum bunu vermiyor. */
.nx-deploy-page .nx-deploy-safety{
  border-inline-start:3px solid var(--nx-success);
}


/* --------------------------------------------------------------------------
   8. Kisisel duzen penceresi — kapali durumu ciplak metindi
   --------------------------------------------------------------------------
   InterfacePersonalizer "tekil tuketim kapali" durumunu
   `<div class="nx-empty-state">` ile ciziyordu; bu sinifin stil sayfasinda
   karsiligi yok, yani baslik ve aciklama bicimsiz olarak akiyordu. Var olan
   `.nx-state .nx-empty` ailesine baglandi, buradaki kural yalnizca iki
   satirin hizasini topluyor.
   -------------------------------------------------------------------------- */
.nx-interface-personalizer .nx-personalizer-off{
  display:grid;
  gap:var(--nx-s1);
  justify-items:center;
  align-content:center;
}
.nx-interface-personalizer .nx-personalizer-off strong{
  color:var(--nx-text);
  font-size:0.9375rem;
}
.nx-interface-personalizer .nx-personalizer-off p{
  margin:0;
  color:var(--nx-muted);
  font-size:0.8125rem;
  max-width:44ch;
}


/* --------------------------------------------------------------------------
   9. Duyarli davranis
   --------------------------------------------------------------------------
   Yukaridaki kapsanmis izgaralarin kendi kirilma noktalari olmali; paylasilan
   `.nx-admin-metrics` medya kurallari artik bu iki kokte gecerli degil.
   -------------------------------------------------------------------------- */
@media(max-width:1180px){
  .nx-specialist-stack>.nx-admin-metrics{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
  .nx-operations-center>.nx-admin-metrics{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
}

@media(max-width:767px){
  .nx-specialist-stack>.nx-admin-metrics,
  .nx-operations-center>.nx-admin-metrics{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  /* Oturum kartinda ad/ayrinti ile Iptal dugmesi yan yana sigmiyor;
     dugme alta gecip tam genislik alsin ki yanlislikla tiklanmasin. */
  .nx-admin-page .nx-session-list>div{
    flex-wrap:wrap;
    gap:var(--nx-s2);
  }
  .nx-admin-page .nx-session-list>div>span{
    flex:1 1 100%;
  }
  .nx-admin-page .nx-session-list>div>.nx-button{
    flex:1 1 100%;
  }
  .nx-release-readiness .nx-go-no-go,
  .nx-release-readiness .nx-pilot-operations,
  .nx-deploy-page .nx-deploy-progress,
  .nx-deploy-page .nx-deploy-safety{
    border-inline-start-width:3px;
  }
}

@media(max-width:390px){
  .nx-specialist-stack>.nx-admin-metrics,
  .nx-operations-center>.nx-admin-metrics{
    grid-template-columns:1fr 1fr;
  }
}

/* Hareket tercihi kapaliysa gecis yok (§35 ile ayni cizgi). */
@media(prefers-reduced-motion:reduce){
  .nx-admin-page .nx-button-danger,
  .nx-settings-page .nx-button-danger{transition:none}
}


/* === Devam ekrani duzeni: bugun baskin, gecmis ikincil (r109) ===========
   Dort esit agirlikta panel vardi; kayit sayisi 0 iken alttaki iki panel
   .nx-state{min-height:130px} yuzunden dolu panel kadar yer kapliyordu. */
.nx-panel.nx-attendance-today{display:grid;
  grid-template-columns:minmax(0,1fr) minmax(240px,.6fr);
  gap:var(--nx-s5);align-items:start;padding:var(--nx-s5)}
.nx-attendance-today>*{min-width:0}
.nx-attendance-today header{display:flex;align-items:center;gap:var(--nx-s2);margin-block-end:var(--nx-s3)}
.nx-attendance-today header h2{margin:0}
.nx-attendance-today .nx-attendance-times{margin-block-end:var(--nx-s3)}
.nx-attendance-today .nx-compact-facts{gap:var(--nx-s2)}
.nx-attendance-shift{border-inline-start:1px solid var(--nx-line);padding-inline-start:var(--nx-s5)}
@media(max-width:900px){
  .nx-panel.nx-attendance-today{grid-template-columns:1fr;gap:var(--nx-s4)}
  .nx-attendance-shift{border-inline-start:0;padding-inline-start:0;
    border-block-start:1px solid var(--nx-line);padding-block-start:var(--nx-s4)}
}
.nx-attendance-history>.nx-panel{background:var(--nx-surface-2);box-shadow:none}
.nx-attendance-history>.nx-panel.is-empty .nx-state{min-height:0;
  flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-start;
  text-align:start;gap:var(--nx-s3);padding:var(--nx-s2) var(--nx-s1)}
.nx-attendance-history>.nx-panel.is-empty .nx-brand-character{
  max-block-size:var(--nx-s12);max-width:none;width:auto;
  margin-inline:0;margin-block-end:0}


/* === Giris ekrani: iki yuzey (r109) ====================================
   Onceki hali tek sutunlu `place-items:center` izgaraydi; 340px karakter ve
   430px kart genis ekranda bir krem denizinde yuzuyordu. Artik solda (RTL'de
   sagda) lacivert marka paneli var: beyazligi kiran ve karti cerceveleyen sey
   o. Dar ekranda panel kompakt bir seride iniyor, form tam genisligi aliyor. */






/* Kart artik panelin yanindaki yuzeyde ortalanan bir form; cerceveye
   ihtiyaci yok, zaten kendi yuzeyinde duruyor. */

@media(max-width:900px){






}


/* === Yonetim ekrani: uc bantli ritim (r109) =============================
   Bos kuyruk paneli dolu panelle ayni yeri kapliyordu; flex-basis:0 ve
   oranli grow ile dolu 2 pay, bos 1 pay aliyor. */
.nx-management-page{gap:var(--nx-s3)}
.nx-management-page>.nx-metric-grid{margin-block-start:var(--nx-s1)}
.nx-management-page>.nx-management-band{margin-block-start:var(--nx-s2)}
.nx-management-page .nx-panel>header>.nx-badge{margin-inline-start:auto}
.nx-metric-actionable{background:var(--nx-surface-2)}
.nx-module-grid.nx-queue-grid{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--nx-s3)}
.nx-queue-grid>.nx-queue-panel{flex:2 1 0;min-width:0}
.nx-queue-grid>.nx-queue-panel.is-empty{flex:1 1 0}
.nx-queue-panel.is-empty>header>div>small{display:none}
.nx-queue-panel.is-empty .nx-state{min-height:0;padding:var(--nx-s2)}
.nx-queue-panel.is-empty .nx-empty{flex-direction:row;gap:var(--nx-s2)}
@media(max-width:767px){
  .nx-module-grid.nx-queue-grid{flex-direction:column}
  .nx-queue-grid>.nx-queue-panel,.nx-queue-grid>.nx-queue-panel.is-empty{flex:0 0 auto}
}


/* === Raporlar basligi: analist + brifing karti (r109) ====================
   "Karakterin arkasi cok bos" sikayeti. Bosluk dekorla degil ISLE dolduruldu:
   figurun yaninda, ekranin zaten yukledigi veriden turetilen brifing karti.
   Karttaki etkinlik penceresi sayilari ekranda baska HICBIR yerde yazi olarak
   yoktu, yalnizca egri vardi. */
.nx-reports-heading{align-items:stretch;flex-wrap:wrap;gap:var(--nx-s3)}
.nx-reports-heading-text{flex:1 1 240px;min-width:0;display:grid;align-content:center;gap:var(--nx-s1)}
.nx-reports-heading-text h1,.nx-page-heading .nx-reports-heading-text p{margin:0}
.nx-reports-heading>.nx-button{flex:0 0 auto;align-self:center}
.nx-reports-briefing{flex:1 1 400px;min-width:0;display:flex;align-items:stretch;
  gap:var(--nx-s3);padding:var(--nx-s3);background:var(--nx-surface);
  border:1px solid var(--nx-line);border-radius:var(--nx-radius);
  box-shadow:var(--nx-shadow)}
.nx-reports-briefing .nx-reports-figure{height:104px;width:auto;flex:0 0 auto;
  margin:0;align-self:flex-end}
.nx-reports-briefing-body{flex:1 1 auto;min-width:0;display:grid;gap:var(--nx-s2);
  align-content:center;padding-inline-start:var(--nx-s3);
  border-inline-start:1px solid var(--nx-line)}
.nx-page-heading .nx-briefing-lead{margin:0;display:flex;align-items:baseline;
  gap:var(--nx-s2);font-size:0.875rem;font-weight:700;color:var(--nx-text);line-height:1.25}
.nx-briefing-lead b{font-size:1.4375rem;font-weight:600;line-height:1}
.nx-briefing-lead[data-tone="attention"] b{color:color-mix(in srgb,var(--nx-warning) 72%,var(--nx-text))}
.nx-briefing-lead[data-tone="clear"]{color:color-mix(in srgb,var(--nx-success) 62%,var(--nx-text))}
.nx-page-heading .nx-briefing-lead[data-tone="loading"],
.nx-page-heading .nx-briefing-lead[data-tone="error"]{color:var(--nx-muted);font-weight:600}
.nx-briefing-stats{display:flex;flex-wrap:wrap;gap:var(--nx-s2);min-width:0}
.nx-briefing-stat{display:flex;align-items:baseline;gap:var(--nx-s1);min-width:0;
  padding:var(--nx-s1) var(--nx-s2);background:var(--nx-surface-2);
  border:1px solid var(--nx-line);border-radius:var(--nx-radius-sm);font-size:0.75rem}
.nx-briefing-stat-label{color:var(--nx-muted);white-space:nowrap}
.nx-briefing-stat-value{font-size:0.9375rem;font-weight:600;color:var(--nx-text)}
.nx-briefing-stat[data-tone="warning"]{border-color:color-mix(in srgb,var(--nx-warning) 34%,var(--nx-line))}
.nx-briefing-stat[data-tone="success"]{border-color:color-mix(in srgb,var(--nx-success) 34%,var(--nx-line))}
.nx-briefing-delta{display:inline-flex;align-items:center;gap:var(--nx-s-hair);
  margin-inline-start:var(--nx-s1);color:var(--nx-muted);font-weight:700;font-size:0.6875rem}
.nx-briefing-window{display:flex;align-items:center;gap:var(--nx-s1);
  font-size:0.75rem;color:var(--nx-muted)}
.nx-briefing-window b{color:var(--nx-text);font-weight:600}
@media(max-width:1100px){
  .nx-reports-briefing{flex:1 1 100%;order:3}
  .nx-reports-heading>.nx-button{order:2;align-self:flex-start}
}
@media(max-width:767px){
  .nx-reports-briefing{padding:var(--nx-s2);box-shadow:none}
  .nx-reports-briefing-body{padding-inline-start:0;border-inline-start:0}
  .nx-briefing-stat[data-source="dashboard"]{display:none}
  .nx-briefing-lead b{font-size:1.1875rem}
}


/* Giris ekrani duzeltmeleri (r110):
   1) Marka artik panelde duruyor; kartin kendi kilitlemesi ikinci bir logo
      olarak cikiyordu. Kaldirildi -- ama erisilebilirlik icin uygulama adi
      metin olarak kaliyor.
   2) Dar ekranda panel serit halinde ustte; kart dikeyde ortalaninca aralarinda
      yarim ekran bosluk kaliyordu. Ustten hizalaniyor. */


@media(max-width:900px){

}


/* Sutun secici paneli artik liste gorunumunde de aciliyor ve kendi kapatma
   dugmesi var: "+" tablo basligindaydi, panel ise arac cubugunda -- kullanici
   panelin nasil kapatilacagini bulamiyordu (r110). */
.nx-column-picker-head{display:flex;align-items:center;justify-content:space-between;
  gap:var(--nx-s2);padding:var(--nx-s1) var(--nx-s2) var(--nx-s2);
  border-bottom:1px solid var(--nx-line);margin-block-end:var(--nx-s2)}
.nx-column-picker-head strong{font-size:0.8125rem}
.nx-column-picker-head button{border:0;background:var(--nx-surface-2);cursor:pointer;
  width:26px;height:26px;border-radius:var(--nx-radius-sm);color:var(--nx-muted);
  font-size:0.8125rem;font-weight:600;flex:0 0 auto}
.nx-column-picker-head button:hover{background:var(--nx-danger-soft);color:var(--nx-danger-text)}
/* Izgara sablonu artik satir ici stille geliyor (secilen sutun sayisina gore);
   buradaki sabit tanim yalnizca yedek. */
.nx-tg-cols,.nx-tg-row{grid-template-columns:minmax(0,1fr) repeat(3,minmax(88px,132px))}


/* Cok sutun secilince gruplu liste yatay kayiyor -- tablo gorunumunun
   .nx-task-table-scroll ile yaptigi seyin aynisi. Baslik ve satirlar birlikte
   kayiyor, cunku kaydirma kapsayicisi ikisini de sariyor (r111). */
.nx-tg-group{overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin}
/* r174 -- `max-content` izgarayi HER ZAMAN azami iz genisligine zorluyordu:
   1440px ekranda bile alan 1086px iken izgara 1400px oluyor ve alti grubun
   her biri ayri ayri ~330px yana kayiyordu. Kullanicinin "list'te akiskan
   olmayan bir durum var, tabloda yok" dedigi sey buydu. `min-content`,
   izgaranin minmax TABANLARINDA (200px + n*96px) durmasini saglar: genis
   ekranda tam oturur, dar ekranda tabana dayanip kaydirir. */
.nx-tg-cols,.nx-tg-row{min-width:min-content}

/* r174 -- r111'in duzeltmesi sessizce bozulmustu. Satirlar sonradan
   TaskRowActions ile sarildi; `.nx-row-actions{overflow:hidden}` ve
   `.nx-row-actions-main > *:first-child{min-width:0}` satirin max-content
   genisligine ulasmasini engelliyordu. Sonuc olculdu (1440px ekran, 9 sutun):
   baslik 1400px, satirlar 1072px -- sutunlar basliklarla HIZALANMIYOR ve grup
   bos yere 294px yana kayiyordu. Tablo gorunumunde bu sarmalayici olmadigi
   icin sorun orada gorulmuyordu. Sarmalayicilar artik satirin olcusunu
   tasiyor. */
.nx-tg-group > .nx-row-actions,
.nx-tg-group > .nx-row-actions > .nx-row-actions-main{min-width:min-content}
.nx-tg-group > .nx-row-actions > .nx-row-actions-main > *:first-child{min-width:min-content}
/* `...` dugmesi artik iz genisligi TUKETMIYOR; tukettiginde satir basliktan
   34px genis kaliyor ve hizalama yine kayiyordu. */
.nx-tg-group > .nx-row-actions > .nx-row-actions-main > .nx-row-more{
  position:absolute;inset-inline-end:0;top:0;bottom:0;width:34px}
.nx-tg-name{position:sticky;inset-inline-start:0;background:inherit;z-index:1}
.nx-tg-row:hover .nx-tg-name{background:var(--nx-surface-2)}


/* === Buyuk dikdortgen dugme izgarasi (r112) ==============================
   Administration ve Ayarlar ayni dili paylasiyor: sekme cubugu yerine sayfayi
   dolduran dugmeler; birine basinca AYRI EKRAN aciliyor ve geri donmek icin
   ust seritte tek bir yol var. Sekme cubugu 13 maddede tasiyordu ve hangisinin
   nerede oldugu okunmuyordu. */
.nx-tile-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
  gap:var(--nx-s3);margin-block-start:var(--nx-s2)}
.nx-tile{display:grid;grid-template-columns:44px minmax(0,1fr) 16px;align-items:center;
  gap:var(--nx-s3);min-height:82px;padding:var(--nx-s4);text-align:start;
  background:var(--nx-surface);border:1px solid var(--nx-line);
  border-radius:var(--nx-radius);box-shadow:var(--nx-shadow);cursor:pointer;
  font:inherit;color:inherit;
  transition:border-color var(--nx-dur-micro) var(--nx-ease-standard),
             transform var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-tile:hover{border-color:var(--nx-primary);transform:translateY(-1px)}
.nx-tile:focus-visible{outline:2px solid var(--nx-primary);outline-offset:2px}
.nx-tile-icon{width:44px;height:44px;border-radius:var(--nx-radius-sm);
  display:grid;place-items:center;background:var(--nx-primary-soft);
  color:var(--nx-primary);font-size:1.125rem;font-weight:600}
.nx-tile strong{font-size:0.9375rem;font-weight:700;min-width:0}
.nx-tile-go{color:var(--nx-muted);font-size:1.125rem;font-weight:600}
.nx-tile:hover .nx-tile-go{color:var(--nx-primary)}

/* Geri serit ve bolum basligi: ayri ekranda nerede oldugunu ve nasil
   cikilacagini tek bakista soyluyor. */
.nx-back-bar{display:inline-flex;align-items:center;gap:var(--nx-s2);
  background:none;border:0;cursor:pointer;font:inherit;font-weight:700;
  font-size:0.8125rem;color:var(--nx-muted);padding:var(--nx-s1) 0}
.nx-back-bar:hover{color:var(--nx-primary)}
.nx-back-bar span{font-size:1.0625rem;font-weight:600}
.nx-section-title{display:flex;align-items:center;gap:var(--nx-s2);
  margin:var(--nx-s1) 0 var(--nx-s3);font-size:1.0625rem}
.nx-section-title span{color:var(--nx-primary)}
.nx-admin-section,.nx-admin-home{display:grid;gap:var(--nx-s3);min-width:0}


/* Kisayol glifleri 34px'ti; Administration/Ayarlar'daki yeni 44px'lik dugme
   ikonlarinin yaninda kucuk kaliyordu. Iki yuzey ayni dili konussun (r112).
   NOT: .nx-builder-tile icindeki 27px kural TASARIMCI ONIZLEMESINE ait,
   ona dokunulmuyor. */
.nx-launcher .nx-launcher-glyph{width:42px;height:42px;flex:0 0 42px;
  border-radius:var(--nx-radius-sm);font-size:1.25rem}


/* === Olusturma formu: sayacli acilir grup basliklari (r150) ==============
   Once uc mod (Quick/Standard/Advanced) vardi; kullanicidan basligi yazmadan
   once "isin ne kadar karmasik olacagini" tahmin etmesini istiyordu (r115'te
   kaldirildi). Yerine gelen cip satiri yalnizca acik/kapali soyluyordu: kapali
   bir gruba deger girip unutmak mumkundu. Simdi her baslik kendi sayacini
   tasiyor -- sayi formun kendi durumundan turetiliyor, ayri bir kaynak yok.
   Basliklar dugme oldugu icin klavye ve ekran okuyucu yolu aria-expanded
   uzerinden calisiyor. */
.nx-create-groups{display:flex;flex-wrap:wrap;gap:var(--nx-s2);min-width:0}
.nx-create-group-head{display:inline-flex;align-items:center;gap:var(--nx-s2);
  min-height:32px;padding:0 var(--nx-s3);border-radius:var(--nx-radius-pill);cursor:pointer;
  background:var(--nx-surface);border:1px solid var(--nx-line);
  color:var(--nx-muted);font:inherit;font-size:0.78125rem;font-weight:700;
  white-space:nowrap;
  transition:border-color var(--nx-dur-micro) var(--nx-ease-standard),
             color var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-create-group-head>span{font-size:0.9375rem;line-height:1;opacity:.75}
/* Sayac rozeti: kapali grupta "burada veri var" demenin tek isareti. */
.nx-create-group-head>b{min-width:18px;height:18px;padding:0 4px;border-radius:var(--nx-radius-pill);
  display:inline-grid;place-items:center;font-size:0.6875rem;
  background:var(--nx-primary);color:#fff}
.nx-create-group-head:hover{border-color:var(--nx-primary);color:var(--nx-text)}
.nx-create-group-head[aria-expanded="true"]{background:var(--nx-primary-soft);
  border-color:var(--nx-primary);color:var(--nx-primary)}
/* Kapali ama dolu: acik olmadigi halde dikkat cekmeli. */
.nx-create-group-head[data-dolu][aria-expanded="false"]{color:var(--nx-text);
  border-color:color-mix(in srgb,var(--nx-primary) 40%,var(--nx-line))}
.nx-create-group-head:focus-visible{outline:2px solid var(--nx-primary);outline-offset:2px}
/* Zamanlama bolumunun kendi ici basligi: bolumun altinda, tam genislikte. */
.nx-create-group-inline{width:100%;justify-content:flex-start;border-style:dashed}
/* Telefonda basliklar parmakla aciliyor; 32px dokunma hedefi icin dar.
   Bu kural dosyanin BASINDAKI mobil blogunda degil burada: oradaki blok temel
   kuraldan once geliyor ve ayni ozgullukteki sonraki kural onu eziyordu. */
@media(max-width:767px){.nx-create-group-head{min-height:40px}}
/* r116 — kullanici olusturulurken ikinci/ucuncu sirketteki pozisyonlar.
   Editor 760px genis; dort alan tek satira sigmadigi icin alanlar iki kolon,
   kaldirma dugmesi kendi satirinda sonda duruyor. */
.nx-admin-user-form{display:grid;gap:12px;min-width:0}
.nx-admin-extra-positions{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:11px;padding:9px;display:grid;gap:8px;min-width:0}
.nx-admin-extra-positions>header{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.nx-admin-extra-positions>header>div{display:grid;min-width:0}
.nx-admin-extra-positions h3{font-size:0.8125rem;margin:0}
.nx-admin-extra-positions small{font-size:0.75rem;color:var(--nx-muted);line-height:1.3;margin-top:2px}
.nx-admin-extra-empty{margin:0;font-size:0.75rem;color:var(--nx-muted)}
.nx-admin-extra-rows{display:grid;gap:8px}
.nx-admin-extra-row{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:9px;padding:8px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;min-width:0}
.nx-admin-extra-row>.nx-button{grid-column:1/-1;justify-self:end;min-height:32px;padding-inline:9px;font-size:0.7812rem}
@media(max-width:767px){.nx-admin-extra-row{grid-template-columns:1fr}}
/* r116 — panoda "sirketlerim". Kart bir eylem yuzeyi: tiklaninca o sirkette
   gorulebilen isin listesi aciliyor. Bolum yalnizca iki+ sirkette calisan
   biri icin ciziliyor, o yuzden tek kartlik bir izgara hali yok. */
.nx-company-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:8px}
.nx-company-card{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:11px;padding:9px;display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:8px;cursor:pointer;text-align:start;min-width:0;color:var(--nx-text);transition:background var(--nx-dur-micro) var(--nx-ease-standard),border-color var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-company-card:hover{border-color:color-mix(in srgb,var(--nx-primary) 38%,var(--nx-border));background:var(--nx-primary-soft)}
.nx-company-icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--nx-primary-soft);color:var(--nx-primary-strong);font-size:1.0625rem}
.nx-company-main{display:grid;min-width:0}
.nx-company-main strong{font-size:0.8125rem}
.nx-company-main small{font-size:0.75rem;color:var(--nx-muted)}
.nx-company-main strong,.nx-company-main small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-company-counts{display:grid;justify-items:end;gap:var(--nx-s-hair)}
.nx-company-counts b{font-size:1.125rem;line-height:1}
.nx-company-counts em{font-style:normal;font-size:0.75rem;color:var(--nx-muted)}
.nx-company-late{font-style:normal;font-size:0.75rem;color:var(--nx-danger-text);font-weight:600}
.nx-ownership-three{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:767px){.nx-company-grid{grid-template-columns:1fr}.nx-ownership-three{grid-template-columns:1fr}}
/* r117 — giris ekrani: marka karakteri kaldirildi.
   Panel artik dikeyde ortalanmis bir marka blogu; alttaki bosluk metinle
   degil, tasan ve cok dusuk opaklikta bir marka damgasiyla dolduruluyor.
   Damga `pointer-events:none` ve aria-hidden: dekorasyon, icerik degil. */



/* Form tarafindaki marka isareti: panelde zaten tam kilit var, burada
   tekrarlamak yerine yalnizca sembol duruyor. */
.nx-login-card-mark{width:56px;height:56px;object-fit:contain;display:block}
.nx-login-lockup{display:grid;justify-items:center;gap:8px;text-align:center}
@media(max-width:900px){
  /* Dar ekranda panel kisalir; damga orada gurultu yapmasin diye kuculuyor. */

}
/* r118 — giris ekraninda parola kurtarma. Ayri ekran degil: kod ayni parola
   alanina yazilacagi icin panel formun hemen altinda duruyor. */
.nx-login-forgot{justify-self:start;font-size:0.8125rem}
.nx-login-recovery{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:var(--nx-radius);padding:9px;display:grid;gap:6px}
.nx-login-recovery p{margin:0;font-size:0.8125rem;color:var(--nx-text)}
.nx-login-recovery small{font-size:0.75rem;color:var(--nx-muted)}
.nx-login-recovery-note{margin:0;border:1px solid color-mix(in srgb,var(--nx-success) 30%,var(--nx-border));background:var(--nx-success-soft);color:var(--nx-success-text);border-radius:var(--nx-radius);padding:9px;font-size:0.8125rem;line-height:1.4}
/* r118 — "kayitli gorunumler" araç cubugunda hizasiz duruyordu.
   Komsulari (`.nx-sort`: Grup, Sirala) cerceveli tek satir hap; bu ise
   cercevesiz ve etiketi kontrolun USTUNDE duran bir yigindi. Cubuk
   `align-items:center` oldugu icin o yigin ortalaniyor ve etiketi hap
   sirasinin ustune tasiyordu. Ayni kalibla hizalandi. */
.nx-saved-view{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius);min-height:40px;display:flex;align-items:center;gap:8px;padding:0 10px}
.nx-saved-view>span{font-size:0.75rem;font-weight:600;color:var(--nx-muted);white-space:nowrap}
.nx-saved-view>select{border:0;background:transparent;color:var(--nx-text);min-height:38px;padding:0;max-width:190px}
.nx-saved-view-actions{display:flex;align-items:center;gap:4px}
@media(max-width:767px){.nx-saved-view{padding:0 8px}.nx-saved-view>select{max-width:none;flex:1}}
/* r118 — gorev ekraninda sirketler arasi gecis ve sirkete gore bolumleme.
   Onceden bu ekranda sirket secmenin yolu YOKTU: bir sirkete yalnizca
   panodaki karttan girilebiliyor, iceridiyken baska sirkete gecmek icin
   panoya donmek gerekiyordu. Varsayilan kapsam artik "tum sirketler". */

/* Serit: sekiz sirket sigmali, o yuzden buyuk kart degil sarilan hap.
   Sahiplik kartlarinin (nx-ownership-switch) aktif dolgusuyla ayni dili
   konusuyor ki iki satir tek denetim gibi okunsun. */
.nx-company-strip{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0}
.nx-company-strip button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius-pill);min-height:34px;padding:0 6px 0 12px;display:inline-flex;align-items:center;gap:8px;cursor:pointer;color:var(--nx-text);max-width:280px;transition:background var(--nx-dur-micro) var(--nx-ease-standard),border-color var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-company-strip button:hover{border-color:color-mix(in srgb,var(--nx-primary) 38%,var(--nx-border));background:var(--nx-primary-soft)}
.nx-company-strip button strong{font-size:0.8125rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.nx-company-strip button b{font-size:0.75rem;font-weight:600;background:var(--nx-surface-2);color:var(--nx-muted);border-radius:var(--nx-radius-pill);min-width:22px;padding:2px 7px;text-align:center}
.nx-company-strip button.active{background:var(--nx-primary);border-color:var(--nx-primary);color:var(--nx-on-fill)}
.nx-company-strip button.active b{background:color-mix(in srgb,#000 18%,var(--nx-primary));color:var(--nx-on-fill)}
.nx-company-strip-note{font-size:0.75rem;color:var(--nx-muted);margin-inline-start:2px}

/* Tabloda sirket basligi: tam genislik bir bant. Duz tabloda sekiz sirketin
   satirlari karisinca hangisinin nereye ait oldugu gorunmuyordu. */
.nx-editable-task-table tbody.nx-table-company+tbody.nx-table-company .nx-table-company-head td{padding-top:14px}
.nx-table-company-head td{background:var(--nx-surface-2);border-block:1px solid var(--nx-border);padding:7px 10px}
.nx-table-company-head strong{font-size:0.8125rem;font-weight:600}
.nx-table-company-head span{font-size:0.75rem;font-weight:600;color:var(--nx-muted);background:var(--nx-surface);border:1px solid var(--nx-border);border-radius:var(--nx-radius-pill);padding:1px 8px;margin-inline-start:8px}

/* Kart gorunumunde sirket bolumleri */
.nx-task-cards{display:grid;gap:14px;min-width:0}
.nx-cards-company{display:grid;gap:8px;min-width:0}
.nx-cards-company>header{display:flex;align-items:center;gap:8px;padding-block-end:2px;border-block-end:1px solid var(--nx-border)}
.nx-cards-company>header strong{font-size:0.875rem;font-weight:600}
.nx-cards-company>header span{font-size:0.75rem;font-weight:600;color:var(--nx-muted);background:var(--nx-surface-2);border-radius:var(--nx-radius-pill);padding:1px 8px}
@media(max-width:767px){
  .nx-company-strip button{max-width:100%;flex:1 1 auto}
}
/* r120 — yonetim ekrani iki fazli yukleniyor; ikinci faz yoldayken bunu
   soyleyen satir. Sessizce bos gorunen bir sekme, kullaniciya sistemi bozuk
   gosterir. */
.nx-admin-extras-loading{margin:0 0 8px;font-size:0.75rem;color:var(--nx-muted);display:flex;align-items:center;gap:8px}
.nx-admin-extras-loading::before{content:"";width:12px;height:12px;border:2px solid var(--nx-border);border-top-color:var(--nx-primary);border-radius:50%;animation:nx-spin var(--nx-dur-spin) linear infinite}
/* r122 — kullanicinin kendi filtresini kurmasi. Asil planin 1. maddesinin
   ikinci yarisi: "filtreleri azaltmak VE yeni filtre ekleyebilmek."
   Onceden filtre KODDU (sabit birlesim tipi + if zinciri); yeni filtre
   eklemek surum cikarmak demekti. Artik veri. */
.nx-filter-new{border:1px dashed var(--nx-border);background:transparent;border-radius:var(--nx-radius-pill);min-height:32px;padding:0 12px;cursor:pointer;color:var(--nx-muted);font-size:0.8125rem;font-weight:700}
.nx-filter-new:hover{border-style:solid;border-color:var(--nx-primary);color:var(--nx-primary-strong);background:var(--nx-primary-soft)}
/* Etkin ozel filtre: ozetini tasiyan hap. Ozet gorunmezse kullanici neyin
   suzuldugunu bilmiyor ve liste eksik gorunuyor. */
.nx-filter-custom{display:inline-flex;align-items:center;gap:2px;background:var(--nx-primary-soft);border:1px solid color-mix(in srgb,var(--nx-primary) 38%,var(--nx-border));border-radius:var(--nx-radius-pill);min-height:32px;padding-inline-start:10px;max-width:min(520px,100%)}
.nx-filter-custom>button:first-child{border:0;background:transparent;color:var(--nx-primary-strong);font-size:0.8125rem;font-weight:700;cursor:pointer;padding:0;max-width:460px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-filter-custom>button:last-child{border:0;background:transparent;color:var(--nx-primary-strong);cursor:pointer;padding:0 8px;font-size:0.875rem;line-height:1}

.nx-filter-builder{display:grid;gap:10px;min-width:0}
.nx-fb-hint{margin:0;font-size:0.75rem;color:var(--nx-muted)}
.nx-fb-join{display:inline-flex;border:1px solid var(--nx-border);border-radius:9px;overflow:hidden;background:var(--nx-surface);justify-self:start}
.nx-fb-join button{border:0;border-inline-end:1px solid var(--nx-border);background:transparent;padding:7px 12px;cursor:pointer;font-size:0.8125rem;color:var(--nx-muted)}
.nx-fb-join button:last-child{border-inline-end:0}
.nx-fb-join button.active{background:var(--nx-primary-soft);color:var(--nx-primary-strong);font-weight:600}
.nx-fb-rows{display:grid;gap:8px}
.nx-fb-row{border:1px solid var(--nx-border);background:var(--nx-surface-2);border-radius:var(--nx-radius);padding:8px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:8px;align-items:start}
.nx-fb-row>select,.nx-fb-row>input{min-height:36px;border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);border-radius:8px;padding:6px 8px;min-width:0}
.nx-fb-row>input,.nx-fb-row>.nx-fb-choices,.nx-fb-row>.nx-fb-novalue{grid-column:1/-1}
.nx-fb-novalue{color:var(--nx-muted);font-size:0.8125rem;padding:6px 2px}
/* Secim degerleri: 9 durum, 8 sirket ya da daha uzun bir kisi listesi
   sigmali. Sarilan hap + kaydirma; native cok secimli liste RTL'de ve
   dokunmada kotu calisiyor. */
.nx-fb-choices{display:flex;flex-wrap:wrap;gap:4px;max-height:150px;overflow-y:auto;padding:2px}
.nx-fb-choices label{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius-pill);padding:4px 10px;cursor:pointer;font-size:0.75rem;max-width:100%}
.nx-fb-choices label>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-fb-choices label.secili{background:var(--nx-primary-soft);border-color:color-mix(in srgb,var(--nx-primary) 38%,var(--nx-border));color:var(--nx-primary-strong);font-weight:700}
.nx-fb-remove{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:8px;min-height:36px;min-width:36px;cursor:pointer;color:var(--nx-muted)}
.nx-fb-remove:hover{border-color:var(--nx-danger-text);color:var(--nx-danger-text)}
@media(max-width:767px){.nx-fb-row{grid-template-columns:minmax(0,1fr) auto}.nx-fb-row>select:first-of-type{grid-column:1/-1}}
/* r122 — sayfa pencereye sigmiyordu. Seyfettin: "sayfa buyuklugune gore
   ayarlansin."

   Olculdu (pencere 1021px): `.nx-page` kutusu 723px ama izgara KOLONU
   1482px, `body.scrollWidth` 1748px -- sayfa yatayda 727px tasiyordu ve
   icerik pencerenin bir kenarina sikisip oteki kenari bos birakiyordu.

   Sebep: `.nx-page{display:grid}` idi ama `grid-template-columns` HIC YOKTU.
   Ortuk kolon `auto` olur ve cocuklarin MAX-CONTENT genisligine gore buyur.
   Icindeki sarmali esnek kaplar (arac cubugu, dokuz haplik sirket seridi)
   icin max-content = butun ogelerin tek satirdaki toplami; yani kolon o
   toplama kadar aciliyor ve `flex-wrap` hic devreye girmiyordu.

   `minmax(0,1fr)` kolonu kabin genisligine sabitliyor: esnek kaplar artik
   gercekten sariyor, genis icerik (tablo) kendi `overflow-x` kabinda
   kayiyor. Ayni ders CLAUDE.md'de duruyordu -- r109'da tablo basliklari
   `minmax(0,1fr)` yuzunden sifira cokmustu; burasi tersi. */
.nx-page{grid-template-columns:minmax(0,1fr);min-width:0}
/* Ayni tuzak alt izgaralarda da var: bir tanesi tasarsa ustteki kolonu
   birlikte tasirir. */
.nx-admin-section,.nx-admin-overview,.nx-task-groups,.nx-task-cards{min-width:0}
/* r124 — eski arayuzun dort acilir suzgeci birebir, ve kanban panosu.
   Fark kod tarafinda: eski arayuz her suzgec degisiminde SUNUCUYA soruyordu
   (debounce'lu); burada liste zaten inmis, suzme bellekte ve aninda. */
.nx-qf{min-height:40px;border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);border-radius:var(--nx-radius);padding:0 10px;max-width:200px;min-width:0}
.nx-qf-date{max-width:170px}
.nx-qf-reset{min-height:40px;border:1px solid var(--nx-border);background:transparent;color:var(--nx-muted);border-radius:var(--nx-radius-pill);padding:0 12px;cursor:pointer;font-size:0.8125rem;font-weight:700}
.nx-qf-reset:disabled{opacity:.45;cursor:default}
.nx-qf-reset:not(:disabled):hover{border-color:var(--nx-danger-text);color:var(--nx-danger-text)}
/* Etkin suzgecler kaldirilabilir hap olarak gorunuyor: gorunmez bir suzgec
   durumu, kullaniciya eksik listeyi bozuk sistem gibi gosterir. */
.nx-active-filters{display:flex;flex-wrap:wrap;gap:6px;min-width:0}
.nx-af-chip{display:inline-flex;align-items:center;gap:2px;background:var(--nx-surface-2);border:1px solid var(--nx-border);border-radius:var(--nx-radius-pill);min-height:28px;padding-inline-start:10px;max-width:100%}
.nx-af-chip b{font-size:0.75rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}
.nx-af-chip button{border:0;background:transparent;color:var(--nx-muted);cursor:pointer;padding:0 8px;line-height:1}
.nx-af-chip button:hover{color:var(--nx-danger-text)}

/* Kanban panosu. Kolonlar `groupBy` secimini izliyor (durum/sirket/bolum/
   oncelik), o yuzden sabit bir kolon sayisi yok: yatayda kayiyor. */
.nx-board{display:flex;gap:10px;overflow-x:auto;padding-block-end:6px;min-width:0;align-items:flex-start;scroll-snap-type:x proximity}
.nx-board-col{flex:0 0 272px;max-width:272px;background:var(--nx-surface-2);border:1px solid var(--nx-border);border-radius:12px;padding:8px;display:grid;gap:8px;scroll-snap-align:start;min-width:0}
.nx-board-col>header{display:flex;align-items:center;gap:8px;padding-inline:2px}
.nx-board-col>header strong{font-size:0.8125rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}
.nx-board-col>header span{font-size:0.75rem;font-weight:600;color:var(--nx-muted);background:var(--nx-surface);border:1px solid var(--nx-border);border-radius:var(--nx-radius-pill);padding:1px 8px}
/* Kolon icinde dikey kayma: uzun bir kolon otekileri asagi itmesin ve
   pano tek ekranda okunur kalsin. */
.nx-board-cards{display:grid;gap:8px;max-height:calc(var(--next-visual-height,100dvh) - 340px);overflow-y:auto;min-width:0;padding:2px}
.nx-board-cards .nx-task-card{min-width:0}
@media(max-width:767px){
  .nx-board-col{flex-basis:86vw;max-width:86vw}
  .nx-qf{max-width:none;flex:1 1 140px}
}
/* r124 — takvim, zaman cizelgesi ve kapasite gorunumleri.
   Eski arayuzde alti gorunum vardi (لوحة/قائمة/جدول/تقويم/خط زمني/السعة),
   React'te uc; sirket sahibi "birebir ayni fonksiyon" istedi.
   Takvim ve cizelge BELLEKTEKI listeden ciziliyor (eski arayuz de oyle
   yapiyordu), o yuzden gorunum degistirmek anlik. Kapasite sunucudan gelmek
   zorunda ve TEMBEL yukleniyor: oteki gorunumler onu beklemiyor. */
.nx-calendar{display:grid;gap:8px;min-width:0}
.nx-cal-head{display:flex;align-items:center;gap:8px}
.nx-cal-head strong{font-size:0.875rem;font-weight:600;flex:1;text-align:center}
.nx-cal-head button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:9px;min-height:34px;min-width:34px;cursor:pointer;color:var(--nx-text)}
.nx-cal-today{padding-inline:12px;font-size:0.8125rem;font-weight:700}
.nx-cal-names{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.nx-cal-names span{font-size:0.75rem;font-weight:600;color:var(--nx-muted);text-align:center}
.nx-cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.nx-cal-cell{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:9px;min-height:96px;padding:5px;display:grid;gap:3px;align-content:start;min-width:0}
.nx-cal-cell.disi{opacity:.45}
.nx-cal-cell.bugun{border-color:var(--nx-primary);box-shadow:inset 0 0 0 1px var(--nx-primary)}
.nx-cal-day{font-size:0.75rem;font-weight:600;color:var(--nx-muted)}
/* Hap oncelik rengiyle sinirli: altin yalnizca yuksek ve kritikte
   (CLAUDE.md: "altin mucevher, dolgu degil"). */
.nx-cal-pill{border:0;border-inline-start:3px solid var(--nx-border);background:var(--nx-surface-2);border-radius:5px;padding:3px 6px;font-size:0.75rem;text-align:start;cursor:pointer;color:var(--nx-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.nx-cal-pill[data-priority="high"]{border-inline-start-color:var(--nx-warning)}
.nx-cal-pill[data-priority="critical"]{border-inline-start-color:var(--nx-danger-text)}
.nx-cal-more{font-size:0.75rem;color:var(--nx-muted)}

.nx-timeline{display:grid;gap:8px;min-width:0}
.nx-tl-head{display:flex;align-items:center;gap:8px}
.nx-tl-head label{display:inline-flex;align-items:center;gap:6px;font-size:0.75rem;font-weight:600;color:var(--nx-muted)}
.nx-tl-head select{min-height:34px;border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);border-radius:9px;padding:0 8px}
.nx-tl-count{margin-inline-start:auto;font-size:0.75rem;font-weight:600;color:var(--nx-muted);background:var(--nx-surface-2);border-radius:var(--nx-radius-pill);padding:2px 9px}
.nx-tl-empty{margin:0;padding:18px 2px;color:var(--nx-muted);font-size:0.8125rem;text-align:center}
.nx-tl-body{position:relative;display:grid;gap:4px;min-width:0}
.nx-tl-row{display:grid;grid-template-columns:minmax(120px,220px) minmax(0,1fr);gap:8px;align-items:center;min-width:0}
.nx-tl-label{border:0;background:transparent;text-align:start;cursor:pointer;color:var(--nx-text);display:flex;align-items:center;gap:6px;min-width:0;padding:0}
.nx-tl-label>span{font-size:0.8125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.nx-tl-label>em{font-style:normal;font-size:0.75rem;color:var(--nx-muted);flex:0 0 auto}
.nx-tl-track{position:relative;height:26px;background:var(--nx-surface-2);border-radius:7px;min-width:0}
.nx-tl-bar{position:absolute;inset-block:3px;border-radius:5px;background:var(--nx-neutral-fill);display:flex;align-items:center;justify-content:center;min-width:0}
.nx-tl-bar>b{font-size:0.75rem;font-weight:600;color:var(--nx-on-fill)}
.nx-tl-bar.g-active{background:var(--nx-primary)}
.nx-tl-bar.g-blocked{background:var(--nx-danger-text)}
.nx-tl-bar.g-wait{background:var(--nx-warning)}
.nx-tl-bar.g-done{background:var(--nx-success)}
/* Taban cubugu: planlanan aralik, gerceklesen cubugun arkasinda. */
.nx-tl-base{position:absolute;inset-block:9px;border-radius:4px;background:var(--nx-border)}
/* Bugun isareti -- eski cizelgede YOKTU, cubuklarin gecikmis mi oldugu
   gozle anlasilmiyordu. */
.nx-tl-now{position:absolute;inset-block:0;width:2px;background:var(--nx-danger-text);opacity:.55;pointer-events:none;z-index:1}

.nx-capacity{display:grid;gap:6px;min-width:0}
.nx-cap-row{display:grid;grid-template-columns:minmax(120px,200px) minmax(0,1fr) auto;gap:10px;align-items:center;border-block-end:1px solid var(--nx-border);padding:7px 2px;min-width:0}
.nx-cap-row:last-child{border-block-end:0}
.nx-cap-kim{display:grid;min-width:0}
.nx-cap-kim strong{font-size:0.8125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-cap-kim small{font-size:0.75rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-cap-bar{height:9px;background:var(--nx-surface-2);border-radius:var(--nx-radius-pill);overflow:hidden;min-width:0}
.nx-cap-bar>span{display:block;height:100%;border-radius:var(--nx-radius-pill);background:var(--nx-success)}
.nx-cap-row.near .nx-cap-bar>span{background:var(--nx-warning)}
.nx-cap-row.over .nx-cap-bar>span{background:var(--nx-danger-text)}
.nx-cap-sayilar{display:grid;justify-items:end;gap:var(--nx-s-hair)}
.nx-cap-sayilar b{font-size:0.875rem;line-height:1}
.nx-cap-sayilar small{font-size:0.75rem;color:var(--nx-muted);white-space:nowrap}
@media(max-width:767px){
  .nx-cal-cell{min-height:72px}
  .nx-cal-pill{font-size:0.6875rem}
  .nx-tl-row{grid-template-columns:minmax(90px,140px) minmax(0,1fr)}
  .nx-cap-row{grid-template-columns:minmax(0,1fr) auto;gap:6px}
  .nx-cap-bar{grid-column:1/-1}
}
/* r125 — cizelgede ileri/geri. Olmadan pencere bugunden basliyordu ve
   gecmis isler hic gorunmuyordu (uretim verisinin buyuk kismi gecmiste). */
.nx-tl-head>button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:9px;min-height:34px;min-width:34px;cursor:pointer;color:var(--nx-text)}
.nx-tl-span{font-size:0.75rem;font-weight:700;color:var(--nx-muted)}
/* r127 — sirket SECICISI kart oldu. Seyfettin "her sirkete ayri ayri kartlar
   olsun AYNI SEKILDE" demisti; ilk yazimda sekiz sirket sigsin diye hap
   yapmistim, yani istenen bicimi kendi kararimla degistirmistim.
   Sahiplik kartlariyla ayni dil; sarmali izgara sekizini de tasiyor. */
.nx-company-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:8px;min-width:0}
.nx-company-cards button{border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:12px;padding:9px 10px;display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:9px;cursor:pointer;text-align:start;color:var(--nx-text);min-width:0;transition:background var(--nx-dur-micro) var(--nx-ease-standard),border-color var(--nx-dur-micro) var(--nx-ease-standard)}
.nx-company-cards button:hover{border-color:color-mix(in srgb,var(--nx-primary) 38%,var(--nx-border));background:var(--nx-primary-soft)}
.nx-company-cards button>span{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:var(--nx-primary-soft);color:var(--nx-primary-strong);font-size:0.9375rem}
.nx-company-cards button>div{display:grid;min-width:0}
.nx-company-cards button strong{font-size:0.8125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-company-cards button small{font-size:0.75rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-company-cards button>b{font-size:1.0625rem;font-weight:600;line-height:1}
.nx-company-cards button.active{background:var(--nx-primary);border-color:var(--nx-primary);color:var(--nx-on-fill)}
.nx-company-cards button.active small,.nx-company-cards button.active>b{color:var(--nx-on-fill)}
.nx-company-cards button.active>span{background:color-mix(in srgb,#000 18%,var(--nx-primary));color:var(--nx-on-fill)}
@media(max-width:767px){.nx-company-cards{grid-template-columns:1fr}}
/* r127 — takvim ve cizelgede SIRKET ADI. Seyfettin: "hangi sirketin gorevi
   belli olsun." Liste, tablo, kart ve pano sirketi zaten basliklarla
   gosteriyordu; bu iki gorunumde yalnizca gorev basligi vardi ve "tum
   sirketler" kapsaminda hangi isin kime ait oldugu anlasilmiyordu. */
.nx-cal-pill{display:grid;gap:0;line-height:1.2}
.nx-cal-pill>b{font-size:0.75rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-cal-pill>i{font-style:normal;font-size:0.6875rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-tl-label{display:grid!important;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 6px}
.nx-tl-label>span{grid-column:1}
.nx-tl-label>i{grid-column:1;font-style:normal;font-size:0.6875rem;color:var(--nx-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nx-tl-label>em{grid-column:2;grid-row:1/3}
/* r132 — tablo hucresi dururken salt okunur, tiklaninca denetim.
   Olculdu: 392 form denetimi, gecis 2987 ms. Satir ici duzenleme
   kaybolmuyor; denetim ihtiyac aninda kuruluyor. */
.nx-lazy-cell{display:block;min-width:0;min-height:24px;border-radius:var(--nx-radius-sm)}
.nx-lazy-cell.duzenlenebilir{cursor:text}
.nx-lazy-cell.duzenlenebilir:hover{background:var(--nx-surface-2)}
.nx-lazy-cell.duzenlenebilir:focus-visible{outline:2px solid var(--nx-primary);outline-offset:1px}
.nx-lazy-cell.aktif{background:transparent}
/* r135 — tabloda kaydirma akiciligi. Seyfettin: "akici degil, asagi
   indigimde cok."

   Olculdu (canli, 1440x900): tablo IC ICE bir kaydirma kabinda duruyordu --
   2297px icerik yalnizca 420px pencerede, yani 49 satir 8'er 8'er
   goruluyordu ve her karede 10 sticky baslik hucresi yeniden boyaniyordu.
   Sayfanin kendisi hic kaydirmiyordu.

   Kap KALDIRILAMIYOR: yatay kaydirma icin `overflow-x:auto` gerekiyor ve CSS
   `overflow-x:auto` ile `overflow-y:visible`i birlikte kabul etmiyor -- kap
   kalkarsa sticky basliklar da gider ve dokuz sutunlu tablo basliksiz kalir.

   Bunun yerine: pencereden daha az pay aliniyor (satir sayisi ~2 katina
   cikiyor, kaydirma seyreliyor) ve `contain` ile boyama kabin icine
   kilitleniyor -- disaridaki sticky kabuk her karede yeniden
   degerlendirilmiyor. */
.nx-task-table-scroll{max-height:calc(var(--next-visual-height,100dvh) - 168px);contain:paint}
/* Sticky basliklar kendi katmaninda kalsin: her karede yeniden boyanmak
   yerine bir kez katmanlanip tasiniyor. */
.nx-editable-task-table th{will-change:transform}
@media(max-width:767px){.nx-task-table-scroll{max-height:calc(var(--next-visual-height,100dvh) - 210px)}}
/* r136 — tablonun yuksekligi artik OLCULUYOR, tahmin edilmiyor.

   r135'te kaba sabit bir pay vermistim (`100dvh - 168px`). Canlida olcunce
   iki kusuru cikti:
     - gorunur satir 8 -> 16 oldu, AMA sayfa 1212px'e uzadi: kullanici artik
       IC ICE iki kaydiriciyla ugrasiyordu (once sayfa, sonra tablo).
     - sabit sayi zaten tutmuyor: tablonun ustundeki kabuk 462px ve bu sayi
       filtre haplari satira sigmayinca, sirket seridi degisince ve ekran
       degisince oynuyor.

   Artik `viewport.ts` kabin belge icindeki ust noktasini olcup
   `--nx-tablo-ust` olarak yaziyor; kap tam kalan boslugu dolduruyor. Sayfa
   kaymiyor -- tek kaydirma kaliyor. Degisken yoksa eski davranis surer. */
.nx-task-table-scroll{max-height:calc(var(--next-visual-height,100dvh) - var(--nx-tablo-ust,260px) - 20px);contain:paint}

/* Satir kazanci YALNIZCA ustteki kabugu kucultmekten gelir; kap ne kadar
   iyi olculse de 462px kabuk pencerenin yarisini yiyor. Olculen dagilim:
   arac cubugu 136, baslik 86, sahiplik secici 64, ust bar 64, filtre seridi
   37, aradaki bosluklar ~75.

   Asagisi HICBIR kontrolu kaldirmiyor -- Seyfettin filtrelerin tamaminin
   durmasini istedi. Yalnizca dolgu ve bosluk daraltiliyor. */
.nx-page:has(.nx-task-toolbar){gap:10px}
.nx-task-heading{padding-block:0}
.nx-task-heading h1{font-size:1.0625rem;line-height:1.25}
.nx-task-toolbar{gap:6px}
.nx-ownership-switch>button{min-height:48px;padding:6px 8px}
.nx-ownership-switch>button>span{width:26px;height:26px;font-size:0.9375rem}
.nx-filter-strip{padding-block:0 2px}

/* ---------------------------------------------------------------------------
   r142 — Ana ekran: gruplu gorev listesi + kutucuk sayaclari (yon A).

   Iki blok birlestirildi. Dort sayac karti ile hizli erisim kutucuklari ayni
   filtreleri aciyordu; sayilar artik kutucugun icinde. Sekiz sirketlik kutucuk
   izgarasi kalkti: 5+3 diye bolunup son satiri yarim birakiyordu ve sirket
   zaten listenin iskeleti oldu.
   --------------------------------------------------------------------------- */

/* Kutucuk sayaci: rakam kutucugun kendi vurgusunu tasiyor, ayri bir rozet degil. */
.nx-launcher-tile{position:relative}
.nx-launcher-count{
  position:absolute; inset-block-start:var(--nx-s2); inset-inline-end:var(--nx-s3);
  font-size:1.375rem; font-weight:600; line-height:1;
  font-variant-numeric:tabular-nums; color:var(--nx-launcher-accent,var(--nx-primary));
}
.nx-launcher-count[data-zero]{color:var(--nx-muted); font-weight:600; opacity:.55}

/* --- gruplu liste --- */
.nx-home-groups{display:grid; gap:var(--nx-s3)}
.nx-hg-head{display:flex; align-items:baseline; gap:var(--nx-s3); padding-inline:var(--nx-s-hair)}
.nx-hg-head h2{margin:0; font-size:1rem; letter-spacing:-.01em}
.nx-hg-head small{color:var(--nx-muted); font-size:0.8125rem}

.nx-hg-panel{padding:0; overflow:hidden}
.nx-hg-group + .nx-hg-group{border-top:1px solid var(--nx-border)}

.nx-hg-group-head{
  width:100%; border:0; background:var(--nx-surface-2); font:inherit; color:inherit;
  text-align:start; cursor:pointer; padding:var(--nx-s3) var(--nx-s4);
  display:flex; align-items:center; gap:var(--nx-s3);
  border-bottom:1px solid var(--nx-border);
  transition:background var(--nx-dur-micro) var(--nx-ease-standard);
}
.nx-hg-group-head:hover{background:color-mix(in srgb,var(--nx-surface-2) 70%,var(--nx-border))}
.nx-hg-group-head strong{font-size:0.8125rem; font-weight:700}

/* Daraltma oku mantiksal yonde: RTL'de kendiliginden ters cevriliyor. */
.nx-hg-caret{
  width:0; height:0; flex:0 0 auto;
  border-inline-start:5px solid var(--nx-muted);
  border-block-start:4px solid transparent; border-block-end:4px solid transparent;
  transform:rotate(90deg); transition:transform var(--nx-dur-micro) var(--nx-ease-standard);
}
.nx-hg-caret[data-closed]{transform:rotate(0deg)}

.nx-hg-count{
  background:var(--nx-surface); border:1px solid var(--nx-border); color:var(--nx-muted);
  font-size:0.75rem; font-weight:600; padding:1px var(--nx-s2); border-radius:var(--nx-radius-pill);
  font-variant-numeric:tabular-nums;
}
.nx-hg-late{
  background:var(--nx-danger-soft); color:var(--nx-danger-text);
  font-size:0.75rem; font-weight:600; padding:1px var(--nx-s2); border-radius:var(--nx-radius-pill);
}

.nx-hg-rows{list-style:none; margin:0; padding:0}
.nx-hg-rows > li + li{border-top:1px solid var(--nx-border)}
.nx-hg-rows > li > button{
  width:100%; border:0; background:transparent; font:inherit; color:inherit;
  text-align:start; cursor:pointer; padding:var(--nx-s3) var(--nx-s4);
  display:grid; grid-template-columns:5px minmax(0,1fr) auto auto auto;
  gap:var(--nx-s3); align-items:center;
  transition:background var(--nx-dur-micro) var(--nx-ease-standard);
}
.nx-hg-rows > li > button:hover{background:var(--nx-surface-2)}

/* Gecikme SATIRI boyamiyor: kirmizi satir listeyi okunmaz yapar (r99 dersi).
   Ince bir kenar cubugu ve sondaki sure etiketi yetiyor. */
.nx-hg-pin{height:30px; border-radius:3px; background:var(--nx-surface-2)}
.nx-hg-rows > li[data-ton="gec"] .nx-hg-pin{background:var(--nx-danger)}
.nx-hg-rows > li[data-ton="yakin"] .nx-hg-pin{background:var(--nx-accent)}

.nx-hg-text{min-width:0}
.nx-hg-text strong{
  display:block; font-size:0.875rem; font-weight:600;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}

.nx-hg-status{
  font-size:0.75rem; font-weight:600; padding:2px var(--nx-s2); border-radius:var(--nx-radius-pill);
  white-space:nowrap; background:var(--nx-surface-2); color:var(--nx-muted);
}
.nx-hg-status[data-status="in_progress"]{background:var(--nx-primary-soft); color:var(--nx-primary-strong)}
.nx-hg-status[data-status="waiting_approval"]{background:var(--nx-warning-soft); color:var(--nx-warning-text)}
.nx-hg-status[data-status="blocked"]{background:var(--nx-danger-soft); color:var(--nx-danger-text)}
.nx-hg-status[data-status="completed"],
.nx-hg-status[data-status="verified"]{background:var(--nx-success-soft); color:var(--nx-success-text)}

/* Avatar yigini: isim yazisi yerine. Uc kisiden fazlasi +N olarak toplaniyor. */
.nx-hg-people{display:flex; align-items:center}
.nx-hg-people i{
  width:26px; height:26px; border-radius:50%; flex:0 0 auto;
  background:var(--nx-primary-soft); color:var(--nx-primary-strong);
  display:grid; place-items:center; font-style:normal;
  font-size:0.6875rem; font-weight:700;
  border:2px solid var(--nx-surface);
}
.nx-hg-people i + i{margin-inline-start:-8px}
.nx-hg-people i[data-more]{background:var(--nx-surface-2); color:var(--nx-muted)}
.nx-hg-people i[data-none]{background:transparent; color:var(--nx-muted); border-style:dashed}

.nx-hg-rows time{
  font-size:0.75rem; color:var(--nx-muted); white-space:nowrap;
  font-variant-numeric:tabular-nums; min-width:72px; text-align:end;
}
.nx-hg-rows > li[data-ton="gec"] time{color:var(--nx-danger-text); font-weight:700}

/* Grubun sonundaki satir ici ekleme -- ilk isteklerden biriydi. */
.nx-hg-add > button{
  width:100%; border:0; background:transparent; font:inherit;
  color:var(--nx-muted); text-align:start; cursor:pointer;
  padding:var(--nx-s3) var(--nx-s4); display:flex; align-items:center; gap:var(--nx-s2);
  font-size:0.8125rem;
}
.nx-hg-add > button:hover{background:var(--nx-surface-2); color:var(--nx-primary)}
.nx-hg-add > button span{font-size:1rem; font-weight:700; line-height:1}

@media(max-width:767px){
  .nx-hg-rows > li > button{grid-template-columns:5px minmax(0,1fr) auto; gap:var(--nx-s2);
    padding:var(--nx-s3)}
  .nx-hg-status{display:none}
  .nx-hg-people i{width:22px; height:22px; font-size:0.625rem}
  .nx-hg-rows time{min-width:0}
  .nx-launcher-count{font-size:1.125rem}
}

/* ---------------------------------------------------------------------------
   r142 — Hizli erisim tek satir.

   Izgara yoneticinin verdigi `w`/`h` acikliklariyla cok satira tasiyordu ve
   ana ekranda bos yer kapliyordu. Ana ekranda kutucuklar tek satirda, esit
   genislikte ve daha kucuk. Siralama (`--nx-launcher-order`) korunuyor;
   degisen yalnizca acikliklarin bu yuzeyde uygulanmamasi.

   Not: bu kural YALNIZCA ana ekran icin. Interface Designer'in kendi
   onizlemesi (`.nx-personalizer-preview` altindaki launcher) yoneticinin
   kurdugu duzeni oldugu gibi gostermeye devam ediyor, yoksa duzenledigi sey
   ile gordugu sey ayrisirdi.
   --------------------------------------------------------------------------- */
.nx-home-page .nx-launcher-grid{
  grid-template-columns:none;
  grid-auto-flow:column;
  grid-auto-columns:minmax(0,1fr);
  gap:var(--nx-s2);
}
.nx-home-page .nx-launcher-tile{
  grid-column:auto; grid-row:auto;
  min-height:0; padding:var(--nx-s2) var(--nx-s3);
  flex-direction:column; align-items:flex-start; justify-content:center;
  gap:var(--nx-s-hair);
}
.nx-home-page .nx-launcher-glyph{
  width:22px; height:22px; flex:0 0 22px; font-size:0.8125rem; border-radius:7px;
}
.nx-home-page .nx-launcher-tile strong{
  font-size:0.75rem; font-weight:600; line-height:1.25;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:100%;
}
/* Sayi kose yerine metnin yaninda: kutucuk artik alcak, kosede ust uste binerdi. */
.nx-home-page .nx-launcher-count{
  position:static; font-size:1rem; font-weight:600; line-height:1;
}
.nx-home-page .nx-launcher-tile > span:nth-of-type(2){
  display:flex; align-items:baseline; gap:var(--nx-s2); min-width:0; max-width:100%;
}

@media(max-width:900px){
  /* Dar ekranda tek satir okunmaz hale gelir: yatay kaydirmaya birakiliyor,
     alta tasmiyor -- istenen "altta bir sey olmasin" kurali korunuyor. */
  .nx-home-page .nx-launcher-grid{
    overflow-x:auto; grid-auto-columns:minmax(116px,1fr);
    scroll-snap-type:x proximity; padding-bottom:var(--nx-s-hair);
  }
  .nx-home-page .nx-launcher-tile{scroll-snap-align:start}
}

/* Sirket secicisi ve satirdaki sirket adi (r142 → tek liste). */
.nx-hg-head{gap:var(--nx-s3)}
.nx-hg-head small{
  background:var(--nx-surface-2); color:var(--nx-muted);
  font-size:0.75rem; font-weight:700; padding:1px var(--nx-s2);
  border-radius:var(--nx-radius-pill); font-variant-numeric:tabular-nums;
}
.nx-hg-filter{
  margin-inline-start:auto; max-width:230px;
  border:1px solid var(--nx-border); background:var(--nx-surface);
  color:var(--nx-text); border-radius:9px; padding:6px var(--nx-s3);
  font:inherit; font-size:0.8125rem; cursor:pointer;
}
.nx-hg-filter:hover{border-color:var(--nx-primary)}
.nx-hg-text small{
  display:block; color:var(--nx-muted); font-size:0.75rem;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.nx-home-handoff{display:flex; justify-content:center; padding-block-start:var(--nx-s2)}

/* Randevu karti (r143): tarih kupu ve satir dili `.nx-deadlines` ailesinden.
   r151'de gorunum sekmesi kaldirildi ve bu bicim sagdaki randevu sutununun
   kalici gorunumu oldu -- kullanicinin begendigi tasarim aynen korundu.
   Sekme dugmelerinin stilleri kimse kullanmadigi icin silindi. */
.nx-deadlines-rows{list-style:none; margin:0; padding:0}
.nx-deadlines-rows > li + li{border-top:1px solid var(--nx-border)}
.nx-deadlines-rows > li > button{
  width:100%; border:0; background:transparent; font:inherit; color:inherit;
  text-align:start; cursor:pointer; padding:var(--nx-s3) var(--nx-s4);
  display:grid; grid-template-columns:auto minmax(0,1fr); gap:var(--nx-s3);
  align-items:center;
  transition:background var(--nx-dur-micro) var(--nx-ease-standard);
}
.nx-deadlines-rows > li > button:hover{background:var(--nx-surface-2)}
.nx-deadlines-rows .nx-deadline-date{
  display:grid; justify-items:center; min-width:46px;
  background:var(--nx-surface-2); border-radius:var(--nx-radius); padding:5px var(--nx-s2);
}
.nx-deadlines-rows > li[data-ton="gec"] .nx-deadline-date{
  background:var(--nx-danger-soft); color:var(--nx-danger-text);
}
.nx-deadlines-rows .nx-deadline-date small{
  font-size:0.625rem; font-weight:700; letter-spacing:.06em; color:var(--nx-muted);
}
.nx-deadlines-rows > li[data-ton="gec"] .nx-deadline-date small{color:inherit}
.nx-deadlines-rows .nx-deadline-date strong{
  font-size:1.0625rem; font-weight:600; line-height:1.1; font-variant-numeric:tabular-nums;
}
.nx-deadlines-rows .nx-deadline-title{display:grid; gap:1px; min-width:0}
.nx-deadlines-rows .nx-deadline-title strong{
  font-size:0.875rem; font-weight:600;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.nx-deadlines-rows .nx-deadline-title small{
  font-size:0.75rem; color:var(--nx-muted);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.nx-deadlines-rows > li[data-ton="gec"] .nx-deadline-title small{
  color:var(--nx-danger-text); font-weight:600;
}

/* ---------------------------------------------------------------------------
   r151 — Ana ekranda yan yana iki sutun: liste ve randevular.

   Onceden ikisi bir sekme ciftiydi. Sekme ayni veriyi iki kez gostermiyordu
   ama kullanicinin ayni anda iki soruya bakmasini engelliyordu: "ne yapmam
   gerekiyor" ve "bugun nerede olmam gerekiyor". Simdi ikisi yan yana ve
   kumeleri ayrik -- bolen kural gorevin teslim saati olup olmadigi.

   Sutunlar esit genislikte degil: liste satirlari baslik + kisi + durum
   tasiyor, randevu karti tarih kupu + iki satir metin. 1.35fr / 1fr olcumle
   secildi; esit verildiginde randevu basliklari kirpilmadan sigmiyordu.
   --------------------------------------------------------------------------- */
.nx-hg-columns{display:grid; grid-template-columns:1.35fr 1fr; gap:var(--nx-s3); align-items:start}
.nx-hg-col{display:grid; gap:var(--nx-s2); min-width:0}
.nx-hg-col > h3{
  margin:0; display:flex; align-items:center; gap:var(--nx-s2);
  font-size:0.8125rem; color:var(--nx-muted); padding-inline:var(--nx-s-hair);
}
/* Basliktaki sayi, o sutunda CIZILEN satir sayisi -- ayri bir sayac ucundan
   okunmuyor. "Kart 16 diyor, liste 7 gosteriyor" hatasi bu depoda iki kez
   yasandi. */
.nx-hg-col > h3 > b{
  background:var(--nx-surface-2); color:var(--nx-muted);
  font-size:0.75rem; padding:1px var(--nx-s2); border-radius:var(--nx-radius-pill);
  font-variant-numeric:tabular-nums;
}
/* Randevu ekleme satiri: gun sec, ekle. Panelin alt kenarina oturuyor. */
.nx-appt-add{
  display:flex; align-items:center; gap:var(--nx-s2);
  padding:var(--nx-s2) var(--nx-s3); border-top:1px solid var(--nx-border);
  background:var(--nx-surface-2);
}
.nx-appt-add > input{
  flex:1 1 auto; min-width:0; min-height:34px;
  border:1px solid var(--nx-border); border-radius:8px;
  background:var(--nx-surface); color:var(--nx-text); padding:4px var(--nx-s2);
  font:inherit; font-size:0.8125rem;
}
.nx-appt-add > button{
  flex:0 0 auto; min-height:34px; display:inline-flex; align-items:center; gap:var(--nx-s1);
  border:1px solid var(--nx-primary); border-radius:8px;
  background:var(--nx-primary); color:#fff; font:inherit; font-size:0.8125rem;
  font-weight:700; padding:0 var(--nx-s3); cursor:pointer;
}
.nx-appt-add > button:hover{background:var(--nx-primary-strong); border-color:var(--nx-primary-strong)}
.nx-appt-add > button > span{font-size:1rem; line-height:1}
/* Ekleme satiri artik bir <li> degil, panelin altinda ayri bir blok. */
.nx-hg-add{border-top:1px solid var(--nx-border)}

/* r166 — Listeler ekrani asagi dogru uzatiyordu.
   Olculdu: 31 gorev + 35 randevu ile paneller 1988px ve 2439px, sayfa 860px'lik
   pencerede 2887px'e cikiyordu. Kullanici "hepsinin gozukmesi cirkin" dedi.

   Sabit satir sayisi yerine YUKSEKLIK siniri: 860px'lik pencerede baslik ve
   hizli erisimden sonra ~580px kaliyor; 6 satir (378px) sigiyor ama ekranin
   yarisini bos birakiyor, 10 satir (630-680px) ise sigmiyor ve sayfa yine
   tasiyordu. `min(560px,62svh)` normal ekranda ~8 satir gosteriyor, kisa
   pencerede kendiliginden azaliyor.

   Kaydirma PANELE degil LISTEYE veriliyor: "+ gorev ekle" ve randevu ekleme
   satiri panelin altinda sabit kalsin, listeyle birlikte kaymasin. */
.nx-hg-rows,.nx-deadlines-rows{max-height:min(560px,62svh);overflow-y:auto;
  overscroll-behavior:contain;scrollbar-width:thin}

@media(max-width:900px){
  /* Iki sutun alt alta gectiginde ikisini birden ekranda tutmak mumkun degil;
     tek sutunda daha uzun bir liste daha kullanisli. */
  .nx-hg-rows,.nx-deadlines-rows{max-height:min(520px,58svh)}
}

@media(max-width:900px){
  /* Dar ekranda yan yana iki sutun satirlari kirpiyor; alt alta geciyorlar.
     Sira degismiyor: once liste, sonra randevular. */
  .nx-hg-columns{grid-template-columns:1fr}
}
@media(max-width:767px){
  /* Telefonda gun secici ve ekleme dugmesi parmakla kullaniliyor; 34px dar.
     Kural temel tanimdan SONRA: ayni ozgullukte sonraki kural kazaniyor ve
     dosyanin basindaki mobil blok bu tanimdan once geliyor. */
  .nx-appt-add > input,.nx-appt-add > button{min-height:40px}
}

/* ---------------------------------------------------------------------------
   r146 — Filtre paneli ve görünüm düzenleyici.

   Araç çubuğunda beş açılır süzgeç, gruplama, sıralama, kayıtlı görünüm, yedi
   görünüm düğmesi ve sütun seçici yan yana duruyordu; ilk görevi görmek için
   uzun bir kontrol alanını geçmek gerekiyordu. Süzgeçler tek düğmenin,
   yerleşim ayarları ayrı bir düğmenin arkasına alındı.

   Panel MASAÜSTÜNDE yan panel, MOBİLDE alt panel — işaretleme aynı, ayrımı
   yalnızca bu dosya yapıyor.
   --------------------------------------------------------------------------- */
.nx-task-toolbar{display:flex;align-items:center;gap:var(--nx-s2);flex-wrap:wrap}
.nx-task-search{flex:1;min-width:200px}

.nx-filter-open{
  display:inline-flex;align-items:center;gap:var(--nx-s2);flex:0 0 auto;
  border:1px solid var(--nx-border-strong);background:var(--nx-surface);color:var(--nx-text);
  border-radius:var(--nx-radius-pill);padding:8px var(--nx-s4);font:inherit;font-size:0.8125rem;
  font-weight:600;min-height:38px;cursor:pointer;
  transition:border-color var(--nx-dur-micro) var(--nx-ease-standard);
}
/* Ikon metinle ayni optik agirlikta olsun: 16px ve currentColor. */
.nx-filter-open .nx-brand-icon{width:16px;height:16px;flex:0 0 auto}
.nx-filter-open:hover{border-color:var(--nx-primary)}
.nx-filter-open[aria-expanded="true"]{border-color:var(--nx-primary);background:var(--nx-primary-soft)}
.nx-filter-open b{
  background:var(--nx-primary);color:#fff;font-size:0.6875rem;font-weight:700;
  min-width:18px;height:18px;border-radius:var(--nx-radius-pill);display:grid;place-items:center;
  padding:0 5px;font-variant-numeric:tabular-nums;
}







/* --- panel --- */
.nx-fp-layer{position:fixed;inset:0;z-index:var(--nx-z-overlay)}
.nx-fp-backdrop{position:absolute;inset:0;border:0;background:rgba(15,23,34,.42);cursor:pointer}
.nx-fp{
  position:absolute;background:var(--nx-surface);display:flex;flex-direction:column;
  box-shadow:var(--nx-shadow);overflow:hidden;
  inset-block:0;inset-inline-end:0;width:min(400px,100vw);
  border-inline-start:1px solid var(--nx-border);
}
.nx-fp > header{
  display:flex;align-items:center;gap:var(--nx-s3);padding:var(--nx-s4);
  border-bottom:1px solid var(--nx-border);flex:0 0 auto;
}
.nx-fp > header strong{flex:1;font-size:0.9375rem}
.nx-fp > header button{
  border:0;background:transparent;font:inherit;font-size:1rem;color:var(--nx-muted);
  cursor:pointer;width:32px;height:32px;border-radius:var(--nx-radius-pill);
}
.nx-fp > header button:hover{background:var(--nx-surface-2);color:var(--nx-text)}
.nx-fp-body{flex:1;overflow:auto;padding:var(--nx-s4);display:grid;gap:var(--nx-s4);align-content:start}
.nx-fp-field{display:grid;gap:var(--nx-s2)}
.nx-fp-field > span{font-size:0.75rem;font-weight:600;color:var(--nx-muted)}
.nx-fp-field select,.nx-fp-field input{
  width:100%;min-height:40px;border:1px solid var(--nx-border);background:var(--nx-surface);
  color:var(--nx-text);border-radius:var(--nx-design-control-radius);padding:0 var(--nx-s3);font:inherit;font-size:0.875rem;
}
/* === Filtre ve gorunum panelleri (r172) ==================================
   Kullanici ikisini de "ilkel" buldu: ust uste bes duz acilir menu, hicbir
   hiyerarsi, ve uygulamadan once sonucu gorme imkani yok.

   Uc degisiklik, ucu de kullanimi kisaltiyor:
   - Etkin filtreler ustte kaldirilabilir cip olarak; onceden bir filtrenin
     acik oldugunu anlamak icin bes menuyu tek tek okumak gerekiyordu.
   - Durum acilir menu degil cip: kucuk ve sabit bir kume, iki dokunus yerine
     bir dokunus. Secim yine TEKLI, filtre modeli degismedi.
   - "Uygula" dugmesi kac sonuc cikacagini yaziyor; bos donen bir filtreyi
     uygulayip geri almak gerekmiyor.
   --------------------------------------------------------------------- */
.nx-fp-chips{display:flex;flex-wrap:wrap;gap:var(--nx-s2);padding-block-end:var(--nx-s2);
  border-block-end:1px solid var(--nx-border);margin-block-end:var(--nx-s2)}
.nx-fp-chip{display:inline-flex;align-items:center;gap:var(--nx-s2);min-height:30px;
  padding:0 var(--nx-s3);border-radius:var(--nx-radius-pill);cursor:pointer;
  border:1px solid var(--nx-primary);background:var(--nx-primary-soft);
  color:var(--nx-primary-strong);font:inherit;font-size:0.78rem;font-weight:600;
  max-width:100%;overflow:hidden}
.nx-fp-chip>span{opacity:.7;font-size:.9em}
.nx-fp-chip:hover{background:var(--nx-primary);color:#fff}

.nx-fp-field-chips{display:grid;gap:var(--nx-s2)}
.nx-fp-statuses{display:flex;flex-wrap:wrap;gap:var(--nx-s1)}
.nx-fp-statuses>button{min-height:32px;padding:0 var(--nx-s3);border-radius:var(--nx-radius-pill);
  border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-muted);
  font:inherit;font-size:0.78rem;font-weight:600;cursor:pointer;white-space:nowrap}
.nx-fp-statuses>button:hover{border-color:var(--nx-border-strong);color:var(--nx-text)}
.nx-fp-statuses>button.aktif{background:var(--nx-text);border-color:var(--nx-text);color:var(--nx-bg)}

/* Sonuc sayaci dugmenin icinde: goz zaten oraya gidiyor. */
.nx-fp-apply>b{margin-inline-start:var(--nx-s2);min-width:20px;height:19px;padding:0 5px;
  border-radius:var(--nx-radius-pill);display:inline-grid;place-items:center;
  background:rgba(255,255,255,.22);font-size:.72rem;font-variant-numeric:tabular-nums}

/* Gorunum paneli: acilir menu yerine segment. */
.nx-vp-alan{display:grid;gap:var(--nx-s2)}
.nx-vp-alan>span{font-size:0.75rem;font-weight:700;color:var(--nx-muted)}
.nx-vp-segment{flex-wrap:wrap;max-width:100%}
.nx-vp-segment>button{font-size:0.75rem;padding:4px 11px}

.nx-fp-note{
  margin:0;background:var(--nx-warning-soft);color:var(--nx-warning-text);
  border-radius:var(--nx-radius-sm);padding:var(--nx-s2) var(--nx-s3);font-size:0.75rem;
}
.nx-fp-advanced{
  display:grid;grid-template-columns:1fr auto;gap:var(--nx-s2);align-items:center;
  border-top:1px solid var(--nx-border);padding-top:var(--nx-s4);
}
.nx-fp-advanced > span{grid-column:1/-1;font-size:0.75rem;font-weight:600;color:var(--nx-muted)}
.nx-fp-advanced > button{
  border:1px dashed var(--nx-border);background:transparent;color:var(--nx-text);
  border-radius:var(--nx-radius-pill);padding:9px var(--nx-s3);font:inherit;font-size:0.8125rem;
  text-align:start;cursor:pointer;min-width:0;overflow:hidden;text-overflow:ellipsis;
}
.nx-fp-advanced > button:hover{border-color:var(--nx-primary);color:var(--nx-primary)}
.nx-fp-clear-adv{
  border:0;background:transparent;color:var(--nx-muted);cursor:pointer;
  width:32px;height:32px;border-radius:var(--nx-radius-pill);font-size:0.875rem;
}
.nx-fp > footer{
  display:flex;gap:var(--nx-s2);padding:var(--nx-s3) var(--nx-s4);
  border-top:1px solid var(--nx-border);flex:0 0 auto;
  padding-bottom:calc(var(--nx-s3) + env(safe-area-inset-bottom));
}
.nx-fp > footer button{
  border:1px solid var(--nx-border);background:var(--nx-surface);color:var(--nx-text);
  border-radius:var(--nx-radius-pill);padding:0 var(--nx-s4);min-height:42px;font:inherit;
  font-size:0.875rem;cursor:pointer;
}
.nx-fp-clear{margin-inline-end:auto}
.nx-fp-apply{
  background:var(--nx-primary);border-color:var(--nx-primary);color:#fff;font-weight:700;
  flex:1;max-width:180px;
}
.nx-fp-apply:hover{background:var(--nx-primary-strong)}

@media(max-width:767px){
  /* Mobilde alt panel: form uzun, klavye acilinca ust yariyi yiyor. */
  .nx-fp{
    inset-block-start:auto;inset-block-end:0;inset-inline:0;width:100%;
    max-height:88dvh;border-radius:18px 18px 0 0;border-inline-start:0;
    border-top:1px solid var(--nx-border);
  }
  .nx-fp-apply{max-width:none}

}

/* Görünüm düzenleyicinin içinde taşma olmamalı.
   Ölçüldü: panel 418px, görünüm satırı 654px — yedi düğme tek satırda
   duruyordu ve son ikisi (zaman çizelgesi, kapasite) kırpılıyordu.
   Sebep: ızgara çocuğunun varsayılanı `min-width:auto`, yani içeriğinden dar
   olmayı reddediyor. */






/* Açılır listeler de kaba sığsın. */



/* Görünüm paneli filtre paneliyle aynı kabuk. Önceki açılır menü pencereye
   sığmıyordu (ölçüldü: panel 742px, pencere 701px, kaydırma tetiklenmiyor) ve
   sütun ayarlarına ulaşılamıyordu. */
.nx-fp-view .nx-fp-body{gap:var(--nx-s4)}
.nx-fp-view .nx-sort,.nx-fp-view .nx-saved-view{display:grid;gap:var(--nx-s2);min-width:0}
.nx-fp-view .nx-sort > span,.nx-fp-view .nx-saved-view > span{
  font-size:0.75rem;font-weight:600;color:var(--nx-muted)}
.nx-fp-view select{
  width:100%;min-height:40px;border:1px solid var(--nx-border);background:var(--nx-surface);
  color:var(--nx-text);border-radius:var(--nx-design-control-radius);padding:0 var(--nx-s3);font:inherit;font-size:0.875rem}
.nx-fp-view .nx-saved-view-actions{display:flex;gap:var(--nx-s2);flex-wrap:wrap}
.nx-fp-view .nx-saved-view-actions button{flex:1 1 auto;min-height:38px;border-radius:var(--nx-radius-pill)}
.nx-fp-view .nx-task-view-toggle{display:flex;flex-wrap:wrap;gap:var(--nx-s2)}
.nx-fp-view .nx-task-view-toggle button{flex:0 1 auto;white-space:nowrap}
.nx-fp-view .nx-column-picker{border-top:1px solid var(--nx-border);padding-top:var(--nx-s3)}
.nx-fp-view .nx-column-picker > div{position:static;box-shadow:none;border:0;padding:0;min-width:0}

/* ---------------------------------------------------------------------------
   r149 — Görev satırı hızlı eylemleri (§8).

   Kaydırma yalnızca eylemleri gösteriyor; tam kaydırmayla doğrudan silme YOK.
   Aynı eylemler `⋯` düğmesinden de erişilebilir — masaüstü ve klavye kaydırma
   gerektirmiyor.
   --------------------------------------------------------------------------- */
.nx-row-actions{position:relative;overflow:hidden}
.nx-row-actions-main{
  position:relative;z-index:1;background:var(--nx-surface);
  transition:transform var(--nx-dur-standard) var(--nx-ease-standard);
  display:flex;align-items:stretch;
}
.nx-row-actions-main > *:first-child{flex:1;min-width:0}

/* `⋯` masaüstünde satırın üstüne gelince, dokunmatikte her zaman görünür:
   kaydırmayı bilmeyen kullanıcı da eylemlere ulaşabilmeli. */
.nx-row-more{
  flex:0 0 auto;border:0;background:transparent;color:var(--nx-muted);
  font:inherit;font-size:1rem;line-height:1;cursor:pointer;
  width:34px;border-radius:var(--nx-radius-sm);opacity:0;
  transition:opacity var(--nx-dur-micro) var(--nx-ease-standard);
}
.nx-row-actions:hover .nx-row-more,
.nx-row-more:focus-visible,
.nx-row-actions[data-open] .nx-row-more{opacity:1}
.nx-row-more:hover{background:var(--nx-surface-2);color:var(--nx-text)}
@media(hover:none){.nx-row-more{opacity:1}}

.nx-row-tray{
  position:absolute;inset-block:0;inset-inline-end:0;z-index:0;
  display:flex;align-items:stretch;
}
.nx-row-tray button{
  border:0;background:var(--nx-surface-2);color:var(--nx-text);
  font:inherit;font-size:0.75rem;font-weight:600;cursor:pointer;
  /* 72px, TaskRowActions.tsx içindeki TEPSI_DUGME_GENISLIGI ile AYNI olmalı:
     tepsi mutlak konumlu olduğu için kaydırma miktarını bileşen hesaplıyor. */
  min-width:72px;width:72px;padding:0 var(--nx-s2);
  border-inline-start:1px solid var(--nx-border);
}
.nx-row-tray button:hover{background:color-mix(in srgb,var(--nx-surface-2) 70%,var(--nx-border))}
.nx-row-tray button[data-ton="tehlike"]{background:var(--nx-danger-soft);color:var(--nx-danger-text)}
.nx-row-tray button[data-ton="tehlike"]:hover{
  background:color-mix(in srgb,var(--nx-danger-soft) 70%,var(--nx-danger));color:#fff}



/* === r177 · Yorum + olay tek akis ====================================== */
/* Sunucu zaten birlesik akis donuyordu (`/tasks/{id}/timeline` yorumlari da
   iceriyor); ayrimi yalnizca arayuz yapiyordu ve kullanici bir gorevde ne
   olup bittigini gormek icin "المحادثة" ile "السجل" arasinda gidip geliyordu.
   Iki sekme tek sekme oldu.

   Bicimlendirme yeni bir dil GETIRMIYOR: mesaj baloncugu `.nx-comment-list`
   ile, olay satiri `.nx-timeline-item` ile ayni. Boylece birlestirme gorsel
   olarak da tek akis gibi okunuyor. */
.nx-stream{display:grid;gap:8px;min-width:0}
.nx-stream>article,.nx-stream-event{border:1px solid var(--nx-border);
  border-radius:8px;background:var(--nx-surface-2);padding:6px 7px;min-width:0}
.nx-stream>article{display:grid;gap:4px}
.nx-stream>article header{display:flex;gap:8px;align-items:center}
.nx-stream>article header strong{font-size:0.7812rem}
.nx-stream>article header span{margin-inline-start:auto;font-size:0.75rem;color:var(--nx-muted)}
.nx-stream>article p{font-size:0.8125rem;white-space:pre-wrap;overflow-wrap:anywhere;margin:2px 0}
/* Kendi mesajim: akista goz once BUNU bulmali. Renk degil kenar kullaniliyor,
   cunku akista zaten uc olay tonu var ve dorduncu ton gurultu olurdu. */
.nx-stream>article.mine{border-inline-start:3px solid var(--nx-primary)}
.nx-stream-event{display:grid;grid-template-columns:24px minmax(0,1fr);gap:8px;align-items:start}
.nx-stream-event>span{width:20px;height:20px;border-radius:50%;
  background:var(--nx-primary-soft);color:var(--nx-primary-strong);
  display:grid;place-items:center;font-size:0.75rem;font-weight:700;line-height:1}
.nx-stream-event.tl-file>span{background:var(--nx-surface);color:var(--nx-muted);
  border:1px solid var(--nx-border)}
.nx-stream-event strong{font-size:0.7812rem;font-weight:700}
.nx-stream-event small{display:block;font-size:0.75rem;color:var(--nx-muted)}
.nx-stream-event .nx-timeline-detail{color:var(--nx-text);
  border-inline-start:2px solid var(--nx-border);
  padding-inline-start:var(--nx-s6);margin-block-start:2px}
/* Uc konumlu suzgec: birlestirme HICBIR yetenegi kaybettirmemeli -- yalnizca
   mesajlari ya da yalnizca olaylari gormek isteyen kullanici eskiden ayri
   sekmeye geciyordu. */
.nx-stream-filter{margin-block-end:var(--nx-s2)}

/* === M1 · Dokunma ergonomisi (r184) =====================================
   Olculdu (390x844, gercek arayuz): dokunulabilir 14 sinifin 13'u 48x48
   altinda. En agiri satirdaki `...` dugmesi -- 34x40 ve ekranda 66 tane.
   Apple 44x44 diyor, Material 3 48x48; iki platforma da uyan tek sayi 48.

   BU BLOK NEDEN DOSYANIN SONUNDA: stil dosyasinda 63 ayri mobil blok var
   ve icinden 5 tanesi sonradan gelen kosulsuz kurallarla zaten olmus
   (or. `.nx-ownership-switch>button` satir 218'de 58px diyor, satir
   2514'teki kosulsuz kural onu eziyor). Sona koymak, ayni ozgullukteki
   her kurali siraca yenmeyi garanti ediyor.

   OZGULLUK: duz `.nx-button{min-height:48px}` yazmak YETMIYOR --
   `.nx-page-heading>.nx-button` (35px) gibi 9 kural onu yener. O yuzden
   ezilmesi gereken her secici ayri ayri yaziliyor.

   IKI SINIF DENETIM:
   - Birincil (sik basilan): gorsel boyut buyuyor.
   - Ikincil (satir ici kucuk denetim): gorsel boyut AYNI kaliyor, hedef
     gorunmez `::after` ile buyuyor. Standartlar bunu mesru sayiyor --
     Material 3: dokunma hedefi "ogenin gorsel sinirlarinin otesine
     uzanabilir"; WCAG hedefi "isaretci olayini kabul eden bolge" diye
     tanimlar, gorunen piksel diye degil.
   ------------------------------------------------------------------- */
@media(max-width:767px){
  /* --- birincil: gorsel boyut 48'e cikiyor --- */
  .nx-icon-button,.nx-pill-button,.nx-avatar{min-height:48px;min-width:48px}
  .nx-avatar{width:48px;height:48px}
  .nx-compact-create,.nx-filter-open,.nx-qf-reset,.nx-tg-add,
  .nx-filter-strip>button,.nx-segmented>button,.nx-vp-segment>button,
  .nx-task-view-toggle button,.nx-workspace-tabs>button,
  .nx-fp-chip,.nx-fp-statuses>button,.nx-fp-clear-adv,
  .nx-column-picker>summary,.nx-saved-view-actions button,
  .nx-notif-filters button,.nx-home-tabs button,.nx-specialist-tabs>button,
  .nx-approval-strip>button,.nx-appt-add>button{min-height:48px}
  /* Satirdaki `...`: ekranda 66 tane, en cok iskalanan hedef.
     Ikinci secici sart: r174'te hizalama icin yazdigim
     `.nx-tg-group > .nx-row-actions > .nx-row-actions-main > .nx-row-more`
     kurali (0,4,0) duz kurali yeniyordu. O kural dugmeyi MUTLAK
     konumlandirdigi icin genisletmek izgara izlerini etkilemiyor --
     sutun hizalamasi bozulmuyor (olculdu: sapma 0 kaldi). */
  .nx-row-more{width:48px;min-height:48px}
  .nx-tg-group > .nx-row-actions > .nx-row-actions-main > .nx-row-more{width:48px}
  /* Gorev satirinin kendisi de bir dugme. M2'de karta donusecek; simdilik
     en az 48 yuksekliginde. */
  .nx-tg-row{min-height:48px}
  .nx-fp>header button,.nx-cal-head button,.nx-tl-head>button{min-width:48px;min-height:48px}
  .nx-fp>footer button{min-height:48px}
  /* `.nx-button` ailesi: ezen kurallarin her biri ayri ayri. */
  .nx-page-heading>.nx-button,.nx-workflow-actions .nx-button,
  .nx-create-footer-actions .nx-button,.nx-inline-actions .nx-button,
  .nx-point-actions .nx-button,.nx-approval-decision-actions .nx-button,
  .nx-workspace-footer-buttons>.nx-button,
  .nx-workspace-footer-buttons .nx-assignment-response>.nx-button,
  .nx-heading-actions .nx-button:not(.nx-button-icon),
  .nx-button{min-height:48px}

  /* --- ikincil: gorsel boyut AYNI, hedef gorunmez buyuyor --- */
  .nx-tg-caret,.nx-tg-headadd,.nx-th-addcol button,
  .nx-column-picker-head button,.nx-af-chip button,.nx-fb-remove,
  .nx-point-order button,.nx-point-actions button:not(.nx-button),
  .nx-approval-edit-row button,.nx-linked-task-chip>button,
  .nx-inline-editor header>button,.nx-small-danger,
  .nx-source-link-banner>button,.nx-rail-toggle button,
  .nx-activity-list button,.nx-link-button{position:relative}
  .nx-tg-caret::after,.nx-tg-headadd::after,.nx-th-addcol button::after,
  .nx-column-picker-head button::after,.nx-af-chip button::after,
  .nx-fb-remove::after,.nx-point-order button::after,
  .nx-point-actions button:not(.nx-button)::after,
  .nx-approval-edit-row button::after,.nx-linked-task-chip>button::after,
  .nx-inline-editor header>button::after,.nx-small-danger::after,
  .nx-source-link-banner>button::after,.nx-rail-toggle button::after,
  .nx-activity-list button::after,.nx-link-button::after{content:"";position:absolute;top:calc(50% - 24px);bottom:calc(50% - 24px);left:calc(50% - 24px);right:calc(50% - 24px)}
  /* Onay kutulari: gorsel olcu tipografiye bagli, hedef ayri buyuyor. */
  .nx-check,.nx-editable-task-table label,.nx-setting-switch{min-height:48px;display:flex;align-items:center}

  /* --- komsu denetimler arasi en az 8px (Material 3) --- */
  .nx-topbar-actions,.nx-heading-actions,.nx-saved-view-actions,
  .nx-filter-strip,.nx-notif-filters{gap:8px}
}

/* === M2 · Liste: karsilastirma izgarasindan karara (r186) ================
   Olculdu (390x844): liste gorunumu telefonda 28 AYRI yatay kaydirici
   uretiyordu, her biri 715px'e kadar. Sebep 9 sutunluk izgaranin 390
   piksele sigmaya calismasi. Ustelik gruplar birbirinden bagimsiz
   kaydigi icin sutunlar basliklariyla hizasini da kaybediyordu.

   Cozum sutunlari kucultmek DEGIL, telefonda satir fikrinden vazgecmek:
     1. satir  ● durum + baslik
     2. satir  tarih · (yalnizca yuksek/kritikse) oncelik

   HICBIR SUTUN SILINMIYOR. Gizlenenler `data-yogun` ile geri geliyor --
   "تفاصيل أكثر" dugmesi. Sadelik ugruna fonksiyon eksiltmiyoruz.

   `!important` GEREKLI: izgara sablonu satir ici stille geliyor
   (`style={{gridTemplateColumns:...}}`) ve satir ici stil ancak boyle
   ezilir. Kullanildigi tek yer burasi.
   ---------------------------------------------------------------------- */
@media(max-width:767px){
  /* Baslik satiri telefonda anlamsiz: sutun yok ki basligi olsun. */
  .nx-tg-cols{display:none}
  /* Sutun secici de oyle -- 9 sutun secmek telefonda bir sey ifade etmiyor.
     Masaustunde duruyor. */
  .nx-column-picker{display:none}
  /* Grup basligi yapiskan: uzun listede hangi kovada oldugun kaybolmasin. */
  .nx-tg-grouphead{position:sticky;top:56px;z-index:2;background:var(--nx-surface)}

  /* Satir -> kart. Akan duzen, sabit iz yok; bu yuzden yatay kayma bitiyor. */
  .nx-tg-row{
    grid-template-columns:none!important;
    display:flex;flex-wrap:wrap;align-items:center;
    gap:4px 8px;min-width:0;padding:10px 12px}
  .nx-tg-name{flex:1 0 100%;position:static;min-width:0}
  /* Baslik telefonda TASIYORDU: olculdu, 358px icerik 237px alanda ve
     kendi basina yatay kaydiriyordu -- 28 kaydiriciyi sifirlarken bir
     tanesi burada saklaniyordu. Kesmek yerine iki satira sarmasi daha
     dogru: gorev adi okunmadan liste ise yaramiyor. */
  .nx-tg-title{font-size:0.9375rem;font-weight:600;white-space:normal;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
    overflow:hidden;line-height:1.35}
  /* Ikinci satirdaki meta bilgiler. */
  .nx-tg-row>[data-sutun]{font-size:0.8125rem;color:var(--nx-muted);min-width:0}
  /* Varsayilan: tarih ve oncelik gorunur, gerisi gizli.
     Olculdu -- gorevlerin %100'unde calisma tarihi, %93'unde son tarih var;
     oncelik ise %93 "normal", yani ayirt etmiyor. O yuzden oncelik hucresi
     yalnizca yuksek/kritikte gorunuyor (nx-prflag zaten normalde bos). */
  .nx-tg-row>[data-sutun="status"],
  .nx-tg-row>[data-sutun="assignees"],
  .nx-tg-row>[data-sutun="start_at"],
  .nx-tg-row>[data-sutun="estimated_hours"],
  .nx-tg-row>[data-sutun="actual_hours"],
  .nx-tg-row>[data-sutun="progress"],
  .nx-tg-row>[data-sutun="approval"]{display:none}
  /* Oncelik YALNIZCA yuksek/kritikte. Olculdu: gorevlerin %93'u "normal",
     yani o etiket hicbir sey ayirt etmiyor ve her satirda yer kapliyor.
     Marka kuralinin "altin mucevher, dolgu degil" ilkesinin ayni uygulamasi. */
  .nx-tg-row>[data-sutun="priority"]:has(.p-normal),
  .nx-tg-row>[data-sutun="priority"]:has(.p-low){display:none}
  /* `:has()` desteklenmeyen eski tarayicida etiketin kendisi gizlenir;
     geriye yalnizca bosluk kalir, yanlis bilgi kalmaz. */
  .nx-tg-row>[data-sutun="priority"] .p-normal,
  .nx-tg-row>[data-sutun="priority"] .p-low{display:none}

  /* "تفاصيل أكثر": gizlenen sutunlar geri geliyor, ucuncu satira akiyor. */
  /* r190: `status` bu listeden CIKARILDI. r188'den beri satirin baslik
     satirinda durum isareti HER ZAMAN duruyor ve dokunulabilir; hucreyi de
     cizmek ayni bilgiyi ayni satirda iki kez yaziyordu (olculdu: her satirda
     iki "مقبولة"). */
  .nx-task-groups[data-yogun] .nx-tg-row>[data-sutun="assignees"],
  .nx-task-groups[data-yogun] .nx-tg-row>[data-sutun="progress"]{display:flex;align-items:center}
  .nx-task-groups[data-yogun] .nx-tg-row>[data-sutun="estimated_hours"],
  .nx-task-groups[data-yogun] .nx-tg-row>[data-sutun="actual_hours"]{display:inline}

  /* Grup artik kaydirmiyor: icerik akiyor. */
  .nx-tg-group{overflow-x:visible}
  .nx-tg-group > .nx-row-actions,
  .nx-tg-group > .nx-row-actions > .nx-row-actions-main,
  .nx-tg-group > .nx-row-actions > .nx-row-actions-main > *:first-child{min-width:0}

  .nx-yogun-ac{display:inline-flex;align-items:center;min-height:48px;padding:0 14px;
    border:1px solid var(--nx-border);background:var(--nx-surface);border-radius:var(--nx-radius-pill);
    font:inherit;font-size:0.8125rem;font-weight:700;color:var(--nx-muted);cursor:pointer}
  .nx-yogun-ac[aria-pressed="true"]{background:var(--nx-primary);color:#fff;
    border-color:var(--nx-primary)}
}
/* Masaustunde yogun mod dugmesi yok: orada zaten butun sutunlar goruluyor. */
@media(min-width:768px){.nx-yogun-ac{display:none}}

/* r188 — Durum degistirme akisi. Liste satirindaki isaret artik dokunulabilir
   bir dugme; gorunumu ayni kalsin diye hedef sadece gorunmez bir katmanla
   buyutuldu. Acilan secim penceresi telefonda ekranin altina yapisir (basparmak
   mesafesi), geri alma bandi da alt navigasyonun ustunde durur. */
.nx-tg-status-ac{background:none;border:0;padding:0;font:inherit;color:inherit;
  display:inline-flex;align-items:center;position:relative;cursor:pointer}
.nx-tg-status-ac::after{content:"";position:absolute;top:calc(50% - 24px);bottom:calc(50% - 24px);left:calc(50% - 24px);right:calc(50% - 24px)}

.nx-status-sheet .nx-overlay-body{display:grid;gap:12px}
.nx-ss-now{margin:0;display:flex;gap:8px;align-items:baseline;color:var(--nx-muted)}
.nx-ss-now b{color:var(--nx-text);font-weight:600}
.nx-ss-block{display:grid;gap:8px}
.nx-ss-block h3{margin:0;font-size:0.8125rem;color:var(--nx-muted);font-weight:600}
.nx-ss-list{display:grid;gap:6px}
.nx-ss-pair{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.nx-ss-item{display:flex;align-items:center;gap:8px;min-height:48px;padding:0 12px;
  border:1px solid var(--nx-border);border-radius:var(--nx-radius);background:var(--nx-surface-2);
  text-align:start;font:inherit;color:var(--nx-text);cursor:pointer;width:100%;
  transition:background var(--nx-dur-standard) var(--nx-ease-standard),
    border-color var(--nx-dur-standard) var(--nx-ease-standard)}
.nx-ss-item:disabled{opacity:.55;cursor:default}
.nx-ss-item[data-ton="danger"]{color:var(--nx-danger-text);
  border-color:color-mix(in srgb,var(--nx-danger-text) 34%,var(--nx-border));
  background:color-mix(in srgb,var(--nx-danger-soft) 70%,var(--nx-surface-2))}
.nx-ss-item[data-ton="primary"]{color:var(--nx-primary);
  border-color:color-mix(in srgb,var(--nx-primary) 34%,var(--nx-border));
  background:color-mix(in srgb,var(--nx-primary-soft) 70%,var(--nx-surface-2))}
.nx-ss-item[data-ton="success"]{color:var(--nx-success-text);
  border-color:color-mix(in srgb,var(--nx-success-text) 30%,var(--nx-border));
  background:color-mix(in srgb,var(--nx-success-text) 8%,var(--nx-surface-2))}
.nx-ss-reason{display:grid;gap:8px}
.nx-ss-reason textarea{width:100%;font:inherit;color:var(--nx-text);
  background:var(--nx-surface);border:1px solid var(--nx-border);
  border-radius:var(--nx-radius);padding:8px;resize:vertical}
.nx-ss-reason-actions{display:flex;gap:8px;justify-content:flex-end}
.nx-ss-empty,.nx-ss-loading{margin:0;color:var(--nx-muted)}

/* Geri alma bandi: durum degisikligi hemen uygulaniyor, kullanici birkac saniye
   icinde vazgecebilsin diye ekranin altinda duruyor. */
.nx-undo-band{position:fixed;inset-inline:12px;bottom:16px;z-index:var(--nx-z-toast);
  display:flex;align-items:center;gap:12px;padding:8px 8px 8px 14px;
  border:1px solid var(--nx-border);border-radius:12px;background:var(--nx-surface);
  box-shadow:var(--nx-shadow);max-width:min(520px,calc(100vw - 24px));margin-inline:auto}
.nx-undo-band>span{flex:1;min-width:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}
.nx-undo-ac{min-height:48px;padding:0 14px;border-radius:9px;border:0;flex:0 0 auto;
  background:var(--nx-primary-soft);color:var(--nx-primary);font:inherit;
  font-weight:600;cursor:pointer}

@media(max-width:767px){
  .nx-tg-status-ac::after{width:48px;height:48px}
  /* Iki sinif bitisik: yukaridaki telefon kuralini yenmesi gerekiyor. */
  .nx-status-sheet.nx-overlay-modal{left:0;right:0;top:auto;bottom:0;transform:none;
    width:100%;max-width:none;border-radius:var(--nx-radius) var(--nx-radius) 0 0;
    border-bottom:0;max-height:min(78dvh,calc(var(--next-visual-height,100dvh) - 12px))}
  .nx-status-sheet .nx-overlay-body{padding-bottom:calc(12px + var(--nx-safe-bottom))}
  /* Alt navigasyon 58px + guvenli alan; bandi onun uzerine kaldiriyoruz. */
  .nx-undo-band{bottom:calc(70px + var(--nx-safe-bottom))}
  .nx-undo-ac{min-height:48px}
}

/* r188 ek: tepsi artik BES slot tasiyor (ac / durum / ileri eylem / ertele /
   sil). Sabit 72px genislikte bes dugme 360px ediyor ve 375px'lik ekranda
   tasiyordu -- olculdu, sag kenar 386px'e ciktiginda son slot ekran disinda
   kaliyordu. Telefonda tepsi artik satirin genisligini esit paylasiyor;
   slot sayisi degisse de tasma olmuyor ve dokunma hedefi 48px'in altina
   dusmuyor (bes slotta 70px, yedi slotta 50px). */
@media(max-width:767px){
  .nx-row-tray{inset-inline:0;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr)}
  .nx-row-tray button{min-width:0;width:auto;padding:0 4px;font-size:0.6875rem;
    display:flex;align-items:center;justify-content:center;text-align:center;
    white-space:normal;line-height:1.15;overflow:hidden;word-break:break-word}
}

/* r189 -- TELEFON. Masaustu (768px+) bu blogun disinda ve degismiyor.

   1) Ust bastaki "gorev olustur" dugmesi telefonda kalkiyor. Kullanicinin
      karari: ekleme icin zaten "+" var. Kayip yok, cunku telefonda her grubun
      altinda tam genislikte "+ gorev ekle" satiri (48px) ve grup basliginda
      "+" duruyor; tam olusturma formu ise ana ekrandaki hizli erisim
      kutucugundan bir dokunus uzakta. Masaustunde dugme yerinde kaliyor.
      (M1 blogundaki .nx-compact-create kurali orada birakildi: telefonda
      artik cizilmiyor ama masaustu-mobil arasi bir kirilimda geri gelirse
      hedef boyutu hazir olsun.)

   2) Grup basligindaki "+" 26x24 piksellik bir hedefti -- M1'de gozden
      kacmis tek birincil denetim. Gorunumu buyutmeden dokunma alani
      48px'e cikariliyor, .nx-tg-caret ile ayni cozum. */
@media(max-width:767px){
  .nx-compact-create{display:none}
  .nx-tg-headadd{position:relative}
  .nx-tg-headadd::after{content:"";position:absolute;top:calc(50% - 24px);bottom:calc(50% - 24px);left:calc(50% - 24px);right:calc(50% - 24px)}
}

/* r190 -- TELEFON. Masaustu (768px+) degismiyor: asagidaki gorsel kurallarin
   hepsi 767px altinda yasiyor, tek istisna telefona ozel YENI parcalari genis
   ekranda gizlemek.

   Olculdu (390x844): gorev listesinin ustunde dort katman ust uste biniyordu --
   sayfa basligi + sayi rozeti, uc sahiplik karti, arac cubugu (arama, yogunluk,
   tesviye/gorunum, sifirlama) ve suzgec haplari. Toplami ilk ekranin tamamini
   yiyordu; liste hic gorunmuyordu. Dordu de tek bir yapiskan seride topluyoruz.

   HICBIR ISLEV KAYBOLMUYOR: sayi ve kapsam adi seride, sahiplik secimi kapsam
   dugmesinin alt sayfasinda, arama seritteki simgede, filtreler ve kalan arac
   dugmeleri "Filtrele" sayfasinin basinda geri geliyor. Sadelik ugruna
   fonksiyon eksiltmiyoruz -- M2'deki "تفاصيل أكثر" ile ayni ilke. */
@media(max-width:767px){
  /* --- ustteki dort katman kalkiyor; karsiliklari asagida --- */
  .nx-page-heading.nx-task-heading{display:none}
  .nx-ownership-switch{display:none}
  .nx-task-toolbar{display:none}
  /* Dogrudan cocuk secici SART: ayni serit "Filtrele" sayfasinin icinde de
     ciziliyor ve ORASI gorunur kalmali. */
  .nx-my-tasks-page > .nx-filter-strip{display:none}

  /* --- yerine gecen yapiskan serit: ust cubuk 56px, hemen altina oturuyor ---
     Zemin opak olmali; yoksa altindan kayan kartlar seridin icinden okunuyor. */
  .nx-mobil-serit{display:flex;gap:8px;align-items:center;
    position:sticky;top:56px;z-index:3;background:var(--nx-surface);padding:6px 0}

  /* Kapsam dugmesi: adi + sayisi tasiyor, dokununca alt sayfa aciliyor. */
  .nx-ms-kapsam{flex:1;min-width:0;min-height:48px;
    display:flex;align-items:center;gap:8px;padding:0 12px;
    border:1px solid var(--nx-border);border-radius:12px;
    background:var(--nx-surface-2);font:inherit;color:var(--nx-text);
    text-align:start;cursor:pointer}
  /* Kapsam adlari uzun olabiliyor; tasarsa kirpilsin, sarmasin -- serit
     tek satirda kalmali yoksa yapiskan yukseklik oynuyor. */
  .nx-ms-kapsam b{flex:1;min-width:0;font-weight:700;font-size:0.9375rem;
    text-overflow:ellipsis;overflow:hidden;white-space:nowrap}
  .nx-ms-kapsam span{flex:0 0 auto;font-weight:700;font-size:0.8125rem;
    padding:2px 8px;border-radius:var(--nx-radius-pill);
    background:var(--nx-primary-soft);color:var(--nx-primary)}
  .nx-ms-kapsam i{flex:0 0 auto;font-style:normal;color:var(--nx-muted)}

  /* Arama: kapali halde kare simge dugmesi. */
  .nx-ms-ara{width:48px;min-height:48px;flex:0 0 auto;
    display:flex;align-items:center;justify-content:center;padding:0;
    border:1px solid var(--nx-border);border-radius:12px;
    background:var(--nx-surface-2);font:inherit;color:var(--nx-text);cursor:pointer}

  /* Suzgec dugmesi: etkin filtrenin adi + gorunen satir sayisi. */
  .nx-ms-suzgec{min-height:48px;flex:0 0 auto;position:relative;
    display:flex;align-items:center;gap:6px;padding:0 12px;
    border:1px solid var(--nx-border);border-radius:12px;
    background:var(--nx-surface-2);font:inherit;color:var(--nx-text);cursor:pointer}
  .nx-ms-suzgec b{font-weight:700;font-size:0.875rem;
    text-overflow:ellipsis;overflow:hidden;white-space:nowrap}
  .nx-ms-sayi{color:var(--nx-muted);font-size:0.8125rem;font-weight:600}
  /* Gelismis filtre sayisi. Dokunma hedefi degil (dugmenin icinde), o yuzden
     olcusu tipografik; dokunulan alan yine 48px'lik kabuk. */
  .nx-ms-rozet{width:18px;height:18px;flex:0 0 auto;
    display:inline-flex;align-items:center;justify-content:center;
    border-radius:var(--nx-radius-pill);background:var(--nx-primary);color:#fff;
    font-size:0.6875rem;font-weight:700;line-height:1}

  /* Arama acikken serit tumuyle arama cubuguna donusuyor: telefonda iki isi
     yan yana sigdirmaya calismak yerine kip degistiriyoruz. */
  .nx-mobil-serit.nx-ms-arama .nx-ms-ara-kutu{flex:1;min-width:0;min-height:48px;
    padding:0 12px;border:1px solid var(--nx-border);border-radius:12px;
    background:var(--nx-surface-2);font:inherit;color:var(--nx-text)}
  .nx-mobil-serit.nx-ms-arama .nx-ms-ara-kapat{width:48px;min-height:48px;flex:0 0 auto;
    display:flex;align-items:center;justify-content:center;padding:0;
    border:1px solid var(--nx-border);border-radius:12px;
    background:var(--nx-surface-2);font:inherit;color:var(--nx-text);cursor:pointer}

  /* --- "Filtrele" sayfasinin basina tasinan arac dugmeleri --- */
  .nx-fp-mobil-ek{display:grid;gap:10px;margin-bottom:12px;padding-bottom:12px;
    border-bottom:1px solid var(--nx-border)}
  .nx-fp-mobil-dugmeler{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .nx-fp-mobil-dugmeler>button{min-height:48px}
  /* Sifirlama tek basina tam satir: yikici olmasa da geri donusu olan tek
     eylem, yanlislikla komsusuna basilmasin. */
  .nx-fp-mobil-dugmeler>.nx-qf-reset{grid-column:1/-1}
  /* Serit burada sayfanin icinde, yani daralmasi gerekmiyor: haplar sarsin. */
  .nx-fp-mobil-ek .nx-filter-strip{display:flex;flex-wrap:wrap;gap:6px}
}

/* Telefona ozel parcalar genis ekranda hic cizilmiyor. Masaustune dokunan
   TEK kural bu; mevcut hicbir web ogesini degistirmiyor. */
@media(min-width:768px){.nx-mobil-serit{display:none}.nx-fp-mobil-ek{display:none}}

/* Kapsam alt sayfasi: seritteki kapsam dugmesinin actigi secim. Ust bastan
   kaldirilan uc sahiplik karti burada, basparmak mesafesinde yasiyor. Bunlar
   yeni bir bilesenin kendi stilleri -- mevcut hicbir kurali ezmiyor. */
.nx-ks-liste{display:grid;gap:8px}
.nx-ks-liste>button{min-height:64px;display:flex;align-items:center;
  justify-content:space-between;gap:12px;padding:0 12px;
  border:1px solid var(--nx-border);border-radius:12px;background:var(--nx-surface-2);
  font:inherit;color:var(--nx-text);text-align:start;cursor:pointer;width:100%;
  transition:background var(--nx-dur-standard) var(--nx-ease-standard),
    border-color var(--nx-dur-standard) var(--nx-ease-standard)}
.nx-ks-liste>button>span{display:grid;gap:2px;min-width:0}
.nx-ks-liste>button b{font-weight:600}
.nx-ks-liste>button small{color:var(--nx-muted)}
/* Sondaki sayi: secimin agirligini gosteren tek rakam, bu yuzden buyuk. */
.nx-ks-liste>button em{font-style:normal;font-weight:700;font-size:1.125rem;flex:0 0 auto}
.nx-ks-liste>button.active{border-color:color-mix(in srgb,var(--nx-primary) 40%,var(--nx-border));
  background:color-mix(in srgb,var(--nx-primary-soft) 70%,var(--nx-surface-2));
  color:var(--nx-primary)}

@media(max-width:767px){
  /* Iki sinif bitisik: yukaridaki genel telefon kuralini yenmesi gerekiyor.
     Durum sayfasiyla ayni yerlesim -- iki alt sayfa farkli acilmasin. */
  .nx-kapsam-sayfasi.nx-overlay-modal{left:0;right:0;top:auto;bottom:0;transform:none;
    width:100%;max-width:none;border-radius:var(--nx-radius) var(--nx-radius) 0 0;
    border-bottom:0;max-height:min(78dvh,calc(var(--next-visual-height,100dvh) - 12px))}
  .nx-kapsam-sayfasi .nx-overlay-body{padding-bottom:calc(12px + var(--nx-safe-bottom))}
}

/* === r192 · Telefonda kurumsal sadelik ==================================
   Sebep: telefon gorunumu "gri sayfa + beyaz kutu" desenine kaymisti.
   Incelenen kurumsal sistemlerin ortak yargisi: ekranda en fazla bir
   kabarik yuzey olur, tekrar eden kayit satirlarinda ne kutu ne ayrac
   gerekir (aradaki bosluk yeter) ve vurgu rengi seyrek kullanilir.
   Uc adimli yaricap merdiveni: yuzey 8px, denetim 6px, yalnizca durum ve
   oncelik etiketleri tam yuvarlak kalir.
   DEGISMEYEN: dokunma hedefi 48px. Burada yalnizca kutu gorunumu kalkiyor,
   yukseklik ve dolgu ayni. Gecikme kirmizisi da aynen duruyor: o renk
   bilgi tasiyor, sus degil.
   ---------------------------------------------------------------------- */
@media(max-width:767px){
  /* --- yuzeyler: 8px --- */
  /* .nx-tg-block bu listede DEGIL: telefonda kutu olmaktan tamamen
     cikiyor (asagida saydam + kenarliksiz + yaricapsiz). Sirket rengi
     kayboluyor gibi gorunuyor ama kaybolmuyor -- adin yanindaki 8px'lik
     renk noktasi onu tasimaya devam ediyor. */
  .nx-panel,.nx-task-card,.nx-command-card,.nx-stat-card{border-radius:8px}

  /* --- denetimler yuzeylerden daha sikidir: 6px --- */
  .nx-ms-kapsam,.nx-ms-ara,.nx-ms-suzgec,.nx-ms-ara-kutu,
  .nx-ss-item,.nx-ks-liste>button,.nx-filter-strip>button,
  .nx-tg-add,.nx-qf-reset{border-radius:6px}

  /* --- yalnizca durum/oncelik etiketleri tam yuvarlak --- */
  .nx-stpill,.nx-prflag{border-radius:var(--nx-radius-pill)}

  /* Kume kapsayicisi telefonda kutu olmaktan cikiyor; ustteki 8px kurali
     bu yuzden burada sifira dusuyor. */
  .nx-tg-block{background:transparent;border:0;border-radius:0;padding-inline:0}

  /* Kayit satiri: kutu yok, ayrac yok; satirlar arasi yalnizca bosluk. */
  .nx-tg-row{background:transparent;border:0;border-radius:0}
  .nx-tg-group .nx-row-actions+.nx-row-actions{margin-top:2px}

  /* Satirda aksan rengi kalmiyor: renkli hap yerine sonuk metin, renk
     noktasi gizli. Gecikme kirmizisi bu kuralin disinda, aynen kaliyor. */
  .nx-prflag,.nx-prflag.p-critical,.nx-prflag.p-high,
  .nx-prflag.p-normal,.nx-prflag.p-low{
    background:transparent;border:0;padding:0;color:var(--nx-muted)}
  .nx-prflag i{display:none}
}

/* === r192b · Uc olculen hata ============================================

   1) Her grubun ILK satirinin ust 17 pikseli grup basliginin altinda
      kaliyordu. Sebep olcerek bulundu: `.nx-tg-block` uzerindeki
      `overflow:hidden` o kutuyu bir KAYDIRMA KABI yapiyor ve yapiskan
      baslik sayfaya degil O KABA gore yapisiyor; `top:56px` kabin
      tepesinden sayilinca baslik 17px asagi kayip satirin uzerine
      biniyordu. (`position:static` yapinca cakisma 0'a dusuyordu --
      tarayicida boyle dogrulandi.) Telefonda blogun artik kutusu yok,
      yani `overflow:hidden` bir ise yaramiyor: kaldiriliyor.

   2) Baslik telefonda kontrol seridinin ALTINA yapissin. Ikisi de
      `top:56px` diyordu; serit 60px yuksek oldugu icin baslik kayarken
      onun arkasina giriyordu.

   3) Grup basligindaki durum etiketi dolu lacivert bir haptı ve ekranin
      en koyu elemani olmak icin yuzen dugmeyle yarisiyordu. Kurumsal
      kural tek koyu eleman diyor. Etiket telefonda dolgusuz metne
      donuyor; rengi tasiyan nokta yerinde kaliyor.
   ---------------------------------------------------------------------- */
@media(max-width:767px){
  .nx-tg-block{overflow:visible}
  .nx-tg-grouphead{top:116px}
  .nx-tg-grouphead .nx-stpill{background:transparent;color:var(--nx-text);
    padding-inline:0;font-weight:600}
}

/* r192c: oncelik telefonda sonuk metne dondu, ama KRITIK oyle kalmamali.
   Kendi verimizde gorevlerin %93'u normal oncelikte; kritik gercekten
   istisna ve "rengi yalnizca vurgudan gercekten fayda gorene ayir"
   kuralinin tam ornegi. Yuksek/normal/dusuk sonuk kaliyor. */
@media(max-width:767px){
  .nx-prflag.p-critical{color:var(--nx-danger-text);font-weight:600}
}

/* r195c: durum dugmesinin dokunma alani MERKEZLENDI ama olcunce hala saga
   ve yukari tasiyordu -- sebep hedefin kaymasi degil, YERIN OLMAMASIYDI.
   Olculdu (375px, RTL): dugme merkezi satirin sag kenarina 17px, ust
   kenarina 20px uzakta; 24px'lik erisim ikisinde de satirin disina
   dusuyordu. Ustelik grubun ilk satirinda yapiskan baslik o araligi
   ortuyor.

   Cozum yeri acmak: satirin ic boslugu buyuyor ve dugme bir tik iceri
   aliniyor. Olcum sonrasi: yatayda 48, dikeyde 44 (Apple'in sayisi).
   Dikeyde 48'e cikmak satiri yukseltmeden mumkun degil; 63px'lik bir
   satirda metin satirinin ucundaki bir denetim icin sinir bu. */
@media(max-width:767px){
  .nx-tg-row{padding-inline:14px}
  .nx-tg-status-ac{margin-inline-end:6px}
}

/* === r197 · Gorunum secici: dugme seridi degil, anlatan satirlar ========

   Olculen sorun: «تعديل العرض» panelinde yedi dugme iki satira sariyordu ve
   her biri yalnizca bir AD tasiyordu. Kullanici "hangisi daha guzel" diye
   secmiyor, "isim burada gorunecek mi" diye seciyor -- ad bu soruyu
   cevaplamiyor. Satir artik uc parcali: kucultulmus duzen semasi (46x36),
   ad, ve o anki suzgecten hesaplanmis tek satir aciklama.

   Kabuk sinifi `.nx-task-view-toggle` KORUNDU: r184/M1'deki mobil dokunma
   hedefi kurallari o sinifa yazili ve orayi kirmadan gecmek gerekiyordu.
   Yeni yerlesim `.nx-view-picker` ile ozguluk kazanip seridi eziyor.

   Secili satir tek koyu eleman DEGIL: koyu dolgu asil eyleme ayrilmis
   durumda, secim kalin kenarlik + yumusak zemin + onay isaretiyle
   veriliyor. Butun renkler --nx-* jetonlarindan, ham renk yok. */
.nx-fp-view .nx-task-view-toggle.nx-view-picker{display:flex;flex-direction:column;flex-wrap:nowrap;
  gap:4px;border:0;background:transparent;padding:0;width:100%}
.nx-view-picker>.nx-view-row{display:flex;align-items:center;gap:12px;width:100%;
  min-height:56px;padding:9px 11px;text-align:start;font-weight:400;cursor:pointer;
  border:1px solid var(--nx-border);border-radius:var(--nx-radius);
  background:var(--nx-surface);color:var(--nx-text)}
.nx-view-picker>.nx-view-row.active{border-color:var(--nx-primary);
  background:var(--nx-primary-soft);color:var(--nx-primary-strong)}
/* Sema BrandIcons'tan buyuk ve kendi izgarasinda; kuculmesin diye esnemez. */
.nx-view-picker .nx-vg-sema{flex:0 0 auto;color:var(--nx-muted)}
.nx-view-picker>.nx-view-row.active .nx-vg-sema{color:var(--nx-primary-strong)}
.nx-view-metin{flex:1;min-width:0}
.nx-view-metin b{display:block;font-size:15px;font-weight:600;line-height:1.25}
/* Aciklama satirin tek varlik sebebi: kirpilmiyor, gerekirse sariyor. */
.nx-view-metin small{display:block;font-size:12px;line-height:16px;font-weight:400;
  color:var(--nx-muted);margin-top:3px;white-space:normal}
.nx-view-picker>.nx-view-row.active .nx-view-metin small{color:var(--nx-primary-strong);opacity:.85}
/* Onay isareti yer kaplamaya devam ediyor: gorunurken satir kaymasin. */
.nx-view-tik{flex:0 0 auto;display:flex;align-items:center;opacity:0;color:var(--nx-primary-strong)}
.nx-view-tik .nx-brand-icon{width:18px;height:18px}
.nx-view-picker>.nx-view-row.active .nx-view-tik{opacity:1}

@media(max-width:767px){
  /* Telefonda satir yuksekligi 56px'in altina INMEZ; dokunma hedefi
     kurali (48px) bu sayinin icinde zaten karsilaniyor. Serit halindeki
     eski kural dugmeleri `flex:1` ile yan yana esitliyordu -- satir
     duzeninde o kural satiri bozar, kapatiliyor. */
  .nx-task-view-toggle.nx-view-picker{width:100%}
  .nx-view-picker>.nx-view-row{flex:0 0 auto;min-height:56px}
  .nx-view-metin b{font-size:15px}
}

/* ===== Iletisim merkezi — adim 1: dizin (ILETISIM_MERKEZI_PLANI.md §6) =====
   Mesaj ve toplanti dugmeleri BILEREK yok: adim 2 ve 3. Satirda yalnizca
   gercekten calisan iki kisayol var (tel: / mailto:), bu yuzden eylem
   sutunu dar. */
.nx-dizin-page{
  /* Yapiskan arama seridi ust cubugun ALTINA oturuyor. 62px `.nx-topbar`
     yuksekliginin kendisi; jeton ailesinde karsiligi yok, bu yuzden tek
     yerde adlandirildi — telefon kirilimi asagida 56px'e cekiyor. */
  --nx-dizin-ust:62px;
}
.nx-dizin-arama{
  position:sticky; inset-block-start:var(--nx-dizin-ust); z-index:var(--nx-z-sticky);
  background:var(--nx-bg); padding-block:var(--nx-s2); margin-block-start:calc(var(--nx-s2) * -1);
}
.nx-dizin-arama-kutu{
  display:flex; align-items:center; gap:var(--nx-s2);
  min-height:var(--nx-s12); padding-inline:var(--nx-s3);
  border:1px solid var(--nx-border); border-radius:var(--nx-radius);
  background:var(--nx-surface); color:var(--nx-muted);
}
.nx-dizin-arama-kutu:focus-within{border-color:var(--nx-primary)}
.nx-dizin-arama-kutu .nx-brand-icon{width:20px;height:20px}
.nx-dizin-arama-kutu input{
  flex:1; min-width:0; border:0; outline:0; background:transparent;
  color:var(--nx-text); height:calc(var(--nx-s12) - 2px); font:inherit;
}
/* Tarayicinin kendi `search` temizleme carpisi her platformda baska
   gorunuyor; kendi dugmemiz var. */
.nx-dizin-arama-kutu input::-webkit-search-cancel-button{display:none}
.nx-dizin-temizle{
  flex:0 0 auto; width:var(--nx-s10); height:var(--nx-s10);
  display:grid; place-items:center; cursor:pointer;
  border:0; background:transparent; color:var(--nx-muted);
  border-radius:var(--nx-radius-sm);
}
.nx-dizin-temizle:hover{color:var(--nx-text);background:var(--nx-surface-2)}

.nx-dizin-gruplar{display:grid;gap:var(--nx-s3)}
.nx-dizin-grup-bas{display:flex;align-items:center;gap:var(--nx-s2);margin-bottom:var(--nx-s2)}
.nx-dizin-grup-bas h2{margin:0;font-size:0.9375rem;font-weight:600;min-width:0}
/* Grup basligindaki sayi CIZILEN satir sayisi; ayri bir sayactan gelmiyor. */
.nx-dizin-grup-adet{
  font-size:0.7812rem; font-weight:600; color:var(--nx-muted);
  background:var(--nx-surface-2); border-radius:var(--nx-radius-pill);
  padding:2px var(--nx-s2); font-variant-numeric:tabular-nums;
}
.nx-dizin-liste{list-style:none;margin:0;padding:0;display:grid;gap:var(--nx-s-hair)}

.nx-dizin-satir{
  display:grid; grid-template-columns:38px minmax(0,1fr) auto;
  align-items:center; gap:var(--nx-s3);
  min-height:var(--nx-s16); padding:var(--nx-s1) var(--nx-s2);
  border-radius:var(--nx-radius);
  transition:background var(--nx-dur-standard) var(--nx-ease-standard);
}
.nx-dizin-satir:hover{background:var(--nx-surface-2)}
/* Kendi satirin: liste icinde kendini aramak zorunda kalmamak icin. Tek
   koyu eleman kurali geregi dolu renk degil, yumusak zemin. */
.nx-dizin-satir.benim{background:var(--nx-primary-soft)}
.nx-dizin-bh{
  width:38px;height:38px;align-self:start;margin-block-start:var(--nx-s1);
  border-radius:var(--nx-radius-pill); background:var(--nx-surface-2);
  color:var(--nx-primary-strong); display:grid; place-items:center;
  font-size:0.8125rem; font-weight:600;
}
.nx-dizin-satir.benim .nx-dizin-bh{background:var(--nx-surface)}
.nx-dizin-bilgi{min-width:0;display:grid;gap:var(--nx-s-hair)}
.nx-dizin-ad{
  display:flex; align-items:center; gap:var(--nx-s2); min-width:0;
  font-size:0.9375rem; font-weight:600; line-height:1.3;
}
.nx-dizin-ad>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-dizin-ben{
  flex:0 0 auto; font-size:0.75rem; font-weight:600;
  color:var(--nx-primary-strong); background:var(--nx-surface);
  border-radius:var(--nx-radius-pill); padding:1px var(--nx-s2);
}
.nx-dizin-unvan{color:var(--nx-muted);font-size:0.7812rem;line-height:1.4;overflow-wrap:anywhere}
.nx-dizin-yuk{
  display:flex; align-items:center; gap:var(--nx-s1); flex-wrap:wrap;
  color:var(--nx-muted); font-size:0.7812rem; line-height:1.4;
  font-variant-numeric:tabular-nums;
}
.nx-dizin-ayrac{color:var(--nx-border-strong)}
/* Geciken is: dikkat cekiyor ama bagirmiyor. Tum satiri kirmiziya boyamak
   listeyi okunmaz yapiyor — bu depoda iki kez olculdu (CLAUDE.md §6-B). */
.nx-dizin-geciken{
  font-style:normal; font-weight:600;
  color:var(--nx-danger-text); background:var(--nx-danger-soft);
  border-radius:var(--nx-radius-pill); padding:1px var(--nx-s2);
}
.nx-dizin-eylemler{display:flex;align-items:center;gap:var(--nx-s1)}
/* Telefonu ya da e-postasi olmayan kiside dugme PASIF degil, hic cizilmiyor. */
.nx-dizin-eylem{
  width:var(--nx-s12); height:var(--nx-s12);
  display:grid; place-items:center; border-radius:var(--nx-radius-sm);
  color:var(--nx-muted); text-decoration:none;
}
.nx-dizin-eylem:hover{color:var(--nx-primary-strong);background:var(--nx-surface-2)}

@media(max-width:767px){
  /* Ust cubuk telefonda 56px; yapiskan seridin durdugu yer onunla ayni
     olmak zorunda, yoksa arama kutusu cubugun altinda kayboluyor. */
  .nx-dizin-page{--nx-dizin-ust:56px}
  /* Satir karta donuyor: cerceve + kendi zemini, boylece dokunulabilir
     alanin siniri belli. Mevcut liste ekranlarindaki desenin aynisi. */
  .nx-dizin-grup{padding:var(--nx-s2)}
  .nx-dizin-liste{gap:var(--nx-s2)}
  .nx-dizin-satir{
    grid-template-columns:34px minmax(0,1fr) auto; gap:var(--nx-s2);
    border:1px solid var(--nx-border); background:var(--nx-surface-2);
    padding:var(--nx-s2);
  }
  .nx-dizin-satir:hover{background:var(--nx-surface-2)}
  .nx-dizin-bh{width:34px;height:34px;margin-block-start:0}
  .nx-dizin-ad{font-size:0.875rem}
  /* iOS 16px'in altindaki girdiye odaklaninca sayfayi buyutuyor. */
  .nx-dizin-arama-kutu input{font-size:16px}
}

/* ==========================================================================
   r207 — Iletisim merkezi adim 2 ve 3: mesaj akisi ve toplanti secimi.
   Renk/olcu degerleri jetonlardan; yon icin mantiksal ozellikler (RTL).
   ========================================================================== */
.nx-dizin-eylem{position:relative}
.nx-dizin-eylem.secili{background:var(--nx-primary-soft);color:var(--nx-primary-strong)}
.nx-dizin-satir.secili{outline:2px solid var(--nx-primary);outline-offset:-2px}
/* Okunmamis rozeti. Ikonun ust-dis kosesinde; RTL'de otomatik yer degistirsin
   diye `inset-inline-end` kullaniliyor, `right` degil. */
.nx-dizin-rozet{position:absolute;inset-block-start:2px;inset-inline-end:2px;min-width:18px;height:18px;
  padding:0 5px;border-radius:var(--nx-radius-pill);background:var(--nx-danger);color:#fff;
  font-size:0.6875rem;line-height:18px;text-align:center;font-weight:700}
.nx-dizin-grup-toplanti{margin-inline-start:auto;border:0;background:transparent;color:var(--nx-muted);
  width:36px;height:36px;border-radius:var(--nx-radius);display:grid;place-items:center;cursor:pointer}
.nx-dizin-grup-toplanti:hover{background:var(--nx-surface-2);color:var(--nx-text)}
/* Secim seridi yapiskan: uzun listede secim yapip asagi kayinca dugmenin
   kaybolmasi, secimi bitirmenin yolunu gizliyordu. */
.nx-dizin-secim-serit{position:sticky;inset-block-end:0;z-index:var(--nx-z-sticky);
  display:flex;align-items:center;gap:var(--nx-s3);flex-wrap:wrap;
  margin-block-start:var(--nx-s4);padding:var(--nx-s3) var(--nx-s4);
  background:var(--nx-surface);border:1px solid var(--nx-border);border-radius:var(--nx-radius)}
.nx-dizin-secim-serit>span{font-weight:700}
.nx-dizin-secim-serit>*:last-child{margin-inline-start:auto}

.nx-mesaj-akis{display:flex;flex-direction:column;gap:var(--nx-s3);min-height:60vh}
.nx-mesaj-bas{display:flex;align-items:center;gap:var(--nx-s3);
  padding-block-end:var(--nx-s3);border-block-end:1px solid var(--nx-border)}
.nx-mesaj-geri{border:0;background:transparent;color:var(--nx-text);cursor:pointer;
  width:44px;height:44px;border-radius:var(--nx-radius);display:grid;place-items:center}
.nx-mesaj-geri:hover{background:var(--nx-surface-2)}
.nx-mesaj-liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;
  gap:var(--nx-s2);flex:1;overflow-y:auto}
.nx-mesaj-satir{display:flex}
/* Kendi mesajim SONA hizalanir. `flex-end` fiziksel degil mantiksal: Arapca
   (RTL) arayuzde otomatik olarak sol tarafa gecer. */
.nx-mesaj-satir.benim{justify-content:flex-end}
.nx-mesaj-balon{max-width:78%;padding:var(--nx-s2) var(--nx-s3);border-radius:var(--nx-radius);
  background:var(--nx-surface-2);border:1px solid var(--nx-border)}
.nx-mesaj-satir.benim .nx-mesaj-balon{background:var(--nx-primary-soft);border-color:transparent}
.nx-mesaj-balon p{margin:0;white-space:pre-wrap;word-break:break-word}
.nx-mesaj-bekleyen{display:block;margin-block-start:var(--nx-s-hair);color:var(--nx-muted);font-size:0.75rem}
.nx-mesaj-bos,.nx-mesaj-yasak{color:var(--nx-muted);padding:var(--nx-s4) 0;text-align:center}
.nx-mesaj-yazma{position:relative;display:grid;gap:var(--nx-s2);
  padding-block-start:var(--nx-s3);border-block-start:1px solid var(--nx-border)}
.nx-mesaj-alan{width:100%;resize:vertical;min-height:44px;padding:var(--nx-s2) var(--nx-s3);
  border:1px solid var(--nx-border);border-radius:var(--nx-radius);
  background:var(--nx-surface);color:var(--nx-text)}
.nx-mesaj-kanallar{display:flex;align-items:center;gap:var(--nx-s3);flex-wrap:wrap}
.nx-mesaj-kanallar label{display:flex;align-items:center;gap:var(--nx-s1);
  color:var(--nx-muted);min-height:44px;cursor:pointer}
.nx-mesaj-kanallar>*:last-child{margin-inline-start:auto}
/* `@` menusu yazma alaninin USTUNDE aciliyor: altta acilsaydi telefonda
   klavyenin arkasinda kalirdi. */
.nx-mesaj-anma{position:absolute;inset-block-end:100%;inset-inline-start:0;inset-inline-end:0;
  z-index:var(--nx-z-raised);max-height:220px;overflow-y:auto;margin-block-end:var(--nx-s1);
  background:var(--nx-surface);border:1px solid var(--nx-border);border-radius:var(--nx-radius)}
.nx-mesaj-anma-satir{display:flex;align-items:center;gap:var(--nx-s2);width:100%;
  min-height:44px;padding:var(--nx-s2) var(--nx-s3);border:0;background:transparent;
  color:var(--nx-text);text-align:start;cursor:pointer}
.nx-mesaj-anma-satir:hover{background:var(--nx-surface-2)}
.nx-mesaj-anma-satir span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

@media(max-width:767px){
  /* DORT EYLEM TELEFONDA SATIRA SIGMIYOR — olculdu (r207, 375px):
     4 x 48px = 192px, satirin yarisindan fazlasi. Ad "سعيد ..." diye
     kirpildi, unvan tek kelimelik bir seride sarildi ve geciken rozeti alt
     satira dustu. Adim 1'de uc eylem vardi ve siğiyordu; dorduncu eylemle
     birlikte duzen bozuldu.

     Cozum: telefonda eylemler KENDI SATIRINA iniyor ve tam genislikte
     yayiliyor. Boylece ad ve unvan tam genisligi geri aliyor, dokunma
     hedefleri 48px kaliyor. Masaustunde (768px+) hicbir sey degismiyor. */
  .nx-dizin-satir{grid-template-columns:34px minmax(0,1fr)}
  .nx-dizin-eylemler{
    grid-column:1 / -1;
    justify-content:flex-end; gap:var(--nx-s2);
    padding-block-start:var(--nx-s1);
    border-block-start:1px solid var(--nx-border);
  }
  /* Secim seridi telefonda alt menunun ustunde durmali, altinda degil. */
  .nx-dizin-secim-serit{inset-block-end:var(--nx-s16)}
  .nx-mesaj-balon{max-width:88%}
  /* iOS 16px'in altindaki girdiye odaklaninca sayfayi buyutuyor. */
  .nx-mesaj-alan{font-size:16px}
}

/* Takvimdeki TOPLANTI hapi (ILETISIM_MERKEZI_PLANI.md karar 12).
   Gorev haplarindan farkli renkte olmak ZORUNDA: ayni izgara iki tur kayit
   tasiyor ve plan §5 risk 4 "iki tur kayit karisir" diye onceden uyarmisti.
   Ayrim yalnizca renkle degil, sol kenardaki kalin seritle de yapiliyor —
   renk korligunde tek basina renk ayrim saymaz (WCAG 1.4.1). */
.nx-cal-pill.toplanti{
  background:var(--nx-accent-soft); color:var(--nx-text);
  border-inline-start:3px solid var(--nx-accent);
  text-decoration:none;
}
.nx-cal-pill.toplanti i{color:var(--nx-muted)}

/* ==========================================================================
   r209 — Dizin satiri yeniden tasarlandi.

   Seyfettin dort cerceveli kutuyu gorup "begenmedim" dedi. Olcum onu
   dogruluyordu: 4 x 48px = 192px, yani 375px'lik telefonda satirin YARISINDAN
   fazlasi dugmeydi ve satir bir kisi satiri degil arac cubugu gibi
   okunuyordu. Masaustunde de her satirda dort cerceve, listeyi gurultulu
   yapiyordu.

   Uc degisiklik:
   1. SATIRIN KENDISI mesaji aciyor. Bir iletisim merkezinde en sik yapilan
      sey yazismak; onu bir ikonun arkasina koymak gereksizdi. Mesaj ikonu
      satirdan KALKTI, okunmamis rozeti adin yanina gecti.
   2. Kalan ikonlar cercevesiz. Sessiz renkte duruyorlar, yalnizca uzerine
      gelince yumusak bir DAIRE beliriyor. Kutu yok, kenarlik yok.
   3. Bolum basligindaki yalniz kamera ikonu YAZILI dugme oldu: baslikta
      baglam olmadigi icin tek basina ikon ne yaptigini soylemiyordu.
   ========================================================================== */
.nx-dizin-satir{grid-template-columns:minmax(0,1fr) auto}
.nx-dizin-ana{
  display:grid; grid-template-columns:38px minmax(0,1fr); align-items:center;
  gap:var(--nx-s3); min-width:0; width:100%;
  border:0; background:transparent; color:inherit; text-align:start;
  padding:var(--nx-s1) 0; cursor:pointer; border-radius:var(--nx-radius);
}
.nx-dizin-ana:disabled{cursor:default}
.nx-dizin-satir:not(.benim):hover .nx-dizin-ad>span:first-child{color:var(--nx-primary-strong)}
/* Cerceve yok; sessiz ikon, uzerine gelince daire. */
.nx-dizin-eylem{
  width:40px;height:40px;border:0;background:transparent;
  border-radius:var(--nx-radius-pill);
}
.nx-dizin-eylem .nx-brand-icon{width:20px;height:20px}
.nx-dizin-eylem:hover{background:var(--nx-surface-2);color:var(--nx-text)}
.nx-dizin-eylem.secili{background:var(--nx-primary);color:#fff}
.nx-dizin-eylem.secili:hover{background:var(--nx-primary)}
/* Rozet artik adin yaninda: mutlak konumlu degil, akista. */
.nx-dizin-rozet{
  position:static; flex:0 0 auto;
  min-width:18px;height:18px;padding:0 5px;
  border-radius:var(--nx-radius-pill); background:var(--nx-danger); color:#fff;
  font-size:0.6875rem; line-height:18px; font-weight:700; text-align:center;
}
.nx-dizin-grup-toplanti{
  margin-inline-start:auto; display:flex; align-items:center; gap:var(--nx-s1);
  width:auto; height:34px; padding:0 var(--nx-s3);
  border:1px solid var(--nx-border); background:transparent;
  border-radius:var(--nx-radius-pill); color:var(--nx-muted);
  font-size:0.75rem; font-weight:600; cursor:pointer;
}
.nx-dizin-grup-toplanti .nx-brand-icon{width:16px;height:16px}
.nx-dizin-grup-toplanti:hover{background:var(--nx-surface-2);color:var(--nx-text)}

@media(max-width:767px){
  /* Telefonda eylemler yine kendi satirinda ama artik cercevesiz ve
     ikisi kaldigi icin satir cok daha sakin. */
  .nx-dizin-satir{grid-template-columns:minmax(0,1fr)}
  .nx-dizin-ana{grid-template-columns:34px minmax(0,1fr)}
  .nx-dizin-eylemler{grid-column:1;border-block-start:1px solid var(--nx-border)}
  .nx-dizin-eylem{width:44px;height:44px}
  /* Bolum dugmesinin yazisi telefonda basligi kirpiyordu. */
  .nx-dizin-grup-toplanti span{display:none}
  .nx-dizin-grup-toplanti{width:34px;padding:0}
}

/* r211 — Evet/hayir durum isareti (yonetim ve isletim okumalari).
   `✓` glifi cizilmis `check` ile degisti; `—` metin olarak kaldi cunku o bir
   ikon degil, "deger yok" anlamina gelen tipografik isaret. */
.nx-durum-isareti{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}
.nx-durum-isareti .nx-brand-icon{width:16px;height:16px}
.nx-durum-isareti.olumlu{color:var(--nx-success-text)}
.nx-durum-isareti.olumsuz{color:var(--nx-danger-text)}
.nx-durum-isareti.bos{color:var(--nx-muted)}
/* Hizli erisim kutucugunun ikonu: glif yerine cizim geldigi icin kutu artik
   yazi tipi boyutuna degil, ikonun kendi olcusune bakiyor. */
.nx-launcher-glyph .nx-brand-icon{width:22px;height:22px}
.nx-result-icon .nx-brand-icon,.nx-tile-go .nx-brand-icon{width:18px;height:18px}
.nx-empty-icon .nx-brand-icon{width:28px;height:28px}

/* ==========================================================================
   r212 — Iletisim merkezi duzeni: duz liste + filtre + toplanti widget'i.

   Seyfettin uretim verisinde gorup "bolum bolum ayirdin, ona gerek yok" dedi.
   Gruplama kalkti; bolum artik filtreden seciliyor. Toplanti ayri bir widget
   oldu ve ARAMANIN HEMEN ALTINDA duruyor.
   ========================================================================== */
.nx-toplanti-widget{
  display:flex; align-items:center; gap:var(--nx-s3);
  padding:var(--nx-s3) var(--nx-s4);
  background:var(--nx-surface); border:1px solid var(--nx-border);
  border-radius:var(--nx-radius);
}
.nx-toplanti-widget-ikon{
  width:40px;height:40px;flex:0 0 auto;display:grid;place-items:center;
  border-radius:var(--nx-radius); background:var(--nx-accent-soft); color:var(--nx-accent);
}
.nx-toplanti-widget-metin{display:grid;gap:var(--nx-s-hair);min-width:0}
.nx-toplanti-widget-metin strong{font-size:0.9375rem}
.nx-toplanti-widget-metin small{color:var(--nx-muted);font-size:0.7812rem;line-height:1.35}
.nx-toplanti-widget>.nx-button{margin-inline-start:auto;flex:0 0 auto}

.nx-dizin-filtre-serit{display:flex;align-items:center;gap:var(--nx-s2);flex-wrap:wrap}
.nx-dizin-filtre-ac{
  display:inline-flex;align-items:center;gap:var(--nx-s1);
  min-height:36px;padding:0 var(--nx-s3);
  border:1px solid var(--nx-border); background:var(--nx-surface);
  border-radius:var(--nx-radius-pill); color:var(--nx-text);
  font-weight:600;cursor:pointer;
}
.nx-dizin-filtre-ac .nx-brand-icon{width:18px;height:18px}
.nx-dizin-filtre-ac:hover{background:var(--nx-surface-2)}
/* Filtre etkinken dugme bunu SOYLUYOR: aksi halde "liste neden kisa?"
   sorusunun cevabi ekranda hicbir yerde yazmiyordu. */
.nx-dizin-filtre-ac.etkin{background:var(--nx-primary-soft);color:var(--nx-primary-strong);border-color:transparent}
.nx-fp-foot{display:flex;align-items:center;gap:var(--nx-s2);padding-block-start:var(--nx-s3)}
.nx-fp-foot>*:last-child{margin-inline-start:auto}

.nx-toplanti-arama{margin-block-end:var(--nx-s3)}
.nx-toplanti-liste{list-style:none;margin:0;padding:0;display:grid;gap:var(--nx-s-hair);max-height:52vh;overflow-y:auto}
.nx-toplanti-satir{
  display:grid; grid-template-columns:38px minmax(0,1fr) 28px; align-items:center;
  gap:var(--nx-s3); width:100%; min-height:56px; padding:var(--nx-s1) var(--nx-s2);
  border:0; background:transparent; color:inherit; text-align:start;
  border-radius:var(--nx-radius); cursor:pointer;
}
.nx-toplanti-satir:hover{background:var(--nx-surface-2)}
.nx-toplanti-satir.secili{background:var(--nx-primary-soft)}
.nx-toplanti-bilgi{display:grid;gap:var(--nx-s-hair);min-width:0}
.nx-toplanti-bilgi strong{font-size:0.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-toplanti-bilgi small{color:var(--nx-muted);font-size:0.7812rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Secim kutusu: bos halde cerceve, secilince dolu. Tik tek basina
   yetmiyordu -- secilmemis satirda hicbir sey olmayinca "buraya
   dokunulabilir" bilgisi kayboluyordu. */
.nx-toplanti-kutu{
  width:22px;height:22px;border-radius:6px;display:grid;place-items:center;
  border:1.5px solid var(--nx-border); color:transparent;
}
.nx-toplanti-satir.secili .nx-toplanti-kutu{background:var(--nx-primary);border-color:var(--nx-primary);color:#fff}
.nx-toplanti-kutu .nx-brand-icon{width:16px;height:16px}
.nx-toplanti-bos{padding:var(--nx-s6) 0;text-align:center;color:var(--nx-muted)}
.nx-toplanti-alt{display:flex;align-items:center;gap:var(--nx-s3);width:100%}
.nx-toplanti-alt>span{color:var(--nx-muted)}
.nx-toplanti-alt>*:last-child{margin-inline-start:auto}

@media(max-width:767px){
  /* Telefonda widget dikey: yan yana ikon+metin+dugme 375px'e sigmiyor. */
  .nx-toplanti-widget{flex-wrap:wrap}
  .nx-toplanti-widget>.nx-button{width:100%;margin-inline-start:0}
  .nx-toplanti-liste{max-height:none}
}

@media(max-width:767px){
  /* ======================================================================
     r213 — Gorevlerim seridi: filtre ve gorunum AYRI iki ikon dugmesi.

     Seyfettin: "bilmeyen biri nerden filtreleme yapacagini yada gorunumu
     nasil ayarlayacagini bilmez. كل الشركات kismi fazla yer almis, kucult
     ve yanina bizim filtreleme simgemiz... sonra gorunum icin zeki bir
     simge dusun."

     Oncesi: seritte kapsam dugmesi genisligin cogunu aliyordu, yaninda bir
     arama simgesi ve "الكل 5" yazan TEK bir dugme vardi. O tek dugme filtre
     panelini aciyordu ve gorunum ayarlari o panelin ICINDE gizliydi -- iki
     ayri is, tek dugmenin arkasinda.

     Sonrasi: kapsam kucuk, yaninda uc ikon -- ara, suzgec, gorunum. Gorunum
     ikonu ACIK OLAN gorunumu cizer (liste, kart, pano...): hem nereye
     basilacagini hem su an nerede olundugunu soyluyor.
     ====================================================================== */
  .nx-ms-kapsam{flex:0 1 auto;max-width:46%}
  .nx-ms-kapsam b{font-size:0.875rem}
  /* Ikon dugmeleri: 48x48 dokunma hedefi, ayni cerceve dili. */
  .nx-ms-ikon{width:48px;min-height:48px;flex:0 0 auto;position:relative;
    display:flex;align-items:center;justify-content:center;padding:0;
    border:1px solid var(--nx-border);border-radius:12px;
    background:var(--nx-surface-2);color:var(--nx-text);cursor:pointer}
  .nx-ms-ikon[aria-expanded="true"]{background:var(--nx-primary-soft);
    border-color:transparent;color:var(--nx-primary-strong)}
  /* Etkin filtre sayisi ikonun kosesinde; RTL'de kendiliginden yer degistirsin
     diye mantiksal ozellik. */
  .nx-ms-ikon .nx-ms-rozet{position:absolute;inset-block-start:3px;inset-inline-end:3px}
  /* Serit dort ogeye cikti; bosluk daraldi ki dordu de tek satirda kalsin. */
  .nx-mobil-serit{gap:6px}
}

/* ==========================================================================
   r213 — Kanal seridi ve toplanti widget'i.

   Seyfettin: "arama isareti icin basildiginda whatsapp, telegram, normal
   arama secenekleri ciksin; mesaj isareti ise mail, telegram, whatsapp.
   Nasil cikacagini beraber dusunelim, seciligi zaman saga dogru bir motion
   o uygulamalarin simgeleri ciksin sonra yonlendirilsin."

   Oyle yapildi: uzerine PENCERE ACILMIYOR. Secenekler satirin kendi eylem
   alaninda, kenara dogru kayarak beliriyor -- telefonda basparmak zaten
   orada; pencere bir dokunus ve bir kapatma daha eklerdi.
   ========================================================================== */
.nx-kanal-serit{display:flex;align-items:center;gap:var(--nx-s1)}
.nx-kanal-oge,.nx-kanal-kapat{
  width:40px;height:40px;flex:0 0 auto;
  display:grid;place-items:center;border:0;background:transparent;
  border-radius:var(--nx-radius-pill);color:var(--nx-muted);
  text-decoration:none;cursor:pointer;
  /* Kenardan iceri kayarak gelis. Her oge bir oncekinden biraz sonra
     basliyor (asagidaki gecikmeler): hepsi ayni anda belirince tek bir
     blok gibi okunuyordu, sirayla gelince "secenekler acildi" anlasiliyor. */
  animation:nx-kanal-gir var(--nx-dur-standard) var(--nx-ease-enter) both;
}
.nx-kanal-oge:nth-child(2){animation-delay:40ms}
.nx-kanal-oge:nth-child(3){animation-delay:80ms}
.nx-kanal-kapat{animation-delay:120ms;color:var(--nx-muted)}
.nx-kanal-oge .nx-brand-icon,.nx-kanal-kapat .nx-brand-icon{width:20px;height:20px}
.nx-kanal-oge:hover{background:var(--nx-surface-2);color:var(--nx-text)}
.nx-kanal-kapat:hover{background:var(--nx-surface-2);color:var(--nx-text)}
@keyframes nx-kanal-gir{
  /* `translateX` fiziksel; RTL'de ters yone kaymamasi icin yon degiskenle
     veriliyor ve asagida RTL'de isareti cevriliyor. */
  from{opacity:0;transform:translateX(var(--nx-kanal-kayma,14px)) scale(.9)}
  to{opacity:1;transform:none}
}
:root[dir="rtl"] .nx-kanal-serit,[dir="rtl"] .nx-kanal-serit{--nx-kanal-kayma:-14px}
@media(prefers-reduced-motion:reduce){
  .nx-kanal-oge,.nx-kanal-kapat{animation:none}
}

/* Widget artik tek bir dugme: icinde ikinci bir dugme yok. */
.nx-toplanti-widget{
  width:100%;text-align:start;cursor:pointer;
  font:inherit;color:inherit;
}
.nx-toplanti-widget:hover{background:var(--nx-surface-2)}
.nx-toplanti-widget-ok{margin-inline-start:auto;flex:0 0 auto;color:var(--nx-muted);display:grid;place-items:center}
.nx-toplanti-widget-ok .nx-brand-icon{width:20px;height:20px}

@media(max-width:767px){
  /* Telefonda kanal ogeleri 44px: satirin kendi dokunma hedefiyle ayni. */
  .nx-kanal-oge,.nx-kanal-kapat{width:44px;height:44px}
  .nx-toplanti-widget{flex-wrap:nowrap}
}

@media(max-width:767px){
  /* Suzgec dugmesi ikon + metin tasidiginda kare degil hap olur; varsayilan
     kovada yalnizca ikon kaldigi icin yine 48px kare gorunur. */
  .nx-ms-suzgec-ikon{width:auto;min-width:48px;gap:6px;padding:0 10px}
  .nx-ms-suzgec-ikon b{font-weight:700;font-size:0.8125rem;
    text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:90px}
  .nx-ms-suzgec-ikon .nx-ms-sayi{color:var(--nx-muted);font-size:0.8125rem;font-weight:600}
  /* Metin varken rozet kosede degil akista dursun, yoksa yaziyi ortuyor. */
  .nx-ms-suzgec-ikon:has(b) .nx-ms-rozet{position:static}
}

/* ==========================================================================
   r216 — Dizin satirinda KAYDIRMA jesti.

   Seyfettin: "saga dogru kaydirma arama olsun, sola dogru ise mesaj olsun."

   Satirin icerigi artik `.nx-dizin-kayan` sarmalayicisinda; izgara oraya
   tasindi ve `li` yalnizca cerceve + kirpma katmani oldu. Kirpma sart:
   kayan icerik komsu satirlarin uzerine tasmamali.
   ========================================================================== */
.nx-dizin-satir{position:relative;overflow:hidden;display:block}
.nx-dizin-kayan{
  display:grid;grid-template-columns:minmax(0,1fr) auto;
  align-items:center;gap:var(--nx-s3);
  /* Parmak birakilinca yerine oturma. Surukleme sirasinda gecis YOK
     (transform satir ici stil olarak her karede degisiyor); bu gecis
     yalnizca geri donusu yumusatiyor. */
  transition:transform var(--nx-dur-micro) var(--nx-ease-standard);
}
/* Ipucu: parmak giderken ACILACAK ISI soyluyor. Yon FIZIKSEL -- jestin
   kendisi de oyle tanimlandi. Satir saga kayarken solda yer aciliyor,
   ipucu oraya oturuyor. */
.nx-dizin-ipucu{
  position:absolute;inset-block:0;width:56px;
  display:grid;place-items:center;pointer-events:none;
}
.nx-dizin-ipucu.ara{left:0;color:var(--nx-success-text);background:var(--nx-success-soft)}
.nx-dizin-ipucu.mesaj{right:0;color:var(--nx-primary-strong);background:var(--nx-primary-soft)}
.nx-dizin-ipucu .nx-brand-icon{width:22px;height:22px}

@media(max-width:767px){
  .nx-dizin-satir{grid-template-columns:none}
  .nx-dizin-kayan{grid-template-columns:minmax(0,1fr)}
}
@media(prefers-reduced-motion:reduce){
  .nx-dizin-kayan{transition:none}
}

/* ==========================================================================
   r217 — Kanal SECENEK SAYFASI (serit yerine).

   Seyfettin: "direk sorsun nerden arama yada mesaj gonderecegini sorsun
   sonra oraya yonlendirsin."

   Once secenekler satirin icinde yalnizca IKON olarak aciliyordu. Ikon tek
   basina ne oldugunu soylemiyor; kullanicilarimizin bir kismi fabrika ve
   magaza calisani ve bu uyari bu depoda daha once de yazildi ("soyut simge
   ogrenilmeyi gerektirir"). Artik her secenegin ADI ve NEREYE gidecegi
   yaziyor.
   ========================================================================== */
.nx-kanal-liste{display:grid;gap:var(--nx-s1)}
.nx-kanal-satir{
  display:grid;grid-template-columns:40px minmax(0,1fr) 20px;align-items:center;
  gap:var(--nx-s3);min-height:56px;padding:var(--nx-s2) var(--nx-s2);
  border-radius:var(--nx-radius);color:var(--nx-text);text-decoration:none;
}
.nx-kanal-satir:hover{background:var(--nx-surface-2)}
.nx-kanal-ikon{
  width:40px;height:40px;display:grid;place-items:center;
  border-radius:var(--nx-radius);background:var(--nx-surface-2);color:var(--nx-primary-strong);
}
.nx-kanal-ikon .nx-brand-icon{width:20px;height:20px}
.nx-kanal-metin{display:grid;gap:var(--nx-s-hair);min-width:0}
.nx-kanal-metin strong{font-size:0.9375rem}
/* Alt satir NEREYE gidilecegini yaziyor: numara ya da adres. Dokunmadan
   once kime gidildigi goruluyor. Yon zorlaniyor cunku numara Latin rakam
   ve RTL akista parcalaniyordu. */
.nx-kanal-metin small{color:var(--nx-muted);font-size:0.8125rem;
  direction:ltr;text-align:start;unicode-bidi:isolate;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-kanal-ok{color:var(--nx-muted);display:grid;place-items:center}
.nx-kanal-ok .nx-brand-icon{width:18px;height:18px}
.nx-kanal-not{
  margin:var(--nx-s3) 0 0;padding:var(--nx-s2) var(--nx-s3);
  border-radius:var(--nx-radius);background:var(--nx-warning-soft);
  color:var(--nx-warning-text);font-size:0.8125rem;line-height:1.45;
}

/* r218 — Dosya turu ikonu (emoji yerine). */
.nx-file-tur{display:grid;place-items:center;color:var(--nx-muted)}
.nx-file-tur .nx-brand-icon{width:20px;height:20px}
