تحقق من الملصق والظروف الفعلية. التوقعات لا تثبت مقاومة الليغينغ للماء أو قدرته الحرارية.
استكشف الطقس بتفصيل
اطلع على التوقعات الساعية، قائمة ملابس عملية، وتنبيهات رسمية من الولايات المتحدة. نحمل فقط ما تطلبه.
📈 الساعات والأيام السبعة القادمة
درجة الحرارة، الرطوبة، الأمطار، الأشعة فوق البنفسجية مع سماء صافية والرياح.
🎒 قائمة الاستعداد للخروج حسب الطقس
جهز قائمة باستخدام التوقعات المحفوظة، دون شراء أو مكالمات إضافية.
⚠️ تنبيهات رسمية من الولايات المتحدة
إشعارات سارية من خدمة الطقس الوطنية الأمريكية للمناطق الأمريكية.
المصادر: MET Norway، PlaceDB (CC0) وNWS. القائمة تستخدم التوقعات المخزنة، وليس اختبارات الملابس.
كيف يتم إعداد النصيحة
نُدمج التوقعات مع اختياراتك، دون اختلاق خصائص للملابس.
التنبؤ الحقيقي
درجة الحرارة، الشعور الحراري المتاح، الرياح والهطول من MET Norway.
لباسك الضيق
تشير إلى ما إذا كانت خفيفة، عادية أو حرارية. هذا ليس اختبارًا مخبريًا.
نشاطك
رحلة في المدينة ومشي طويل يتطلبان طبقات مختلفة.
ماذا ترتدي مع اللباس الضيق عندما يكون الجو باردًا أو ممطرًا أو عاصفًا
تحقق أولاً من التنبؤ الحقيقي. عدّل الطبقات حسب درجة الحرارة، المطر، الرياح والطقس الخارجي. نسبة الألياف لا تعبر عن مدى الدفء.
❄️
تشكيلات لباس ضيق للبرد
في رحلة قصيرة يمكن أن تنفع الملابس الضيقة العادية، سترة ومعطف. قرب الصفر درجة أو أثناء المشي الطويل، فكر في عزل حقيقي وطبقة خارجية. ارتدِ أحذية مغلقة ذات قبضة جيدة.
🌧️
ماذا ترتدي مع اللباس الضيق إذا كان الجو ممطرًا
معظم الملابس الضيقة ليست مقاومة للماء. أضف طبقة خارجية مقاومة للماء، أحذية مغلقة بنعل جيد وملابس يمكنك خلعها تحت السقف.
🌬️
أيام الرياح أو الطقس المعتدل
مع الرياح قد تكون السترة المقاومة للرياح أهم من نوع الألياف. مع الطقس المعتدل، ارتدِ قميصًا مريحًا وطبقات خفيفة سهلة الخلع.
ست تشكيلات لمواقف حقيقية
التنبؤ هو مرجع، وليس زيًا موحدًا. عدّل الطبقات حسب مسارك، النشاط والملابس التي لديك بالفعل.
🌧️
المطر في المدينة
اجمع بين لباس ضيق غير شفاف، سترة، معطف مقاوم للماء وأحذية ذات ثبات جيد.
قبل الخروج: الأرض المبللة والداخل المدفأ يتطلبان طبقات مختلفة.
أماكن إضافية وإحداثيات تقريبية: GeoNames، CC BY 4.0؛ اختيار تحريري. GeoNames.
(function(){
"use strict";
var root=document.querySelector('[data-tool=weather]');if(!root)return;
var L={"find":"ابحث عن مدن أخرى","hint":"لا تجد منطقتك؟ ابحث في البلد المختار أو حمّل بلدانًا أخرى. لا GPS ولا بحث عبر IP.","lookup":"اسم المكان","search":"ابحث عن مناطق","countries":"بلدان أخرى","empty":"لا توجد نتائج.","loading":"جارٍ البحث عن أماكن…","choose":"اختر هذا المكان","intro":"استكشف الطقس بالتفصيل","lead":"اطلع على توقعات الساعة، قائمة عملية للملابس وتنبيهات رسمية من الولايات المتحدة. نحمل فقط ما تطلبه.","forecast":"الساعات والأيام السبعة القادمة","forecastDesc":"درجة الحرارة، الرطوبة، الأمطار، الأشعة فوق البنفسجية مع سماء صافية والرياح.","alerts":"تنبيهات رسمية من الولايات المتحدة","alertsDesc":"إشعارات سارية من National Weather Service للمناطق الأمريكية.","go":"استعلام","hour":"الساعات القادمة (UTC)","days":"الأيام القادمة (تواريخ UTC)","unavailable":"المصدر غير متوفر مؤقتًا.","nothing":"لا توجد قيم متوافقة.","notUS":"تنبيهات NWS متوفرة فقط في الولايات المتحدة.","noAlerts":"لا توجد تحذيرات رسمية نشطة.","countryReady":"تم تحميل قائمة الدول.","source":"المصادر: MET Norway، PlaceDB (CC0) وNWS. تستخدم القائمة التوقعات المخزنة مؤقتًا، وليست اختبارات الملابس.","pack":"قائمة للخروج حسب الطقس","packDesc":"جهز قائمة باستخدام التوقعات المحفوظة، دون شراء أو مكالمات إضافية.","packItems":["سراويل ضيقة لديك","قطعة دافئة أو معطف","طبقة خارجية ضد المطر","جاكيت مقاوم للرياح","جوارب دافئة وأحذية مغلقة","أحذية مريحة ذات ثبات"],"packCopy":"نسخ القائمة","packSaved":"تم نسخ القائمة"},country=root.querySelector('#wa-country'),city=root.querySelector('#wa-city');
var input=root.querySelector('#wa-place-query'),matches=root.querySelector('.wa-place-matches'),status=root.querySelector('.wa-place-status-text');
function item(tag,value){var e=document.createElement(tag);e.textContent=String(value);return e;}
function query(){
var opt=city.selectedOptions[0],p=new URLSearchParams();
if(opt&&opt.dataset.placeId){p.set('country',country.value);p.set('place',opt.dataset.placeId);p.set('q',opt.dataset.query);}
else if(city.value)p.set('city',city.value);
return p;
}
var placeEpoch=0,panelEpoch={forecast:0,pack:0,alerts:0};
function clear(){placeEpoch++;for(var mode in panelEpoch)panelEpoch[mode]++;matches.replaceChildren();status.textContent='';for(var e of root.querySelectorAll('.wa-deep-output'))e.replaceChildren();}
country.addEventListener('change',clear);city.addEventListener('change',clear);
var find=root.querySelector('.wa-place-find');
find.addEventListener('click',async function(){
var value=input.value.trim();if(value.length<2){input.focus();return;}
var findIntent=++placeEpoch,chosenCountry=country.value;
status.textContent=L.loading;matches.replaceChildren();find.disabled=true;
try{
var r=await fetch('/api/weather-places?country='+encodeURIComponent(country.value)+'&q='+encodeURIComponent(value));
if(!r.ok)throw Error('places');var d=await r.json();if(findIntent!==placeEpoch||country.value!==chosenCountry)return;if(!d.places||!d.places.length)status.textContent=L.empty;
else status.textContent=d.places.length+' · '+L.choose;
for(const p of d.places||[]){
var li=item('li',''),b=item('button',p.name);
b.type='button';b.addEventListener('click',function(){
if(findIntent!==placeEpoch||country.value!==chosenCountry)return;
var opt=document.createElement('option');opt.value='p-'+p.country+'-'+p.id;opt.textContent=p.name;
opt.dataset.placeId=String(p.id);opt.dataset.query=value;city.append(opt);city.disabled=false;city.value=opt.value;
city.dispatchEvent(new Event('change',{bubbles:true}));status.textContent=p.name+' ✓';matches.replaceChildren();
});li.append(b);matches.append(li);
}
}catch{if(findIntent===placeEpoch)status.textContent=L.unavailable;}finally{find.disabled=false;}
});
input.addEventListener('keydown',function(e){if(e.key==='Enter'){e.preventDefault();find.click();}});
root.querySelector('.wa-all-countries').addEventListener('click',async function(){
var button=this;button.disabled=true;status.textContent=L.loading;
try{
var r=await fetch('/api/weather-countries');if(!r.ok)throw Error('countries');
var d=await r.json(),already=new Set(Array.from(country.options,x=>x.value)),extra=[];
var fmt=new Intl.DisplayNames([document.documentElement.lang||'en'],{type:'region'});
for(var c of d.countries||[]){if(!/^[A-Z]{2}$/.test(c.code)||already.has(c.code))continue;
var o=document.createElement('option');o.value=c.code;o.textContent=fmt.of(c.code)||c.name;
country.append(o);extra.push(c.code);}
window.__leggicMoreCountries=[...new Set([...(window.__leggicMoreCountries||[]),...extra])];
status.textContent=L.countryReady;button.hidden=true;
}catch{status.textContent=L.unavailable;button.disabled=false;}
});
function line(box,name,value){var row=item('div','');row.className='wa-deep-line';row.append(item('span',name),item('strong',value));box.append(row);}
for(const btn of root.querySelectorAll('.wa-deep-fetch')){
btn.addEventListener('click',async function(){
var mode=btn.dataset.mode,box=root.querySelector('.wa-deep-output[data-mode="'+mode+'"]');
var intent=++panelEpoch[mode],selectedCountry=country.value,selectedCity=city.value;
if(!city.value){box.textContent=L.empty;return;}
box.textContent=L.loading;btn.disabled=true;
var p=query(),url=mode==='alerts'?'/api/weather-alerts':'/api/weather-advice';
if(mode==='forecast'||mode==='pack')p.set('view','extended');
try{
var r=await fetch(url+'?'+p.toString());if(!r.ok)throw Error('source');
var d=await r.json();if(intent!==panelEpoch[mode]||city.value!==selectedCity||country.value!==selectedCountry)return;box.replaceChildren();
if(mode==='forecast'){
var a=item('div','');a.className='wa-deep-lines';
if(Number.isFinite(d.humidity))line(a,'💧',d.humidity+'%');
if(Number.isFinite(d.uvClearSky))line(a,'UV (clear sky)',d.uvClearSky);
if(Number.isFinite(d.windGustMs))line(a,'Wind gust',d.windGustMs+' m/s');
for(var h of (d.hourly||[]).slice(0,18))line(a,h.time.slice(5,16).replace('T',' ')+' UTC',h.temperatureC+' °C'+(Number.isFinite(h.precipChance)?' · '+h.precipChance+'%':''));
box.append(a);
var b=item('div','');b.className='wa-deep-lines';
for(var day of d.daily||[])line(b,day.dayUTC,day.lowC+' / '+day.highC+' °C');
box.append(item('h4',L.days),b);
}else if(mode==='pack'){
if(!Number.isFinite(d.temperatureC))throw Error('missing temperature');
var items=[L.packItems[0]];
if(d.temperatureC<10)items.push(L.packItems[1]);
if((Number.isFinite(d.precipMm)&&d.precipMm>=0.2)||/rain|snow|sleet/i.test(d.symbol||''))items.push(L.packItems[2]);
if(d.windMs>=8)items.push(L.packItems[3]);
items.push(d.temperatureC<5?L.packItems[4]:L.packItems[5]);
var list=item('ul','');list.className='wa-packing-list';
for(const label of [...new Set(items)]){var li=item('li',label);list.append(li);}
box.append(list);
var copy=item('button',L.packCopy);copy.type='button';copy.className='wa-pack-copy';
copy.addEventListener('click',async function(){try{
await navigator.clipboard.writeText(items.join('\n'));copy.textContent=L.packSaved;
}catch{copy.textContent=L.unavailable;}});
box.append(copy);
}else{
if(!d.supported){box.textContent=L.notUS;return;}
if(!d.alerts?.length){box.textContent=L.noAlerts;return;}
for(var a of d.alerts)line(box,a.severity,a.event+': '+a.headline);
var link=item('a','National Weather Service');link.href='https://www.weather.gov/';link.rel='noopener noreferrer';box.append(link);
}
}catch{if(intent===panelEpoch[mode])box.textContent=L.unavailable;}finally{btn.disabled=false;}
});
}
})();document.addEventListener('DOMContentLoaded',()=>{setTimeout(()=>{
// The deferred app.js initializes its tool on DOMContentLoaded; run just after it.
const button=document.getElementById('buildLook');if(!button)return;
const labels={it:'Abbinamento',de:'Outfit',es:'Conjunto',fr:'Tenue',en:'Look'};
const enhance=()=>{
const result=document.querySelector('#lookResult .result');
if(!result||result.querySelector('.style-look-grid'))return;
const items=[...result.querySelectorAll('ol li')].slice(0,3);
if(!items.length)return;
const selectedText=id=>{
const element=document.getElementById(id);
return element?.selectedOptions?.[0]?.textContent?.trim()||element?.value||'';
};
const metaText=[selectedText('color'),selectedText('season'),selectedText('shoes')].filter(Boolean).join(' · ');
const grid=document.createElement('div');grid.className='style-look-grid';
items.forEach((item,index)=>{
const card=document.createElement('article');card.className='style-look';
const meta=document.createElement('span');meta.className='style-look-meta';meta.textContent=metaText;
const content=document.createElement('div'),title=document.createElement('b'),copy=document.createElement('p');
title.textContent=(labels[document.documentElement.lang]||labels.en)+' '+(index+1);
copy.innerHTML=item.innerHTML;
content.append(title,copy);card.append(meta,content);grid.append(card);
});
result.querySelector('ol')?.replaceWith(grid);
};
const next=()=>setTimeout(enhance,0);
button.addEventListener('click',next);
for(const id of ['color','season','occasion','shoes','finish'])document.getElementById(id)?.addEventListener('change',next);
next();
},0);});(()=>{const root=document.querySelector('header.site-header [data-lp]');if(!root)return;const t=root.querySelector('.lp-trigger'),d=root.querySelector('.lp-dialog');if(!d||typeof d.showModal!=='function')return;const f=d.querySelector('.lp-filter'),items=[...d.querySelectorAll('.lp-item')],groups=[...d.querySelectorAll('.lp-group')],empty=d.querySelector('.lp-empty');const norm=s=>s.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');const apply=()=>{const q=norm(f.value.trim());let shown=0;items.forEach(a=>{const ok=!q||norm(a.dataset.names+' '+a.textContent).includes(q);a.parentElement.hidden=!ok;if(ok)shown++;});groups.forEach(g=>{g.hidden=![...g.querySelectorAll('li')].some(li=>!li.hidden)});empty.hidden=shown>0;};t.addEventListener('click',e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();d.showModal();f.value='';apply();if(window.matchMedia('(pointer:fine)').matches)f.focus();else d.querySelector('.lp-item.is-current')?.scrollIntoView({block:'center'});});d.querySelector('.lp-close').addEventListener('click',()=>d.close());d.addEventListener('click',e=>{if(e.target===d)d.close()});f.addEventListener('input',apply);f.addEventListener('keydown',e=>{if(e.key==='Enter'){const first=items.find(a=>!a.parentElement.hidden);if(first){e.preventDefault();first.click();}}});d.addEventListener('close',()=>t.focus());})();