Contact Hiking Moab
:root{
--hm-bg:#fff;
--hm-text:#18181b;
--hm-muted:#6b7280;
--hm-brand:#b45309; /* warm desert orange */
--hm-brand-2:#0ea5e9; /* sky accent */
--hm-accent:#16a34a; /* success */
--hm-error:#dc2626;
--hm-border:#e5e7eb;
--radius:16px;
}
html,body{background:var(--hm-bg);color:var(--hm-text);font:16px/1.6 system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;margin:0}
.container{max-width:1000px;margin:auto;padding:24px;}
.hero{display:grid;gap:16px;padding:24px;border:1px solid var(--hm-border);border-radius:var(--radius);background:linear-gradient(180deg,#fff, #fff8f3)}
.eyebrow{color:var(--hm-brand);font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:.85rem}
h1{font-size:clamp(1.75rem,2.2rem,2.5rem);margin:0}
.purpose{color:#374151}
.cta-row{display:flex;flex-wrap:wrap;gap:12px}
.btn{appearance:none;border:1px solid var(--hm-border);padding:12px 16px;border-radius:12px;background:#fff;font-weight:600;text-decoration:none;color:var(--hm-text);display:inline-flex;align-items:center;gap:8px}
.btn.primary{background:var(--hm-brand);border-color:var(--hm-brand);color:#fff}
.btn.secondary{background:#fff;border-color:#d1d5db}
.btn:focus{outline:3px solid #fde68a;outline-offset:2px}
.meta{display:flex;gap:16px;flex-wrap:wrap;color:var(--hm-muted);font-size:.95rem}
.trust{display:flex;gap:12px;flex-wrap:wrap;color:#374151}
.trust span{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--hm-border);border-radius:999px;background:#fff}.grid{display:grid;grid-template-columns:1.2fr .8fr;gap:24px;margin-top:24px}
@media (max-width:900px){.grid{grid-template-columns:1fr}}/* Quick links */
.quick{border:1px solid var(--hm-border);border-radius:var(--radius);padding:16px;background:#fafafa}
.quick h2{font-size:1.1rem;margin:0 0 8px}
.quick ul{margin:0;padding-left:20px}/* Form */
form{border:1px solid var(--hm-border);border-radius:var(--radius);padding:20px;background:#fff}
.form-row{display:flex;gap:16px;flex-wrap:wrap}
.field{flex:1 1 280px;display:flex;flex-direction:column;gap:6px}
label{font-weight:600}
input[type="text"], input[type="email"], input[type="tel"], input[type="url"], input[type="date"], input[type="time"], input[type="number"], select, textarea{
border:1px solid var(--hm-border);border-radius:10px;padding:10px 12px;font-size:1rem;background:#fff
}
textarea{min-height:120px}
.help{font-size:.9rem;color:var(--hm-muted)}
.choice{display:flex;gap:12px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid var(--hm-border);border-radius:999px;background:#fff;cursor:pointer}
.section{margin:16px 0 8px;font-weight:700}
.hidden{display:none}
.error{color:var(--hm-error);font-size:.95rem}
.error-input{border-color:var(--hm-error) !important}
.success{display:none;border:1px solid #bbf7d0;background:#f0fdf4;color:#064e3b;border-radius:12px;padding:14px;margin-top:12px}/* Safety / seasonal note */
.notice{border-left:4px solid var(--hm-brand-2);background:#f0f9ff;padding:12px;border-radius:12px}/* Sticky email on mobile */
.sticky-email{position:fixed;bottom:14px;right:14px;left:14px;display:none}
@media (max-width:720px){.sticky-email{display:block}}/* Footer contact */
.contact-cards{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media (max-width:700px){.contact-cards{grid-template-columns:1fr}}
.card{border:1px solid var(--hm-border);border-radius:var(--radius);padding:14px}
We live here
Contact Hiking Moab
Local trail help from Moab. Average reply within 48 hours. Moab time now: —
✉️ Email us
🥾 Plan my hike
☎️ Call us
📍 Based in Moab
🧭 Updated weekly
Planning a hike this Fall? Don't be fooled by the cooler temperatures. Bring plenty of water. Shade is limited in the desert.How can we help?
🗺️ Trail advice
🧑🏫 Guided hikes & tours
📣 Partnerships & media
🛠️ Support & feedback
Please choose one option.
Trip details
Trip dates
Group size
Preferred distance
Select
1–3 miles
3–6 miles
6–10 miles
10+ miles
Max elevation gain
Select
≤ 300 ft
≤ 800 ft
≤ 1500 ft
1500+ ft
Must‑see scenery
Experience level
Select
Beginner
Intermediate
Advanced
Flexible?
Yes
No
Guided hike details
Trip dates
Group size & ages
Fitness level
Select
Easy going
Moderate
Ready for a challenge
Preferred start time
Where are you staying?
Partnership info
Organization
Timeline
Deliverables
Links
Add one URL; you can include more in the message.
Support
Page URL (if applicable)
Issue type
Select
Typo or accuracy
Broken link
Accessibility
Other
Attach screenshot (optional)
Max 10 MB.
Your name
Email
Phone (optional)
Message
Website (leave blank)
Also send me the free Moab 3‑Day Hiking Planner (PDF)Send message
✅ Thanks for reaching out. We’ll reply by tomorrow. Meanwhile, here are three local favorites:
Corona Arch
Hidden Valley
West Rim – Dead Horse Point
Quick Links
Today’s hiking weather & trail tips
Guided hikes in Moab
Best sunrise & sunset hikes
Fiery Furnace permits guide
Family friendly hikes near town
Email
hiking@moabing.com
Fastest way to get tailored trail picks.
Phone
+
9:00 a.m. – 6:00 p.m. Mountain Time
We’re not an emergency service. For in‑progress incidents call 911. For park closures see NPS alerts.✉️ Email us
// Ensure dataLayer exists for GTM
window.dataLayer = window.dataLayer || [];// Local time in Moab (America/Denver)
function updateMoabTime(){
try{
const fmt = new Intl.DateTimeFormat('en-US',{hour:'numeric',minute:'2-digit',hour12:true,timeZone:'America/Denver'});
document.getElementById('moab-time').textContent = fmt.format(new Date()) + ' MT';
}catch(e){
document.getElementById('moab-time').textContent = '';
}
}
updateMoabTime();
setInterval(updateMoabTime, 60000);// Seasonal note
(function(){
const m = new Date().getMonth()+1; // 1-12
const el = document.getElementById('seasonal-note');
if(!el) return;
let msg = '';
if(m>=6 && m<=9){
msg = 'Summer heat: Start at dawn, carry 1 gallon of water per person, use sun protection, and avoid hiking in the afternoon.';
} else if(m===4 || m===5 || m===10){
msg = 'Spring/fall: Wide temperature swings. Pack layers and check wind forecasts for exposed rims.';
} else {
msg = 'Winter: Watch for ice on slickrock, short daylight, and occasional snow. Traction helps.';
}
el.textContent = msg;
})();// Routed form logic
const topicInputs = Array.from(document.querySelectorAll('input[name="topic"]'));
const routes = {
trail_advice: document.getElementById('route-trail'),
guided_hikes: document.getElementById('route-guided'),
media_partnerships: document.getElementById('route-media'),
support_feedback: document.getElementById('route-support'),
};function showRoute(val){
Object.values(routes).forEach(n=>n.classList.add('hidden'));
if(routes[val]) routes[val].classList.remove('hidden');
}let formStarted = false;
const form = document.getElementById('contact-form');topicInputs.forEach(r => {
const lab = document.querySelector('label[for="'+r.id+'"]');
if(lab){
lab.addEventListener('click',()=>{ r.checked = true; r.dispatchEvent(new Event('change')); });
}
r.addEventListener('change', e => {
showRoute(e.target.value);
document.getElementById('topic-error').classList.add('hidden');
window.dataLayer.push({
event:'contact_form_route_selected',
route:e.target.value,
page_path:location.pathname
});
});
});// Analytics: form start on first input
form.addEventListener('input', () => {
if(!formStarted){
formStarted = true;
window.dataLayer.push({event:'contact_form_start', page_path:location.pathname});
}
}, {once:true});// Email & phone clicks
const emailEls = ['btn-email-top','email-card','btn-email-sticky'];
emailEls.forEach(id=>{
const el = document.getElementById(id); if(!el) return;
el.addEventListener('click',()=>{
window.dataLayer.push({event:'contact_email_click', page_path:location.pathname, device: (/Mobi|Android/i.test(navigator.userAgent)?'mobile':'desktop')});
});
});
const phoneEls = ['btn-call-top','phone-card'];
phoneEls.forEach(id=>{
const el = document.getElementById(id); if(!el) return;
el.addEventListener('click',()=>{
window.dataLayer.push({event:'contact_phone_click', page_path:location.pathname, device: (/Mobi|Android/i.test(navigator.userAgent)?'mobile':'desktop')});
});
});// Simple validation
function setError(id, msg){
const box = document.getElementById('form-errors');
box.textContent = msg; box.classList.remove('hidden');
box.scrollIntoView({behavior:'smooth',block:'center'});
}form.addEventListener('submit', function(e){
e.preventDefault();
const errors = [];
const selected = topicInputs.find(i=>i.checked);
if(!selected){ errors.push('Choose how we can help.'); document.getElementById('topic-error').classList.remove('hidden'); }
const name = document.getElementById('name');
const email = document.getElementById('email');
const msg = document.getElementById('message');
;[name,email,msg].forEach(f=>f.classList.remove('error-input'));
if(!name.value.trim()){ errors.push('Enter your name.'); name.classList.add('error-input'); }
if(!email.value.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)){ errors.push('Enter a valid email.'); email.classList.add('error-input'); }
if(!msg.value.trim()){ errors.push('Tell us a bit about your plans.'); msg.classList.add('error-input'); }
if(document.getElementById('website').value){ errors.push('Spam detected.'); }const route = selected ? selected.value : 'none';
// Minimal route-specific requirement example
if(route==='guided_hikes' && !document.getElementById('gdates').value.trim()){
errors.push('Add trip date(s) for guided hikes.');
document.getElementById('gdates').classList.add('error-input');
}if(errors.length){
setError('form-errors', errors.join(' '));
window.dataLayer.push({event:'contact_form_submit_error', errors, route, page_path:location.pathname});
return;
}document.getElementById('form-errors').classList.add('hidden');
document.getElementById('form-success').style.display='block';
window.dataLayer.push({event:'contact_form_submit_success', route, page_path:location.pathname, field_count: form.querySelectorAll('input,select,textarea').length});// In production: submit via AJAX or your forms plugin endpoint.
// Example placeholder:
// fetch('/wp-json/hm/v1/contact', {method:'POST', body: new FormData(form)});form.reset();
Object.values(routes).forEach(n=>n.classList.add('hidden'));
formStarted = false;
});