herway-demo 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # herway-demo
2
+
3
+ Self-contained ESM React component bundle.
4
+
5
+ ```tsx
6
+ import { HerWayDemo } from "https://cdn.jsdelivr.net/npm/herway-demo@1.0.0/dist/index.js?external=react,react-dom"
7
+
8
+ export default function Component() {
9
+ return <HerWayDemo />
10
+ }
11
+ ```
12
+
13
+ `react` / `react-dom` are externalized peer dependencies. Renders real DOM.
14
+
15
+ ## License
16
+
17
+ UNLICENSED — private use.
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ export interface HerWayDemoProps { style?: React.CSSProperties; className?: string; }
3
+ export declare function HerWayDemo(props?: HerWayDemoProps): React.JSX.Element;
4
+ export default HerWayDemo;
package/dist/index.js ADDED
@@ -0,0 +1,793 @@
1
+ import{useEffect as Cr}from"react";import{useEffect as fr,useRef as Dt,useState as ur}from"react";import{createContext as To,useContext as Wo,useState as M,useCallback as q,useRef as Lo}from"react";var ye=[4.9087,52.3637];var ae=[{id:"r1",kind:"alert",title:"Person being followed",locationName:"Plantage Middenlaan",severity:"hi",minutesAgo:4,distanceMeters:180,confirmations:12,category:"Being followed",description:"A woman reported being followed by a man for several blocks along Plantage Middenlaan. He turned back near the tram stop. Stay aware and travel together if you can.",coord:[4.9148,52.3683],cluster:3},{id:"r2",kind:"alert",title:"Aggressive group outside bar",locationName:"Roetersstraat",severity:"md",minutesAgo:12,distanceMeters:320,confirmations:5,category:"Harassment",description:"Loud, aggressive group outside a bar on Roetersstraat shouting at people walking past. Consider the other side of the street.",coord:[4.9176,52.3668]},{id:"r3",kind:"alert",title:"Poorly lit underpass",locationName:"Mauritskade",severity:"md",minutesAgo:38,distanceMeters:560,confirmations:8,category:"Unsafe area",description:"The underpass at Mauritskade has several broken lights and is very dark after sunset. A safer, well-lit route runs one block north.",coord:[4.9088,52.3642]},{id:"r4",kind:"alert",title:"Verbal harassment reported",locationName:"Sarphatistraat",severity:"lo",minutesAgo:55,distanceMeters:720,confirmations:3,category:"Physical & verbal harassment",description:"Repeated shouting and verbal harassment from a group near the corner shop on Sarphatistraat. Reported low-severity but worth knowing.",coord:[4.9185,52.3637]},{id:"r5",kind:"review",title:"Caf\xE9 Morgenzon",locationName:"Czaar Peterstraat",stars:4,minutesAgo:120,distanceMeters:500,description:"Warm, welcoming caf\xE9 with staff who keep an eye out. Well-lit at night and easy to get a taxi from. Felt safe staying late.",tags:["Well-lit","Friendly staff","Easy to leave"],coord:[4.9232,52.3706]}],Ue=[{key:"followed",label:"Being followed",icon:"eye"},{key:"harassment",label:"Physical & verbal harassment",icon:"users"},{key:"unsafe",label:"Unsafe area",icon:"alert"},{key:"drink",label:"Drink tampering",icon:"lock"},{key:"other",label:"Something else",icon:"star"}],Ae=[{name:"Home",detail:"Czaar Peterstraat",kind:"saved"},{name:"Work",detail:"Science Park",kind:"saved"},{name:"Caf\xE9 Morgenzon",detail:"500 m away",kind:"recent"},{name:"Centraal Station",detail:"1.8 km away",kind:"recent"}],Ye=[{key:"safer",title:"Safer route",time:"14 min",detail:"Avoids 2 alerts \xB7 well-lit \xB7 busier streets",badge:"Recommended"},{key:"fastest",title:"Fastest route",time:"11 min",detail:"Passes 1 high-risk area \xB7 darker stretch"}],Xe=["Friendly staff","Easy to leave","Busy area","Quiet","CCTV","Well-lit","Staff watched my drink","Felt safe leaving late"],ge={name:"Jane Doe",initials:"J",city:"Amsterdam",ageRange:"25\u201334",verified:!0,stats:{reports:24,reviews:18,days:214},contacts:3,radiusMeters:500,sosTimer:5},Y=[{id:"v1",name:"Caf\xE9 Morgenzon",type:"Caf\xE9",area:"Czaar Peterstraat",stars:4,reviews:38,status:"calm",statusNote:"Quiet right now \xB7 well-staffed",vibe:"Quiet",tags:["Friendly staff","Easy to leave","CCTV"]},{id:"v2",name:"Club Halcyon",type:"Club",area:"Leidseplein",stars:3,reviews:126,status:"busy",statusNote:"Very busy \xB7 long queue reported",vibe:"Busy",tags:["Busy area","Security on door"]},{id:"v3",name:"Bar Florine",type:"Bar",area:"Plantage",stars:5,reviews:54,status:"calm",statusNote:"Relaxed crowd \xB7 women-friendly",vibe:"Relaxed",tags:["Friendly staff","Quiet","Well-lit"]},{id:"v4",name:"Bar Avondrood",type:"Bar",area:"Sarphatistraat",stars:2,reviews:19,status:"caution",statusNote:"2 incidents reported tonight",vibe:"Tense",tags:["Crowded","Poorly lit nearby"]},{id:"v5",name:"Werf Terrace",type:"Club",area:"Czaar Peterstraat",stars:4,reviews:71,status:"busy",statusNote:"Busy but calm \xB7 good lighting",vibe:"Lively",tags:["Busy area","CCTV","Easy to leave"]}],we=[{id:"e1",title:"Group following women near tram stop",where:"Plantage Middenlaan",when:"Just now",distanceMeters:140,confirmations:2,coord:[4.9148,52.3683]},{id:"e2",title:"Loud altercation outside bar",where:"Roetersstraat",when:"6 min ago",distanceMeters:280,confirmations:4,coord:[4.9176,52.3668]}],Re=[{id:"c1",name:"Mara V.",phone:"+31 6 1234 5678"},{id:"c2",name:"Sofia K.",phone:"+31 6 8765 4321"},{id:"c3",name:"Emergency line",phone:"112"}],Ge=[4.908641,52.363719],Ie=[4.922685,52.370921],Be=[4.9176,52.3668],ve=[[4.908641,52.363719],[4.910909,52.364136],[4.91093,52.364139],[4.910926,52.364117],[4.910921,52.364094],[4.910778,52.363647],[4.910656,52.36326],[4.910644,52.363214],[4.910641,52.363195],[4.910639,52.363177],[4.910641,52.363156],[4.910645,52.363133],[4.910656,52.3631],[4.910686,52.363042],[4.910747,52.362925],[4.910795,52.362835],[4.910811,52.36278],[4.910828,52.362716],[4.910901,52.362564],[4.911047,52.362289],[4.911186,52.362023],[4.911221,52.361965],[4.911231,52.361936],[4.911245,52.361909],[4.911247,52.361906],[4.911262,52.361885],[4.911282,52.361869],[4.911301,52.361858],[4.911317,52.361848],[4.911392,52.361817],[4.912316,52.36201],[4.912448,52.362039],[4.913422,52.36224],[4.914395,52.362442],[4.914498,52.362464],[4.914544,52.362473],[4.914583,52.362481],[4.914611,52.362487],[4.914729,52.362512],[4.914735,52.362513],[4.914776,52.362524],[4.91482,52.362531],[4.91489,52.362544],[4.916406,52.36286],[4.918309,52.363254],[4.918391,52.363272],[4.918448,52.363285],[4.918512,52.363302],[4.918618,52.363336],[4.918815,52.363416],[4.918916,52.363462],[4.918936,52.363477],[4.918965,52.363503],[4.918974,52.363511],[4.918995,52.363533],[4.91901,52.36355],[4.91902,52.363563],[4.919033,52.363579],[4.919064,52.36362],[4.919126,52.363698],[4.919153,52.363726],[4.919178,52.363748],[4.91921,52.363773],[4.91926,52.363802],[4.919319,52.363831],[4.919479,52.363906],[4.919727,52.364018],[4.920188,52.364202],[4.920557,52.364369],[4.920942,52.36459],[4.922318,52.365437],[4.92287,52.365775],[4.923509,52.366172],[4.923979,52.36645],[4.923934,52.366478],[4.923905,52.366497],[4.923853,52.366529],[4.923812,52.366551],[4.923706,52.366601],[4.923628,52.366612],[4.923541,52.366616],[4.923501,52.366619],[4.92316,52.36664],[4.92296,52.36666],[4.922102,52.366965],[4.921167,52.367298],[4.921041,52.367341],[4.920701,52.367459],[4.920398,52.367565],[4.919536,52.367864],[4.919437,52.367899],[4.919091,52.368019],[4.918997,52.36805],[4.918821,52.368111],[4.918289,52.368302],[4.917772,52.368487],[4.917507,52.368582],[4.916554,52.368923],[4.916459,52.368956],[4.915401,52.369326],[4.915256,52.369378],[4.915167,52.369409],[4.914673,52.369585],[4.912659,52.370295],[4.912446,52.370376],[4.912312,52.370435],[4.912846,52.370781],[4.913049,52.370837],[4.91313,52.370859],[4.913202,52.370871],[4.913293,52.370872],[4.913493,52.370809],[4.913662,52.370754],[4.913751,52.370738],[4.913873,52.370731],[4.913989,52.370735],[4.91411,52.370757],[4.914315,52.370817],[4.914849,52.371043],[4.914926,52.371073],[4.915088,52.371151],[4.915175,52.371075],[4.91524,52.371021],[4.915256,52.371007],[4.915338,52.370953],[4.915446,52.370903],[4.915926,52.370753],[4.916235,52.370656],[4.916339,52.370624],[4.917222,52.370322],[4.917362,52.370274],[4.917472,52.370235],[4.91827,52.369966],[4.918501,52.369891],[4.918647,52.369844],[4.919227,52.369631],[4.919306,52.369714],[4.919373,52.369768],[4.919792,52.370036],[4.920439,52.370451],[4.921264,52.370961],[4.921625,52.371179],[4.922084,52.371474],[4.922803,52.371058],[4.922813,52.371034],[4.922797,52.371],[4.922748,52.370959],[4.922685,52.370921]],Ke=[[4.908641,52.363719],[4.910909,52.364136],[4.91093,52.364139],[4.910932,52.36416],[4.91093,52.364198],[4.91092,52.364266],[4.910915,52.364293],[4.910907,52.364321],[4.910898,52.364344],[4.910824,52.364497],[4.910609,52.36494],[4.910596,52.36497],[4.910586,52.365001],[4.910581,52.365032],[4.91058,52.36507],[4.910584,52.365097],[4.910589,52.365116],[4.910602,52.365152],[4.910618,52.365177],[4.910636,52.3652],[4.910656,52.365224],[4.910714,52.365288],[4.910938,52.36553],[4.911635,52.366279],[4.911648,52.366294],[4.911697,52.366345],[4.911727,52.366381],[4.911767,52.366409],[4.911781,52.366419],[4.911795,52.366428],[4.911837,52.366459],[4.911826,52.366462],[4.911759,52.366485],[4.911733,52.366495],[4.911562,52.366555],[4.911295,52.366641],[4.910506,52.366915],[4.909536,52.367238],[4.909472,52.367264],[4.909446,52.367294],[4.909438,52.367331],[4.909437,52.367355],[4.909444,52.367396],[4.90946,52.367426],[4.910102,52.368101],[4.91057,52.36858],[4.910619,52.368688],[4.910615,52.368711],[4.910594,52.368763],[4.910587,52.368783],[4.910567,52.36881],[4.910545,52.368827],[4.910421,52.3689],[4.909973,52.369098],[4.909909,52.369136],[4.909776,52.369212],[4.909656,52.369296],[4.909306,52.369499],[4.909115,52.369623],[4.908994,52.369732],[4.908846,52.369894],[4.908766,52.369973],[4.908765,52.370021],[4.908747,52.370051],[4.908732,52.37008],[4.908728,52.370121],[4.908737,52.370155],[4.908767,52.370195],[4.909227,52.370366],[4.909865,52.370601],[4.910308,52.370886],[4.910382,52.370933],[4.911,52.371373],[4.911033,52.371397],[4.911086,52.371442],[4.911177,52.37152],[4.911598,52.371385],[4.911884,52.371277],[4.912091,52.371207],[4.912148,52.371189],[4.912202,52.371173],[4.912208,52.371171],[4.91241,52.371138],[4.912523,52.371121],[4.912676,52.371075],[4.912914,52.370997],[4.912955,52.370984],[4.913016,52.370965],[4.913055,52.37095],[4.913293,52.370872],[4.913493,52.370809],[4.913662,52.370754],[4.913751,52.370738],[4.913873,52.370731],[4.913989,52.370735],[4.91411,52.370757],[4.914315,52.370817],[4.914849,52.371043],[4.914926,52.371073],[4.915088,52.371151],[4.915175,52.371075],[4.91524,52.371021],[4.915256,52.371007],[4.915338,52.370953],[4.915446,52.370903],[4.915926,52.370753],[4.916235,52.370656],[4.916339,52.370624],[4.917222,52.370322],[4.917362,52.370274],[4.917472,52.370235],[4.91827,52.369966],[4.918501,52.369891],[4.918647,52.369844],[4.919227,52.369631],[4.919306,52.369714],[4.919373,52.369768],[4.919792,52.370036],[4.920439,52.370451],[4.921264,52.370961],[4.921625,52.371179],[4.922084,52.371474],[4.922803,52.371058],[4.922813,52.371034],[4.922797,52.371],[4.922748,52.370959],[4.922685,52.370921]];import{jsx as Go}from"react/jsx-runtime";var qe=To(null);function m(){let e=Wo(qe);if(!e)throw new Error("useStore must be used inside <StoreProvider>");return e}var Ao={category:null,severity:"md",anonymous:!1};function Je({children:e}){let[r,a]=M(["ob-1"]),n=r[r.length-1],[l,d]=M({mode:"push",sign:1,n:0}),c={search:-1,home:0,reports:1,profile:2},g=q(S=>{d(B=>({mode:"push",sign:1,n:B.n+1})),a(B=>[...B,S])},[]),h=q(()=>{d(S=>({mode:"pop",sign:1,n:S.n+1})),a(S=>S.length>1?S.slice(0,-1):S)},[]),w=q(S=>{a(B=>{let he=B[B.length-1];if(he in c&&S in c){let Le=c[S]>c[he]?1:-1;d(Po=>({mode:"tab",sign:Le,n:Po.n+1}))}else d(Le=>({mode:"pop",sign:1,n:Le.n+1}));return[S]})},[]),[v,I]=M("right"),[R,Ce]=M(!1),[xe,$t]=M(!1),[jt,_t]=M("closest"),[Ut,Yt]=M(2),[Xt,Kt]=M("all"),[qt,Jt]=M(null),[Qt,Zt]=M(null),[eo,to]=M(null),[oo,ro]=M(""),[ao,no]=M("signup"),[io,so]=M(Ao),lo=q(S=>so(B=>({...B,...S})),[]),[co,po]=M(""),[ho,go]=M("safer"),[vo,mo]=M({nearbyAlerts:!0,confirmations:!0,quietHours:!1,shareLocation:!0,anonymousDefault:!1}),fo=q(S=>mo(B=>({...B,[S]:!B[S]})),[]),Pe=[250,500,1e3],Te=[5,10,15],We=["Terrain","Standard","Satellite"],[uo,bo]=M(500),[xo,yo]=M(5),[wo,ko]=M("Terrain"),No=q(()=>bo(S=>Pe[(Pe.indexOf(S)+1)%Pe.length]),[]),So=q(()=>yo(S=>Te[(Te.indexOf(S)+1)%Te.length]),[]),Co=q(()=>ko(S=>We[(We.indexOf(S)+1)%We.length]),[]),[Ro,_e]=M(Re),zo=Lo(0),Eo=q((S,B)=>{_e(he=>[...he,{id:`new-${zo.current++}`,name:S,phone:B}])},[]),Mo=q(S=>_e(B=>B.filter(he=>he.id!==S)),[]),Vo={screen:n,nav:l,go:g,back:h,reset:w,hand:v,setHand:I,planetaryOpen:R,setPlanetaryOpen:Ce,filtersOpen:xe,setFiltersOpen:$t,sort:jt,setSort:_t,radius:Ut,setRadius:Yt,show:Xt,setShow:Kt,selectedReportId:qt,setSelectedReportId:Jt,selectedVenueId:Qt,setSelectedVenueId:Zt,selectedEventId:eo,setSelectedEventId:to,searchQuery:oo,setSearchQuery:ro,authMode:ao,setAuthMode:no,draft:io,setDraft:lo,destination:co,setDestination:po,routeChoice:ho,setRouteChoice:go,toggles:vo,toggle:fo,safeRadius:uo,cycleRadius:No,sosTimer:xo,cycleSosTimer:So,mapType:wo,cycleMapType:Co,contacts:Ro,addContact:Eo,removeContact:Mo};return Go(qe.Provider,{value:Vo,children:e})}import{Fragment as Io,jsx as s,jsxs as C}from"react/jsx-runtime";function x({children:e,...r}){return s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",...r,children:e})}var t={map:e=>C(x,{...e,children:[s("polygon",{points:"1 6 8 3 16 6 23 3 23 18 16 21 8 18 1 21 1 6"}),s("line",{x1:"8",y1:"3",x2:"8",y2:"18"}),s("line",{x1:"16",y1:"6",x2:"16",y2:"21"})]}),bell:e=>C(x,{...e,children:[s("path",{d:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"}),s("path",{d:"M13.7 21a2 2 0 0 1-3.4 0"})]}),person:e=>C(x,{...e,children:[s("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}),s("circle",{cx:"12",cy:"7",r:"4"})]}),plus:e=>C(x,{strokeWidth:2.6,...e,children:[s("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),s("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),minus:e=>s(x,{strokeWidth:2.4,...e,children:s("line",{x1:"5",y1:"12",x2:"19",y2:"12"})}),alert:e=>C(x,{strokeWidth:2.2,...e,children:[s("path",{d:"M12 2 1 21h22L12 2z"}),s("line",{x1:"12",y1:"9",x2:"12",y2:"14"}),s("circle",{cx:"12",cy:"17.5",r:".7",fill:"currentColor"})]}),eye:e=>C(x,{strokeWidth:2.2,...e,children:[s("circle",{cx:"12",cy:"12",r:"3.2"}),s("path",{d:"M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7-10-7-10-7z"})]}),star:e=>s(x,{...e,children:s("polygon",{points:"12 2 15 9 22 9.5 16.5 14 18.5 21 12 17 5.5 21 7.5 14 2 9.5 9 9"})}),starFill:e=>s("svg",{viewBox:"0 0 24 24",fill:"currentColor",...e,children:s("polygon",{points:"12 2 15 9 22 9.5 16.5 14 18.5 21 12 17 5.5 21 7.5 14 2 9.5 9 9"})}),route:e=>C(x,{strokeWidth:2.2,...e,children:[s("circle",{cx:"6",cy:"19",r:"2.4"}),s("circle",{cx:"18",cy:"5",r:"2.4"}),s("path",{d:"M8.4 19H14a3.5 3.5 0 0 0 0-7h-4a3.5 3.5 0 0 1 0-7h5.6"})]}),sos:e=>C(x,{strokeWidth:2.2,...e,children:[s("polygon",{points:"8 2.6 16 2.6 21.4 8 21.4 16 16 21.4 8 21.4 2.6 16 2.6 8"}),s("line",{x1:"12",y1:"7.5",x2:"12",y2:"13"}),s("circle",{cx:"12",cy:"16.5",r:".7",fill:"currentColor"})]}),locate:e=>C(x,{...e,children:[s("circle",{cx:"12",cy:"12",r:"3"}),s("line",{x1:"12",y1:"2",x2:"12",y2:"5"}),s("line",{x1:"12",y1:"19",x2:"12",y2:"22"}),s("line",{x1:"2",y1:"12",x2:"5",y2:"12"}),s("line",{x1:"19",y1:"12",x2:"22",y2:"12"})]}),compass:e=>s(x,{...e,children:s("polygon",{points:"12 2 19 21 12 17 5 21 12 2"})}),check:e=>s(x,{strokeWidth:2.4,...e,children:s("polyline",{points:"20 6 9 17 4 12"})}),chevronLeft:e=>s(x,{...e,children:s("polyline",{points:"15 18 9 12 15 6"})}),chevronRight:e=>s(x,{...e,children:s("polyline",{points:"9 18 15 12 9 6"})}),arrowRight:e=>C(x,{...e,children:[s("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),s("polyline",{points:"12 5 19 12 12 19"})]}),search:e=>C(x,{...e,children:[s("circle",{cx:"11",cy:"11",r:"7"}),s("line",{x1:"21",y1:"21",x2:"16.5",y2:"16.5"})]}),camera:e=>C(x,{...e,children:[s("path",{d:"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"}),s("circle",{cx:"12",cy:"13",r:"4"})]}),share:e=>C(x,{...e,children:[s("path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"}),s("polyline",{points:"16 6 12 2 8 6"}),s("line",{x1:"12",y1:"2",x2:"12",y2:"15"})]}),shield:e=>C(x,{...e,children:[s("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}),s("polyline",{points:"9 12 11 14 15 10"})]}),clock:e=>C(x,{...e,children:[s("circle",{cx:"12",cy:"12",r:"9"}),s("polyline",{points:"12 7 12 12 15 14"})]}),mapPin:e=>C(x,{...e,children:[s("path",{d:"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"}),s("circle",{cx:"12",cy:"10",r:"3"})]}),lock:e=>C(x,{...e,children:[s("rect",{x:"4",y:"11",width:"16",height:"10",rx:"2"}),s("path",{d:"M8 11V7a4 4 0 0 1 8 0v4"})]}),phone:e=>s(x,{strokeWidth:2.2,...e,children:s("path",{d:"M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3 19.5 19.5 0 0 1-6-6 19.8 19.8 0 0 1-3-8.6A2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 1.9.7 2.8a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.3-1.2a2 2 0 0 1 2.1-.5c.9.3 1.8.6 2.8.7a2 2 0 0 1 1.7 2z"})}),hand:e=>C(x,{...e,children:[s("path",{d:"M18 11V6a2 2 0 0 0-4 0v5M14 10V4a2 2 0 0 0-4 0v7M10 10.5V6a2 2 0 0 0-4 0v8"}),s("path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2a8 8 0 0 1-8-8 2 2 0 0 1 4 0"})]}),filter:e=>s(x,{...e,children:s("polygon",{points:"22 3 2 3 10 12.5 10 19 14 21 14 12.5 22 3"})}),x:e=>C(x,{strokeWidth:2.4,...e,children:[s("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),s("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),menu:e=>C(x,{strokeWidth:2.4,...e,children:[s("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),s("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),s("line",{x1:"3",y1:"18",x2:"21",y2:"18"})]}),cornerUpLeft:e=>C(x,{...e,children:[s("polyline",{points:"9 14 4 9 9 4"}),s("path",{d:"M20 20v-7a4 4 0 0 0-4-4H4"})]}),users:e=>C(x,{...e,children:[s("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),s("circle",{cx:"9",cy:"7",r:"4"}),s("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75"})]})};function Qe(){return C(Io,{children:[C("svg",{width:"18",height:"12",viewBox:"0 0 18 12",fill:"currentColor",children:[s("rect",{x:"0",y:"7",width:"3",height:"5",rx:"1"}),s("rect",{x:"5",y:"4",width:"3",height:"8",rx:"1"}),s("rect",{x:"10",y:"1.5",width:"3",height:"10.5",rx:"1"}),s("rect",{x:"15",y:"0",width:"3",height:"12",rx:"1",opacity:".4"})]}),s("svg",{width:"17",height:"12",viewBox:"0 0 17 12",fill:"currentColor",children:s("path",{d:"M8.5 2.5c2.4 0 4.6.9 6.2 2.4l1.3-1.4A11 11 0 0 0 8.5.5 11 11 0 0 0 1 3.5l1.3 1.4A9 9 0 0 1 8.5 2.5Zm0 3.4c1.5 0 2.9.6 3.9 1.5l1.3-1.4a8 8 0 0 0-10.4 0l1.3 1.4A5.6 5.6 0 0 1 8.5 5.9Zm0 3.3c.7 0 1.3.3 1.8.7l-1.8 2-1.8-2c.5-.4 1.1-.7 1.8-.7Z"})}),C("svg",{width:"26",height:"13",viewBox:"0 0 26 13",fill:"none",children:[s("rect",{x:"1",y:"1.5",width:"21",height:"10",rx:"3",stroke:"currentColor",strokeWidth:"1.2",opacity:".55"}),s("rect",{x:"2.8",y:"3.2",width:"15",height:"6.6",rx:"1.6",fill:"currentColor"}),s("rect",{x:"23.4",y:"4.5",width:"1.6",height:"4",rx:".8",fill:"currentColor",opacity:".55"})]})]})}import{jsx as me,jsxs as Ze}from"react/jsx-runtime";function et({children:e,tone:r="dark",onMouseLeave:a}){return me("div",{className:"phone",children:Ze("div",{className:"screen",onMouseLeave:a,children:[me("div",{className:"notch"}),Ze("div",{className:`status ${r}`,children:[me("span",{className:"t",children:"9:41"}),me("span",{className:"r",children:me(Qe,{})})]}),e,me("div",{className:`home-ind ${r}`})]})})}import{Fragment as Do,jsx as X,jsxs as ze}from"react/jsx-runtime";var tt=["map","reports","profile"],Bo={map:"home",reports:"reports",profile:"profile"};function ot({active:e}){let{screen:r,reset:a,setPlanetaryOpen:n,searchQuery:l,setSearchQuery:d}=m();function c(v){n(!1),a(v)}function g(){d(""),a("home")}if(r==="search")return ze(Do,{children:[ze("div",{className:"spotlight glass",children:[X(t.search,{}),X("input",{autoFocus:!0,value:l,onChange:v=>d(v.target.value),placeholder:"Search bars, clubs, caf\xE9s\u2026"})]}),X("div",{className:"spot-close glass",onClick:g,children:X(t.x,{})})]});let h=tt.indexOf(e),w={map:X(t.map,{}),reports:X(t.bell,{}),profile:X(t.person,{})};return ze("div",{className:"nav-group nav-persist",children:[X("div",{className:"search-island glass",onClick:()=>c("search"),children:X(t.search,{})}),ze("div",{className:"nav glass slide nav3",style:{"--i":h},children:[X("div",{className:"nav-ind"}),tt.map(v=>X("div",{className:`nav-seg ${e===v?"on":""}`,onClick:()=>c(Bo[v]),children:w[v]},v))]})]})}import{useEffect as $o,useState as jo}from"react";import{createContext as Fo,useContext as Ho}from"react";function De(e){let r=e*Math.PI/180;return Math.log(Math.tan(r)+1/Math.cos(r))}function fe(e,r,a){let n=(e-a.west)/(a.east-a.west)*100,l=De(a.north),d=De(a.south),c=(l-De(r))/(l-d)*100;return{leftPct:n,topPct:c}}function rt(e,r){return e.map(([a,n])=>fe(a,n,r))}var Oo=typeof globalThis<"u"&&globalThis.__HERWAY_ASSET_BASE__||new URL("./map/",import.meta.url).href,ne=e=>Oo+e,Oe={home:{src:ne("home.webp"),west:4.902303,east:4.929597,north:52.385856,south:52.348436,w:636,h:1428},route:{src:ne("route.webp"),west:4.902663,east:4.929957,north:52.377509,south:52.340082,w:636,h:1428},nav:{src:ne("route.webp"),west:4.902663,east:4.929957,north:52.377509,south:52.340082,w:636,h:1428},"mini-r1":{src:ne("mini-r1.webp"),west:4.907976,east:4.921624,north:52.370553,south:52.366046,w:636,h:344},"mini-r2":{src:ne("mini-r2.webp"),west:4.910776,east:4.924424,north:52.369054,south:52.364546,w:636,h:344},"mini-r3":{src:ne("mini-r3.webp"),west:4.901976,east:4.915624,north:52.366454,south:52.361946,w:636,h:344},"mini-r4":{src:ne("mini-r4.webp"),west:4.911676,east:4.925324,north:52.365954,south:52.361446,w:636,h:344},"mini-user":{src:ne("mini-user.webp"),west:4.912376,east:4.926024,north:52.366354,south:52.361846,w:636,h:344}},at={r1:"mini-r1",r2:"mini-r2",r3:"mini-r3",r4:"mini-r4"},nt={e1:"mini-r1",e2:"mini-r2"};function it(e,r=16){if(e.length<=r)return e;let a=(e.length-1)/(r-1),n=[];for(let l=0;l<r;l++)n.push(e[Math.round(l*a)]);return n}import{jsx as O,jsxs as ie}from"react/jsx-runtime";var st=Fo(null);function ke(){let e=Ho(st);if(!e)throw new Error("map overlay used outside <StaticMap>");return e}function _({view:e,variant:r="full",className:a="",children:n}){let l=Oe[e]??Oe.home;return ie("div",{className:`smap smap-${r} ${a}`,children:[O("img",{className:"smap-img",src:l.src,alt:"",draggable:!1}),O(st.Provider,{value:l,children:n})]})}function K({lng:e,lat:r,severity:a,glyph:n,cluster:l,onClick:d}){let c=ke(),{leftPct:g,topPct:h}=fe(e,r,c);return ie("div",{className:`pin ${a}`,style:{left:`${g}%`,top:`${h}%`,cursor:d?"pointer":"default"},onClick:d,children:[O("div",{className:"body",children:n}),l?O("span",{className:"cluster",children:l}):null]})}function ue({lng:e,lat:r,className:a="map-dot"}){let n=ke(),{leftPct:l,topPct:d}=fe(e,r,n);return O("div",{className:a,style:{position:"absolute",left:`${l}%`,top:`${d}%`,transform:"translate(-50%, -50%)",zIndex:8}})}function lt({lng:e,lat:r,meters:a}){let n=ke(),l=fe(e,r,n),d=a/(111320*Math.cos(r*Math.PI/180)),c=fe(e+d,r,n),g=Math.abs(c.leftPct-l.leftPct)*2;return O("div",{className:"smap-radius",style:{left:`${l.leftPct}%`,top:`${l.topPct}%`,width:`${g}%`}})}function Ne({points:e,color:r,width:a,dash:n,opacity:l=1}){let d=ke(),c=rt(it(e),d).map(g=>`${g.leftPct},${g.topPct}`).join(" ");return O("svg",{className:"smap-route",viewBox:"0 0 100 100",preserveAspectRatio:"none",children:O("polyline",{points:c,fill:"none",stroke:r,strokeWidth:a,strokeLinecap:"round",strokeLinejoin:"round",strokeDasharray:n,opacity:l,vectorEffect:"non-scaling-stroke"})})}function dt(){return ie("div",{className:"smap-legend glass",children:[ie("span",{children:[O("i",{className:"lg hi"}),"High"]}),ie("span",{children:[O("i",{className:"lg md"}),"Med"]}),ie("span",{children:[O("i",{className:"lg lo"}),"Low"]}),ie("span",{children:[O("i",{className:"lg safe"}),"Review"]})]})}function ct(){let e=ke(),r=(e.north+e.south)/2*(Math.PI/180),a=(e.east-e.west)*111320*Math.cos(r),n=200,l=n/a*100;for(let c of[100,200,250,500,1e3]){let g=c/a*100;if(g>=14&&g<=28){n=c,l=g;break}}let d=n>=1e3?`${n/1e3} km`:`${n} m`;return ie("div",{className:"smap-scale",style:{width:`${l}%`},children:[O("span",{className:"ss-lbl",children:d}),O("span",{className:"ss-bar"})]})}import{Fragment as pt,jsx as k,jsxs as se}from"react/jsx-runtime";function Ee(e,r,a){return a==="right"?{left:e,top:r}:{left:e.replace("calc(100% - ","").replace(")",""),top:r}}function _o(e,r){return e==="review"?k(t.star,{}):r==="md"?k(t.eye,{}):k(t.alert,{})}function Fe(){let{planetaryOpen:e,setPlanetaryOpen:r,go:a,setSelectedReportId:n,setSelectedVenueId:l,safeRadius:d}=m(),c="right",[g,h]=jo(!1);$o(()=>{h(window.matchMedia("(hover: hover)").matches)},[]);function w(R){let Ce=ae.find(xe=>xe.id===R);Ce?.kind==="review"?(l((Y.find(xe=>xe.name===Ce.title)??Y[0]).id),a("read-review")):(n(R),a("alert-detail"))}let v=c==="right"?{left:"calc(100% - 61px)"}:{left:"61px"};function I(R){r(!1),R==="alert"&&a("alert-type"),R==="route"&&a("route-destination"),R==="review"&&a("review"),R==="sos"&&a("sos")}return se(pt,{children:[se(_,{view:"home",variant:"full",children:[k("div",{className:"heat",style:{background:"radial-gradient(120px 120px at 56% 44%, rgba(210,52,33,.5), transparent 70%),radial-gradient(150px 150px at 62% 52%, rgba(233,133,68,.45), transparent 70%),radial-gradient(120px 120px at 47% 58%, rgba(244,207,99,.4), transparent 70%)"}}),k(lt,{lng:ye[0],lat:ye[1],meters:d}),ae.map(R=>k(K,{lng:R.coord[0],lat:R.coord[1],severity:R.kind==="review"?"safe":R.severity,glyph:_o(R.kind,R.severity),cluster:R.cluster,onClick:()=>w(R.id)},R.id)),k(ue,{lng:ye[0],lat:ye[1],className:"user-blip"}),k(dt,{}),k(ct,{})]}),k("div",{className:"maptitle glass",children:k("div",{className:"lab",children:"Live safety map"})}),e&&se(pt,{children:[k("div",{className:"scrim",onClick:()=>r(!1)}),k("div",{className:"orbit",style:c==="right"?{left:"calc(100% - 61px)"}:{left:"61px"}}),se("div",{className:"opt",style:Ee("calc(100% - 61px)","calc(100% - 250px)",c),onClick:()=>I("alert"),children:[k("div",{className:"o alert",children:k(t.alert,{})}),k("div",{className:"lab",children:"Alert"})]}),se("div",{className:"opt",style:Ee("calc(100% - 149px)","calc(100% - 227px)",c),onClick:()=>I("route"),children:[k("div",{className:"o route",children:k(t.route,{})}),k("div",{className:"lab",children:"Route"})]}),se("div",{className:"opt",style:Ee("calc(100% - 213px)","calc(100% - 163px)",c),onClick:()=>I("review"),children:[k("div",{className:"o review",children:k(t.star,{})}),k("div",{className:"lab",children:"Review"})]}),se("div",{className:"opt is-panic",style:Ee("calc(100% - 236px)","calc(100% - 75px)",c),onClick:()=>I("sos"),children:[k("div",{className:"o panic",children:k(t.sos,{})}),k("div",{className:"lab",children:"SOS"})]})]}),!e&&k("div",{className:"fab-hint",style:c==="right"?{}:{left:16,right:"auto"},children:g?"Hover to open":"Tap to open"}),se("div",{className:`fab ${e?"open":""}`,style:{...v,zIndex:e?42:40},onMouseEnter:g?()=>r(!0):void 0,onClick:()=>r(!e),children:[k("div",{className:"glow"}),k(t.plus,{})]})]})}import{useEffect as Uo,useState as Yo}from"react";import{Fragment as gt,jsx as U,jsxs as le}from"react/jsx-runtime";var He=85,ht=2*Math.PI*He;function vt(){let{back:e}=m(),[r,a]=Yo(5);Uo(()=>{if(r<=0)return;let l=setTimeout(()=>a(d=>d-1),1e3);return()=>clearTimeout(l)},[r]);let n=ht*(1-r/5);return U("div",{className:"sos",children:le("div",{className:"sos-body",children:[U("div",{className:"sos-kicker",children:"Emergency SOS"}),U("div",{className:"sos-title",children:r>0?le(gt,{children:["Alerting your",U("br",{}),"safety circle"]}):le(gt,{children:["Safety circle",U("br",{}),"notified"]})}),le("div",{className:"sos-ring",children:[le("svg",{viewBox:"0 0 188 188",children:[U("circle",{className:"track",cx:"94",cy:"94",r:He}),U("circle",{className:"prog",cx:"94",cy:"94",r:He,style:{strokeDasharray:ht,strokeDashoffset:n,transition:"stroke-dashoffset 1s linear"}})]}),le("div",{className:"sos-num",children:[U("b",{children:Math.max(r,0)}),U("span",{children:r>0?"seconds":"sent"})]})]}),U("div",{className:"sos-note",children:"If you close or lock your phone the countdown keeps running. Your emergency contacts and HerWay will be sent your live location, audio and route."}),le("div",{className:"sos-actions",children:[le("button",{className:"sos-call",children:[U(t.phone,{}),"Call 112 now"]}),U("button",{className:"sos-dismiss",onClick:e,children:r>0?"I'm safe \u2014 cancel":"Close"})]})]})})}import{Fragment as $e,jsx as f,jsxs as V}from"react/jsx-runtime";function Xo(e){return e<60?`${e} min ago`:`${Math.round(e/60)} h ago`}function Ko(e){return e<1e3?`${e} m`:`${(e/1e3).toFixed(1)} km`}function qo({n:e}){return f("span",{className:"stars",children:[0,1,2,3,4].map(r=>f(t.starFill,{className:r<e?"":"off"},r))})}function Jo({r:e}){let{go:r,setSelectedReportId:a,setSelectedVenueId:n}=m(),l=e.kind==="review"?"safe":e.severity,d=e.kind==="review"?"Review":e.severity==="hi"?"High":e.severity==="md"?"Medium":"Low";function c(){if(e.kind==="review"){let g=Y.find(h=>h.name===e.title)??Y[0];n(g.id),r("read-review")}else a(e.id),r("alert-detail")}return V("div",{className:`rcard ${l}`,onClick:c,children:[f("div",{className:"ricon",children:e.kind==="review"?f(t.star,{}):e.severity==="md"?f(t.eye,{}):f(t.alert,{})}),V("div",{className:"rbody",children:[V("div",{className:"rtop",children:[f("div",{className:"rttl",children:e.title}),f("div",{className:`rtag ${l}`,children:d})]}),V("div",{className:"rmeta",children:[e.kind==="review"?V($e,{children:[f(qo,{n:e.stars??0})," \xB7 ",e.locationName]}):f($e,{children:e.locationName}),V("div",{className:"sub",children:[V("span",{children:[f(t.clock,{})," ",Xo(e.minutesAgo)]}),V("span",{children:[f(t.mapPin,{})," ",Ko(e.distanceMeters)]}),e.confirmations?V("span",{children:[f(t.users,{})," ",e.confirmations," confirmed"]}):null]})]})]})]})}function Qo(){let{go:e,setSelectedEventId:r}=m(),a=we[0];return V("div",{className:"verify-banner",onClick:()=>{r(a.id),e("confirm-event")},children:[f("div",{className:"vb-ic",children:f(t.shield,{})}),V("div",{className:"vb-main",children:[f("div",{className:"vb-ttl",children:"Can you help verify a report?"}),V("div",{className:"vb-sub",children:[a.title," \xB7 ",a.where," \xB7 ",a.distanceMeters," m away"]})]}),f(t.chevronRight,{})]})}function mt(){let{radius:e,setFiltersOpen:r}=m(),a=ae;return V("div",{className:"sheet",children:[V("div",{className:"sheet-scroll",children:[V("div",{className:"list-head",children:[f("div",{className:"kicker",children:"Near you"}),f("div",{className:"h-title",children:"Reports"}),V("div",{className:"h-loc",children:[f(t.mapPin,{})," Roeterseiland \xB7 Amsterdam \xB7 within ",e," km"]})]}),f("div",{style:{padding:"0 16px 6px"},children:f(Qo,{})}),f("div",{className:"cards",children:a.length?a.map(n=>f(Jo,{r:n},n.id)):f("div",{style:{padding:"40px 22px",color:"var(--ink-soft)",fontSize:13,fontWeight:600},children:"No reports match these filters."})})]}),f("button",{className:"filt-fab",onClick:()=>r(!0),children:f(t.filter,{})}),f(Zo,{})]})}function Zo(){let{filtersOpen:e,setFiltersOpen:r,sort:a,setSort:n,radius:l,setRadius:d,show:c,setShow:g}=m();if(!e)return null;let h=[{k:"closest",label:"Closest"},{k:"latest",label:"Latest"},{k:"risk",label:"Highest risk"}],w=[{k:"all",label:"All"},{k:"alerts",label:"Alerts"},{k:"reviews",label:"Reviews"}];return V($e,{children:[f("div",{className:"filt-scrim",onClick:()=>r(!1)}),V("div",{className:"filt-menu",children:[f("div",{className:"fm-sec",children:"Sort by"}),h.map(v=>V("div",{className:`fm-opt ${a===v.k?"on":""}`,onClick:()=>n(v.k),children:[v.label,a===v.k&&f("span",{className:"ck",children:f(t.check,{})})]},v.k)),f("div",{className:"fm-div"}),f("div",{className:"fm-sec",children:"Within"}),f("div",{className:"fm-pills",children:[1,2,5].map(v=>V("div",{className:`fm-pill ${l===v?"on":""}`,onClick:()=>d(v),children:[v," km"]},v))}),f("div",{className:"fm-div"}),f("div",{className:"fm-sec",children:"Show"}),w.map(v=>V("div",{className:`fm-opt ${c===v.k?"on":""}`,onClick:()=>g(v.k),children:[v.label,c===v.k&&f("span",{className:"ck",children:f(t.check,{})})]},v.k))]})]})}import{jsx as i,jsxs as y}from"react/jsx-runtime";function ft(){let{hand:e,setHand:r,toggles:a,toggle:n,reset:l,go:d,safeRadius:c,cycleRadius:g,sosTimer:h,cycleSosTimer:w,mapType:v,cycleMapType:I,contacts:R}=m();return y("div",{className:"pf-scroll",children:[y("div",{className:"pf-hero",children:[y("svg",{className:"flora",viewBox:"0 0 100 100",fill:"none",children:[y("g",{fill:"#EF8BA6",children:[i("ellipse",{cx:"50",cy:"22",rx:"9",ry:"18"}),i("ellipse",{cx:"50",cy:"78",rx:"9",ry:"18"}),i("ellipse",{cx:"22",cy:"50",rx:"18",ry:"9"}),i("ellipse",{cx:"78",cy:"50",rx:"18",ry:"9"}),i("ellipse",{cx:"30",cy:"30",rx:"9",ry:"16",transform:"rotate(-45 30 30)"}),i("ellipse",{cx:"70",cy:"30",rx:"9",ry:"16",transform:"rotate(45 70 30)"}),i("ellipse",{cx:"30",cy:"70",rx:"9",ry:"16",transform:"rotate(45 30 70)"}),i("ellipse",{cx:"70",cy:"70",rx:"9",ry:"16",transform:"rotate(-45 70 70)"})]}),i("circle",{cx:"50",cy:"50",r:"12",fill:"#FFFDF2"}),i("circle",{cx:"50",cy:"50",r:"5",fill:"#E98544"})]}),y("div",{className:"pf-id",children:[i("div",{className:"avatar",children:ge.initials}),y("div",{children:[i("div",{className:"pf-name",children:ge.name}),y("div",{className:"pf-badge",children:[i(t.shield,{}),"Verified"]})]})]}),y("div",{className:"pf-stats",children:[y("div",{className:"stat",children:[i("div",{className:"num",children:ge.stats.reports}),i("div",{className:"lbl",children:"Reports"})]}),y("div",{className:"stat",children:[i("div",{className:"num",children:ge.stats.reviews}),i("div",{className:"lbl",children:"Reviews"})]}),y("div",{className:"stat",children:[i("div",{className:"num",children:ge.stats.days}),i("div",{className:"lbl",children:"Days"})]})]})]}),i("div",{className:"grp-title",children:"Safety"}),y("div",{className:"grp",children:[y("div",{className:"row",onClick:()=>d("contacts"),children:[i("div",{className:"ic g1",children:i(t.users,{})}),i("div",{className:"lab",children:"Emergency contacts"}),i("div",{className:"val",children:R.length}),i("div",{className:"chev",children:i(t.chevronRight,{})})]}),y("div",{className:"row",onClick:g,children:[i("div",{className:"ic g3",children:i(t.mapPin,{})}),i("div",{className:"lab",children:"Safe radius"}),y("div",{className:"val",children:[c," m"]}),i("div",{className:"chev",children:i(t.chevronRight,{})})]}),y("div",{className:"row",children:[i("div",{className:"ic g2",children:i(t.mapPin,{})}),i("div",{className:"lab",children:"Share live location"}),i("div",{className:`sw-ios ${a.shareLocation?"on":""}`,onClick:()=>n("shareLocation"),children:i("div",{className:"knob"})})]})]}),i("div",{className:"grp-title",children:"Controls"}),y("div",{className:"grp",children:[y("div",{className:"row",children:[i("div",{className:"ic g3",children:i(t.hand,{})}),i("div",{className:"lab",children:"Dominant hand"}),y("div",{className:"hand-seg",children:[i("div",{className:e==="left"?"on":"",onClick:()=>r("left"),children:"Left"}),i("div",{className:e==="right"?"on":"",onClick:()=>r("right"),children:"Right"})]})]}),y("div",{className:"row",onClick:w,children:[i("div",{className:"ic g1",children:i(t.alert,{})}),i("div",{className:"lab",children:"SOS confirmation timer"}),y("div",{className:"val",children:[h," s"]}),i("div",{className:"chev",children:i(t.chevronRight,{})})]})]}),i("div",{className:"grp-title",children:"Notifications"}),y("div",{className:"grp",children:[y("div",{className:"row",children:[i("div",{className:"ic g1",children:i(t.bell,{})}),i("div",{className:"lab",children:"Nearby alerts"}),i("div",{className:`sw-ios ${a.nearbyAlerts?"on":""}`,onClick:()=>n("nearbyAlerts"),children:i("div",{className:"knob"})})]}),y("div",{className:"row",children:[i("div",{className:"ic g3",children:i(t.shield,{})}),i("div",{className:"lab",children:"Confirmations"}),i("div",{className:`sw-ios ${a.confirmations?"on":""}`,onClick:()=>n("confirmations"),children:i("div",{className:"knob"})})]}),y("div",{className:"row",children:[i("div",{className:"ic g4",children:i(t.clock,{})}),i("div",{className:"lab",children:"Quiet hours"}),i("div",{className:`sw-ios ${a.quietHours?"on":""}`,onClick:()=>n("quietHours"),children:i("div",{className:"knob"})})]})]}),i("div",{className:"grp-title",children:"Map & privacy"}),y("div",{className:"grp",children:[y("div",{className:"row",onClick:I,children:[i("div",{className:"ic g3",children:i(t.map,{})}),i("div",{className:"lab",children:"Default map type"}),i("div",{className:"val",children:v}),i("div",{className:"chev",children:i(t.chevronRight,{})})]}),y("div",{className:"row",children:[i("div",{className:"ic g5",children:i(t.lock,{})}),i("div",{className:"lab",children:"Post anonymously by default"}),i("div",{className:`sw-ios ${a.anonymousDefault?"on":""}`,onClick:()=>n("anonymousDefault"),children:i("div",{className:"knob"})})]}),y("div",{className:"row",onClick:()=>d("legal-privacy"),children:[i("div",{className:"ic g5",children:i(t.shield,{})}),i("div",{className:"lab",children:"Privacy policy"}),i("div",{className:"chev",children:i(t.chevronRight,{})})]}),y("div",{className:"row",onClick:()=>d("legal-terms"),children:[i("div",{className:"ic g5",children:i(t.lock,{})}),i("div",{className:"lab",children:"Terms & conditions"}),i("div",{className:"chev",children:i(t.chevronRight,{})})]})]}),i("div",{style:{padding:"20px 16px 30px"},children:i("button",{className:"btn-ghost",onClick:()=>l("ob-1"),children:"Replay intro"})})]})}import{jsx as P,jsxs as be}from"react/jsx-runtime";var er={eye:P(t.eye,{}),alert:P(t.alert,{}),users:P(t.users,{}),lock:P(t.lock,{}),star:P(t.star,{})};function ut(){let{back:e,go:r,draft:a,setDraft:n}=m();return be("div",{className:"flow",children:[be("div",{className:"flow-scroll",children:[be("div",{className:"tb",children:[P("div",{className:"tb-back",onClick:e,children:P(t.chevronLeft,{strokeWidth:2.4})}),P("div",{className:"tb-spacer"}),be("div",{className:"steps",children:[P("i",{className:"on"}),P("i",{}),P("i",{})]})]}),P("div",{className:"flow-title",children:"What's happening?"}),P("div",{className:"flow-sub",children:"Pick the closest type \u2014 you set how severe it is next."}),P("div",{className:"cat-grid",children:Ue.map(l=>{let d=a.category===l.label;return be("div",{className:`cat-tile ${d?"on":""}`,onClick:()=>n({category:l.label}),children:[P("div",{className:"ci",children:er[l.icon]}),P("div",{className:"ct",children:l.label}),P("div",{className:"tick",children:P(t.check,{strokeWidth:3})})]},l.key)})})]}),P("div",{className:"flow-foot",children:be("button",{className:"btn-primary",onClick:()=>r("alert-details"),children:["Next",P(t.arrowRight,{strokeWidth:2.4})]})})]})}import{jsx as u,jsxs as $}from"react/jsx-runtime";var tr=[{key:"lo",label:"Low"},{key:"md",label:"Medium"},{key:"hi",label:"High"}];function bt(){let{back:e,go:r,draft:a,setDraft:n}=m();return $("div",{className:"flow",children:[$("div",{className:"flow-scroll",children:[$("div",{className:"tb",children:[u("div",{className:"tb-back",onClick:e,children:u(t.chevronLeft,{strokeWidth:2.4})}),u("div",{className:"tb-spacer"}),$("div",{className:"steps",children:[u("i",{}),u("i",{className:"on"}),u("i",{})]})]}),u("div",{className:"flow-title",children:"Add the details"}),u("div",{className:"flow-sub",children:"Near Sarphatistraat"}),$("div",{className:"field",children:[u("span",{className:"field-label",children:"How urgent?"}),u("div",{className:"sev-pick",children:tr.map(d=>u("div",{className:`sev ${d.key} ${a.severity===d.key?"on":""}`,onClick:()=>n({severity:d.key}),children:d.label},d.key))})]}),$("div",{className:"field",children:[u("span",{className:"field-label",children:"Location"}),u("div",{className:"map-mini",style:{position:"relative"},children:u(_,{view:"mini-user",variant:"mini",children:u(K,{lng:4.9192,lat:52.3641,severity:"hi",glyph:u(t.alert,{strokeWidth:2.4})})})}),$("div",{className:"loc-row",style:{marginTop:"10px"},children:[u("div",{className:"ld to"}),u("div",{className:"lt",children:"Sarphatistraat 104, Amsterdam"}),u("div",{style:{fontSize:"12.5px",fontWeight:700,color:"var(--green)"},children:"Edit"})]})]}),$("div",{className:"field",children:[$("span",{className:"field-label",children:["What did you see?"," ",u("span",{style:{fontWeight:600,textTransform:"none",letterSpacing:0,color:"rgba(34,48,39,.32)"},children:"\xB7 optional"})]}),u("textarea",{className:"textarea",placeholder:"Tall man in dark jacket, has crossed the street twice behind me\u2026"})]}),u("div",{className:"field",children:$("button",{className:"photo-add",children:[$("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[u("rect",{x:"3",y:"5",width:"18",height:"15",rx:"3"}),u("circle",{cx:"12",cy:"12.5",r:"3"}),u("path",{d:"M8 5l1.5-2h5L16 5"})]}),"Add a photo"]})}),u("div",{className:"grp",style:{margin:0},children:$("div",{className:"row",children:[u("div",{className:"ic g5",children:u(t.lock,{})}),u("div",{className:"lab",children:"Post anonymously"}),u("div",{className:`sw-ios ${a.anonymous?"on":""}`,onClick:()=>n({anonymous:!a.anonymous}),children:u("div",{className:"knob"})})]})})]}),u("div",{className:"flow-foot",children:$("button",{className:"btn-primary",onClick:()=>r("alert-sent"),children:["Continue",u(t.arrowRight,{strokeWidth:2.4})]})})]})}import{jsx as D,jsxs as de}from"react/jsx-runtime";function xt(){let{reset:e}=m();return de("div",{className:"flow",children:[D("div",{className:"tb",style:{position:"absolute",top:"64px",left:0,right:0,justifyContent:"center",zIndex:5},children:de("div",{className:"steps",children:[D("i",{className:"on"}),D("i",{className:"on"}),D("i",{className:"on"})]})}),de("div",{className:"sent",children:[D("div",{className:"sent-check",children:D(t.check,{strokeWidth:2.6})}),D("div",{className:"sent-title",children:"Report shared"}),D("div",{className:"sent-sub",children:"Women within 2\xA0km have been notified. Verified neighbours can confirm to raise its priority."}),de("div",{className:"sent-card",children:[D("div",{className:"ricon",style:{background:"linear-gradient(155deg,#4f9e79,var(--green-deep))",width:"38px",height:"38px",borderRadius:"12px"},children:de("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",style:{width:"19px",height:"19px",color:"#fff"},children:[D("circle",{cx:"12",cy:"12",r:"3.2"}),D("path",{d:"M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7-10-7-10-7z"})]})}),de("div",{style:{flex:1,minWidth:0},children:[D("div",{style:{fontSize:"13.5px",fontWeight:700,color:"var(--ink)"},children:"Shared with women nearby"}),D("div",{style:{fontSize:"11.5px",fontWeight:600,color:"var(--ink-soft)",marginTop:"2px"},children:"Sarphatistraat \xB7 just now"})]})]})]}),de("div",{className:"flow-foot",children:[D("button",{className:"btn-primary",onClick:()=>e("home"),children:"Back to map"}),de("button",{className:"btn-ghost danger",onClick:()=>{window.location.href="tel:112"},children:[D(t.phone,{}),"Report to police \u2014 call 112"]})]})]})}import{jsx as b,jsxs as J}from"react/jsx-runtime";function yt(){let{back:e,go:r,destination:a,setDestination:n}=m(),l=Ae.filter(h=>h.kind==="saved"),d=Ae.filter(h=>h.kind==="recent");function c(h){n(h.name),r("route-overview")}function g({p:h,tone:w}){return J("div",{className:"row",onClick:()=>c(h),children:[b("div",{className:`ic ${w}`,children:h.kind==="saved"&&h.name==="Home"?J("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[b("path",{d:"M3 11l9-8 9 8"}),b("path",{d:"M5 10v10h14V10"})]}):h.kind==="saved"?J("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[b("rect",{x:"2",y:"7",width:"20",height:"14",rx:"2"}),b("path",{d:"M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})]}):J("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[b("circle",{cx:"12",cy:"12",r:"9"}),b("path",{d:"M12 7v5l3 2"})]})}),b("div",{className:"lab",children:h.name}),b("div",{className:"val",children:h.detail.replace(" away","")}),b("div",{className:"chev",children:b(t.chevronRight,{})})]})}return J("div",{className:"flow",children:[J("div",{className:"flow-scroll",children:[b("div",{className:"tb",children:b("div",{className:"tb-back",onClick:e,children:b("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:b("polyline",{points:"15 18 9 12 15 6"})})})}),b("div",{className:"flow-title",children:"Plan a safe route"}),b("div",{className:"flow-sub",children:"We'll steer you around recent alerts and dark stretches."}),J("div",{className:"loc-stack",children:[J("div",{className:"loc-row",children:[b("div",{className:"ld from"}),b("div",{className:"lt",children:"Current location"}),b(t.locate,{style:{width:17,height:17,color:"var(--green-soft)"}})]}),J("div",{className:"loc-row",children:[b("div",{className:"ld to"}),b("input",{type:"text",placeholder:"Where to?",value:a,onChange:h=>n(h.target.value)}),b(t.search,{style:{width:17,height:17,color:"var(--ink-soft)"},strokeWidth:2.2})]})]}),b("div",{className:"grp-title",style:{padding:"4px 6px 9px"},children:"Saved"}),b("div",{className:"grp",style:{margin:0},children:l.map((h,w)=>b(g,{p:h,tone:w===0?"g3":"g2"},h.name))}),b("div",{className:"grp-title",style:{padding:"20px 6px 9px"},children:"Recent"}),b("div",{className:"grp",style:{margin:0},children:d.map((h,w)=>b(g,{p:h,tone:w===0?"g4":"g5"},h.name))})]}),b("div",{className:"flow-foot",children:J("button",{className:"btn-primary",onClick:()=>r("route-overview"),children:["Find route",b(t.arrowRight,{})]})})]})}import{Fragment as or,jsx as T,jsxs as Q}from"react/jsx-runtime";function wt(){let{back:e,go:r,routeChoice:a,setRouteChoice:n}=m(),l=a==="safer";return Q(or,{children:[Q(_,{view:"route",variant:"full",children:[T(Ne,{points:Ke,color:"#5C6B60",width:l?4:6,dash:l?"2 4":void 0,opacity:l?.45:.9}),T(Ne,{points:ve,color:"#255942",width:l?7:4,opacity:l?1:.45}),T(ue,{lng:Ge[0],lat:Ge[1],className:"map-dot"}),T(K,{lng:Ie[0],lat:Ie[1],severity:"safe",glyph:T(t.check,{})}),T(K,{lng:Be[0],lat:Be[1],severity:"hi",glyph:T(t.alert,{})})]}),Q("div",{className:"maptitle glass",children:[T("div",{className:"dotpulse",style:{background:"var(--green-soft)",boxShadow:"0 0 0 4px rgba(60,122,94,.18)"}}),Q("div",{className:"lab",children:["To Caf\xE9 Morgenzon",T("small",{children:"via Plantage Kerklaan"})]})]}),T("div",{className:"tb-back glass",style:{position:"absolute",top:58,left:16,zIndex:45,background:"rgba(255,253,242,.7)"},onClick:e,children:T(t.chevronLeft,{})}),Q("div",{className:"nav-sheet",children:[Ye.map(d=>Q("div",{className:`route-opt${a===d.key?" on":""}`,onClick:()=>n(d.key),children:[T("div",{className:"rt-ic",children:d.key==="safer"?T(t.shield,{}):T(t.route,{})}),Q("div",{className:"rt-main",children:[Q("div",{className:"rt-ttl",children:[d.title,d.badge?T("span",{className:"rt-badge",children:d.badge}):null]}),T("div",{className:"rt-sub",children:d.detail})]}),Q("div",{className:"rt-time",children:[d.time.replace(" min",""),T("br",{}),T("span",{style:{fontSize:10,fontWeight:700,color:"var(--ink-soft)"},children:"min"})]})]},d.key)),Q("button",{className:"btn-primary",onClick:()=>r("navigation"),children:["Start route",T(t.arrowRight,{})]})]})]})}import{Fragment as rr,jsx as Z,jsxs as ee}from"react/jsx-runtime";function kt(){let{reset:e}=m();return ee(rr,{children:[ee(_,{view:"nav",variant:"full",children:[Z(Ne,{points:ve,color:"#255942",width:7}),Z(ue,{lng:ve[1][0],lat:ve[1][1],className:"user-blip"})]}),ee("div",{className:"nav-banner",children:[Z("div",{className:"nb-man",children:Z(t.cornerUpLeft,{strokeWidth:2.4})}),ee("div",{children:[Z("div",{className:"nb-dist",children:"200 m"}),Z("div",{className:"nb-street",children:"Turn left onto Plantage Kerklaan"})]})]}),ee("div",{className:"nav-sheet",children:[ee("div",{className:"ns-row",children:[ee("div",{children:[Z("div",{className:"ns-eta",children:"12 min"}),Z("div",{className:"ns-meta",children:"0.9 km \xB7 arrive 9:53"})]}),ee("div",{className:"ns-safe",children:[Z(t.shield,{strokeWidth:2.2}),"Safer route"]})]}),ee("button",{className:"btn-ghost danger",onClick:()=>e("home"),children:[Z(t.x,{}),"End navigation"]})]})]})}import{useState as Nt}from"react";import{jsx as L,jsxs as te}from"react/jsx-runtime";function St(){let{back:e,go:r}=m(),[a,n]=Nt(4),[l,d]=Nt(["Friendly staff"]);function c(g){d(h=>h.includes(g)?h.filter(w=>w!==g):[...h,g])}return te("div",{className:"flow",children:[te("div",{className:"flow-scroll",children:[L("div",{className:"tb",children:L("div",{className:"tb-back",onClick:e,children:L(t.chevronLeft,{strokeWidth:2.4})})}),L("div",{className:"flow-title",children:"Rate this place"}),L("div",{className:"flow-sub",children:"Your take helps other women feel safe nearby."}),te("div",{className:"field",children:[L("span",{className:"field-label",children:"Place"}),te("div",{className:"searchbar",children:[L(t.mapPin,{strokeWidth:2.2}),L("input",{type:"text",defaultValue:"Caf\xE9 Morgenzon \xB7 Plantage"})]})]}),te("div",{className:"field",children:[L("span",{className:"field-label",children:"Your review"}),L("div",{className:"rate",children:[0,1,2,3,4].map(g=>L(t.starFill,{className:g<a?"on":void 0,onClick:()=>n(g+1)},g))})]}),te("div",{className:"field",children:[L("span",{className:"field-label",children:"What stood out"}),L("div",{className:"filters",style:{padding:0},children:Xe.map(g=>{let h=l.includes(g);return te("div",{className:`chip ${h?"on":""}`,onClick:()=>c(g),children:[h&&L(t.check,{strokeWidth:2.4}),g]},g)})})]}),te("div",{className:"field",children:[te("span",{className:"field-label",children:["Add a note"," ",L("span",{style:{fontWeight:600,textTransform:"none",letterSpacing:0,color:"rgba(34,48,39,.32)"},children:"\xB7 optional"})]}),L("input",{className:"input",type:"text",placeholder:"Staff walked me to a taxi \u2014 felt safe."})]})]}),L("div",{className:"flow-foot",children:L("button",{className:"btn-primary",onClick:()=>r("review-sent"),children:"Post review"})})]})}import{jsx as ce,jsxs as Se}from"react/jsx-runtime";function Ct(){let{reset:e}=m();return Se("div",{className:"flow",children:[Se("div",{className:"sent",children:[ce("div",{className:"sent-check",children:ce(t.check,{strokeWidth:2.6})}),ce("div",{className:"sent-title",children:"Review posted"}),ce("div",{className:"sent-sub",children:"Thanks \u2014 your take helps other women decide where they feel safe nearby."}),Se("div",{className:"vchips",children:[Se("span",{className:"vchip",children:[ce(t.check,{strokeWidth:2.6}),"Added to map"]}),Se("span",{className:"vchip",children:[ce(t.check,{strokeWidth:2.6}),"Shared with the circle"]})]})]}),ce("div",{className:"flow-foot",children:ce("button",{className:"btn-primary",onClick:()=>e("home"),children:"Done"})})]})}import{useState as Rt}from"react";async function Me(e){let r={title:e.title,text:e.text,url:e.url??(typeof window<"u"?window.location.href:void 0)};try{if(typeof navigator<"u"&&navigator.share){await navigator.share(r);return}if(typeof navigator<"u"&&navigator.clipboard){await navigator.clipboard.writeText(`${e.title}
2
+ ${e.text}`),alert("Copied to clipboard \u2014 sharing isn't supported on this browser.");return}}catch{}}import{Fragment as zt,jsx as A,jsxs as F}from"react/jsx-runtime";var ar={hi:"High risk",md:"Medium risk",lo:"Low risk"};function Et(){let{back:e,selectedReportId:r}=m(),a=ae.find(w=>w.id===r)??ae[0],n=a.severity??"md",[l,d]=Rt(!1),[c,g]=Rt(a.confirmations??0);function h(){l||(d(!0),g(w=>w+1))}return F("div",{className:"flow",children:[F("div",{className:"flow-scroll",children:[F("div",{className:"tb",children:[A("div",{className:"tb-back",onClick:e,children:A(t.chevronLeft,{strokeWidth:2.4})}),A("div",{className:"tb-spacer"}),A("div",{className:`rtag ${n}`,style:{fontSize:10},children:ar[n]})]}),A("div",{className:"map-mini",style:{marginTop:16,position:"relative"},children:F(_,{view:at[a.id]??"mini-r1",variant:"mini",children:[A("div",{className:"heat",style:{background:"radial-gradient(circle 70px at 50% 50%, rgba(212,89,52,.55), transparent 70%)"}}),A(K,{lng:a.coord[0],lat:a.coord[1],severity:n,glyph:A(t.alert,{strokeWidth:2.4})})]})}),A("div",{className:"flow-title",style:{marginTop:18},children:a.title}),F("div",{className:"h-loc",style:{marginTop:8},children:[A(t.mapPin,{}),a.locationName]}),F("div",{className:"rmeta",style:{marginTop:14,fontSize:13},children:[a.description,F("div",{className:"sub",style:{marginTop:12,gap:16},children:[F("span",{children:[A(t.clock,{strokeWidth:2.2}),a.minutesAgo," min ago"]}),F("span",{children:[A(t.mapPin,{strokeWidth:2.2}),a.distanceMeters," m away"]}),F("span",{children:[A(t.users,{strokeWidth:2.2}),c," confirmed"]})]})]})]}),F("div",{className:"flow-foot",children:[A("button",{className:"btn-primary",onClick:h,children:l?F(zt,{children:[A(t.check,{strokeWidth:2.4}),"Confirmed"]}):F(zt,{children:[A(t.users,{strokeWidth:2.2}),"I saw this too"]})}),F("button",{className:"btn-ghost",onClick:()=>Me({title:`Her Way \u2014 ${a.title}`,text:`${a.title} near ${a.locationName} (${a.distanceMeters} m away, ${a.minutesAgo} min ago). Stay safe.`}),children:[A(t.share,{}),"Share with a contact"]})]})]})}import{Fragment as Mt,jsx as o,jsxs as p}from"react/jsx-runtime";function Vt(){let{screen:e,go:r,reset:a,authMode:n,setAuthMode:l}=m(),d=h=>{h.preventDefault(),l("login"),e!=="ob-3"&&r("ob-3")},c=h=>{h.preventDefault(),l("signup")},g=(h,w)=>{h.preventDefault(),r(w)};return e==="ob-1"?o("div",{className:"ob",children:p("div",{className:"ob-scroll",style:{display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",paddingTop:80,gap:28},children:[o("div",{className:"ob-wordmark",children:"HER\xA0WAY"}),p("div",{className:"ob-sub",children:["Safety, the way women share it.",o("br",{}),"A verified women-only circle in Amsterdam."]}),p("div",{className:"ob-points",children:[p("div",{className:"ob-point",children:[o("div",{className:"pi",children:p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("path",{d:"M12 2 4 5v6c0 5 3.5 8.5 8 11 4.5-2.5 8-6 8-11V5z"}),o("path",{d:"M9 12l2 2 4-4"})]})}),"Live safety map & real-time alerts"]}),p("div",{className:"ob-point",children:[o("div",{className:"pi",children:p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}),o("circle",{cx:"12",cy:"7",r:"4"})]})}),"Verified women only \u2014 ID checked"]})]}),p("button",{className:"btn-primary",onClick:()=>{l("signup"),r("ob-2")},children:["Get started",p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:[o("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),o("polyline",{points:"13 6 19 12 13 18"})]})]}),p("div",{className:"ob-fine",children:["Already a member? ",o("a",{href:"#",onClick:d,children:"Log in"})]})]})}):e==="ob-2"?p("div",{className:"ob",children:[p("div",{className:"ob-scroll",children:[p("div",{className:"tb",children:[o("div",{className:"tb-back",onClick:()=>a("ob-1"),children:o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"15 18 9 12 15 6"})})}),o("div",{className:"tb-spacer"}),p("div",{className:"steps",children:[o("i",{className:"on"}),o("i",{}),o("i",{})]})]}),o("div",{className:"ob-title",children:"Tell us about you"}),o("div",{className:"ob-sub",style:{marginBottom:20},children:"Just the basics \u2014 it shapes your map and alerts."}),p("div",{className:"field",children:[o("span",{className:"field-label",children:"First name"}),o("input",{className:"input",type:"text",defaultValue:"Jane"})]}),p("div",{className:"field",children:[o("span",{className:"field-label",children:"City"}),o("input",{className:"input",type:"text",defaultValue:"Amsterdam"})]}),o("div",{className:"grp",style:{margin:"6px 0 0"},children:p("div",{className:"row",onClick:()=>r("contacts"),children:[o("div",{className:"ic g1",children:p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}),o("circle",{cx:"9",cy:"7",r:"4"}),o("path",{d:"M19 8v6M22 11h-6"})]})}),o("div",{className:"lab",children:"Add an emergency contact"}),o("div",{className:"val",children:"Optional"}),o("div",{className:"chev",children:o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"9 18 15 12 9 6"})})})]})})]}),o("div",{className:"flow-foot",children:p("button",{className:"btn-primary",onClick:()=>r("ob-3"),children:["Continue",p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:[o("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),o("polyline",{points:"13 6 19 12 13 18"})]})]})})]}):e==="ob-3"?o("div",{className:"ob",children:p("div",{className:"ob-scroll",children:[p("div",{className:"tb",children:[o("div",{className:"tb-back",onClick:()=>a(n==="login"?"ob-1":"ob-2"),children:o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"15 18 9 12 15 6"})})}),o("div",{className:"tb-spacer"}),n==="login"?null:p("div",{className:"steps",children:[o("i",{}),o("i",{className:"on"}),o("i",{})]})]}),o("div",{className:"ob-title",children:n==="login"?"Welcome back":"Create your account"}),o("div",{className:"ob-sub",style:{marginBottom:22},children:n==="login"?"Sign in to pick up where you left off.":"One tap \u2014 no passwords to remember or leak."}),p("div",{className:"auth-list",children:[p("button",{className:"auth-btn dark",onClick:()=>r(n==="login"?"ob-5":"ob-4"),children:[o("span",{className:"ai",children:o("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:o("path",{d:"M16.4 12.8c0-2.1 1.7-3.1 1.8-3.2-1-1.4-2.5-1.6-3-1.6-1.3-.1-2.5.8-3.1.8-.6 0-1.6-.7-2.7-.7-1.4 0-2.6.8-3.3 2-1.4 2.5-.4 6.1 1 8.1.7 1 1.5 2.1 2.5 2 1-.04 1.4-.65 2.6-.65 1.2 0 1.5.65 2.6.63 1.1-.02 1.8-1 2.5-2 .8-1.1 1.1-2.2 1.1-2.3-.02-.01-2.1-.81-2.1-3.2zM14.5 6.3c.6-.7 1-1.6.9-2.6-.85.04-1.9.57-2.5 1.27-.5.6-1 1.6-.88 2.5.95.08 1.9-.48 2.48-1.17z"})})}),o("span",{className:"albl",children:"Continue with Apple"}),o("span",{className:"asp"})]}),p("button",{className:"auth-btn",onClick:()=>r(n==="login"?"ob-5":"ob-4"),children:[o("span",{className:"ai",children:p("svg",{viewBox:"0 0 48 48",children:[o("path",{fill:"#FFC107",d:"M43.6 20.5H42V20H24v8h11.3C33.7 32.9 29.3 36 24 36c-6.6 0-12-5.4-12-12s5.4-12 12-12c3.1 0 5.9 1.2 8 3.1l5.7-5.7C34 6.1 29.3 4 24 4 12.9 4 4 12.9 4 24s8.9 20 20 20 20-8.9 20-20c0-1.3-.1-2.3-.4-3.5z"}),o("path",{fill:"#FF3D00",d:"M6.3 14.7l6.6 4.8C14.7 16 19 12 24 12c3.1 0 5.9 1.2 8 3.1l5.7-5.7C34 6.1 29.3 4 24 4 16.3 4 9.7 8.3 6.3 14.7z"}),o("path",{fill:"#4CAF50",d:"M24 44c5.2 0 9.9-2 13.4-5.2l-6.2-5.2C29.2 35 26.7 36 24 36c-5.3 0-9.7-3.1-11.3-7.6l-6.5 5C9.6 39.6 16.2 44 24 44z"}),o("path",{fill:"#1976D2",d:"M43.6 20.5H42V20H24v8h11.3c-.8 2.2-2.2 4.1-4.1 5.6l6.2 5.2C39.9 35.9 44 30.5 44 24c0-1.3-.1-2.3-.4-3.5z"})]})}),o("span",{className:"albl",children:"Continue with Google"}),o("span",{className:"asp"})]}),p("button",{className:"auth-btn",onClick:()=>r(n==="login"?"ob-5":"ob-4"),children:[o("span",{className:"ai",children:p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),o("path",{d:"m3 7 9 6 9-6"})]})}),o("span",{className:"albl",children:"Email me a magic link"}),o("span",{className:"asp"})]}),p("button",{className:"auth-btn",onClick:()=>r(n==="login"?"ob-5":"ob-4"),children:[o("span",{className:"ai",children:p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"var(--green)",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("path",{d:"M12 11c1.5 0 2-1.3 2-3a4 4 0 1 0-8 0c0 4-2 5-2 5"}),o("path",{d:"M14 11a6 6 0 0 1 6 6"}),o("path",{d:"M17 17v3M20.5 17.5v2"})]})}),o("span",{className:"albl",children:"Use a passkey"}),o("span",{className:"asp"})]})]}),o("div",{className:"ob-or",children:"or"}),p("div",{className:"ob-fine",children:["By continuing you agree to our ",o("a",{href:"#",onClick:h=>g(h,"legal-terms"),children:"Terms"})," &"," ",o("a",{href:"#",onClick:h=>g(h,"legal-privacy"),children:"Privacy\xA0Policy"}),"."," ",n==="login"?p(Mt,{children:["New here? ",o("a",{href:"#",onClick:c,children:"Create an account"})]}):p(Mt,{children:["Already a member? ",o("a",{href:"#",onClick:d,children:"Log in"})]})]})]})}):e==="ob-4"?p("div",{className:"ob",children:[p("div",{className:"ob-scroll",children:[p("div",{className:"tb",children:[o("div",{className:"tb-back",onClick:()=>a("ob-3"),children:o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"15 18 9 12 15 6"})})}),o("div",{className:"tb-spacer"}),p("div",{className:"steps",children:[o("i",{}),o("i",{}),o("i",{className:"on"})]})]}),p("div",{className:"eidas-badge",style:{margin:"14px 0 12px"},children:[p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("rect",{x:"4",y:"11",width:"16",height:"10",rx:"2"}),o("path",{d:"M8 11V7a4 4 0 0 1 8 0v4"})]}),"Verified by eID \xB7 eIDAS"]}),o("div",{className:"ob-title",children:"Verify you're a woman"}),o("div",{className:"ob-sub",style:{marginBottom:18},children:"A one-time check keeps HerWay women-only. Takes about a minute."}),p("div",{className:"scan-frame",children:[p("div",{className:"scan-card",children:[o("div",{className:"photo"}),p("div",{className:"lines",children:[o("i",{}),o("i",{}),o("i",{}),o("i",{})]})]}),p("div",{className:"scan-corners",children:[o("span",{className:"tl"}),o("span",{className:"tr"}),o("span",{className:"bl"}),o("span",{className:"br"})]}),o("div",{className:"scan-beam"})]}),p("div",{style:{display:"flex",alignItems:"center",gap:14,marginTop:16},children:[o("div",{className:"liveness",children:p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.8,strokeLinecap:"round",strokeLinejoin:"round",children:[o("circle",{cx:"12",cy:"9",r:"4"}),o("path",{d:"M5.5 20a7 7 0 0 1 13 0"})]})}),p("div",{children:[o("div",{style:{fontSize:14,fontWeight:700,color:"var(--ink)"},children:"Then a quick liveness check"}),o("div",{style:{fontSize:12,fontWeight:600,color:"var(--ink-soft)",marginTop:3,lineHeight:1.4},children:"Blink when prompted \u2014 confirms the ID is really yours."})]})]}),p("div",{className:"verify-steps",style:{marginTop:18},children:[p("div",{className:"verify-step",children:[o("div",{className:"vs-num active",children:"1"}),p("div",{className:"vs-main",children:[o("div",{className:"vs-ttl",children:"Scan your ID document"}),o("div",{className:"vs-sub",children:"Passport, ID card or driving licence"})]})]}),p("div",{className:"verify-step",children:[o("div",{className:"vs-num idle",children:"2"}),p("div",{className:"vs-main",children:[o("div",{className:"vs-ttl",children:"Liveness selfie"}),o("div",{className:"vs-sub",children:"Matches your face to the document"})]})]}),p("div",{className:"verify-step",children:[o("div",{className:"vs-num idle",children:o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.6,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"20 6 9 17 4 12"})})}),p("div",{className:"vs-main",children:[o("div",{className:"vs-ttl",children:"Eligibility confirmed"}),o("div",{className:"vs-sub",children:"Reads gender & age, then unlocks access"})]})]})]}),p("div",{className:"privacy-note",style:{marginTop:16},children:[p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("rect",{x:"4",y:"11",width:"16",height:"10",rx:"2"}),o("path",{d:"M8 11V7a4 4 0 0 1 8 0v4"})]}),p("span",{children:["Encrypted end-to-end by our eID partner. HerWay only receives ",o("b",{children:"gender and age"})," \u2014 your document is never seen or stored by us."]})]})]}),o("div",{className:"flow-foot",children:p("button",{className:"btn-primary",onClick:()=>r("ob-5"),children:[p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.2,strokeLinecap:"round",strokeLinejoin:"round",children:[o("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),o("path",{d:"M3 10h18"}),o("path",{d:"M7 15h4"})]}),"Scan my ID"]})})]}):p("div",{className:"ob",children:[p("div",{className:"ob-scroll",style:{display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",paddingTop:74},children:[o("div",{className:"sent-check",style:{width:88,height:88},children:o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.6,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"20 6 9 17 4 12"})})}),o("div",{className:"ob-title",style:{marginTop:22},children:n==="login"?"Welcome back, Jane":"You're in, Jane"}),o("div",{className:"ob-sub",style:{maxWidth:250},children:n==="login"?"Signed in and ready. Your women-only circle is right where you left it.":"Welcome to the women-only circle. You're verified and ready to look out for each other."}),p("div",{className:"vchips",children:[p("span",{className:"vchip",children:[o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.6,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"20 6 9 17 4 12"})}),"ID verified"]}),p("span",{className:"vchip",children:[o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.6,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"20 6 9 17 4 12"})}),"Liveness passed"]}),p("span",{className:"vchip",children:[o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.6,strokeLinecap:"round",strokeLinejoin:"round",children:o("polyline",{points:"20 6 9 17 4 12"})}),"Women-only"]})]})]}),o("div",{className:"flow-foot",children:p("button",{className:"btn-primary",onClick:()=>a("home"),children:["Enter HerWay",p("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.4,strokeLinecap:"round",strokeLinejoin:"round",children:[o("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),o("polyline",{points:"13 6 19 12 13 18"})]})]})})]})}import{jsx as pe,jsxs as je}from"react/jsx-runtime";var nr={title:"Terms & Conditions",updated:"Last updated June 2026",body:[["1. Using Her Way","By making an account and using Her Way, you agree to these terms. Her Way is a community app that helps women feel safer when they are out in the city. Please use it in a responsible way."],["2. Who can use it","Her Way is only for women aged 18 and over. You verify this once when you sign up. Please do not share your account with anyone else."],["3. Being respectful","Only post reports and reviews that are honest and true. Do not use the app to harass, scare or bully other people. We can remove accounts that break these rules."],["4. Safety","Her Way is not a replacement for the police. If you are in danger, always call 112 first and then use the app if you can."],["5. Changes","We may update these terms as the app grows. If we make big changes, we will let you know inside the app."]]},ir={title:"Privacy Policy",updated:"Last updated June 2026",body:[["1. Your information","We care about your privacy. We only ask for the information we need to make the app work, like your first name and your general location."],["2. Location","We use your location to show you reports and safer routes near you. You can turn location off in your settings whenever you want."],["3. Verification","When you sign up we check that you are a woman over 18 through a trusted ID partner. We do not keep a copy of your ID document."],["4. Sharing","We will never sell your data. Your emergency contacts and reports are only shared when you choose to share them."],["5. Your choices","You can edit or delete your account and your data at any time. If you have any questions, you can contact us in the app."]]};function Pt(){let{back:e,screen:r}=m(),a=r==="legal-terms"?nr:ir;return pe("div",{className:"flow",children:je("div",{className:"flow-scroll",children:[je("div",{className:"tb",children:[pe("div",{className:"tb-back",onClick:e,children:pe(t.chevronLeft,{})}),pe("div",{className:"tb-spacer"})]}),pe("div",{className:"flow-title",children:a.title}),pe("div",{className:"flow-sub",children:a.updated}),a.body.map(([n,l])=>je("div",{style:{marginBottom:18},children:[pe("div",{style:{fontFamily:"var(--serif)",fontWeight:600,fontSize:16,color:"var(--green)",marginBottom:5},children:n}),pe("div",{style:{fontSize:13,lineHeight:1.6,color:"var(--ink-soft)",fontWeight:500},children:l})]},n))]})})}import{useState as Ve}from"react";import{jsx as W,jsxs as oe}from"react/jsx-runtime";function Tt(){let{back:e}=m(),[r,a]=Ve(""),[n,l]=Ve(""),[d,c]=Ve(!1),[g,h]=Ve({});function w(){!r.trim()||!n.trim()||(c(!0),a(""),l(""))}return oe("div",{className:"flow",children:[oe("div",{className:"flow-scroll",children:[oe("div",{className:"tb",children:[W("div",{className:"tb-back",onClick:e,children:W(t.chevronLeft,{})}),W("div",{className:"tb-spacer"})]}),W("div",{className:"flow-title",children:"Emergency contacts"}),W("div",{className:"flow-sub",children:"People alerted the moment you fire an SOS. Add as many as you trust."}),W("div",{className:"grp",style:{margin:"0 0 22px"},children:Re.map(v=>{let I=g[v.id];return oe("div",{className:"row",style:I?{opacity:.5}:void 0,children:[W("div",{className:"ic g1",children:W(t.person,{})}),oe("div",{className:"lab",style:I?{textDecoration:"line-through"}:void 0,children:[v.name,W("div",{style:{fontSize:12,fontWeight:600,color:"var(--ink-soft)"},children:I?"Removed":v.phone})]}),I?W("div",{className:"val",style:{color:"var(--ink-soft)"},children:"Removed"}):W("div",{className:"chev",onClick:()=>h(R=>({...R,[v.id]:!0})),style:{cursor:"pointer"},children:W(t.x,{})})]},v.id)})}),d&&oe("div",{className:"privacy-note",style:{marginBottom:18,color:"var(--green)"},children:[W(t.check,{strokeWidth:2.4}),"Contact added \u2014 they'll be alerted when you fire an SOS."]}),oe("div",{className:"field",children:[W("label",{className:"field-label",children:"Name"}),W("input",{className:"input",value:r,onChange:v=>a(v.target.value),placeholder:"e.g. Mara"})]}),oe("div",{className:"field",children:[W("label",{className:"field-label",children:"Phone"}),W("input",{className:"input",value:n,onChange:v=>l(v.target.value),placeholder:"+31 6 \u2026",inputMode:"tel"})]})]}),W("div",{className:"flow-foot",children:oe("button",{className:"btn-primary",onClick:w,children:[W(t.plus,{}),"Add contact"]})})]})}import{jsx as j,jsxs as re}from"react/jsx-runtime";function sr({n:e}){return j("span",{className:"stars",children:[0,1,2,3,4].map(r=>j(t.starFill,{className:r<e?"":"off"},r))})}var lr={calm:{cls:"rtag safe",label:"Calm now"},busy:{cls:"rtag md",label:"Busy"},caution:{cls:"rtag hi",label:"Caution"}};function dr({v:e}){let{go:r,setSelectedVenueId:a}=m(),n=lr[e.status];function l(){a(e.id),r("read-review")}return re("div",{className:"rcard",onClick:l,children:[j("div",{className:"ricon",children:j(t.mapPin,{})}),re("div",{className:"rbody",children:[re("div",{className:"rtop",children:[j("div",{className:"rttl",children:e.name}),j("div",{className:n.cls,children:n.label})]}),re("div",{className:"rmeta",children:[e.type," \xB7 ",e.area,re("div",{className:"sub",children:[re("span",{children:[j(sr,{n:e.stars})," ",e.reviews," reviews"]}),re("span",{children:[j(t.clock,{})," ",e.vibe]})]})]})]})]})}function Wt(){return j("div",{className:"sheet",children:re("div",{className:"sheet-scroll",style:{paddingTop:124},children:[re("div",{className:"list-head",children:[j("div",{className:"kicker",children:"Discover"}),j("div",{className:"h-title",children:"Places near you"})]}),j("div",{className:"cards",children:Y.map(e=>j(dr,{v:e},e.id))})]})})}import{jsx as z,jsxs as G}from"react/jsx-runtime";var cr={calm:{cls:"rtag safe",label:"Calm now"},busy:{cls:"rtag md",label:"Busy"},caution:{cls:"rtag hi",label:"Caution"}},Lt=["Mara V.","Sofia K.","Anouk D.","Liv R.","Noor B.","Emma J.","Tessa M.","Yara P.","Iris H."],pr=["2 days ago","1 week ago","3 weeks ago"],At={Caf\u00E9:{good:["Cosy spot \u2014 staff noticed I was alone and kept checking in. Easy to grab a taxi right outside.","Bright and calm in the afternoon. Felt completely comfortable working here for hours."],mid:["Pleasant enough, but it got cramped later on. Fine in daylight, less so after dark."],bad:["Felt overlooked by staff and the back corner is dim. Wouldn't sit alone here at night."]},Bar:{good:["Relaxed crowd and the bartenders keep an eye on drinks. Walked out feeling at ease.","Door staff were attentive and the street outside is well-lit. Good vibe for a night out."],mid:["Decent, but watch your drink \u2014 it gets busy and a bit rowdy near closing."],bad:["Pushy crowd and poorly lit out front. Saw a couple of incidents \u2014 stay alert here."]},Club:{good:["Busy but security on the door is solid. They walked a few of us to the rank at closing.","Staff stepped in fast when someone got pushy on the floor."],mid:["Long queue and packed inside. Go with friends and keep together."],bad:["Felt unsafe \u2014 door was chaotic and no one stepped in when things got heated. Left early."]}};function hr(e){return e>=4?"good":e===3?"mid":"bad"}function gr(e){let r=At[e.type]??At.Bar,a=d=>Math.max(1,Math.min(5,d)),n=[a(e.stars),a(e.stars-1),a(e.stars+1)],l=e.id.length;return n.map((d,c)=>{let g=r[hr(d)];return{name:Lt[(c+l)%Lt.length],time:pr[c],stars:d,note:g[c%g.length]}})}function Gt({n:e}){return z("span",{className:"stars",children:[0,1,2,3,4].map(r=>z(t.starFill,{className:r<e?"":"off"},r))})}function It(){let{back:e,go:r,selectedVenueId:a}=m(),n=Y.find(c=>c.id===a)??Y[0],l=cr[n.status],d=gr(n);return G("div",{className:"flow",children:[G("div",{className:"flow-scroll",children:[G("div",{className:"tb",children:[z("div",{className:"tb-back",onClick:e,children:z(t.chevronLeft,{strokeWidth:2.4})}),z("div",{className:"tb-spacer"}),z("div",{className:l.cls,children:l.label})]}),z("div",{className:"flow-title",style:{marginTop:16},children:n.name}),G("div",{className:"h-loc",children:[z(t.mapPin,{}),n.type," \xB7 ",n.area]}),G("div",{className:"rmeta",style:{marginTop:16,display:"flex",alignItems:"center",gap:10,fontSize:13},children:[z(Gt,{n:n.stars}),G("span",{style:{fontWeight:800,color:"var(--ink)",fontSize:14},children:[n.stars,".0"]}),z("span",{style:{opacity:.6},children:"\xB7"}),G("span",{children:[n.reviews," reviews"]})]}),G("div",{className:"privacy-note",style:{marginTop:14},children:[z(t.shield,{}),G("span",{children:[z("strong",{style:{color:"var(--green)",fontWeight:800},children:"Live: "}),n.statusNote]})]}),z("div",{className:"field-label",style:{marginTop:24},children:"What people mention"}),z("div",{className:"filters",style:{padding:"4px 0 0"},children:n.tags.map(c=>z("span",{className:"chip",children:c},c))}),z("div",{className:"field-label",style:{marginTop:24},children:"Review history"}),z("div",{style:{display:"flex",flexDirection:"column",gap:12,marginTop:4},children:d.map((c,g)=>G("div",{style:{background:"#fff",borderRadius:18,padding:"14px 16px",boxShadow:"0 10px 24px -18px rgba(34,48,39,.4)",border:"1px solid rgba(34,48,39,.05)"},children:[G("div",{style:{display:"flex",alignItems:"center",gap:11},children:[z("div",{style:{width:34,height:34,borderRadius:12,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",background:"linear-gradient(155deg,#4f9e79,var(--green))",color:"#fff",fontWeight:800,fontSize:14},children:c.name.charAt(0)}),G("div",{style:{flex:1,minWidth:0},children:[z("div",{style:{fontSize:13.5,fontWeight:700,color:"var(--ink)"},children:c.name}),G("div",{style:{display:"flex",alignItems:"center",gap:8,marginTop:2,fontSize:11,fontWeight:600,color:"var(--ink-soft)"},children:[z(Gt,{n:c.stars}),G("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[z(t.clock,{})," ",c.time]})]})]})]}),z("div",{style:{marginTop:10,fontSize:12.5,fontWeight:600,lineHeight:1.5,color:"var(--ink-soft)"},children:c.note})]},g))})]}),G("div",{className:"flow-foot",children:[G("button",{className:"btn-primary",onClick:()=>r("review"),children:[z(t.star,{strokeWidth:2.2}),"Write a review"]}),G("button",{className:"btn-ghost",onClick:()=>Me({title:`Her Way \u2014 ${n.name}`,text:`${n.name} (${n.type}, ${n.area}) \u2014 ${n.stars}\u2605 from ${n.reviews} reviews. ${n.statusNote}`}),children:[z(t.share,{}),"Share this place"]})]})]})}import{useState as vr}from"react";import{jsx as E,jsxs as H}from"react/jsx-runtime";var mr={yes:{title:"Thanks \u2014 confirmation added",sub:"Your confirmation helps verify this report for women nearby."},unsure:{title:"Noted, thanks for checking",sub:"No problem. Only confirm what you actually witnessed."},no:{title:"Thanks \u2014 marked as not witnessed",sub:"Got it. This helps us keep reports accurate for everyone."}};function Bt(){let{back:e,reset:r,selectedEventId:a}=m(),n=we.find(c=>c.id===a)??we[0],[l,d]=vr(null);if(l){let c=mr[l];return H("div",{className:"flow",children:[H("div",{className:"sent",children:[E("div",{className:"sent-check",children:E(t.check,{strokeWidth:2.6})}),E("div",{className:"sent-title",children:c.title}),E("div",{className:"sent-sub",children:c.sub})]}),E("div",{className:"flow-foot",children:E("button",{className:"btn-primary",onClick:()=>r("reports"),children:"Done"})})]})}return H("div",{className:"flow",children:[H("div",{className:"flow-scroll",children:[H("div",{className:"tb",children:[E("div",{className:"tb-back",onClick:e,children:E(t.chevronLeft,{strokeWidth:2.4})}),E("div",{className:"tb-spacer"}),E("div",{className:"rtag md",style:{fontSize:10},children:"Community verification"})]}),E("div",{className:"map-mini",style:{marginTop:16,position:"relative"},children:H(_,{view:nt[n.id]??"mini-r1",variant:"mini",children:[E("div",{className:"heat",style:{background:"radial-gradient(circle 70px at 50% 50%, rgba(212,89,52,.55), transparent 70%)"}}),E(K,{lng:n.coord[0],lat:n.coord[1],severity:"hi",glyph:E(t.alert,{strokeWidth:2.4})})]})}),E("div",{className:"flow-title",style:{marginTop:18},children:n.title}),H("div",{className:"h-loc",style:{marginTop:8},children:[E(t.mapPin,{}),n.where," \xB7 ",n.distanceMeters," m away"]}),E("div",{className:"rmeta",style:{marginTop:14,fontSize:13},children:H("div",{className:"sub",style:{gap:16},children:[H("span",{children:[E(t.clock,{strokeWidth:2.2}),n.when]}),H("span",{children:[E(t.users,{strokeWidth:2.2}),n.confirmations," confirmed so far"]})]})}),H("div",{className:"privacy-note",style:{marginTop:16},children:[E(t.shield,{}),E("span",{children:"You're near this report. If you saw or heard something, your confirmation helps verify it for others. Only confirm what you actually witnessed."})]})]}),H("div",{className:"flow-foot",children:[H("button",{className:"btn-primary",onClick:()=>d("yes"),children:[E(t.check,{strokeWidth:2.4}),"Yes, I can confirm"]}),E("button",{className:"btn-ghost",onClick:()=>d("unsure"),children:"I'm not sure"}),H("button",{className:"btn-ghost danger",onClick:()=>d("no"),children:[E(t.x,{strokeWidth:2.4}),"No / didn't witness"]})]})]})}import{Fragment as Nr,jsx as N,jsxs as Sr}from"react/jsx-runtime";var br=new Set(["home","sos","navigation","route-overview"]),xr=new Set(["home","reports","search","profile"]);function yr(e){switch(e){case"home":return N(Fe,{});case"sos":return N(vt,{});case"reports":return N(mt,{});case"profile":return N(ft,{});case"alert-type":return N(ut,{});case"alert-details":return N(bt,{});case"alert-sent":return N(xt,{});case"route-destination":return N(yt,{});case"route-overview":return N(wt,{});case"navigation":return N(kt,{});case"review":return N(St,{});case"review-sent":return N(Ct,{});case"alert-detail":return N(Et,{});case"search":return N(Wt,{});case"read-review":return N(It,{});case"confirm-event":return N(Bt,{});case"contacts":return N(Tt,{});case"legal-terms":case"legal-privacy":return N(Pt,{});case"ob-1":case"ob-2":case"ob-3":case"ob-4":case"ob-5":return N(Vt,{});default:return N(Fe,{})}}function wr(){let{screen:e,nav:r}=m(),a=Dt(r.n),n=Dt(1),[l,d]=ur([{screen:e,cls:"",sx:"0%",z:1,key:0}]);return fr(()=>{if(r.n===a.current)return;a.current=r.n,d(g=>{let h=g[g.length-1];if(h.screen===e)return g;let w=`${r.sign*100}%`,v=r.mode==="pop",I={screen:e,cls:v?"anim-enter-pop":"anim-enter",sx:w,z:v?1:2,key:n.current++};return[{screen:h.screen,cls:v?"anim-leave-pop":"anim-leave",sx:w,z:v?2:1,key:h.key},I]});let c=setTimeout(()=>{d(g=>{let h=g[g.length-1];return[{screen:h.screen,cls:"",sx:"0%",z:1,key:h.key}]})},360);return()=>clearTimeout(c)},[r.n,e]),N(Nr,{children:l.map(c=>N("div",{className:`layer ${c.cls}`,style:{"--sx":c.sx,zIndex:c.z},children:yr(c.screen)},c.key))})}function kr(){let{screen:e,setPlanetaryOpen:r}=m(),a=e==="reports"?"reports":e==="profile"?"profile":"map";return Sr(et,{tone:br.has(e)?"light":"dark",onMouseLeave:()=>r(!1),children:[N(wr,{}),xr.has(e)&&N(ot,{active:a})]})}function Ot(){return N(Je,{children:N("div",{className:"stage",children:N(kr,{})})})}var Ft=`@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;0,9..144,900;1,9..144,500&family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');
3
+
4
+ /* ============================================================
5
+ HerWay \u2014 shared design system (Liquid Glass)
6
+ Used by index.html (gallery) and every screens/*.html file.
7
+ Page-chrome (brand header, .rack, .device-wrap, .cap) lives
8
+ in index.html \u2014 NOT here \u2014 so it never leaks into embeds.
9
+ ============================================================ */
10
+ .herway-root{
11
+ --cream:#FFFDF2;
12
+ --cream-2:#F7F1DF;
13
+ --cream-3:#EFE7CE;
14
+ --green:#255942;
15
+ --green-deep:#1A4031;
16
+ --green-soft:#3C7A5E;
17
+ --pink:#EF8BA6;
18
+ --orange:#E98544;
19
+ --terra:#D45934;
20
+ --ink:#223027;
21
+ --ink-soft:#5c6b60;
22
+ --taupe:#E9E0C9;
23
+ --sage:#CFE0BE;
24
+ --water:#B9CFC9;
25
+
26
+ --san:'Plus Jakarta Sans',-apple-system,BlinkMacSystemFont,'SF Pro Text',sans-serif;
27
+ --serif:'Fraunces',Georgia,serif;
28
+ }
29
+
30
+ .herway-root *{box-sizing:border-box;margin:0;padding:0;-webkit-font-smoothing:antialiased;}
31
+
32
+ /* embedded screen file: show only the centred phone, transparent bg */
33
+
34
+ /* ---------- the phone ---------- */
35
+ .herway-root .phone{
36
+ width:340px;height:736px;border-radius:54px;
37
+ background:linear-gradient(150deg,#2b2b30,#0d0d10 60%);
38
+ padding:11px;position:relative;
39
+ box-shadow:
40
+ 0 2px 3px rgba(255,255,255,.4) inset,
41
+ 0 -2px 4px rgba(0,0,0,.6) inset,
42
+ 0 40px 80px -28px rgba(28,40,30,.55),
43
+ 0 12px 30px -12px rgba(0,0,0,.35);
44
+ }
45
+ .herway-root .phone::after{ /* side buttons \u2014 two volume buttons on the left */
46
+ content:"";position:absolute;left:-3px;top:160px;width:3px;height:64px;border-radius:3px;
47
+ background:#1c1c20;box-shadow:0 96px 0 #1c1c20;
48
+ }
49
+ .herway-root .screen{
50
+ position:relative;width:100%;height:100%;border-radius:43px;overflow:hidden;
51
+ background:var(--cream);
52
+ }
53
+ .herway-root .notch{
54
+ position:absolute;top:11px;left:50%;transform:translateX(-50%);
55
+ width:108px;height:31px;background:#08080a;border-radius:20px;z-index:60;
56
+ }
57
+ .herway-root .notch::after{content:"";position:absolute;right:13px;top:50%;transform:translateY(-50%);width:9px;height:9px;border-radius:50%;background:#1c2530;box-shadow:inset 0 0 3px #3a4d5e;}
58
+
59
+ /* status bar */
60
+ .herway-root .status{
61
+ position:absolute;top:0;left:0;right:0;height:52px;z-index:55;
62
+ display:flex;align-items:center;justify-content:space-between;
63
+ padding:18px 28px 0;font-size:14px;font-weight:700;
64
+ pointer-events:none;
65
+ }
66
+ .herway-root .status .t{font-variant-numeric:tabular-nums;letter-spacing:.2px;}
67
+ .herway-root .status .r{display:flex;align-items:center;gap:6px;}
68
+ .herway-root .status svg{display:block;}
69
+ .herway-root .status.light, .herway-root .status.light *{color:#fff;}
70
+ .herway-root .status.dark, .herway-root .status.dark *{color:var(--green-deep);}
71
+
72
+ /* home indicator */
73
+ .herway-root .home-ind{position:absolute;bottom:9px;left:50%;transform:translateX(-50%);width:128px;height:5px;border-radius:3px;z-index:58;}
74
+ .herway-root .home-ind.light{background:rgba(255,255,255,.7);}
75
+ .herway-root .home-ind.dark{background:rgba(34,48,39,.32);}
76
+
77
+ /* ---------- Liquid Glass primitives ---------- */
78
+ .herway-root .glass{
79
+ position:relative;
80
+ background:linear-gradient(160deg, rgba(255,255,255,.50), rgba(255,253,242,.28));
81
+ backdrop-filter:blur(22px) saturate(180%);
82
+ -webkit-backdrop-filter:blur(22px) saturate(180%);
83
+ border:1px solid rgba(255,255,255,.55);
84
+ box-shadow:
85
+ 0 1px 1px rgba(255,255,255,.7) inset,
86
+ 0 -10px 18px -12px rgba(0,0,0,.18) inset,
87
+ 0 14px 34px -14px rgba(26,64,49,.42);
88
+ }
89
+ .herway-root .glass::before{ /* specular top sheen */
90
+ content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
91
+ background:linear-gradient(180deg, rgba(255,255,255,.55), rgba(255,255,255,0) 42%);
92
+ opacity:.7;
93
+ }
94
+ .herway-root .glass-dim{ /* lighter glass to sit on cream */
95
+ background:linear-gradient(160deg, rgba(255,255,255,.78), rgba(255,253,242,.62));
96
+ border:1px solid rgba(255,255,255,.85);
97
+ box-shadow:0 1px 1px rgba(255,255,255,.9) inset,0 12px 26px -16px rgba(26,64,49,.3);
98
+ }
99
+
100
+ /* ---------- top floating nav ---------- */
101
+ .herway-root .nav{
102
+ position:absolute;top:60px;left:50%;transform:translateX(-50%);z-index:50;
103
+ display:flex;gap:4px;padding:6px;border-radius:26px;width:210px;justify-content:space-between;
104
+ }
105
+ .herway-root .nav-seg{
106
+ flex:1;height:42px;border-radius:20px;display:flex;align-items:center;justify-content:center;
107
+ color:var(--green);position:relative;transition:.2s;cursor:pointer;
108
+ }
109
+ .herway-root .nav-seg svg{width:22px;height:22px;position:relative;z-index:2;}
110
+ .herway-root .nav-seg.on{color:#fff;}
111
+ .herway-root .nav-seg.on::before{
112
+ content:"";position:absolute;inset:0;border-radius:18px;z-index:1;
113
+ background:linear-gradient(160deg,var(--green-soft),var(--green-deep));
114
+ box-shadow:0 1px 1px rgba(255,255,255,.45) inset, 0 6px 14px -6px rgba(26,64,49,.7);
115
+ }
116
+
117
+ /* ====================================================== MAP ====================================================== */
118
+ .herway-root .heat{position:absolute;inset:-10%;filter:blur(26px);mix-blend-mode:multiply;opacity:.9;}
119
+
120
+ /* user puck + radius */
121
+ .herway-root .userwrap{position:absolute;left:46%;top:55%;transform:translate(-50%,-50%);z-index:8;}
122
+ .herway-root .radius{
123
+ position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
124
+ width:230px;height:230px;border-radius:50%;
125
+ border:1.5px dashed rgba(37,89,66,.45);
126
+ background:radial-gradient(circle, rgba(60,122,94,.10), rgba(60,122,94,0) 70%);
127
+ }
128
+ .herway-root .puck{position:relative;width:22px;height:22px;}
129
+ .herway-root .puck .ring{position:absolute;inset:-9px;border-radius:50%;background:rgba(60,122,94,.22);animation:none;}
130
+ .herway-root .puck .dot{position:absolute;inset:0;border-radius:50%;background:linear-gradient(160deg,#4f9e79,var(--green));box-shadow:0 0 0 3px #fff,0 4px 10px rgba(26,64,49,.5);}
131
+ .herway-root .radius-tag{
132
+ position:absolute;left:50%;bottom:-6px;transform:translate(-50%,100%);
133
+ font-size:10px;font-weight:700;color:var(--green);background:rgba(255,253,242,.9);
134
+ padding:3px 8px;border-radius:9px;white-space:nowrap;box-shadow:0 3px 8px rgba(0,0,0,.1);border:1px solid rgba(255,255,255,.7);
135
+ }
136
+
137
+ /* alert pins */
138
+ .herway-root .pin{position:absolute;z-index:9;transform:translate(-50%,-100%);}
139
+ .herway-root .pin .body{
140
+ width:30px;height:30px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);
141
+ display:flex;align-items:center;justify-content:center;
142
+ box-shadow:0 6px 12px -3px rgba(0,0,0,.35);border:2px solid rgba(255,255,255,.85);
143
+ }
144
+ .herway-root .pin .body svg{transform:rotate(45deg);width:15px;height:15px;color:#fff;}
145
+ .herway-root .pin.hi .body{background:linear-gradient(160deg,#e0683f,var(--terra));}
146
+ .herway-root .pin.md .body{background:linear-gradient(160deg,#f0a05a,var(--orange));}
147
+ .herway-root .pin.lo .body{background:linear-gradient(160deg,#f3a6bb,var(--pink));}
148
+ .herway-root .pin .cluster{position:absolute;top:-7px;right:-7px;background:var(--green-deep);color:#fff;font-size:9px;font-weight:800;width:17px;height:17px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1.5px solid #fff;transform:rotate(0);}
149
+
150
+ /* radius / scale chip top of map */
151
+ .herway-root .maptitle{
152
+ position:absolute;left:50%;transform:translateX(-50%);top:120px;z-index:20;padding:9px 14px;border-radius:18px;
153
+ display:flex;align-items:center;gap:9px;
154
+ }
155
+ .herway-root .maptitle .lab{font-size:11px;font-weight:700;color:var(--green-deep);line-height:1.15;}
156
+ .herway-root .maptitle .lab small{display:block;font-weight:600;color:var(--ink-soft);font-size:9.5px;}
157
+ .herway-root .dotpulse{width:9px;height:9px;border-radius:50%;background:var(--terra);box-shadow:0 0 0 4px rgba(212,89,52,.18);}
158
+
159
+ /* ---------- FAB / planetary ---------- */
160
+ .herway-root .fab{
161
+ position:absolute;left:calc(100% - 61px);bottom:40px;transform:translateX(-50%);z-index:40;
162
+ width:70px;height:70px;border-radius:50%;display:flex;align-items:center;justify-content:center;
163
+ background:linear-gradient(155deg,#4f9e79,var(--green-deep));
164
+ border:1px solid rgba(255,255,255,.4);
165
+ box-shadow:0 1px 1px rgba(255,255,255,.5) inset, 0 -8px 14px -8px rgba(0,0,0,.4) inset, 0 16px 30px -8px rgba(26,64,49,.6);
166
+ }
167
+ .herway-root .fab svg{width:30px;height:30px;color:#fff;transition:transform .3s;}
168
+ .herway-root .fab.open svg{transform:rotate(135deg);}
169
+ .herway-root .fab .glow{position:absolute;inset:-6px;border-radius:50%;background:radial-gradient(circle,rgba(60,122,94,.4),transparent 70%);z-index:-1;}
170
+ .herway-root .fab-hint{
171
+ position:absolute;right:16px;bottom:120px;z-index:40;
172
+ font-size:10.5px;font-weight:600;color:rgba(255,253,242,.92);
173
+ background:rgba(26,40,32,.5);backdrop-filter:blur(8px);padding:5px 12px;border-radius:12px;white-space:nowrap;
174
+ border:1px solid rgba(255,255,255,.15);
175
+ }
176
+
177
+ /* planet menu overlay */
178
+ .herway-root .scrim{position:absolute;inset:0;z-index:30;background:radial-gradient(circle at 50% 78%, rgba(20,34,26,.30), rgba(16,26,20,.62));backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);}
179
+ .herway-root .orbit{position:absolute;left:calc(100% - 61px);bottom:-100px;width:350px;height:350px;transform:translateX(-50%);z-index:35;border-radius:50%;border:1.5px dashed rgba(255,253,242,.28);pointer-events:none;}
180
+ /* anchor point IS the circle centre; label floats below without shifting it */
181
+ .herway-root .opt{position:absolute;z-index:38;width:70px;height:70px;transform:translate(-50%,-50%);}
182
+ .herway-root .opt .o{
183
+ width:70px;height:70px;border-radius:50%;display:flex;align-items:center;justify-content:center;
184
+ border:1px solid rgba(255,255,255,.5);
185
+ box-shadow:0 1px 1px rgba(255,255,255,.55) inset,0 14px 28px -10px rgba(0,0,0,.5);
186
+ }
187
+ .herway-root .opt .o svg{width:29px;height:29px;color:#fff;}
188
+ .herway-root .opt.is-panic{width:48px;height:48px;}
189
+ .herway-root .opt.is-panic .o{width:48px;height:48px;}
190
+ .herway-root .opt.is-panic .o svg{width:21px;height:21px;}
191
+ .herway-root .opt .lab{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%);white-space:nowrap;
192
+ font-size:11px;font-weight:700;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.4);letter-spacing:.2px;}
193
+ .herway-root .o.alert{background:linear-gradient(155deg,#e0683f,var(--terra));}
194
+ .herway-root .o.review{background:linear-gradient(155deg,#f3a6bb,var(--pink));}
195
+ .herway-root .o.route{background:linear-gradient(155deg,#f0a05a,var(--orange));}
196
+ .herway-root .o.panic{background:linear-gradient(155deg,#e23b2a,#b3231a);box-shadow:0 1px 1px rgba(255,255,255,.5) inset,0 14px 28px -10px rgba(178,35,26,.85);}
197
+ .herway-root .opt.is-panic .lab{color:#ffd9d2;}
198
+
199
+ /* ====================================================== EMERGENCY SOS ====================================================== */
200
+ .herway-root .sos{
201
+ position:absolute;inset:0;overflow:hidden;
202
+ background:
203
+ radial-gradient(120% 80% at 50% 4%, rgba(212,89,52,.45) 0%, transparent 58%),
204
+ linear-gradient(165deg,#9c3a28,#7a2418 82%);
205
+ }
206
+ .herway-root .sos-body{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;
207
+ padding:92px 30px 38px;text-align:center;}
208
+ .herway-root .sos-kicker{font-size:12px;font-weight:800;letter-spacing:2.4px;color:rgba(255,255,255,.85);text-transform:uppercase;}
209
+ .herway-root .sos-title{font-family:var(--serif);font-weight:600;font-size:25px;line-height:1.12;color:#fff;
210
+ margin-top:14px;letter-spacing:-.3px;}
211
+ /* countdown ring (static) */
212
+ .herway-root .sos-ring{position:relative;width:188px;height:188px;margin:32px 0 8px;}
213
+ .herway-root .sos-ring svg{width:100%;height:100%;transform:rotate(-90deg);}
214
+ .herway-root .sos-ring .track{fill:none;stroke:rgba(255,255,255,.18);stroke-width:9;}
215
+ .herway-root .sos-ring .prog{fill:none;stroke:#fff;stroke-width:9;stroke-linecap:round;
216
+ stroke-dasharray:534;stroke-dashoffset:107;}
217
+ .herway-root .sos-num{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
218
+ .herway-root .sos-num b{font-family:var(--serif);font-weight:500;font-size:72px;line-height:1;color:#fff;
219
+ font-variant-numeric:tabular-nums;}
220
+ .herway-root .sos-num span{font-size:11px;font-weight:700;letter-spacing:2px;color:rgba(255,255,255,.8);text-transform:uppercase;margin-top:4px;}
221
+ .herway-root .sos-note{font-size:11px;line-height:1.5;font-weight:500;color:rgba(255,255,255,.82);
222
+ max-width:248px;margin-top:14px;}
223
+ .herway-root .sos-actions{margin-top:auto;width:100%;display:flex;flex-direction:column;gap:11px;}
224
+ .herway-root .sos-dismiss{width:100%;padding:17px;border-radius:18px;border:none;cursor:pointer;
225
+ background:#fff;color:#a31d12;font-family:var(--san);font-size:16px;font-weight:800;letter-spacing:.2px;
226
+ box-shadow:0 10px 26px -10px rgba(0,0,0,.5);}
227
+ .herway-root .sos-call{width:100%;padding:14px;border-radius:16px;cursor:pointer;
228
+ display:flex;align-items:center;justify-content:center;gap:8px;
229
+ background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.4);
230
+ color:#fff;font-family:var(--san);font-size:14px;font-weight:700;}
231
+ .herway-root .sos-call svg{width:17px;height:17px;}
232
+
233
+ /* ====================================================== REPORTS ====================================================== */
234
+ .herway-root .sheet{position:absolute;inset:0;background:var(--cream);overflow:hidden;}
235
+ .herway-root .sheet-scroll{position:absolute;inset:0;overflow:hidden;padding-top:118px;}
236
+ .herway-root .list-head{padding:6px 22px 13px;}
237
+ .herway-root .kicker{font-size:11px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;color:var(--terra);}
238
+ .herway-root .h-title{font-family:var(--serif);font-weight:600;font-size:30px;color:var(--green);letter-spacing:-.5px;line-height:1.04;}
239
+ .herway-root .h-loc{margin-top:9px;font-size:12.5px;color:var(--ink-soft);font-weight:600;display:flex;align-items:center;gap:6px;}
240
+ .herway-root .h-loc svg{width:14px;height:14px;color:var(--terra);}
241
+
242
+ .herway-root .filters{display:flex;gap:8px;padding:4px 22px 16px;flex-wrap:wrap;}
243
+ .herway-root .chip{
244
+ padding:8px 14px;border-radius:15px;font-size:12px;font-weight:700;color:var(--green);
245
+ background:var(--cream-2);border:1px solid var(--cream-3);display:flex;align-items:center;gap:6px;cursor:pointer;
246
+ }
247
+ .herway-root .chip svg{width:13px;height:13px;}
248
+ .herway-root .chip.on{background:linear-gradient(160deg,var(--green-soft),var(--green-deep));color:#fff;border-color:transparent;box-shadow:0 6px 14px -7px rgba(26,64,49,.6);}
249
+
250
+ .herway-root .cards{padding:0;display:flex;flex-direction:column;}
251
+ .herway-root .rcard{
252
+ background:transparent;padding:15px 22px;position:relative;
253
+ border-top:1px solid rgba(34,48,39,.08);
254
+ display:flex;gap:13px;align-items:flex-start;
255
+ }
256
+ .herway-root .rcard .stripe{display:none;}
257
+ .herway-root .ricon{flex-shrink:0;width:42px;height:42px;border-radius:14px;display:flex;align-items:center;justify-content:center;}
258
+ .herway-root .ricon svg{width:21px;height:21px;color:#fff;}
259
+ .herway-root .rcard.hi .ricon{background:linear-gradient(155deg,#e0683f,var(--terra));}
260
+ .herway-root .rcard.md .ricon{background:linear-gradient(155deg,#f0a05a,var(--orange));}
261
+ .herway-root .rcard.lo .ricon{background:linear-gradient(155deg,#f3a6bb,var(--pink));}
262
+ .herway-root .rcard.safe .ricon{background:linear-gradient(155deg,#4f9e79,var(--green));}
263
+ .herway-root .rbody{flex:1;min-width:0;}
264
+ .herway-root .rtop{display:flex;align-items:center;justify-content:space-between;gap:8px;}
265
+ .herway-root .rttl{font-size:14.5px;font-weight:700;color:var(--ink);letter-spacing:-.2px;}
266
+ .herway-root .rtag{font-size:9.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;padding:4px 8px;border-radius:8px;white-space:nowrap;}
267
+ .herway-root .rtag.hi{background:rgba(212,89,52,.13);color:var(--terra);}
268
+ .herway-root .rtag.md{background:rgba(233,133,68,.16);color:#c06a26;}
269
+ .herway-root .rtag.lo{background:rgba(239,139,166,.18);color:#c75d7e;}
270
+ .herway-root .rtag.safe{background:rgba(60,122,94,.14);color:var(--green);}
271
+ .herway-root .rmeta{margin-top:6px;font-size:11.5px;color:var(--ink-soft);font-weight:600;line-height:1.5;}
272
+ .herway-root .rmeta .sub{display:flex;align-items:center;gap:12px;margin-top:5px;}
273
+ .herway-root .rmeta .sub span{display:flex;align-items:center;gap:4px;}
274
+ .herway-root .rmeta .sub svg{width:12px;height:12px;color:var(--ink-soft);opacity:.7;}
275
+ .herway-root .stars{display:inline-flex;gap:1px;vertical-align:-1px;}
276
+ .herway-root .stars svg{width:11px;height:11px;color:var(--orange);}
277
+ .herway-root .stars svg.off{color:rgba(34,48,39,.18);}
278
+
279
+ /* reports floating filter */
280
+ .herway-root .filt-scrim{position:absolute;inset:0;background:rgba(20,32,26,.10);z-index:30;}
281
+ .herway-root .filt-fab{
282
+ position:absolute;left:18px;bottom:34px;z-index:42;width:50px;height:50px;border:none;cursor:pointer;
283
+ border-radius:18px;display:flex;align-items:center;justify-content:center;
284
+ background:linear-gradient(160deg,var(--green-soft),var(--green-deep));
285
+ box-shadow:0 10px 22px -8px rgba(26,64,49,.7),inset 0 1px 0 rgba(255,255,255,.28);
286
+ }
287
+ .herway-root .filt-fab svg{width:22px;height:22px;color:#fff;}
288
+ .herway-root .filt-menu{
289
+ position:absolute;left:18px;bottom:96px;z-index:42;width:212px;border-radius:22px;padding:8px;
290
+ background:rgba(255,253,242,.82);
291
+ backdrop-filter:blur(26px) saturate(180%);-webkit-backdrop-filter:blur(26px) saturate(180%);
292
+ border:1px solid rgba(255,255,255,.6);
293
+ box-shadow:0 24px 48px -18px rgba(26,40,33,.55),inset 0 1px 0 rgba(255,255,255,.75);
294
+ }
295
+ .herway-root .fm-sec{font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:var(--ink-soft);padding:8px 10px 5px;}
296
+ .herway-root .fm-opt{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:13px;font-size:13.5px;font-weight:600;color:var(--ink);}
297
+ .herway-root .fm-opt svg{width:15px;height:15px;color:var(--ink-soft);}
298
+ .herway-root .fm-opt.on{background:rgba(37,89,66,.10);color:var(--green);}
299
+ .herway-root .fm-opt.on svg{color:var(--green);}
300
+ .herway-root .fm-opt .ck{margin-left:auto;}
301
+ .herway-root .fm-div{height:1px;background:rgba(34,48,39,.10);margin:6px 8px;}
302
+ .herway-root .fm-pills{display:flex;gap:6px;padding:3px 8px 6px;}
303
+ .herway-root .fm-pill{flex:1;text-align:center;font-size:11.5px;font-weight:700;padding:7px 0;border-radius:11px;background:rgba(34,48,39,.06);color:var(--ink-soft);}
304
+ .herway-root .fm-pill.on{background:linear-gradient(160deg,var(--green-soft),var(--green-deep));color:#fff;}
305
+
306
+ /* ====================================================== PROFILE ====================================================== */
307
+ .herway-root .pf-scroll{position:absolute;inset:0;overflow:hidden;padding-top:108px;}
308
+ .herway-root .pf-hero{
309
+ margin:8px 16px 0;border-radius:28px;padding:22px 20px 20px;position:relative;overflow:hidden;
310
+ background:linear-gradient(155deg,var(--green-soft),var(--green-deep));
311
+ box-shadow:0 18px 36px -20px rgba(26,64,49,.7);
312
+ }
313
+ .herway-root .pf-hero .flora{position:absolute;right:-32px;top:-30px;width:140px;height:140px;opacity:.3;}
314
+ .herway-root .pf-id{display:flex;align-items:center;gap:14px;position:relative;z-index:2;}
315
+ .herway-root .avatar{width:64px;height:64px;border-radius:22px;background:linear-gradient(150deg,var(--pink),var(--terra));display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-weight:700;font-size:26px;color:#fff;box-shadow:0 8px 18px -8px rgba(0,0,0,.5),0 0 0 3px rgba(255,255,255,.25);}
316
+ .herway-root .pf-name{font-family:var(--serif);font-weight:600;font-size:23px;color:#fff;letter-spacing:-.3px;line-height:1.05;}
317
+ .herway-root .pf-badge{margin-top:6px;display:inline-flex;align-items:center;gap:5px;background:rgba(255,253,242,.18);border:1px solid rgba(255,253,242,.3);padding:4px 10px;border-radius:20px;font-size:10.5px;font-weight:700;color:#fff;}
318
+ .herway-root .pf-badge svg{width:12px;height:12px;color:var(--pink);}
319
+ .herway-root .pf-stats{position:relative;z-index:2;margin-top:20px;display:flex;gap:10px;}
320
+ .herway-root .stat{flex:1;background:rgba(255,253,242,.13);border:1px solid rgba(255,253,242,.18);border-radius:16px;padding:12px 8px;text-align:center;}
321
+ .herway-root .stat .num{font-family:var(--serif);font-weight:700;font-size:21px;color:#fff;}
322
+ .herway-root .stat .lbl{font-size:9.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:rgba(255,253,242,.72);margin-top:2px;}
323
+
324
+ .herway-root .grp-title{font-size:11px;font-weight:800;letter-spacing:1.3px;text-transform:uppercase;color:var(--ink-soft);padding:24px 30px 9px;}
325
+ .herway-root .grp{margin:0 16px;background:#fff;border-radius:20px;overflow:hidden;box-shadow:0 10px 24px -18px rgba(34,48,39,.4);border:1px solid rgba(34,48,39,.05);}
326
+ .herway-root .row{display:flex;align-items:center;gap:13px;padding:13px 16px;position:relative;}
327
+ .herway-root .row + .row::before{content:"";position:absolute;left:53px;right:0;top:0;height:1px;background:rgba(34,48,39,.07);}
328
+ .herway-root .row .ic{width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
329
+ .herway-root .row .ic svg{width:18px;height:18px;color:#fff;}
330
+ .herway-root .row .lab{flex:1;font-size:14px;font-weight:600;color:var(--ink);}
331
+ .herway-root .row .val{font-size:12.5px;font-weight:600;color:var(--ink-soft);}
332
+ .herway-root .row .chev{color:rgba(34,48,39,.3);}
333
+ .herway-root .row .chev svg{width:17px;height:17px;}
334
+ .herway-root .ic.g1{background:linear-gradient(155deg,#e0683f,var(--terra));}
335
+ .herway-root .ic.g2{background:linear-gradient(155deg,#f0a05a,var(--orange));}
336
+ .herway-root .ic.g3{background:linear-gradient(155deg,#4f9e79,var(--green));}
337
+ .herway-root .ic.g4{background:linear-gradient(155deg,#f3a6bb,var(--pink));}
338
+ .herway-root .ic.g5{background:linear-gradient(155deg,#6f8a7d,#42584c);}
339
+
340
+ /* iOS switch */
341
+ .herway-root .sw-ios{width:46px;height:28px;border-radius:16px;position:relative;flex-shrink:0;background:rgba(34,48,39,.16);transition:.2s;}
342
+ .herway-root .sw-ios .knob{position:absolute;top:2px;left:2px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.25);transition:.2s;}
343
+ .herway-root .sw-ios.on{background:linear-gradient(160deg,var(--green-soft),var(--green));}
344
+ .herway-root .sw-ios.on .knob{left:20px;}
345
+ .herway-root .hand-seg{display:flex;background:rgba(34,48,39,.1);border-radius:11px;padding:2px;gap:2px;flex-shrink:0;}
346
+ .herway-root .hand-seg div{font-size:11.5px;font-weight:700;color:var(--ink-soft);padding:5px 12px;border-radius:9px;line-height:1;}
347
+ .herway-root .hand-seg div.on{background:#fff;color:var(--green);box-shadow:0 1px 3px rgba(0,0,0,.14);}
348
+
349
+ /* ============================================================
350
+ NEW \u2014 form & flow primitives (add-alert, route, nav, review, detail)
351
+ ============================================================ */
352
+
353
+ /* form/flow scaffold: cream page, back row + large serif title */
354
+ .herway-root .flow{position:absolute;inset:0;background:var(--cream);overflow:hidden;}
355
+ .herway-root .flow-scroll{position:absolute;inset:0;overflow:hidden;padding:66px 22px 120px;}
356
+ .herway-root .tb{display:flex;align-items:center;gap:12px;}
357
+ .herway-root .tb-back{width:38px;height:38px;border-radius:13px;flex-shrink:0;display:flex;align-items:center;justify-content:center;
358
+ background:#fff;border:1px solid rgba(34,48,39,.08);box-shadow:0 6px 16px -12px rgba(34,48,39,.5);color:var(--green-deep);cursor:pointer;}
359
+ .herway-root .tb-back svg{width:20px;height:20px;}
360
+ .herway-root .tb-spacer{flex:1;}
361
+ .herway-root .flow-title{font-family:var(--serif);font-weight:600;font-size:27px;color:var(--green);letter-spacing:-.5px;margin:18px 0 3px;line-height:1.05;}
362
+ .herway-root .flow-sub{font-size:12.5px;color:var(--ink-soft);font-weight:600;line-height:1.45;margin-bottom:20px;}
363
+
364
+ /* wizard step dots */
365
+ .herway-root .steps{display:flex;gap:6px;align-items:center;}
366
+ .herway-root .steps i{width:7px;height:7px;border-radius:50%;background:rgba(34,48,39,.16);display:block;transition:.2s;}
367
+ .herway-root .steps i.on{background:var(--green);width:20px;border-radius:4px;}
368
+
369
+ /* labelled text inputs */
370
+ .herway-root .field{margin-bottom:17px;}
371
+ .herway-root .field-label{display:block;font-size:11px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--ink-soft);margin-bottom:8px;}
372
+ .herway-root .input, .herway-root .textarea{width:100%;background:#fff;border:1px solid rgba(34,48,39,.1);border-radius:15px;
373
+ padding:14px 15px;font-family:var(--san);font-size:14px;font-weight:600;color:var(--ink);
374
+ box-shadow:0 8px 18px -16px rgba(34,48,39,.6);outline:none;}
375
+ .herway-root .input::placeholder, .herway-root .textarea::placeholder{color:rgba(34,48,39,.32);font-weight:500;}
376
+ .herway-root .textarea{min-height:96px;resize:none;line-height:1.5;}
377
+
378
+ /* search field (pill + leading icon) */
379
+ .herway-root .searchbar{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid rgba(34,48,39,.1);
380
+ border-radius:15px;padding:13px 15px;box-shadow:0 8px 18px -16px rgba(34,48,39,.6);}
381
+ .herway-root .searchbar svg{width:18px;height:18px;color:var(--ink-soft);flex-shrink:0;}
382
+ .herway-root .searchbar input{border:none;outline:none;flex:1;font-family:var(--san);font-size:14px;font-weight:600;color:var(--ink);background:transparent;}
383
+ .herway-root .searchbar input::placeholder{color:rgba(34,48,39,.32);font-weight:500;}
384
+
385
+ /* category tiles */
386
+ .herway-root .cat-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px;}
387
+ .herway-root .cat-tile{background:#fff;border:1.5px solid rgba(34,48,39,.08);border-radius:18px;padding:15px 14px;
388
+ display:flex;flex-direction:column;gap:11px;box-shadow:0 10px 22px -18px rgba(34,48,39,.6);position:relative;cursor:pointer;}
389
+ .herway-root .cat-tile .ci{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;}
390
+ .herway-root .cat-tile .ci svg{width:22px;height:22px;color:#fff;}
391
+ .herway-root .cat-tile .ct{font-size:13.5px;font-weight:700;color:var(--ink);letter-spacing:-.2px;}
392
+ .herway-root .cat-tile.on{border-color:var(--green);box-shadow:0 12px 26px -14px rgba(37,89,66,.55);}
393
+ .herway-root .cat-tile .tick{position:absolute;top:11px;right:11px;width:20px;height:20px;border-radius:50%;
394
+ background:var(--green);display:none;align-items:center;justify-content:center;}
395
+ .herway-root .cat-tile .tick svg{width:13px;height:13px;color:#fff;}
396
+ .herway-root .cat-tile.on .tick{display:flex;}
397
+
398
+ /* severity selector */
399
+ .herway-root .sev-pick{display:flex;gap:8px;}
400
+ .herway-root .sev{flex:1;text-align:center;padding:11px 0;border-radius:13px;font-size:12.5px;font-weight:800;letter-spacing:.3px;
401
+ background:#fff;border:1.5px solid rgba(34,48,39,.08);color:var(--ink-soft);cursor:pointer;}
402
+ .herway-root .sev.lo.on{background:rgba(239,139,166,.16);border-color:var(--pink);color:#c75d7e;}
403
+ .herway-root .sev.md.on{background:rgba(233,133,68,.16);border-color:var(--orange);color:#c06a26;}
404
+ .herway-root .sev.hi.on{background:rgba(212,89,52,.14);border-color:var(--terra);color:var(--terra);}
405
+
406
+ /* star rating input */
407
+ .herway-root .rate{display:flex;gap:11px;}
408
+ .herway-root .rate svg{width:34px;height:34px;color:rgba(34,48,39,.16);cursor:pointer;}
409
+ .herway-root .rate svg.on{color:var(--orange);}
410
+
411
+ /* photo upload tile */
412
+ .herway-root .photo-add{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;padding:16px;
413
+ border:1.5px dashed rgba(34,48,39,.22);border-radius:16px;color:var(--ink-soft);font-size:13px;font-weight:700;
414
+ background:rgba(255,255,255,.45);cursor:pointer;}
415
+ .herway-root .photo-add svg{width:20px;height:20px;}
416
+
417
+ /* generic CTAs */
418
+ .herway-root .btn-primary{width:100%;padding:16px;border:none;border-radius:18px;cursor:pointer;
419
+ background:linear-gradient(160deg,var(--green-soft),var(--green-deep));color:#fff;
420
+ font-family:var(--san);font-size:15.5px;font-weight:800;letter-spacing:.2px;
421
+ box-shadow:0 14px 30px -12px rgba(26,64,49,.7),inset 0 1px 0 rgba(255,255,255,.25);
422
+ display:flex;align-items:center;justify-content:center;gap:8px;}
423
+ .herway-root .btn-primary svg{width:19px;height:19px;}
424
+ .herway-root .btn-ghost{width:100%;padding:15px;border-radius:16px;cursor:pointer;background:rgba(37,89,66,.07);
425
+ border:1px solid rgba(37,89,66,.14);color:var(--green);font-family:var(--san);font-size:14px;font-weight:700;
426
+ display:flex;align-items:center;justify-content:center;gap:8px;}
427
+ .herway-root .btn-ghost svg{width:18px;height:18px;}
428
+ .herway-root .btn-ghost.danger{background:rgba(212,89,52,.08);border-color:rgba(212,89,52,.25);color:var(--terra);}
429
+
430
+ /* sticky bottom action bar over cream */
431
+ .herway-root .flow-foot{position:absolute;left:0;right:0;bottom:0;z-index:30;padding:16px 22px 28px;
432
+ display:flex;flex-direction:column;gap:10px;
433
+ background:linear-gradient(0deg,var(--cream) 74%,rgba(255,253,242,0));}
434
+
435
+ /* from/to location stack (route entry) */
436
+ .herway-root .loc-stack{display:flex;flex-direction:column;gap:10px;margin-bottom:22px;}
437
+ .herway-root .loc-row{display:flex;align-items:center;gap:13px;background:#fff;border:1px solid rgba(34,48,39,.1);
438
+ border-radius:15px;padding:14px 15px;box-shadow:0 8px 18px -16px rgba(34,48,39,.6);}
439
+ .herway-root .loc-row .ld{width:12px;height:12px;border-radius:50%;flex-shrink:0;}
440
+ .herway-root .loc-row .ld.from{border:3px solid var(--green-soft);}
441
+ .herway-root .loc-row .ld.to{background:var(--terra);box-shadow:0 0 0 3px rgba(212,89,52,.16);}
442
+ .herway-root .loc-row .lt{flex:1;font-size:14px;font-weight:600;color:var(--ink);}
443
+ .herway-root .loc-row .lt.ph{color:rgba(34,48,39,.34);font-weight:500;}
444
+ .herway-root .loc-row input{flex:1;border:none;outline:none;background:transparent;font-family:var(--san);font-size:14px;font-weight:600;color:var(--ink);}
445
+
446
+ /* route overview option cards */
447
+ .herway-root .route-line{position:absolute;inset:0;z-index:7;pointer-events:none;}
448
+ .herway-root .route-line .fast{fill:none;stroke:rgba(34,48,39,.34);stroke-width:4;stroke-dasharray:1 9;stroke-linecap:round;}
449
+ .herway-root .route-line .safe{fill:none;stroke:var(--green);stroke-width:6;stroke-linecap:round;stroke-linejoin:round;
450
+ filter:drop-shadow(0 2px 5px rgba(26,64,49,.45));}
451
+ .herway-root .route-line .ep{fill:#fff;stroke:var(--green);stroke-width:3.5;}
452
+ .herway-root .route-opt{display:flex;align-items:center;gap:13px;background:#fff;border:1.5px solid rgba(34,48,39,.08);
453
+ border-radius:18px;padding:13px 15px;box-shadow:0 10px 22px -18px rgba(34,48,39,.6);}
454
+ .herway-root .route-opt + .route-opt{margin-top:10px;}
455
+ .herway-root .route-opt.on{border-color:var(--green);box-shadow:0 12px 26px -16px rgba(37,89,66,.5);}
456
+ .herway-root .route-opt .rt-ic{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
457
+ .herway-root .route-opt .rt-ic svg{width:19px;height:19px;}
458
+ .herway-root .route-opt.on .rt-ic{background:linear-gradient(155deg,#4f9e79,var(--green-deep));color:#fff;}
459
+ .herway-root .route-opt:not(.on) .rt-ic{background:rgba(34,48,39,.09);color:var(--ink-soft);}
460
+ .herway-root .route-opt .rt-main{flex:1;min-width:0;}
461
+ .herway-root .route-opt .rt-ttl{font-size:14px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px;}
462
+ .herway-root .route-opt .rt-sub{font-size:11.5px;font-weight:600;color:var(--ink-soft);margin-top:3px;}
463
+ .herway-root .route-opt .rt-time{font-family:var(--serif);font-weight:600;font-size:18px;color:var(--green);text-align:right;line-height:1;}
464
+ .herway-root .route-opt:not(.on) .rt-time{color:var(--ink-soft);}
465
+ .herway-root .rt-badge{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;padding:3px 7px;border-radius:7px;background:rgba(60,122,94,.14);color:var(--green);}
466
+
467
+ /* turn-by-turn navigation */
468
+ .herway-root .nav-banner{position:absolute;top:52px;left:14px;right:14px;z-index:40;
469
+ display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:22px;
470
+ background:linear-gradient(160deg,var(--green-soft),var(--green-deep));
471
+ box-shadow:0 18px 36px -14px rgba(26,64,49,.7);}
472
+ .herway-root .nav-banner .nb-man{width:48px;height:48px;flex-shrink:0;display:flex;align-items:center;justify-content:center;
473
+ background:rgba(255,255,255,.16);border-radius:15px;}
474
+ .herway-root .nav-banner .nb-man svg{width:28px;height:28px;color:#fff;}
475
+ .herway-root .nav-banner .nb-dist{font-family:var(--serif);font-weight:600;font-size:25px;color:#fff;line-height:1;}
476
+ .herway-root .nav-banner .nb-street{font-size:12.5px;font-weight:600;color:rgba(255,253,242,.85);margin-top:4px;}
477
+ .herway-root .nav-sheet{position:absolute;left:0;right:0;bottom:0;z-index:40;padding:18px 22px 28px;
478
+ background:var(--cream);border-radius:28px 28px 0 0;box-shadow:0 -16px 36px -20px rgba(26,40,33,.45);
479
+ display:flex;flex-direction:column;gap:14px;}
480
+ .herway-root .ns-row{display:flex;align-items:center;justify-content:space-between;gap:12px;}
481
+ .herway-root .ns-eta{font-family:var(--serif);font-weight:600;font-size:22px;color:var(--green);line-height:1.1;}
482
+ .herway-root .ns-meta{font-size:12.5px;font-weight:600;color:var(--ink-soft);margin-top:2px;}
483
+ .herway-root .ns-safe{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;color:var(--green);
484
+ background:rgba(60,122,94,.12);padding:7px 12px;border-radius:12px;white-space:nowrap;}
485
+ .herway-root .ns-safe svg{width:14px;height:14px;}
486
+
487
+ /* mini map (alert detail / add-alert location) */
488
+ .herway-root .map-mini{position:relative;height:172px;border-radius:20px;overflow:hidden;
489
+ border:1px solid rgba(34,48,39,.08);box-shadow:0 12px 26px -18px rgba(34,48,39,.55);}
490
+ .herway-root .map-mini .pin{z-index:9;}
491
+
492
+ /* success / sent screen */
493
+ .herway-root .sent{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
494
+ padding:40px 32px;text-align:center;}
495
+ .herway-root .sent-check{width:104px;height:104px;border-radius:50%;display:flex;align-items:center;justify-content:center;
496
+ background:linear-gradient(160deg,#4f9e79,var(--green-deep));box-shadow:0 22px 42px -14px rgba(26,64,49,.6);}
497
+ .herway-root .sent-check svg{width:50px;height:50px;color:#fff;}
498
+ .herway-root .sent-title{font-family:var(--serif);font-weight:600;font-size:26px;color:var(--green);margin-top:26px;letter-spacing:-.4px;line-height:1.1;}
499
+ .herway-root .sent-sub{font-size:12.5px;font-weight:500;color:var(--ink-soft);line-height:1.55;max-width:248px;margin-top:11px;}
500
+ .herway-root .sent-card{margin-top:22px;width:100%;background:#fff;border:1px solid rgba(34,48,39,.07);border-radius:18px;
501
+ padding:14px 16px;box-shadow:0 12px 26px -18px rgba(34,48,39,.5);text-align:left;display:flex;gap:12px;align-items:center;}
502
+
503
+ /* ============================================================
504
+ ONBOARDING \u2014 welcome, profile, account, verify, done
505
+ ============================================================ */
506
+ .herway-root .ob{position:absolute;inset:0;background:var(--cream);overflow:hidden;}
507
+ .herway-root .ob-scroll{position:absolute;inset:0;overflow:hidden;padding:66px 26px 120px;}
508
+
509
+ /* illustration panels */
510
+ .herway-root .ob-art{border-radius:20px;overflow:hidden;height:148px;box-shadow:0 14px 30px -20px rgba(34,48,39,.55);
511
+ background:var(--cream-2);}
512
+ .herway-root .ob-art img{width:100%;height:100%;object-fit:cover;display:block;}
513
+
514
+ /* welcome hero */
515
+ .herway-root .ob-hero{position:absolute;top:0;left:0;right:0;height:54%;overflow:hidden;background:var(--cream-2);}
516
+ .herway-root .ob-hero img{width:100%;height:100%;object-fit:cover;object-position:70% 16%;display:block;}
517
+ .herway-root .ob-hero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 58%,var(--cream));}
518
+ .herway-root .ob-welcome{position:absolute;left:0;right:0;bottom:0;padding:0 26px 32px;z-index:2;}
519
+ .herway-root .ob-wordmark{font-family:var(--serif);font-weight:900;font-size:40px;color:var(--green);letter-spacing:-1px;line-height:.95;}
520
+ .herway-root .ob-wordmark .em{color:var(--terra);}
521
+
522
+ /* shared onboarding type */
523
+ .herway-root .ob-title{font-family:var(--serif);font-weight:600;font-size:26px;color:var(--green);letter-spacing:-.4px;line-height:1.08;}
524
+ .herway-root .ob-sub{font-size:13px;font-weight:500;color:var(--ink-soft);line-height:1.5;margin-top:8px;}
525
+
526
+ /* welcome value points */
527
+ .herway-root .ob-points{display:flex;flex-direction:column;gap:11px;margin:18px 0 22px;}
528
+ .herway-root .ob-point{display:flex;align-items:center;gap:11px;font-size:13px;font-weight:600;color:var(--ink);}
529
+ .herway-root .ob-point .pi{width:30px;height:30px;border-radius:10px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:rgba(37,89,66,.1);color:var(--green);}
530
+ .herway-root .ob-point .pi svg{width:16px;height:16px;}
531
+
532
+ /* auth buttons */
533
+ .herway-root .auth-list{display:flex;flex-direction:column;gap:11px;}
534
+ .herway-root .auth-btn{display:flex;align-items:center;gap:12px;width:100%;padding:15px 18px;border-radius:16px;cursor:pointer;
535
+ background:#fff;border:1px solid rgba(34,48,39,.12);color:var(--ink);font-family:var(--san);font-size:14.5px;font-weight:700;
536
+ box-shadow:0 8px 18px -14px rgba(34,48,39,.5);}
537
+ .herway-root .auth-btn .ai{width:20px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center;}
538
+ .herway-root .auth-btn .ai svg{width:20px;height:20px;}
539
+ .herway-root .auth-btn .albl{flex:1;text-align:center;}
540
+ .herway-root .auth-btn .asp{width:20px;flex-shrink:0;}
541
+ .herway-root .auth-btn.dark{background:#111418;color:#fff;border-color:#111418;}
542
+ .herway-root .auth-btn.dark .ai svg{color:#fff;}
543
+ .herway-root .ob-or{display:flex;align-items:center;gap:12px;margin:16px 2px;color:var(--ink-soft);font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:1px;}
544
+ .herway-root .ob-or::before, .herway-root .ob-or::after{content:"";flex:1;height:1px;background:rgba(34,48,39,.12);}
545
+ .herway-root .ob-fine{font-size:11px;font-weight:500;color:var(--ink-soft);line-height:1.5;text-align:center;}
546
+ .herway-root .ob-fine a{color:var(--green);font-weight:700;text-decoration:none;}
547
+
548
+ /* eIDAS / verification */
549
+ .herway-root .eidas-badge{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border-radius:999px;
550
+ background:rgba(37,89,66,.1);color:var(--green);font-size:11px;font-weight:800;letter-spacing:.3px;}
551
+ .herway-root .eidas-badge svg{width:13px;height:13px;}
552
+ .herway-root .scan-frame{position:relative;height:204px;border-radius:20px;overflow:hidden;
553
+ background:linear-gradient(160deg,#1f4a39,#0d2218);display:flex;align-items:center;justify-content:center;
554
+ box-shadow:inset 0 0 44px rgba(0,0,0,.45);}
555
+ .herway-root .scan-card{width:218px;height:138px;border-radius:14px;background:linear-gradient(150deg,#f7f1df,#e7dcc0);
556
+ position:relative;box-shadow:0 16px 32px -10px rgba(0,0,0,.55);padding:15px;display:flex;gap:13px;}
557
+ .herway-root .scan-card .photo{width:46px;height:60px;border-radius:7px;background:linear-gradient(160deg,#3c7a5e,#1a4031);flex-shrink:0;}
558
+ .herway-root .scan-card .lines{flex:1;display:flex;flex-direction:column;gap:8px;padding-top:5px;}
559
+ .herway-root .scan-card .lines i{height:7px;border-radius:3px;background:rgba(34,48,39,.2);display:block;}
560
+ .herway-root .scan-card .lines i:nth-child(1){width:82%;}
561
+ .herway-root .scan-card .lines i:nth-child(2){width:54%;}
562
+ .herway-root .scan-card .lines i:nth-child(3){width:70%;background:rgba(34,48,39,.1);}
563
+ .herway-root .scan-card .lines i:nth-child(4){width:40%;background:rgba(34,48,39,.1);}
564
+ .herway-root .scan-corners span{position:absolute;width:26px;height:26px;border:3px solid rgba(255,255,255,.9);}
565
+ .herway-root .scan-corners .tl{top:18px;left:18px;border-right:0;border-bottom:0;border-radius:7px 0 0 0;}
566
+ .herway-root .scan-corners .tr{top:18px;right:18px;border-left:0;border-bottom:0;border-radius:0 7px 0 0;}
567
+ .herway-root .scan-corners .bl{bottom:18px;left:18px;border-right:0;border-top:0;border-radius:0 0 0 7px;}
568
+ .herway-root .scan-corners .br{bottom:18px;right:18px;border-left:0;border-top:0;border-radius:0 0 7px 0;}
569
+ .herway-root .scan-beam{position:absolute;left:30px;right:30px;top:48%;height:2px;
570
+ background:linear-gradient(90deg,transparent,rgba(120,255,200,.95),transparent);
571
+ box-shadow:0 0 14px rgba(120,255,200,.8);}
572
+ .herway-root .liveness{position:relative;width:96px;height:96px;border-radius:50%;flex-shrink:0;
573
+ background:linear-gradient(160deg,#f3a6bb,var(--orange));display:flex;align-items:center;justify-content:center;
574
+ box-shadow:0 14px 28px -12px rgba(0,0,0,.4);}
575
+ .herway-root .liveness::before{content:"";position:absolute;inset:-7px;border-radius:50%;border:2.5px dashed rgba(37,89,66,.45);}
576
+ .herway-root .liveness svg{width:50px;height:50px;color:#fff;}
577
+ .herway-root .verify-steps{background:#fff;border:1px solid rgba(34,48,39,.07);border-radius:18px;padding:4px 16px;
578
+ box-shadow:0 10px 24px -18px rgba(34,48,39,.45);}
579
+ .herway-root .verify-step{display:flex;align-items:center;gap:12px;padding:13px 0;}
580
+ .herway-root .verify-step + .verify-step{border-top:1px solid rgba(34,48,39,.07);}
581
+ .herway-root .vs-num{width:26px;height:26px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;}
582
+ .herway-root .vs-num svg{width:15px;height:15px;}
583
+ .herway-root .vs-num.done{background:linear-gradient(155deg,#4f9e79,var(--green));color:#fff;}
584
+ .herway-root .vs-num.active{background:rgba(233,133,68,.18);color:var(--orange);border:1.5px solid var(--orange);}
585
+ .herway-root .vs-num.idle{background:rgba(34,48,39,.08);color:var(--ink-soft);}
586
+ .herway-root .vs-main{flex:1;min-width:0;}
587
+ .herway-root .vs-ttl{font-size:13.5px;font-weight:700;color:var(--ink);}
588
+ .herway-root .vs-sub{font-size:11px;font-weight:600;color:var(--ink-soft);margin-top:1px;}
589
+ .herway-root .privacy-note{display:flex;gap:9px;align-items:flex-start;padding:12px 14px;border-radius:14px;
590
+ background:rgba(37,89,66,.06);font-size:11px;font-weight:600;color:var(--ink-soft);line-height:1.45;}
591
+ .herway-root .privacy-note svg{width:15px;height:15px;color:var(--green);flex-shrink:0;margin-top:1px;}
592
+
593
+ /* verified summary chips (done) */
594
+ .herway-root .vchips{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:20px;}
595
+ .herway-root .vchip{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;
596
+ background:rgba(60,122,94,.12);color:var(--green);font-size:11.5px;font-weight:700;}
597
+ .herway-root .vchip svg{width:13px;height:13px;}
598
+
599
+
600
+
601
+ /* ---- app shell: center the single phone on a soft stage ---- */
602
+
603
+ .herway-root .stage { display: flex; flex-direction: column; align-items: center; gap: 16px; }
604
+ .herway-root .stage-tag {
605
+ font-family: var(--serif); font-style: italic; font-weight: 500;
606
+ font-size: 15px; color: var(--ink-soft);
607
+ }
608
+
609
+ /* the phone is interactive here, not an iframe \u2014 make tappable bits show it */
610
+ .herway-root .phone .nav-seg, .herway-root .phone .fab, .herway-root .phone .chip, .herway-root .phone .cat-tile, .herway-root .phone .sev, .herway-root .phone .route-opt, .herway-root .phone .auth-btn, .herway-root .phone .rcard, .herway-root .phone .row, .herway-root .phone .tb-back, .herway-root .phone .filt-fab, .herway-root .phone .fm-opt, .herway-root .phone .fm-pill, .herway-root .phone .rate svg, .herway-root .phone .opt, .herway-root .phone button, .herway-root .phone .loc-row { cursor: pointer; }
611
+
612
+ /* verification notification banner (reports feed) */
613
+ .herway-root .verify-banner {
614
+ display: flex; align-items: center; gap: 12px; cursor: pointer;
615
+ background: linear-gradient(155deg, rgba(60,122,94,.12), rgba(37,89,66,.08));
616
+ border: 1px solid rgba(37,89,66,.18); border-radius: 18px; padding: 13px 14px;
617
+ }
618
+ .herway-root .verify-banner .vb-ic {
619
+ width: 38px; height: 38px; border-radius: 12px; flex-shrink: 0;
620
+ display: flex; align-items: center; justify-content: center; color: #fff;
621
+ background: linear-gradient(155deg, #4f9e79, var(--green-deep));
622
+ }
623
+ .herway-root .verify-banner .vb-ic svg { width: 20px; height: 20px; }
624
+ .herway-root .verify-banner .vb-main { flex: 1; min-width: 0; }
625
+ .herway-root .verify-banner .vb-ttl { font-size: 13.5px; font-weight: 700; color: var(--green); }
626
+ .herway-root .verify-banner .vb-sub { font-size: 11.5px; font-weight: 600; color: var(--ink-soft); margin-top: 2px; }
627
+ .herway-root .verify-banner > svg { width: 18px; height: 18px; color: rgba(34,48,39,.3); }
628
+
629
+ /* ===== team revisions: colour scheme ===== */
630
+
631
+ /* severity: red (most) > orange > yellow (least) */
632
+ .herway-root .pin.hi .body, .herway-root .rcard.hi .ricon { background: linear-gradient(155deg,#e2503e,#c52f1d); }
633
+ .herway-root .pin.lo .body, .herway-root .rcard.lo .ricon { background: linear-gradient(155deg,#f4cf63,#e9a83c); }
634
+ .herway-root .pin.safe .body, .herway-root .rcard.safe .ricon { background: linear-gradient(155deg,#4f9e79,var(--green)); }
635
+ .herway-root .rtag.hi { background: rgba(210,52,33,.13); color: #c02d1c; }
636
+ .herway-root .rtag.lo { background: rgba(233,168,60,.20); color: #a9781c; }
637
+ .herway-root .sev.hi.on { background: rgba(210,52,33,.14); border-color: #c52f1d; color: #c02d1c; }
638
+ .herway-root .sev.lo.on { background: rgba(233,168,60,.20); border-color: #e9a83c; color: #a9781c; }
639
+
640
+ /* planetary action buttons keep their distinct colours (see herway.css:
641
+ alert=terra, route=orange, review=pink, SOS=red) \u2014 only the report
642
+ markers/feed are colour-coded by severity. */
643
+
644
+ /* category tiles: one neutral colour for every type (severity decides colour later) */
645
+ .herway-root .cat-tile .ci { background: linear-gradient(155deg,#6fae8c,var(--green-soft)) !important; }
646
+
647
+ /* iPhone side buttons: three on the left, power on the right */
648
+ .herway-root .phone::before {
649
+ content: ""; position: absolute; right: -3px; top: 196px;
650
+ width: 3px; height: 78px; border-radius: 3px; background: #1c1c20;
651
+ }
652
+
653
+ /* static baked-tile map (image + overlays \u2014 no map engine) */
654
+ .herway-root .smap { z-index: 0; overflow: hidden; }
655
+ .herway-root .smap-full { position: absolute; inset: 0; }
656
+ .herway-root .smap-mini { position: absolute; inset: 0; border-radius: inherit; }
657
+ .herway-root .smap-img {
658
+ position: absolute; inset: 0; width: 100%; height: 100%;
659
+ object-fit: fill; user-select: none; -webkit-user-drag: none;
660
+ }
661
+ .herway-root .smap-route { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 7; pointer-events: none; }
662
+ .herway-root .smap-radius {
663
+ position: absolute; transform: translate(-50%, -50%); aspect-ratio: 1; z-index: 6;
664
+ border-radius: 50%; border: 1.5px dashed rgba(37, 89, 66, .5); background: rgba(60, 122, 94, .10);
665
+ }
666
+ .herway-root .smap-attr {
667
+ position: absolute; right: 6px; bottom: 5px; z-index: 6;
668
+ font-size: 8.5px; font-weight: 600; color: rgba(20, 30, 24, .5);
669
+ background: rgba(255, 253, 242, .62); padding: 1px 5px; border-radius: 5px;
670
+ }
671
+ .herway-root .smap-legend {
672
+ position: absolute; left: 14px; bottom: 54px; z-index: 20;
673
+ display: flex; flex-direction: column; align-items: flex-start; gap: 6px;
674
+ padding: 10px 12px; border-radius: 14px;
675
+ font-size: 10.5px; font-weight: 700; color: var(--ink);
676
+ }
677
+ .herway-root .smap-legend span { display: flex; align-items: center; gap: 7px; }
678
+ .herway-root .smap-legend i.lg { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
679
+
680
+ /* map scale bar */
681
+ .herway-root .smap-scale {
682
+ position: absolute; left: 14px; bottom: 18px; z-index: 20;
683
+ display: flex; flex-direction: column; align-items: flex-start; gap: 3px;
684
+ }
685
+ .herway-root .smap-scale .ss-lbl {
686
+ font-size: 9.5px; font-weight: 800; color: #28382e;
687
+ text-shadow: 0 1px 2px rgba(255, 253, 242, .9);
688
+ }
689
+ .herway-root .smap-scale .ss-bar {
690
+ width: 100%; height: 6px; box-sizing: border-box;
691
+ border: 2px solid #28382e; border-top: none;
692
+ box-shadow: 0 1px 2px rgba(255, 253, 242, .7);
693
+ }
694
+ .herway-root .smap-legend i.lg.hi { background: linear-gradient(160deg, #e2503e, #c52f1d); }
695
+ .herway-root .smap-legend i.lg.md { background: linear-gradient(160deg, #f0a05a, var(--orange)); }
696
+ .herway-root .smap-legend i.lg.lo { background: linear-gradient(160deg, #f4cf63, #e9a83c); }
697
+ .herway-root .smap-legend i.lg.safe { background: linear-gradient(160deg, #4f9e79, var(--green)); }
698
+
699
+ .herway-root .map-dot {
700
+ width: 14px; height: 14px; border-radius: 50%;
701
+ background: linear-gradient(160deg, #4f9e79, var(--green));
702
+ box-shadow: 0 0 0 3px #fff, 0 3px 8px rgba(26,64,49,.45);
703
+ }
704
+
705
+ /* user location blip \u2014 static dot with a soft accuracy ring */
706
+ .herway-root .user-blip {
707
+ width: 16px; height: 16px; border-radius: 50%;
708
+ background: linear-gradient(160deg, #4f9e79, var(--green-deep));
709
+ box-shadow: 0 0 0 4px #fff, 0 0 0 14px rgba(60,122,94,.18), 0 4px 10px rgba(26,64,49,.5);
710
+ }
711
+
712
+ /* ---- mobile-style screen transitions ---- */
713
+ .herway-root .layer { position: absolute; inset: 0; will-change: transform, opacity; }
714
+ .herway-root .anim-enter { animation: aEnter .34s cubic-bezier(.32,.72,0,1) both; }
715
+ .herway-root .anim-leave { animation: aLeave .34s cubic-bezier(.32,.72,0,1) both; }
716
+ .herway-root .anim-enter-pop { animation: aEnterPop .34s cubic-bezier(.32,.72,0,1) both; }
717
+ .herway-root .anim-leave-pop { animation: aLeavePop .34s cubic-bezier(.32,.72,0,1) both; box-shadow: -18px 0 40px -12px rgba(26,40,33,.35); }
718
+ @keyframes aEnter { from { transform: translateX(var(--sx)); } to { transform: translateX(0); } }
719
+ @keyframes aLeave { from { transform: translateX(0); opacity: 1; } to { transform: translateX(calc(var(--sx) * -0.26)); opacity: .55; } }
720
+ @keyframes aEnterPop { from { transform: translateX(-26%); opacity: .7; } to { transform: translateX(0); opacity: 1; } }
721
+ @keyframes aLeavePop { from { transform: translateX(0); } to { transform: translateX(100%); } }
722
+
723
+ /* ---- top nav: single sliding pill (3 segments) ---- */
724
+ .herway-root .nav.nav3 { width: 188px; }
725
+ .herway-root .nav.slide .nav-seg.on::before { display: none; }
726
+ .herway-root .nav-ind {
727
+ position: absolute; top: 6px; left: 6px;
728
+ width: 56px; height: 42px; border-radius: 18px; z-index: 1;
729
+ background: linear-gradient(160deg, var(--green-soft), var(--green-deep));
730
+ box-shadow: 0 1px 1px rgba(255,255,255,.45) inset, 0 6px 14px -6px rgba(26,64,49,.7);
731
+ transform: translateX(calc(var(--i) * 60px));
732
+ transition: transform .34s cubic-bezier(.32,.72,0,1);
733
+ }
734
+ .herway-root .nav-persist { animation: navFade .28s ease both; }
735
+ @keyframes navFade { from { opacity: 0; } to { opacity: 1; } }
736
+
737
+ /* ---- search: island (collapsed) \u2192 spotlight bar (expanded) ---- */
738
+ /* island + nav are centred together as one group (no overlap) */
739
+ .herway-root .nav-group {
740
+ position: absolute; top: 60px; left: 50%; transform: translateX(-50%); z-index: 50;
741
+ display: flex; align-items: center; gap: 10px;
742
+ }
743
+ .herway-root .nav-group .nav { position: static; transform: none; top: auto; left: auto; }
744
+
745
+ /* island matches the nav bar's height, radius and glass border */
746
+ .herway-root .search-island {
747
+ width: 54px; height: 54px; border-radius: 26px; cursor: pointer; flex-shrink: 0;
748
+ display: flex; align-items: center; justify-content: center; color: var(--green);
749
+ }
750
+ .herway-root .search-island svg { width: 22px; height: 22px; }
751
+
752
+ .herway-root .spotlight {
753
+ position: absolute; top: 60px; left: 16px; z-index: 50;
754
+ width: calc(100% - 96px); height: 54px; border-radius: 26px; padding: 0 18px;
755
+ display: flex; align-items: center; gap: 10px; overflow: hidden;
756
+ transform-origin: left center;
757
+ animation: spotOpen .52s cubic-bezier(.22,.7,0,1) both;
758
+ }
759
+ /* bar visibly grows out from the island's spot on the left */
760
+ @keyframes spotOpen {
761
+ 0% { width: 54px; opacity: .35; }
762
+ 100% { width: calc(100% - 96px); opacity: 1; }
763
+ }
764
+ .herway-root .spotlight svg { width: 20px; height: 20px; color: var(--ink-soft); flex-shrink: 0; }
765
+ .herway-root .spotlight input {
766
+ flex: 1; min-width: 0; border: none; outline: none; background: transparent;
767
+ font-family: var(--san); font-size: 15px; font-weight: 600; color: var(--ink);
768
+ }
769
+ .herway-root .spotlight input::placeholder { color: rgba(34,48,39,.34); font-weight: 500; }
770
+
771
+ /* X closes search and returns to the map */
772
+ .herway-root .spot-close {
773
+ position: absolute; top: 60px; right: 16px; z-index: 50;
774
+ width: 54px; height: 54px; border-radius: 26px; cursor: pointer;
775
+ display: flex; align-items: center; justify-content: center; color: var(--green);
776
+ transform-origin: center;
777
+ animation: spotX .34s cubic-bezier(.22,.7,0,1) .2s both;
778
+ }
779
+ .herway-root .spot-close svg { width: 21px; height: 21px; }
780
+ @keyframes spotX { 0% { opacity: 0; transform: scale(.5) rotate(-30deg); } 100% { opacity: 1; transform: scale(1) rotate(0); } }
781
+
782
+ /* ---- desktop: keep the phone framed; scale down on short viewports ---- */
783
+
784
+ /* ---- mobile: drop the device bezel, run fullscreen like a real app ---- */
785
+
786
+ /* allow inner scroll regions to actually scroll in the live app */
787
+ .herway-root .sheet-scroll, .herway-root .pf-scroll, .herway-root .flow-scroll, .herway-root .ob-scroll {
788
+ overflow-y: auto !important;
789
+ -webkit-overflow-scrolling: touch;
790
+ scrollbar-width: none;
791
+ }
792
+ .herway-root .sheet-scroll::-webkit-scrollbar, .herway-root .pf-scroll::-webkit-scrollbar, .herway-root .flow-scroll::-webkit-scrollbar, .herway-root .ob-scroll::-webkit-scrollbar { display: none; }
793
+ `;import{jsx as Ht}from"react/jsx-runtime";function Rr(){Cr(()=>{if(typeof document>"u"||document.querySelector("style[data-herway-css]"))return;let e=document.createElement("style");e.setAttribute("data-herway-css",""),e.textContent=Ft,document.head.appendChild(e)},[])}function zr({style:e,className:r=""}){return Rr(),Ht("div",{className:`herway-root ${r}`,style:e,children:Ht(Ot,{})})}var Vi=zr;export{zr as HerWayDemo,Vi as default};
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "herway-demo",
3
+ "version": "1.0.0",
4
+ "description": "Self-contained ESM React component bundle.",
5
+ "license": "UNLICENSED",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ },
15
+ "./dist/map/*": "./dist/map/*"
16
+ },
17
+ "files": ["dist"],
18
+ "sideEffects": false,
19
+ "scripts": {
20
+ "build": "node build.mjs",
21
+ "serve": "node build.mjs && npx -y serve -l 8000 .",
22
+ "prepublishOnly": "node build.mjs"
23
+ },
24
+ "peerDependencies": {
25
+ "react": ">=18",
26
+ "react-dom": ">=18"
27
+ },
28
+ "devDependencies": {
29
+ "esbuild": "^0.24.0",
30
+ "postcss": "^8.4.49",
31
+ "postcss-prefix-selector": "^2.1.0",
32
+ "react": "^19.0.0",
33
+ "react-dom": "^19.0.0",
34
+ "typescript": "^5.7.3"
35
+ }
36
+ }