{
  "id": "shortwave-desk-console",
  "name": "Operator Console",
  "theme": "shortwave-desk",
  "category": "App Shell",
  "description": "A night-shift frame where every surface is available in both directions from the slate ground, so an inactive panel recedes without needing to be greyed out.",
  "layout": "A 210px station rail, a filled working pane and a darker well for the queue; borders appear only where two panels meet.",
  "modules": [
    {
      "key": "rail",
      "name": "Station rail",
      "html": "\n<nav class=\"sr\"><span class=\"brand\">Shortwave</span>\n<span class=\"k\">Watch</span><ul><li class=\"on\"><a href=\"#\">Band monitor</a></li><li><a href=\"#\">Schedule</a></li><li><a href=\"#\">Recordings</a></li></ul>\n<span class=\"k\">Hardware</span><ul><li><a href=\"#\">Receivers <b class=\"rd\">3</b></a></li><li><a href=\"#\">Antennas <b class=\"rd\">5</b></a></li><li><a href=\"#\">Filters</a></li></ul>\n<div class=\"stat\"><span class=\"k\">Uptime</span><span class=\"rd\">41 d 06:12</span></div></nav>"
    },
    {
      "key": "pane",
      "name": "Working pane",
      "html": "\n<section class=\"wp\"><header><div><span class=\"k\">Now receiving</span><h1>9,410 kHz · Antenna B</h1></div><span class=\"rd on2\">Recording</span></header>\n<div class=\"mets\">\n  <div><span class=\"k\">Signal</span><b class=\"n\">S7</b></div>\n  <div><span class=\"k\">SNR</span><b class=\"n\">25 dB</b></div>\n  <div><span class=\"k\">Drift</span><b class=\"n\">+4 Hz</b></div>\n  <div><span class=\"k\">Elapsed</span><b class=\"n\">00:41:22</b></div>\n</div>\n<div class=\"ctrls\"><label><span class=\"k\">Filter</span><select><option>6 kHz AM</option><option>3 kHz SSB</option><option>500 Hz CW</option></select></label><label><span class=\"k\">Antenna</span><select><option>B — 40 m dipole</option><option>A — long wire</option><option>C — loop</option></select></label><label><span class=\"k\">AGC</span><select><option>Slow</option><option>Fast</option><option>Off</option></select></label></div>\n<p class=\"nt\">Drift has stayed inside ±5 Hz for six hours, which is within spec for this receiver without the oven fitted.</p></section>"
    },
    {
      "key": "queue",
      "name": "Schedule well",
      "html": "\n<aside class=\"qw\"><span class=\"k\">Next in schedule</span>\n<ol>\n  <li class=\"next\"><time>09:30</time><div><b>12,065 kHz</b><span class=\"d\">Broadcast · 30 min · Antenna B</span></div></li>\n  <li><time>10:00</time><div><b>7,205 kHz</b><span class=\"d\">Broadcast · 60 min · Antenna A</span></div></li>\n  <li><time>11:00</time><div><b>15,140 kHz</b><span class=\"d\">Broadcast · 45 min · Antenna C</span></div></li>\n  <li><time>12:00</time><div><b>Band sweep</b><span class=\"d\">Automatic · 5,900 to 15,800</span></div></li>\n</ol>\n<div class=\"ac\"><button type=\"button\" class=\"pri\">Skip to next</button><button type=\"button\" class=\"sec\">Pause schedule</button></div></aside>"
    }
  ],
  "moduleCount": 3,
  "reorderable": false,
  "meta": {
    "id": "shortwave-desk-console",
    "model": "Claude Opus 5",
    "author": "Claude Code",
    "createdAt": "2026-09-01T23:54:36+09:00",
    "updatedAt": "2026-09-01T23:54:36+09:00",
    "version": "1.0.0",
    "isNew": false
  },
  "link": "/api/v1/designs/shortwave-desk-console.json",
  "structure": "A 210px station rail, a filled working pane and a darker well for the queue; borders appear only where two panels meet.",
  "html": "<div class=\"dz dz-shortwave-desk-console\" data-design=\"shortwave-desk-console\" data-theme=\"shortwave-desk\">\n<section class=\"dz-mod\" data-mod=\"rail\" aria-label=\"Station rail\">\n<nav class=\"sr\"><span class=\"brand\">Shortwave</span>\n<span class=\"k\">Watch</span><ul><li class=\"on\"><a href=\"#\">Band monitor</a></li><li><a href=\"#\">Schedule</a></li><li><a href=\"#\">Recordings</a></li></ul>\n<span class=\"k\">Hardware</span><ul><li><a href=\"#\">Receivers <b class=\"rd\">3</b></a></li><li><a href=\"#\">Antennas <b class=\"rd\">5</b></a></li><li><a href=\"#\">Filters</a></li></ul>\n<div class=\"stat\"><span class=\"k\">Uptime</span><span class=\"rd\">41 d 06:12</span></div></nav></section><section class=\"dz-mod\" data-mod=\"pane\" aria-label=\"Working pane\">\n<section class=\"wp\"><header><div><span class=\"k\">Now receiving</span><h1>9,410 kHz · Antenna B</h1></div><span class=\"rd on2\">Recording</span></header>\n<div class=\"mets\">\n  <div><span class=\"k\">Signal</span><b class=\"n\">S7</b></div>\n  <div><span class=\"k\">SNR</span><b class=\"n\">25 dB</b></div>\n  <div><span class=\"k\">Drift</span><b class=\"n\">+4 Hz</b></div>\n  <div><span class=\"k\">Elapsed</span><b class=\"n\">00:41:22</b></div>\n</div>\n<div class=\"ctrls\"><label><span class=\"k\">Filter</span><select><option>6 kHz AM</option><option>3 kHz SSB</option><option>500 Hz CW</option></select></label><label><span class=\"k\">Antenna</span><select><option>B — 40 m dipole</option><option>A — long wire</option><option>C — loop</option></select></label><label><span class=\"k\">AGC</span><select><option>Slow</option><option>Fast</option><option>Off</option></select></label></div>\n<p class=\"nt\">Drift has stayed inside ±5 Hz for six hours, which is within spec for this receiver without the oven fitted.</p></section></section><section class=\"dz-mod\" data-mod=\"queue\" aria-label=\"Schedule well\">\n<aside class=\"qw\"><span class=\"k\">Next in schedule</span>\n<ol>\n  <li class=\"next\"><time>09:30</time><div><b>12,065 kHz</b><span class=\"d\">Broadcast · 30 min · Antenna B</span></div></li>\n  <li><time>10:00</time><div><b>7,205 kHz</b><span class=\"d\">Broadcast · 60 min · Antenna A</span></div></li>\n  <li><time>11:00</time><div><b>15,140 kHz</b><span class=\"d\">Broadcast · 45 min · Antenna C</span></div></li>\n  <li><time>12:00</time><div><b>Band sweep</b><span class=\"d\">Automatic · 5,900 to 15,800</span></div></li>\n</ol>\n<div class=\"ac\"><button type=\"button\" class=\"pri\">Skip to next</button><button type=\"button\" class=\"sec\">Pause schedule</button></div></aside></section>\n</div>",
  "css": "\n.dz-shortwave-desk-console { background: var(--background); color: var(--foreground); font-family: var(--pv-body); display: grid; grid-template-columns: 210px 1fr 300px; min-height: 620px; }\n.dz-shortwave-desk-console .k { text-transform: uppercase; letter-spacing: .16em; font-size: 10px; font-weight: 700; color: var(--muted-foreground); display: block; }\n.dz-shortwave-desk-console .rd { font-family: var(--pv-mono); font-size: 12px; letter-spacing: .01em; background: var(--secondary); padding: 5px 9px; border-radius: var(--pv-radius-sm); display: inline-block; }\n.dz-shortwave-desk-console .n { font-family: var(--pv-mono); font-variant-numeric: tabular-nums; }\n.dz-shortwave-desk-console .sr { background: var(--card); padding: 20px 18px; border-right: 1px solid var(--border); }\n.dz-shortwave-desk-console .brand { font-family: var(--pv-display); font-weight: 700; letter-spacing: -.02em; font-size: 20px; display: block; margin-bottom: 22px; }\n.dz-shortwave-desk-console .sr ul { list-style: none; margin: 8px 0 20px; padding: 0; }\n.dz-shortwave-desk-console .sr a { display: flex; justify-content: space-between; align-items: center; padding: 8px 0; text-decoration: none; color: var(--foreground); font-size: 13.5px; }\n.dz-shortwave-desk-console .sr li.on a { color: var(--primary); font-weight: 600; }\n.dz-shortwave-desk-console .stat { margin-top: 26px; }\n.dz-shortwave-desk-console .stat .rd { margin-top: 6px; }\n.dz-shortwave-desk-console .wp { padding: 24px; }\n.dz-shortwave-desk-console .wp header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 20px; }\n.dz-shortwave-desk-console h1 { font-family: var(--pv-display); font-weight: 700; letter-spacing: -.02em; font-size: 27px; margin: 5px 0 0; }\n.dz-shortwave-desk-console .on2 { background: var(--primary); color: var(--primary-foreground); }\n.dz-shortwave-desk-console .mets { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 22px; }\n.dz-shortwave-desk-console .mets div { background: var(--card); border-radius: var(--pv-radius); padding: 16px; }\n.dz-shortwave-desk-console .mets b { display: block; font-family: var(--pv-mono); font-size: 26px; margin-top: 6px; color: var(--primary); }\n.dz-shortwave-desk-console .ctrls { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 18px; }\n.dz-shortwave-desk-console select { display: block; width: 100%; margin-top: 6px; padding: 10px; font: inherit; font-size: 13.5px; background: var(--card); border: 0; border-radius: var(--pv-radius-sm); color: var(--foreground); }\n.dz-shortwave-desk-console .nt { margin: 0; font-size: 13px; color: var(--muted-foreground); line-height: 1.55; max-width: 66ch; }\n.dz-shortwave-desk-console .qw { background: color-mix(in oklab, var(--background) 82%, black); padding: 24px 20px; }\n.dz-shortwave-desk-console .qw ol { list-style: none; margin: 12px 0 20px; padding: 0; }\n.dz-shortwave-desk-console .qw li { display: grid; grid-template-columns: 52px 1fr; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--border); }\n.dz-shortwave-desk-console .qw time { font-family: var(--pv-mono); font-size: 12px; color: var(--muted-foreground); }\n.dz-shortwave-desk-console .qw b { display: block; font-size: 14px; font-family: var(--pv-mono); }\n.dz-shortwave-desk-console .d { font-size: 11.5px; color: var(--muted-foreground); }\n.dz-shortwave-desk-console .next b { color: var(--primary); }\n.dz-shortwave-desk-console .ac { display: grid; gap: 8px; }\n.dz-shortwave-desk-console button { font: inherit; font-size: 13px; padding: 11px; border-radius: var(--pv-radius-sm); cursor: pointer; }\n.dz-shortwave-desk-console .pri { background: var(--primary); color: var(--primary-foreground); border: 0; }\n.dz-shortwave-desk-console .sec { background: transparent; color: var(--foreground); border: 1px solid var(--border); }\n",
  "requiredTheme": "/api/v1/themes/shortwave-desk.json",
  "googleFontsHref": "https://fonts.googleapis.com/css2?family=Chivo:wght@400;500;600;700&family=Rubik:wght@400;500;600;700&family=Reddit+Mono:wght@400;500;600;700&display=swap"
}