@import url('/design/tokens.css'); /* --ps-* sayfa standardi (docs/TASARIM-STANDARDI.md) */
/* Probot Egitim - dokuman kabugu (A formati). Prototip: ui/egitim/prototip/a */
:root{--yan:var(--ps-yan-w,264px);--orange:#FF4500;--deep:#D63600;--cream:#FFF7F0;--ink:#241a12;--muted:#6f6258;--line:#eadfd6;--code:#f6ede4}
*{box-sizing:border-box}
body{margin:0;font-family:'Baloo 2',system-ui,sans-serif;color:var(--ink);background:#fff}

/* Kompozisyon (Tuna 2026-08-22 rev2, referans: Docusaurus/GitBook/Stripe docs):
   sol panel SOL kenara, TOC SAĞ kenara sabit; yazı kolonu ikisinin arasında ortalanır.
   Genis ekranda bosluk iki yana esit dagilir, tek tarafta olu alan kalmaz. */
/* yan panel genisligi --yan: varsayilan 264px (standart), kullanici tutamactan cekerek ayarlar (yan-boy.js,
   localStorage egitim-yan, head'de ilk paint'ten once uygulanir); 1000px altinda sabit 230px */
.layout{display:grid;grid-template-columns:var(--yan) minmax(0,1fr) 220px}
@media(max-width:1000px){.layout{grid-template-columns:230px minmax(0,1fr)}.toc{display:none}}
@media(max-width:720px){.layout{grid-template-columns:1fr}.side{display:none}}
/* asistan paneli sayfayi sikistirinca (media query viewport'a bakar, daralmayi gormez):
   sohbet.js kalan genislige gore bu siniflari basar */
body.shb-dar1 .toc{display:none}
body.shb-dar2 .side{display:none}
body.shb-dar1 .layout{grid-template-columns:230px minmax(0,1fr)}
body.shb-dar2 .layout{grid-template-columns:1fr}

.side{border-right:1px solid var(--ps-yan-cizgi,#eadfd6);background:var(--ps-yan-bg,#fff);
  padding:26px 18px 40px clamp(16px,3vw,30px);font-size:14px;position:sticky;top:var(--ps-header-h,64px);
  height:calc(100vh - var(--ps-header-h,64px));overflow-y:auto}
/* kaydirinca header adaya doner; sol panel beyazi ekranin tepesine kadar uzasin */
@media(min-width:721px){body:has(probot-header[scrolled]) .side{box-shadow:-1px calc(-1 * var(--ps-header-h,64px)) 0 var(--ps-yan-bg,#fff),0 calc(-1 * var(--ps-header-h,64px)) 0 var(--ps-yan-cizgi,#eadfd6)}}
/* genislik tutamaci: panelin sag kenari, gorunmez; uzerine gelince/cekerken ince cizgi */
.side .tut{position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;touch-action:none;
  border-right:2px solid transparent;transition:border-color .15s}
.side .tut:hover,html.yan-tut .side .tut{border-right-color:var(--orange)}
html.yan-tut{cursor:col-resize;user-select:none}
html.yan-tut .layout,html.yan-tut .side{transition:none!important}
@media(max-width:1000px){.side .tut{display:none}}
.side .back{display:block;padding:2px 8px 12px 14px;border-left:0;font-size:13.5px;font-weight:700;color:var(--muted);text-decoration:none}
.side .back:hover{color:var(--deep)}
.side .dil{display:block;padding:0 8px 14px 14px}
.side .dil select{width:100%;border:1px solid var(--line);border-radius:8px;background:#fff;
  font:600 13px 'Baloo 2',system-ui,sans-serif;color:var(--ink);padding:5px 8px;cursor:pointer}
.side .grp{font-size:12px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--ps-yan-bas,#9c8d80);
  margin:18px 8px 6px 14px}
.side .grp:first-child{margin-top:0}
.side .grp.dim{color:#b9a99b}
/* grup başlığı link olabilir (FTC Rehberi kökü): etiket görünümü aynı kalsın */
.side .grp a{display:inline;padding:0;border:0;color:inherit;font-weight:800;font-size:inherit;text-decoration:none}
.side .grp a:hover{background:none;color:var(--deep)}
.side .grp a.on{background:none;color:var(--deep);border:0}
/* oge = duz metin; secili = koyu kalin + ince turuncu sol cizgi, dolgu YOK (standart, hesap paneli) */
.side a{display:block;padding:6px 10px 6px 12px;border-left:2px solid transparent;border-radius:0;
  color:var(--ps-yan-oge,#6f6258);text-decoration:none;font-weight:600;font-size:15px;line-height:1.35}
.side a:hover{color:var(--ps-yan-secili,#241a12);border-left-color:var(--ps-yan-cizgi,#eadfd6)}
.side a.on{color:var(--ps-yan-secili,#241a12);font-weight:700;border-left-color:var(--ps-vurgu,#FF4500)}
.side a:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
.side .lock{display:block;padding:6px 10px 6px 14px;color:#b9a99b;font-weight:600}
.side a .tsl{font-style:normal;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:#b9a99b;background:var(--cream);border-radius:6px;padding:1px 6px;margin-left:7px;vertical-align:1px}
.side a.on .tsl{background:#fff}

/* ============ FTC Rehberi yan menüsü: iç içe akordeon ============
   Ünite > Bölüm > Konu. Prototip: ui/egitim/yan-deneme (rev4 V2 geçişi + V4 nabız;
   rev6 C3 = Tuna seçimi 2026-09-06: ünite büyük, konu başlığı kalın cümle dizimi + alt
   çizgi (açıkken turuncu), ders satırı hafif, durum rozeti yan panelde gizli).
   Açılış durumu sunucudan gelir; yan.js yalnızca sınıf açıp kapatır. Yalnız .side.agac
   (ünite sayfaları) etkilenir, core/katalog menüleri aynı kalır. */
.side.agac .sr{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
.side.agac .tog{border:0;background:none;font:inherit;cursor:pointer}

/* ünite satırı = BAŞLIK: tüm satır tek aç/kapa düğmesi (link yok, navigasyon yok) */
.side.agac .u>.h{display:flex;align-items:flex-start;gap:6px;width:100%;margin-top:6px;
  padding:7px 8px 5px 6px;border-radius:0;text-align:left;color:var(--ink);cursor:pointer;font-size:16px}
.side.agac .u>.h:hover{color:var(--deep)}
.side.agac .chev{display:block;width:8px;height:8px;border-right:2px solid var(--muted);
  border-bottom:2px solid var(--muted);transform:rotate(-45deg);margin-top:6px;
  transition:transform .22s cubic-bezier(.2,.8,.2,1)}
.side.agac .open>.h .chev,.side.agac .b.open>.h .chev{transform:rotate(45deg)}
.side.agac .u>.h .tt{flex:1 1 auto;font-weight:800;line-height:1.25}
.side.agac .u>.h .tt small{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-top:1px}
.side.agac .u.open>.h{color:var(--deep)}

/* ünite bilgilendirme dersi (kapak): bölümlerin üstünde, hafif ayrılmış */
.side.agac a.kapak{margin-bottom:4px;padding:4px 8px 4px 12px;font-size:12.5px}

/* bölüm (konu) satırı: kalın, cümle dizimi, altında çizgi; açıkken başlık ve çizgi turuncu.
   Ok solda, ünite okuyla aynı hizada. Sağda yazılan/toplam sayacı. */
.side.agac .b>.h{display:flex;align-items:center;gap:6px;width:100%;margin:10px 0 3px;
  padding:5px 4px 4px 0;border-radius:0;border-bottom:1.5px solid var(--line);
  font-size:14px;font-weight:800;color:var(--ink);text-align:left}
.side.agac .b>.h:hover{color:var(--deep)}
.side.agac .b>.h .chev{width:7px;height:7px;border-width:2px;margin:0 5px 2px 0}
.side.agac .b.open>.h .chev{margin:0 5px 4px 0}
.side.agac .b.open>.h{color:var(--deep);border-bottom-color:var(--orange)}
.side.agac .b>.h .bt{flex:1 1 auto}
.side.agac .b>.h .sy{font-size:10px;font-weight:700;letter-spacing:0;
  text-transform:none;color:#b9a99b}

/* açılır kutular: yükseklik grid ile, içerik solma + kayma ile (prototip V2) */
.side.agac .ic{display:grid;grid-template-rows:0fr;
  transition:grid-template-rows .28s cubic-bezier(.2,.8,.2,1)}
.side.agac .open>.ic{grid-template-rows:1fr}
.side.agac .ic>div{overflow:hidden;min-height:0;opacity:0;transform:translateY(-6px);
  transition:opacity .22s ease,transform .28s cubic-bezier(.2,.8,.2,1)}
.side.agac .open>.ic>div{opacity:1;transform:none}
.side.agac .u>.ic>div{margin-left:12px;border-left:1px solid var(--line);padding-left:8px}

/* rehber ana sayfa satırı: ünitelerin tepesinde, ders satırı görünümünde */
.side.agac a.kok{margin-bottom:2px;font-size:13px;padding:5px 10px}
.side.agac .lock.bos{margin-left:12px;padding-left:14px;border-left:1px solid var(--line);
  font-size:12.5px;text-transform:uppercase;letter-spacing:.05em}

/* ders satırları: hafif ağırlık, numara soluk; aktif satır kalın (yazılmamış = kilit, link değil) */
.side.agac .b a,.side.agac .b .lock{padding:3px 8px 3px 9px;font-size:12.5px;font-weight:500}
.side.agac .b a .no{font-weight:600;font-size:11.5px;color:#a89a8e;margin-right:7px}
.side.agac .b a.on{font-weight:700}
.side.agac .b a.on .no{color:inherit}
/* durum rozeti (taslak/iskelet) yan panelde GİZLİ: öğrenci görünümü (Tuna 2026-09-06);
   işaretleme derleyicide duruyor, geri açmak = bu satırı sil */
.side.agac a .tsl{display:none}
/* giriş animasyonu YALNIZ kullanıcı açtığında (.acilan, yan.js kısa süre ekler);
   sayfa yüklenirken satırlar oynamaz */
.side.agac .acilan a{animation:giris .3s both}
.side.agac .acilan a:nth-child(2){animation-delay:.03s}
.side.agac .acilan a:nth-child(3){animation-delay:.06s}
.side.agac .acilan a:nth-child(4){animation-delay:.09s}
.side.agac .acilan a:nth-child(5){animation-delay:.12s}
.side.agac .acilan a:nth-child(6){animation-delay:.15s}
.side.agac .acilan a:nth-child(7){animation-delay:.18s}
.side.agac .acilan a:nth-child(8){animation-delay:.21s}
.side.agac a.on{animation:nabiz .45s cubic-bezier(.34,1.4,.64,1)}
.side.agac .acilan a.on{animation:giris .3s both,nabiz .45s cubic-bezier(.34,1.4,.64,1)}
@keyframes giris{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}
@keyframes nabiz{0%{transform:scale(.97);background:#fff}60%{transform:scale(1.015)}100%{transform:none}}
/* ilk paint kilidi: durum uygulanana kadar hiçbir geçiş/animasyon çalışmaz
   (yan.js iki requestAnimationFrame sonra .no-anim'i kaldırır) */
html.no-anim .side.agac *{transition:none!important;animation:none!important}
.side.agac{scroll-behavior:auto}
@media(prefers-reduced-motion:reduce){.side.agac *{transition:none!important;animation:none!important}}

main{padding:var(--ps-icerik-ust,32px) clamp(20px,3.5vw,var(--ps-icerik-sol,44px)) 80px;max-width:820px;min-width:0;width:100%;margin:0 auto}
main h1{font-size:var(--ps-h1,30px);line-height:1.2;margin:0 0 12px;font-weight:800;letter-spacing:-.02em}
@media(max-width:900px){main h1{font-size:var(--ps-h1-mobil,26px)}}
@media(max-width:720px){main{padding-left:clamp(16px,3vw,30px);padding-right:clamp(16px,3vw,30px)}}
main h2{font-size:22px;margin:36px 0 8px;font-weight:800}
main h3{font-size:17px;margin:26px 0 6px;font-weight:800}
main p,main li{font-size:15.5px;line-height:1.7;color:#4a3f36;font-weight:500}
main a{color:var(--deep);font-weight:700;text-decoration:none}
main a:hover{text-decoration:underline}
main a.btn{display:inline-block;border:1px solid var(--line);border-radius:10px;padding:9px 16px;
  margin:4px 8px 4px 0;font-size:14.5px}
main a.btn:hover{border-color:var(--deep);text-decoration:none}
main img{max-width:100%;border:1px solid var(--line);border-radius:10px}
main code{font-family:'JetBrains Mono',monospace;font-size:.86em;background:var(--code);border-radius:5px;padding:2px 6px}
main pre{background:#241a12;color:#ffe9dc;border-radius:10px;padding:16px 18px;overflow-x:auto;
  font-size:13px;line-height:1.6}
main pre code{background:none;color:inherit;padding:0;font-size:inherit}
/* kopyala.js: kod blogunun sag ustunde her zaman gorunen "Kopyala" dugmesi */
main .kod-kutu{position:relative}
main .kod-kutu>pre{padding-top:44px}
main .kod-kopyala{position:absolute;top:8px;right:8px;font-family:inherit;font-weight:700;font-size:12.5px;
  color:#ffe9dc;background:rgba(255,233,220,.08);border:1px solid rgba(255,233,220,.28);border-radius:8px;
  padding:5px 10px;cursor:pointer;line-height:1.3}
main .kod-kopyala:hover{background:rgba(255,233,220,.16)}
main .kod-kopyala:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
main .kod-kopyala.tamam{color:#fff;background:var(--orange);border-color:var(--orange)}
main table{border-collapse:collapse;width:100%;font-size:14px;margin:14px 0;display:block;overflow-x:auto}
main th,main td{border:1px solid var(--line);padding:8px 12px;text-align:left;line-height:1.5}
main th{background:var(--cream);font-weight:800}
/* 3+ sutunlu tablo telefonda satir basina kart (derleyici tabloYigin data-label yazar) */
@media(max-width:600px){
  main table.yigin{display:block;border:0;font-size:15px}
  main table.yigin thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  main table.yigin tbody,main table.yigin tr,main table.yigin td{display:block}
  main table.yigin tr{border:1px solid var(--line);border-radius:10px;margin:0 0 12px;padding:4px 14px}
  main table.yigin td{border:0;padding:8px 0}
  main table.yigin td+td{border-top:1px solid var(--line)}
  main table.yigin td::before{content:attr(data-label);display:block;font-size:12px;font-weight:800;color:var(--muted)}
  main table.yigin td:empty{display:none}
}
main hr{border:0;border-top:1px solid var(--line);margin:30px 0}
main blockquote{margin:14px 0;padding:10px 16px;border:1px solid var(--line);border-radius:10px;background:var(--cream);color:var(--muted)}

.adm{border:1px solid var(--line);border-radius:10px;
  background:var(--cream);padding:12px 16px;margin:16px 0}
.adm.warn{background:#fdf3f2;border-color:#f2d4d0}
/* okura donuk guncelleme/geri bildirim bandi (Tuna 2026-09-12); taslak bandindan
   ayirt edilsin diye sakin yesil, uyari degil davet */
.adm.note{background:#f4faf6;border-color:#dcece2}
.adm.note .adm-t{color:#1f5c3f}
.adm .adm-t{font-weight:800;font-size:14px;margin:0 0 4px;color:var(--ink)}
.adm p{font-size:14.5px;margin:6px 0}

/* --- katalog bloklari (Probot FTC Kataloğu; core sayfalarinda gorunmez) --- */
.media{border:2px dashed #e8c9b4;border-radius:12px;background:#fffdfb;margin:18px 0;padding:26px 18px;
  text-align:center;color:var(--muted);font-weight:600;font-size:14px}
.media .ic{font-size:26px;display:block;margin-bottom:6px}
.varlik{display:inline-block;background:var(--code);border:1px solid var(--line);border-radius:7px;
  padding:1px 9px;font-size:.88em;font-weight:700;color:var(--muted);white-space:nowrap}
.lvl{border:1px solid var(--line);border-radius:14px;padding:4px 22px 18px;margin:26px 0;background:#fffefd}
.lvl > h2{margin-top:18px}
.lvl .env{font-size:12.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--orange)}
.lvl h3{color:var(--deep)}
.lvl h3 small{color:var(--muted);font-weight:700;font-size:12px;letter-spacing:.06em;
  text-transform:uppercase;display:block;margin-bottom:2px}
.widget{margin:18px 0;border:1px solid var(--line);border-radius:12px;padding:16px;background:var(--cream)}
.widget .wrow{display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.widget .wsl{display:flex;flex-direction:column;align-items:center;gap:4px}
.widget label{font-size:13px;font-weight:700;color:var(--muted);display:block;text-align:center}
.widget input[type=range]{writing-mode:vertical-lr;direction:rtl;height:110px;accent-color:var(--orange)}
.widget canvas{background:#fff;border:1px solid var(--line);border-radius:10px;max-width:100%}
.widget button{font-family:inherit;font-weight:700;border:1px solid var(--line);border-radius:8px;
  background:#fff;padding:6px 14px;cursor:pointer;color:var(--deep)}
.widget button:hover{border-color:var(--deep)}
.widget .val{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);text-align:center}
.widget .wnot{font-size:13px;color:var(--muted);font-weight:600;margin-left:8px}
/* hazir konfigurasyon tuslari (Tuna 2026-08-25): sliderlarin YANINDA dar bir kolon;
   tikla slider'lar o konfigurasyona atlar. Dar ekranda tuval altina sarar. */
.widget .onayar{display:flex;flex-direction:column;gap:5px;align-self:stretch;justify-content:center}
.widget .onayar button{padding:4px 10px;font-size:12.5px;border-radius:7px;white-space:nowrap;text-align:left}
.widget .walt{margin-top:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.widget .walt .wnot{margin-left:0}
.widget button.wan{color:var(--muted)}
.widget button.wan.on{color:var(--deep);border-color:var(--deep);background:#ffede3}
@media(max-width:560px){.widget .onayar{flex-direction:row;flex-wrap:wrap}}
/* hero duzeni (Tuna 2026-08-25): tek gorsel odak. Cizim ustte buyuk, altinda tek satir
   kontrol: YATAY slider + degeri yaninda + kisa hazir tuslar. */
.widget.hero .wsahne{text-align:center}
.widget.hero canvas{width:100%;max-width:520px}
.widget.hero .wrow{justify-content:center;gap:14px;margin-top:12px}
.widget.hero .wsl{flex-direction:row;align-items:center;gap:8px}
.widget.hero .wsl label{font-size:13px}
.widget.hero .wsl input[type=range]{writing-mode:horizontal-tb;direction:ltr;height:auto;width:190px}
.widget.hero .wsl .val{min-width:56px;text-align:left}
.widget.hero .onayar{flex-direction:row;align-self:auto}
.widget.hero .walt{justify-content:center}

/* kod sekmeleri: [SEKME: Blocks] / [SEKME: Java] / [SEKME: Probot SDK] + [SEKME SONU].
   JS yoksa "js" sinifi da yok: tum paneller basligiyla acik kalir (icerik kaybolmaz). */
.sekme{border:1px solid var(--line);border-radius:12px;margin:18px 0;overflow:hidden;background:#fff}
.sekme .sek-tuslar{display:none}
.sekme.js .sek-tuslar{display:flex;gap:2px;background:var(--cream);border-bottom:1px solid var(--line);
  padding:6px 6px 0;flex-wrap:wrap}
.sekme.js .sek-tuslar button{font-family:inherit;font-size:13.5px;font-weight:700;color:var(--muted);
  background:none;border:1px solid transparent;border-bottom:0;border-radius:9px 9px 0 0;
  padding:7px 14px;cursor:pointer}
.sekme.js .sek-tuslar button:hover{color:var(--deep)}
.sekme.js .sek-tuslar button.on{background:#fff;border-color:var(--line);color:var(--deep);
  margin-bottom:-1px;padding-bottom:8px}
.sekme .sek-panel{padding:2px 16px 12px}
.sekme .sek-baslik{font-size:11.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:var(--muted);margin:12px 0 2px}
.sekme.js .sek-baslik{display:none}
.sekme.js .sek-panel{display:none}
.sekme.js .sek-panel.on{display:block}
.sekme .sek-dipnot{font-size:13px;color:var(--muted);font-weight:600;margin:8px 0 2px}
.sekme .sek-panel > pre:first-child{margin-top:12px}

/* Sol menude sayfa basliklari (Tuna 2026-08-26, son bicim): hiyerarsi TARTISMASIZ olmali.
   Sayfa adi = birincil satir (14px, koyu, kalin). Alt basliklar = sayfanin ALTINDA, belirgin
   girintili, kucuk ve soluk; satirlar sik, tiklama alani dar. Yalniz AKTIF sayfa acilir. */
.side .nav-oge{margin:0}
.side .nav-oge > summary{list-style:none;display:flex;align-items:center;gap:2px;cursor:pointer;
  border-radius:8px}
.side .nav-oge > summary::-webkit-details-marker{display:none}
/* ok = acma hedefi (isme basmak sayfaya gider); dokunmatikte tutulabilsin diye genis */
.side .nav-oge > summary::before{content:'';flex:0 0 auto;width:18px;height:24px;margin-left:2px;
  border-radius:6px;background:no-repeat center/6px 6px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath d='M2 0l4 4-4 4z' fill='%23c3b5a8'/%3E%3C/svg%3E");
  transition:transform .18s}
.side .nav-oge[open] > summary::before{transform:rotate(90deg)}
.side .nav-oge > summary > a{flex:1 1 auto}
.side .nav-oge > summary:hover::before{background-color:var(--cream)}
.side .alt{margin:0 0 10px 34px;border-left:1px solid var(--line);padding-left:10px}
.side .alt a{font-size:12px;font-weight:500;color:#9c8f84;padding:1px 6px;line-height:1.35;
  border-radius:6px}
.side .alt a:hover{color:var(--deep);background:var(--cream)}
.side .alt .daha{display:block;font-size:11px;font-weight:600;color:#b9a99b;padding:2px 6px;
  letter-spacing:.03em}

/* blok programi: [BLOK: <dosya>.blk | aciklama] - gercek FTC dosyasi, sayfada interaktif
   Blockly alani + ayni dosyayi indirme. Blockly ~830 KB oldugu icin alan GORUNUR olana
   kadar yuklenmiyor; o ana kadar .blok-bekle satiri duruyor. */
.blok{border:1px solid var(--line);border-radius:12px;margin:18px 0;background:#fff;overflow:hidden}
/* baslik: derleyici kutuyu BOS basiyor (icini blok.js dolduruyor), o yuzden baslik
   DOM'a degil ::before ile geliyor - iki tarafin birbirini ezme ihtimali kalmasin. */
.blok[data-baslik]::before{content:attr(data-baslik);display:block;font-size:12px;font-weight:800;
  letter-spacing:.07em;text-transform:uppercase;color:var(--muted);padding:10px 14px 0}
/* Blockly kesin yukseklik olmadan cizmiyor; display:flex de bozuyor (viewer notu). */
/* Ders icinde kompakt (Tuna 2026-10-03): blok.js yuksekligi bloklara gore 110-240px'e ayarlar,
   uzun programda "Büyüt" ile acilir. Buradaki deger yalniz yuklenmeden onceki yer tutucu. */
.blok .blok-alan{display:block;position:relative;height:180px;margin:8px 0 0;background:#fff}
.blok .blok-bekle{padding:38px 16px;text-align:center;color:var(--muted);font-weight:600;font-size:14px}
.blok .blok-alt{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:10px 14px 12px;
  border-top:1px solid var(--line);background:var(--cream)}
.blok .blok-alt button{font-family:inherit;font-weight:800;font-size:13.5px;color:#fff;
  background:var(--deep);border:0;border-radius:9px;padding:8px 16px;cursor:pointer}
.blok .blok-alt button:hover{background:var(--orange)}
.blok .blok-alt button.blok-buyut{color:var(--deep);background:#fff;border:1px solid var(--line)}
.blok .blok-alt button.blok-buyut:hover{color:#fff;background:var(--orange);border-color:var(--orange)}
.blok .blok-not{font-size:12.5px;color:var(--muted);font-weight:600;line-height:1.45}
.blok .blok-hata{padding:26px 16px;text-align:center;color:#c22;font-weight:600;font-size:14px}

/* video: [VIDEO: <URL> | aciklama] - tikla-yukle kapagi (acilista YouTube'a istek YOK) */
.video{border:1px solid var(--line);border-radius:12px;background:var(--cream);margin:18px 0;
  padding:22px 18px;text-align:center}
.video .oynat{font-family:inherit;font-weight:800;font-size:14.5px;color:#fff;background:var(--deep);
  border:0;border-radius:10px;padding:10px 20px;cursor:pointer;display:inline-flex;align-items:center;gap:8px}
.video .oynat:hover{background:var(--orange)}
.video .oynat .ok{font-size:12px}
.video .vb{display:block;margin-top:10px;font-weight:700;font-size:14.5px;color:var(--ink)}
.video .vn{display:block;margin-top:4px;font-size:12.5px;color:var(--muted);font-weight:600}
.video.acik{padding:0;border:0;background:none;aspect-ratio:16/9}
.video.acik iframe{width:100%;height:100%;border:0;border-radius:12px;display:block}


/* katalog giris dizini (/egitim/katalog/): grup basligi altinda link + tek satir ozet */
.dizin{list-style:none;margin:10px 0 6px;padding:0}
.dizin li{margin:0 0 12px;line-height:1.55}
.dizin li a{font-size:15.5px}
.dizin .tsl{font-style:normal;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  background:var(--cream);border-radius:5px;padding:1px 6px;margin-left:8px;color:var(--muted)}
.dizin .oz{display:block;font-size:14px;color:var(--muted);font-weight:500}
.dizin .kilit .ad{font-weight:700;color:#b9a99b}
.dizin .kilit .oz{display:inline;margin-left:8px;font-size:11px;font-weight:700;
  letter-spacing:.05em;text-transform:uppercase;color:#b9a99b}

.pager{display:flex;justify-content:space-between;gap:12px;margin-top:44px;border-top:1px solid var(--line);padding-top:18px}
.pager a{text-decoration:none;font-weight:700;font-size:14.5px;color:var(--deep);border:1px solid var(--line);
  border-radius:10px;padding:10px 16px;max-width:48%}
.pager a small{display:block;font-size:12px;color:var(--muted);font-weight:600}
.pager a:hover{border-color:var(--deep);text-decoration:none}

.toc{padding:30px 20px 30px 16px;font-size:13px;position:sticky;top:var(--ps-header-h,64px);height:max-content;max-height:calc(100vh - var(--ps-header-h,64px));overflow-y:auto}
.toc .t{font-weight:800;font-size:11.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.toc a{display:block;padding:4px 0 4px 10px;border-left:2px solid var(--line);color:var(--muted);
  text-decoration:none;font-weight:600;line-height:1.45}
.toc a.toc-sub{padding-left:22px;font-size:12px}
body[data-comment-path] main h2,body[data-comment-path] main h3{scroll-margin-top:84px}
.toc a.on{border-color:var(--orange);color:var(--deep)}

/* ============ FTC Eğitimi (Ünite → Bölüm → Konu) ============
   Referans: normal doküman sayfası (Arduino/WPILib çizgisi). Yeni bileşen yok;
   kapak katalog dizinini, kutular admonition kalıbını yeniden kullanır. */

/* kapakta bölüm başlığının üstünde küçük "1. Bölüm" etiketi */
main h2 .bno{display:block;font-size:11.5px;font-weight:800;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);margin-bottom:1px}

/* kazanım cümlesi: konunun ilk paragrafı; gövdeden bir tık öne çıkar, kutu değil */
main .kazanim{font-size:17px;line-height:1.65;font-weight:600;color:var(--ink);margin:0 0 20px}

/* konu numarası (0.1) listede ve sol menüde adın önünde, ikincil */
.dizin .no,.side .no{color:var(--muted);font-weight:700;margin-right:8px;
  font-variant-numeric:tabular-nums}
.side a.on .no{color:inherit}
.side .lock .no{color:#cbbdb1}
/* ünite kapağında ozet HER ZAMAN alt satırda (katalog dizininde kilitli satır
   ozeti rozet gibi duruyordu; burada ozet = konunun hedefi, tam cümle) */
.dizin.unite .kilit .oz{display:block;margin:0;font-size:14px;font-weight:500;
  text-transform:none;letter-spacing:0;color:#8d8177}
.dizin.unite .kilit .ad{font-size:15.5px;color:var(--muted)}
.dizin .rz{font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:#b9a99b;background:var(--cream);border-radius:5px;padding:1px 6px;margin-left:8px}

/* ünite kapağındaki kompakt konu listesi: metnin altında dizin gibi durur */
main h3.bol{font-size:12px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:var(--muted);margin:22px 0 6px}
.dizin.sik li{margin:0 0 4px}
.dizin.sik li a,.dizin.sik .kilit .ad{font-size:15px}

/* Sahadan / İpucu / Dikkat / Tehlike kutuları (konu md'sindeki "> **Sahadan.** ...") */
.kutu{border:1px solid var(--line);border-radius:10px;
  background:var(--cream);padding:12px 16px;margin:18px 0}
.kutu .kutu-t{font-size:11.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:var(--muted);margin:0 0 4px}
.kutu p{font-size:15px;margin:6px 0}
.kutu p:last-child{margin-bottom:0}
.kutu.sahadan{background:#fff8f3;border-color:#f5d9c8}
.kutu.sahadan .kutu-t{color:var(--deep)}
.kutu.ipucu{background:#f2f8f6;border-color:#d6e9e2}
.kutu.ipucu .kutu-t{color:#2f7d68}
.kutu.dikkat{background:#fdf7ec;border-color:#efdfbf}
.kutu.dikkat .kutu-t{color:#8a5f12}
.kutu.tehlike{background:#fdf3f2;border-color:#f2d4d0}
.kutu.tehlike .kutu-t{color:#b11}
/* kazanım kutusu ("Bu derste ne öğreniyoruz"): konu başlığının hemen altında durur.
   Diğer kutulardan ayrışsın diye tek serin ton (çok açık lacivert zemin; sol şerit YOK, Tuna 10-02);
   gradyan/emoji yok, normal doküman sitesi çizgisi. */
.kutu.kazanim{background:#f6f8fc;
  border-color:#dfe5ef;margin:0 0 22px;padding:14px 18px}
.kutu.kazanim .kutu-t{color:#23406b}
.kutu.kazanim p{font-size:15.5px;line-height:1.6}

/* ============ İSKELET / CEPHE katmanları (Tuna 2026-09-05) ============
   Ders dosyası önce madde madde plan (iskelet), sonra düz yazı (cephe) olarak yazılıyor.
   İskelet sayfası: taslak bandının yerine gri-mavi şerit. Cephe + iskelet ikisi de varsa
   (onaydan geçmemiş ders) iskelet sağda yan yana panelde durur. Emoji/gradyan yok. */
.adm.isk{background:#f6f8fc;border-color:#dfe5ef}
.adm.isk .adm-t{color:#23406b}

/* banttaki "İskeleti yan yana göster" düğmesi: bant tipografisinde sade bir kontrol */
button.isk-tog{font:700 13.5px 'Baloo 2',system-ui,sans-serif;color:var(--ink);cursor:pointer;
  background:#fff;border:1px solid var(--line);border-radius:8px;padding:5px 12px}
button.isk-tog:hover{border-color:var(--deep);color:var(--deep)}
button.isk-tog[aria-pressed="true"]{background:#f6f8fc;border-color:#c3cddd;color:#23406b}

/* tek sütun (varsayılan görünüm): panel kapalı */
aside.iskelet{display:none}

/* iki sütun: ana metin solda, iskelet sağda. Sağ TOC gizlenir ve grid izi de kalkar,
   yazı kolonu genişler. Dar ekranda (<1100px) iskelet ana metnin ALTINA düşer. */
html.isk .layout{grid-template-columns:var(--yan) minmax(0,1fr)}
html.isk .toc{display:none}
html.isk main{max-width:1180px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,320px);
  gap:0 32px;align-items:start}
html.isk main>.pager,html.isk main>.yrm{grid-column:1}
html.isk aside.iskelet{display:block;position:sticky;top:76px;max-height:calc(100vh - 96px);
  overflow-y:auto;border:1px solid #dfe5ef;background:#fafbfd;border-radius:10px;
  padding:14px 18px 18px}
aside.iskelet .isk-t{font-size:11.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:#5a6c86;margin:0 0 10px}
aside.iskelet h2.isk-h1{font-size:17px;margin:0 0 10px}
aside.iskelet h2{font-size:14px;margin:18px 0 4px}
aside.iskelet h3{font-size:13.5px;margin:14px 0 4px}
aside.iskelet p,aside.iskelet li{font-size:13.5px;line-height:1.55}
aside.iskelet .kutu{margin:10px 0;padding:9px 12px}
aside.iskelet .kutu p{font-size:13px}
aside.iskelet .kutu.kazanim p{font-size:13.5px}
aside.iskelet ul,aside.iskelet ol{padding-left:20px}
@media(max-width:1100px){
  html.isk main{grid-template-columns:minmax(0,1fr);max-width:820px}
  html.isk aside.iskelet{position:static;max-height:none;margin-top:28px}
}

/* Long inline API names/JSON wrap; preformatted code retains its own scrollbar. */
main :not(pre)>code,main a{overflow-wrap:anywhere}

/* Mobil ders erişimi ve akordeonsuz, içerik ağacından üretilen dizin. */
.mobile-lessons{display:none}
@media(max-width:720px){.mobile-lessons{display:flex;align-items:center;justify-content:space-between;min-height:44px;margin-bottom:24px;padding:8px 14px;border:1px solid var(--line);border-radius:8px;color:var(--deep);text-decoration:none;background:var(--cream)}}
.lesson-directory{max-width:860px;margin:0 auto;padding:28px 20px 64px}
.lesson-directory ul{list-style:none;margin:0;padding:0}
.lesson-directory nav>ul>li{padding:16px 0;border-bottom:1px solid var(--line)}
.lesson-directory li ul{padding-left:16px;border-left:2px solid var(--line)}
.lesson-directory li li{margin:4px 0}
.lesson-directory h2,.lesson-directory h3{margin:12px 0 4px}
.lesson-directory h2{font-size:1.4rem}.lesson-directory h3{font-size:1.1rem}
.lesson-directory li a,.lesson-directory li>span{display:block;padding:10px 8px;min-height:44px;overflow-wrap:anywhere}
.lesson-directory a{color:var(--deep);text-underline-offset:3px}
.lesson-directory a:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
.lesson-directory small{font-size:.8rem;font-weight:500;color:var(--muted)}

/* ============ Ders bitişi: "Dersi bitirdik" (2026-09-28) ============
   Dersin sonunda, pager'ın üstünde tek kart. Kutu/adm ailesiyle aynı çizgi: krem zemin, ince
   çerçeve, turuncu vurgu; yeni renk yok. Giriş yapmamışa tek link, giriş yapmışa açılır panel
   (bitis.js). Dokunma hedefleri 44px, odak halkası turuncu. */
.bitis{margin:44px 0 0;border:1px solid var(--line);border-radius:14px;background:#fffdfb;padding:18px 20px 20px}
.bitis [hidden]{display:none!important}
.bitis h2{margin:0 0 4px;font-size:20px}
.bitis .bitis-alt{font-size:14px;color:var(--muted);font-weight:500;line-height:1.55;margin:0 0 14px}
.bitis .bitis-durum{font-size:16px;font-weight:700;color:#1d7a4f;margin:0 0 10px}
.bitis .bitis-durum:empty{display:none}
/* Three states set by bitis.js via data-tip, icon + text together (never color alone):
   kaydedildi (✓, default green above), taslak (◐, unsaved local draft) and hata (!, save failed). */
.bitis .bitis-durum[data-tip="taslak"]{color:var(--deep)}
.bitis .bitis-durum[data-tip="hata"]{color:#c22}
.bitis a.btn.bitis-giris{margin:0;min-height:44px;display:inline-flex;align-items:center;background:#fff}
.bitis .bitis-ac,.bitis .bitis-kaydet{font:800 14.5px 'Baloo 2',system-ui,sans-serif;color:#fff;background:var(--deep);
  border:1px solid var(--deep);border-radius:10px;padding:10px 20px;min-height:44px;cursor:pointer}
.bitis .bitis-ac:hover,.bitis .bitis-kaydet:hover{background:var(--orange);border-color:var(--orange)}
.bitis .bitis-ac[aria-expanded="true"]{background:#fff;color:var(--deep)}
.bitis .bitis-kaydet[disabled]{opacity:.6;cursor:progress}
.bitis form{margin-top:16px;border-top:1px solid var(--line);padding-top:16px}
.bitis fieldset{border:0;margin:0 0 16px;padding:0;min-width:0}
.bitis legend,.bitis .bitis-etiket{display:block;font-size:11.5px;font-weight:800;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);margin:0 0 8px;padding:0}
.bitis legend small,.bitis .bitis-etiket small{font-size:inherit;font-weight:600;letter-spacing:0;text-transform:none}
.bitis .bitis-not{font-size:14px;color:var(--muted);font-weight:500;margin:0 0 14px}
.bitis .bitis-madde{display:flex;gap:12px;align-items:flex-start;margin:0 -8px;padding:8px;border-radius:8px;
  min-height:44px;box-sizing:border-box;cursor:pointer;font-size:15px;line-height:1.55;color:#4a3f36;font-weight:500}
.bitis .bitis-madde:hover{background:var(--cream)}
.bitis .bitis-madde:focus-within{outline:2px solid var(--orange);outline-offset:-2px}
.bitis .bitis-madde input{flex:0 0 auto;width:22px;height:22px;margin:1px 0 0;accent-color:var(--orange);cursor:pointer}
.bitis .bitis-alan{margin:0 0 14px}
.bitis textarea{width:100%;min-height:84px;resize:vertical;border:1px solid var(--line);border-radius:8px;padding:9px 12px;
  font-family:'Baloo 2',system-ui,sans-serif;font-size:14.5px;color:var(--ink);background:#fff}
/* File picker: the native control (English "Choose File" in most browsers) is visually hidden
   but stays focusable; the label next to it is the visible button, the span shows the file name. */
.bitis .bitis-dosya{position:relative;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.bitis .bitis-dosya-girdi{position:absolute;left:0;top:0;width:1px;height:1px;opacity:0;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;padding:0;margin:0}
.bitis .bitis-dosya-sec{display:inline-flex;align-items:center;min-height:44px;box-sizing:border-box;padding:8px 16px;
  font:700 14.5px 'Baloo 2',system-ui,sans-serif;color:var(--deep);background:#fff;border:1px solid var(--line);
  border-radius:10px;cursor:pointer}
.bitis .bitis-dosya-sec:hover{border-color:var(--deep)}
.bitis .bitis-dosya-girdi:focus-visible+.bitis-dosya-sec{outline:2px solid var(--orange);outline-offset:2px}
.bitis .bitis-dosya-ad{font-size:14px;font-weight:600;color:var(--muted);min-width:0;overflow-wrap:anywhere}
.bitis .bitis-sayac{display:block;font-size:12.5px;color:var(--muted);font-weight:600;margin-top:4px}
.bitis .bitis-foto-var{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:13.5px;font-weight:700;
  color:#1d7a4f;margin:8px 0 0}
.bitis .bitis-foto-sil{font:700 13px 'Baloo 2',system-ui,sans-serif;color:var(--deep);background:#fff;
  border:1px solid var(--line);border-radius:8px;padding:6px 12px;min-height:44px;cursor:pointer}
.bitis .bitis-foto-sil:hover{border-color:var(--deep)}
.bitis .bitis-onizleme{display:block;max-width:240px;max-height:180px;margin-top:8px}
.bitis .bitis-kaydet-not{font-size:14px;color:var(--muted);font-weight:600;margin:4px 0 8px}
.bitis .bitis-satir{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
/* "Kapat": a quiet text button, so Kaydet is the only prominent action in the open panel. */
.bitis .bitis-kapat{font:700 15px 'Baloo 2',system-ui,sans-serif;color:var(--deep);background:none;border:0;
  padding:8px 10px;min-height:44px;min-width:44px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.bitis .bitis-kapat:hover{color:var(--orange)}
/* Inside the open panel the status line sits right under the Kaydet row (bitis.js moves it). */
.bitis form .bitis-durum{margin:10px 0 0}
.bitis .bitis-durum[data-tip="kaydediliyor"]{color:var(--muted)}
.bitis .bitis-hata{color:#c22;font-weight:700;font-size:16px;line-height:1.5;margin:10px 0 0}
/* Retry button inside the offline error message (contrast verified: #fff on var(--deep) ~4.8:1, AA). */
.bitis .bitis-tekrar{display:inline-block;margin-top:8px;font:700 16px 'Baloo 2',system-ui,sans-serif;
  color:#fff;background:var(--deep);border:1px solid var(--deep);border-radius:8px;padding:8px 16px;
  min-height:44px;min-width:44px;cursor:pointer;vertical-align:middle}
.bitis .bitis-tekrar:hover{background:var(--orange);border-color:var(--orange)}
.bitis textarea:focus-visible,.bitis input:focus-visible,.bitis button:focus-visible,.bitis a:focus-visible{
  outline:2px solid var(--orange);outline-offset:2px}
@media(max-width:480px){.bitis{padding:16px 14px 18px;border-radius:12px}
  .bitis .bitis-ac,.bitis .bitis-kaydet,.bitis a.btn.bitis-giris,.bitis .bitis-tekrar{width:100%;justify-content:center;text-align:center}
  .bitis .bitis-satir{gap:4px}
  .bitis .bitis-kapat{margin:0 auto}}
/* While the completion panel is open (body.bitis-acik, set by bitis.js) the floating WhatsApp
   and assistant buttons from /brand/header.js and /brand/asistan.js would cover the full-width
   Kaydet button on phones, so they step aside until the panel is closed. */
@media(max-width:699px){body.bitis-acik .probot-whatsapp,body.bitis-acik .shb-ac{display:none!important}}

/* ============ Öğretmen katmanı (2026-09-28) ============
   "## Öğretmen için" herkese açık sayfada yok; yerinde kapalı bir yer tutucu durur (öğrenci
   görünümü). Onaylı öğretmende ogretmen.js parçayı getirir, kutu kazanım kutusunun serin tonuyla
   (lacivert şerit) açık bölüm olur. */
details.ogretmen{border:1px dashed #c3cddd;border-radius:10px;background:#f6f8fc;margin:28px 0;padding:0}
details.ogretmen>summary{list-style:none;cursor:pointer;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;
  padding:12px 16px;min-height:44px;font-weight:800;color:#23406b;font-size:15px;border-radius:10px}
details.ogretmen>summary::-webkit-details-marker{display:none}
details.ogretmen>summary::before{content:'';flex:0 0 auto;width:7px;height:7px;border-right:2px solid #5a6c86;
  border-bottom:2px solid #5a6c86;transform:rotate(-45deg);margin:0 4px 2px 0;transition:transform .2s;align-self:center}
details.ogretmen[open]>summary::before{transform:rotate(45deg)}
details.ogretmen>summary:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
details.ogretmen .ogr-alt{font-size:13px;font-weight:600;color:#5a6c86}
details.ogretmen .ogr-govde{padding:0 16px 14px}
details.ogretmen .ogr-govde p{font-size:14px;margin:0 0 10px;color:#4a3f36}
details.ogretmen .ogr-govde p:last-child{margin-bottom:0}
details.ogretmen .ogr-govde a.btn{margin:0;background:#fff}
section.ogretmen{border:1px solid #dfe5ef;border-radius:10px;background:#f6f8fc;
  padding:6px 18px 12px;margin:28px 0}
section.ogretmen h2{margin-top:12px;color:#23406b}
section.ogretmen ul{padding-left:20px}
section.ogretmen li{font-size:15px}
