@tailwind base;
@tailwind components;
@tailwind utilities;

/*
 * Zorunlu alan hata gosterimi — formlarda inputtan hemen sonra
 * <p class="text-rose-600"> kardesi olan input/select/textarea ogeleri
 * otomatik kirmizi border alir. Her modalde tek tek border conditional
 * yazmaya gerek kalmaz. (errors.X && <p>...) pattern'i tum modallerde
 * zaten mevcut oldugundan bu kural genellestirilebilir.
 */
.zorunlu-alan-hata,
input[aria-invalid="true"],
select[aria-invalid="true"],
textarea[aria-invalid="true"] {
    border-color: rgb(244 63 94) !important; /* rose-400 */
}
.zorunlu-alan-hata:focus,
input[aria-invalid="true"]:focus,
select[aria-invalid="true"]:focus,
textarea[aria-invalid="true"]:focus {
    --tw-ring-color: rgb(254 205 211) !important; /* rose-200 */
}

/* Modern tarayicilarda :has() destegi ile otomatik hata border'i */
@supports selector(:has(*)) {
    /* Hata mesajli <p> tagi bulunan kontainerin icindeki input/select/textarea kirmizi border */
    div:has(> p.text-rose-600) > input,
    div:has(> p.text-rose-600) > select,
    div:has(> p.text-rose-600) > textarea {
        border-color: rgb(244 63 94) !important;
    }
}

/*
 * Liste tablolarında hücreler tek satırda kalır — başlık ile veri arasında
 * hizalanma kaymasını önler, satır kırılması yapmaz. Tablo container'ı
 * (`overflow-x-auto`) yatay scroll ile uzun içerikleri taşır.
 * Sadece `liste-tablosu` class'ı verilen tablolarda etkindir; modal/dropdown
 * içindeki tablolar bu kuraldan etkilenmez.
 */
table.liste-tablosu th,
table.liste-tablosu td {
    white-space: nowrap !important;
}
/* Td içindeki flex container'lar — `flex-wrap` class'ı varsa içerik alt satıra
 * geçiyordu; tabloda hücrenin tek satırda kalmasını zorla. Checkbox / action
 * butonu kolonları zaten satıra zorlanmaya direnmediği için etkilenmez. */
table.liste-tablosu td .flex-wrap,
table.liste-tablosu td .flex,
table.liste-tablosu td .inline-flex {
    flex-wrap: nowrap !important;
}
/* Opt-out — bir hücrede satır kırılması ISTERSEN th/td'ye liste-tablosu-wrap ekle */
table.liste-tablosu td.liste-tablosu-wrap,
table.liste-tablosu th.liste-tablosu-wrap {
    white-space: normal !important;
}
table.liste-tablosu td.liste-tablosu-wrap .flex-wrap {
    flex-wrap: wrap !important;
}

/*
 * Scrollbar'ı görsel olarak gizle — scroll fonksiyonu çalışmaya devam eder.
 * Tüm uygulama geneline uygulanır (tablo scroll, sidebar, modal, içerik).
 * Mouse wheel, klavye ve trackpad ile scroll yine çalışır.
 */
* {
    scrollbar-width: none;          /* Firefox */
    -ms-overflow-style: none;       /* IE 10+ / eski Edge */
}
*::-webkit-scrollbar {
    display: none;                  /* Chromium / Safari */
    width: 0;
    height: 0;
}

/* Belirli bir yerde scrollbar'ı tekrar göstermek istersek `.show-scrollbar` ekle */
.show-scrollbar {
    scrollbar-width: auto;
    -ms-overflow-style: auto;
}
.show-scrollbar::-webkit-scrollbar {
    display: initial;
    width: 8px;
    height: 8px;
}

/*
 * @dnd-kit ile sürüklenebilir elementlerde (iOS Safari basılı-tut menüsünü engelle):
 * - Metin seçimi (user-select) kapat
 * - Callout menüsü (kopyala/yapıştır/çevir) kapat
 * - Tarayıcı default touch davranışı (pan/zoom) yerine bizim drag
 * - Tıklama parlaması gizle
 *
 * @dnd-kit useDraggable() elementlere `aria-roledescription="draggable"` ekler;
 * bu selector hem masaüstü hem mobilde tüm sürüklenebilir kartları yakalar.
 */
[aria-roledescription="draggable"],
[aria-roledescription="sortable"] {
    -webkit-user-select: none !important;
    -moz-user-select: none !important;
    -ms-user-select: none !important;
    user-select: none !important;
    -webkit-touch-callout: none !important;
    -webkit-tap-highlight-color: transparent !important;
    touch-action: none !important;
}
/* Drag esnasında body üzerindeki metin seçimini de engelle */
body.dnd-aktif,
body.dnd-aktif * {
    -webkit-user-select: none !important;
    user-select: none !important;
    -webkit-touch-callout: none !important;
}

/* ====================================================================
 * RAPOR YAZDIRMA (Ctrl+P / "Yazdır" butonu → tarayıcıdan PDF)
 *
 * Rapor gövdesi `.rapor-yazdir` ile işaretlenir. Yazdırırken sadece o
 * bölüm basılır: sidebar, üst bar, filtre çekmecesi, sayfalama ve
 * aksiyon butonları çıkmaz. Grafikler SVG olduğu için sorunsuz basılır.
 * ==================================================================== */
@media print {
    @page {
        size: A4;
        margin: 12mm 10mm;
    }

    html, body {
        background: #fff !important;
        height: auto !important;
        overflow: visible !important;
    }

    /* Yazdırma dışı bırakılan her şey */
    .yazdirma-gizle,
    aside,
    header,
    nav,
    [role="dialog"],
    [data-yazdirma="gizle"] {
        display: none !important;
    }

    /* Rapor gövdesi sayfayı kaplasın — layout'un scroll kutularını çöz */
    .rapor-yazdir,
    .rapor-yazdir * {
        overflow: visible !important;
        max-height: none !important;
    }
    .rapor-yazdir {
        position: static !important;
        margin: 0 !important;
        padding: 0 !important;
        width: 100% !important;
    }

    /* Kart/panel gölgeleri baskıda kirli görünür; ince çizgi yeterli */
    .rapor-yazdir .shadow-sm,
    .rapor-yazdir .shadow,
    .rapor-yazdir .shadow-lg {
        box-shadow: none !important;
    }
    .rapor-yazdir .rounded-xl,
    .rapor-yazdir .rounded-lg {
        border-color: #cbd5e1 !important;
    }

    /* Kart ve grafik kutuları sayfa ortasından bölünmesin */
    .rapor-yazdir .yazdirma-butun {
        break-inside: avoid;
        page-break-inside: avoid;
    }

    /* Tablo başlıkları her sayfada tekrarlansın */
    .rapor-yazdir thead { display: table-header-group; }
    .rapor-yazdir tfoot { display: table-footer-group; }
    .rapor-yazdir tr    { break-inside: avoid; page-break-inside: avoid; }

    /* Yazdırmada tablo tek satıra sıkışmasın — okunabilirlik önce gelir */
    .rapor-yazdir table.liste-tablosu th,
    .rapor-yazdir table.liste-tablosu td {
        white-space: normal !important;
        font-size: 10px !important;
        padding: 4px 6px !important;
    }
    .rapor-yazdir table { width: 100% !important; min-width: 0 !important; }

    /* Renkli rozet/çubuklar baskıda kaybolmasın */
    * {
        -webkit-print-color-adjust: exact !important;
        print-color-adjust: exact !important;
    }

    /* Yalnızca yazdırırken görünen başlık bloğu (rapor adı + tarih aralığı) */
    .yalniz-yazdir { display: block !important; }
}

/* Ekranda gizli, yalnızca yazdırmada görünen bloklar */
.yalniz-yazdir { display: none; }
