{
  "id": "shortwave-desk-schedule",
  "name": "Schedule Editor",
  "theme": "shortwave-desk",
  "category": "Settings & Forms",
  "description": "A schedule editor that shows antenna conflicts as you build the row, rather than accepting the entry and failing at the moment the recording was due.",
  "layout": "A form panel over a 24-hour occupancy strip per antenna, with the conflicting hour rendered in the destructive colour under the row being edited.",
  "modules": [
    {
      "key": "head",
      "name": "Editor head",
      "html": "\n<header class=\"eh\"><div><span class=\"k\">Schedule</span><h1>New entry</h1></div><span class=\"rd\">14 entries active</span></header>"
    },
    {
      "key": "form",
      "name": "Entry form",
      "html": "\n<section class=\"ef\">\n  <div class=\"fg\">\n    <label><span class=\"k\">Frequency</span><input type=\"text\" value=\"12,065\"><span class=\"u\">kHz</span></label>\n    <label><span class=\"k\">Mode</span><select><option>AM broadcast</option><option>SSB upper</option><option>SSB lower</option><option>CW</option></select></label>\n    <label><span class=\"k\">Start</span><input type=\"text\" value=\"09:30\"><span class=\"u\">UTC</span></label>\n    <label><span class=\"k\">Duration</span><input type=\"text\" value=\"30\"><span class=\"u\">min</span></label>\n    <label><span class=\"k\">Antenna</span><select><option>B — 40 m dipole</option><option>A — long wire</option><option>C — loop</option></select></label>\n    <label><span class=\"k\">Repeat</span><select><option>Daily</option><option>Weekdays</option><option>Once</option></select></label>\n  </div>\n  <label class=\"chk\"><input type=\"checkbox\" checked> Record to disk and keep for 30 days</label>\n  <label class=\"chk\"><input type=\"checkbox\"> Raise a log entry if signal stays below the noise floor for the whole window</label>\n</section>"
    },
    {
      "key": "occupancy",
      "name": "Antenna occupancy",
      "html": "\n<section class=\"oc\"><span class=\"k\">Antenna occupancy · UTC</span>\n<div class=\"rows\">\n  <div class=\"row\"><span class=\"ant rd\">A</span><div class=\"cells\"><i class=\"u2\"></i><i class=\"u2\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class=\"u2\"></i><i class=\"u2\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div>\n  <div class=\"row edit\"><span class=\"ant rd\">B</span><div class=\"cells\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class=\"u2\"></i><i class=\"cf\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div>\n  <div class=\"row\"><span class=\"ant rd\">C</span><div class=\"cells\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class=\"u2\"></i><i class=\"u2\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div>\n</div>\n<p class=\"cf2\">Antenna B is already committed at 09:30 by the 9,410 kHz entry. Either move this entry to 10:00 or put it on antenna C, which is free until 11:00.</p></section>"
    },
    {
      "key": "act",
      "name": "Actions",
      "html": "\n<footer class=\"ac\"><button type=\"button\" class=\"pri\" disabled>Save entry</button><button type=\"button\" class=\"sec\">Move to antenna C</button><button type=\"button\" class=\"sec\">Cancel</button></footer>"
    }
  ],
  "moduleCount": 4,
  "reorderable": true,
  "meta": {
    "id": "shortwave-desk-schedule",
    "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-schedule.json",
  "structure": "A form panel over a 24-hour occupancy strip per antenna, with the conflicting hour rendered in the destructive colour under the row being edited.",
  "html": "<div class=\"dz dz-shortwave-desk-schedule\" data-design=\"shortwave-desk-schedule\" data-theme=\"shortwave-desk\">\n<section class=\"dz-mod\" data-mod=\"head\" aria-label=\"Editor head\">\n<header class=\"eh\"><div><span class=\"k\">Schedule</span><h1>New entry</h1></div><span class=\"rd\">14 entries active</span></header></section>\n<section class=\"dz-mod\" data-mod=\"form\" aria-label=\"Entry form\">\n<section class=\"ef\">\n  <div class=\"fg\">\n    <label><span class=\"k\">Frequency</span><input type=\"text\" value=\"12,065\"><span class=\"u\">kHz</span></label>\n    <label><span class=\"k\">Mode</span><select><option>AM broadcast</option><option>SSB upper</option><option>SSB lower</option><option>CW</option></select></label>\n    <label><span class=\"k\">Start</span><input type=\"text\" value=\"09:30\"><span class=\"u\">UTC</span></label>\n    <label><span class=\"k\">Duration</span><input type=\"text\" value=\"30\"><span class=\"u\">min</span></label>\n    <label><span class=\"k\">Antenna</span><select><option>B — 40 m dipole</option><option>A — long wire</option><option>C — loop</option></select></label>\n    <label><span class=\"k\">Repeat</span><select><option>Daily</option><option>Weekdays</option><option>Once</option></select></label>\n  </div>\n  <label class=\"chk\"><input type=\"checkbox\" checked> Record to disk and keep for 30 days</label>\n  <label class=\"chk\"><input type=\"checkbox\"> Raise a log entry if signal stays below the noise floor for the whole window</label>\n</section></section>\n<section class=\"dz-mod\" data-mod=\"occupancy\" aria-label=\"Antenna occupancy\">\n<section class=\"oc\"><span class=\"k\">Antenna occupancy · UTC</span>\n<div class=\"rows\">\n  <div class=\"row\"><span class=\"ant rd\">A</span><div class=\"cells\"><i class=\"u2\"></i><i class=\"u2\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class=\"u2\"></i><i class=\"u2\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div>\n  <div class=\"row edit\"><span class=\"ant rd\">B</span><div class=\"cells\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class=\"u2\"></i><i class=\"cf\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div>\n  <div class=\"row\"><span class=\"ant rd\">C</span><div class=\"cells\"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i class=\"u2\"></i><i class=\"u2\"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div>\n</div>\n<p class=\"cf2\">Antenna B is already committed at 09:30 by the 9,410 kHz entry. Either move this entry to 10:00 or put it on antenna C, which is free until 11:00.</p></section></section>\n<section class=\"dz-mod\" data-mod=\"act\" aria-label=\"Actions\">\n<footer class=\"ac\"><button type=\"button\" class=\"pri\" disabled>Save entry</button><button type=\"button\" class=\"sec\">Move to antenna C</button><button type=\"button\" class=\"sec\">Cancel</button></footer></section>\n</div>",
  "css": "\n.dz-shortwave-desk-schedule { background: var(--background); color: var(--foreground); font-family: var(--pv-body); padding: 24px 26px; max-width: 940px; margin: 0 auto; }\n.dz-shortwave-desk-schedule .k { text-transform: uppercase; letter-spacing: .16em; font-size: 10px; font-weight: 700; color: var(--muted-foreground); display: block; }\n.dz-shortwave-desk-schedule .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-schedule .eh { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 20px; }\n.dz-shortwave-desk-schedule h1 { font-family: var(--pv-display); font-weight: 700; letter-spacing: -.02em; font-size: 27px; margin: 5px 0 0; }\n.dz-shortwave-desk-schedule .ef { background: var(--card); border-radius: var(--pv-radius-lg); padding: 18px; margin-bottom: 18px; }\n.dz-shortwave-desk-schedule .fg { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 16px; }\n.dz-shortwave-desk-schedule label { display: block; position: relative; }\n.dz-shortwave-desk-schedule input, .dz-shortwave-desk-schedule select { display: block; width: 100%; margin-top: 6px; padding: 11px; font: inherit; font-size: 14px; background: var(--secondary); border: 0; border-radius: var(--pv-radius-sm); color: var(--foreground); }\n.dz-shortwave-desk-schedule .u { position: absolute; right: 12px; bottom: 12px; font-family: var(--pv-mono); font-size: 11.5px; color: var(--muted-foreground); }\n.dz-shortwave-desk-schedule .chk { display: flex; gap: 10px; align-items: flex-start; font-size: 13px; padding: 6px 0; line-height: 1.5; }\n.dz-shortwave-desk-schedule .oc { background: var(--card); border-radius: var(--pv-radius-lg); padding: 18px; margin-bottom: 18px; }\n.dz-shortwave-desk-schedule .rows { display: grid; gap: 6px; margin-top: 12px; }\n.dz-shortwave-desk-schedule .row { display: grid; grid-template-columns: 34px 1fr; gap: 12px; align-items: center; }\n.dz-shortwave-desk-schedule .cells { display: grid; grid-template-columns: repeat(24, 1fr); gap: 2px; }\n.dz-shortwave-desk-schedule .cells i { height: 22px; background: var(--secondary); border-radius: 2px; display: block; }\n.dz-shortwave-desk-schedule .cells i.u2 { background: var(--primary); }\n.dz-shortwave-desk-schedule .cells i.cf { background: var(--destructive); }\n.dz-shortwave-desk-schedule .edit .cells { outline: 1px solid var(--primary); outline-offset: 3px; }\n.dz-shortwave-desk-schedule .cf2 { margin: 18px 0 0; font-size: 13px; color: var(--destructive); line-height: 1.55; }\n.dz-shortwave-desk-schedule .ac { display: flex; gap: 10px; }\n.dz-shortwave-desk-schedule button { font: inherit; font-size: 13.5px; padding: 12px 20px; border-radius: var(--pv-radius-sm); cursor: pointer; }\n.dz-shortwave-desk-schedule .pri { background: var(--primary); color: var(--primary-foreground); border: 0; }\n.dz-shortwave-desk-schedule .pri[disabled] { opacity: .45; cursor: not-allowed; }\n.dz-shortwave-desk-schedule .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"
}