• Fotobatohy
  • Need Help?
    +420 228 811 811
    Mo-Fri: 9AM – 5PM CET
  • My account
  • is empty
    for 0 Kč

ThinkTank BackLight Backpack 18L (černá)

ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
  • ThinkTank BackLight Backpack 18L (černá)
Řada batohů Mindshift Backlight je určena pro aktivní nejen turisty s vášní pro fotografování přírody a krajiny.
product ID
1003367
Manufacturer
ThinkTank
Warranty
2 years
  • Selected variant
  • černá
4 123,97 Kč excl. VAT
4 990 KčPrice incl. VAT
unavailable
Řada batohů Mindshift Backlight je určena pro aktivní nejen turisty s vášní pro fotografování přírody a krajiny.

Flexibilní fotobatoh

Fotobatohy Backlight mají otevírání hlavní komory přes záda. Jeho konstrukce umožňuje přístup k fotografickému vybavení bez nutnosti sundavat batoh. Výměna objektivů je možná například tak, že se batoh umístí na hruď a současně se zapne bederní pás. Přístup k vybavení zezadu také zvyšuje bezpečnost na cestách.

Vlastnosti

  • vejdou se do něj 2 zrcadlovky s 1-3 objektivy
  • na ostatní věci máte ještě 5 litrů
  • maximální velikost objektivu: 300 mm f2,8 nebo 150-300 mm f5-6,3 připojený k tělu.
 Specification
ZnačkaThink Tank
Hmotnost1,6 kg
Barvačerná
Rozměry (švh)27 x 47 x 18 cm
Vnitřní rozměry24 x 42,5 x 14
Objem18 litrů
Materiálspodní strana tkaniny je opatřena polyuretanovou vrstvou, YKK zipy, 420D velocity nylon, 320G UltraStretch mesh, 350G airmesh, nylonové popruhy, 3vrstvé lepené nylonové vlákno, odšívka z nylonu 210D, výztuha z PE desek
Typ zapínánízip
Místo pro notebook13 ''
Počet těl2 ks
Počet objektivů3+ ks
Vlastnostimísto na stativ
kapsa na láhev
voděodolnost
pláštěnka součást balení
Přístup k technicezadní přístup
Způsob přenášenídva ramenní
hrudní
bederní
Určenídámské
pánské
Vnitřní uspořádáníNastavitelné
Specializovánouniverzální
 Pro lepší péči
     
    We use cookies for the proper functioning of our website and its functions. With the help of cookies, we also, for example, remember your preferred language, increase the relevance of the displayed ads for you, calculate the number of visits to the site and remember your settings made on the site.
    (function () { "use strict"; const CUT_OFF_HOUR = 7; // po 7:00 = start další prac. den /* ========================================================= MANUÁLNÍ DNY MIMO PROVOZ (dovolená, inventura, ...) Formát: "dd.mm" (bez roku) ========================================================= */ const EXTRA_BLOCKED_DATES_DDMM = [ // "03.02", // "04.02", // "15.08", ]; /* ========================================================= */ const ADDITION_SELECTOR = ".p_detail_info_box.p_detail_info_addition"; const AVAIL_SELECTOR = ".p_detail_availability"; const AVAIL_SPAN_SELECTOR = '.p_detail_availability span[data-variant="availability"]'; function pad2(n) { return String(n).padStart(2, "0"); } function formatDDMM(dateLocal) { return `${pad2(dateLocal.getDate())}.${pad2(dateLocal.getMonth() + 1)}.`; } // "Teď" v Europe/Prague (nezávisle na TZ uživatele) function nowInPragueParts() { const dtf = new Intl.DateTimeFormat("cs-CZ", { timeZone: "Europe/Prague", year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false }); const parts = dtf.formatToParts(new Date()); const get = (type) => parts.find(p => p.type === type)?.value; return { year: Number(get("year")), month: Number(get("month")), day: Number(get("day")), hour: Number(get("hour")), minute: Number(get("minute")), second: Number(get("second")) }; } // UTC midnight helper (aby nepřekvapilo DST) function makeDateUTC(y, m, d) { return new Date(Date.UTC(y, m - 1, d, 0, 0, 0)); } function dateToKeyUTC(d) { return `${d.getUTCFullYear()}-${pad2(d.getUTCMonth() + 1)}-${pad2(d.getUTCDate())}`; } // Easter Sunday (Gregorian) function easterSunday(year) { const a = year % 19; const b = Math.floor(year / 100); const c = year % 100; const d = Math.floor(b / 4); const e = b % 4; const f = Math.floor((b + 8) / 25); const g = Math.floor((b - f + 1) / 3); const h = (19 * a + b - d - g + 15) % 30; const i = Math.floor(c / 4); const k = c % 4; const l = (32 + 2 * e + 2 * i - h - k) % 7; const m = Math.floor((a + 11 * h + 22 * l) / 451); const month = Math.floor((h + l - 7 * m + 114) / 31); const day = ((h + l - 7 * m + 114) % 31) + 1; return makeDateUTC(year, month, day); } function addExtraBlockedDatesToSet(holidaysSet, year, todayUTC) { EXTRA_BLOCKED_DATES_DDMM.forEach((ddmm) => { const m = ddmm.match(/^(\d{2})\.(\d{2})$/); if (!m) return; const dd = Number(m[1]); const mm = Number(m[2]); if (!Number.isFinite(dd) || !Number.isFinite(mm) || mm < 1 || mm > 12 || dd < 1 || dd > 31) return; const dThisYear = makeDateUTC(year, mm, dd); holidaysSet.add(dateToKeyUTC(dThisYear)); // pokud už datum letos proběhlo, přidáme i příští rok (praktické při údržbě) if (dThisYear.getTime() < todayUTC.getTime()) { const dNextYear = makeDateUTC(year + 1, mm, dd); holidaysSet.add(dateToKeyUTC(dNextYear)); } }); } function buildCZHolidaysSet(years, todayUTC) { const set = new Set(); years.forEach((y) => { // Fixní svátky CZ const fixed = [ [1, 1], [5, 1], [5, 8], [7, 5], [7, 6], [9, 28], [10, 28], [11, 17], [12, 24], [12, 25], [12, 26] ]; fixed.forEach(([mm, dd]) => set.add(dateToKeyUTC(makeDateUTC(y, mm, dd)))); // Velký pátek (-2) a Velikonoční pondělí (+1) const easter = easterSunday(y); const goodFriday = new Date(easter.getTime() - 2 * 24 * 3600 * 1000); const easterMonday = new Date(easter.getTime() + 1 * 24 * 3600 * 1000); set.add(dateToKeyUTC(goodFriday)); set.add(dateToKeyUTC(easterMonday)); // + ručně blokované dny addExtraBlockedDatesToSet(set, y, todayUTC); }); return set; } function isWeekendUTC(d) { const wd = d.getUTCDay(); return wd === 0 || wd === 6; } function isHolidayUTC(d, holidaysSet) { return holidaysSet.has(dateToKeyUTC(d)); } function isBusinessDayUTC(d, holidaysSet) { return !isWeekendUTC(d) && !isHolidayUTC(d, holidaysSet); } function nextBusinessDayUTC(d, holidaysSet) { let cur = new Date(d.getTime()); do { cur = new Date(cur.getTime() + 24 * 3600 * 1000); } while (!isBusinessDayUTC(cur, holidaysSet)); return cur; } function computeShipBaseUTC(holidaysSet) { const p = nowInPragueParts(); const todayUTC = makeDateUTC(p.year, p.month, p.day); const beforeCutoff = (p.hour < CUT_OFF_HOUR); // 0..6 if (beforeCutoff && isBusinessDayUTC(todayUTC, holidaysSet)) return todayUTC; // po cut-off nebo nepracovní den => nejbližší další pracovní den if (isBusinessDayUTC(todayUTC, holidaysSet)) return nextBusinessDayUTC(todayUTC, holidaysSet); let cur = new Date(todayUTC.getTime()); while (!isBusinessDayUTC(cur, holidaysSet)) { cur = new Date(cur.getTime() + 24 * 3600 * 1000); } return cur; } // "+N" pracovních dnů přesně function addBusinessDaysUTC(startUTC, n, holidaysSet) { let cur = new Date(startUTC.getTime()); let added = 0; while (added < n) { cur = new Date(cur.getTime() + 24 * 3600 * 1000); if (isBusinessDayUTC(cur, holidaysSet)) added++; } return cur; } function normalizeText(s) { return (s || "") .replace(/\u00A0/g, " ") .replace(/[–—]/g, "-") .replace(/\s+/g, " ") .trim(); } function parseAddition(text) { // "8 ks – doručení do 5 pracovních dnů" const t = normalizeText(text); const stockMatch = t.match(/(\d+)\s*ks/i); const daysMatch = t.match(/doru[cč]en[ií]\s*do\s*(\d+)\s*prac/i); if (!stockMatch || !daysMatch) return null; const stock = Number(stockMatch[1]); const leadDays = Number(daysMatch[1]); if (!Number.isFinite(stock) || !Number.isFinite(leadDays)) return null; return { stock, leadDays }; } function getAvailabilityMode() { const avail = document.querySelector(AVAIL_SELECTOR); if (!avail) return { mode: "unknown" }; const schemaLink = avail.querySelector('link[itemprop="availability"]'); const schemaHref = schemaLink?.getAttribute("href") || ""; const span = avail.querySelector(AVAIL_SPAN_SELECTOR); const label = normalizeText(span?.textContent || ""); if (/OutOfStock/i.test(schemaHref) || /Dostupnost k ověření/i.test(label)) { return { mode: "verify", avail, span, label }; } if (/^Skladem/i.test(label)) { return { mode: "local", avail, span, label }; } if (/^Centrální sklad/i.test(label)) { return { mode: "central", avail, span, label }; } return { mode: "unknown", avail, span, label }; } function removeExistingEstimate() { document.querySelectorAll(".delivery-estimate").forEach(el => el.remove()); } function insertEstimateUnderSpan(spanEl, dateDDMM) { removeExistingEstimate(); if (!spanEl || !spanEl.parentNode) return; const line = document.createElement("span"); line.className = "delivery-estimate"; line.textContent = `Obdržíte do ${dateDDMM}`; spanEl.insertAdjacentElement("afterend", line); } function applyDeliveryLogic() { const addition = document.querySelector(ADDITION_SELECTOR); if (addition) addition.classList.add("delivery-hide"); const { mode, span } = getAvailabilityMode(); // verify/unknown => jen schovat addition a nic nepřidávat if (mode === "verify" || mode === "unknown") { removeExistingEstimate(); return; } const p = nowInPragueParts(); const todayUTC = makeDateUTC(p.year, p.month, p.day); const holidays = buildCZHolidaysSet([p.year, p.year + 1], todayUTC); // lokální sklad => +1 prac. den if (mode === "local") { const shipBase = computeShipBaseUTC(holidays); const deliveryUTC = addBusinessDaysUTC(shipBase, 1, holidays); insertEstimateUnderSpan(span, formatDDMM(new Date(deliveryUTC.getTime()))); return; } // centrální sklad => vyčíst z addition if (mode === "central") { const parsed = addition ? parseAddition(addition.textContent) : null; // parsing selže nebo stock=0 => nic nepřidávat if (!parsed || parsed.stock <= 0) { removeExistingEstimate(); return; } const shipBase = computeShipBaseUTC(holidays); const deliveryUTC = addBusinessDaysUTC(shipBase, parsed.leadDays, holidays); if (span) span.textContent = `Centrální sklad ${parsed.stock} ks`; insertEstimateUnderSpan(span, formatDDMM(new Date(deliveryUTC.getTime()))); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", applyDeliveryLogic); } else { applyDeliveryLogic(); } })();