Dashboard and Admin Interfaces

Public Hotline Operations Command Center

Complete an operations command center for a public hotline scenario: includes real content, interactive controls, clear status feedback, and responsive layouts.

Dashboard and Admin InterfacesOperations DashboardHTMLCSS GridJavaScript
With JavaScript enabled, you can edit, run, and save this example. The fixed source is as follows:
<!doctype html>
<html lang="en" dir="ltr">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Public Hotline Operations Command Center</title>
  <style>
    :root { --ink:#17241d; --paper:#f3f0e7; --accent:#af4f45; --secondary:#9eb49f; --line:color-mix(in srgb, var(--ink) 18%, transparent); --shadow:0 24px 60px color-mix(in srgb, var(--ink) 16%, transparent); color-scheme:light; }
    * { box-sizing:border-box; }
    html { min-width:320px; background:var(--paper); }
    body { min-height:100vh; margin:0; overflow-x:hidden; color:var(--ink); font-family:Didot,"Songti SC",serif; background:linear-gradient(30deg,transparent 48%,color-mix(in srgb,var(--accent) 9%,transparent) 49% 51%,transparent 52%),var(--paper);background-size:52px 90px; }
    button,input,select,textarea { color:inherit; font:inherit; }
    button,[role="button"],input,select,textarea { accent-color:var(--accent); }
    button { cursor:pointer; }
    button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible { outline:3px solid var(--accent); outline-offset:3px; }
    [hidden] { display:none !important; }
    @media (max-width:700px) { .mast h1 { line-height:1.08 !important; letter-spacing:-.035em !important; overflow-wrap:anywhere; } }
    @media (prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto !important; animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; } }
    .page{width:min(1040px,calc(100% - 36px));margin:auto;padding:64px 0}.mast{display:grid;justify-items:center;text-align:center;border-block:3px double var(--accent);padding:26px;gap:20px;margin-bottom:32px}.mast h1{font-family:Didot,"Songti SC",serif;font-weight:700;font-size:clamp(38px,8vw,86px);letter-spacing:.035em;margin:0;line-height:1}.eyebrow{display:block;color:var(--accent);font:800 11px/1 ui-monospace,monospace;letter-spacing:.3em}.intro{max-width:600px;margin-inline:auto;line-height:1.8}.scenario{padding:8px 26px;border-inline:1px solid var(--accent);letter-spacing:.16em}.demo{border:4px double var(--accent);border-radius:0;clip-path:polygon(24px 0,calc(100% - 24px) 0,100% 24px,100% calc(100% - 24px),calc(100% - 24px) 100%,24px 100%,0 calc(100% - 24px),0 24px);position:relative;min-height:440px;overflow:hidden;padding:clamp(28px,5vw,60px);background:var(--paper)}@media(max-width:700px){.page{width:calc(100% - 20px);padding:24px 0}.mast{padding:18px}.demo{padding:18px}}
    .panel{padding:24px;border-block:1px solid var(--ink);background:transparent}.stack{display:grid;gap:22px}.row{display:flex;flex-wrap:wrap;gap:16px}.action{padding:8px 0;border:0;border-bottom:1px solid currentColor;background:transparent;letter-spacing:.08em}.action.primary,.action.is-active{color:var(--accent);border-bottom-width:4px}.status{min-height:28px;margin-top:20px;font-style:italic}.metric{font-family:Didot,serif;font-size:clamp(38px,8vw,76px)}.muted{max-width:54ch;line-height:1.8}.meter{position:relative;height:3px;background:var(--line)}.meter>i{position:absolute;inset:0 auto 0 0;background:var(--accent)}.chip{padding-bottom:3px;border-bottom:1px solid var(--ink);font-size:13px}
    .composition-gallery{margin:0;padding:clamp(8px,2vw,18px);border:1px solid var(--ink);background:color-mix(in srgb,var(--paper) 78%,transparent)}.gallery-caption{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center;padding:15px 4px 2px;font-size:12px}.gallery-caption::before,.gallery-caption::after{content:"";height:1px;background:var(--line)}.gallery-caption strong{font:800 11px/1.2 ui-monospace,monospace;letter-spacing:.16em;text-transform:uppercase}.composition-gallery .demo{box-shadow:none}.composition-gallery .demo::before{content:"";position:absolute;inset:10px;border:1px dashed color-mix(in srgb,var(--accent) 36%,transparent);pointer-events:none}
    .civic-command-board{display:grid;gap:16px;padding:22px;border-radius:24px;color:#f2fff8;background:linear-gradient(145deg,#081915,#0f3228)}.civic-command-board>header{display:flex;justify-content:space-between;gap:18px;align-items:end}.civic-command-board h2{margin:.25em 0}.civic-command-board output{padding:8px 12px;border:1px solid #34574d;border-radius:999px;font:700 14px/1.2 ui-monospace,monospace}.civic-command-grid{display:grid;grid-template-columns:170px minmax(0,1fr) 240px;gap:14px}.civic-lane-switcher{display:grid;gap:8px}.civic-lane-switcher button{display:grid;gap:5px;padding:14px;border:1px solid #33564a;border-radius:16px;color:inherit;text-align:left;background:#ffffff0a}.civic-lane-switcher button[aria-pressed="true"]{background:#cbf76f;color:#0e1d17;border-color:#cbf76f}.civic-alerts{display:grid;gap:10px;padding:0;margin:0;list-style:none}.civic-alerts li{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:15px;border:1px solid #33564a;border-radius:18px;background:#ffffff08}.civic-alerts li>div{display:grid;grid-template-columns:12px 1fr;gap:12px;align-items:start}.civic-alerts i{width:10px;height:10px;margin-top:6px;border-radius:50%;background:#7ee0b5}.civic-alerts li[data-severity="0"] i{background:#ff7c70}.civic-alerts li[data-severity="1"] i{background:#ffd266}.civic-alerts span{display:grid;gap:5px}.civic-alerts button{padding:10px 12px;border:1px solid #55786d;border-radius:999px;color:inherit;background:transparent}.civic-command-aside{display:grid;align-content:start;gap:10px;padding:16px;border-left:4px solid #cbf76f;background:#ffffff10}.civic-command-aside ol{display:grid;gap:8px;padding-left:18px;margin:0}@media(max-width:760px){.civic-command-board>header{align-items:stretch;flex-direction:column}.civic-command-grid{grid-template-columns:1fr}.civic-lane-switcher{grid-auto-flow:column;overflow:auto}}.workflow-compare{display:grid;grid-template-columns:minmax(230px,.55fr) minmax(0,1.45fr);gap:18px}.compare-stage{display:grid;gap:12px;min-width:0}.compare-stage>header{display:flex;justify-content:space-between;gap:16px;align-items:end}.compare-stage h2{margin:.2em 0}.compare-core{--compare-split:50%;min-width:0;padding:14px;clip-path:inset(0 calc(100% - var(--compare-split)) 0 0);outline:1px dashed var(--accent);outline-offset:-8px;transition:clip-path .25s,filter .25s}.compare-core[data-compare-channel="B"]{filter:hue-rotate(32deg) saturate(1.15)}.compare-controls{display:grid;align-content:start;gap:16px;padding:20px;border:1px solid var(--line);border-radius:24px 4px 24px 4px;background:var(--paper)}.compare-controls fieldset,.compare-controls>label{display:grid;gap:8px}.compare-controls input[type="range"]{width:100%}#workflowCompareShelf{display:grid;gap:6px;padding:0;margin:0;list-style:none}#workflowCompareShelf li{display:grid;grid-template-columns:auto 1fr auto;gap:8px;padding:9px;border-top:1px solid var(--line);font-size:12px}@media(max-width:900px){.workflow-compare{grid-template-columns:1fr}.compare-stage{order:-1}.compare-core{clip-path:none;border-left:8px solid var(--accent)}}
  </style>
</head>
<body data-aesthetic="art-deco" data-composition="gallery-frame">
  <main class="page">
    <header class="mast"><div><span class="eyebrow">art-deco / Operations Command Center / INTERMEDIATE</span><h1>Public Hotline Operations Command Center</h1><p class="intro">Complete an operations command center for a public hotline scenario: includes real content, interactive controls, clear status feedback, and responsive layouts.</p></div><span class="scenario">Public Hotline</span></header>
    <figure class="composition-gallery"><section class="demo" aria-label="Interactive area for the public hotline operations command center"><div class="workflow-compare"><form id="workflowCompareControls" class="compare-controls"><fieldset><legend>Reference Channel</legend><label><input type="radio" name="workflowChannel" value="A" checked>A · Public Hotline Monitoring View</label><label><input type="radio" name="workflowChannel" value="B">B · Public Hotline Handling View</label></fieldset><label>Alert threshold weight<input id="workflowCompareWeight" type="range" min="10" max="90" value="50"><output id="workflowCompareWeightValue">50 points</output></label><label><input id="workflowCompareFreeze" type="checkbox">Freeze current version</label><button id="workflowCompareCapture" class="action primary" type="button">Sampling and Apply Panel</button><ol id="workflowCompareShelf" aria-label="Version Sampling Record"></ol></form><section class="compare-stage"><header><span class="eyebrow">Public Hotline COMPARE</span><h2>Public Hotline Dual-Version Comparison</h2><output id="workflowCompareLive">Version A waiting for sampling</output></header><section id="workflowCore" class="workflow-core compare-core" data-compare-channel="A" style="--compare-split:50%"><!-- 11DZ_CORE_START:dashboards-admin-command-center --><div class="civic-command-board"><header><div><span class="eyebrow">CIVIC LINE COMMAND</span><h2>Public Hotline Line Dispatch Panel</h2></div><output id="commandLaneMode">Current Line: Public Hotline Collaboration</output></header><div class="civic-command-grid"><nav class="civic-lane-switcher" aria-label="Route Switch"><button type="button" data-command-lane="0" aria-pressed="true" data-core-bridge="dashboards-admin-command-center"><strong>Public Hotline Collaboration</strong><small>Main Corridor</small></button><button type="button" data-command-lane="1" aria-pressed="false"><strong>Public hotline progress</strong><small>Transfer segment</small></button><button type="button" data-command-lane="2" aria-pressed="false"><strong>Public Hotline Reminder</strong><small>Supply segment</small></button><button type="button" data-command-lane="3" aria-pressed="false"><strong>Public Hotline Collection</strong><small>Night Patrol Section</small></button></nav><ol id="commandAlerts" class="civic-alerts"><li data-lane="0" data-severity="0"><div><i aria-hidden="true"></i><span><b>Public Hotline Collaboration</b><small>Temporary Extra Bus Needed</small></span></div><button type="button">Dispatch vehicle</button></li><li data-lane="1" data-severity="1"><div><i aria-hidden="true"></i><span><b>Public hotline progress</b><small>Site Queue Fluctuations</small></span></div><button type="button">Diversion</button></li><li data-lane="2" data-severity="2"><div><i aria-hidden="true"></i><span><b>Public Hotline Reminder</b><small>Inspection upload normal</small></span></div><button type="button">Archive</button></li><li data-lane="3" data-severity="0"><div><i aria-hidden="true"></i><span><b>Public Hotline Collection</b><small>Temporary Extra Bus Needed</small></span></div><button type="button">Dispatch vehicle</button></li><li data-lane="0" data-severity="1"><div><i aria-hidden="true"></i><span><b>Public hotline overview</b><small>Site Queue Fluctuations</small></span></div><button type="button">Diversion</button></li><li data-lane="1" data-severity="2"><div><i aria-hidden="true"></i><span><b>Public Hotline Plan</b><small>Inspection upload normal</small></span></div><button type="button">Archive</button></li></ol><aside class="civic-command-aside"><strong id="commandQueueCount">Visible tickets 2 items</strong><p id="commandQueueHint">Handle the highest-priority tickets at the front of the current line first.</p><ol id="commandDispatchLog"><li>Waiting for route dispatch action</li></ol></aside></div></div><!-- 11DZ_CORE_END --></section></section></div><p id="status" class="status" role="status" aria-live="polite"></p></section><figcaption class="gallery-caption"><strong>Public Hotline / GALLERY 03</strong></figcaption></figure>
  </main>
  <script>
    'use strict';
    const statusOutput = document.querySelector('#status');
    const announce = message => { statusOutput.textContent = message; };
    /* 11DZ_CORE_SCRIPT_START:dashboards-admin-command-center */
const civicLaneButtons=[...document.querySelectorAll('[data-command-lane]')];const civicAlerts=[...document.querySelectorAll('#commandAlerts li')];const civicDispatchLog=document.querySelector('#commandDispatchLog');let civicLane=0;function syncCivicBoard(){const visible=civicAlerts.filter(item=>Number(item.dataset.lane)===civicLane&&!item.hidden);document.querySelector('#commandLaneMode').textContent='Current line:'+civicLaneButtons[civicLane].querySelector('strong').textContent;document.querySelector('#commandQueueCount').textContent='Visible tickets '+visible.length+' item';document.querySelector('#commandQueueHint').textContent=visible.some(item=>item.dataset.severity==='0')?'Handle the highest-priority tickets at the front of the current line first.':'This line is mainly for inspections and queue organization.';}civicLaneButtons.forEach((button,index)=>button.addEventListener('click',()=>{civicLane=index;civicLaneButtons.forEach(item=>item.setAttribute('aria-pressed',String(item===button)));civicAlerts.forEach(item=>{item.hidden=Number(item.dataset.lane)!==civicLane;});syncCivicBoard();announce('Switched to '+button.querySelector('strong').textContent);}));civicAlerts.forEach(item=>item.querySelector('button').addEventListener('click',()=>{const laneLabel=civicLaneButtons[civicLane].querySelector('strong').textContent;const entry=document.createElement('li');entry.textContent=laneLabel+' · '+item.querySelector('b').textContent+' · '+item.querySelector('button').textContent;const empty=civicDispatchLog.querySelector('li')?.textContent==='Waiting for route dispatch action';if(empty)civicDispatchLog.replaceChildren(entry);else civicDispatchLog.prepend(entry);item.remove();syncCivicBoard();announce('Processed '+laneLabel+' Ticket');}));civicAlerts.forEach((item,index)=>{item.hidden=Number(item.dataset.lane)!==(index < 2 ? 0 : Number(item.dataset.lane));});civicAlerts.forEach(item=>{item.hidden=Number(item.dataset.lane)!==0;});syncCivicBoard();
/* 11DZ_CORE_SCRIPT_END */
const workflowBridgeSpec={"name":"dashboards-admin-command-center","selector":"[data-core-bridge=\"dashboards-admin-command-center\"]","mode":"click","key":"Enter"};const workflowBridgeCore=document.querySelector('#workflowCore');const workflowBridgeControl=workflowBridgeCore.querySelector(workflowBridgeSpec.selector);if(!workflowBridgeControl)throw new Error('Missing core bridge: '+workflowBridgeSpec.name);const workflowBridgeControlledId=workflowBridgeControl.getAttribute('aria-controls');const workflowBridgeControlled=workflowBridgeControlledId?document.getElementById(workflowBridgeControlledId):null;workflowBridgeCore.dataset.workflowBridge=workflowBridgeSpec.name;workflowBridgeCore.dataset.workflowVersion='0';function workflowBridgeSerialize(){const visualNode=workflowBridgeCore.firstElementChild||workflowBridgeCore;const visual=getComputedStyle(visualNode);const outputs=[...workflowBridgeCore.querySelectorAll('output,[role="status"],[aria-live],meter,progress')].map(node=>node.textContent.trim()+'|'+node.getAttribute('aria-valuenow')+'|'+node.getAttribute('value'));const canvas=[...workflowBridgeCore.querySelectorAll('canvas')].map(node=>{try{return node.toDataURL().slice(-160);}catch{return 'canvas-unavailable';}});return JSON.stringify({html:workflowBridgeCore.innerHTML,status:statusOutput.textContent,outputs,canvas,visual:[visual.display,visual.visibility,visual.opacity,visual.transform,visual.filter,visual.backgroundColor,visual.width,visual.height],scroll:workflowBridgeSpec.mode==='scroll'?workflowBridgeControl.scrollTop:null});}let workflowBridgeLastEffect=workflowBridgeSerialize();function workflowBridgeSummary(){const label=(workflowBridgeControl.getAttribute('aria-label')||workflowBridgeControl.textContent||workflowBridgeControl.value||workflowBridgeSpec.name).trim().replace(/\s+/g,' ').slice(0,72);return label+' · Core Version '+workflowBridgeCore.dataset.workflowVersion;}function workflowBridgeCommit(){const effect=workflowBridgeSerialize();if(effect===workflowBridgeLastEffect)return {changed:false,summary:workflowBridgeSummary()};workflowBridgeLastEffect=effect;workflowBridgeCore.dataset.workflowVersion=String(Number(workflowBridgeCore.dataset.workflowVersion||0)+1);return {changed:true,summary:workflowBridgeSummary()};}function workflowBridgeScheduleCommit(){queueMicrotask(workflowBridgeCommit);setTimeout(workflowBridgeCommit,0);}workflowBridgeControl.addEventListener("click",workflowBridgeScheduleCommit);const workflowBridgeStateTargets=new Set(workflowBridgeCore.querySelectorAll('dialog'));if(workflowBridgeControlled&&workflowBridgeCore.contains(workflowBridgeControlled))workflowBridgeStateTargets.add(workflowBridgeControlled);workflowBridgeStateTargets.forEach(target=>['close','cancel','toggle'].forEach(eventName=>target.addEventListener(eventName,workflowBridgeScheduleCommit)));function workflowBridgeActivate(){workflowBridgeControl.focus();workflowBridgeControl.click();const result=workflowBridgeCommit();setTimeout(workflowBridgeCommit,0);return result;}function workflowBridgeReset(){workflowBridgeCore.dataset.workflowVersion='0';workflowBridgeLastEffect=workflowBridgeSerialize();}
const workflowCompareCore=document.querySelector('#workflowCore');const workflowCompareWeight=document.querySelector('#workflowCompareWeight');const workflowCompareState={channel:'A',weight:50,frozen:false,snapshots:[]};function workflowCompareFingerprint(){const controls=[...workflowCompareCore.querySelectorAll('input,select,textarea')];const outputs=[...workflowCompareCore.querySelectorAll('output,[role="status"],strong')].map(node=>node.textContent.trim()).filter(Boolean);return {controlValues:controls.map(control=>control.type==='checkbox'||control.type==='radio'?control.checked:control.value),summary:outputs.slice(0,4).join(' / '),nodes:workflowCompareCore.querySelectorAll('*').length};}function workflowCompareDrive(){workflowCompareCore.dataset.compareChannel=workflowCompareState.channel;workflowCompareCore.style.setProperty('--compare-split',workflowCompareState.weight+'%');document.querySelector('#workflowCompareWeightValue').textContent=workflowCompareState.weight+' point';document.querySelector('#workflowCompareLive').textContent=workflowCompareState.channel+' Version · '+workflowCompareState.weight+' point'+(workflowCompareState.frozen?' · Frozen':'');announce('Public Hotline Viewing '+workflowCompareState.channel+' Version');}function workflowCompareCapture(source){const bridge=workflowBridgeActivate();const snapshot={...workflowCompareFingerprint(),channel:workflowCompareState.channel,weight:workflowCompareState.weight,source,bridge:bridge.summary};workflowCompareState.snapshots.push(snapshot);const item=document.createElement('li');item.innerHTML='<b>'+snapshot.channel+'</b><span>'+(snapshot.summary||snapshot.bridge)+'</span><small>'+snapshot.weight+' point · '+snapshot.bridge+'</small>';document.querySelector('#workflowCompareShelf').prepend(item);announce('sampled '+snapshot.channel+' Version and apply panel · '+bridge.summary);}document.querySelectorAll('[name="workflowChannel"]').forEach(input=>input.addEventListener('change',()=>{workflowCompareState.channel=input.value;workflowCompareDrive();}));workflowCompareWeight.addEventListener('input',()=>{workflowCompareState.weight=Number(workflowCompareWeight.value);workflowCompareDrive();});document.querySelector('#workflowCompareFreeze').addEventListener('change',event=>{workflowCompareState.frozen=event.currentTarget.checked;workflowCompareDrive();});document.querySelector('#workflowCompareCapture').addEventListener('click',()=>workflowCompareCapture('Button Sampling'));workflowCompareCore.addEventListener('dblclick',()=>workflowCompareCapture('Main view double-click'));workflowCompareDrive();
workflowBridgeReset();
  </script>
</body>
</html>
Page feedbackFound an issue or have suggestions for improvement?
Feedback features need to be used in the online version

Please enable JavaScript in the online version before submitting; local features of the current tool or example are not affected.

Go to the online version for feedback