Geolocation: Custom Styling
Personalize website styling based on localized user time.
addEventListener('fetch', event => {  event.respondWith(handleRequest(event.request));
});
let grads = [  [    { color: '00000c', position: 0 },    { color: '00000c', position: 0 },  ],  [    { color: '020111', position: 85 },    { color: '191621', position: 100 },  ],  [    { color: '020111', position: 60 },    { color: '20202c', position: 100 },  ],  [    { color: '020111', position: 10 },    { color: '3a3a52', position: 100 },  ],  [    { color: '20202c', position: 0 },    { color: '515175', position: 100 },  ],  [    { color: '40405c', position: 0 },    { color: '6f71aa', position: 80 },    { color: '8a76ab', position: 100 },  ],  [    { color: '4a4969', position: 0 },    { color: '7072ab', position: 50 },    { color: 'cd82a0', position: 100 },  ],  [    { color: '757abf', position: 0 },    { color: '8583be', position: 60 },    { color: 'eab0d1', position: 100 },  ],  [    { color: '82addb', position: 0 },    { color: 'ebb2b1', position: 100 },  ],  [    { color: '94c5f8', position: 1 },    { color: 'a6e6ff', position: 70 },    { color: 'b1b5ea', position: 100 },  ],  [    { color: 'b7eaff', position: 0 },    { color: '94dfff', position: 100 },  ],  [    { color: '9be2fe', position: 0 },    { color: '67d1fb', position: 100 },  ],  [    { color: '90dffe', position: 0 },    { color: '38a3d1', position: 100 },  ],  [    { color: '57c1eb', position: 0 },    { color: '246fa8', position: 100 },  ],  [    { color: '2d91c2', position: 0 },    { color: '1e528e', position: 100 },  ],  [    { color: '2473ab', position: 0 },    { color: '1e528e', position: 70 },    { color: '5b7983', position: 100 },  ],  [    { color: '1e528e', position: 0 },    { color: '265889', position: 50 },    { color: '9da671', position: 100 },  ],  [    { color: '1e528e', position: 0 },    { color: '728a7c', position: 50 },    { color: 'e9ce5d', position: 100 },  ],  [    { color: '154277', position: 0 },    { color: '576e71', position: 30 },    { color: 'e1c45e', position: 70 },    { color: 'b26339', position: 100 },  ],  [    { color: '163C52', position: 0 },    { color: '4F4F47', position: 30 },    { color: 'C5752D', position: 60 },    { color: 'B7490F', position: 80 },    { color: '2F1107', position: 100 },  ],  [    { color: '071B26', position: 0 },    { color: '071B26', position: 30 },    { color: '8A3B12', position: 80 },    { color: '240E03', position: 100 },  ],  [    { color: '010A10', position: 30 },    { color: '59230B', position: 80 },    { color: '2F1107', position: 100 },  ],  [    { color: '090401', position: 50 },    { color: '4B1D06', position: 100 },  ],  [    { color: '00000c', position: 80 },    { color: '150800', position: 100 },  ],
];
function toCSSGradient(hour) {  let css = 'linear-gradient(to bottom,';  const data = grads[hour];  const len = data.length;
  for (let i = 0; i < len; i++) {    const item = data[i];    css += ` #${item.color} ${item.position}%`;    if (i < len - 1) css += ',';  }  return css + ')';
}
async function handleRequest(request) {  let html_content = '';  let html_style = `  html{width:100vw; height:100vh;}  body{padding:0; margin:0 !important;height:100%;}  #container {    display: flex;    flex-direction:column;    align-items: center;    justify-content: center;    height: 100%;    color:white;    font-family:sans-serif;  }`;
  const timezone = request.cf.timezone;  let localized_date = new Date(new Date().toLocaleString('en-US', { timeZone: timezone }));  let hour = localized_date.getHours();  let minutes = localized_date.getMinutes();
  html_content += '<h1>' + hour + ':' + minutes + '</h1>';  html_content += '<p>' + timezone + '<br/></p>';  html_style += 'body{background:' + toCSSGradient(hour) + ';}';
  let html = `<!DOCTYPE html><head>  <title>Geolocation: Customized Design</title></head><body>  <style> ${html_style}</style>  <div id="container">    ${html_content}  </div></body>`;
  return new Response(html, {    headers: {      'content-type': 'text/html;charset=UTF-8',    },  });
}