@roqua/quby-frontend 0.11.2 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6651,7 +6651,7 @@ class AlwaysCondition extends BaseCondition {
6651
6651
  }
6652
6652
  class AnsweredCondition extends BaseCondition {
6653
6653
  match(response) {
6654
- const fieldState = response.getFieldState(this.condition.fieldKey);
6654
+ const fieldState = response.getVisibilityFieldState(this.condition.fieldKey);
6655
6655
  if (fieldState.hidden && !this.condition.evenWhenHidden) {
6656
6656
  return false;
6657
6657
  }
@@ -6738,7 +6738,6 @@ class Questionnaire {
6738
6738
  constructor(data) {
6739
6739
  __publicField(this, "key");
6740
6740
  __publicField(this, "panels");
6741
- __publicField(this, "footer");
6742
6741
  __publicField(this, "questions");
6743
6742
  __publicField(this, "validations");
6744
6743
  __publicField(this, "visibilityRules");
@@ -6748,11 +6747,12 @@ class Questionnaire {
6748
6747
  // type checked on response.
6749
6748
  __publicField(this, "cssVars");
6750
6749
  __publicField(this, "layoutVersion");
6750
+ __publicField(this, "defaultLanguage");
6751
+ __publicField(this, "translations", {});
6751
6752
  __privateAdd(this, _flatOptions, {});
6752
6753
  this.key = data.key;
6753
6754
  this.questions = data.questions;
6754
6755
  this.panels = data.panels;
6755
- this.footer = data.footer;
6756
6756
  this.validations = data.validations;
6757
6757
  this.visibilityRules = data.visibilityRules.map((rule) => buildVisibilityRule(rule));
6758
6758
  this.textvars = Object.values(data.textvars);
@@ -6760,6 +6760,8 @@ class Questionnaire {
6760
6760
  this.defaultAnswerValue = data.defaultAnswerValue;
6761
6761
  this.cssVars = data.cssVars;
6762
6762
  this.layoutVersion = data.layoutVersion || "v1";
6763
+ this.defaultLanguage = data.language || "nl";
6764
+ this.translations = data.translations;
6763
6765
  }
6764
6766
  getField(key) {
6765
6767
  return this.questions[key];
@@ -6774,10 +6776,19 @@ class Questionnaire {
6774
6776
  return [question];
6775
6777
  }
6776
6778
  }
6779
+ getChildQuestionKeys(questionKey) {
6780
+ const question = this.getField(questionKey);
6781
+ if (question.type === "radio" || question.type === "check_box") {
6782
+ return question.children.flatMap((child) => "questions" in child ? child.questions.map((q) => q.key) : []);
6783
+ } else {
6784
+ return [];
6785
+ }
6786
+ }
6787
+ // get all options for the question, including those in optgroups, excludes other children.
6777
6788
  getFlatOptions(questionKey) {
6778
6789
  var _a;
6779
6790
  const question = this.getField(questionKey);
6780
- if (question.type !== "select" && question.type !== "radio" && question.type !== "scale") {
6791
+ if (question.type !== "select" && question.type !== "radio" && question.type !== "scale" && question.type !== "check_box") {
6781
6792
  throw new Error(`Question ${questionKey} does not have options.`);
6782
6793
  }
6783
6794
  return (_a = __privateGet(this, _flatOptions))[questionKey] ?? (_a[questionKey] = question.children.flatMap((option_or_group) => {
@@ -6793,7 +6804,7 @@ class Questionnaire {
6793
6804
  getOptionNumberValue(questionKey, optionKey) {
6794
6805
  var _a;
6795
6806
  const option = (_a = this.getFlatOptions(questionKey)) == null ? void 0 : _a.find((opt) => opt.key === optionKey);
6796
- if (option && typeof option.value === "number") {
6807
+ if (option && "value" in option && typeof option.value === "number") {
6797
6808
  return option.value;
6798
6809
  } else {
6799
6810
  return null;
@@ -12567,11 +12578,13 @@ const _Calculations = class _Calculations {
12567
12578
  }
12568
12579
  return this.results[key] ?? null;
12569
12580
  }
12570
- handleValueChanged(key) {
12581
+ // returns the keys of the calculations that have changed.
12582
+ handleValueChanged(questionKey) {
12571
12583
  var _a;
12572
- (_a = this.questionKeyToCalculationKeys[key]) == null ? void 0 : _a.forEach((calculationKey) => {
12584
+ (_a = this.questionKeyToCalculationKeys[questionKey]) == null ? void 0 : _a.forEach((calculationKey) => {
12573
12585
  delete this.results[calculationKey];
12574
12586
  });
12587
+ return this.questionKeyToCalculationKeys[questionKey] ? Array.from(this.questionKeyToCalculationKeys[questionKey]) : [];
12575
12588
  }
12576
12589
  calculate(calculation) {
12577
12590
  return z(calculation).with({ op: "string_value" }, ({ key }) => this.stringValue(key)).with({ op: N.union("number", "number_value", "sum", "subtract", "multiply", "divide", "round") }, this.calculateNumber).with({ op: N.union(...ICalcBooleanOpsSchema.options) }, this.calculateBoolean).exhaustive();
@@ -12925,6 +12938,12 @@ class Response {
12925
12938
  __publicField(this, "errors");
12926
12939
  __publicField(this, "visibility");
12927
12940
  __publicField(this, "changeHandlers");
12941
+ __publicField(this, "questionCallbacks");
12942
+ // useSyncExternalStore callback per question key.
12943
+ // useSyncExternalStore subscribe method for each key. Same method if key use used multiple times.
12944
+ __publicField(this, "subscribeMethods");
12945
+ __publicField(this, "fieldStates");
12946
+ // cache for field states to prevent rerenders.
12928
12947
  __publicField(this, "flags");
12929
12948
  __publicField(this, "textvars");
12930
12949
  __publicField(this, "activeQuestionKey");
@@ -12936,10 +12955,13 @@ class Response {
12936
12955
  this.errors = /* @__PURE__ */ new Map();
12937
12956
  this.visibility = /* @__PURE__ */ new Map();
12938
12957
  this.changeHandlers = [];
12958
+ this.fieldStates = /* @__PURE__ */ new Map();
12939
12959
  this.flags = answer.flags;
12940
12960
  this.textvars = this.initTextvars(answer.textvars);
12941
12961
  this.activeQuestionKey = null;
12942
12962
  this.calculations = new Calculations(questionnaire.sexpVariables, this);
12963
+ this.questionCallbacks = /* @__PURE__ */ new Map();
12964
+ this.subscribeMethods = /* @__PURE__ */ new Map();
12943
12965
  this.validate();
12944
12966
  this.calculateVisibility();
12945
12967
  }
@@ -12962,26 +12984,61 @@ class Response {
12962
12984
  offChange(callback) {
12963
12985
  lodashExports.pull(this.changeHandlers, callback);
12964
12986
  }
12987
+ // first argument of useSyncExternalStore
12988
+ subscribeToQuestion(questionKey) {
12989
+ if (!this.subscribeMethods.has(questionKey)) {
12990
+ this.subscribeMethods.set(questionKey, (callback) => {
12991
+ this.questionCallbacks.set(questionKey, callback);
12992
+ return () => {
12993
+ this.questionCallbacks.delete(questionKey);
12994
+ };
12995
+ });
12996
+ }
12997
+ return this.subscribeMethods.get(questionKey);
12998
+ }
12999
+ // Cached, so react can prevent rerenders when nothing changes.
12965
13000
  getFieldState(key) {
12966
- const errors = this.errors.get(key) || [];
13001
+ if (!this.fieldStates.has(key)) {
13002
+ const errors = this.errors.get(key) || [];
13003
+ this.fieldStates.set(key, {
13004
+ // comment is where the cache is deleted.
13005
+ key,
13006
+ // constant
13007
+ value: this.values[key],
13008
+ // setValue
13009
+ showErrors: this.beenActives.has(key) && !this.isDisabled(key) && errors.length > 0,
13010
+ // setValue, only way to change errors.
13011
+ valid: errors.length === 0,
13012
+ // setValue, only way to change errors.
13013
+ errors,
13014
+ // // setValue, only way to change errors.
13015
+ hidden: !this.isVisible(key),
13016
+ // calculateVisibility when visibity changes.
13017
+ disabled: this.isDisabled(key),
13018
+ // Only for children, setValue also triggers all the children.
13019
+ isActiveQuestion: this.activeQuestionKey === key,
13020
+ // setActiveQuestion
13021
+ setAsActiveQuestion: () => this.setActiveQuestion(key),
13022
+ // constant
13023
+ setValue: (newValue) => this.setValue(key, newValue)
13024
+ // constant
13025
+ });
13026
+ }
13027
+ return this.fieldStates.get(key);
13028
+ }
13029
+ getValidationFieldState(key) {
12967
13030
  return {
12968
- key,
12969
13031
  value: this.values[key],
12970
- // loading existing answers will need to make this true!
12971
- showErrors: this.beenActives.has(key) && !this.isDisabled(key) && errors.length > 0,
12972
- valid: errors.length === 0,
12973
- errors,
12974
- hidden: !this.isVisible(key),
12975
- disabled: this.isDisabled(key),
12976
- isActiveQuestion: this.activeQuestionKey === key,
12977
- setAsActiveQuestion: () => this.setActiveQuestion(key),
12978
- setValue: (newValue) => this.setValue(key, newValue)
13032
+ addError: (error) => this.addError(key, error)
12979
13033
  };
12980
13034
  }
12981
- getValidationFieldState(key) {
13035
+ getVisibilityFieldState(key) {
12982
13036
  return {
12983
13037
  value: this.values[key],
12984
- addError: (error) => this.addError(key, error)
13038
+ hidden: !this.isVisible(key),
13039
+ // calculateVisibility when visibity changes.
13040
+ disabled: this.isDisabled(key)
13041
+ // Only for children, setValue also triggers all the children.
12985
13042
  };
12986
13043
  }
12987
13044
  setTextvar(key, value) {
@@ -12990,6 +13047,7 @@ class Response {
12990
13047
  } else {
12991
13048
  this.textvars.set(key, this.questionnaire.textvars.find((textvar) => textvar.key === key).default);
12992
13049
  }
13050
+ this.changeHandlers.forEach((handler) => handler(this, "textvarChanged", key));
12993
13051
  }
12994
13052
  // Set to coupled question-value, then to passed textvars, then to default.
12995
13053
  // Edits fromServer, since we copied it
@@ -13013,17 +13071,37 @@ class Response {
13013
13071
  this.setTextvar(question.setsTextvar, value);
13014
13072
  }
13015
13073
  this.validate();
13016
- this.calculations.handleValueChanged(key);
13074
+ this.handleCalculations(key);
13017
13075
  this.calculateVisibility();
13076
+ this.fieldStateChanged(key);
13018
13077
  this.changeHandlers.forEach((handler) => handler(this, "valueChanged"));
13019
13078
  }
13079
+ // Called on value change, to handle invalidating calculations and then curly strings that depend on those.
13080
+ handleCalculations(questionKey) {
13081
+ this.calculations.handleValueChanged(questionKey).forEach((variableKey) => {
13082
+ this.changeHandlers.forEach((handler) => handler(this, "sexpVariableChanged", variableKey));
13083
+ });
13084
+ }
13085
+ // called on value/active/visibility change, remove cache for question and it children and notify listeners.
13086
+ fieldStateChanged(key) {
13087
+ var _a;
13088
+ this.fieldStates.delete(key);
13089
+ this.questionnaire.getChildQuestionKeys(key).forEach((childKey) => {
13090
+ this.fieldStates.delete(childKey);
13091
+ });
13092
+ (_a = this.questionCallbacks.get(key)) == null ? void 0 : _a();
13093
+ }
13020
13094
  setActiveQuestion(key) {
13021
13095
  if (this.activeQuestionKey === key) return;
13022
13096
  if (this.activeQuestionKey) {
13023
13097
  this.touchField(this.activeQuestionKey);
13024
13098
  }
13099
+ const oldActive = this.activeQuestionKey;
13025
13100
  this.activeQuestionKey = key;
13026
- this.changeHandlers.forEach((handler) => handler(this));
13101
+ if (oldActive) this.fieldStateChanged(oldActive);
13102
+ if (this.activeQuestionKey) {
13103
+ this.fieldStateChanged(this.activeQuestionKey);
13104
+ }
13027
13105
  }
13028
13106
  addError(key, error) {
13029
13107
  const questionErrors = this.errors.get(key) || [];
@@ -13098,22 +13176,25 @@ class Response {
13098
13176
  // This has to be in order, since those calculations can then cause visibility changes in later questions.
13099
13177
  // Dis/enabling question is not yet considered for this.
13100
13178
  calculateVisibility() {
13101
- const calcDepsVisible = Object.keys(this.calculations.questionKeyToCalculationKeys).reduce((h2, key) => {
13102
- h2[key] = this.isVisible(key);
13103
- return h2;
13104
- }, {});
13179
+ const rules = this.questionnaire.visibilityRules;
13180
+ if (rules.length === 0) return;
13181
+ const old_visibility = Array.from(this.visibility.keys()).reduce((m2, key) => (m2.set(key, this.isVisible(key)), m2), /* @__PURE__ */ new Map());
13105
13182
  this.visibility = /* @__PURE__ */ new Map();
13106
- let currentQuestionKey = null;
13107
- this.questionnaire.visibilityRules.forEach((rule) => {
13108
- currentQuestionKey ?? (currentQuestionKey = rule.questionKey);
13109
- if (rule.questionKey !== currentQuestionKey) {
13110
- if (calcDepsVisible[currentQuestionKey] && calcDepsVisible[currentQuestionKey] !== this.isVisible(currentQuestionKey)) {
13111
- this.calculations.handleValueChanged(currentQuestionKey);
13112
- }
13113
- currentQuestionKey = rule.questionKey;
13114
- }
13183
+ let anyChange = false;
13184
+ rules.forEach((rule, count) => {
13185
+ var _a;
13115
13186
  rule.runAgainst(this);
13187
+ if (rule.questionKey !== ((_a = rules[count + 1]) == null ? void 0 : _a.questionKey)) {
13188
+ if (old_visibility.get(rule.questionKey) !== this.isVisible(rule.questionKey)) {
13189
+ this.calculations.handleValueChanged(rule.questionKey);
13190
+ this.fieldStateChanged(rule.questionKey);
13191
+ anyChange = true;
13192
+ }
13193
+ }
13116
13194
  });
13195
+ if (anyChange) {
13196
+ this.changeHandlers.forEach((handler) => handler(this, "visibilityChanged"));
13197
+ }
13117
13198
  }
13118
13199
  markShown(fieldKey) {
13119
13200
  const visibility = this.visibility.get(fieldKey) || { shown: false, hidden: false };
@@ -13167,6 +13248,98 @@ function presenceValue(v2) {
13167
13248
  }
13168
13249
  return v2;
13169
13250
  }
13251
+ const TEXTVAR_REGEX = /\{\{((?<type>[a-z_]+)\.(?<textvar>[a-z0-9_]+)|(?<textvaronly>[a-z0-9_]+))\}\}/g;
13252
+ class QuestionnaireTranslationsCurlies {
13253
+ constructor(response, questionnaire, language) {
13254
+ __publicField(this, "response");
13255
+ __publicField(this, "questionnaire");
13256
+ __publicField(this, "keyToInterpolatedString");
13257
+ __publicField(this, "keyToInterpolatedStringArray");
13258
+ __publicField(this, "variableToKeys");
13259
+ __publicField(this, "language");
13260
+ __publicField(this, "translations");
13261
+ // useSyncExternalStore callbacks for each key.
13262
+ __publicField(this, "callbacks");
13263
+ // useSyncExternalStore subscribe method for each key. Same method if key use used multiple times.
13264
+ __publicField(this, "subscribeMethods");
13265
+ this.response = response;
13266
+ this.questionnaire = questionnaire;
13267
+ this.language = language;
13268
+ this.translations = questionnaire.translations[language] || {};
13269
+ this.keyToInterpolatedString = /* @__PURE__ */ new Map();
13270
+ this.keyToInterpolatedStringArray = /* @__PURE__ */ new Map();
13271
+ this.variableToKeys = /* @__PURE__ */ new Map();
13272
+ this.callbacks = /* @__PURE__ */ new Map();
13273
+ this.subscribeMethods = /* @__PURE__ */ new Map();
13274
+ this.fetch = this.fetch.bind(this);
13275
+ this.buildVariableToKeys();
13276
+ this.response.onChange((_response, type, key) => {
13277
+ var _a;
13278
+ if (type === "textvarChanged" || type === "sexpVariableChanged") {
13279
+ (_a = this.variableToKeys.get(key)) == null ? void 0 : _a.forEach((i18nKey) => {
13280
+ var _a2;
13281
+ this.keyToInterpolatedString.delete(i18nKey);
13282
+ (_a2 = this.callbacks.get(i18nKey)) == null ? void 0 : _a2.forEach((callback) => callback());
13283
+ });
13284
+ }
13285
+ });
13286
+ }
13287
+ // first argument to useSyncExternalStore
13288
+ // needs to be the same function ref everytime.
13289
+ subscribeToKey(key) {
13290
+ if (!this.subscribeMethods.has(key)) {
13291
+ this.subscribeMethods.set(key, (callback) => {
13292
+ if (!this.callbacks.has(key)) this.callbacks.set(key, /* @__PURE__ */ new Set());
13293
+ this.callbacks.get(key).add(callback);
13294
+ return () => {
13295
+ this.callbacks.get(key).delete(callback);
13296
+ };
13297
+ });
13298
+ }
13299
+ return this.subscribeMethods.get(key);
13300
+ }
13301
+ fetch(key) {
13302
+ if (!this.keyToInterpolatedString.has(key)) {
13303
+ if (!this.translations[key]) return void 0;
13304
+ this.keyToInterpolatedString.set(key, this.interpolateCurlies(this.translations[key]));
13305
+ }
13306
+ return this.keyToInterpolatedString.get(key);
13307
+ }
13308
+ // TODO: change array whenever any of the values changes.
13309
+ // only used for sliders right now, that did not support variables anyway.
13310
+ fetchArray(key) {
13311
+ if (!this.keyToInterpolatedStringArray.has(key)) {
13312
+ const array = [];
13313
+ for (let index = 0; ; index++) {
13314
+ const interpolated = this.fetch(`${key}.${index}`);
13315
+ if (interpolated === void 0) break;
13316
+ array.push(interpolated);
13317
+ }
13318
+ this.keyToInterpolatedStringArray.set(key, array);
13319
+ }
13320
+ return this.keyToInterpolatedStringArray.get(key);
13321
+ }
13322
+ interpolateCurlies(str) {
13323
+ return str.replace(TEXTVAR_REGEX, (...args) => {
13324
+ var _a;
13325
+ const { type, textvar, textvaronly } = args[args.length - 1];
13326
+ const value = type === "calculation" ? (_a = this.response.calculations.getResult(textvar)) == null ? void 0 : _a.toString() : this.response.textvars.get(`${this.questionnaire.key}_${textvar || textvaronly}`);
13327
+ return lodashExports.escape(value || "");
13328
+ });
13329
+ }
13330
+ buildVariableToKeys() {
13331
+ for (const [key, value] of Object.entries(this.translations)) {
13332
+ Array.from(value.matchAll(TEXTVAR_REGEX)).forEach((match) => {
13333
+ const { type, textvar, textvaronly } = match.groups;
13334
+ const variable = type === "calculation" ? textvar : `${this.questionnaire.key}_${textvar || textvaronly}`;
13335
+ if (!this.variableToKeys.has(variable)) {
13336
+ this.variableToKeys.set(variable, []);
13337
+ }
13338
+ this.variableToKeys.get(variable).push(key);
13339
+ });
13340
+ }
13341
+ }
13342
+ }
13170
13343
  const defaultQuestionnaire = new Questionnaire({
13171
13344
  key: "test",
13172
13345
  title: "test",
@@ -13175,13 +13348,19 @@ const defaultQuestionnaire = new Questionnaire({
13175
13348
  questions: {},
13176
13349
  visibilityRules: [],
13177
13350
  textvars: {},
13178
- validations: []
13351
+ validations: [],
13352
+ translations: {}
13179
13353
  });
13180
13354
  const defaultResponse = new Response(defaultQuestionnaire, {
13181
13355
  value: {},
13182
13356
  flags: {},
13183
13357
  textvars: /* @__PURE__ */ new Map()
13184
13358
  });
13359
+ const defaultQuestionnaireTranslationsCurlies = new QuestionnaireTranslationsCurlies(
13360
+ defaultResponse,
13361
+ defaultQuestionnaire,
13362
+ "nl"
13363
+ );
13185
13364
  const defaultDisplayOptions = {
13186
13365
  displayMode: "paged",
13187
13366
  darkMode: false,
@@ -13193,7 +13372,8 @@ const QubyContext = React__default.createContext({
13193
13372
  questionnaire: defaultQuestionnaire,
13194
13373
  response: defaultResponse,
13195
13374
  setQuestionRef: defaultSetQuestionRef,
13196
- displayOptions: defaultDisplayOptions
13375
+ displayOptions: defaultDisplayOptions,
13376
+ translationsCurlies: defaultQuestionnaireTranslationsCurlies
13197
13377
  });
13198
13378
  class ResponseParseError extends Error {
13199
13379
  }
@@ -13252,32 +13432,6 @@ const parseMultiSelectAnswer = (answer, question) => {
13252
13432
  });
13253
13433
  return answerSet;
13254
13434
  };
13255
- const TEXTVAR_REGEX = /\{\{((?<type>[a-z_]+)\.(?<textvar>[a-z0-9_]+)|(?<textvaronly>[a-z0-9_]+))\}\}/g;
13256
- class CurliesInterpolator {
13257
- constructor(response, questionnaire) {
13258
- __publicField(this, "response");
13259
- __publicField(this, "questionnaire");
13260
- __publicField(this, "stringToVariables");
13261
- this.response = response;
13262
- this.questionnaire = questionnaire;
13263
- this.stringToVariables = /* @__PURE__ */ new Map();
13264
- this.interpolateCurlies = this.interpolateCurlies.bind(this);
13265
- }
13266
- interpolateCurlies(str) {
13267
- if (!this.stringToVariables.has(str)) {
13268
- this.stringToVariables.set(str, Array.from(str.matchAll(TEXTVAR_REGEX)).map((match) => match.groups.textvar));
13269
- }
13270
- if (this.stringToVariables.get(str).length == 0) {
13271
- return str;
13272
- }
13273
- return str.replace(TEXTVAR_REGEX, (...args) => {
13274
- var _a;
13275
- const { type, textvar, textvaronly } = args[args.length - 1];
13276
- const value = type === "calculation" ? (_a = this.response.calculations.getResult(textvar)) == null ? void 0 : _a.toString() : this.response.textvars.get(`${this.questionnaire.key}_${textvar || textvaronly}`);
13277
- return lodashExports.escape(value || "");
13278
- });
13279
- }
13280
- }
13281
13435
  var classnames = { exports: {} };
13282
13436
  /*!
13283
13437
  Copyright (c) 2018 Jed Watson.
@@ -13438,6 +13592,22 @@ const ALLOWED_CSS_VARS = [
13438
13592
  "question-mb-factor"
13439
13593
  ];
13440
13594
  const mapCssVars = (cssVars) => cssVars && lodashExports.mapKeys(lodashExports.pick(cssVars, ALLOWED_CSS_VARS), (_2, key) => `--${key}`);
13595
+ const useTranslationCurliesFor = (i18nKey) => {
13596
+ const { translationsCurlies } = React__default.useContext(QubyContext);
13597
+ const interpolatedString = React__default.useSyncExternalStore(
13598
+ translationsCurlies.subscribeToKey(i18nKey),
13599
+ () => translationsCurlies.fetch(i18nKey)
13600
+ );
13601
+ return interpolatedString;
13602
+ };
13603
+ const useTranslationCurliesArrayFor = (i18nKey) => {
13604
+ const { translationsCurlies } = React__default.useContext(QubyContext);
13605
+ const interpolatedStringArray = React__default.useSyncExternalStore(
13606
+ translationsCurlies.subscribeToKey(i18nKey),
13607
+ () => translationsCurlies.fetchArray(i18nKey)
13608
+ );
13609
+ return interpolatedStringArray;
13610
+ };
13441
13611
  const ProgressBar = ({
13442
13612
  max,
13443
13613
  current
@@ -13472,40 +13642,42 @@ const ProgressBar = ({
13472
13642
  ] }) });
13473
13643
  };
13474
13644
  const HtmlItem = ({ item }) => {
13475
- const interpolateCurlies = React__default.useContext(InterpolateCurliesContext);
13476
- return /* @__PURE__ */ jsx("div", { className: "item", children: /* @__PURE__ */ jsx("div", { className: "prose text", dangerouslySetInnerHTML: { __html: interpolateCurlies(item.html) } }) });
13645
+ const html = useTranslationCurliesFor(`${item.key}`);
13646
+ if (!html) throw new Error(`HtmlItem with key ${item.key} has no translation`);
13647
+ return /* @__PURE__ */ jsx("div", { className: "item", children: /* @__PURE__ */ jsx("div", { className: "prose text", dangerouslySetInnerHTML: { __html: html } }) });
13477
13648
  };
13478
13649
  const MainLabel = ({ question }) => {
13479
- const interpolateCurlies = React__default.useContext(InterpolateCurliesContext);
13480
- if (!question.title) return null;
13481
- const titleText = interpolateCurlies(question.title);
13650
+ const titleText = useTranslationCurliesFor(`${question.key}.title`);
13651
+ if (!titleText) return null;
13482
13652
  const labelFor = `answer_${question.key}`;
13483
- const mb = question.description ? "mb-1" : "mb-2";
13484
- return /* @__PURE__ */ jsx("div", { className: `${mb} main`, children: /* @__PURE__ */ jsx("label", { htmlFor: labelFor, dangerouslySetInnerHTML: { __html: titleText } }) });
13653
+ return /* @__PURE__ */ jsx("div", { className: "main", children: /* @__PURE__ */ jsx("label", { htmlFor: labelFor, dangerouslySetInnerHTML: { __html: titleText } }) });
13485
13654
  };
13486
13655
  const QuestionDescription = (props) => {
13487
- const interpolateCurlies = React__default.useContext(InterpolateCurliesContext);
13488
- if (!props.question.description) return null;
13489
- const description = interpolateCurlies(props.question.description);
13656
+ const description = useTranslationCurliesFor(`${props.question.key}.description`);
13657
+ if (!description) return null;
13490
13658
  return /* @__PURE__ */ jsx("div", { className: "font-light description prose", dangerouslySetInnerHTML: { __html: description } });
13491
13659
  };
13492
13660
  const ValidationErrors = ({ fieldState }) => {
13493
13661
  if (!fieldState.showErrors) return null;
13494
- return /* @__PURE__ */ jsx(Fragment, { children: fieldState.errors.map((error) => /* @__PURE__ */ jsx(Error$1, { error }, error.type)) });
13662
+ return /* @__PURE__ */ jsx(Fragment, { children: fieldState.errors.map((error) => /* @__PURE__ */ jsx(Error$1, { error, fieldKey: fieldState.key }, error.type)) });
13495
13663
  };
13496
- const Error$1 = ({ error }) => {
13664
+ const Error$1 = ({ error, fieldKey }) => {
13497
13665
  const className = classNames("error", error.type);
13498
- const message = useMessageAsString(error.message);
13666
+ const message = useMessageAsString(error, fieldKey);
13499
13667
  return /* @__PURE__ */ jsx("div", { className, children: message });
13500
13668
  };
13501
- function useMessageAsString(message) {
13669
+ function useMessageAsString(error, fieldKey) {
13502
13670
  const { t: t2 } = useTranslation();
13503
- if (typeof message === "string") {
13504
- return message;
13671
+ const tMessage = useTranslationCurliesFor(`${fieldKey}.validation.${error.type}.explanation`);
13672
+ if (tMessage) {
13673
+ return tMessage;
13674
+ } else if (typeof error.message === "string") {
13675
+ return error.message;
13676
+ } else {
13677
+ const args = { ...error.message };
13678
+ delete args.t;
13679
+ return t2(`validations.${error.message.t}`, args);
13505
13680
  }
13506
- const args = { ...message };
13507
- delete args.t;
13508
- return t2(`validations.${message.t}`, args);
13509
13681
  }
13510
13682
  const QuestionWrapper = (props) => {
13511
13683
  const { question, fieldState, setQuestionRef } = props;
@@ -13517,16 +13689,17 @@ const QuestionWrapper = (props) => {
13517
13689
  indent: (question.indent || 0) > 0
13518
13690
  });
13519
13691
  return /* @__PURE__ */ jsxs(Fragment, { children: [
13520
- question.contextDescription && /* @__PURE__ */ jsx(ContextDescriptionItem, { html: question.contextDescription }),
13692
+ /* @__PURE__ */ jsx(ContextDescriptionItem, { i18nKey: `${question.key}.context_description` }),
13521
13693
  /* @__PURE__ */ jsxs("div", { className, ref: questionRef, style: mapCssVars(question.cssVars), children: [
13522
13694
  /* @__PURE__ */ jsx(ValidationErrors, { fieldState }),
13523
13695
  props.children
13524
13696
  ] })
13525
13697
  ] });
13526
13698
  };
13527
- const ContextDescriptionItem = ({ html }) => {
13528
- const interpolateCurlies = React__default.useContext(InterpolateCurliesContext);
13529
- return /* @__PURE__ */ jsx("div", { className: "context-description prose", dangerouslySetInnerHTML: { __html: interpolateCurlies(html) } });
13699
+ const ContextDescriptionItem = ({ i18nKey }) => {
13700
+ const interpolatedString = useTranslationCurliesFor(i18nKey);
13701
+ if (!interpolatedString) return null;
13702
+ return /* @__PURE__ */ jsx("div", { className: "context-description prose", dangerouslySetInnerHTML: { __html: interpolatedString } });
13530
13703
  };
13531
13704
  const StringQuestion = ({ question, fieldState, setQuestionRef }) => {
13532
13705
  var _a;
@@ -13618,15 +13791,14 @@ const Option$4 = ({ question, option, index, fieldState }) => {
13618
13791
  onFocus: fieldState.setAsActiveQuestion
13619
13792
  }
13620
13793
  ),
13621
- /* @__PURE__ */ jsx(ShowDescription$1, { option })
13794
+ /* @__PURE__ */ jsx(ShowDescription$1, { question, option })
13622
13795
  ] })
13623
13796
  ] });
13624
13797
  };
13625
- const ShowDescription$1 = ({ option }) => {
13626
- const interpolateCurlies = React__default.useContext(InterpolateCurliesContext);
13627
- const description = option.label || option.description;
13628
- if (!description) return null;
13629
- return /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: interpolateCurlies(description) } }) });
13798
+ const ShowDescription$1 = ({ question, option }) => {
13799
+ const label = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
13800
+ if (!label) return null;
13801
+ return /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: label } }) });
13630
13802
  };
13631
13803
  const ShowValue$2 = ({ question, option }) => {
13632
13804
  if (!question.showValues) return null;
@@ -13654,14 +13826,7 @@ const RadioQuestion = ({ question, fieldState, setQuestionRef }) => {
13654
13826
  fieldState
13655
13827
  },
13656
13828
  child.key
13657
- ) : /* @__PURE__ */ jsx(
13658
- "div",
13659
- {
13660
- className: "inner-title",
13661
- dangerouslySetInnerHTML: { __html: child.html }
13662
- },
13663
- child.key
13664
- )) })
13829
+ ) : /* @__PURE__ */ jsx(InnerTitle$1, { i18nKey: `${question.key}.${child.key}.html` }, child.key)) })
13665
13830
  ] })
13666
13831
  ] });
13667
13832
  };
@@ -13697,18 +13862,22 @@ const Option$3 = ({ question, option, fieldState }) => {
13697
13862
  }
13698
13863
  ) }),
13699
13864
  /* @__PURE__ */ jsx(ShowValue$1, { question, option }),
13700
- /* @__PURE__ */ jsx(ShowDescription, { option }),
13865
+ /* @__PURE__ */ jsx(ShowDescription, { question, option }),
13701
13866
  /* @__PURE__ */ jsx(SubQuestions, { questions: option.questions })
13702
13867
  ] });
13703
13868
  };
13704
- const ShowDescription = ({ option }) => {
13705
- const interpolateCurlies = React__default.useContext(InterpolateCurliesContext);
13706
- if (!option.label && !option.description) return null;
13707
- const label = option.label || option.description;
13708
- const description = option.label ? option.description : void 0;
13869
+ const InnerTitle$1 = ({ i18nKey }) => {
13870
+ const interpolatedString = useTranslationCurliesFor(i18nKey);
13871
+ if (!interpolatedString) return null;
13872
+ return /* @__PURE__ */ jsx("div", { className: "inner-title", dangerouslySetInnerHTML: { __html: interpolatedString } });
13873
+ };
13874
+ const ShowDescription = ({ question, option }) => {
13875
+ const label = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
13876
+ const description = useTranslationCurliesFor(`${question.key}.${option.key}.description`);
13877
+ if (!label) return null;
13709
13878
  return /* @__PURE__ */ jsxs("div", { className: "inline labelwrapper", children: [
13710
- /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: interpolateCurlies(label) } }) }),
13711
- description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html: interpolateCurlies(description || "") } })
13879
+ /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: label } }) }),
13880
+ description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html: description } })
13712
13881
  ] });
13713
13882
  };
13714
13883
  const ShowValue$1 = ({ question, option }) => {
@@ -13737,20 +13906,27 @@ const SelectQuestion = ({ question, fieldState, setQuestionRef }) => {
13737
13906
  id: `answer_${question.key}`,
13738
13907
  name: question.key,
13739
13908
  children: [
13740
- question.placeholder ? /* @__PURE__ */ jsx("option", { className: "placeholder", children: question.placeholder }, "placeholder") : null,
13741
- question.children.map((child) => child.type === "optgroup" ? /* @__PURE__ */ jsx(Optgroup, { label: child.label, options: child.options, fieldState }, child.key) : /* @__PURE__ */ jsx(Option$2, { option: child, fieldState }, child.key))
13909
+ /* @__PURE__ */ jsx(Placeholder, { i18nKey: `${question.key}.placeholder` }),
13910
+ question.children.map((child) => child.type === "optgroup" ? /* @__PURE__ */ jsx(Optgroup, { question, optgroup: child, fieldState }, child.key) : /* @__PURE__ */ jsx(Option$2, { question, option: child, fieldState }, child.key))
13742
13911
  ]
13743
13912
  }
13744
13913
  ) })
13745
13914
  ] })
13746
13915
  ] });
13747
13916
  };
13748
- const Optgroup = ({ label, options, fieldState }) => {
13749
- return /* @__PURE__ */ jsx("optgroup", { label, children: options.map((option) => /* @__PURE__ */ jsx(Option$2, { option, fieldState }, option.key)) });
13917
+ const Placeholder = ({ i18nKey }) => {
13918
+ const interpolatedString = useTranslationCurliesFor(i18nKey);
13919
+ if (!interpolatedString) return null;
13920
+ return /* @__PURE__ */ jsx("option", { className: "placeholder", children: interpolatedString }, "placeholder");
13921
+ };
13922
+ const Optgroup = ({ question, optgroup, fieldState }) => {
13923
+ const label = useTranslationCurliesFor(`${question.key}.${optgroup.key}.label`);
13924
+ return /* @__PURE__ */ jsx("optgroup", { label, children: optgroup.options.map((option) => /* @__PURE__ */ jsx(Option$2, { question, option, fieldState }, option.key)) });
13750
13925
  };
13751
- const Option$2 = ({ option, fieldState }) => {
13926
+ const Option$2 = ({ question, option, fieldState }) => {
13927
+ const interpolatedString = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
13752
13928
  if (option.hidden && fieldState.value !== option.key) return null;
13753
- return /* @__PURE__ */ jsx("option", { value: option.key, disabled: false, children: option.label || option.description });
13929
+ return /* @__PURE__ */ jsx("option", { value: option.key, disabled: false, children: interpolatedString });
13754
13930
  };
13755
13931
  function htmlId$7(question) {
13756
13932
  return `answer_${question.key}_input`;
@@ -13769,6 +13945,7 @@ const DatePartsQuestion = ({ question, fieldState, setQuestionRef }) => {
13769
13945
  };
13770
13946
  const DateParts = ({ question, parts, fieldState }) => {
13771
13947
  const { t: t2 } = useTranslation();
13948
+ const questionTitle = useTranslationCurliesFor(`${question.key}.title`);
13772
13949
  const handleChange = (event, component) => {
13773
13950
  const newValue = new Map(fieldState.value || []);
13774
13951
  const componentValue = event.target.value.trim();
@@ -13797,7 +13974,7 @@ const DateParts = ({ question, parts, fieldState }) => {
13797
13974
  {
13798
13975
  id: `answer_${question.key}_${datePart.part}`,
13799
13976
  name: `${question.key}_${datePart.part}`,
13800
- "aria-label": `${question.title} ${t2(datePart.part)}`,
13977
+ "aria-label": `${questionTitle} ${t2(datePart.part)}`,
13801
13978
  type: "text",
13802
13979
  className: "me-1",
13803
13980
  value: ((_a = fieldState.value) == null ? void 0 : _a.get(datePart.part)) || "",
@@ -14886,14 +15063,15 @@ const LABEL_MX = 16;
14886
15063
  const LABEL_ROW_SPACING = 4;
14887
15064
  const LABEL_BORDER = 1;
14888
15065
  const SliderQuestion = ({ question, fieldState, setQuestionRef }) => {
15066
+ const labels = useTranslationCurliesArrayFor(question.labelsI18nKey || `${question.key}.labels`) || [];
14889
15067
  const handleChange = (newValues) => {
14890
15068
  fieldState.setValue(newValues[0]);
14891
15069
  };
14892
15070
  const parentRef = React__default.useRef(null);
14893
- const labelPositioning = useLabelPositioning(question.labels, parentRef);
15071
+ const labelPositioning = useLabelPositioning(labels, parentRef);
14894
15072
  const blank = fieldState.value == null;
14895
15073
  const value = fieldState.value ?? question.defaultPosition;
14896
- const markerLabels = calculateMarkerLabels$1(question);
15074
+ const markerLabels = calculateMarkerLabels(question, labels);
14897
15075
  return /* @__PURE__ */ jsxs(QuestionWrapper, { question, fieldState, setQuestionRef, children: [
14898
15076
  /* @__PURE__ */ jsx(MainLabel, { question }),
14899
15077
  /* @__PURE__ */ jsxs("div", { className: "description-and-fields", dir: "ltr", children: [
@@ -14907,8 +15085,8 @@ const SliderQuestion = ({ question, fieldState, setQuestionRef }) => {
14907
15085
  max: question.maximum,
14908
15086
  step: question.step,
14909
15087
  disabled: fieldState.disabled,
14910
- renderTrack: ({ props, children }) => /* @__PURE__ */ jsx("div", { ...props, style: { ...props.style, ...trackStyles$1 }, children }),
14911
- renderThumb: (thumbProps) => renderThumb$1({
15088
+ renderTrack: ({ props, children }) => /* @__PURE__ */ jsx("div", { ...props, style: { ...props.style, ...trackStyles }, children }),
15089
+ renderThumb: (thumbProps) => renderThumb({
14912
15090
  ...thumbProps,
14913
15091
  id: `answer_${question.key}`,
14914
15092
  blank: blank || fieldState.disabled,
@@ -14917,13 +15095,13 @@ const SliderQuestion = ({ question, fieldState, setQuestionRef }) => {
14917
15095
  isActiveQuestion: fieldState.isActiveQuestion,
14918
15096
  onFocus: fieldState.setAsActiveQuestion
14919
15097
  }),
14920
- renderMark: ({ props, index }) => markerLabels[index] !== void 0 ? renderMark$1(props, markerLabels[index], labelPositioning) : null
15098
+ renderMark: ({ props, index }) => markerLabels[index] !== void 0 ? renderMark(props, markerLabels[index], labelPositioning) : null
14921
15099
  }
14922
15100
  ) })
14923
15101
  ] })
14924
15102
  ] });
14925
15103
  };
14926
- const renderThumb$1 = ({ props, id, value, isDragged, blank, showTooltip, startThumbHidden, isActiveQuestion, onFocus }) => {
15104
+ const renderThumb = ({ props, id, value, isDragged, blank, showTooltip, startThumbHidden, isActiveQuestion, onFocus }) => {
14927
15105
  if (startThumbHidden && blank) {
14928
15106
  return /* @__PURE__ */ createElement("div", { ...props, key: props.key, onFocus });
14929
15107
  }
@@ -14936,10 +15114,10 @@ const renderThumb$1 = ({ props, id, value, isDragged, blank, showTooltip, startT
14936
15114
  key: props.key,
14937
15115
  style: {
14938
15116
  ...props.style,
14939
- ...baseThumbStyles$1,
14940
- ...isDragged && isDraggedThumbStyles$1,
15117
+ ...baseThumbStyles,
15118
+ ...isDragged && isDraggedThumbStyles,
14941
15119
  ...isActiveQuestion && activeThumbStyles,
14942
- ...blank && invalidThumbStyles$1
15120
+ ...blank && invalidThumbStyles
14943
15121
  },
14944
15122
  onFocus
14945
15123
  },
@@ -14950,10 +15128,10 @@ const renderThumb$1 = ({ props, id, value, isDragged, blank, showTooltip, startT
14950
15128
  border: "1px solid oklch(var(--foreground))",
14951
15129
  borderWidth: "0 1px 0 1px"
14952
15130
  } }),
14953
- showTooltip && isDragged && /* @__PURE__ */ jsx("div", { style: labelStyles$1, children: value })
15131
+ showTooltip && isDragged && /* @__PURE__ */ jsx("div", { style: labelStyles, children: value })
14954
15132
  );
14955
15133
  };
14956
- const renderMark$1 = (props, label, { info, setRef }) => {
15134
+ const renderMark = (props, label, { info, setRef }) => {
14957
15135
  const top = LABEL_MIN_ARROW_HEIGHT + (info.tops[label.idx] || 0);
14958
15136
  const labelBorderRadius = label.first ? "0 4px 4px" : label.last ? "4px 0 4px 4px" : "4px";
14959
15137
  return /* @__PURE__ */ createElement(
@@ -15007,24 +15185,25 @@ const LabelArrow = ({ top, label }) => {
15007
15185
  /* @__PURE__ */ jsx("path", { d: arrow, fill: "oklch(var(--slider-track))", strokeLinecap: "square", stroke: "oklch(var(--foreground))" })
15008
15186
  ] }) });
15009
15187
  };
15010
- const calculateMarkerLabels$1 = (question) => {
15011
- if (question.labels.length === 0) return {};
15188
+ const calculateMarkerLabels = (question, labels) => {
15012
15189
  const nroMarkers = (question.maximum - question.minimum) / question.step;
15190
+ if (labels.length === 0) return {};
15191
+ if (labels.length === 1) return { [Math.floor(nroMarkers / 2)]: { text: labels[0], first: false, last: false, idx: 0 } };
15013
15192
  const markerLabels = {};
15014
- question.labels.forEach((label, idx) => {
15015
- const markerIdx = Math.floor(idx * nroMarkers / (question.labels.length - 1));
15016
- markerLabels[markerIdx] = { text: label, first: idx === 0, last: idx === question.labels.length - 1, idx };
15193
+ labels.forEach((label, idx) => {
15194
+ const markerIdx = Math.floor(idx * nroMarkers / (labels.length - 1));
15195
+ markerLabels[markerIdx] = { text: label, first: idx === 0, last: idx === labels.length - 1, idx };
15017
15196
  });
15018
15197
  return markerLabels;
15019
15198
  };
15020
- const trackStyles$1 = {
15199
+ const trackStyles = {
15021
15200
  border: `${TRACK_BORDER}px solid oklch(var(--foreground))`,
15022
15201
  background: "oklch(var(--slider-track))",
15023
15202
  height: TRACK_HEIGHT,
15024
15203
  borderRadius: "2px",
15025
15204
  marginBottom: "18px"
15026
15205
  };
15027
- const baseThumbStyles$1 = {
15206
+ const baseThumbStyles = {
15028
15207
  height: "28px",
15029
15208
  width: "34px",
15030
15209
  backgroundColor: "oklch(var(--background))",
@@ -15034,16 +15213,16 @@ const baseThumbStyles$1 = {
15034
15213
  const activeThumbStyles = {
15035
15214
  backgroundColor: "rgba(27,124,194,0.7)"
15036
15215
  };
15037
- const isDraggedThumbStyles$1 = {
15216
+ const isDraggedThumbStyles = {
15038
15217
  boxShadow: "inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB"
15039
15218
  };
15040
- const invalidThumbStyles$1 = {
15219
+ const invalidThumbStyles = {
15041
15220
  backgroundColor: "transparent",
15042
15221
  border: "none",
15043
15222
  padding: "1px",
15044
15223
  boxShadow: "inset 0 0 1px oklch(var(--foreground)), inset 0 1px 7px oklch(var(--foreground) / 0.5), 0 3px 6px -3px oklch(var(--foreground) / 0.3)"
15045
15224
  };
15046
- const labelStyles$1 = {
15225
+ const labelStyles = {
15047
15226
  position: "absolute",
15048
15227
  top: "-29px",
15049
15228
  left: "16px",
@@ -15134,136 +15313,6 @@ function maxHeight(nodes) {
15134
15313
  function overlaps(nodes) {
15135
15314
  return nodes.some((node, idx) => idx > 0 && node.getBoundingClientRect().left - LABEL_MX < nodes[idx - 1].getBoundingClientRect().right);
15136
15315
  }
15137
- const OldSliderQuestion = ({ question, fieldState, setQuestionRef }) => {
15138
- const handleChange = (newValues) => {
15139
- fieldState.setValue(newValues[0]);
15140
- };
15141
- const blank = fieldState.value == null;
15142
- const value = fieldState.value || question.defaultPosition;
15143
- const markerLabels = calculateMarkerLabels(question);
15144
- return /* @__PURE__ */ jsxs(QuestionWrapper, { question, fieldState, setQuestionRef, children: [
15145
- /* @__PURE__ */ jsx(MainLabel, { question }),
15146
- /* @__PURE__ */ jsxs("div", { className: "description-and-fields", children: [
15147
- /* @__PURE__ */ jsx(QuestionDescription, { question }),
15148
- /* @__PURE__ */ jsx("div", { className: "fields mt-3", children: /* @__PURE__ */ jsx(
15149
- libExports.Range,
15150
- {
15151
- values: [value],
15152
- onChange: handleChange,
15153
- min: question.minimum,
15154
- max: question.maximum,
15155
- step: question.step,
15156
- disabled: fieldState.disabled,
15157
- renderTrack: ({ props, children }) => /* @__PURE__ */ jsx("div", { ...props, style: { ...props.style, ...trackStyles }, children }),
15158
- renderThumb: (thumbProps) => renderThumb({
15159
- ...thumbProps,
15160
- blank: blank || fieldState.disabled,
15161
- showTooltip: question.valueTooltip,
15162
- startThumbHidden: question.startThumbHidden,
15163
- onFocus: fieldState.setAsActiveQuestion
15164
- }),
15165
- renderMark: ({ props, index }) => markerLabels[index] !== void 0 ? renderMark(props, markerLabels[index]) : null
15166
- }
15167
- ) })
15168
- ] })
15169
- ] });
15170
- };
15171
- const renderThumb = ({ props, value, isDragged, blank, showTooltip, startThumbHidden, onFocus }) => {
15172
- if (startThumbHidden && blank) {
15173
- return /* @__PURE__ */ jsx("div", { ...props });
15174
- }
15175
- return /* @__PURE__ */ jsxs(
15176
- "div",
15177
- {
15178
- ...props,
15179
- style: {
15180
- ...props.style,
15181
- ...baseThumbStyles,
15182
- ...isDragged && isDraggedThumbStyles,
15183
- ...blank && invalidThumbStyles
15184
- },
15185
- onFocus,
15186
- children: [
15187
- "||",
15188
- showTooltip && isDragged && /* @__PURE__ */ jsx("div", { style: labelStyles, children: value })
15189
- ]
15190
- }
15191
- );
15192
- };
15193
- const renderMark = (props, label) => /* @__PURE__ */ jsx(
15194
- "div",
15195
- {
15196
- ...props,
15197
- style: {
15198
- ...props.style,
15199
- top: "18px",
15200
- marginTop: 0,
15201
- // override from props.style
15202
- height: "9px",
15203
- width: "1px",
15204
- backgroundColor: "#d3d3d3"
15205
- },
15206
- children: /* @__PURE__ */ jsx(
15207
- "div",
15208
- {
15209
- style: {
15210
- position: "absolute",
15211
- top: "8px",
15212
- width: "max-content",
15213
- textAlign: label.first ? "left" : label.last ? "right" : "center",
15214
- transform: label.first ? void 0 : label.last ? "translateX(-100%)" : "translateX(-50%)"
15215
- },
15216
- dangerouslySetInnerHTML: { __html: label.text }
15217
- }
15218
- )
15219
- }
15220
- );
15221
- const calculateMarkerLabels = (question) => {
15222
- if (question.labels.length === 0) return {};
15223
- const nroMarkers = (question.maximum - question.minimum) / question.step;
15224
- const markerLabels = {};
15225
- question.labels.forEach((label, labelIndex) => {
15226
- const markerIdx = Math.floor(labelIndex * nroMarkers / (question.labels.length - 1));
15227
- markerLabels[markerIdx] = { text: label, first: labelIndex === 0, last: labelIndex === question.labels.length - 1 };
15228
- });
15229
- return markerLabels;
15230
- };
15231
- const trackStyles = {
15232
- border: "1px solid #d3d3d3",
15233
- background: "#fafafa",
15234
- height: "18px",
15235
- borderRadius: "4px",
15236
- marginBottom: "18px",
15237
- boxShadow: "inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB"
15238
- };
15239
- const baseThumbStyles = {
15240
- height: "28px",
15241
- width: "34px",
15242
- textAlign: "center",
15243
- lineHeight: "27px",
15244
- backgroundColor: "rgba(27,124,194,0.7)",
15245
- color: "#E8E7E6",
15246
- border: "1px solid #9AC1DD",
15247
- borderRadius: "3px",
15248
- boxShadow: "inset 0 0 1px #FFF, inset 0 1px 7px #9AC1DD, 0 3px 6px -3px #9AC1DD"
15249
- };
15250
- const isDraggedThumbStyles = {
15251
- boxShadow: "inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB"
15252
- };
15253
- const invalidThumbStyles = {
15254
- backgroundColor: "rgba(255, 255, 255, .5)",
15255
- boxShadow: "none",
15256
- border: "1px solid #D9D9D9"
15257
- };
15258
- const labelStyles = {
15259
- position: "absolute",
15260
- top: "-28px",
15261
- left: "17px",
15262
- transform: "translateX(-50%)",
15263
- color: "#000",
15264
- fontWeight: "bold",
15265
- padding: "4px"
15266
- };
15267
15316
  const TextareaQuestion = ({ question, fieldState, setQuestionRef }) => {
15268
15317
  var _a;
15269
15318
  const mbvArgs = useMightBecomeValid((_a = fieldState.value) == null ? void 0 : _a.toString(), (newValue) => {
@@ -15315,19 +15364,13 @@ const CheckBoxQuestion = ({ question, fieldState, setQuestionRef }) => {
15315
15364
  fieldState
15316
15365
  },
15317
15366
  child.key
15318
- ) : /* @__PURE__ */ jsx(
15319
- "div",
15320
- {
15321
- className: "text-lg font-medium my-1 inner-title",
15322
- dangerouslySetInnerHTML: { __html: child.html }
15323
- },
15324
- child.key
15325
- )) })
15367
+ ) : /* @__PURE__ */ jsx(InnerTitle, { i18nKey: `${question.key}.${child.key}.html` }, child.key)) })
15326
15368
  ] })
15327
15369
  ] });
15328
15370
  };
15329
15371
  const Option$1 = ({ question, option, fieldState }) => {
15330
- const interpolateCurlies = React__default.useContext(InterpolateCurliesContext);
15372
+ const label = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
15373
+ const description = useTranslationCurliesFor(`${question.key}.${option.key}.description`);
15331
15374
  const value = fieldState.value || /* @__PURE__ */ new Set();
15332
15375
  const checked = value.has(option.key) || false;
15333
15376
  if (option.hidden && !checked) return null;
@@ -15340,8 +15383,6 @@ const Option$1 = ({ question, option, fieldState }) => {
15340
15383
  // TODO
15341
15384
  });
15342
15385
  const handleChange = (_event) => option.key && fieldState.setValue(toggleValue(fieldState, option.key, question));
15343
- const label = option.label || option.description;
15344
- const description = option.label ? option.description : void 0;
15345
15386
  return /* @__PURE__ */ jsxs("div", { className: divClassNames, children: [
15346
15387
  /* @__PURE__ */ jsx("div", { className: "inline radiocheckwrapper", children: /* @__PURE__ */ jsx(
15347
15388
  "input",
@@ -15358,12 +15399,17 @@ const Option$1 = ({ question, option, fieldState }) => {
15358
15399
  ) }),
15359
15400
  /* @__PURE__ */ jsx(ShowValue, { question, option }),
15360
15401
  /* @__PURE__ */ jsxs("div", { className: "inline labelwrapper", children: [
15361
- /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: interpolateCurlies(label) } }) }),
15362
- description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html: interpolateCurlies(description || "") } })
15402
+ /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: label } }) }),
15403
+ description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html: description } })
15363
15404
  ] }),
15364
15405
  /* @__PURE__ */ jsx(SubQuestions, { questions: option.questions })
15365
15406
  ] });
15366
15407
  };
15408
+ const InnerTitle = ({ i18nKey }) => {
15409
+ const interpolatedString = useTranslationCurliesFor(i18nKey);
15410
+ if (!interpolatedString) return null;
15411
+ return /* @__PURE__ */ jsx("div", { className: "text-lg font-medium my-1 inner-title", dangerouslySetInnerHTML: { __html: interpolatedString } });
15412
+ };
15367
15413
  const ShowValue = () => {
15368
15414
  return null;
15369
15415
  };
@@ -17568,6 +17614,7 @@ const Option = ({ option }) => {
17568
17614
  };
17569
17615
  const SplitToUnitsQuestion = ({ question, fieldState, setQuestionRef }) => {
17570
17616
  const { t: t2 } = useTranslation();
17617
+ const questionTitle = useTranslationCurliesFor(`${question.key}.title`);
17571
17618
  const valueHash = makeValueHash(question, fieldState.value ?? null);
17572
17619
  const setValue = (key, value) => {
17573
17620
  fieldState.setValue(calcValue(question, valueHash.set(key, value)));
@@ -17581,7 +17628,7 @@ const SplitToUnitsQuestion = ({ question, fieldState, setQuestionRef }) => {
17581
17628
  "input",
17582
17629
  {
17583
17630
  type: "text",
17584
- "aria-label": `${question.title} ${t2(`units.${unit}`, { defaultValue: unit })}`,
17631
+ "aria-label": `${questionTitle} ${t2(`units.${unit}`, { defaultValue: unit })}`,
17585
17632
  id: `answer_${question.key}_${unit}`,
17586
17633
  name: `${question.key}_${unit}`,
17587
17634
  value: (valueHash == null ? void 0 : valueHash.get(unit)) ?? "",
@@ -17617,74 +17664,43 @@ function calcValue(question, values) {
17617
17664
  function htmlId(question) {
17618
17665
  return `answer_${question.key}_input`;
17619
17666
  }
17667
+ const RenderWithFieldState = ({ Component, question }) => {
17668
+ const { response, setQuestionRef } = React__default.useContext(QubyContext);
17669
+ const fieldState = React__default.useSyncExternalStore(
17670
+ response.subscribeToQuestion(question.key),
17671
+ () => response.getFieldState(question.key)
17672
+ );
17673
+ if (fieldState.hidden) return null;
17674
+ return /* @__PURE__ */ jsx(Component, { question, fieldState, setQuestionRef }, question.key);
17675
+ };
17620
17676
  const QuestionItem = ({ fieldKey }) => {
17621
- const { questionnaire, response, setQuestionRef, displayOptions } = React__default.useContext(QubyContext);
17677
+ const { questionnaire } = React__default.useContext(QubyContext);
17622
17678
  const question = questionnaire.getField(fieldKey);
17623
17679
  switch (question.as) {
17624
- case "string": {
17625
- const fieldState = response.getFieldState(fieldKey);
17626
- if (fieldState.hidden) return null;
17627
- return /* @__PURE__ */ jsx(StringQuestion, { question, fieldState, setQuestionRef });
17628
- }
17629
- case "country_select": {
17630
- const fieldState = response.getFieldState(fieldKey);
17631
- if (fieldState.hidden) return null;
17632
- return /* @__PURE__ */ jsx(CountrySelectQuestion, { question, fieldState, setQuestionRef });
17633
- }
17634
- case "scale": {
17635
- const fieldState = response.getFieldState(fieldKey);
17636
- if (fieldState.hidden) return null;
17637
- return /* @__PURE__ */ jsx(ScaleQuestion, { question, fieldState, setQuestionRef });
17638
- }
17639
- case "radio": {
17640
- const fieldState = response.getFieldState(fieldKey);
17641
- if (fieldState.hidden) return null;
17642
- return /* @__PURE__ */ jsx(RadioQuestion, { question, fieldState, setQuestionRef });
17643
- }
17644
- case "select": {
17645
- const fieldState = response.getFieldState(fieldKey);
17646
- if (fieldState.hidden) return null;
17647
- return /* @__PURE__ */ jsx(SelectQuestion, { question, fieldState, setQuestionRef });
17648
- }
17649
- case "date_parts": {
17650
- const fieldState = response.getFieldState(fieldKey);
17651
- if (fieldState.hidden) return null;
17652
- return /* @__PURE__ */ jsx(DatePartsQuestion, { question, fieldState, setQuestionRef });
17653
- }
17654
- case "integer": {
17655
- const fieldState = response.getFieldState(fieldKey);
17656
- if (fieldState.hidden) return null;
17657
- return /* @__PURE__ */ jsx(IntegerQuestion, { question, fieldState, setQuestionRef });
17658
- }
17659
- case "float": {
17660
- const fieldState = response.getFieldState(fieldKey);
17661
- if (fieldState.hidden) return null;
17662
- return /* @__PURE__ */ jsx(FloatQuestion, { question, fieldState, setQuestionRef });
17663
- }
17664
- case "slider": {
17665
- const fieldState = response.getFieldState(fieldKey);
17666
- if (fieldState.hidden) return null;
17667
- if (displayOptions.newLayout) {
17668
- return /* @__PURE__ */ jsx(SliderQuestion, { question, fieldState, setQuestionRef });
17669
- } else {
17670
- return /* @__PURE__ */ jsx(OldSliderQuestion, { question, fieldState, setQuestionRef });
17671
- }
17672
- }
17673
- case "split_to_units": {
17674
- const fieldState = response.getFieldState(fieldKey);
17675
- if (fieldState.hidden) return null;
17676
- return /* @__PURE__ */ jsx(SplitToUnitsQuestion, { question, fieldState, setQuestionRef });
17677
- }
17678
- case "textarea": {
17679
- const fieldState = response.getFieldState(fieldKey);
17680
- if (fieldState.hidden) return null;
17681
- return /* @__PURE__ */ jsx(TextareaQuestion, { question, fieldState, setQuestionRef });
17682
- }
17683
- case "check_box": {
17684
- const fieldState = response.getFieldState(fieldKey);
17685
- if (fieldState.hidden) return null;
17686
- return /* @__PURE__ */ jsx(CheckBoxQuestion, { question, fieldState, setQuestionRef });
17687
- }
17680
+ case "string":
17681
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: StringQuestion, question }, fieldKey);
17682
+ case "country_select":
17683
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: CountrySelectQuestion, question }, fieldKey);
17684
+ case "scale":
17685
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: ScaleQuestion, question }, fieldKey);
17686
+ case "radio":
17687
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: RadioQuestion, question }, fieldKey);
17688
+ case "select":
17689
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: SelectQuestion, question }, fieldKey);
17690
+ case "date_parts":
17691
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: DatePartsQuestion, question }, fieldKey);
17692
+ case "integer":
17693
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: IntegerQuestion, question }, fieldKey);
17694
+ case "float":
17695
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: FloatQuestion, question }, fieldKey);
17696
+ case "slider":
17697
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: SliderQuestion, question }, fieldKey);
17698
+ case "split_to_units":
17699
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: SplitToUnitsQuestion, question }, fieldKey);
17700
+ case "textarea":
17701
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: TextareaQuestion, question }, fieldKey);
17702
+ case "check_box":
17703
+ return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: CheckBoxQuestion, question }, fieldKey);
17688
17704
  }
17689
17705
  throw new Error(`unknown question type`);
17690
17706
  };
@@ -17852,6 +17868,16 @@ function useInView({
17852
17868
  result.entry = result[2];
17853
17869
  return result;
17854
17870
  }
17871
+ const TranslationCurlies = ({ i18nKey, Component }) => {
17872
+ const interpolatedString = useTranslationCurliesFor(i18nKey);
17873
+ if (!interpolatedString) return null;
17874
+ return /* @__PURE__ */ jsx(Component, { children: interpolatedString });
17875
+ };
17876
+ const TranslationCurliesHtml = ({ i18nKey, Component }) => {
17877
+ const interpolatedString = useTranslationCurliesFor(i18nKey);
17878
+ if (!interpolatedString) return null;
17879
+ return /* @__PURE__ */ jsx(Component, { dangerouslySetInnerHTML: { __html: interpolatedString } });
17880
+ };
17855
17881
  const InfoItem = ({ item }) => {
17856
17882
  const [open, setOpen] = React__default.useState(item.startOpen);
17857
17883
  const [opening, setOpening] = React__default.useState(false);
@@ -17889,12 +17915,12 @@ const InfoItem = ({ item }) => {
17889
17915
  onKeyDown: iconClick,
17890
17916
  "aria-haspopup": "dialog",
17891
17917
  "aria-expanded": open || item.startOpen && inView,
17892
- "aria-controls": `#%{item.key}`,
17918
+ "aria-controls": `%{item.key}`,
17893
17919
  tabIndex: item.startOpen ? -1 : 0,
17894
17920
  children: item.subtype == "question-bar" ? null : /* @__PURE__ */ jsx(InfoSvg, {})
17895
17921
  }
17896
17922
  ),
17897
- open && /* @__PURE__ */ jsx("div", { id: item.key, className: classNames("info-html prose", { "open": open, "opening": opening }), children: /* @__PURE__ */ jsx("div", { dangerouslySetInnerHTML: { __html: item.html } }) }),
17923
+ open && /* @__PURE__ */ jsx("div", { id: item.key, className: classNames("info-html prose", { "open": open, "opening": opening }), children: /* @__PURE__ */ jsx(TranslationCurliesHtml, { i18nKey: `${item.key}.html`, Component: "div" }) }),
17898
17924
  item.items.map((subItem, idx) => /* @__PURE__ */ jsx(PanelItem, { item: subItem }, idx))
17899
17925
  ] });
17900
17926
  };
@@ -17915,7 +17941,7 @@ const PanelItem = (props) => {
17915
17941
  return /* @__PURE__ */ jsx(HtmlItem, { item: props.item });
17916
17942
  }
17917
17943
  case "question": {
17918
- return /* @__PURE__ */ jsx(QuestionItem, { fieldKey: props.item.key });
17944
+ return /* @__PURE__ */ jsx(QuestionItem, { fieldKey: props.item.key }, props.item.key);
17919
17945
  }
17920
17946
  case "info": {
17921
17947
  return /* @__PURE__ */ jsx(InfoItem, { item: props.item });
@@ -17927,17 +17953,10 @@ const PanelItem = (props) => {
17927
17953
  };
17928
17954
  const PanelContent = ({ panel }) => {
17929
17955
  return /* @__PURE__ */ jsxs("div", { className: "m-panel-padding", children: [
17930
- /* @__PURE__ */ jsx(Title, { title: panel.title }),
17956
+ /* @__PURE__ */ jsx(TranslationCurlies, { i18nKey: `${panel.key}.title`, Component: "h1" }),
17931
17957
  panel.items.map((item, idx) => /* @__PURE__ */ jsx(PanelItem, { item }, idx))
17932
17958
  ] });
17933
17959
  };
17934
- const Title = ({ title }) => {
17935
- if (title) {
17936
- return /* @__PURE__ */ jsx("h1", { children: title });
17937
- } else {
17938
- return null;
17939
- }
17940
- };
17941
17960
  const buttonsClassName = "buttons bg-slate-100 dark:bg-slate-700 p-panel-padding";
17942
17961
  const Paginator = (props) => {
17943
17962
  const [activeIndex, setActiveIndex] = React__default.useState(props.panelLogic.firstPanelIndexToActivate());
@@ -18020,15 +18039,19 @@ const Button = ({ value, onClick, onFocus, variant }) => {
18020
18039
  const Hotkeys = () => {
18021
18040
  return null;
18022
18041
  };
18023
- const InterpolateCurliesContext = React__default.createContext((str) => str);
18042
+ const Footer = () => {
18043
+ const footerHtml = useTranslationCurliesFor("footer");
18044
+ if (!footerHtml) return null;
18045
+ return /* @__PURE__ */ jsx("footer", { className: "quby-footer", dangerouslySetInnerHTML: { __html: footerHtml } });
18046
+ };
18024
18047
  const AnswerPage = ({ questionnaire, response, displayOptions, allowSkipValidation, onSave, onAbort, onPreviousQuestionnaire }) => {
18025
18048
  useRerenderOnResponseChange(response);
18026
18049
  const [nextSavePressWillOnlyRunMinimalValidations, setNextSavePressWillOnlyRunMinimalValidations] = useNextSavePressWillOnlyRunMinimalValidations(response);
18027
18050
  const qubyRef = React__default.useRef(null);
18051
+ const questionRefs = React__default.useMemo(() => /* @__PURE__ */ new Map(), [questionnaire]);
18052
+ const translationsCurlies = React__default.useMemo(() => new QuestionnaireTranslationsCurlies(response, questionnaire, questionnaire.defaultLanguage), [response, questionnaire, questionnaire.defaultLanguage]);
18028
18053
  useQuestionShortkeys(response, questionnaire, qubyRef);
18029
18054
  const displayMode = displayOptions.displayMode;
18030
- const questionRefs = /* @__PURE__ */ new Map();
18031
- const curliesInterpolator = new CurliesInterpolator(response, questionnaire);
18032
18055
  const panelLogic = new PanelLogic(response, questionnaire.panels);
18033
18056
  const beforeNext = (panelIndex) => {
18034
18057
  const panel = questionnaire.panels[panelIndex];
@@ -18067,13 +18090,13 @@ const AnswerPage = ({ questionnaire, response, displayOptions, allowSkipValidati
18067
18090
  scrollToAndFocus(ref);
18068
18091
  }
18069
18092
  } : void 0;
18070
- const setQuestionRef = (key, ref) => {
18093
+ const setQuestionRef = React__default.useCallback((key, ref) => {
18071
18094
  questionRefs.set(key, ref);
18072
- };
18095
+ }, [questionRefs]);
18073
18096
  const topClassName = classNames({
18074
18097
  dark: displayOptions.darkMode
18075
18098
  });
18076
- return /* @__PURE__ */ jsx(InterpolateCurliesContext.Provider, { value: curliesInterpolator.interpolateCurlies, children: /* @__PURE__ */ jsx(QubyContext.Provider, { value: { questionnaire, response, displayOptions, setQuestionRef }, children: /* @__PURE__ */ jsxs("div", { ref: qubyRef, className: topClassName, style: mapCssVars(questionnaire.cssVars), dir: displayOptions.dir, children: [
18099
+ return /* @__PURE__ */ jsx(QubyContext.Provider, { value: { questionnaire, response, displayOptions, setQuestionRef, translationsCurlies }, children: /* @__PURE__ */ jsxs("div", { ref: qubyRef, className: topClassName, style: mapCssVars(questionnaire.cssVars), dir: displayOptions.dir, children: [
18077
18100
  /* @__PURE__ */ jsx("form", { className: "paged", onSubmit: (event) => event.preventDefault(), children: /* @__PURE__ */ jsx(
18078
18101
  Paginator,
18079
18102
  {
@@ -18087,13 +18110,13 @@ const AnswerPage = ({ questionnaire, response, displayOptions, allowSkipValidati
18087
18110
  onFocus: () => response.setActiveQuestion(null)
18088
18111
  }
18089
18112
  ) }),
18090
- questionnaire.footer && /* @__PURE__ */ jsx("footer", { dangerouslySetInnerHTML: { __html: questionnaire.footer } })
18091
- ] }) }) });
18113
+ /* @__PURE__ */ jsx(Footer, {})
18114
+ ] }) });
18092
18115
  };
18093
18116
  const useRerenderOnResponseChange = (response) => {
18094
18117
  const [_2, setCounter] = React__default.useState(0);
18095
18118
  React__default.useEffect(() => {
18096
- const handleChange = (_response) => setCounter((number) => number + 1);
18119
+ const handleChange = (_response, type) => ["visibilityChanged"].includes(type) && setCounter((number) => number + 1);
18097
18120
  response.onChange(handleChange);
18098
18121
  return () => response.offChange(handleChange);
18099
18122
  });
@@ -18118,7 +18141,7 @@ const scrollToAndFocus = (ref) => {
18118
18141
  firstInput.focus();
18119
18142
  }
18120
18143
  };
18121
- const styles = '/*\n! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: \'\';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user\'s configured `sans` font-family by default.\n5. Use the user\'s configured `sans` font-feature-settings by default.\n6. Use the user\'s configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user\'s configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type=\'button\'],\n[type=\'reset\'],\n[type=\'submit\'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type=\'search\'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user\'s configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role="button"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don\'t get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n em {\n font-style: italic;\n font-weight: 500;\n }\n\n strong {\n font-weight: bolder;\n }\n strong em {\n font-weight: inherit;\n }\n\n em.clean {\n font-style: inherit;\n }\n\n strong.clean { \n font-weight: inherit;\n }\n\n .underline { /* mostly for <strong class="clean underline"> */\n text-decoration: underline;\n }\n\n /* de-emphasize the text */\n .de-em {\n font-weight: 300;\n}\n .de-em em {\n font-weight: 400;\n}\n .de-em strong {\n font-weight: 600;\n}\n\n a {\n color: oklch(var(--primary));\n text-decoration: underline;\n }\n\n .serif {\n font-family: Georgia, serif;\n }\n\n small {\n font-size: 0.8rem;\n }\n .text-center img, .text-center svg, .text-center input[type="radio"] { /* These are made display block by tailwind, but we want to center when scaled */\n margin-inline: auto;\n }\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n font-weight: 700;\n}\n\n h1 em, h2 em, h3 em, h4 em, .h1 em, .h2 em, .h3 em, .h4 em {\n font-weight: inherit;\n }\n\n h1 strong, h2 strong, h3 strong, h4 strong, .h1 strong, .h2 strong, .h3 strong, .h4 strong {\n font-weight: 900;\n}\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n margin: 1.5rem 0 1rem;\n }\n\n h1, .h1 {\n font-size: 1.75rem;\n margin: 1.5rem 0 2rem;\n }\n\n h2, .h2 {\n font-size: 1.5rem;\n }\n\n h3, .h3 {\n font-size: 1.25rem;\n }\n\n h4, .h4 {\n font-size: 1rem;\n }\n :host {\n --page: 1 0 0;\n --background: 1 0 0;\n --foreground: .21 .04 266; /* text color */\n --foreground-80: .38 .04 266;\n --foreground-60: .55 .04 266;\n --muted: var(--foreground-60); /* text color muted */\n --super-muted: .95 .04 266;\n --primary: .454 .135 254;\n --primary-muted: .5 .135 254;\n --primary-hover: 0.5 0.16 254;\n --primary-inv: var(--background);\n --error-bar: .64 .24 27;\n --error-background: var(--error-bar) / .4;\n --slider-track: .91 0 0;\n --info-block-bg: .87 .055 223;\n --info-block-fg: var(--foreground);\n\n --panel-padding: 1rem;\n --default-radius: 0.25rem;\n --checkradio-size: 1rem;\n --checkradio-padding: 0.75rem;\n --question-padding: 2rem;\n --question-bar-padding: 8px;\n --question-bar-width: 4px;\n --list-indent: 1.5rem;\n\n /* To change in questionnaires */\n --option-gap-y: 0; /* vertical gap between options, 1, 2, 3, 4 */\n --question-mb-factor: 1; /* vertical gap to the next question, 0, 0.5, 1, 1.5, 2 */\n --max-page-width: 75rem;\n }\n\n @media(min-width: 800px) {\n :host {\n --panel-padding: 2rem;\n --question-bar-padding: 10px;\n }\n }\n\n .dark {\n --page: .186 .031 272;\n --background: 0 0 0;\n --foreground: 1 0 0;\n --foreground-80: .8 0 0;\n --foreground-60: .6 0 0;\n --foreground-40: .4 0 0;\n --muted: var(--foreground-60);\n --super-muted: .3 0 0;\n --primary: .68 .16 254;\n --primary-hover: 0.5 0.16 254;\n --primary-muted: .3 .135 254;\n --primary-inv: var(--foreground);\n --slider-track: .23 0 197;\n --info-block-bg: .4342 .052 233;\n --info-block-fg: var(--foreground);\n }\n\n :host {\n all: initial;\n display: block;\n position: relative; /* fix absolute children when quby lives in a scrolling container */\n /* Copied from tailwind html css. */\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n\n /* Made normal font thinner (300) in tailwind.conf */\n\n font-weight: 400;\n }\n\n input, textarea, select {\n border: 1px solid oklch(var(--foreground));\n border-radius: var(--default-radius);\n }\n input:focus, textarea:focus, select:focus {\n box-shadow: 0 0 0 6px oklch(var(--primary) / .2);\n outline: 3px solid transparent; /* replace shadow when forced colors */\n border-color: oklch(var(--primary));\n }\n input:disabled, textarea:disabled, select:disabled {\n color: oklch(var(--foreground-60));\n border-color: oklch(var(--foreground-60));\n cursor: not-allowed;\n }\n\n input:not([type=checkbox]):not([type=radio]), textarea, select {\n padding: .4rem;\n background-color: oklch(var(--background));\n color: var(--foreground);\n caret-color: oklch(var(--primary));\n }\n\n input[type=checkbox], input[type=radio] {\n --check-color: var(--foreground); /* when active changes to primary */\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n position: relative;\n display: grid; /* easiest way to perfectly center the ::before */\n place-content: center;\n width: var(--checkradio-size);\n height: var(--checkradio-size);\n margin: .25rem 0;\n } /* center vertically, (line-height-height)/2 */\n input[type=checkbox]:hover, input[type=radio]:hover {\n border-color: oklch(var(--primary)); /* minimal feedback that clicking radio/label will do something */\n border-width: 2px;\n }\n input[type=checkbox]::before, input[type=radio]::before {\n content: "";\n width: calc(var(--checkradio-size) - 6px);\n height: calc(var(--checkradio-size) - 6px);\n transform: scale(0); /* hide when not checked */\n transition: 125ms transform ease-in-out;\n box-shadow: inset 1em 1em oklch(var(--check-color)); /* bg instead of bgcolor to enable printing */\n background-color: CanvasText; /* replace shadow when forced colors */\n }\n input[type=checkbox]::after, input[type=radio]::after {\n content: "";\n position: absolute;\n top: -4px;\n inset-inline-start: -4px;\n height: 24px;\n width: 24px;\n }\n input[type=checkbox]:checked::before, input[type=radio]:checked::before {\n transform: scale(1);\n }\n\n input[type=checkbox] {\n border-radius: var(--default-radius);\n }\n input[type=checkbox]::before {\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); /* checkmark */\n } \n input[type=radio] {\n border-radius: 50%;\n }\n input[type=radio]::before {\n border-radius: 50%;\n }\n .active input[type=checkbox]:not(:disabled), .active input[type=radio]:not(:disabled) {\n --check-color: var(--primary);\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.progress-bar {\n margin: var(--panel-padding);\n }\n.progress-bar .progress-wrapper .progress-slider {\n background-position: 0 4px;\n display: inline-block;\n height: 12px;\n border: 1px solid #ccc;\n border-radius: 6px;\n padding: 1px;\n }\n.panel .progress-bar .progress-wrapper {\n text-align: center;\n }\n.progress-bar .progress-stop {\n height: 8px;\n line-height: 8px;\n width: 6px;\n background: none;\n font-size: 6px;\n text-indent: -1234em;\n display: block;\n float: inline-start;\n }\n.progress-bar .progress-stop.first-child {\n width: 8px;\n border-radius: 5px 0 0 5px;\n }\n.progress-bar .progress-stop.last-child {\n width: 8px;\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.active {\n background: oklch(var(--muted));\n }\n.progress-bar .progress-stop.current {\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.current.first-child {\n border-radius: 5px;\n }\n.progress-bar .progress-details {\n color: has(var(--muted));\n font-size: 9px;\n }\n.prose p {\n margin: 0 0 1rem 0;\n }\n/* for things like description we want less, so the parent will determine the outer margin. */\n/* if only margin-trim was more widely supported */\n.prose > *:first-child {\n margin-top: 0;\n }\n.prose > *:last-child {\n margin-bottom: 0;\n }\n.prose ul {\n list-style-type: disc;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol {\n list-style-type: lower-alpha;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol.list-decimal {\n list-style-type: decimal;\n }\n.prose li {\n padding-inline-start: 0.5rem;\n }\n.prose hr {\n margin: var(--question-padding) 1rem;\n border: none;\n height: 0.125rem;\n background-color: oklch(var(--muted));\n }\n.prose hr.compact {\n margin: 1rem;\n }\nblockquote {\n margin: 1em 2em;\n }\nblockquote >* {\n font-style: italic;\n }\nblockquote >p::before,\n blockquote >p:last-child::after,\n blockquote >ul::before,\n blockquote >ul:last-child > li:last-child::after {\n content: "“";\n font-family: Georgia;\n font-size: 2.5rem;\n margin-block: -.8rem 0;\n margin-inline: -1.4rem 0;\n position: absolute;\n color: #666;\n }\nblockquote >ul::before {\n margin-inline-start: calc(-1.1rem - var(--list-indent));\n }\nblockquote >p:last-child::after,\n blockquote >ul:last-child > li:last-child::after {\n content: "”";\n margin: 0;\n margin-inline-start: -.1rem\n }\nblockquote.blue-quotes p::before,\n blockquote.blue-quotes p:last-child::after {\n color: #298ED5;\n }\n.visible {\n visibility: visible;\n}\n.absolute {\n position: absolute;\n}\n.sticky {\n position: sticky;\n}\n.order-last {\n order: 9999;\n}\n.float-right {\n float: right;\n}\n.m-panel-padding {\n margin: var(--panel-padding);\n}\n.mx-1 {\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.me-1 {\n margin-inline-end: 0.25rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.table {\n display: table;\n}\n.hidden {\n display: none;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-1\\/4 {\n width: 25%;\n}\n.w-1\\/5 {\n width: 20%;\n}\n.w-1\\/6 {\n width: 16.666667%;\n}\n.w-2\\/3 {\n width: 66.666667%;\n}\n.w-2\\/5 {\n width: 40%;\n}\n.w-3\\/4 {\n width: 75%;\n}\n.w-3\\/5 {\n width: 60%;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-5\\/6 {\n width: 83.333333%;\n}\n.w-full {\n width: 100%;\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.justify-between {\n justify-content: space-between;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-warning {\n --tw-border-opacity: 1;\n border-color: rgb(255 165 0 / var(--tw-border-opacity));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.p-panel-padding {\n padding: var(--panel-padding);\n}\n.text-center {\n text-align: center;\n}\n.align-top {\n vertical-align: top;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.underline {\n text-decoration-line: underline;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n:host > div {\n background-color: oklch(var(--page));\n color: oklch(var(--foreground));\n min-height: 100cqh;\n}\n:host > div > * {\n max-width: var(--max-page-width);\n margin: 0 auto;\n}\n.panel + .panel {\n margin-top: 5rem;\n}\n.option .labelwrapper p {\n display: inline; /* temp fix, should be stripped by quby-compiler */\n}\n.item.question, .question-bar {\n --question-bar-color: var(--super-muted);\n box-shadow: calc(-1 * var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(0px - var(--question-bar-width) - var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n}\n.item.question:dir(rtl), .question-bar:dir(rtl) {\n box-shadow: calc(var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(var(--question-bar-width) + var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n }\n.item.question.active, .item.question .item:has(.active), .question-bar.active, .question-bar .item:has(.active) {\n --question-bar-color: var(--primary);\n }\n.item.question.errors, .question-bar.errors {\n --question-bar-color: var(--error-background);\n }\n.item.question.errors.active, .question-bar.errors.active {\n --question-bar-color: var(--error-bar);\n }\n.item .main {\n font-weight: 700;\n}\n.item .main em {\n font-weight: inherit;\n }\n.item .main strong {\n font-weight: 900;\n}\n.item .inner-title {\n margin: 1rem 0 0.5rem;\n font-weight: 600;\n }\n.item .inner-title em {\n font-weight: 700;\n}\n.item .inner-title strong {\n font-weight: 800;\n}\n.item .description-and-fields > .description {\n font-weight: 300;\n}\n.item .description-and-fields > .description em {\n font-weight: 400;\n}\n.item .description-and-fields > .description strong {\n font-weight: 600;\n}\n.item .description-and-fields > .description {\n margin-bottom: 0.5rem;\n}\n.item .description-and-fields > .description .instruction {\n font-weight: 400;\n}\n.item .description-and-fields > .description .example {}\n.item .description-and-fields > .description .explanation {}\nbutton {\n border-radius: 0.375rem;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n font-weight: 600;\n}\nbutton:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\nbutton.secondary {\n border-width: 2px;\n border-color: oklch(var(--primary));\n background-color: oklch(var(--background));\n color: oklch(var(--primary));\n}\nbutton.secondary:hover {\n border-color: oklch(var(--primary-hover));\n color: oklch(var(--primary-hover));\n }\nbutton.primary {\n background-color: oklch(var(--primary));\n color: oklch(var(--background));\n}\nbutton.primary:hover {\n background-color: oklch(var(--primary-hover));\n }\n.info-item {\n --icon-size: 20px;\n --icon-margin: 8px;\n}\n.info-item .info-html {\n margin-bottom: var(--question-padding);\n z-index: 1; /* prevent showing under slider */\n padding-inline-end: calc(var(--icon-size) + 2 * var(--icon-margin));\n }\n.info-item .info-html.open { /* opened by clicking icon */\n position: sticky;\n top: 0;\n }\n.info-item .info-html>div { /* actual content, extra div needed to animate scale. */\n transform-origin: center top;\n transition: inherit;\n }\n.info-item .info-html>div :first-child {\n margin-top: 0;\n }\n.info-item .info-html>div :last-child {\n margin-bottom: 0;\n }\n.info-item .info-html.opening {\n height: 0;\n margin-bottom: 0;\n }\n.info-item .info-html.opening>div { \n transform: scale(1, 0); /* animating scale, since we can\'t both hide content and have the icon float */\n }\n.info-item .info-html {\n transition: all 0.3s linear;\n interpolate-size: allow-keywords;\n}\n/* gradient under info-html, to make text fade under it */\n.info-item .info-html::after {\n content: "";\n position: absolute;\n bottom: calc(-1 * var(--question-padding));\n height: var(--question-padding);\n width: 100%;\n left: 0;\n background: linear-gradient(in oklch, oklch(var(--page)), transparent);\n }\n.info-item .info-icon {\n position: relative; /* with z-index to make it appear above the info-html */\n z-index: 2;\n float: inline-end;\n top: 0;\n transition: margin 0.5s;\n position: sticky;\n }\n.info-item .info-icon:hover {\n cursor: pointer;\n }\n.info-item .info-icon.stuck {\n margin-right: calc(-1 * var(--panel-padding));\n }\n.info-item .info-icon svg {\n width: var(--icon-size);\n height: var(--icon-size);\n margin: var(--icon-margin);\n }\n/* default type */\n.info-item.info .info-html, .info-item.info .info-icon {\n background-color: oklch(var(--info-block-bg));\n }\n.info-item.info .info-html {\n padding: 0.5rem;\n color: oklch(var(--info-block-fg));\n}\n/* type actionbar */\n.info-item.question-bar .info-html, .info-item.question-bar info-icon {\n background-color: oklch(var(--page));\n }\n.info-item.question-bar .info-html {\n padding: 0;\n }\n.info-item.question-bar .info-html>div {\n max-height: 40vh; /* Just a precaution, should be shorter */\n overflow: auto;\n }\n.item.radio .option, .item.check_box .option {\n display: flex;\n flex-wrap: wrap;\n}\n.item.radio .option .radiocheckwrapper, .item.check_box .option .radiocheckwrapper {\n flex: 0 0 var(--checkradio-size);\n }\n.item.radio .option .value, .item.check_box .option .value {\n flex: 0 0 2rem;\n text-align: right;\n }\n.item.radio .option .labelwrapper, .item.check_box .option .labelwrapper {\n flex: 1 1 0;\n }\n.item.radio .option .labelwrapper>*, .item.check_box .option .labelwrapper>* {\n padding-inline-start: var(--checkradio-padding); /* padding in label, so no space between input and label */\n }\n.item.radio .option .subquestions, .item.check_box .option .subquestions {\n width: 100%; /* forces it to the next lines */\n }\n.item.radio .option + .option, .item.check_box .option + .option {\n margin-top: calc(var(--option-gap-y) * 0.25rem);\n }\n.subquestions {\n margin-inline-start: calc(var(--question-bar-padding) + var(--checkradio-size)/2 + 2px); /* align active bar under checkbox/radio */\n}\n/* context-description doesn\'t live under question, so doesn\'t react to a single question override. */\n.item, .context-description {\n position: relative;\n margin-bottom: calc(var(--question-padding) * var(--question-mb-factor));\n}\n.item:has(+.indent.question) {\n margin-bottom: 0;\n padding-bottom: calc(var(--question-padding) * var(--question-mb-factor) / 2);\n}\n.question.indent {\n padding-inline-start: calc(var(--checkradio-size) + var(--checkradio-padding));\n}\n/* align with option text, it\'s often below selects and a fine padding for other types */\n.question.indent::before {\n content: "";\n position: absolute;\n top: 10px;\n inset-inline-start: 0;\n margin-inline-start: calc(0px - var(--question-bar-padding));\n width: calc(var(--checkradio-size) + var(--question-bar-padding));\n height: var(--question-bar-width);\n background-color: oklch(var(--super-muted));\n }\n.question.indent.active::before {\n background-color: oklch(var(--primary));\n }\n.subquestions .item {\n margin-bottom: 0;\n}\n/* Distance from inputs feel than from text, since they don\'t have extra line-height padding.\n * So we add a bit of padding, but not for radio/checkbox, \n * since they do have line-height from the labels.\n * but also because it would prevent margin-collapsing when they have subquestions.\n * Let\'s hope someday text-box-trim will make this obsolete. */\n.item:not(.radio):not(.check_box) .description-and-fields {\n padding-bottom: 0.5em;\n}\n.item .error {\n background: oklch(var(--error-background));\n outline: 1px solid oklch(var(--error-bar));\n border-radius: var(--default-radius);\n margin: 0.25rem;\n padding: 0.25rem;\n}\nfooter {\n font-weight: 300;\n}\nfooter em {\n font-weight: 400;\n}\nfooter strong {\n font-weight: 600;\n}\nfooter {\n font-size: .875rem;\n padding: var(--panel-padding);\n color: oklch(var(--foreground-80));\n}\n:is(.dark .dark\\:bg-slate-700) {\n --tw-bg-opacity: 1;\n background-color: rgb(51 65 85 / var(--tw-bg-opacity));\n}\n';
18144
+ const styles = '/*\n! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: \'\';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user\'s configured `sans` font-family by default.\n5. Use the user\'s configured `sans` font-feature-settings by default.\n6. Use the user\'s configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user\'s configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type=\'button\'],\n[type=\'reset\'],\n[type=\'submit\'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type=\'search\'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user\'s configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role="button"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don\'t get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n em {\n font-style: italic;\n font-weight: 500;\n }\n\n strong {\n font-weight: bolder;\n }\n strong em {\n font-weight: inherit;\n }\n\n em.clean {\n font-style: inherit;\n }\n\n strong.clean { \n font-weight: inherit;\n }\n\n .underline { /* mostly for <strong class="clean underline"> */\n text-decoration: underline;\n }\n\n /* de-emphasize the text */\n .de-em {\n font-weight: 300;\n}\n .de-em em {\n font-weight: 400;\n}\n .de-em strong {\n font-weight: 600;\n}\n\n a {\n color: oklch(var(--primary));\n text-decoration: underline;\n }\n\n .serif {\n font-family: Georgia, serif;\n }\n\n small {\n font-size: 0.8rem;\n }\n .text-center img, .text-center svg, .text-center input[type="radio"] { /* These are made display block by tailwind, but we want to center when scaled */\n margin-inline: auto;\n }\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n font-weight: 700;\n}\n\n h1 em, h2 em, h3 em, h4 em, .h1 em, .h2 em, .h3 em, .h4 em {\n font-weight: inherit;\n }\n\n h1 strong, h2 strong, h3 strong, h4 strong, .h1 strong, .h2 strong, .h3 strong, .h4 strong {\n font-weight: 900;\n}\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n margin: 1.5rem 0 1rem;\n }\n\n h1, .h1 {\n font-size: 1.75rem;\n margin: 1.5rem 0 2rem;\n }\n\n h2, .h2 {\n font-size: 1.5rem;\n }\n\n h3, .h3 {\n font-size: 1.25rem;\n }\n\n h4, .h4 {\n font-size: 1rem;\n }\n :host {\n --page: 1 0 0;\n --background: 1 0 0;\n --foreground: .21 .04 266; /* text color */\n --foreground-80: .38 .04 266;\n --foreground-60: .55 .04 266;\n --muted: var(--foreground-60); /* text color muted */\n --super-muted: .95 .04 266;\n --primary: .454 .135 254;\n --primary-muted: .5 .135 254;\n --primary-hover: 0.5 0.16 254;\n --primary-inv: var(--background);\n --error-bar: .64 .24 27;\n --error-background: var(--error-bar) / .4;\n --slider-track: .91 0 0;\n --info-block-bg: .87 .055 223;\n --info-block-fg: var(--foreground);\n\n --panel-padding: 1rem;\n --default-radius: 0.25rem;\n --checkradio-size: 1rem;\n --checkradio-padding: 0.75rem;\n --question-padding: 2rem;\n --question-bar-padding: 8px;\n --question-bar-width: 4px;\n --list-indent: 1.5rem;\n\n /* To change in questionnaires */\n --option-gap-y: 0; /* vertical gap between options, 1, 2, 3, 4 */\n --question-mb-factor: 1; /* vertical gap to the next question, 0, 0.5, 1, 1.5, 2 */\n --max-page-width: 75rem;\n }\n\n @media(min-width: 800px) {\n :host {\n --panel-padding: 2rem;\n --question-bar-padding: 10px;\n }\n }\n\n .dark {\n --page: .186 .031 272;\n --background: 0 0 0;\n --foreground: 1 0 0;\n --foreground-80: .8 0 0;\n --foreground-60: .6 0 0;\n --foreground-40: .4 0 0;\n --muted: var(--foreground-60);\n --super-muted: .3 0 0;\n --primary: .68 .16 254;\n --primary-hover: 0.5 0.16 254;\n --primary-muted: .3 .135 254;\n --primary-inv: var(--foreground);\n --slider-track: .23 0 197;\n --info-block-bg: .4342 .052 233;\n --info-block-fg: var(--foreground);\n }\n\n :host {\n all: initial;\n display: block;\n position: relative; /* fix absolute children when quby lives in a scrolling container */\n /* Copied from tailwind html css. */\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n\n /* Made normal font thinner (300) in tailwind.conf */\n\n font-weight: 400;\n }\n\n input, textarea, select {\n border: 1px solid oklch(var(--foreground));\n border-radius: var(--default-radius);\n }\n input:focus, textarea:focus, select:focus {\n box-shadow: 0 0 0 6px oklch(var(--primary) / .2);\n outline: 3px solid transparent; /* replace shadow when forced colors */\n border-color: oklch(var(--primary));\n }\n input:disabled, textarea:disabled, select:disabled {\n color: oklch(var(--foreground-60));\n border-color: oklch(var(--foreground-60));\n cursor: not-allowed;\n }\n\n input:not([type=checkbox]):not([type=radio]), textarea, select {\n padding: .4rem;\n background-color: oklch(var(--background));\n color: var(--foreground);\n caret-color: oklch(var(--primary));\n }\n\n input[type=checkbox], input[type=radio] {\n --check-color: var(--foreground); /* when active changes to primary */\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n position: relative;\n display: grid; /* easiest way to perfectly center the ::before */\n place-content: center;\n width: var(--checkradio-size);\n height: var(--checkradio-size);\n margin: .25rem 0;\n } /* center vertically, (line-height-height)/2 */\n input[type=checkbox]:hover, input[type=radio]:hover {\n border-color: oklch(var(--primary)); /* minimal feedback that clicking radio/label will do something */\n border-width: 2px;\n }\n input[type=checkbox]::before, input[type=radio]::before {\n content: "";\n width: calc(var(--checkradio-size) - 6px);\n height: calc(var(--checkradio-size) - 6px);\n transform: scale(0); /* hide when not checked */\n transition: 125ms transform ease-in-out;\n box-shadow: inset 1em 1em oklch(var(--check-color)); /* bg instead of bgcolor to enable printing */\n background-color: CanvasText; /* replace shadow when forced colors */\n }\n input[type=checkbox]::after, input[type=radio]::after {\n content: "";\n position: absolute;\n top: -4px;\n inset-inline-start: -4px;\n height: 24px;\n width: 24px;\n }\n input[type=checkbox]:checked::before, input[type=radio]:checked::before {\n transform: scale(1);\n }\n\n input[type=checkbox] {\n border-radius: var(--default-radius);\n }\n input[type=checkbox]::before {\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); /* checkmark */\n } \n input[type=radio] {\n border-radius: 50%;\n }\n input[type=radio]::before {\n border-radius: 50%;\n }\n .active input[type=checkbox]:not(:disabled), .active input[type=radio]:not(:disabled) {\n --check-color: var(--primary);\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.progress-bar {\n margin: var(--panel-padding);\n }\n.progress-bar .progress-wrapper .progress-slider {\n background-position: 0 4px;\n display: inline-block;\n height: 12px;\n border: 1px solid #ccc;\n border-radius: 6px;\n padding: 1px;\n }\n.panel .progress-bar .progress-wrapper {\n text-align: center;\n }\n.progress-bar .progress-stop {\n height: 8px;\n line-height: 8px;\n width: 6px;\n background: none;\n font-size: 6px;\n text-indent: -1234em;\n display: block;\n float: inline-start;\n }\n.progress-bar .progress-stop.first-child {\n width: 8px;\n border-radius: 5px 0 0 5px;\n }\n.progress-bar .progress-stop.last-child {\n width: 8px;\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.active {\n background: oklch(var(--muted));\n }\n.progress-bar .progress-stop.current {\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.current.first-child {\n border-radius: 5px;\n }\n.progress-bar .progress-details {\n color: has(var(--muted));\n font-size: 9px;\n }\n.prose p {\n margin: 0 0 1rem 0;\n }\n/* for things like description we want less, so the parent will determine the outer margin. */\n/* if only margin-trim was more widely supported */\n.prose > *:first-child {\n margin-top: 0;\n }\n.prose > *:last-child {\n margin-bottom: 0;\n }\n.prose ul {\n list-style-type: disc;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol {\n list-style-type: lower-alpha;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol.list-decimal {\n list-style-type: decimal;\n }\n.prose li {\n padding-inline-start: 0.5rem;\n }\n.prose hr {\n margin: var(--question-padding) 1rem;\n border: none;\n height: 0.125rem;\n background-color: oklch(var(--muted));\n }\n.prose hr.compact {\n margin: 1rem;\n }\nblockquote {\n margin: 1em 2em;\n }\nblockquote >* {\n font-style: italic;\n }\nblockquote >p::before,\n blockquote >p:last-child::after,\n blockquote >ul::before,\n blockquote >ul:last-child > li:last-child::after {\n content: "“";\n font-family: Georgia;\n font-size: 2.5rem;\n margin-block: -.8rem 0;\n margin-inline: -1.4rem 0;\n position: absolute;\n color: #666;\n }\nblockquote >ul::before {\n margin-inline-start: calc(-1.1rem - var(--list-indent));\n }\nblockquote >p:last-child::after,\n blockquote >ul:last-child > li:last-child::after {\n content: "”";\n margin: 0;\n margin-inline-start: -.1rem\n }\nblockquote.blue-quotes p::before,\n blockquote.blue-quotes p:last-child::after {\n color: #298ED5;\n }\n.visible {\n visibility: visible;\n}\n.absolute {\n position: absolute;\n}\n.sticky {\n position: sticky;\n}\n.order-last {\n order: 9999;\n}\n.float-right {\n float: right;\n}\n.m-panel-padding {\n margin: var(--panel-padding);\n}\n.mx-1 {\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.me-1 {\n margin-inline-end: 0.25rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.table {\n display: table;\n}\n.hidden {\n display: none;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-1\\/4 {\n width: 25%;\n}\n.w-1\\/5 {\n width: 20%;\n}\n.w-1\\/6 {\n width: 16.666667%;\n}\n.w-2\\/3 {\n width: 66.666667%;\n}\n.w-2\\/5 {\n width: 40%;\n}\n.w-3\\/4 {\n width: 75%;\n}\n.w-3\\/5 {\n width: 60%;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-5\\/6 {\n width: 83.333333%;\n}\n.w-full {\n width: 100%;\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.justify-between {\n justify-content: space-between;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-warning {\n --tw-border-opacity: 1;\n border-color: rgb(255 165 0 / var(--tw-border-opacity));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.p-panel-padding {\n padding: var(--panel-padding);\n}\n.text-center {\n text-align: center;\n}\n.align-top {\n vertical-align: top;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.underline {\n text-decoration-line: underline;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n:host > div {\n background-color: oklch(var(--page));\n color: oklch(var(--foreground));\n min-height: 100cqh;\n}\n:host > div > * {\n max-width: var(--max-page-width);\n margin: 0 auto;\n}\n.panel + .panel {\n margin-top: 5rem;\n}\n.option .labelwrapper p {\n display: inline; /* temp fix, should be stripped by quby-compiler */\n}\n.item.question, .question-bar {\n --question-bar-color: var(--super-muted);\n box-shadow: calc(-1 * var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(0px - var(--question-bar-width) - var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n}\n.item.question:dir(rtl), .question-bar:dir(rtl) {\n box-shadow: calc(var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(var(--question-bar-width) + var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n }\n.item.question.active, .item.question .item:has(.active), .question-bar.active, .question-bar .item:has(.active) {\n --question-bar-color: var(--primary);\n }\n.item.question.errors, .question-bar.errors {\n --question-bar-color: var(--error-background);\n }\n.item.question.errors.active, .question-bar.errors.active {\n --question-bar-color: var(--error-bar);\n }\n.item .main {\n font-weight: 700;\n}\n.item .main em {\n font-weight: inherit;\n }\n.item .main strong {\n font-weight: 900;\n}\n.item .main {\n margin-bottom: 0.25rem; /* margin to .description, collapses with .field if that is the next element */\n}\n.item .inner-title {\n margin: 1rem 0 0.5rem;\n font-weight: 600;\n }\n.item .inner-title em {\n font-weight: 700;\n}\n.item .inner-title strong {\n font-weight: 800;\n}\n.item .description-and-fields > .description {\n font-weight: 300;\n}\n.item .description-and-fields > .description em {\n font-weight: 400;\n}\n.item .description-and-fields > .description strong {\n font-weight: 600;\n}\n.item .description-and-fields > .description .instruction {\n font-weight: 400;\n}\n.item .description-and-fields > .description .example {}\n.item .description-and-fields > .description .explanation {}\n.item .fields {\n margin-top: 0.5rem;\n}\nbutton {\n border-radius: 0.375rem;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n font-weight: 600;\n}\nbutton:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\nbutton.secondary {\n border-width: 2px;\n border-color: oklch(var(--primary));\n background-color: oklch(var(--background));\n color: oklch(var(--primary));\n}\nbutton.secondary:hover {\n border-color: oklch(var(--primary-hover));\n color: oklch(var(--primary-hover));\n }\nbutton.primary {\n background-color: oklch(var(--primary));\n color: oklch(var(--background));\n}\nbutton.primary:hover {\n background-color: oklch(var(--primary-hover));\n }\n.info-item {\n --icon-size: 20px;\n --icon-margin: 8px;\n}\n.info-item .info-html {\n margin-bottom: var(--question-padding);\n z-index: 1; /* prevent showing under slider */\n padding-inline-end: calc(var(--icon-size) + 2 * var(--icon-margin));\n }\n.info-item .info-html.open { /* opened by clicking icon */\n position: sticky;\n top: 0;\n }\n.info-item .info-html>div { /* actual content, extra div needed to animate scale. */\n transform-origin: center top;\n transition: inherit;\n }\n.info-item .info-html>div :first-child {\n margin-top: 0;\n }\n.info-item .info-html>div :last-child {\n margin-bottom: 0;\n }\n.info-item .info-html.opening {\n height: 0;\n margin-bottom: 0;\n }\n.info-item .info-html.opening>div { \n transform: scale(1, 0); /* animating scale, since we can\'t both hide content and have the icon float */\n }\n.info-item .info-html {\n transition: all 0.3s linear;\n interpolate-size: allow-keywords;\n}\n/* gradient under info-html, to make text fade under it */\n.info-item .info-html::after {\n content: "";\n position: absolute;\n bottom: calc(-1 * var(--question-padding));\n height: var(--question-padding);\n width: 100%;\n left: 0;\n background: linear-gradient(in oklch, oklch(var(--page)), transparent);\n }\n.info-item .info-icon {\n position: relative; /* with z-index to make it appear above the info-html */\n z-index: 2;\n float: inline-end;\n top: 0;\n transition: margin 0.5s;\n position: sticky;\n }\n.info-item .info-icon:hover {\n cursor: pointer;\n }\n.info-item .info-icon.stuck {\n margin-right: calc(-1 * var(--panel-padding));\n }\n.info-item .info-icon svg {\n width: var(--icon-size);\n height: var(--icon-size);\n margin: var(--icon-margin);\n }\n/* default type */\n.info-item.info .info-html, .info-item.info .info-icon {\n background-color: oklch(var(--info-block-bg));\n }\n.info-item.info .info-html {\n padding: 0.5rem;\n color: oklch(var(--info-block-fg));\n}\n/* type actionbar */\n.info-item.question-bar .info-html, .info-item.question-bar info-icon {\n background-color: oklch(var(--page));\n }\n.info-item.question-bar .info-html {\n padding: 0;\n }\n.info-item.question-bar .info-html>div {\n max-height: 40vh; /* Just a precaution, should be shorter */\n overflow: auto;\n }\n.item.radio .option, .item.check_box .option {\n display: flex;\n flex-wrap: wrap;\n}\n.item.radio .option .radiocheckwrapper, .item.check_box .option .radiocheckwrapper {\n flex: 0 0 var(--checkradio-size);\n }\n.item.radio .option .value, .item.check_box .option .value {\n flex: 0 0 2rem;\n text-align: right;\n }\n.item.radio .option .labelwrapper, .item.check_box .option .labelwrapper {\n flex: 1 1 0;\n }\n.item.radio .option .labelwrapper>*, .item.check_box .option .labelwrapper>* {\n padding-inline-start: var(--checkradio-padding); /* padding in label, so no space between input and label */\n }\n.item.radio .option .subquestions, .item.check_box .option .subquestions {\n width: 100%; /* forces it to the next lines */\n }\n.item.radio .option + .option, .item.check_box .option + .option {\n margin-top: calc(var(--option-gap-y) * 0.25rem);\n }\n.subquestions {\n margin-inline-start: calc(var(--question-bar-padding) + var(--checkradio-size)/2 + 2px); /* align active bar under checkbox/radio */\n}\n/* context-description doesn\'t live under question, so doesn\'t react to a single question override. */\n.item, .context-description {\n position: relative;\n margin-bottom: calc(var(--question-padding) * var(--question-mb-factor));\n}\n.item:has(+.indent.question) {\n margin-bottom: 0;\n padding-bottom: calc(var(--question-padding) * var(--question-mb-factor) / 2);\n}\n.question.indent {\n padding-inline-start: calc(var(--checkradio-size) + var(--checkradio-padding));\n}\n/* align with option text, it\'s often below selects and a fine padding for other types */\n.question.indent::before {\n content: "";\n position: absolute;\n top: 10px;\n inset-inline-start: 0;\n margin-inline-start: calc(0px - var(--question-bar-padding));\n width: calc(var(--checkradio-size) + var(--question-bar-padding));\n height: var(--question-bar-width);\n background-color: oklch(var(--super-muted));\n }\n.question.indent.active::before {\n background-color: oklch(var(--primary));\n }\n.subquestions .item {\n margin-bottom: 0;\n}\n/* Distance from inputs feel than from text, since they don\'t have extra line-height padding.\n * So we add a bit of padding, but not for radio/checkbox, \n * since they do have line-height from the labels.\n * but also because it would prevent margin-collapsing when they have subquestions.\n * Let\'s hope someday text-box-trim will make this obsolete. */\n.item:not(.radio):not(.check_box) .description-and-fields {\n padding-bottom: 0.5em;\n}\n.item .error {\n background: oklch(var(--error-background));\n outline: 1px solid oklch(var(--error-bar));\n border-radius: var(--default-radius);\n margin: 0.25rem;\n padding: 0.25rem;\n}\nfooter {\n font-weight: 300;\n}\nfooter em {\n font-weight: 400;\n}\nfooter strong {\n font-weight: 600;\n}\nfooter {\n font-size: .875rem;\n padding: var(--panel-padding);\n color: oklch(var(--foreground-80));\n}\n:is(.dark .dark\\:bg-slate-700) {\n --tw-bg-opacity: 1;\n background-color: rgb(51 65 85 / var(--tw-bg-opacity));\n}\n';
18122
18145
  const oldStyles = ':host {\n --background: 0 0% 100%;\n}\n\n.item.date_parts .mr-1 {\n margin-right: 0.125rem;\n}\n.item.date_parts .mb-2 { \n margin-bottom: 0.25rem;\n}\n\n\n/* line 5, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font: inherit;\n font-size: 100%;\n vertical-align: baseline;\n}\n\n/* line 22, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nhtml {\n line-height: 1;\n}\n\n/* line 24, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nol, ul {\n list-style: none;\n}\n\n/* line 26, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\n/* line 28, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\ncaption, th, td {\n text-align: left;\n font-weight: normal;\n vertical-align: middle;\n}\n\n/* line 30, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nq, blockquote {\n quotes: none;\n}\n/* line 103, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nq:before, q:after, blockquote:before, blockquote:after {\n content: "";\n content: none;\n}\n\n/* line 32, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\na img {\n border: none;\n}\n\n/* line 116, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\narticle, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {\n display: block;\n}\n\n/* line 3, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#modalFrameDialog {\n padding: 0;\n}\n\n/* line 6, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#modalFrame {\n width: 100%;\n height: 99%;\n}\n\n/* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.x_container {\n display: none;\n}\n\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nsup, sub {\n font-size: 0.8em !important;\n position: relative;\n line-height: 0;\n}\n\n/* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nsup {\n top: -0.4em;\n}\n\n/* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nsub {\n bottom: -0.25em;\n}\n\n/* line 29, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nhtml {\n overflow-x: hidden;\n}\n\n/* line 33, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nbody {\n font-family: Verdana, sans-serif;\n font-size: 0.8em;\n line-height: normal;\n background-color: #eeeeee;\n max-width: 100%;\n overflow-x: hidden;\n position: relative;\n}\n\n/* line 43, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.panel-action-links {\n text-align: right;\n margin-bottom: 1em;\n}\n\n/* line 48, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.panel-action-link {\n margin-left: 1em;\n}\n\n/* line 52, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#mastfoot {\n margin: 0 auto;\n max-width: 900px;\n text-align: right;\n color: #aaaaaa;\n}\n/* line 58, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#mastfoot:before {\n content: "\\2014";\n}\n/* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#mastfoot:after {\n content: "\\2014";\n}\n\n/* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#noscript-warning {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n background: yellow;\n border: 4px solid red;\n color: red;\n font-size: 1.5em;\n text-align: center;\n}\n\n/* line 79, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.nowrap {\n white-space: nowrap;\n}\n\n/* line 83, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nselect {\n width: 100%;\n}\n\n/* line 87, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ni {\n font-style: italic !important;\n}\n\n/* line 91, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nem {\n font-weight: bold;\n}\n\n/* line 95, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content {\n margin-bottom: 4em;\n}\n/* line 98, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content input[disabled] {\n background-color: #ddd;\n}\n/* line 102, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash {\n max-width: 59em;\n _width: 59em;\n padding-left: 1em;\n padding-right: 1em;\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 1em;\n}\n/* line 38, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_clearfix.scss */\n#content .flash:after {\n content: "";\n display: table;\n clear: both;\n}\n/* line 106, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash div {\n padding: 5px;\n background: #333333;\n border: 1px solid black;\n}\n/* line 112, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash .error {\n background: #ffbbbb;\n border: 1px solid #ff3333;\n}\n/* line 116, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash .notice {\n background: #ffffcc;\n border: 1px solid #ffcc66;\n}\n/* line 120, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash .success {\n background-color: #ccffcc;\n border: 1px solid #11cc11;\n}\n/* line 126, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content #force-submit {\n background: #ffffcc;\n border: 1px solid #ffcc66;\n padding: 3em;\n font-size: 1.2em;\n margin-bottom: 5em;\n}\n/* line 133, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content #force-submit h1 {\n font-weight: bold;\n margin-bottom: 1em;\n}\n/* line 134, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content #force-submit p {\n margin-bottom: 1em;\n}\n/* line 137, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .specifier {\n margin: 0 !important;\n}\n/* line 139, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .specifier.errors {\n width: auto !important;\n float: left;\n}\n\n/* line 148, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.evenRow {\n background-color: #eeeeee;\n}\n\n/* line 157, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.hotkeyDialog p {\n margin: 1em 0;\n}\n/* line 160, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.hotkeyDialog td {\n border: 0px;\n}\n\n/* line 165, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 1.5em;\n}\n/* line 169, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable thead tr th {\n background: black;\n color: white;\n padding: 5px;\n}\n/* line 175, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable tr.even {\n background: #e9e9e9;\n}\n/* line 179, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable td {\n padding: 5px;\n border: 1px solid #cecece;\n vertical-align: top;\n}\n\n/* line 186, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.ui-dialog-buttonpane {\n overflow: hidden !important;\n}\n\n/* line 190, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\npre {\n font-family: "Deja Vu Sans Mono", "Courier New", "Courier", monospace;\n}\n\n/* line 194, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.question {\n background: #e5e5e5;\n margin: 2em;\n padding: 2em;\n}\n\n/* line 202, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nlabel.placeholder {\n cursor: text;\n padding: 4px 4px 4px 4px;\n color: #999999;\n}\n\n/* line 209, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ninput::-webkit-input-placeholder, textarea::-webkit-input-placeholder {\n color: #999999;\n}\n\n/* line 213, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ninput:placeholder, textarea:placeholder {\n color: #999999;\n}\n\n/* line 217, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.focus {\n background: #cce8ed !important;\n}\n\n/* line 221, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.print {\n width: 83.05085%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n margin-top: 2em;\n}\n/* line 224, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.print a {\n color: blue;\n text-decoration: underline;\n}\n\n/* line 230, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.error .stacktrace {\n color: #777;\n white-space: pre-line;\n}\n\n/* line 235, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nhtml.busy, html.busy * {\n cursor: wait !important;\n}\n\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.hidden {\n display: none;\n}\n\n/* line 7, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .noVisibleQuestions, .single-page .noVisibleQuestions {\n display: none;\n}\n/* line 9, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .hide, .single-page .hide {\n margin: 0 !important;\n outline: none !important;\n}\n/* line 14, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .hide > *, .single-page .hide > * {\n display: none !important;\n}\n/* line 34, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel, .single-page .panel {\n background: white;\n}\n/* line 6, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .panel, .single-page .panel {\n max-width: 59em;\n _width: 59em;\n padding-left: 1em;\n padding-right: 1em;\n margin-left: auto;\n margin-right: auto;\n padding-top: 20px;\n}\n/* line 38, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_clearfix.scss */\n.paged .panel:after, .single-page .panel:after {\n content: "";\n display: table;\n clear: both;\n}\n/* line 40, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table div, .single-page .panel .table div, .paged .panel .table span, .single-page .panel .table span, .paged .panel .table applet, .single-page .panel .table applet, .paged .panel .table object, .single-page .panel .table object, .paged .panel .table iframe, .single-page .panel .table iframe,\n.paged .panel .table h1,\n.single-page .panel .table h1, .paged .panel .table h2, .single-page .panel .table h2, .paged .panel .table h3, .single-page .panel .table h3, .paged .panel .table h4, .single-page .panel .table h4, .paged .panel .table h5, .single-page .panel .table h5, .paged .panel .table h6, .single-page .panel .table h6, .paged .panel .table p, .single-page .panel .table p, .paged .panel .table blockquote, .single-page .panel .table blockquote, .paged .panel .table pre, .single-page .panel .table pre,\n.paged .panel .table a,\n.single-page .panel .table a, .paged .panel .table abbr, .single-page .panel .table abbr, .paged .panel .table acronym, .single-page .panel .table acronym, .paged .panel .table address, .single-page .panel .table address, .paged .panel .table big, .single-page .panel .table big, .paged .panel .table cite, .single-page .panel .table cite, .paged .panel .table code, .single-page .panel .table code,\n.paged .panel .table del,\n.single-page .panel .table del, .paged .panel .table dfn, .single-page .panel .table dfn, .paged .panel .table em, .single-page .panel .table em, .paged .panel .table img, .single-page .panel .table img, .paged .panel .table ins, .single-page .panel .table ins, .paged .panel .table kbd, .single-page .panel .table kbd, .paged .panel .table q, .single-page .panel .table q, .paged .panel .table s, .single-page .panel .table s, .paged .panel .table samp, .single-page .panel .table samp,\n.paged .panel .table small,\n.single-page .panel .table small, .paged .panel .table strike, .single-page .panel .table strike, .paged .panel .table strong, .single-page .panel .table strong, .paged .panel .table sub, .single-page .panel .table sub, .paged .panel .table sup, .single-page .panel .table sup, .paged .panel .table tt, .single-page .panel .table tt, .paged .panel .table var, .single-page .panel .table var,\n.paged .panel .table b,\n.single-page .panel .table b, .paged .panel .table u, .single-page .panel .table u, .paged .panel .table i, .single-page .panel .table i, .paged .panel .table center, .single-page .panel .table center,\n.paged .panel .table dl,\n.single-page .panel .table dl, .paged .panel .table dt, .single-page .panel .table dt, .paged .panel .table dd, .single-page .panel .table dd, .paged .panel .table ol, .single-page .panel .table ol, .paged .panel .table ul, .single-page .panel .table ul, .paged .panel .table li, .single-page .panel .table li,\n.paged .panel .table fieldset,\n.single-page .panel .table fieldset, .paged .panel .table form, .single-page .panel .table form, .paged .panel .table label, .single-page .panel .table label, .paged .panel .table legend, .single-page .panel .table legend,\n.paged .panel .table table,\n.single-page .panel .table table, .paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table tbody, .single-page .panel .table tbody, .paged .panel .table tfoot, .single-page .panel .table tfoot, .paged .panel .table thead, .single-page .panel .table thead, .paged .panel .table tr, .single-page .panel .table tr, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td,\n.paged .panel .table article,\n.single-page .panel .table article, .paged .panel .table aside, .single-page .panel .table aside, .paged .panel .table canvas, .single-page .panel .table canvas, .paged .panel .table details, .single-page .panel .table details, .paged .panel .table embed, .single-page .panel .table embed,\n.paged .panel .table figure,\n.single-page .panel .table figure, .paged .panel .table figcaption, .single-page .panel .table figcaption, .paged .panel .table footer, .single-page .panel .table footer, .paged .panel .table header, .single-page .panel .table header, .paged .panel .table hgroup, .single-page .panel .table hgroup,\n.paged .panel .table menu,\n.single-page .panel .table menu, .paged .panel .table nav, .single-page .panel .table nav, .paged .panel .table output, .single-page .panel .table output, .paged .panel .table ruby, .single-page .panel .table ruby, .paged .panel .table section, .single-page .panel .table section, .paged .panel .table summary, .single-page .panel .table summary,\n.paged .panel .table time,\n.single-page .panel .table time, .paged .panel .table mark, .single-page .panel .table mark, .paged .panel .table audio, .single-page .panel .table audio, .paged .panel .table video, .single-page .panel .table video {\n margin: 0;\n padding: 0;\n border: 0;\n font: inherit;\n font-size: 100%;\n vertical-align: baseline;\n}\n/* line 55, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table table, .single-page .panel .table table {\n border-collapse: collapse;\n border-spacing: 0;\n}\n/* line 57, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td {\n text-align: left;\n font-weight: normal;\n vertical-align: middle;\n}\n/* line 59, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table q, .single-page .panel .table q, .paged .panel .table blockquote, .single-page .panel .table blockquote {\n quotes: none;\n}\n/* line 103, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table q:before, .single-page .panel .table q:before, .paged .panel .table q:after, .single-page .panel .table q:after, .paged .panel .table blockquote:before, .single-page .panel .table blockquote:before, .paged .panel .table blockquote:after, .single-page .panel .table blockquote:after {\n content: "";\n content: none;\n}\n/* line 61, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table a img, .single-page .panel .table a img {\n border: none;\n}\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table p, .single-page .panel .table p, .paged .panel .table div, .single-page .panel .table div {\n display: inline;\n}\n/* line 8, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table caption, .single-page .panel .table caption {\n margin-bottom: 0.5em;\n}\n/* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .errors, .single-page .panel .table .errors {\n outline: 2px solid red !important;\n}\n/* line 16, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .error, .single-page .panel .table .error {\n display: inline-block;\n background: #ffbbbb;\n outline: 1px solid #ff3333;\n}\n/* line 20, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .error.hidden, .single-page .panel .table .error.hidden {\n display: none;\n}\n/* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table, .single-page .panel .table table {\n border-bottom: 1px solid black;\n border-collapse: collapse;\n margin: 0;\n}\n/* line 28, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table *, .single-page .panel .table table * {\n width: auto;\n}\n/* line 32, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .option, .single-page .panel .table table .option {\n white-space: normal;\n}\n/* line 36, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table td > div > *, .single-page .panel .table table td > div > * {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n/* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row, .single-page .panel .table table .row {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n float: none;\n display: table-row;\n}\n/* line 45, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row td, .single-page .panel .table table .row td, .paged .panel .table table .row th, .single-page .panel .table table .row th {\n display: table-cell;\n border: 0;\n border-bottom: 1px solid #bbb;\n vertical-align: top;\n float: none;\n}\n/* line 50, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row td.main, .single-page .panel .table table .row td.main, .paged .panel .table table .row th.main, .single-page .panel .table table .row th.main {\n vertical-align: middle;\n}\n/* line 55, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row.inner_row td, .single-page .panel .table table .row.inner_row td {\n border: 0;\n}\n/* line 56, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row:first-child td, .single-page .panel .table table .row:first-child td {\n border-top: 1px solid #bbb;\n}\n/* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input, .single-page .panel .table table .row input {\n /* These properties get overriden by our table reset, so we have to re-apply them with a more specific selector */\n}\n/* line 63, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.float, .single-page .panel .table table .row input.float, .paged .panel .table table .row input.integer, .single-page .panel .table table .row input.integer {\n width: 54px;\n}\n/* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.string, .single-page .panel .table table .row input.string, .paged .panel .table table .row input.textarea, .single-page .panel .table table .row input.textarea {\n width: 92%;\n}\n/* line 73, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.sized, .single-page .panel .table table .row input.sized {\n width: auto;\n}\n/* line 76, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.fd-form-element-hidden, .single-page .panel .table table .row input.fd-form-element-hidden {\n display: none;\n}\n/* line 86, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row .unit, .single-page .panel .table table .row .unit {\n vertical-align: -20%;\n padding-left: 4px;\n}\n/* line 93, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .item, .single-page .panel .table .item {\n float: none;\n width: auto;\n margin-right: auto;\n display: block;\n}\n/* line 96, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .main, .single-page .panel .table .main {\n width: 33.33333%;\n float: none !important;\n display: table-cell !important;\n}\n/* line 100, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .main label small, .single-page .panel .table .main label small {\n font-size: 0.7em;\n}\n/* line 102, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .description, .single-page .panel .table .description {\n text-align: right;\n}\n/* line 107, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .option_sets .option, .single-page .panel .table .option_sets .option {\n padding-left: 1em;\n padding-bottom: 0.5em;\n vertical-align: bottom;\n}\n/* line 113, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .dark, .single-page .panel .table .dark {\n background-color: #eee;\n}\n/* line 116, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .light, .single-page .panel .table .light {\n background-color: #fff;\n}\n@media (max-width: 420px) {\n /* line 16, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n .paged .horizontal.item.scale table, .single-page .horizontal.item.scale table {\n table-layout: fixed;\n }\n /* line 18, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n .paged .horizontal.item.scale table td.last p, .single-page .horizontal.item.scale table td.last p {\n position: absolute;\n right: 20px;\n max-width: 5rem;\n text-align: right;\n }\n}\n/* line 28, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged tr, .single-page tr {\n border: 1px solid #aaa;\n}\n/* line 32, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item, .single-page .item {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n margin-bottom: 18px;\n}\n/* line 41, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option, .single-page .item.horizontal.radio .option, .paged .item.horizontal.check_box .option, .single-page .item.horizontal.check_box .option,\n.paged .item.vertical.radio .option,\n.single-page .item.vertical.radio .option,\n.paged .item.vertical.check_box .option,\n.single-page .item.vertical.check_box .option {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n}\n/* line 43, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option .radiocheckwrapper, .single-page .item.horizontal.radio .option .radiocheckwrapper, .paged .item.horizontal.check_box .option .radiocheckwrapper, .single-page .item.horizontal.check_box .option .radiocheckwrapper,\n.paged .item.vertical.radio .option .radiocheckwrapper,\n.single-page .item.vertical.radio .option .radiocheckwrapper,\n.paged .item.vertical.check_box .option .radiocheckwrapper,\n.single-page .item.vertical.check_box .option .radiocheckwrapper {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option .labelwrapper, .single-page .item.horizontal.radio .option .labelwrapper, .paged .item.horizontal.check_box .option .labelwrapper, .single-page .item.horizontal.check_box .option .labelwrapper,\n.paged .item.vertical.radio .option .labelwrapper,\n.single-page .item.vertical.radio .option .labelwrapper,\n.paged .item.vertical.check_box .option .labelwrapper,\n.single-page .item.vertical.check_box .option .labelwrapper {\n width: 91.52542%;\n float: right;\n margin-right: 0;\n display: inline;\n}\n/* line 47, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option.show_values .value, .single-page .item.horizontal.radio .option.show_values .value, .paged .item.horizontal.check_box .option.show_values .value, .single-page .item.horizontal.check_box .option.show_values .value,\n.paged .item.vertical.radio .option.show_values .value,\n.single-page .item.vertical.radio .option.show_values .value,\n.paged .item.vertical.check_box .option.show_values .value,\n.single-page .item.vertical.check_box .option.show_values .value {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 48, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option.show_values .labelwrapper, .single-page .item.horizontal.radio .option.show_values .labelwrapper, .paged .item.horizontal.check_box .option.show_values .labelwrapper, .single-page .item.horizontal.check_box .option.show_values .labelwrapper,\n.paged .item.vertical.radio .option.show_values .labelwrapper,\n.single-page .item.vertical.radio .option.show_values .labelwrapper,\n.paged .item.vertical.check_box .option.show_values .labelwrapper,\n.single-page .item.vertical.check_box .option.show_values .labelwrapper {\n width: 83.05085%;\n float: right;\n margin-right: 0;\n display: inline;\n}\n/* line 66, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.string input, .single-page .item.horizontal.string input, .paged .item.horizontal.string textarea, .single-page .item.horizontal.string textarea, .paged .item.horizontal.textarea input, .single-page .item.horizontal.textarea input, .paged .item.horizontal.textarea textarea, .single-page .item.horizontal.textarea textarea,\n.paged .item.vertical.string input,\n.single-page .item.vertical.string input,\n.paged .item.vertical.string textarea,\n.single-page .item.vertical.string textarea,\n.paged .item.vertical.textarea input,\n.single-page .item.vertical.textarea input,\n.paged .item.vertical.textarea textarea,\n.single-page .item.vertical.textarea textarea {\n width: 100%;\n margin-right: 0;\n display: inline;\n}\n/* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.string .sized, .single-page .item.horizontal.string .sized, .paged .item.horizontal.textarea .sized, .single-page .item.horizontal.textarea .sized,\n.paged .item.vertical.string .sized,\n.single-page .item.vertical.string .sized,\n.paged .item.vertical.textarea .sized,\n.single-page .item.vertical.textarea .sized {\n width: auto;\n}\n/* line 97, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar, .single-page .progress-bar {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n margin-left: -20px;\n margin-right: -20px;\n padding: 1.5em 20px;\n}\n/* line 104, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar .progress-wrapper .progress-slider, .single-page .progress-bar .progress-wrapper .progress-slider {\n background-position: 0 3px;\n display: inline-block;\n zoom: 1;\n}\n/* line 107, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar .progress-wrapper .progress-slider .progress-stop, .single-page .progress-bar .progress-wrapper .progress-slider .progress-stop {\n margin: 0 2px;\n width: 8px;\n height: 8px;\n}\n/* line 112, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar .progress-wrapper .progress-slider.long-list, .single-page .progress-bar .progress-wrapper .progress-slider.long-list {\n display: none;\n}\n/* line 119, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons, .single-page .buttons {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n margin-left: -20px;\n margin-right: -20px;\n padding: 1.5em 20px;\n border-bottom: 1px dotted #d0d0d0;\n}\n/* line 126, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .back, .single-page .buttons .back {\n width: 49.15254%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 127, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .prev, .single-page .buttons .prev {\n width: 49.15254%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 128, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .next, .single-page .buttons .next {\n width: 49.15254%;\n float: right;\n margin-right: 0;\n display: inline;\n text-align: right;\n}\n/* line 129, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .abort, .single-page .buttons .abort {\n display: none;\n}\n/* line 130, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .print, .single-page .buttons .print {\n display: none;\n}\n/* line 131, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .print, .single-page .buttons .print {\n width: 100%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n text-align: right;\n}\n/* line 132, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .save, .single-page .buttons .save {\n width: 49.15254%;\n float: right;\n margin-right: 0;\n display: inline;\n text-align: right;\n}\n@media (min-width: 35em) {\n /* line 2, /home/marten/rgoc/quby/app/assets/stylesheets/quby/general/desktop.scss */\n .paged #content, .single-page #content {\n margin: 6em auto 0em auto;\n }\n /* line 9, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged tr, .single-page tr {\n border: none;\n }\n /* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .panel, .single-page .panel {\n padding-left: 1em;\n padding-right: 1em;\n margin-left: auto;\n margin-right: auto;\n /* Overwrite width. New susy version seems to break this */\n max-width: 49.5em;\n border: 4px solid #dddddd;\n margin-top: 6em;\n padding: 3em 2em 1.5em;\n }\n /* line 38, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_clearfix.scss */\n .paged .panel:after, .single-page .panel:after {\n content: "";\n display: table;\n clear: both;\n }\n /* line 40, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table div, .single-page .panel .table div, .paged .panel .table span, .single-page .panel .table span, .paged .panel .table applet, .single-page .panel .table applet, .paged .panel .table object, .single-page .panel .table object, .paged .panel .table iframe, .single-page .panel .table iframe,\n .paged .panel .table h1,\n .single-page .panel .table h1, .paged .panel .table h2, .single-page .panel .table h2, .paged .panel .table h3, .single-page .panel .table h3, .paged .panel .table h4, .single-page .panel .table h4, .paged .panel .table h5, .single-page .panel .table h5, .paged .panel .table h6, .single-page .panel .table h6, .paged .panel .table p, .single-page .panel .table p, .paged .panel .table blockquote, .single-page .panel .table blockquote, .paged .panel .table pre, .single-page .panel .table pre,\n .paged .panel .table a,\n .single-page .panel .table a, .paged .panel .table abbr, .single-page .panel .table abbr, .paged .panel .table acronym, .single-page .panel .table acronym, .paged .panel .table address, .single-page .panel .table address, .paged .panel .table big, .single-page .panel .table big, .paged .panel .table cite, .single-page .panel .table cite, .paged .panel .table code, .single-page .panel .table code,\n .paged .panel .table del,\n .single-page .panel .table del, .paged .panel .table dfn, .single-page .panel .table dfn, .paged .panel .table em, .single-page .panel .table em, .paged .panel .table img, .single-page .panel .table img, .paged .panel .table ins, .single-page .panel .table ins, .paged .panel .table kbd, .single-page .panel .table kbd, .paged .panel .table q, .single-page .panel .table q, .paged .panel .table s, .single-page .panel .table s, .paged .panel .table samp, .single-page .panel .table samp,\n .paged .panel .table small,\n .single-page .panel .table small, .paged .panel .table strike, .single-page .panel .table strike, .paged .panel .table strong, .single-page .panel .table strong, .paged .panel .table sub, .single-page .panel .table sub, .paged .panel .table sup, .single-page .panel .table sup, .paged .panel .table tt, .single-page .panel .table tt, .paged .panel .table var, .single-page .panel .table var,\n .paged .panel .table b,\n .single-page .panel .table b, .paged .panel .table u, .single-page .panel .table u, .paged .panel .table i, .single-page .panel .table i, .paged .panel .table center, .single-page .panel .table center,\n .paged .panel .table dl,\n .single-page .panel .table dl, .paged .panel .table dt, .single-page .panel .table dt, .paged .panel .table dd, .single-page .panel .table dd, .paged .panel .table ol, .single-page .panel .table ol, .paged .panel .table ul, .single-page .panel .table ul, .paged .panel .table li, .single-page .panel .table li,\n .paged .panel .table fieldset,\n .single-page .panel .table fieldset, .paged .panel .table form, .single-page .panel .table form, .paged .panel .table label, .single-page .panel .table label, .paged .panel .table legend, .single-page .panel .table legend,\n .paged .panel .table table,\n .single-page .panel .table table, .paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table tbody, .single-page .panel .table tbody, .paged .panel .table tfoot, .single-page .panel .table tfoot, .paged .panel .table thead, .single-page .panel .table thead, .paged .panel .table tr, .single-page .panel .table tr, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td,\n .paged .panel .table article,\n .single-page .panel .table article, .paged .panel .table aside, .single-page .panel .table aside, .paged .panel .table canvas, .single-page .panel .table canvas, .paged .panel .table details, .single-page .panel .table details, .paged .panel .table embed, .single-page .panel .table embed,\n .paged .panel .table figure,\n .single-page .panel .table figure, .paged .panel .table figcaption, .single-page .panel .table figcaption, .paged .panel .table footer, .single-page .panel .table footer, .paged .panel .table header, .single-page .panel .table header, .paged .panel .table hgroup, .single-page .panel .table hgroup,\n .paged .panel .table menu,\n .single-page .panel .table menu, .paged .panel .table nav, .single-page .panel .table nav, .paged .panel .table output, .single-page .panel .table output, .paged .panel .table ruby, .single-page .panel .table ruby, .paged .panel .table section, .single-page .panel .table section, .paged .panel .table summary, .single-page .panel .table summary,\n .paged .panel .table time,\n .single-page .panel .table time, .paged .panel .table mark, .single-page .panel .table mark, .paged .panel .table audio, .single-page .panel .table audio, .paged .panel .table video, .single-page .panel .table video {\n margin: 0;\n padding: 0;\n border: 0;\n font: inherit;\n font-size: 100%;\n vertical-align: baseline;\n }\n /* line 55, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table table, .single-page .panel .table table {\n border-collapse: collapse;\n border-spacing: 0;\n }\n /* line 57, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td {\n text-align: left;\n font-weight: normal;\n vertical-align: middle;\n }\n /* line 59, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table q, .single-page .panel .table q, .paged .panel .table blockquote, .single-page .panel .table blockquote {\n quotes: none;\n }\n /* line 103, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table q:before, .single-page .panel .table q:before, .paged .panel .table q:after, .single-page .panel .table q:after, .paged .panel .table blockquote:before, .single-page .panel .table blockquote:before, .paged .panel .table blockquote:after, .single-page .panel .table blockquote:after {\n content: "";\n content: none;\n }\n /* line 61, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table a img, .single-page .panel .table a img {\n border: none;\n }\n /* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table p, .single-page .panel .table p, .paged .panel .table div, .single-page .panel .table div {\n display: inline;\n }\n /* line 8, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table caption, .single-page .panel .table caption {\n margin-bottom: 0.5em;\n }\n /* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .errors, .single-page .panel .table .errors {\n outline: 2px solid red !important;\n }\n /* line 16, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .error, .single-page .panel .table .error {\n display: inline-block;\n background: #ffbbbb;\n outline: 1px solid #ff3333;\n }\n /* line 20, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .error.hidden, .single-page .panel .table .error.hidden {\n display: none;\n }\n /* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table, .single-page .panel .table table {\n border-bottom: 1px solid black;\n border-collapse: collapse;\n margin: 0;\n }\n /* line 28, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table *, .single-page .panel .table table * {\n width: auto;\n }\n /* line 32, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .option, .single-page .panel .table table .option {\n white-space: normal;\n }\n /* line 36, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table td > div > *, .single-page .panel .table table td > div > * {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n }\n /* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row, .single-page .panel .table table .row {\n width: 100%;\n float: right;\n margin-right: 0;\n float: none;\n display: table-row;\n }\n /* line 45, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row td, .single-page .panel .table table .row td, .paged .panel .table table .row th, .single-page .panel .table table .row th {\n display: table-cell;\n border: 0;\n border-bottom: 1px solid #bbb;\n vertical-align: top;\n float: none;\n }\n /* line 50, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row td.main, .single-page .panel .table table .row td.main, .paged .panel .table table .row th.main, .single-page .panel .table table .row th.main {\n vertical-align: middle;\n }\n /* line 55, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row.inner_row td, .single-page .panel .table table .row.inner_row td {\n border: 0;\n }\n /* line 56, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row:first-child td, .single-page .panel .table table .row:first-child td {\n border-top: 1px solid #bbb;\n }\n /* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input, .single-page .panel .table table .row input {\n /* These properties get overriden by our table reset, so we have to re-apply them with a more specific selector */\n }\n /* line 63, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.float, .single-page .panel .table table .row input.float, .paged .panel .table table .row input.integer, .single-page .panel .table table .row input.integer {\n width: 54px;\n }\n /* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.string, .single-page .panel .table table .row input.string, .paged .panel .table table .row input.textarea, .single-page .panel .table table .row input.textarea {\n width: 92%;\n }\n /* line 73, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.sized, .single-page .panel .table table .row input.sized {\n width: auto;\n }\n /* line 76, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.fd-form-element-hidden, .single-page .panel .table table .row input.fd-form-element-hidden {\n display: none;\n }\n /* line 86, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row .unit, .single-page .panel .table table .row .unit {\n vertical-align: -20%;\n padding-left: 4px;\n }\n /* line 93, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .item, .single-page .panel .table .item {\n float: none;\n width: auto;\n margin-right: auto;\n }\n /* line 96, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .main, .single-page .panel .table .main {\n width: 33.33333%;\n float: none !important;\n display: table-cell !important;\n }\n /* line 100, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .main label small, .single-page .panel .table .main label small {\n font-size: 0.7em;\n }\n /* line 102, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .description, .single-page .panel .table .description {\n text-align: right;\n }\n /* line 107, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .option_sets .option, .single-page .panel .table .option_sets .option {\n padding-left: 1em;\n padding-bottom: 0.5em;\n vertical-align: bottom;\n }\n /* line 113, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .dark, .single-page .panel .table .dark {\n background-color: #eee;\n }\n /* line 116, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .light, .single-page .panel .table .light {\n background-color: #fff;\n }\n /* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item, .single-page .item {\n width: 100%;\n float: right;\n margin-right: 0;\n margin-bottom: 18px;\n }\n /* line 34, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option, .single-page .item.horizontal.radio .option, .paged .item.horizontal.check_box .option, .single-page .item.horizontal.check_box .option {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 37, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .radiocheckwrapper, .single-page .item.horizontal.radio .option .radiocheckwrapper, .paged .item.horizontal.check_box .option .radiocheckwrapper, .single-page .item.horizontal.check_box .option .radiocheckwrapper {\n width: 4.0404%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .labelwrapper, .single-page .item.horizontal.radio .option .labelwrapper, .paged .item.horizontal.check_box .option .labelwrapper, .single-page .item.horizontal.check_box .option .labelwrapper {\n width: 94.94949%;\n float: right;\n margin-right: 0;\n }\n /* line 43, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option.show_values .value, .single-page .item.horizontal.radio .option.show_values .value, .paged .item.horizontal.check_box .option.show_values .value, .single-page .item.horizontal.check_box .option.show_values .value {\n width: 4.0404%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option.show_values .labelwrapper, .single-page .item.horizontal.radio .option.show_values .labelwrapper, .paged .item.horizontal.check_box .option.show_values .labelwrapper, .single-page .item.horizontal.check_box .option.show_values .labelwrapper {\n width: 89.89899%;\n float: right;\n margin-right: 0;\n }\n /* line 49, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions, .single-page .item.horizontal.radio .option .subquestions, .paged .item.horizontal.check_box .option .subquestions, .single-page .item.horizontal.check_box .option .subquestions {\n margin-left: 5.05051%;\n width: 74.74747%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 53, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .item, .single-page .item.horizontal.radio .option .subquestions .item, .paged .item.horizontal.check_box .option .subquestions .item, .single-page .item.horizontal.check_box .option .subquestions .item {\n width: 74.74747%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 55, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .item input, .single-page .item.horizontal.radio .option .subquestions .item input, .paged .item.horizontal.check_box .option .subquestions .item input, .single-page .item.horizontal.check_box .option .subquestions .item input {\n width: auto;\n }\n /* line 58, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .radiocheckwrapper, .single-page .item.horizontal.radio .option .subquestions .radiocheckwrapper, .paged .item.horizontal.check_box .option .subquestions .radiocheckwrapper, .single-page .item.horizontal.check_box .option .subquestions .radiocheckwrapper {\n width: 10px;\n padding-right: 20px;\n }\n /* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .labelwrapper, .single-page .item.horizontal.radio .option .subquestions .labelwrapper, .paged .item.horizontal.check_box .option .subquestions .labelwrapper, .single-page .item.horizontal.check_box .option .subquestions .labelwrapper {\n width: auto;\n float: none;\n }\n /* line 69, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .inner-title, .single-page .item.horizontal.radio .inner-title, .paged .item.horizontal.check_box .inner-title, .single-page .item.horizontal.check_box .inner-title {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 74, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.string input, .single-page .item.horizontal.string input, .paged .item.horizontal.string textarea, .single-page .item.horizontal.string textarea, .paged .item.horizontal.textarea input, .single-page .item.horizontal.textarea input, .paged .item.horizontal.textarea textarea, .single-page .item.horizontal.textarea textarea {\n width: 100%;\n margin-right: 0;\n }\n /* line 75, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.string .sized, .single-page .item.horizontal.string .sized, .paged .item.horizontal.textarea .sized, .single-page .item.horizontal.textarea .sized {\n width: auto;\n }\n /* line 106, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical .main, .single-page .item.vertical .main {\n width: 39.39394%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 110, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical .description-and-fields, .single-page .item.vertical .description-and-fields {\n width: 59.59596%;\n float: right;\n margin-right: 0;\n float: left;\n }\n /* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description h2, .single-page .item.vertical .description-and-fields .description h2 {\n font-size: 1.2em;\n font-weight: bold;\n border-top: 8px solid #ddd;\n padding-top: 16px;\n }\n /* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description small, .single-page .item.vertical .description-and-fields .description small {\n font-size: 80%;\n }\n /* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description strong, .single-page .item.vertical .description-and-fields .description strong {\n font-style: italic;\n }\n /* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description em, .single-page .item.vertical .description-and-fields .description em {\n font-weight: bold;\n }\n /* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description p, .single-page .item.vertical .description-and-fields .description p {\n margin-bottom: 18px;\n }\n /* line 17, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul, .single-page .item.vertical .description-and-fields .description ul {\n margin-top: 1em;\n margin-left: 1em;\n margin-bottom: 2em;\n }\n /* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li, .single-page .item.vertical .description-and-fields .description ul li {\n list-style-type: disc;\n margin-bottom: 1em !important;\n }\n /* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li p, .single-page .item.vertical .description-and-fields .description ul li p {\n margin-bottom: 0;\n }\n /* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li ul, .single-page .item.vertical .description-and-fields .description ul li ul {\n margin-bottom: 1em;\n margin-left: 1.5em;\n }\n /* line 30, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li ul li, .single-page .item.vertical .description-and-fields .description ul li ul li {\n margin-bottom: 0 !important;\n list-style-type: none;\n }\n /* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ol li, .single-page .item.vertical .description-and-fields .description ol li {\n list-style-type: lower-alpha;\n }\n /* line 118, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option, .single-page .item.vertical.radio .option, .paged .item.vertical.check_box .option, .single-page .item.vertical.check_box .option {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 121, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .radiocheckwrapper, .single-page .item.vertical.radio .option .radiocheckwrapper, .paged .item.vertical.check_box .option .radiocheckwrapper, .single-page .item.vertical.check_box .option .radiocheckwrapper {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 122, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .labelwrapper, .single-page .item.vertical.radio .option .labelwrapper, .paged .item.vertical.check_box .option .labelwrapper, .single-page .item.vertical.check_box .option .labelwrapper {\n width: 91.52542%;\n float: right;\n margin-right: 0;\n }\n /* line 125, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option.show_values .value, .single-page .item.vertical.radio .option.show_values .value, .paged .item.vertical.check_box .option.show_values .value, .single-page .item.vertical.check_box .option.show_values .value {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 126, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option.show_values .labelwrapper, .single-page .item.vertical.radio .option.show_values .labelwrapper, .paged .item.vertical.check_box .option.show_values .labelwrapper, .single-page .item.vertical.check_box .option.show_values .labelwrapper {\n width: 83.05085%;\n float: right;\n margin-right: 0;\n }\n /* line 129, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions, .single-page .item.vertical.radio .option .subquestions, .paged .item.vertical.check_box .option .subquestions, .single-page .item.vertical.check_box .option .subquestions {\n margin-left: 5.05051%;\n width: 91.52542%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 133, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .item, .single-page .item.vertical.radio .option .subquestions .item, .paged .item.vertical.check_box .option .subquestions .item, .single-page .item.vertical.check_box .option .subquestions .item {\n width: 91.52542%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 135, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .item .main, .single-page .item.vertical.radio .option .subquestions .item .main, .paged .item.vertical.check_box .option .subquestions .item .main, .single-page .item.vertical.check_box .option .subquestions .item .main {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 136, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .item input, .single-page .item.vertical.radio .option .subquestions .item input, .paged .item.vertical.check_box .option .subquestions .item input, .single-page .item.vertical.check_box .option .subquestions .item input {\n width: auto;\n }\n /* line 139, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .radiocheckwrapper, .single-page .item.vertical.radio .option .subquestions .radiocheckwrapper, .paged .item.vertical.check_box .option .subquestions .radiocheckwrapper, .single-page .item.vertical.check_box .option .subquestions .radiocheckwrapper {\n width: 10px;\n padding-right: 20px;\n }\n /* line 143, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .labelwrapper, .single-page .item.vertical.radio .option .subquestions .labelwrapper, .paged .item.vertical.check_box .option .subquestions .labelwrapper, .single-page .item.vertical.check_box .option .subquestions .labelwrapper {\n width: auto;\n float: none;\n }\n /* line 150, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .inner-title, .single-page .item.vertical.radio .inner-title, .paged .item.vertical.check_box .inner-title, .single-page .item.vertical.check_box .inner-title {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 155, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.string input, .single-page .item.vertical.string input, .paged .item.vertical.string textarea, .single-page .item.vertical.string textarea, .paged .item.vertical.textarea input, .single-page .item.vertical.textarea input, .paged .item.vertical.textarea textarea, .single-page .item.vertical.textarea textarea {\n width: 100%;\n margin-right: 0;\n }\n /* line 156, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.string .sized, .single-page .item.vertical.string .sized, .paged .item.vertical.textarea .sized, .single-page .item.vertical.textarea .sized {\n width: auto;\n }\n /* line 175, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar, .single-page .progress-bar {\n width: 100%;\n float: right;\n margin-right: 0;\n margin: 1.5em -2em -1.5em;\n padding: 1.5em 2em;\n }\n /* line 181, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar .progress-wrapper .progress-slider, .single-page .progress-bar .progress-wrapper .progress-slider {\n background-position: 0 4px;\n display: inline-block;\n zoom: 1;\n }\n /* line 184, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar .progress-wrapper .progress-slider .progress-stop, .single-page .progress-bar .progress-wrapper .progress-slider .progress-stop {\n margin: 0 3px;\n width: 10px;\n height: 10px;\n }\n /* line 189, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar .progress-wrapper .progress-slider.long-list, .single-page .progress-bar .progress-wrapper .progress-slider.long-list {\n display: inline-block;\n zoom: 1;\n }\n /* line 196, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons, .single-page .buttons {\n width: 100%;\n float: right;\n margin-right: 0;\n margin: 1.5em -2em -1.5em;\n padding: 1.5em 2em;\n border-bottom: 0;\n }\n /* line 202, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .back, .single-page .buttons .back {\n width: 24.24242%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 203, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .prev, .single-page .buttons .prev {\n width: 24.24242%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 204, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .abort, .single-page .buttons .abort {\n width: 24.24242%;\n float: left;\n margin-right: 1.0101%;\n text-align: center;\n display: block;\n }\n /* line 205, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .print, .single-page .buttons .print {\n width: 100%;\n float: left;\n margin-right: 1.0101%;\n text-align: right;\n }\n /* line 206, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .next, .single-page .buttons .next {\n width: 24.24242%;\n float: right;\n margin-right: 0;\n text-align: right;\n }\n /* line 207, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .save, .single-page .buttons .save {\n width: 24.24242%;\n float: right;\n margin-right: 0;\n text-align: right;\n }\n}\n/* line 41, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel, .single-page .panel {\n margin-bottom: 2em;\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.3);\n}\n/* line 45, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel h1, .single-page .panel h1 {\n font-size: 1.5em;\n font-weight: bold;\n margin-bottom: 1.2em;\n z-index: 400;\n}\n/* line 52, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel hr, .single-page .panel hr {\n height: 8px;\n border: 0;\n background: #ddd;\n}\n/* line 54, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar, .single-page .panel .progress-bar {\n height: 25px;\n}\n/* line 56, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper, .single-page .panel .progress-bar .progress-wrapper {\n text-align: center;\n}\n/* line 58, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider, .single-page .panel .progress-bar .progress-wrapper .progress-slider {\n height: 8px;\n text-align: center;\n border: 1px solid #ccc;\n padding: 0;\n border-radius: 6px;\n overflow: hidden;\n padding: 1px;\n}\n/* line 66, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop {\n height: 8px;\n line-height: 8px;\n width: 6px;\n background: #fff;\n font-size: 6px;\n text-indent: -1234em;\n display: block;\n float: left;\n text-align: center;\n margin: 0;\n}\n/* line 77, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.first-child, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.first-child {\n width: 8px;\n border-radius: 5px 0 0 5px;\n}\n/* line 78, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.last-child, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.last-child {\n width: 8px;\n border-radius: 0 5px 5px 0;\n}\n/* line 79, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.active, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.active {\n background: #999;\n}\n/* line 80, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current {\n border-radius: 0 5px 5px 0;\n}\n/* line 82, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current.first-child, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current.first-child {\n border-radius: 5px;\n}\n/* line 88, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-details, .single-page .panel .progress-bar .progress-wrapper .progress-details {\n color: #999;\n font-size: 9px;\n margin: 4px 0 0 0;\n display: block;\n}\n/* line 97, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .buttons, .single-page .panel .buttons {\n border-top: 1px dotted #d6d6d6;\n background: #f3f3f3;\n}\n/* line 103, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.hidden, .single-page .panel .item.hidden {\n display: none;\n}\n/* line 105, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.errors, .single-page .panel .item.errors {\n outline: 1px solid red;\n padding: 0.4em;\n}\n/* line 108, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.errors .error, .single-page .panel .item.errors .error {\n background: #ffaaaa;\n color: #550000;\n outline: 1px solid red;\n padding: 0.3em;\n margin-bottom: 0.3em;\n}\n/* line 117, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item .main, .single-page .panel .item .main {\n font-weight: bold;\n}\n/* line 119, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item .main em, .single-page .panel .item .main em {\n font-style: italic;\n}\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text h2, .single-page .panel .item .text h2 {\n font-size: 1.2em;\n font-weight: bold;\n border-top: 8px solid #ddd;\n padding-top: 16px;\n}\n/* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text small, .single-page .panel .item .text small {\n font-size: 80%;\n}\n/* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text strong, .single-page .panel .item .text strong {\n font-style: italic;\n}\n/* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text em, .single-page .panel .item .text em {\n font-weight: bold;\n}\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text p, .single-page .panel .item .text p {\n margin-bottom: 18px;\n}\n/* line 17, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul, .single-page .panel .item .text ul {\n margin-top: 1em;\n margin-left: 1em;\n margin-bottom: 2em;\n}\n/* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li, .single-page .panel .item .text ul li {\n list-style-type: disc;\n margin-bottom: 1em !important;\n}\n/* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li p, .single-page .panel .item .text ul li p {\n margin-bottom: 0;\n}\n/* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li ul, .single-page .panel .item .text ul li ul {\n margin-bottom: 1em;\n margin-left: 1.5em;\n}\n/* line 30, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li ul li, .single-page .panel .item .text ul li ul li {\n margin-bottom: 0 !important;\n list-style-type: none;\n}\n/* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ol li, .single-page .panel .item .text ol li {\n list-style-type: lower-alpha;\n}\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description h2, .single-page .panel .item .description-and-fields .description h2 {\n font-size: 1.2em;\n font-weight: bold;\n border-top: 8px solid #ddd;\n padding-top: 16px;\n}\n/* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description small, .single-page .panel .item .description-and-fields .description small {\n font-size: 80%;\n}\n/* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description strong, .single-page .panel .item .description-and-fields .description strong {\n font-style: italic;\n}\n/* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description em, .single-page .panel .item .description-and-fields .description em {\n font-weight: bold;\n}\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description p, .single-page .panel .item .description-and-fields .description p {\n margin-bottom: 18px;\n}\n/* line 17, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul, .single-page .panel .item .description-and-fields .description ul {\n margin-top: 1em;\n margin-left: 1em;\n margin-bottom: 2em;\n}\n/* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li, .single-page .panel .item .description-and-fields .description ul li {\n list-style-type: disc;\n margin-bottom: 1em !important;\n}\n/* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li p, .single-page .panel .item .description-and-fields .description ul li p {\n margin-bottom: 0;\n}\n/* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li ul, .single-page .panel .item .description-and-fields .description ul li ul {\n margin-bottom: 1em;\n margin-left: 1.5em;\n}\n/* line 30, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li ul li, .single-page .panel .item .description-and-fields .description ul li ul li {\n margin-bottom: 0 !important;\n list-style-type: none;\n}\n/* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ol li, .single-page .panel .item .description-and-fields .description ol li {\n list-style-type: lower-alpha;\n}\n/* line 133, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.horizontal .main, .single-page .panel .item.horizontal .main {\n margin-bottom: 1em;\n}\n/* line 139, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.radio .inner-title, .single-page .panel .item.radio .inner-title, .paged .panel .item.check_box .inner-title, .single-page .panel .item.check_box .inner-title {\n margin-top: 1.5em;\n margin-bottom: 1.5em;\n font-weight: bold;\n}\n/* line 147, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.radio .option .labelwrapper p, .single-page .panel .item.radio .option .labelwrapper p, .paged .panel .item.check_box .option .labelwrapper p, .single-page .panel .item.check_box .option .labelwrapper p {\n display: inline;\n}\n/* line 151, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.radio .option.show_values .value, .single-page .panel .item.radio .option.show_values .value, .paged .panel .item.check_box .option.show_values .value, .single-page .panel .item.check_box .option.show_values .value {\n text-align: center;\n}\n/* line 158, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale td, .single-page .panel .item.scale td {\n border: 0;\n text-align: center;\n}\n/* line 164, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth1, .single-page .panel .item.scale .option.optionwidth1, .paged .panel .item.scale .description.optionwidth1, .single-page .panel .item.scale .description.optionwidth1 {\n width: 20%;\n}\n/* line 165, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth2, .single-page .panel .item.scale .option.optionwidth2, .paged .panel .item.scale .description.optionwidth2, .single-page .panel .item.scale .description.optionwidth2 {\n width: 20%;\n}\n/* line 166, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth3, .single-page .panel .item.scale .option.optionwidth3, .paged .panel .item.scale .description.optionwidth3, .single-page .panel .item.scale .description.optionwidth3 {\n width: 20%;\n}\n/* line 167, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth4, .single-page .panel .item.scale .option.optionwidth4, .paged .panel .item.scale .description.optionwidth4, .single-page .panel .item.scale .description.optionwidth4 {\n width: 20%;\n}\n/* line 168, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth5, .single-page .panel .item.scale .option.optionwidth5, .paged .panel .item.scale .description.optionwidth5, .single-page .panel .item.scale .description.optionwidth5 {\n width: 20%;\n}\n/* line 169, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth6, .single-page .panel .item.scale .option.optionwidth6, .paged .panel .item.scale .description.optionwidth6, .single-page .panel .item.scale .description.optionwidth6 {\n width: 16.66667%;\n}\n/* line 170, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth7, .single-page .panel .item.scale .option.optionwidth7, .paged .panel .item.scale .description.optionwidth7, .single-page .panel .item.scale .description.optionwidth7 {\n width: 14.28571%;\n}\n/* line 171, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth8, .single-page .panel .item.scale .option.optionwidth8, .paged .panel .item.scale .description.optionwidth8, .single-page .panel .item.scale .description.optionwidth8 {\n width: 12.5%;\n}\n/* line 172, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth9, .single-page .panel .item.scale .option.optionwidth9, .paged .panel .item.scale .description.optionwidth9, .single-page .panel .item.scale .description.optionwidth9 {\n width: 11.11111%;\n}\n/* line 173, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth10, .single-page .panel .item.scale .option.optionwidth10, .paged .panel .item.scale .description.optionwidth10, .single-page .panel .item.scale .description.optionwidth10 {\n width: 10%;\n}\n/* line 174, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth11, .single-page .panel .item.scale .option.optionwidth11, .paged .panel .item.scale .description.optionwidth11, .single-page .panel .item.scale .description.optionwidth11 {\n width: 9.09091%;\n}\n/* line 175, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth12, .single-page .panel .item.scale .option.optionwidth12, .paged .panel .item.scale .description.optionwidth12, .single-page .panel .item.scale .description.optionwidth12 {\n width: 8.33333%;\n}\n\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .hidden {\n display: none;\n}\n/* line 6, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .panel.noVisibleQuestions {\n display: none;\n}\n/* line 10, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .item.hide {\n margin: 0 !important;\n outline: none !important;\n}\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .item.hide > * {\n display: none !important;\n}\n';
18123
18146
  const RTL_LANGUAGES = ["ar", "he", "fa", "ur"];
18124
18147
  const Quby = (props) => {
@@ -18185,14 +18208,12 @@ export {
18185
18208
  AnswerGroupMinimumValidator,
18186
18209
  AnswerPage,
18187
18210
  BaseValidator,
18188
- CurliesInterpolator,
18189
18211
  DatePartsAnswerSchema,
18190
18212
  DatePartsComponentSchema,
18191
18213
  FlagsSchema,
18192
18214
  ICalcBooleanOpsSchema,
18193
18215
  ICalcBooleanReducerOpsSchema,
18194
18216
  ICalcComparerOpsSchema,
18195
- InterpolateCurliesContext,
18196
18217
  MaximumCheckedAllowedValidator,
18197
18218
  MaximumDateValidator,
18198
18219
  MaximumValidator,
@@ -18204,6 +18225,7 @@ export {
18204
18225
  Quby,
18205
18226
  QubyContext,
18206
18227
  Questionnaire,
18228
+ QuestionnaireTranslationsCurlies,
18207
18229
  RegexpValidator,
18208
18230
  RequiresAnswerValidator,
18209
18231
  Response,