module DefaultCSS(userAgentCSS) where
userAgentCSS = unlines [
"head, link, meta, style, script, title, base {speak: never}",
"datalist, template {speak: never}",
"",
"/** Forms **/",
"/* Hide buttons that don't do anything */",
"button[type=button] {speak: never}",
"button[formaction] {speak: always}",
"",
-- "button::before, input[type=button]::before, input[type=submit]::before {",
-- " content: 'Button';",
-- " pitch: high;",
-- "}",
-- "select::before, textarea::before, input::before {content: 'Input'; pitch: high}",
-- "output::before {content: 'Output'; pitch: high}",
"text-area, button, select, input, output {pitch: low}",
-- "input, output {content: attr(value)}",
-- "text-area {speak-as: literal-punctuation}",
"",
-- "option:not([checked]) {speak: never}",
"select[multiple] option {cue-before: url(bulletpoint.wav)}",
"",
"/* Forms themselves require a label in order to support navigation */",
-- "form::before {content: 'Form'}",
-- "form[action]::before {content: attr(action)}",
-- "form[alt]::before {content: attr(alt)}",
-- "form[title]::before {content: attr(title)}",
"",
"/** Tables **/",
-- "table::before {content: 'Table'; voice-volume: x-soft}",
"tr {cue-before: url(bulletpoint.wav)}",
"td, th {cue-before: url(bulletpoint.wav) -1db}",
-- "th::th /* Rhapsode-specific, selects inlined table headers */ {speak: never;}",
"table caption {voice-volume: soft}",
"",
"/** Sectioning **/",
"footer, header {voice-volume: soft}",
"h1, h2, h3, h4, h5, h6, legend, th, summary, dt {voice-stress: strong}",
"h1 {pause: x-strong; voice-rate: x-slow}",
"h2 {pause: strong; voice-rate: slow}",
"h3, th, summary, legend, dt {pause: medium; voice-rate: medium}",
"h4 {pause: weak; voice-rate: fast}",
"h5, h6 {pause: x-weak; voice-rate: fast}",
"h6 {pitch: high}",
"",
"/** Text **/",
"hr {pause: x-strong}",
"p, pre, samp, blockquote {pause: strong}",
"pre, address, samp {speak-as: literal-punctuation}",
"",
-- ":link {cue-before: url(link.wav); voice-rate: slow}",
-- ":link:visited {cue-before: url(link.wav) -1db}",
"",
"b, strong {voice-rate: x-slow}",
"i, em {voice-stress: strong}",
"br {pause: medium}",
"code {speak-as: literal-punctuation}",
"s, del {voice-volume: x-soft}",
"u, ins {voice-volume: loud}",
"",
"/** lists **/",
"li, dt, dd {cue-before: url(bulletpoint.wav); pause: strong}",
"li li, dd dt, dd dd {cue-before: url(bulletpoint.wav) -1db}",
"li li li, dd dd dt, dd dd dd {cue-before: url(bulletpoint.wav) -2db}",
"li li li li, dd dd dd dt, dd dd dd dd {cue-before: url(bulletpoint.wav) -3db}",
"li li li li li, dd dd dd dd dt, dd dd dd dd dd {",
" cue-before: url(bulletpoint.wav) -4db",
"}",
"li li li li li li, dd dd dd dd dd dt, dd dd dd dd dd dd {",
" cue-before: url(bulletpoint.wav) -5db",
"}",
"",
"ol {counter-reset: -rhaps-ol1}",
"ol ol {counter-reset: -rhaps-ol2}",
"ol ol ol {counter-reset: -rhaps-ol3}",
"ol ol ol ol {counter-reset: -rhaps-ol4}",
"ol ol ol ol ol {counter-reset: -rhaps-ol5}",
"ol ol ol ol ol ol {counter-reset: -rhaps-ol6}",
-- "ol li::before {content: counter(-rhaps-ol1)}",
-- "ol ol li::before {content: counters(-rhaps-ol1, -rhaps-ol2)}",
-- "ol ol ol li::before {content: counters(-rhaps-ol1, -rhaps-ol2, -rhaps-ol3)}",
-- "ol ol ol ol li::before {",
-- "content: counters(-rhaps-ol1, -rhaps-ol2, -rhaps-ol3, -rhaps-ol4)",
-- "}",
-- "ol ol ol ol ol li::before {",
-- "content: counters(-rhaps-ol1, -rhaps-ol2, -rhaps-ol3, -rhaps-ol4, -rhaps-ol5)",
-- "}",
-- "ol ol ol ol ol ol li::before {",
-- "content: counters(-rhaps-ol1, -rhaps-ol2, -rhaps-ol3, -rhaps-ol4, -rhaps-ol5, -rhaps-ol6)",
-- "}",
"",
"",
"/** HTML6 **/",
-- "abbr[title]::after {content: attr(title); voice-volume: x-soft}",
"abbr {speak-as: spell-out}",
"",
"q, blockquote {voice-family: neutral 2}",
"cite {voice-stress: reduce}",
-- "dialog:not([open]) {speak: never}",
"kbd {speak-as: spell-out}",
-- "progress {content: attr(value) 'of' attr(max)}"
"sub {voice-rate: x-fast}",
"sup {voice-rate: fast}",
"var {voice-rate: slow}"
]