{% comment %}Etiket tabakası (E1: sırt etiketi, barkod etiketi; yöntem B'nin boş barkod etiketi) — apps/kutuphane/labels/render.py doldurur. WeasyPrint kuralları (CLAUDE.md §3): bütün ölçüler mm ve MUTLAK konumdur; tablo ve akış düzeni yoktur (hücre yüksekliği satırı kısaltmaz, uzatır). Her kutunun konumu ve metni Python'da hesaplanır ve sığdırılır; burada yalnız basılır. `text-transform` YOK (WeasyPrint i→I basar). Çekirdek aralığı ve bitişik harfler kapalıdır: metin genişliği labels/metrics.py'nin ölçtüğüyle birebir aynı kalır. Stil gövdede değil başlıktadır ve CSS değişkeni kullanılmaz (WeasyPrint inline stilde değişkeni yok sayar). Her tabaka bir sayfadır; ikinci ve sonraki tabakalar yeni sayfadan başlar (sonda boş sayfa kalmasın diye "önce kır" kuralı). Hücre ve tabaka `overflow: hidden`dır: kalibrasyon kayması bir hücreyi sayfa kenarına iterse taşan kısım yeni sayfa açmaz.{% endcomment %} {% for sheet in sheets %}
{% for cell in sheet.cells %}
{% for g in cell.graphics %}
{{ g.svg|safe }}
{% endfor %}{% for t in cell.texts %}
{{ t.text }}
{% endfor %}
{% endfor %}
{% endfor %}