• Fotobatohy
  • Rádi vám poradíme
    +420 720 762 432
    Po - Pá: 9:00 - 18:00
  • Můj účet
  • Košík je prázdný
    za 0 Kč

Připraven na jakékoli dobrodružství

VSGO Pocket Ranger Elite 35L Outdoor Camera Backpack Black je ultralehký batoh pro outdoorovou fotografii. Díky vlastnímu dynamickému systému popruhů, skládacímu modulárnímu vnitřku a kapsám „Four Way Quick Access“ tento batoh minimalizuje namáhání a maximalizuje pohodlí, takže fotografové a kreativní lidé mohou bez námahy vzít své vybavení s sebou na jakékoli dobrodružství.

Vlastnosti

  • Symbio popruhy - nabízí ergonomickou oporu a optimální cirkulaci vzduchu
  • Four Way Quick Access
  • Skryté kapsy
  • Popruhy na stativ a vybavení
  • Objem 35-42L

Rozměry batohu: 30 x 19 x 60 cm
Objem: 35 l a 7 l rozšiřitelný
Hmotnost: 1,38 kg
420D nylon + Cordura® vyztužené dno
Vodotěsné zipy YKK® a lehké přezky ITW®
Vodoodpudivá povrchová úprava (odolná proti dešti)
2letá záruka,

Součástí balení

  • 1 x VSGO Pocket Ranger Elite 35L Outdoor Camera Backpack Black
  • 1 x Odnímatelný bederní pás 
  • 1 x Pláštěnka
 Specifikace
ZnačkaVSGO
Hmotnost1,3 kg
Barvačerná
Rozměry (švh)30 x 60 x 19 cm
Objem35 litrů
Materiál420D nylon + Cordura
Typ zapínánízip
přezka
Místo pro notebook0 ''
Počet tělnespecifikováno ks
Počet objektivůnespecifikováno ks
Vlastnostimísto na stativ
kapsa na láhev
vodotěstnost
pláštěnka součástí balení
Přístup k technicepřední přístup
zadní přístup
přístup z vrchu
Způsob přenášenídva ramenní
hrudní
bederní
Určenídámské
pánské
Vnitřní uspořádánípevné
Specializovánouniverzální
 Pro lepší péči
     
    Používáme cookies. Díky nim vám náš eshop funguje tak, jak má. Pomůžou vám zapamatovat nastavení jazyku, měny nebo adresy. Také vám díky nim doporučíme produkty, které jsou přesně pro vás. Více najdete v našich zásadách pro cookies.
    (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) - př.: "03.02", "24.12" - můžeš přidat kolik chceš řádků ========================================================= */ 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)}.`; } 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")) }; } 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) { // Přidá dd.mm do setu pro daný rok. // Pokud je datum v tomto roce už "za námi" (oproti dnešku), přidá i do dalšího roku (aby to fungovalo přes přelom). 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ž tohle datum letos proběhlo, přidáme i příští rok (praktické pro údržbu) 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) => { 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)))); 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 (dovolená, inventura, ...) 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; 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; } 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) { 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); } ledge)??) function applyDeliveryLogic() { const addition = document.querySelector(ADDITION_SELECTOR); if (addition) addition.classList.add("delivery-hide"); const { mode, span } = getAvailabilityMode(); 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); if (mode === "local") { const shipBase = computeShipBaseUTC(holidays); const deliveryUTC = addBusinessDaysUTC(shipBase, 1, holidays); insertEstimateUnderSpan(span, formatDDMM(new Date(deliveryUTC.getTime()))); return; } if (mode === "central") { const parsed = addition ? parseAddition(addition.textContent) : null; 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()))); return; } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", applyDeliveryLogic); } else { applyDeliveryLogic(); } })();