From 5d21399a732901cd79c24dda6568ef4537e944d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 11:50:29 +0200 Subject: [PATCH 01/26] Custom markdown filter, 3rd party one wasn't thread safe --- setup.py | 2 +- src/octoprint/server/__init__.py | 4 ++-- src/octoprint/util/jinja.py | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index bf0cb84f..8ff9859f 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ INSTALL_REQUIRES = [ "Flask-Principal>=0.3.5,<0.4", "Flask-Babel>=0.9,<0.10", "Flask-Assets>=0.10,<0.11", - "Flask-Markdown>=0.3,<0.4", + "markdown>=2.6.4,<2.7", "pyserial>=2.7,<2.8", "netaddr>=0.7.17,<0.8", "watchdog>=0.8.3,<0.9", diff --git a/src/octoprint/server/__init__.py b/src/octoprint/server/__init__.py index 97d7831b..ec8372c8 100644 --- a/src/octoprint/server/__init__.py +++ b/src/octoprint/server/__init__.py @@ -12,7 +12,6 @@ from flask.ext.login import LoginManager, current_user from flask.ext.principal import Principal, Permission, RoleNeed, identity_loaded, UserNeed from flask.ext.babel import Babel, gettext, ngettext from flask.ext.assets import Environment, Bundle -from flaskext.markdown import Markdown from babel import Locale from watchdog.observers import Observer from watchdog.observers.polling import PollingObserver @@ -649,7 +648,8 @@ class Server(object): response.headers.add("X-Clacks-Overhead", "GNU Terry Pratchett") return response - Markdown(app) + from octoprint.util.jinja import MarkdownFilter + MarkdownFilter(app) def _setup_i18n(self, app): global babel diff --git a/src/octoprint/util/jinja.py b/src/octoprint/util/jinja.py index 1eb31126..12d70461 100644 --- a/src/octoprint/util/jinja.py +++ b/src/octoprint/util/jinja.py @@ -159,3 +159,18 @@ class ExceptionHandlerExtension(Extension): return "Unknown error" trycatch = ExceptionHandlerExtension + + +class MarkdownFilter(object): + + def __init__(self, app, **markdown_options): + self._markdown_options = markdown_options + app.jinja_env.filters.setdefault("markdown", self) + + def __call__(self, stream): + from jinja2 import Markup + from markdown import Markdown + + # Markdown is not thread safe + markdown = Markdown(**self._markdown_options) + return Markup(markdown.convert(stream)) From c6225aa8341cd4f64f6fc6ca819def74c6c8d626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 13:25:39 +0200 Subject: [PATCH 02/26] Introduce single output method in virtual printer for easier debugging --- .../plugins/virtual_printer/virtual.py | 97 ++++++++++--------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/src/octoprint/plugins/virtual_printer/virtual.py b/src/octoprint/plugins/virtual_printer/virtual.py index b7ce528a..63a3654f 100644 --- a/src/octoprint/plugins/virtual_printer/virtual.py +++ b/src/octoprint/plugins/virtual_printer/virtual.py @@ -37,7 +37,7 @@ class VirtualPrinter(object): self.buffered = Queue.Queue(maxsize=settings().getInt(["devel", "virtualPrinter", "commandBuffer"])) for item in ['start\n', 'Marlin: Virtual Marlin!\n', '\x80\n', 'SD card ok\n']: - self.outgoing.put(item) + self._output(item) self.currentExtruder = 0 self.temp = [0.0] * settings().getInt(["devel", "virtualPrinter", "numExtruders"]) @@ -146,7 +146,7 @@ class VirtualPrinter(object): self.incoming.task_done() except Queue.Empty: if self._sendWait and time.time() > next_wait_timeout: - self.outgoing.put("wait") + self._output("wait") next_wait_timeout = time.time() + self._waitInterval continue @@ -178,7 +178,7 @@ class VirtualPrinter(object): self.currentLine += 1 elif settings().getBoolean(["devel", "virtualPrinter", "forceChecksum"]): - self.outgoing.put("Error: Missing checksum") + self._output("Error: Missing checksum") continue # track N = N + 1 @@ -224,7 +224,7 @@ class VirtualPrinter(object): if data.strip() == "version": from octoprint._version import get_versions - self.outgoing.put("OctoPrint VirtualPrinter v" + get_versions()["version"]) + self._output("OctoPrint VirtualPrinter v" + get_versions()["version"]) continue elif data.startswith("!!DEBUG:"): self._debugTrigger(data[len("!!DEBUG:"):].strip()) @@ -248,7 +248,7 @@ class VirtualPrinter(object): self._listSd() elif 'M21' in data: self._sdCardReady = True - self.outgoing.put("SD card ok") + self._output("SD card ok") elif 'M22' in data: self._sdCardReady = False elif 'M23' in data: @@ -286,18 +286,18 @@ class VirtualPrinter(object): output = "X:10.00 Y:3.20 Z:5.20 E:1.24 Count: A:1000 B:320 C:1040" if not self._okBeforeCommandOutput: output = "ok " + output - self.outgoing.put(output) + self._output(output) continue elif "M117" in data: # we'll just use this to echo a message, to allow playing around with pause triggers if self._echoOnM117: - self.outgoing.put("echo:%s" % re.search("M117\s+(.*)", data).group(1)) + self._output("echo:%s" % re.search("M117\s+(.*)", data).group(1)) elif "M999" in data: # mirror Marlin behaviour - self.outgoing.put("Resend: 1") + self._output("Resend: 1") elif data.startswith("T"): self.currentExtruder = int(re.search("T(\d+)", data).group(1)) - self.outgoing.put("Active Extruder: %d" % self.currentExtruder) + self._output("Active Extruder: %d" % self.currentExtruder) elif "G20" in data: self._unitModifier = 1.0 / 2.54 if self._lastX is not None: @@ -345,7 +345,7 @@ class VirtualPrinter(object): del self._sleepAfterNext[command] if interval is not None: - self.outgoing.put("// sleeping for {interval} seconds".format(interval=interval)) + self._output("// sleeping for {interval} seconds".format(interval=interval)) time.sleep(interval) if len(data.strip()) > 0 and not self._okBeforeCommandOutput: @@ -363,7 +363,7 @@ class VirtualPrinter(object): if not self._supportM112: return self._killed = True - self.outgoing.put("echo:EMERGENCY SHUTDOWN DETECTED. KILLED.") + self._output("echo:EMERGENCY SHUTDOWN DETECTED. KILLED.") def _triggerResend(self, expected=None, actual=None): with self._incoming_lock: @@ -373,13 +373,13 @@ class VirtualPrinter(object): self.lastN = expected - 1 if actual is None: - self.outgoing.put("Error: Wrong checksum") + self._output("Error: Wrong checksum") else: - self.outgoing.put("Error: expected line %d got %d" % (expected, actual)) + self._output("Error: expected line %d got %d" % (expected, actual)) def request_resend(): - self.outgoing.put("Resend:%d" % expected) - self.outgoing.put("ok") + self._output("Resend:%d" % expected) + self._output("ok") if settings().getBoolean(["devel", "virtualPrinter", "repetierStyleResends"]): request_resend() @@ -387,11 +387,11 @@ class VirtualPrinter(object): def _debugTrigger(self, data): if data == "action_pause": - self.outgoing.put("// action:pause") + self._output("// action:pause") elif data == "action_resume": - self.outgoing.put("// action:resume") + self._output("// action:resume") elif data == "action_disconnect": - self.outgoing.put("// action:disconnect") + self._output("// action:disconnect") elif data == "dont_answer": self._dont_answer = True elif data == "trigger_resend_lineno": @@ -401,7 +401,7 @@ class VirtualPrinter(object): elif data == "drop_connection": self._debug_drop_connection = True elif data == "maxtemp_error": - self.outgoing.put("Error: MAXTEMP triggered!") + self._output("Error: MAXTEMP triggered!") else: try: sleep_match = VirtualPrinter.sleep_regex.match(data) @@ -411,28 +411,28 @@ class VirtualPrinter(object): if sleep_match is not None: interval = int(sleep_match.group(1)) - self.outgoing.put("// sleeping for {interval} seconds".format(interval=interval)) + self._output("// sleeping for {interval} seconds".format(interval=interval)) time.sleep(interval) elif sleep_after_match is not None: command = sleep_after_match.group(1) interval = int(sleep_after_match.group(2)) self._sleepAfter[command] = interval - self.outgoing.put("// going to sleep {interval} seconds after each {command}".format(**locals())) + self._output("// going to sleep {interval} seconds after each {command}".format(**locals())) elif sleep_after_next_match is not None: command = sleep_after_next_match.group(1) interval = int(sleep_after_next_match.group(2)) self._sleepAfterNext[command] = interval - self.outgoing.put("// going to sleep {interval} seconds after next {command}".format(**locals())) + self._output("// going to sleep {interval} seconds after next {command}".format(**locals())) elif custom_action_match is not None: action = custom_action_match.group(1) params = custom_action_match.group(2) params = params.strip() if params is not None else "" - self.outgoing.put("// action:{action} {params}".format(**locals()).strip()) + self._output("// action:{action} {params}".format(**locals()).strip()) except: pass def _listSd(self): - self.outgoing.put("Begin file list") + self._output("Begin file list") if settings().getBoolean(["devel", "virtualPrinter", "extendedSdFileList"]): items = map( lambda x: "%s %d" % (x.upper(), os.stat(os.path.join(self._virtualSd, x)).st_size), @@ -444,23 +444,23 @@ class VirtualPrinter(object): os.listdir(self._virtualSd) ) for item in items: - self.outgoing.put(item) - self.outgoing.put("End file list") + self._output(item) + self._output("End file list") def _selectSdFile(self, filename): if filename.startswith("/"): filename = filename[1:] file = os.path.join(self._virtualSd, filename.lower()) if not os.path.exists(file) or not os.path.isfile(file): - self.outgoing.put("open failed, File: %s." % filename) + self._output("open failed, File: %s." % filename) else: self._selectedSdFile = file self._selectedSdFileSize = os.stat(file).st_size if settings().getBoolean(["devel", "virtualPrinter", "includeFilenameInOpened"]): - self.outgoing.put("File opened: %s Size: %d" % (filename, self._selectedSdFileSize)) + self._output("File opened: %s Size: %d" % (filename, self._selectedSdFileSize)) else: - self.outgoing.put("File opened") - self.outgoing.put("File selected") + self._output("File opened") + self._output("File selected") def _startSdPrint(self): if self._selectedSdFile is not None: @@ -477,9 +477,9 @@ class VirtualPrinter(object): def _reportSdStatus(self): if self._sdPrinter is not None and self._sdPrintingSemaphore.is_set: - self.outgoing.put("SD printing byte %d/%d" % (self._selectedSdFilePos, self._selectedSdFileSize)) + self._output("SD printing byte %d/%d" % (self._selectedSdFilePos, self._selectedSdFileSize)) else: - self.outgoing.put("Not SD printing") + self._output("Not SD printing") def _processTemperatureQuery(self): includeTarget = not settings().getBoolean(["devel", "virtualPrinter", "repetierStyleTargetTemperature"]) @@ -516,7 +516,7 @@ class VirtualPrinter(object): if includeOk: output = "ok " + output - self.outgoing.put(output) + self._output(output) def _parseHotendCommand(self, line): tool = 0 @@ -538,7 +538,7 @@ class VirtualPrinter(object): if "M109" in line: self._waitForHeatup("tool%d" % tool) if settings().getBoolean(["devel", "virtualPrinter", "repetierStyleTargetTemperature"]): - self.outgoing.put("TargetExtr%d:%d" % (tool, self.targetTemp[tool])) + self._output("TargetExtr%d:%d" % (tool, self.targetTemp[tool])) def _parseBedCommand(self, line): try: @@ -549,7 +549,7 @@ class VirtualPrinter(object): if "M190" in line: self._waitForHeatup("bed") if settings().getBoolean(["devel", "virtualPrinter", "repetierStyleTargetTemperature"]): - self.outgoing.put("TargetBed:%d" % self.bedTargetTemp) + self._output("TargetBed:%d" % self.bedTargetTemp) def _performMove(self, line): matchX = re.search("X([0-9.]+)", line) @@ -646,13 +646,13 @@ class VirtualPrinter(object): if os.path.isfile(file): os.remove(file) else: - self.outgoing.put("error writing to file") + self._output("error writing to file") handle = None try: handle = open(file, "w") except: - self.outgoing.put("error writing to file") + self._output("error writing to file") if handle is not None: try: handle.close() @@ -661,7 +661,7 @@ class VirtualPrinter(object): self._writingToSdHandle = handle self._writingToSd = True self._selectedSdFile = file - self.outgoing.put("Writing to file: %s" % filename) + self._output("Writing to file: %s" % filename) def _finishSdFile(self): try: @@ -672,7 +672,7 @@ class VirtualPrinter(object): self._writingToSdHandle = None self._writingToSd = False self._selectedSdFile = None - self.outgoing.put("Done saving file") + self._output("Done saving file") def _sdPrintingWorker(self): self._selectedSdFilePos = 0 @@ -710,7 +710,7 @@ class VirtualPrinter(object): self._sdPrintingSemaphore.clear() self._selectedSdFilePos = 0 self._sdPrinter = None - self.outgoing.put("Done printing file") + self._output("Done printing file") def _waitForHeatup(self, heater): delta = 1 @@ -721,12 +721,12 @@ class VirtualPrinter(object): toolNum = int(heater[len("tool"):]) while not self._killed and (self.temp[toolNum] < self.targetTemp[toolNum] - delta or self.temp[toolNum] > self.targetTemp[toolNum] + delta): self._simulateTemps(delta=delta) - self.outgoing.put("T:%0.2f" % self.temp[toolNum]) + self._output("T:%0.2f" % self.temp[toolNum]) time.sleep(delay) elif heater == "bed": while not self._killed and (self.bedTemp < self.bedTargetTemp - delta or self.bedTemp > self.bedTargetTemp + delta): self._simulateTemps(delta=delta) - self.outgoing.put("B:%0.2f" % self.bedTemp) + self._output("B:%0.2f" % self.bedTemp) time.sleep(delay) except AttributeError: if self.outgoing is not None: @@ -773,6 +773,13 @@ class VirtualPrinter(object): self._logger.info("Closing down buffer loop") + def _output(self, line): + try: + self.outgoing.put(line) + except: + if self.outgoing is None: + pass + def write(self, data): if self._debug_drop_connection: self._logger.info("Debug drop of connection requested, raising SerialTimeoutException") @@ -814,14 +821,14 @@ class VirtualPrinter(object): return if settings().getBoolean(["devel", "virtualPrinter", "okWithLinenumber"]): - self.outgoing.put("ok %d" % self.lastN) + self._output("ok %d" % self.lastN) else: - self.outgoing.put("ok") + self._output("ok") def _sendWaitAfterTimeout(self, timeout=5): time.sleep(timeout) if self.outgoing is not None: - self.outgoing.put("wait") + self._output("wait") class CharCountingQueue(Queue.Queue): From 44ec821294ef2be9eed22a2f59df104ec8496a63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 16:02:28 +0200 Subject: [PATCH 03/26] Track consecutive timeouts Should allow to detect if a device actually has gone missing. See #1388 --- src/octoprint/settings.py | 5 ++ src/octoprint/util/comm.py | 93 ++++++++++++++++++++++++++++---------- 2 files changed, 75 insertions(+), 23 deletions(-) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index d135e798..74aa3d00 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -85,6 +85,11 @@ default_settings = { "temperature": 5, "sdStatus": 1 }, + "maxCommunicationTimeouts": { + "idle": 5, + "printing": 10, + "long": 10 + }, "additionalPorts": [], "longRunningCommands": ["G4", "G28", "G29", "G30", "G32", "M400", "M226"], "checksumRequiringCommands": ["M110"], diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index 269ec8cb..833e4303 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -236,6 +236,14 @@ class MachineCom(object): except: pass + self._consecutive_timeouts = 0 + self._consecutive_timeout_maximums = dict() + for key, value in settings().get(["serial", "maxCommunicationTimeouts"], merged=True, asdict=True).items(): + try: + self._consecutive_timeout_maximums[key] = int(value) + except: + pass + self._hello_command = settings().get(["serial", "helloCommand"]) self._trigger_ok_for_m29 = settings().getBoolean(["serial", "triggerOkForM29"]) @@ -566,15 +574,17 @@ class MachineCom(object): if not processed: cmd = process_gcode_line(cmd) if not cmd: - return + return False if self.isPrinting() and not self.isSdFileSelected(): try: self._command_queue.put((cmd, cmd_type), item_type=cmd_type) + return True except TypeAlreadyInQueue as e: self._logger.debug("Type already in command queue: " + e.type) + return False elif self.isOperational() or force: - self._sendCommand(cmd, cmd_type=cmd_type) + return self._sendCommand(cmd, cmd_type=cmd_type) def sendGcodeScript(self, scriptName, replacements=None): context = dict() @@ -921,6 +931,8 @@ class MachineCom(object): disable_external_heatup_detection = not settings().getBoolean(["feature", "externalHeatupDetection"]) + self._consecutive_timeouts = 0 + #Open the serial port. if not self._openSerial(): return @@ -956,6 +968,7 @@ class MachineCom(object): if line is None: break if line.strip() is not "": + self._consecutive_timeouts = 0 if self._heating: self._timeout = get_new_timeout("heatup", self._timeout_intervals) else: @@ -1232,6 +1245,7 @@ class MachineCom(object): elif line.startswith("ok"): self._onConnected() elif time.time() > self._timeout: + self._log("There was a timeout while trying to connect to the printer") self.close() except: @@ -1271,29 +1285,58 @@ class MachineCom(object): return def _handle_timeout(self): - if self._state not in (self.STATE_PRINTING,): - return - - if self._long_running_command: - self._logger.debug("Ran into a communication timeout, but a command known to be a long runner is currently active") + if self._state not in (self.STATE_PRINTING, + self.STATE_PAUSED, + self.STATE_OPERATIONAL): return general_message = "Configure long running commands or increase communication timeout if that happens regularly on specific commands or long moves." - if self._resendActive: - self._log("Communication timeout while printing and during an active resend, resending same line again to trigger response from printer. " + general_message) - self._resendSameCommand() - self._clear_to_send.set() + + # figure out which consecutive timeout maximum we have to use + if self._long_running_command: + consecutive_max = self._consecutive_timeout_maximums.get("long", 0) + elif self._state in (self.STATE_PRINTING,): + consecutive_max = self._consecutive_timeout_maximums.get("printing", 0) + else: + consecutive_max = self._consecutive_timeout_maximums.get("idle", 0) + + # now increment the timeout counter + self._consecutive_timeouts += 1 + self._logger.debug("Now at {} consecutive timeouts".format(self._consecutive_timeouts)) + + if 0 < consecutive_max < self._consecutive_timeouts: + # too many consecutive timeouts, we give up + message = "No response from printer after {} consecutive communication timeouts, considering it dead.".format(consecutive_max + 1) + self._logger.info(message) + self._log(message + " " + general_message) + self._errorValue = "Too many consecutive timeouts" + self.close(is_error=True) + + elif self._resendActive: + # resend active, resend same command instead of triggering a new one + message = "Communication timeout while printing and during an active resend, resending same line again to trigger response from printer." + self._logger.info(message) + self._log(message + " " + general_message) + if self._resendSameCommand(): + self._clear_to_send.set() elif self._heating: - self._logger.debug("Timeout while in an active heatup, considering heatup to be over then") + # blocking heatup active, consider that finished + message = "Timeout while in an active heatup, considering heatup to be over." + self._logger.info(message) self._finish_heatup() - else: - self._log("Communication timeout while printing, trying to trigger response from printer. " + general_message) - self._sendCommand("M105", cmd_type="temperature") - self._clear_to_send.set() + elif self._long_running_command: + # long running command active, ignore timeout + self._logger.debug("Ran into a communication timeout, but a command known to be a long runner is currently active") - return + elif self._state in (self.STATE_PRINTING, self.STATE_PAUSED): + # printing, try to tickle the printer + message = "Communication timeout while printing, trying to trigger response from printer." + self._logger.info(message) + self._log(message + " " + general_message) + if self._sendCommand("M105", cmd_type="temperature"): + self._clear_to_send.set() def _track_heatup(self): self._heating = True @@ -1719,7 +1762,7 @@ class MachineCom(object): cmd = self._lastLines[-self._resendDelta] lineNumber = self._currentLine - self._resendDelta - self._enqueue_for_sending(cmd, linenumber=lineNumber) + result = self._enqueue_for_sending(cmd, linenumber=lineNumber) self._resendDelta -= 1 if self._resendDelta <= 0: @@ -1727,6 +1770,8 @@ class MachineCom(object): self._lastResendNumber = None self._currentResendCount = 0 + return result + def _sendCommand(self, cmd, cmd_type=None): # Make sure we are only handling one sending job at a time with self._sendingLock: @@ -1747,11 +1792,11 @@ class MachineCom(object): eventManager().fire(gcodeToEvent[gcode]) # actually enqueue the command for sending - self._enqueue_for_sending(cmd, command_type=cmd_type) - - self._process_command_phase("queued", cmd, cmd_type, gcode=gcode) - - return True + if self._enqueue_for_sending(cmd, command_type=cmd_type): + self._process_command_phase("queued", cmd, cmd_type, gcode=gcode) + return True + else: + return False ##~~ send loop handling @@ -1767,8 +1812,10 @@ class MachineCom(object): try: self._send_queue.put((command, linenumber, command_type), item_type=command_type) + return True except TypeAlreadyInQueue as e: self._logger.debug("Type already in send queue: " + e.type) + return False def _send_loop(self): """ From 3614033b0df60cd2bc44fe4c97ee9d275f05a81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 16:10:00 +0200 Subject: [PATCH 04/26] No endless circles if we can't write any bytes to serial --- src/octoprint/settings.py | 1 + src/octoprint/util/comm.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index d135e798..271f5c14 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -85,6 +85,7 @@ default_settings = { "temperature": 5, "sdStatus": 1 }, + "maxWritePasses": 5, "additionalPorts": [], "longRunningCommands": ["G4", "G28", "G29", "G30", "G32", "M400", "M226"], "checksumRequiringCommands": ["M110"], diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index 269ec8cb..a1666833 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -236,6 +236,8 @@ class MachineCom(object): except: pass + self._max_write_passes = settings().getInt(["serial", "maxWritePasses"]) + self._hello_command = settings().get(["serial", "helloCommand"]) self._trigger_ok_for_m29 = settings().getBoolean(["serial", "triggerOkForM29"]) @@ -1945,8 +1947,11 @@ class MachineCom(object): cmd += "\n" written = 0 + passes = 0 while written < len(cmd): to_send = cmd[written:] + old_written = written + try: written += self._serial.write(to_send) except serial.SerialTimeoutException: @@ -1968,6 +1973,18 @@ class MachineCom(object): self.close(is_error=True) break + if old_written == written: + # nothing written this pass + passes += 1 + if passes > self._max_write_passes: + # nothing written in max consecutive passes, we give up + message = "Could not write anything to the serial port in {} tries, something appears to be wrong with the printer communication".format(self._max_write_passes) + self._logger.error(message) + self._log(message) + self._errorValue = "Could not write to serial port" + self.close(is_error=True) + break + ##~~ command handlers def _gcode_T_sent(self, cmd, cmd_type=None): From b5e19f067646e5a9873db1f9cf4583bf46c2d7e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 16:10:57 +0200 Subject: [PATCH 05/26] Synchronize access to selected file --- src/octoprint/printer/standard.py | 109 +++++++++++++++++------------- 1 file changed, 61 insertions(+), 48 deletions(-) diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py index 2400a12f..8a446036 100644 --- a/src/octoprint/printer/standard.py +++ b/src/octoprint/printer/standard.py @@ -71,6 +71,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._streamingFinishedCallback = None self._selectedFile = None + self._selectedFileLock = threading.RLock() self._timeEstimationData = None # comm @@ -111,8 +112,8 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): current_z=None ) - eventManager().subscribe(Events.METADATA_ANALYSIS_FINISHED, self._on_event_MetadataAnalysisFinished) - eventManager().subscribe(Events.METADATA_STATISTICS_UPDATED, self._on_event_MetadataStatisticsUpdated) + eventManager().subscribe(Events.METADATA_ANALYSIS_FINISHED, self._on_metadata_event) + eventManager().subscribe(Events.METADATA_STATISTICS_UPDATED, self._on_metadata_event) #~~ handling of PrinterCallbacks @@ -149,25 +150,23 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): #~~ callback from metadata analysis event - def _on_event_MetadataAnalysisFinished(self, event, data): - if self._selectedFile: - self._setJobData(self._selectedFile["filename"], - self._selectedFile["filesize"], - self._selectedFile["sd"]) - - def _on_event_MetadataStatisticsUpdated(self, event, data): - self._setJobData(self._selectedFile["filename"], - self._selectedFile["filesize"], - self._selectedFile["sd"]) + def _on_metadata_event(self, event, data): + with self._selectedFileLock: + if self._selectedFile and data and data.get("path", None) == self._selectedFile["filename"] \ + and data.get("storage", None) == FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL: + self._setJobData(self._selectedFile["filename"], + self._selectedFile["filesize"], + self._selectedFile["sd"]) #~~ progress plugin reporting def _reportPrintProgressToPlugins(self, progress): - if not progress or not self._selectedFile or not "sd" in self._selectedFile or not "filename" in self._selectedFile: - return + with self._selectedFileLock: + if not progress or not self._selectedFile or not "sd" in self._selectedFile or not "filename" in self._selectedFile: + return - storage = "sdcard" if self._selectedFile["sd"] else "local" - filename = self._selectedFile["filename"] + storage = "sdcard" if self._selectedFile["sd"] else "local" + filename = self._selectedFile["filename"] def call_plugins(storage, filename, progress): for plugin in self._progressPlugins: @@ -378,13 +377,16 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): """ if self._comm is None or not self._comm.isOperational() or self._comm.isPrinting(): return - if self._selectedFile is None: - return + + with self._selectedFileLock: + if self._selectedFile is None: + return + sd = self._selectedFile["sd"] rolling_window = None threshold = None countdown = None - if self._selectedFile["sd"]: + if sd: # we are interesting in a rolling window of roughly the last 15s, so the number of entries has to be derived # by that divided by the sd status polling interval rolling_window = 15 / settings().get(["serial", "timeout", "sdStatus"]) @@ -441,15 +443,16 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._setProgressData() # mark print as failure - if self._selectedFile is not None: - self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) - payload = { - "file": self._selectedFile["filename"], - "origin": FileDestinations.LOCAL - } - if self._selectedFile["sd"]: - payload["origin"] = FileDestinations.SDCARD - eventManager().fire(Events.PRINT_FAILED, payload) + with self._selectedFileLock: + if self._selectedFile is not None: + self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) + payload = { + "file": self._selectedFile["filename"], + "origin": FileDestinations.LOCAL + } + if self._selectedFile["sd"]: + payload["origin"] = FileDestinations.SDCARD + eventManager().fire(Events.PRINT_FAILED, payload) def get_state_string(self): """ @@ -632,9 +635,13 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): estimatedTotalPrintTime = self._estimateTotalPrintTime(progress, cleanedPrintTime) totalPrintTime = estimatedTotalPrintTime - if self._selectedFile and "estimatedPrintTime" in self._selectedFile and self._selectedFile["estimatedPrintTime"]: - statisticalTotalPrintTime = self._selectedFile["estimatedPrintTime"] - if progress and cleanedPrintTime: + statisticalTotalPrintTime = None + with self._selectedFileLock: + if self._selectedFile and "estimatedPrintTime" in self._selectedFile and self._selectedFile[ + "estimatedPrintTime"]: + statisticalTotalPrintTime = self._selectedFile["estimatedPrintTime"] + + if statisticalTotalPrintTime is not None and progress and cleanedPrintTime: if estimatedTotalPrintTime is None: totalPrintTime = statisticalTotalPrintTime else: @@ -691,14 +698,16 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): else: path_in_storage = self._fileManager.path_in_storage(FileDestinations.LOCAL, filename) path_on_disk = self._fileManager.path_on_disk(FileDestinations.LOCAL, filename) - self._selectedFile = { - "filename": path_in_storage, - "filesize": filesize, - "sd": sd, - "estimatedPrintTime": None - } + with self._selectedFileLock: + self._selectedFile = { + "filename": path_in_storage, + "filesize": filesize, + "sd": sd, + "estimatedPrintTime": None + } else: - self._selectedFile = None + with self._selectedFileLock: + self._selectedFile = None self._stateMonitor.set_job_data({ "file": { "name": None, @@ -741,11 +750,13 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): if "lastPrintTime" in fileData["statistics"] and printer_profile in fileData["statistics"]["lastPrintTime"]: lastPrintTime = fileData["statistics"]["lastPrintTime"][printer_profile] - if averagePrintTime is not None: - self._selectedFile["estimatedPrintTime"] = averagePrintTime - elif estimatedPrintTime is not None: - # TODO apply factor which first needs to be tracked! - self._selectedFile["estimatedPrintTime"] = estimatedPrintTime + with self._selectedFileLock: + if self._selectedFile is not None: + if averagePrintTime is not None: + self._selectedFile["estimatedPrintTime"] = averagePrintTime + elif estimatedPrintTime is not None: + # TODO apply factor which first needs to be tracked! + self._selectedFile["estimatedPrintTime"] = estimatedPrintTime self._stateMonitor.set_job_data({ "file": { @@ -802,9 +813,10 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): # forward relevant state changes to gcode manager if oldState == comm.MachineCom.STATE_PRINTING: - if self._selectedFile is not None: - if state == comm.MachineCom.STATE_CLOSED or state == comm.MachineCom.STATE_ERROR or state == comm.MachineCom.STATE_CLOSED_WITH_ERROR: - self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) + with self._selectedFileLock: + if self._selectedFile is not None: + if state == comm.MachineCom.STATE_CLOSED or state == comm.MachineCom.STATE_ERROR or state == comm.MachineCom.STATE_CLOSED_WITH_ERROR: + self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) self._analysisQueue.resume() # printing done, put those cpu cycles to good use elif state == comm.MachineCom.STATE_PRINTING: self._analysisQueue.pause() # do not analyse files while printing @@ -862,8 +874,9 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self.start_print(pos=self._posAfterSelect) def on_comm_print_job_done(self): - self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), True, self._printerProfileManager.get_current_or_default()["id"]) - self._setProgressData(completion=1.0, filepos=self._selectedFile["filesize"], printTime=self._comm.getPrintTime(), printTimeLeft=0) + with self._selectedFileLock: + self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), True, self._printerProfileManager.get_current_or_default()["id"]) + self._setProgressData(completion=1.0, filepos=self._selectedFile["filesize"], printTime=self._comm.getPrintTime(), printTimeLeft=0) self._stateMonitor.set_state({"text": self.get_state_string(), "flags": self._getStateFlags()}) self._fileManager.delete_recovery_data() From 2f26104b982556d2036006044a75bff3bb491298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 16:11:09 +0200 Subject: [PATCH 06/26] Better sleep debug command in virtual printer --- .../plugins/virtual_printer/virtual.py | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/octoprint/plugins/virtual_printer/virtual.py b/src/octoprint/plugins/virtual_printer/virtual.py index 63a3654f..93ad5825 100644 --- a/src/octoprint/plugins/virtual_printer/virtual.py +++ b/src/octoprint/plugins/virtual_printer/virtual.py @@ -82,6 +82,7 @@ class VirtualPrinter(object): self._incoming_lock = threading.RLock() + self._debug_sleep = None self._sleepAfterNext = dict() self._sleepAfter = dict() @@ -412,7 +413,7 @@ class VirtualPrinter(object): if sleep_match is not None: interval = int(sleep_match.group(1)) self._output("// sleeping for {interval} seconds".format(interval=interval)) - time.sleep(interval) + self._debug_sleep = interval elif sleep_after_match is not None: command = sleep_after_match.group(1) interval = int(sleep_after_match.group(2)) @@ -803,11 +804,32 @@ class VirtualPrinter(object): if self._debug_drop_connection: raise SerialTimeoutException() + if self._debug_sleep > 0: + # if we are supposed to sleep, we sleep not longer than the read timeout + # (and then on the next call sleep again if there's time to sleep left) + sleep_for = min(self._debug_sleep, self._read_timeout) + self._debug_sleep -= sleep_for + time.sleep(sleep_for) + + if self._debug_sleep > 0: + # we slept the full read timeout, return an empty line + return "" + + # otherwise our left over timeout is the read timeout minus what we already + # slept for + timeout = self._read_timeout - sleep_for + + else: + # use the full read timeout as timeout + timeout = self._read_timeout + try: - line = self.outgoing.get(timeout=self._read_timeout) + # fetch a line from the queue, wait no longer than timeout + line = self.outgoing.get(timeout=timeout) self.outgoing.task_done() return line except Queue.Empty: + # queue empty? return empty line return "" def close(self): @@ -843,7 +865,8 @@ class CharCountingQueue(Queue.Queue): try: if not self._will_it_fit(item) and partial: space_left = self.maxsize - self._qsize() - item = item[:space_left] + if space_left: + item = item[:space_left] if not block: if not self._will_it_fit(item): From 4f1a55c2dfbd5e3a1c679143705c5a010b17bab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 16:25:49 +0200 Subject: [PATCH 07/26] Added AWOL debug command to virtual printer --- src/octoprint/plugins/virtual_printer/virtual.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/octoprint/plugins/virtual_printer/virtual.py b/src/octoprint/plugins/virtual_printer/virtual.py index 93ad5825..7f0b1457 100644 --- a/src/octoprint/plugins/virtual_printer/virtual.py +++ b/src/octoprint/plugins/virtual_printer/virtual.py @@ -82,6 +82,7 @@ class VirtualPrinter(object): self._incoming_lock = threading.RLock() + self._debug_awol = False self._debug_sleep = None self._sleepAfterNext = dict() self._sleepAfter = dict() @@ -403,6 +404,9 @@ class VirtualPrinter(object): self._debug_drop_connection = True elif data == "maxtemp_error": self._output("Error: MAXTEMP triggered!") + elif data == "go_awol": + self._output("// Going AWOL") + self._debug_awol = True else: try: sleep_match = VirtualPrinter.sleep_regex.match(data) @@ -782,6 +786,9 @@ class VirtualPrinter(object): pass def write(self, data): + if self._debug_awol: + return len(data) + if self._debug_drop_connection: self._logger.info("Debug drop of connection requested, raising SerialTimeoutException") raise SerialTimeoutException() @@ -801,6 +808,10 @@ class VirtualPrinter(object): raise SerialTimeoutException() def readline(self): + if self._debug_awol: + time.sleep(self._read_timeout) + return "" + if self._debug_drop_connection: raise SerialTimeoutException() From 4f11f6362b6377aab13fc8da3dcf04438c132164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 18:46:34 +0200 Subject: [PATCH 08/26] Saner defaults for max timeouts 10 max consecutive with 30s default communication timeout is a bit too long to wait --- src/octoprint/settings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 36305976..c7c5c993 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -86,9 +86,9 @@ default_settings = { "sdStatus": 1 }, "maxCommunicationTimeouts": { - "idle": 5, - "printing": 10, - "long": 10 + "idle": 2, + "printing": 5, + "long": 5 }, "maxWritePasses": 5, "additionalPorts": [], From 9eb1485e8459974d8f5d856b5c33f8195fa7c37f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 21 Jul 2016 18:46:54 +0200 Subject: [PATCH 09/26] Add max timeouts configuration to settings --- src/octoprint/server/api/settings.py | 8 +++++++- .../static/js/app/viewmodels/settings.js | 11 ++++++++++- .../dialogs/settings/serialconnection.jinja2 | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index eb00dd17..8c786e86 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -92,7 +92,10 @@ def getSettings(): "ignoreErrorsFromFirmware": s.getBoolean(["serial", "ignoreErrorsFromFirmware"]), "disconnectOnErrors": s.getBoolean(["serial", "disconnectOnErrors"]), "triggerOkForM29": s.getBoolean(["serial", "triggerOkForM29"]), - "supportResendsWithoutOk": s.getBoolean(["serial", "supportResendsWithoutOk"]) + "supportResendsWithoutOk": s.getBoolean(["serial", "supportResendsWithoutOk"]), + "maxTimeoutsIdle": s.getInt(["serial", "maxCommunicationTimeouts", "idle"]), + "maxTimeoutsPrinting": s.getInt(["serial", "maxCommunicationTimeouts", "printing"]), + "maxTimeoutsLong": s.getInt(["serial", "maxCommunicationTimeouts", "long"]) }, "folder": { "uploads": s.getBaseFolder("uploads"), @@ -240,6 +243,9 @@ def setSettings(): if "disconnectOnErrors" in data["serial"]: s.setBoolean(["serial", "disconnectOnErrors"], data["serial"]["disconnectOnErrors"]) if "triggerOkForM29" in data["serial"]: s.setBoolean(["serial", "triggerOkForM29"], data["serial"]["triggerOkForM29"]) if "supportResendsWithoutOk" in data["serial"]: s.setBoolean(["serial", "supportResendsWithoutOk"], data["serial"]["supportResendsWithoutOk"]) + if "maxTimeoutsIdle" in data["serial"]: s.setInt(["serial", "maxCommunicationTimeouts", "idle"], data["serial"]["maxTimeoutsIdle"]) + if "maxTimeoutsPrinting" in data["serial"]: s.setInt(["serial", "maxCommunicationTimeouts", "printing"], data["serial"]["maxTimeoutsPrinting"]) + if "maxTimeoutsLong" in data["serial"]: s.setInt(["serial", "maxCommunicationTimeouts", "long"], data["serial"]["maxTimeoutsLong"]) oldLog = s.getBoolean(["serial", "log"]) if "log" in data["serial"].keys(): s.setBoolean(["serial", "log"], data["serial"]["log"]) diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index d255a063..b0ff5195 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -144,6 +144,9 @@ $(function() { self.serial_disconnectOnErrors = ko.observable(undefined); self.serial_triggerOkForM29 = ko.observable(undefined); self.serial_supportResendsWithoutOk = ko.observable(undefined); + self.serial_maxTimeoutsIdle = ko.observable(undefined); + self.serial_maxTimeoutsPrinting = ko.observable(undefined); + self.serial_maxTimeoutsLong = ko.observable(undefined); self.folder_uploads = ko.observable(undefined); self.folder_timelapse = ko.observable(undefined); @@ -464,6 +467,9 @@ $(function() { self.serial_disconnectOnErrors(response.serial.disconnectOnErrors); self.serial_triggerOkForM29(response.serial.triggerOkForM29); self.serial_supportResendsWithoutOk(response.serial.supportResendsWithoutOk); + self.serial_maxTimeoutsIdle(response.serial.maxTimeoutsIdle); + self.serial_maxTimeoutsPrinting(response.serial.maxTimeoutsPrinting); + self.serial_maxTimeoutsLong(response.serial.maxTimeoutsLong); self.folder_uploads(response.folder.uploads); self.folder_timelapse(response.folder.timelapse); @@ -556,7 +562,10 @@ $(function() { "ignoreErrorsFromFirmware": self.serial_ignoreErrorsFromFirmware(), "disconnectOnErrors": self.serial_disconnectOnErrors(), "triggerOkForM29": self.serial_triggerOkForM29(), - "supportResendsWithoutOk": self.serial_supportResendsWithoutOk() + "supportResendsWithoutOk": self.serial_supportResendsWithoutOk(), + "maxTimeoutsIdle": self.serial_maxTimeoutsIdle(), + "maxTimeoutsPrinting": self.serial_maxTimeoutsPrinting(), + "maxTimeoutsLong": self.serial_maxTimeoutsLong() }, "folder": { "uploads": self.folder_uploads(), diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index 697188c1..f0bc919b 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -126,6 +126,24 @@ {{ _('Simulate an additional `ok` for resend requests') }} +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
From d7ae14776415e7e8a8e3fdffa48558d3d7af955c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 22 Jul 2016 09:46:58 +0200 Subject: [PATCH 10/26] Tickle printer on timeout when idle and blocked --- src/octoprint/util/comm.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index dfc92c50..c43603e8 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -1340,6 +1340,13 @@ class MachineCom(object): if self._sendCommand("M105", cmd_type="temperature"): self._clear_to_send.set() + elif self._clear_to_send.blocked(): + # timeout while idle and no oks left, let's try to tickle the printer + message = "Communication timeout while idle, trying to trigger response from printer." + self._logger.info(message) + self._log(message + " " + general_message) + self._clear_to_send.set() + def _track_heatup(self): self._heating = True self._heatupWaitStartTime = time.time() From 6e73c31a680262945d7a1def8052821ed8fc9802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 22 Jul 2016 10:50:48 +0200 Subject: [PATCH 11/26] Report correct printer state even after disconnecting Error string on close with error would get lost, that happens no longer --- src/octoprint/printer/standard.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py index 8a446036..e7e1b650 100644 --- a/src/octoprint/printer/standard.py +++ b/src/octoprint/printer/standard.py @@ -588,9 +588,12 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._currentZ = currentZ self._stateMonitor.set_current_z(self._currentZ) - def _setState(self, state): + def _setState(self, state, state_string=None): + if state_string is None: + state_string = self.get_state_string() + self._state = state - self._stateMonitor.set_state({"text": self.get_state_string(), "flags": self._getStateFlags()}) + self._stateMonitor.set_state({"text": state_string, "flags": self._getStateFlags()}) def _addLog(self, log): self._log.append(log) @@ -811,6 +814,9 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): """ oldState = self._state + if self._comm is not None: + state_string = self._comm.getStateString() + # forward relevant state changes to gcode manager if oldState == comm.MachineCom.STATE_PRINTING: with self._selectedFileLock: @@ -829,7 +835,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._setCurrentZ(None) self._setJobData(None, None, None) - self._setState(state) + self._setState(state, state_string=state_string) def on_comm_message(self, message): """ From 55d5df7f14f0d37ea2db2e4146083ca9a7b17db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 22 Jul 2016 10:51:38 +0200 Subject: [PATCH 12/26] Report CLOSED/CLOSED_WITH_ERROR states as "Offline" Provide error string for the latter case in state as well. --- src/octoprint/util/comm.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index c43603e8..e1339e71 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -396,11 +396,11 @@ class MachineCom(object): if self._state == self.STATE_PAUSED: return "Paused" if self._state == self.STATE_CLOSED: - return "Closed" + return "Offline" if self._state == self.STATE_ERROR: return "Error: %s" % (self.getErrorString()) if self._state == self.STATE_CLOSED_WITH_ERROR: - return "Error: %s" % (self.getErrorString()) + return "Offline: %s" % (self.getErrorString()) if self._state == self.STATE_TRANSFERING_FILE: return "Transfering file to SD" return "?%d?" % (self._state) @@ -1256,8 +1256,8 @@ class MachineCom(object): errorMsg = "See octoprint.log for details" self._log(errorMsg) self._errorValue = errorMsg - self._changeState(self.STATE_ERROR) eventManager().fire(Events.ERROR, {"error": self.getErrorString()}) + self.close(is_error=True) self._log("Connection closed, closing down monitor") def _handle_ok(self): @@ -1311,7 +1311,8 @@ class MachineCom(object): message = "No response from printer after {} consecutive communication timeouts, considering it dead.".format(consecutive_max + 1) self._logger.info(message) self._log(message + " " + general_message) - self._errorValue = "Too many consecutive timeouts" + self._errorValue = "Too many consecutive timeouts, printer still connected and alive?" + eventManager().fire(Events.ERROR, {"error": self._errorValue}) self.close(is_error=True) elif self._resendActive: From 75012472a223e273b38fbc24798ff7db6f99c860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Tue, 26 Jul 2016 11:18:10 +0200 Subject: [PATCH 13/26] Revert "Synchronize access to selected file" This reverts commit b5e19f067646e5a9873db1f9cf4583bf46c2d7e4. --- src/octoprint/printer/standard.py | 109 +++++++++++++----------------- 1 file changed, 48 insertions(+), 61 deletions(-) diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py index e7e1b650..6925ab53 100644 --- a/src/octoprint/printer/standard.py +++ b/src/octoprint/printer/standard.py @@ -71,7 +71,6 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._streamingFinishedCallback = None self._selectedFile = None - self._selectedFileLock = threading.RLock() self._timeEstimationData = None # comm @@ -112,8 +111,8 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): current_z=None ) - eventManager().subscribe(Events.METADATA_ANALYSIS_FINISHED, self._on_metadata_event) - eventManager().subscribe(Events.METADATA_STATISTICS_UPDATED, self._on_metadata_event) + eventManager().subscribe(Events.METADATA_ANALYSIS_FINISHED, self._on_event_MetadataAnalysisFinished) + eventManager().subscribe(Events.METADATA_STATISTICS_UPDATED, self._on_event_MetadataStatisticsUpdated) #~~ handling of PrinterCallbacks @@ -150,23 +149,25 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): #~~ callback from metadata analysis event - def _on_metadata_event(self, event, data): - with self._selectedFileLock: - if self._selectedFile and data and data.get("path", None) == self._selectedFile["filename"] \ - and data.get("storage", None) == FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL: - self._setJobData(self._selectedFile["filename"], - self._selectedFile["filesize"], - self._selectedFile["sd"]) + def _on_event_MetadataAnalysisFinished(self, event, data): + if self._selectedFile: + self._setJobData(self._selectedFile["filename"], + self._selectedFile["filesize"], + self._selectedFile["sd"]) + + def _on_event_MetadataStatisticsUpdated(self, event, data): + self._setJobData(self._selectedFile["filename"], + self._selectedFile["filesize"], + self._selectedFile["sd"]) #~~ progress plugin reporting def _reportPrintProgressToPlugins(self, progress): - with self._selectedFileLock: - if not progress or not self._selectedFile or not "sd" in self._selectedFile or not "filename" in self._selectedFile: - return + if not progress or not self._selectedFile or not "sd" in self._selectedFile or not "filename" in self._selectedFile: + return - storage = "sdcard" if self._selectedFile["sd"] else "local" - filename = self._selectedFile["filename"] + storage = "sdcard" if self._selectedFile["sd"] else "local" + filename = self._selectedFile["filename"] def call_plugins(storage, filename, progress): for plugin in self._progressPlugins: @@ -377,16 +378,13 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): """ if self._comm is None or not self._comm.isOperational() or self._comm.isPrinting(): return - - with self._selectedFileLock: - if self._selectedFile is None: - return - sd = self._selectedFile["sd"] + if self._selectedFile is None: + return rolling_window = None threshold = None countdown = None - if sd: + if self._selectedFile["sd"]: # we are interesting in a rolling window of roughly the last 15s, so the number of entries has to be derived # by that divided by the sd status polling interval rolling_window = 15 / settings().get(["serial", "timeout", "sdStatus"]) @@ -443,16 +441,15 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._setProgressData() # mark print as failure - with self._selectedFileLock: - if self._selectedFile is not None: - self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) - payload = { - "file": self._selectedFile["filename"], - "origin": FileDestinations.LOCAL - } - if self._selectedFile["sd"]: - payload["origin"] = FileDestinations.SDCARD - eventManager().fire(Events.PRINT_FAILED, payload) + if self._selectedFile is not None: + self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) + payload = { + "file": self._selectedFile["filename"], + "origin": FileDestinations.LOCAL + } + if self._selectedFile["sd"]: + payload["origin"] = FileDestinations.SDCARD + eventManager().fire(Events.PRINT_FAILED, payload) def get_state_string(self): """ @@ -638,13 +635,9 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): estimatedTotalPrintTime = self._estimateTotalPrintTime(progress, cleanedPrintTime) totalPrintTime = estimatedTotalPrintTime - statisticalTotalPrintTime = None - with self._selectedFileLock: - if self._selectedFile and "estimatedPrintTime" in self._selectedFile and self._selectedFile[ - "estimatedPrintTime"]: - statisticalTotalPrintTime = self._selectedFile["estimatedPrintTime"] - - if statisticalTotalPrintTime is not None and progress and cleanedPrintTime: + if self._selectedFile and "estimatedPrintTime" in self._selectedFile and self._selectedFile["estimatedPrintTime"]: + statisticalTotalPrintTime = self._selectedFile["estimatedPrintTime"] + if progress and cleanedPrintTime: if estimatedTotalPrintTime is None: totalPrintTime = statisticalTotalPrintTime else: @@ -701,16 +694,14 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): else: path_in_storage = self._fileManager.path_in_storage(FileDestinations.LOCAL, filename) path_on_disk = self._fileManager.path_on_disk(FileDestinations.LOCAL, filename) - with self._selectedFileLock: - self._selectedFile = { - "filename": path_in_storage, - "filesize": filesize, - "sd": sd, - "estimatedPrintTime": None - } + self._selectedFile = { + "filename": path_in_storage, + "filesize": filesize, + "sd": sd, + "estimatedPrintTime": None + } else: - with self._selectedFileLock: - self._selectedFile = None + self._selectedFile = None self._stateMonitor.set_job_data({ "file": { "name": None, @@ -753,13 +744,11 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): if "lastPrintTime" in fileData["statistics"] and printer_profile in fileData["statistics"]["lastPrintTime"]: lastPrintTime = fileData["statistics"]["lastPrintTime"][printer_profile] - with self._selectedFileLock: - if self._selectedFile is not None: - if averagePrintTime is not None: - self._selectedFile["estimatedPrintTime"] = averagePrintTime - elif estimatedPrintTime is not None: - # TODO apply factor which first needs to be tracked! - self._selectedFile["estimatedPrintTime"] = estimatedPrintTime + if averagePrintTime is not None: + self._selectedFile["estimatedPrintTime"] = averagePrintTime + elif estimatedPrintTime is not None: + # TODO apply factor which first needs to be tracked! + self._selectedFile["estimatedPrintTime"] = estimatedPrintTime self._stateMonitor.set_job_data({ "file": { @@ -819,10 +808,9 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): # forward relevant state changes to gcode manager if oldState == comm.MachineCom.STATE_PRINTING: - with self._selectedFileLock: - if self._selectedFile is not None: - if state == comm.MachineCom.STATE_CLOSED or state == comm.MachineCom.STATE_ERROR or state == comm.MachineCom.STATE_CLOSED_WITH_ERROR: - self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) + if self._selectedFile is not None: + if state == comm.MachineCom.STATE_CLOSED or state == comm.MachineCom.STATE_ERROR or state == comm.MachineCom.STATE_CLOSED_WITH_ERROR: + self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), False, self._printerProfileManager.get_current_or_default()["id"]) self._analysisQueue.resume() # printing done, put those cpu cycles to good use elif state == comm.MachineCom.STATE_PRINTING: self._analysisQueue.pause() # do not analyse files while printing @@ -880,9 +868,8 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self.start_print(pos=self._posAfterSelect) def on_comm_print_job_done(self): - with self._selectedFileLock: - self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), True, self._printerProfileManager.get_current_or_default()["id"]) - self._setProgressData(completion=1.0, filepos=self._selectedFile["filesize"], printTime=self._comm.getPrintTime(), printTimeLeft=0) + self._fileManager.log_print(FileDestinations.SDCARD if self._selectedFile["sd"] else FileDestinations.LOCAL, self._selectedFile["filename"], time.time(), self._comm.getPrintTime(), True, self._printerProfileManager.get_current_or_default()["id"]) + self._setProgressData(completion=1.0, filepos=self._selectedFile["filesize"], printTime=self._comm.getPrintTime(), printTimeLeft=0) self._stateMonitor.set_state({"text": self.get_state_string(), "flags": self._getStateFlags()}) self._fileManager.delete_recovery_data() From 1fd776153ca0f37c0362f62db66082ec2c8e269e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Tue, 26 Jul 2016 11:17:16 +0200 Subject: [PATCH 14/26] Another attempt at saner print time estimation Seriously though, this topic is driving me nuts... * track origin of print time left estimate * less draconian threshold for estimation helper for all prints, not just sd prints * sanity check estimated/statistical total print time, if not sane force "dumb" estimate * force "dumb" estimate if no other estimate is available after set percentage or print time --- src/octoprint/printer/standard.py | 149 ++++++++++++++++++++++++++---- src/octoprint/settings.py | 9 ++ 2 files changed, 138 insertions(+), 20 deletions(-) diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py index 6925ab53..727055d3 100644 --- a/src/octoprint/printer/standard.py +++ b/src/octoprint/printer/standard.py @@ -72,6 +72,10 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._selectedFile = None self._timeEstimationData = None + self._timeEstimationStatsWeighingUntil = settings().getFloat(["estimation", "printTime", "statsWeighingUntil"]) + self._timeEstimationValidityRange = settings().getFloat(["estimation", "printTime", "validityRange"]) + self._timeEstimationForceDumbFromPercent = settings().getFloat(["estimation", "printTime", "forceDumbFromPercent"]) + self._timeEstimationForceDumbAfterMin = settings().getFloat(["estimation", "printTime", "forceDumbAfterMin"]) # comm self._comm = None @@ -381,20 +385,21 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): if self._selectedFile is None: return + # we are happy if the average of the estimates stays within 60s of the prior one + threshold = settings().getFloat(["estimation", "printTime", "stableThreshold"]) rolling_window = None - threshold = None countdown = None + if self._selectedFile["sd"]: # we are interesting in a rolling window of roughly the last 15s, so the number of entries has to be derived # by that divided by the sd status polling interval rolling_window = 15 / settings().get(["serial", "timeout", "sdStatus"]) - # we are happy if the average of the estimates stays within 60s of the prior one - threshold = 60 - # we are happy when one rolling window has been stable countdown = rolling_window - self._timeEstimationData = TimeEstimationHelper(rolling_window=rolling_window, threshold=threshold, countdown=countdown) + self._timeEstimationData = TimeEstimationHelper(rolling_window=rolling_window, + threshold=threshold, + countdown=countdown) self._fileManager.delete_recovery_data() @@ -632,22 +637,12 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): printTime = self._comm.getPrintTime() cleanedPrintTime = self._comm.getCleanedPrintTime() - estimatedTotalPrintTime = self._estimateTotalPrintTime(progress, cleanedPrintTime) - totalPrintTime = estimatedTotalPrintTime - - if self._selectedFile and "estimatedPrintTime" in self._selectedFile and self._selectedFile["estimatedPrintTime"]: + statisticalTotalPrintTime = None + if self._selectedFile and "estimatedPrintTime" in self._selectedFile \ + and self._selectedFile["estimatedPrintTime"]: statisticalTotalPrintTime = self._selectedFile["estimatedPrintTime"] - if progress and cleanedPrintTime: - if estimatedTotalPrintTime is None: - totalPrintTime = statisticalTotalPrintTime - else: - if progress < 0.5: - sub_progress = progress * 2 - else: - sub_progress = 1.0 - totalPrintTime = (1 - sub_progress) * statisticalTotalPrintTime + sub_progress * estimatedTotalPrintTime - printTimeLeft = totalPrintTime - cleanedPrintTime if (totalPrintTime is not None and cleanedPrintTime is not None) else None + printTimeLeft, printTimeLeftOrigin = self._estimatePrintTimeLeft(progress, printTime, cleanedPrintTime, statisticalTotalPrintTime) if progress is not None: progress_int = int(progress * 100) @@ -658,7 +653,121 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): return dict(completion=progress * 100 if progress is not None else None, filepos=filepos, printTime=int(printTime) if printTime is not None else None, - printTimeLeft=int(printTimeLeft) if printTimeLeft is not None else None) + printTimeLeft=int(printTimeLeft) if printTimeLeft is not None else None, + printTimeLeftOrigin=printTimeLeftOrigin) + + def _estimatePrintTimeLeft(self, progress, printTime, cleanedPrintTime, statisticalTotalPrintTime): + """ + Tries to estimate the print time left for the print job + + This is somewhat horrible since accurate print time estimation is pretty much impossible to + achieve, considering that we basically have only two data points (current progress in file and + time needed for that so far - former prints or a file analysis might not have happened or simply + be completely impossible e.g. if the file is stored on the printer's SD card) and + hence can only do a linear estimation of a completely non-linear process. That's a recipe + for inaccurate predictions right there. Yay. + + Anyhow, here's how this implementation works. This method gets the current progress in the + printed file (percentage based on bytes read vs total bytes), the print time that elapsed, + the same print time with the heat up times subtracted (if possible) and if available also + some statistical total print time (former prints or a result from the GCODE analysis). + + 1. First get an "intelligent" estimate based on the :class:`~octoprint.printer.estimation.TimeEstimationHelper`. + That thing tries to detect if the estimation based on our progress and time needed for that becomes + stable over time through a rolling window and only returns a result once that appears to be the + case. + 2. If we have any statistical data (former prints or a result from the GCODE analysis) + but no intelligent estimate yet, we'll use that for the next step. Otherwise, up to a certain percentage + in the print we do a percentage based weighing of the statistical data and the intelligent + estimate - the closer to the beginning of the print, the more precedence for the statistical + data, the closer to the cut off point, the more precendence for the intelligent estimate. This + is our preliminary total print time. + 3. If the total print time is set, we do a sanity check for it. Based on the total print time + estimate and the time we already spent printing, we calculate at what percentage we SHOULD be + and compare that to the percentage at which we actually ARE. If it's too far off, our total + can't be trusted and we fall back on the dumb estimate. Same if the time we spent printing is + already higher than our total estimate. + 4. If we do NOT have a total print time estimate yet but we've been printing for longer than + a configured amount of minutes or are further in the file than a configured percentage, we + also use the dumb estimate for now. + + Yes, all this still produces horribly inaccurate results. But we have to do this live during the print and + hence can't produce to much computational overhead, we do not have any insight into the firmware implementation + with regards to planner setup and acceleration settings, we might not even have access to the printed file's + contents and such we need to find something that works "mostly" all of the time without costing too many + resources. Feel free to propose a better solution within the above limitations (and I mean that, this solution + here makes me unhappy). + + Args: + progress (float or None): Current percentage in the printed file + printTime (float or None): Print time elapsed so far + cleanedPrintTime (float or None): Print time elapsed minus the time needed for getting up to temperature + (if detectable). + statisticalTotalPrintTime (float or None): Total print time of past prints against same printer profile, + or estimated total print time from GCODE analysis. + + Returns: + (float or None) estimated print time left or None if not proper estimate could be made at all + """ + + if progress is None or printTime is None or cleanedPrintTime is None: + return None + + dumbTotalPrintTime = printTime / progress + estimatedTotalPrintTime = self._estimateTotalPrintTime(progress, cleanedPrintTime) + totalPrintTime = estimatedTotalPrintTime + + printTimeLeftOrigin = "estimate" + if statisticalTotalPrintTime is not None: + if estimatedTotalPrintTime is None: + # no estimate yet, we'll use the statistical total + totalPrintTime = statisticalTotalPrintTime + printTimeLeftOrigin = "stats" + + else: + if progress < self._timeEstimationStatsWeighingUntil: + # still inside weighing range, use part stats, part current estimate + sub_progress = progress * (1 / self._timeEstimationStatsWeighingUntil) + if sub_progress > 1.0: + sub_progress = 1.0 + printTimeLeftOrigin = "mixture" + else: + # use only the current estimate + sub_progress = 1.0 + printTimeLeftOrigin = "estimate" + + # combine + totalPrintTime = (1.0 - sub_progress) * statisticalTotalPrintTime \ + + sub_progress * estimatedTotalPrintTime + + printTimeLeft = None + if totalPrintTime is not None: + # sanity check current total print time estimate + assumed_progress = cleanedPrintTime / totalPrintTime + min_progress = progress - self._timeEstimationValidityRange + max_progress = progress + self._timeEstimationValidityRange + + if min_progress <= assumed_progress <= max_progress and totalPrintTime > cleanedPrintTime: + # appears sane, we'll use it + printTimeLeft = totalPrintTime - cleanedPrintTime + + else: + # too far from the actual progress or negative, + # we use the dumb print time instead + printTimeLeft = dumbTotalPrintTime - cleanedPrintTime + printTimeLeftOrigin = "linear" + + elif progress > self._timeEstimationForceDumbFromPercent or \ + cleanedPrintTime * 60 >= self._timeEstimationForceDumbAfterMin: + # more than x% or y min printed and still no real estimate, ok, we'll use the dumb variant :/ + printTimeLeft = dumbTotalPrintTime - cleanedPrintTime + printTimeLeftOrigin = "linear" + + if printTimeLeft < 0: + # shouldn't actually happen, but let's make sure + return None, None + + return printTimeLeft, printTimeLeftOrigin def _addTemperatureData(self, temp, bedTemp): currentTimeUtc = int(time.time()) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index c7c5c993..edea1e25 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -283,6 +283,15 @@ default_settings = { } } }, + "estimation": { + "printTime": { + "statsWeighingUntil": 0.5, + "validityRange": 0.15, + "forceDumbFromPercent": 0.3, + "forceDumbAfterMin": 30, + "stableThreshold": 60 + } + }, "devel": { "stylesheet": "css", "cache": { From 3585eb05a2844bbc642e84ff0b0f6d8c396b5669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 27 Jul 2016 10:13:11 +0200 Subject: [PATCH 15/26] Fix a tiny typo --- src/octoprint/static/js/app/dataupdater.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/octoprint/static/js/app/dataupdater.js b/src/octoprint/static/js/app/dataupdater.js index 8ffb4c1f..061dbae5 100644 --- a/src/octoprint/static/js/app/dataupdater.js +++ b/src/octoprint/static/js/app/dataupdater.js @@ -279,7 +279,7 @@ function DataUpdater(allViewModels) { } else if (type == "Error") { new PNotify({ title: gettext("Unhandled communication error"), - text: _.sprintf(gettext("The was an unhandled error while talking to the printer. Due to that OctoPrint disconnected. Error: %(error)s"), payload), + text: _.sprintf(gettext("There was an unhandled error while talking to the printer. Due to that OctoPrint disconnected. Error: %(error)s"), payload), type: "error", hide: false }); From ec8427cbb8de779cf4a5838baa26d4129f9e9a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 27 Jul 2016 14:46:00 +0200 Subject: [PATCH 16/26] Fix a bug causing the "Streaming ..." text to vanish on transfer to SD --- src/octoprint/server/api/files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/octoprint/server/api/files.py b/src/octoprint/server/api/files.py index 2f7ceac2..23b75120 100644 --- a/src/octoprint/server/api/files.py +++ b/src/octoprint/server/api/files.py @@ -220,7 +220,7 @@ def uploadGcodeFile(target): done = True else: filename = fileProcessingFinished(added_file, fileManager.path_on_disk(FileDestinations.LOCAL, added_file), target) - done = True + done = not sd if userdata is not None: # upload included userdata, add this now to the metadata From eb822c83a338e9c113ecdcf33bde494bfe534ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 27 Jul 2016 15:04:07 +0200 Subject: [PATCH 17/26] Add LESS/CSS for (centered) text in progress bars & knockout helper --- src/octoprint/static/css/octoprint.css | 2 +- src/octoprint/static/js/app/main.js | 38 +++++++++++++++++ src/octoprint/static/less/octoprint.less | 52 ++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) diff --git a/src/octoprint/static/css/octoprint.css b/src/octoprint/static/css/octoprint.css index dffcdc17..5d4e5199 100644 --- a/src/octoprint/static/css/octoprint.css +++ b/src/octoprint/static/css/octoprint.css @@ -1 +1 @@ -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn.active,.btn.disabled,.btn:active,.btn:focus,.btn:hover,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn.active,.btn:active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:focus,.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class*=" icon-"],.btn-large [class^=icon-]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class*=" icon-"],.btn-small [class^=icon-]{margin-top:0}.btn-mini [class*=" icon-"],.btn-mini [class^=icon-]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary.active,.btn-primary:active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning.active,.btn-warning:active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger.active,.btn-danger:active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:focus,.btn-success:hover,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success.active,.btn-success:active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:focus,.btn-info:hover,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info.active,.btn-info:active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:focus,.btn-inverse:hover,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse.active,.btn-inverse:active{background-color:#080808 \9}button.btn,input[type=submit].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type=submit].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type=submit].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type=submit].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:focus,.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover{color:#333;text-decoration:none}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.nowrap{white-space:nowrap}.actioncol{text-align:center;white-space:nowrap}.actioncol a{text-decoration:none;color:#000}.actioncol a.disabled{color:#ccc;cursor:default}#navbar .navbar-inner{background-color:#ebebeb;background-image:-moz-linear-gradient(top,#fff,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#ccc));background-image:-webkit-linear-gradient(top,#fff,#ccc);background-image:-o-linear-gradient(top,#fff,#ccc);background-image:linear-gradient(to bottom,#fff,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffcccccc', GradientType=0)}#navbar .navbar-inner .brand,#navbar .navbar-inner .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner .brand .caret,#navbar .navbar-inner .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner .brand:focus .caret,#navbar .navbar-inner .brand:hover .caret,#navbar .navbar-inner .nav>li>a:focus .caret,#navbar .navbar-inner .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open>.dropdown-toggle{background-color:#e0e0e0;background-image:-moz-linear-gradient(top,#ccc,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(top,#ccc,#fff);background-image:-o-linear-gradient(top,#ccc,#fff);background-image:linear-gradient(to bottom,#ccc,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcccccc', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.transparent{background-color:rgba(235,235,235,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(204,204,204,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99cccccc', GradientType=0)}#navbar .navbar-inner.transparent .brand,#navbar .navbar-inner.transparent .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner.transparent .brand .caret,#navbar .navbar-inner.transparent .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner.transparent .brand:focus .caret,#navbar .navbar-inner.transparent .brand:hover .caret,#navbar .navbar-inner.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.transparent .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(224,224,224,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(204,204,204,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99cccccc', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner.red{background-color:#bb645f;background-image:-moz-linear-gradient(top,#e28e8a,#802420);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e28e8a),to(#802420));background-image:-webkit-linear-gradient(top,#e28e8a,#802420);background-image:-o-linear-gradient(top,#e28e8a,#802420);background-image:linear-gradient(to bottom,#e28e8a,#802420);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe28e8a', endColorstr='#ff802420', GradientType=0)}#navbar .navbar-inner.red .brand,#navbar .navbar-inner.red .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red .brand .caret,#navbar .navbar-inner.red .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red .brand:focus .caret,#navbar .navbar-inner.red .brand:hover .caret,#navbar .navbar-inner.red .nav>li>a:focus .caret,#navbar .navbar-inner.red .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open>.dropdown-toggle{background-color:#a74f4a;background-image:-moz-linear-gradient(top,#802420,#e28e8a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#802420),to(#e28e8a));background-image:-webkit-linear-gradient(top,#802420,#e28e8a);background-image:-o-linear-gradient(top,#802420,#e28e8a);background-image:linear-gradient(to bottom,#802420,#e28e8a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff802420', endColorstr='#ffe28e8a', GradientType=0)}#navbar .navbar-inner.red.transparent{background-color:rgba(187,100,95,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(226,142,138,.6)),to(rgba(128,36,32,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99e28e8a', endColorstr='#99802420', GradientType=0)}#navbar .navbar-inner.red.transparent .brand,#navbar .navbar-inner.red.transparent .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red.transparent .brand .caret,#navbar .navbar-inner.red.transparent .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red.transparent .brand:focus .caret,#navbar .navbar-inner.red.transparent .brand:hover .caret,#navbar .navbar-inner.red.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.red.transparent .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(167,79,74,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(128,36,32,.6)),to(rgba(226,142,138,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99802420', endColorstr='#99e28e8a', GradientType=0)}#navbar .navbar-inner.orange{background-color:#e39665;background-image:-moz-linear-gradient(top,#f9c3a0,#c2530c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9c3a0),to(#c2530c));background-image:-webkit-linear-gradient(top,#f9c3a0,#c2530c);background-image:-o-linear-gradient(top,#f9c3a0,#c2530c);background-image:linear-gradient(to bottom,#f9c3a0,#c2530c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9c3a0', endColorstr='#ffc2530c', GradientType=0)}#navbar .navbar-inner.orange .brand,#navbar .navbar-inner.orange .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange .brand .caret,#navbar .navbar-inner.orange .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange .brand:focus .caret,#navbar .navbar-inner.orange .brand:hover .caret,#navbar .navbar-inner.orange .nav>li>a:focus .caret,#navbar .navbar-inner.orange .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open>.dropdown-toggle{background-color:#d88047;background-image:-moz-linear-gradient(top,#c2530c,#f9c3a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2530c),to(#f9c3a0));background-image:-webkit-linear-gradient(top,#c2530c,#f9c3a0);background-image:-o-linear-gradient(top,#c2530c,#f9c3a0);background-image:linear-gradient(to bottom,#c2530c,#f9c3a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2530c', endColorstr='#fff9c3a0', GradientType=0)}#navbar .navbar-inner.orange.transparent{background-color:rgba(227,150,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,195,160,.6)),to(rgba(194,83,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9c3a0', endColorstr='#99c2530c', GradientType=0)}#navbar .navbar-inner.orange.transparent .brand,#navbar .navbar-inner.orange.transparent .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange.transparent .brand .caret,#navbar .navbar-inner.orange.transparent .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange.transparent .brand:focus .caret,#navbar .navbar-inner.orange.transparent .brand:hover .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,128,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,83,12,.6)),to(rgba(249,195,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2530c', endColorstr='#99f9c3a0', GradientType=0)}#navbar .navbar-inner.yellow{background-color:#e3d765;background-image:-moz-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f0a0),to(#c2b00c));background-image:-webkit-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-o-linear-gradient(top,#f9f0a0,#c2b00c);background-image:linear-gradient(to bottom,#f9f0a0,#c2b00c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f0a0', endColorstr='#ffc2b00c', GradientType=0)}#navbar .navbar-inner.yellow .brand,#navbar .navbar-inner.yellow .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow .brand .caret,#navbar .navbar-inner.yellow .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow .brand:focus .caret,#navbar .navbar-inner.yellow .brand:hover .caret,#navbar .navbar-inner.yellow .nav>li>a:focus .caret,#navbar .navbar-inner.yellow .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open>.dropdown-toggle{background-color:#d8ca47;background-image:-moz-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2b00c),to(#f9f0a0));background-image:-webkit-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-o-linear-gradient(top,#c2b00c,#f9f0a0);background-image:linear-gradient(to bottom,#c2b00c,#f9f0a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2b00c', endColorstr='#fff9f0a0', GradientType=0)}#navbar .navbar-inner.yellow.transparent{background-color:rgba(227,215,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,240,160,.6)),to(rgba(194,176,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9f0a0', endColorstr='#99c2b00c', GradientType=0)}#navbar .navbar-inner.yellow.transparent .brand,#navbar .navbar-inner.yellow.transparent .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow.transparent .brand .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow.transparent .brand:focus .caret,#navbar .navbar-inner.yellow.transparent .brand:hover .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,202,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,176,12,.6)),to(rgba(249,240,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2b00c', endColorstr='#99f9f0a0', GradientType=0)}#navbar .navbar-inner.green{background-color:#98f064;background-image:-moz-linear-gradient(top,#c8ffa7,#50da00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8ffa7),to(#50da00));background-image:-webkit-linear-gradient(top,#c8ffa7,#50da00);background-image:-o-linear-gradient(top,#c8ffa7,#50da00);background-image:linear-gradient(to bottom,#c8ffa7,#50da00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8ffa7', endColorstr='#ff50da00', GradientType=0)}#navbar .navbar-inner.green .brand,#navbar .navbar-inner.green .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green .brand .caret,#navbar .navbar-inner.green .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green .brand:focus .caret,#navbar .navbar-inner.green .brand:hover .caret,#navbar .navbar-inner.green .nav>li>a:focus .caret,#navbar .navbar-inner.green .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open>.dropdown-toggle{background-color:#80e943;background-image:-moz-linear-gradient(top,#50da00,#c8ffa7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#50da00),to(#c8ffa7));background-image:-webkit-linear-gradient(top,#50da00,#c8ffa7);background-image:-o-linear-gradient(top,#50da00,#c8ffa7);background-image:linear-gradient(to bottom,#50da00,#c8ffa7);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff50da00', endColorstr='#ffc8ffa7', GradientType=0)}#navbar .navbar-inner.green.transparent{background-color:rgba(152,240,100,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,255,167,.6)),to(rgba(80,218,0,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8ffa7', endColorstr='#9950da00', GradientType=0)}#navbar .navbar-inner.green.transparent .brand,#navbar .navbar-inner.green.transparent .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green.transparent .brand .caret,#navbar .navbar-inner.green.transparent .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green.transparent .brand:focus .caret,#navbar .navbar-inner.green.transparent .brand:hover .caret,#navbar .navbar-inner.green.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.green.transparent .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,233,67,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,218,0,.6)),to(rgba(200,255,167,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9950da00', endColorstr='#99c8ffa7', GradientType=0)}#navbar .navbar-inner.blue{background-color:#2e63cc;background-image:-moz-linear-gradient(top,#4d88ff,#002b80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4d88ff),to(#002b80));background-image:-webkit-linear-gradient(top,#4d88ff,#002b80);background-image:-o-linear-gradient(top,#4d88ff,#002b80);background-image:linear-gradient(to bottom,#4d88ff,#002b80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d88ff', endColorstr='#ff002b80', GradientType=0)}#navbar .navbar-inner.blue .brand,#navbar .navbar-inner.blue .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue .brand .caret,#navbar .navbar-inner.blue .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue .brand:focus .caret,#navbar .navbar-inner.blue .brand:hover .caret,#navbar .navbar-inner.blue .nav>li>a:focus .caret,#navbar .navbar-inner.blue .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open>.dropdown-toggle{background-color:#1f50b3;background-image:-moz-linear-gradient(top,#002b80,#4d88ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#002b80),to(#4d88ff));background-image:-webkit-linear-gradient(top,#002b80,#4d88ff);background-image:-o-linear-gradient(top,#002b80,#4d88ff);background-image:linear-gradient(to bottom,#002b80,#4d88ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff002b80', endColorstr='#ff4d88ff', GradientType=0)}#navbar .navbar-inner.blue.transparent{background-color:rgba(46,99,204,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(77,136,255,.6)),to(rgba(0,43,128,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#994d88ff', endColorstr='#99002b80', GradientType=0)}#navbar .navbar-inner.blue.transparent .brand,#navbar .navbar-inner.blue.transparent .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue.transparent .brand .caret,#navbar .navbar-inner.blue.transparent .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue.transparent .brand:focus .caret,#navbar .navbar-inner.blue.transparent .brand:hover .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(31,80,179,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(0,43,128,.6)),to(rgba(77,136,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99002b80', endColorstr='#994d88ff', GradientType=0)}#navbar .navbar-inner.violet{background-color:#9864f0;background-image:-moz-linear-gradient(top,#c8a7ff,#5000da);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8a7ff),to(#5000da));background-image:-webkit-linear-gradient(top,#c8a7ff,#5000da);background-image:-o-linear-gradient(top,#c8a7ff,#5000da);background-image:linear-gradient(to bottom,#c8a7ff,#5000da);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8a7ff', endColorstr='#ff5000da', GradientType=0)}#navbar .navbar-inner.violet .brand,#navbar .navbar-inner.violet .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet .brand .caret,#navbar .navbar-inner.violet .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet .brand:focus .caret,#navbar .navbar-inner.violet .brand:hover .caret,#navbar .navbar-inner.violet .nav>li>a:focus .caret,#navbar .navbar-inner.violet .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open>.dropdown-toggle{background-color:#8043e9;background-image:-moz-linear-gradient(top,#5000da,#c8a7ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5000da),to(#c8a7ff));background-image:-webkit-linear-gradient(top,#5000da,#c8a7ff);background-image:-o-linear-gradient(top,#5000da,#c8a7ff);background-image:linear-gradient(to bottom,#5000da,#c8a7ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5000da', endColorstr='#ffc8a7ff', GradientType=0)}#navbar .navbar-inner.violet.transparent{background-color:rgba(152,100,240,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,167,255,.6)),to(rgba(80,0,218,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8a7ff', endColorstr='#995000da', GradientType=0)}#navbar .navbar-inner.violet.transparent .brand,#navbar .navbar-inner.violet.transparent .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet.transparent .brand .caret,#navbar .navbar-inner.violet.transparent .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet.transparent .brand:focus .caret,#navbar .navbar-inner.violet.transparent .brand:hover .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,67,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,0,218,.6)),to(rgba(200,167,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#995000da', endColorstr='#99c8a7ff', GradientType=0)}#navbar .navbar-inner.black{background-color:#4f4f4f;background-image:-moz-linear-gradient(top,#787878,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#787878),to(#121212));background-image:-webkit-linear-gradient(top,#787878,#121212);background-image:-o-linear-gradient(top,#787878,#121212);background-image:linear-gradient(to bottom,#787878,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff787878', endColorstr='#ff121212', GradientType=0)}#navbar .navbar-inner.black .brand,#navbar .navbar-inner.black .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black .brand .caret,#navbar .navbar-inner.black .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black .brand:focus .caret,#navbar .navbar-inner.black .brand:hover .caret,#navbar .navbar-inner.black .nav>li>a:focus .caret,#navbar .navbar-inner.black .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open>.dropdown-toggle{background-color:#3b3b3b;background-image:-moz-linear-gradient(top,#121212,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#787878));background-image:-webkit-linear-gradient(top,#121212,#787878);background-image:-o-linear-gradient(top,#121212,#787878);background-image:linear-gradient(to bottom,#121212,#787878);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212', endColorstr='#ff787878', GradientType=0)}#navbar .navbar-inner.black.transparent{background-color:rgba(79,79,79,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(120,120,120,.6)),to(rgba(18,18,18,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99787878', endColorstr='#99121212', GradientType=0)}#navbar .navbar-inner.black.transparent .brand,#navbar .navbar-inner.black.transparent .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black.transparent .brand .caret,#navbar .navbar-inner.black.transparent .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black.transparent .brand:focus .caret,#navbar .navbar-inner.black.transparent .brand:hover .caret,#navbar .navbar-inner.black.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.black.transparent .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(59,59,59,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(18,18,18,.6)),to(rgba(120,120,120,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99121212', endColorstr='#99787878', GradientType=0)}#navbar .navbar-inner.white{background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#fff,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#fff,#c8c8c8);background-image:-o-linear-gradient(top,#fff,#c8c8c8);background-image:linear-gradient(to bottom,#fff,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffc8c8c8', GradientType=0)}#navbar .navbar-inner.white .brand,#navbar .navbar-inner.white .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white .brand .caret,#navbar .navbar-inner.white .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white .brand:focus .caret,#navbar .navbar-inner.white .brand:hover .caret,#navbar .navbar-inner.white .nav>li>a:focus .caret,#navbar .navbar-inner.white .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open>.dropdown-toggle{background-color:#dedede;background-image:-moz-linear-gradient(top,#c8c8c8,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8c8c8),to(#fff));background-image:-webkit-linear-gradient(top,#c8c8c8,#fff);background-image:-o-linear-gradient(top,#c8c8c8,#fff);background-image:linear-gradient(to bottom,#c8c8c8,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8c8c8', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.white.transparent{background-color:rgba(233,233,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(200,200,200,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99c8c8c8', GradientType=0)}#navbar .navbar-inner.white.transparent .brand,#navbar .navbar-inner.white.transparent .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white.transparent .brand .caret,#navbar .navbar-inner.white.transparent .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white.transparent .brand:focus .caret,#navbar .navbar-inner.white.transparent .brand:hover .caret,#navbar .navbar-inner.white.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.white.transparent .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(222,222,222,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,200,200,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8c8c8', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner .brand span{background-size:20px 20px;background-position:left center;padding-left:24px;background-repeat:no-repeat}.octoprint-container{margin-top:20px}.octoprint-container .tab-content{padding:9px 15px;border-left:1px solid #DDD;border-right:1px solid #DDD;border-bottom:1px solid #DDD;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.octoprint-container .nav{margin-bottom:0}.octoprint-container .tab-content h1{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #E5E5E5;font-weight:400}.octoprint-container .accordion-heading .accordion-heading-button{float:right}.octoprint-container .accordion-heading .accordion-heading-button a{display:inline-block;padding:8px 15px;font-size:14px;line-height:20px;color:#000;text-decoration:none;background:0 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.octoprint-container .accordion-heading a.accordion-toggle{display:inline-block}.octoprint-container .accordion-heading [class*=" icon-"],.octoprint-container .accordion-heading [class^=icon-]{color:#000}.print-control .btn{padding-left:4px;padding-right:4px}.upload-buttons .btn{margin-right:0}table{table-layout:fixed}table .popover-title{text-overflow:ellipsis;word-break:break-all}table td,table th{overflow:hidden}table td.gcode_files_name,table th.gcode_files_name{text-overflow:ellipsis;text-align:left;white-space:nowrap}table td.gcode_files_action,table th.gcode_files_action{width:90px;text-align:center;white-space:nowrap}table td.gcode_files_action a,table th.gcode_files_action a{text-decoration:none;color:#000}table td.gcode_files_action a.disabled,table th.gcode_files_action a.disabled{color:#ccc;cursor:default}table td.timelapse_files_name,table td.timelapse_unrendered_name,table th.timelapse_files_name,table th.timelapse_unrendered_name{text-overflow:ellipsis;text-align:left}table td.timelapse_files_size,table td.timelapse_unrendered_size,table th.timelapse_files_size,table th.timelapse_unrendered_size{text-align:right;width:55px}table td.timelapse_unrendered_count,table th.timelapse_unrendered_count{text-align:right;width:45px}table td.timelapse_files_action,table td.timelapse_unrendered_action,table th.timelapse_files_action,table th.timelapse_unrendered_action{width:45px;text-align:center;white-space:nowrap}table td.timelapse_files_action a,table td.timelapse_unrendered_action a,table th.timelapse_files_action a,table th.timelapse_unrendered_action a{text-decoration:none;color:#000}table td.timelapse_files_action a.disabled,table td.timelapse_unrendered_action a.disabled,table th.timelapse_files_action a.disabled,table th.timelapse_unrendered_action a.disabled{color:#ccc;cursor:default}table td.settings_users_name,table th.settings_users_name{text-overflow:ellipsis;text-align:left}table td.settings_users_active,table td.settings_users_admin,table th.settings_users_active,table th.settings_users_admin{text-align:center;width:55px}table td.settings_users_actions,table th.settings_users_actions{width:60px;text-align:center;white-space:nowrap}table td.settings_users_actions a,table th.settings_users_actions a{text-decoration:none;color:#000}table td.settings_users_actions a.disabled,table th.settings_users_actions a.disabled{color:#ccc;cursor:default}table td.settings_logs_name,table th.settings_logs_name{text-overflow:ellipsis;text-align:left}table td.settings_logs_size,table th.settings_logs_size{text-align:right;width:70px}table td.settings_logs_date,table th.settings_logs_date{text-align:left;width:130px}table td.settings_logs_action,table th.settings_logs_action{width:70px;text-align:center;white-space:nowrap}table td.settings_logs_action a,table th.settings_logs_action a{text-decoration:none;color:#000}table td.settings_logs_action a.disabled,table th.settings_logs_action a.disabled{color:#ccc;cursor:default}table td.settings_printerProfiles_profiles_name,table th.settings_printerProfiles_profiles_name{text-overflow:ellipsis;text-align:left}table td.settings_printerProfiles_profiles_model,table th.settings_printerProfiles_profiles_model{text-align:left;width:250px}table td.settings_printerProfiles_profiles_action,table th.settings_printerProfiles_profiles_action{width:80px;text-align:center;white-space:nowrap}table td.settings_printerProfiles_profiles_action a,table th.settings_printerProfiles_profiles_action a{text-decoration:none;color:#000}table td.settings_printerProfiles_profiles_action a.disabled,table th.settings_printerProfiles_profiles_action a.disabled{color:#ccc;cursor:default}#temperature-graph{height:350px;width:100%;background-image:url(../img/graph-background.png);background-position:center;background-repeat:no-repeat}.tab-content,.tab-pane{overflow:visible}.tempInput{width:50px}#speed_fill,#speed_innerWall,#speed_outerWall,#speed_support,#temp_newBedTemp,#temp_newTemp,#webcam_timelapse_fps,#webcam_timelapse_interval,#webcam_timelapse_postRoll{text-align:right}ul.dropdown-menu li a{cursor:pointer}#connection_baudrates,#connection_ports,#connection_printers{width:100%}#offline_overlay,#reloadui_overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:none}#offline_overlay{z-index:10002}#reloadui_overlay{z-index:10001}#offline_overlay_background,#reloadui_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#offline_overlay_wrapper,#reloadui_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#offline_overlay_wrapper .container,#reloadui_overlay_wrapper .container{margin:auto}#webcam_container{width:100%;position:relative;outline:0}#webcam_container .flipH{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1)}#webcam_container .flipV{-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1)}#webcam_container .flipH.flipV{-webkit-transform:scaleX(-1) scaleY(-1);-moz-transform:scaleX(-1) scaleY(-1);-ms-transform:scaleX(-1) scaleY(-1)}#webcam_container .rotate90{transform:rotate(-90deg)}#webcam_container .keycontrol_overlay{position:absolute;left:10px;right:10px;bottom:10px;background:rgba(0,0,0,.5);font-size:85%;color:#fff;padding:0}#webcam_container .keycontrol_overlay kbd{border:1px solid #eee;border-radius:3px;margin-left:2px;margin-right:2px;font-size:90%;padding:2px;min-width:1em}#webcam_container .keycontrol_overlay .keycontrol_overlay_heading{position:relative;padding:10px;font-weight:700}#webcam_container .keycontrol_overlay .keycontrol_overlay_column{position:relative;width:45%;padding:10px;float:left}#files .gcode_files{padding-right:7px}#files .gcode_files .entry{padding:5px;line-height:20px;border-bottom:1px solid #ddd;position:relative}#files .gcode_files .entry:hover{background-color:#f5f5f5}#files .gcode_files .entry .title{text-overflow:ellipsis;word-break:break-all}#files .gcode_files .entry .additionalInfo,#files .gcode_files .entry .size,#files .gcode_files .entry .uploaded{font-size:85%;color:#999}#files .gcode_files .entry .action-buttons{position:absolute;bottom:5px;right:5px}#files .gcode_files .entry .additionalInfo{padding-bottom:22px}@keyframes highlightframes{0%{background:#ff0}100%{background:0 0}}#files .gcode_files .entry.highlight{animation:highlightframes 2s}#files .upload-buttons{margin-top:10px}#files .form-search{text-align:center;margin-bottom:5px!important}#control{overflow:hidden}#control .jog-panel{float:left;margin-right:19px}#control h1{text-align:left}#control .jog-panel>div{text-align:center}#control .jog-panel>div.distance{text-align:left}#control .jog-panel .slider{margin-bottom:10px}#control .box{width:30px;height:30px;margin-right:10px;margin-bottom:10px;padding-left:8px}#control .control-box{display:block;height:30px;margin-bottom:10px}#control .btn-group{margin-bottom:10px}#control .btn-group.distance>.btn{width:43px;padding:3px 0;height:30px}#control .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#control .custom_section h1{cursor:pointer}#control .custom_section_horizontal>.custom_control{display:inline-block}#control .custom_section_vertical>.custom_control{display:block}#control .custom_control .slider{margin-left:10px;margin-right:10px;margin-bottom:2px}#gcode .progress{width:582px}#gcode .progress .bar{-webkit-transition:width 0s linear;-moz-transition:width 0s linear;-o-transition:width 0s linear;transition:width 0s linear}#gcode .canvas_container{position:relative}#gcode #gcode_layer_slider{position:absolute;right:0;top:0;height:568px;float:right}#gcode #gcode_layer_slider .slider-handle{width:14px;height:14px;margin-left:-3px;margin-top:-7px}#gcode #gcode_command_slider .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#term .terminal{margin-bottom:30px}#term .terminal #terminal-output,#term .terminal #terminal-output-lowfi{min-height:340px;margin-bottom:5px}#term #terminal-sendpanel{text-align:right}#settings_dialog .modal-body #settings_dialog_menu{margin-left:0}#settings_dialog .aboutlink{float:left}#settings_appearance_managelanguagesdialog_emptylist{overflow:hidden;width:100%;height:300px;text-align:center;display:table}#settings_appearance_managelanguagesdialog_emptylist div{display:table-cell;vertical-align:middle}.footer ul{margin:0}.footer ul li{display:inline;margin-left:1em;font-size:85%}.footer ul li:first-child{margin-left:0}.footer ul li a{color:#555}.ui-pnotify .alert a{color:#c09853}.ui-pnotify .alert-danger a,.ui-pnotify .alert-error a{color:#b94a48}.ui-pnotify .alert-success a{color:#468847}.ui-pnotify .alert-info a{color:#3a87ad}.pnotify_additional_info .pnotify_more{font-size:85%}.text-right{text-align:right}.overflow_visible{overflow:visible!important}.border_box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none}textarea.block{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#drop_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;display:none}#drop_overlay.in{display:block}#drop_overlay #drop_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#drop_overlay #drop_overlay_wrapper #drop,#drop_overlay #drop_overlay_wrapper #drop_background{position:absolute;top:0;left:0;margin-left:0;width:100%}#drop_overlay #drop_overlay_wrapper #drop_locally,#drop_overlay #drop_overlay_wrapper #drop_locally_background{position:absolute;top:0;left:50%;margin-left:-50%;width:50%;border-right:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper #drop_sd,#drop_overlay #drop_overlay_wrapper #drop_sd_background{position:absolute;top:0;left:50%;margin-left:0;width:50%;border-left:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper .dropzone{height:100%;z-index:10001;color:#fff;font-size:30px}#drop_overlay #drop_overlay_wrapper .dropzone i{font-size:50px}#drop_overlay #drop_overlay_wrapper .dropzone .text{display:block;text-align:center;line-height:40px;position:absolute;width:100%;bottom:5%;filter:alpha(opacity=100);-moz-opacity:1;-khtml-opacity:1;opacity:1}#drop_overlay #drop_overlay_wrapper .dropzone_background{width:50%;height:100%;background-color:#000;filter:alpha(opacity=25);-moz-opacity:.25;-khtml-opacity:.25;opacity:.25}#drop_overlay #drop_overlay_wrapper .dropzone_background.hover{background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper .dropzone_background.fade{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;opacity:1}.icon-sd-black-14{background:url(../img/icon-sd-black-14.png) 0 3px no-repeat;width:11px;height:17px;display:inline-block!important}.center{float:none;margin-left:auto;margin-right:auto}.ui-pnotify a{text-decoration:underline}.slider .slider-selection{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.slider .slider-selection.active,.slider .slider-selection.disabled,.slider .slider-selection:active,.slider .slider-selection:focus,.slider .slider-selection:hover,.slider .slider-selection[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.slider .slider-selection.active,.slider .slider-selection:active{background-color:#039 \9}.slider.slider-disabled .slider-selection{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-track{background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.slider.slider-disabled .slider-track{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle{display:inline-block;*display:inline;*zoom:1;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);padding:0;margin-bottom:0;opacity:1;filter:alpha(opacity=100)}.slider .slider-handle.active,.slider .slider-handle.disabled,.slider .slider-handle:active,.slider .slider-handle:focus,.slider .slider-handle:hover,.slider .slider-handle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.slider .slider-handle.active,.slider .slider-handle:active{background-color:#ccc \9}.slider .slider-handle:first-child{*margin-left:0}.slider .slider-handle:focus,.slider .slider-handle:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.slider .slider-handle:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.slider .slider-handle.active,.slider .slider-handle:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.slider .slider-handle.disabled,.slider .slider-handle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle.hide{display:none}.slider .slider-handle.round{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.modal.large{width:975px;margin-left:-487px}.full-sized-box{position:absolute;bottom:0;left:0;right:0;top:0;padding:15px}.full-sized-box .row-fluid{height:100%}@media (max-width:979px){.full-sized-box{position:static}}:root .full-sized-box,_::-webkit-full-page-media,_:future{position:static}.scrollable{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.input-append .add-on.add-on-limited,.input-prepend .add-on.add-on-limited{overflow-x:hidden;text-overflow:ellipsis;width:inherit}.control-group.error .input-append .fileinput-button,.control-group.error .input-prepend .fileinput-button{border-color:#b94a48}input[type=number]{text-align:right} \ No newline at end of file +.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn.active,.btn.disabled,.btn:active,.btn:focus,.btn:hover,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn.active,.btn:active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:focus,.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class*=" icon-"],.btn-large [class^=icon-]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class*=" icon-"],.btn-small [class^=icon-]{margin-top:0}.btn-mini [class*=" icon-"],.btn-mini [class^=icon-]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary.active,.btn-primary:active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning.active,.btn-warning:active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger.active,.btn-danger:active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:focus,.btn-success:hover,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success.active,.btn-success:active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:focus,.btn-info:hover,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info.active,.btn-info:active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:focus,.btn-inverse:hover,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse.active,.btn-inverse:active{background-color:#080808 \9}button.btn,input[type=submit].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type=submit].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type=submit].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type=submit].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:focus,.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover{color:#333;text-decoration:none}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.nowrap{white-space:nowrap}.actioncol{text-align:center;white-space:nowrap}.actioncol a{text-decoration:none;color:#000}.actioncol a.disabled{color:#ccc;cursor:default}#navbar .navbar-inner{background-color:#ebebeb;background-image:-moz-linear-gradient(top,#fff,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#ccc));background-image:-webkit-linear-gradient(top,#fff,#ccc);background-image:-o-linear-gradient(top,#fff,#ccc);background-image:linear-gradient(to bottom,#fff,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffcccccc', GradientType=0)}#navbar .navbar-inner .brand,#navbar .navbar-inner .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner .brand .caret,#navbar .navbar-inner .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner .brand:focus .caret,#navbar .navbar-inner .brand:hover .caret,#navbar .navbar-inner .nav>li>a:focus .caret,#navbar .navbar-inner .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open>.dropdown-toggle{background-color:#e0e0e0;background-image:-moz-linear-gradient(top,#ccc,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(top,#ccc,#fff);background-image:-o-linear-gradient(top,#ccc,#fff);background-image:linear-gradient(to bottom,#ccc,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcccccc', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.transparent{background-color:rgba(235,235,235,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(204,204,204,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99cccccc', GradientType=0)}#navbar .navbar-inner.transparent .brand,#navbar .navbar-inner.transparent .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner.transparent .brand .caret,#navbar .navbar-inner.transparent .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner.transparent .brand:focus .caret,#navbar .navbar-inner.transparent .brand:hover .caret,#navbar .navbar-inner.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.transparent .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(224,224,224,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(204,204,204,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99cccccc', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner.red{background-color:#bb645f;background-image:-moz-linear-gradient(top,#e28e8a,#802420);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e28e8a),to(#802420));background-image:-webkit-linear-gradient(top,#e28e8a,#802420);background-image:-o-linear-gradient(top,#e28e8a,#802420);background-image:linear-gradient(to bottom,#e28e8a,#802420);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe28e8a', endColorstr='#ff802420', GradientType=0)}#navbar .navbar-inner.red .brand,#navbar .navbar-inner.red .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red .brand .caret,#navbar .navbar-inner.red .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red .brand:focus .caret,#navbar .navbar-inner.red .brand:hover .caret,#navbar .navbar-inner.red .nav>li>a:focus .caret,#navbar .navbar-inner.red .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open>.dropdown-toggle{background-color:#a74f4a;background-image:-moz-linear-gradient(top,#802420,#e28e8a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#802420),to(#e28e8a));background-image:-webkit-linear-gradient(top,#802420,#e28e8a);background-image:-o-linear-gradient(top,#802420,#e28e8a);background-image:linear-gradient(to bottom,#802420,#e28e8a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff802420', endColorstr='#ffe28e8a', GradientType=0)}#navbar .navbar-inner.red.transparent{background-color:rgba(187,100,95,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(226,142,138,.6)),to(rgba(128,36,32,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99e28e8a', endColorstr='#99802420', GradientType=0)}#navbar .navbar-inner.red.transparent .brand,#navbar .navbar-inner.red.transparent .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red.transparent .brand .caret,#navbar .navbar-inner.red.transparent .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red.transparent .brand:focus .caret,#navbar .navbar-inner.red.transparent .brand:hover .caret,#navbar .navbar-inner.red.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.red.transparent .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(167,79,74,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(128,36,32,.6)),to(rgba(226,142,138,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99802420', endColorstr='#99e28e8a', GradientType=0)}#navbar .navbar-inner.orange{background-color:#e39665;background-image:-moz-linear-gradient(top,#f9c3a0,#c2530c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9c3a0),to(#c2530c));background-image:-webkit-linear-gradient(top,#f9c3a0,#c2530c);background-image:-o-linear-gradient(top,#f9c3a0,#c2530c);background-image:linear-gradient(to bottom,#f9c3a0,#c2530c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9c3a0', endColorstr='#ffc2530c', GradientType=0)}#navbar .navbar-inner.orange .brand,#navbar .navbar-inner.orange .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange .brand .caret,#navbar .navbar-inner.orange .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange .brand:focus .caret,#navbar .navbar-inner.orange .brand:hover .caret,#navbar .navbar-inner.orange .nav>li>a:focus .caret,#navbar .navbar-inner.orange .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open>.dropdown-toggle{background-color:#d88047;background-image:-moz-linear-gradient(top,#c2530c,#f9c3a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2530c),to(#f9c3a0));background-image:-webkit-linear-gradient(top,#c2530c,#f9c3a0);background-image:-o-linear-gradient(top,#c2530c,#f9c3a0);background-image:linear-gradient(to bottom,#c2530c,#f9c3a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2530c', endColorstr='#fff9c3a0', GradientType=0)}#navbar .navbar-inner.orange.transparent{background-color:rgba(227,150,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,195,160,.6)),to(rgba(194,83,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9c3a0', endColorstr='#99c2530c', GradientType=0)}#navbar .navbar-inner.orange.transparent .brand,#navbar .navbar-inner.orange.transparent .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange.transparent .brand .caret,#navbar .navbar-inner.orange.transparent .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange.transparent .brand:focus .caret,#navbar .navbar-inner.orange.transparent .brand:hover .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,128,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,83,12,.6)),to(rgba(249,195,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2530c', endColorstr='#99f9c3a0', GradientType=0)}#navbar .navbar-inner.yellow{background-color:#e3d765;background-image:-moz-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f0a0),to(#c2b00c));background-image:-webkit-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-o-linear-gradient(top,#f9f0a0,#c2b00c);background-image:linear-gradient(to bottom,#f9f0a0,#c2b00c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f0a0', endColorstr='#ffc2b00c', GradientType=0)}#navbar .navbar-inner.yellow .brand,#navbar .navbar-inner.yellow .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow .brand .caret,#navbar .navbar-inner.yellow .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow .brand:focus .caret,#navbar .navbar-inner.yellow .brand:hover .caret,#navbar .navbar-inner.yellow .nav>li>a:focus .caret,#navbar .navbar-inner.yellow .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open>.dropdown-toggle{background-color:#d8ca47;background-image:-moz-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2b00c),to(#f9f0a0));background-image:-webkit-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-o-linear-gradient(top,#c2b00c,#f9f0a0);background-image:linear-gradient(to bottom,#c2b00c,#f9f0a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2b00c', endColorstr='#fff9f0a0', GradientType=0)}#navbar .navbar-inner.yellow.transparent{background-color:rgba(227,215,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,240,160,.6)),to(rgba(194,176,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9f0a0', endColorstr='#99c2b00c', GradientType=0)}#navbar .navbar-inner.yellow.transparent .brand,#navbar .navbar-inner.yellow.transparent .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow.transparent .brand .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow.transparent .brand:focus .caret,#navbar .navbar-inner.yellow.transparent .brand:hover .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,202,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,176,12,.6)),to(rgba(249,240,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2b00c', endColorstr='#99f9f0a0', GradientType=0)}#navbar .navbar-inner.green{background-color:#98f064;background-image:-moz-linear-gradient(top,#c8ffa7,#50da00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8ffa7),to(#50da00));background-image:-webkit-linear-gradient(top,#c8ffa7,#50da00);background-image:-o-linear-gradient(top,#c8ffa7,#50da00);background-image:linear-gradient(to bottom,#c8ffa7,#50da00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8ffa7', endColorstr='#ff50da00', GradientType=0)}#navbar .navbar-inner.green .brand,#navbar .navbar-inner.green .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green .brand .caret,#navbar .navbar-inner.green .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green .brand:focus .caret,#navbar .navbar-inner.green .brand:hover .caret,#navbar .navbar-inner.green .nav>li>a:focus .caret,#navbar .navbar-inner.green .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open>.dropdown-toggle{background-color:#80e943;background-image:-moz-linear-gradient(top,#50da00,#c8ffa7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#50da00),to(#c8ffa7));background-image:-webkit-linear-gradient(top,#50da00,#c8ffa7);background-image:-o-linear-gradient(top,#50da00,#c8ffa7);background-image:linear-gradient(to bottom,#50da00,#c8ffa7);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff50da00', endColorstr='#ffc8ffa7', GradientType=0)}#navbar .navbar-inner.green.transparent{background-color:rgba(152,240,100,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,255,167,.6)),to(rgba(80,218,0,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8ffa7', endColorstr='#9950da00', GradientType=0)}#navbar .navbar-inner.green.transparent .brand,#navbar .navbar-inner.green.transparent .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green.transparent .brand .caret,#navbar .navbar-inner.green.transparent .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green.transparent .brand:focus .caret,#navbar .navbar-inner.green.transparent .brand:hover .caret,#navbar .navbar-inner.green.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.green.transparent .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,233,67,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,218,0,.6)),to(rgba(200,255,167,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9950da00', endColorstr='#99c8ffa7', GradientType=0)}#navbar .navbar-inner.blue{background-color:#2e63cc;background-image:-moz-linear-gradient(top,#4d88ff,#002b80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4d88ff),to(#002b80));background-image:-webkit-linear-gradient(top,#4d88ff,#002b80);background-image:-o-linear-gradient(top,#4d88ff,#002b80);background-image:linear-gradient(to bottom,#4d88ff,#002b80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d88ff', endColorstr='#ff002b80', GradientType=0)}#navbar .navbar-inner.blue .brand,#navbar .navbar-inner.blue .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue .brand .caret,#navbar .navbar-inner.blue .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue .brand:focus .caret,#navbar .navbar-inner.blue .brand:hover .caret,#navbar .navbar-inner.blue .nav>li>a:focus .caret,#navbar .navbar-inner.blue .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open>.dropdown-toggle{background-color:#1f50b3;background-image:-moz-linear-gradient(top,#002b80,#4d88ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#002b80),to(#4d88ff));background-image:-webkit-linear-gradient(top,#002b80,#4d88ff);background-image:-o-linear-gradient(top,#002b80,#4d88ff);background-image:linear-gradient(to bottom,#002b80,#4d88ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff002b80', endColorstr='#ff4d88ff', GradientType=0)}#navbar .navbar-inner.blue.transparent{background-color:rgba(46,99,204,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(77,136,255,.6)),to(rgba(0,43,128,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#994d88ff', endColorstr='#99002b80', GradientType=0)}#navbar .navbar-inner.blue.transparent .brand,#navbar .navbar-inner.blue.transparent .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue.transparent .brand .caret,#navbar .navbar-inner.blue.transparent .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue.transparent .brand:focus .caret,#navbar .navbar-inner.blue.transparent .brand:hover .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(31,80,179,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(0,43,128,.6)),to(rgba(77,136,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99002b80', endColorstr='#994d88ff', GradientType=0)}#navbar .navbar-inner.violet{background-color:#9864f0;background-image:-moz-linear-gradient(top,#c8a7ff,#5000da);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8a7ff),to(#5000da));background-image:-webkit-linear-gradient(top,#c8a7ff,#5000da);background-image:-o-linear-gradient(top,#c8a7ff,#5000da);background-image:linear-gradient(to bottom,#c8a7ff,#5000da);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8a7ff', endColorstr='#ff5000da', GradientType=0)}#navbar .navbar-inner.violet .brand,#navbar .navbar-inner.violet .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet .brand .caret,#navbar .navbar-inner.violet .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet .brand:focus .caret,#navbar .navbar-inner.violet .brand:hover .caret,#navbar .navbar-inner.violet .nav>li>a:focus .caret,#navbar .navbar-inner.violet .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open>.dropdown-toggle{background-color:#8043e9;background-image:-moz-linear-gradient(top,#5000da,#c8a7ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5000da),to(#c8a7ff));background-image:-webkit-linear-gradient(top,#5000da,#c8a7ff);background-image:-o-linear-gradient(top,#5000da,#c8a7ff);background-image:linear-gradient(to bottom,#5000da,#c8a7ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5000da', endColorstr='#ffc8a7ff', GradientType=0)}#navbar .navbar-inner.violet.transparent{background-color:rgba(152,100,240,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,167,255,.6)),to(rgba(80,0,218,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8a7ff', endColorstr='#995000da', GradientType=0)}#navbar .navbar-inner.violet.transparent .brand,#navbar .navbar-inner.violet.transparent .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet.transparent .brand .caret,#navbar .navbar-inner.violet.transparent .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet.transparent .brand:focus .caret,#navbar .navbar-inner.violet.transparent .brand:hover .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,67,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,0,218,.6)),to(rgba(200,167,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#995000da', endColorstr='#99c8a7ff', GradientType=0)}#navbar .navbar-inner.black{background-color:#4f4f4f;background-image:-moz-linear-gradient(top,#787878,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#787878),to(#121212));background-image:-webkit-linear-gradient(top,#787878,#121212);background-image:-o-linear-gradient(top,#787878,#121212);background-image:linear-gradient(to bottom,#787878,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff787878', endColorstr='#ff121212', GradientType=0)}#navbar .navbar-inner.black .brand,#navbar .navbar-inner.black .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black .brand .caret,#navbar .navbar-inner.black .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black .brand:focus .caret,#navbar .navbar-inner.black .brand:hover .caret,#navbar .navbar-inner.black .nav>li>a:focus .caret,#navbar .navbar-inner.black .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open>.dropdown-toggle{background-color:#3b3b3b;background-image:-moz-linear-gradient(top,#121212,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#787878));background-image:-webkit-linear-gradient(top,#121212,#787878);background-image:-o-linear-gradient(top,#121212,#787878);background-image:linear-gradient(to bottom,#121212,#787878);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212', endColorstr='#ff787878', GradientType=0)}#navbar .navbar-inner.black.transparent{background-color:rgba(79,79,79,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(120,120,120,.6)),to(rgba(18,18,18,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99787878', endColorstr='#99121212', GradientType=0)}#navbar .navbar-inner.black.transparent .brand,#navbar .navbar-inner.black.transparent .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black.transparent .brand .caret,#navbar .navbar-inner.black.transparent .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black.transparent .brand:focus .caret,#navbar .navbar-inner.black.transparent .brand:hover .caret,#navbar .navbar-inner.black.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.black.transparent .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(59,59,59,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(18,18,18,.6)),to(rgba(120,120,120,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99121212', endColorstr='#99787878', GradientType=0)}#navbar .navbar-inner.white{background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#fff,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#fff,#c8c8c8);background-image:-o-linear-gradient(top,#fff,#c8c8c8);background-image:linear-gradient(to bottom,#fff,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffc8c8c8', GradientType=0)}#navbar .navbar-inner.white .brand,#navbar .navbar-inner.white .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white .brand .caret,#navbar .navbar-inner.white .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white .brand:focus .caret,#navbar .navbar-inner.white .brand:hover .caret,#navbar .navbar-inner.white .nav>li>a:focus .caret,#navbar .navbar-inner.white .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open>.dropdown-toggle{background-color:#dedede;background-image:-moz-linear-gradient(top,#c8c8c8,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8c8c8),to(#fff));background-image:-webkit-linear-gradient(top,#c8c8c8,#fff);background-image:-o-linear-gradient(top,#c8c8c8,#fff);background-image:linear-gradient(to bottom,#c8c8c8,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8c8c8', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.white.transparent{background-color:rgba(233,233,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(200,200,200,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99c8c8c8', GradientType=0)}#navbar .navbar-inner.white.transparent .brand,#navbar .navbar-inner.white.transparent .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white.transparent .brand .caret,#navbar .navbar-inner.white.transparent .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white.transparent .brand:focus .caret,#navbar .navbar-inner.white.transparent .brand:hover .caret,#navbar .navbar-inner.white.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.white.transparent .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(222,222,222,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,200,200,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8c8c8', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner .brand span{background-size:20px 20px;background-position:left center;padding-left:24px;background-repeat:no-repeat}.octoprint-container{margin-top:20px}.octoprint-container .tab-content{padding:9px 15px;border-left:1px solid #DDD;border-right:1px solid #DDD;border-bottom:1px solid #DDD;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.octoprint-container .nav{margin-bottom:0}.octoprint-container .tab-content h1{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #E5E5E5;font-weight:400}.octoprint-container .accordion-heading .accordion-heading-button{float:right}.octoprint-container .accordion-heading .accordion-heading-button a{display:inline-block;padding:8px 15px;font-size:14px;line-height:20px;color:#000;text-decoration:none;background:0 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.octoprint-container .accordion-heading a.accordion-toggle{display:inline-block}.octoprint-container .accordion-heading [class*=" icon-"],.octoprint-container .accordion-heading [class^=icon-]{color:#000}.print-control .btn{padding-left:4px;padding-right:4px}.upload-buttons .btn{margin-right:0}table{table-layout:fixed}table .popover-title{text-overflow:ellipsis;word-break:break-all}table td,table th{overflow:hidden}table td.gcode_files_name,table th.gcode_files_name{text-overflow:ellipsis;text-align:left;white-space:nowrap}table td.gcode_files_action,table th.gcode_files_action{width:90px;text-align:center;white-space:nowrap}table td.gcode_files_action a,table th.gcode_files_action a{text-decoration:none;color:#000}table td.gcode_files_action a.disabled,table th.gcode_files_action a.disabled{color:#ccc;cursor:default}table td.timelapse_files_name,table td.timelapse_unrendered_name,table th.timelapse_files_name,table th.timelapse_unrendered_name{text-overflow:ellipsis;text-align:left}table td.timelapse_files_size,table td.timelapse_unrendered_size,table th.timelapse_files_size,table th.timelapse_unrendered_size{text-align:right;width:55px}table td.timelapse_unrendered_count,table th.timelapse_unrendered_count{text-align:right;width:45px}table td.timelapse_files_action,table td.timelapse_unrendered_action,table th.timelapse_files_action,table th.timelapse_unrendered_action{width:45px;text-align:center;white-space:nowrap}table td.timelapse_files_action a,table td.timelapse_unrendered_action a,table th.timelapse_files_action a,table th.timelapse_unrendered_action a{text-decoration:none;color:#000}table td.timelapse_files_action a.disabled,table td.timelapse_unrendered_action a.disabled,table th.timelapse_files_action a.disabled,table th.timelapse_unrendered_action a.disabled{color:#ccc;cursor:default}table td.settings_users_name,table th.settings_users_name{text-overflow:ellipsis;text-align:left}table td.settings_users_active,table td.settings_users_admin,table th.settings_users_active,table th.settings_users_admin{text-align:center;width:55px}table td.settings_users_actions,table th.settings_users_actions{width:60px;text-align:center;white-space:nowrap}table td.settings_users_actions a,table th.settings_users_actions a{text-decoration:none;color:#000}table td.settings_users_actions a.disabled,table th.settings_users_actions a.disabled{color:#ccc;cursor:default}table td.settings_logs_name,table th.settings_logs_name{text-overflow:ellipsis;text-align:left}table td.settings_logs_size,table th.settings_logs_size{text-align:right;width:70px}table td.settings_logs_date,table th.settings_logs_date{text-align:left;width:130px}table td.settings_logs_action,table th.settings_logs_action{width:70px;text-align:center;white-space:nowrap}table td.settings_logs_action a,table th.settings_logs_action a{text-decoration:none;color:#000}table td.settings_logs_action a.disabled,table th.settings_logs_action a.disabled{color:#ccc;cursor:default}table td.settings_printerProfiles_profiles_name,table th.settings_printerProfiles_profiles_name{text-overflow:ellipsis;text-align:left}table td.settings_printerProfiles_profiles_model,table th.settings_printerProfiles_profiles_model{text-align:left;width:250px}table td.settings_printerProfiles_profiles_action,table th.settings_printerProfiles_profiles_action{width:80px;text-align:center;white-space:nowrap}table td.settings_printerProfiles_profiles_action a,table th.settings_printerProfiles_profiles_action a{text-decoration:none;color:#000}table td.settings_printerProfiles_profiles_action a.disabled,table th.settings_printerProfiles_profiles_action a.disabled{color:#ccc;cursor:default}#temperature-graph{height:350px;width:100%;background-image:url(../img/graph-background.png);background-position:center;background-repeat:no-repeat}.tab-content,.tab-pane{overflow:visible}.tempInput{width:50px}#speed_fill,#speed_innerWall,#speed_outerWall,#speed_support,#temp_newBedTemp,#temp_newTemp,#webcam_timelapse_fps,#webcam_timelapse_interval,#webcam_timelapse_postRoll{text-align:right}ul.dropdown-menu li a{cursor:pointer}#connection_baudrates,#connection_ports,#connection_printers{width:100%}#offline_overlay,#reloadui_overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:none}#offline_overlay{z-index:10002}#reloadui_overlay{z-index:10001}#offline_overlay_background,#reloadui_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#offline_overlay_wrapper,#reloadui_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#offline_overlay_wrapper .container,#reloadui_overlay_wrapper .container{margin:auto}#webcam_container{width:100%;position:relative;outline:0}#webcam_container .flipH{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1)}#webcam_container .flipV{-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1)}#webcam_container .flipH.flipV{-webkit-transform:scaleX(-1) scaleY(-1);-moz-transform:scaleX(-1) scaleY(-1);-ms-transform:scaleX(-1) scaleY(-1)}#webcam_container .rotate90{transform:rotate(-90deg)}#webcam_container .keycontrol_overlay{position:absolute;left:10px;right:10px;bottom:10px;background:rgba(0,0,0,.5);font-size:85%;color:#fff;padding:0}#webcam_container .keycontrol_overlay kbd{border:1px solid #eee;border-radius:3px;margin-left:2px;margin-right:2px;font-size:90%;padding:2px;min-width:1em}#webcam_container .keycontrol_overlay .keycontrol_overlay_heading{position:relative;padding:10px;font-weight:700}#webcam_container .keycontrol_overlay .keycontrol_overlay_column{position:relative;width:45%;padding:10px;float:left}#files .gcode_files{padding-right:7px}#files .gcode_files .entry{padding:5px;line-height:20px;border-bottom:1px solid #ddd;position:relative}#files .gcode_files .entry:hover{background-color:#f5f5f5}#files .gcode_files .entry .title{text-overflow:ellipsis;word-break:break-all}#files .gcode_files .entry .additionalInfo,#files .gcode_files .entry .size,#files .gcode_files .entry .uploaded{font-size:85%;color:#999}#files .gcode_files .entry .action-buttons{position:absolute;bottom:5px;right:5px}#files .gcode_files .entry .additionalInfo{padding-bottom:22px}@keyframes highlightframes{0%{background:#ff0}100%{background:0 0}}#files .gcode_files .entry.highlight{animation:highlightframes 2s}#files .upload-buttons{margin-top:10px}#files .form-search{text-align:center;margin-bottom:5px!important}#control{overflow:hidden}#control .jog-panel{float:left;margin-right:19px}#control h1{text-align:left}#control .jog-panel>div{text-align:center}#control .jog-panel>div.distance{text-align:left}#control .jog-panel .slider{margin-bottom:10px}#control .box{width:30px;height:30px;margin-right:10px;margin-bottom:10px;padding-left:8px}#control .control-box{display:block;height:30px;margin-bottom:10px}#control .btn-group{margin-bottom:10px}#control .btn-group.distance>.btn{width:43px;padding:3px 0;height:30px}#control .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#control .custom_section h1{cursor:pointer}#control .custom_section_horizontal>.custom_control{display:inline-block}#control .custom_section_vertical>.custom_control{display:block}#control .custom_control .slider{margin-left:10px;margin-right:10px;margin-bottom:2px}#gcode .progress{width:582px}#gcode .progress .bar{-webkit-transition:width 0s linear;-moz-transition:width 0s linear;-o-transition:width 0s linear;transition:width 0s linear}#gcode .canvas_container{position:relative}#gcode #gcode_layer_slider{position:absolute;right:0;top:0;height:568px;float:right}#gcode #gcode_layer_slider .slider-handle{width:14px;height:14px;margin-left:-3px;margin-top:-7px}#gcode #gcode_command_slider .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#term .terminal{margin-bottom:30px}#term .terminal #terminal-output,#term .terminal #terminal-output-lowfi{min-height:340px;margin-bottom:5px}#term #terminal-sendpanel{text-align:right}#settings_dialog .modal-body #settings_dialog_menu{margin-left:0}#settings_dialog .aboutlink{float:left}#settings_appearance_managelanguagesdialog_emptylist{overflow:hidden;width:100%;height:300px;text-align:center;display:table}#settings_appearance_managelanguagesdialog_emptylist div{display:table-cell;vertical-align:middle}.footer ul{margin:0}.footer ul li{display:inline;margin-left:1em;font-size:85%}.footer ul li:first-child{margin-left:0}.footer ul li a{color:#555}.ui-pnotify .alert a{color:#c09853}.ui-pnotify .alert-danger a,.ui-pnotify .alert-error a{color:#b94a48}.ui-pnotify .alert-success a{color:#468847}.ui-pnotify .alert-info a{color:#3a87ad}.pnotify_additional_info .pnotify_more{font-size:85%}.text-right{text-align:right}.overflow_visible{overflow:visible!important}.border_box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none}textarea.block{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#drop_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;display:none}#drop_overlay.in{display:block}#drop_overlay #drop_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#drop_overlay #drop_overlay_wrapper #drop,#drop_overlay #drop_overlay_wrapper #drop_background{position:absolute;top:0;left:0;margin-left:0;width:100%}#drop_overlay #drop_overlay_wrapper #drop_locally,#drop_overlay #drop_overlay_wrapper #drop_locally_background{position:absolute;top:0;left:50%;margin-left:-50%;width:50%;border-right:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper #drop_sd,#drop_overlay #drop_overlay_wrapper #drop_sd_background{position:absolute;top:0;left:50%;margin-left:0;width:50%;border-left:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper .dropzone{height:100%;z-index:10001;color:#fff;font-size:30px}#drop_overlay #drop_overlay_wrapper .dropzone i{font-size:50px}#drop_overlay #drop_overlay_wrapper .dropzone .text{display:block;text-align:center;line-height:40px;position:absolute;width:100%;bottom:5%;filter:alpha(opacity=100);-moz-opacity:1;-khtml-opacity:1;opacity:1}#drop_overlay #drop_overlay_wrapper .dropzone_background{width:50%;height:100%;background-color:#000;filter:alpha(opacity=25);-moz-opacity:.25;-khtml-opacity:.25;opacity:.25}#drop_overlay #drop_overlay_wrapper .dropzone_background.hover{background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper .dropzone_background.fade{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;opacity:1}.icon-sd-black-14{background:url(../img/icon-sd-black-14.png) 0 3px no-repeat;width:11px;height:17px;display:inline-block!important}.center{float:none;margin-left:auto;margin-right:auto}.ui-pnotify a{text-decoration:underline}.slider .slider-selection{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.slider .slider-selection.active,.slider .slider-selection.disabled,.slider .slider-selection:active,.slider .slider-selection:focus,.slider .slider-selection:hover,.slider .slider-selection[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.slider .slider-selection.active,.slider .slider-selection:active{background-color:#039 \9}.slider.slider-disabled .slider-selection{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-track{background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.slider.slider-disabled .slider-track{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle{display:inline-block;*display:inline;*zoom:1;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);padding:0;margin-bottom:0;opacity:1;filter:alpha(opacity=100)}.slider .slider-handle.active,.slider .slider-handle.disabled,.slider .slider-handle:active,.slider .slider-handle:focus,.slider .slider-handle:hover,.slider .slider-handle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.slider .slider-handle.active,.slider .slider-handle:active{background-color:#ccc \9}.slider .slider-handle:first-child{*margin-left:0}.slider .slider-handle:focus,.slider .slider-handle:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.slider .slider-handle:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.slider .slider-handle.active,.slider .slider-handle:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.slider .slider-handle.disabled,.slider .slider-handle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle.hide{display:none}.slider .slider-handle.round{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.modal.large{width:975px;margin-left:-487px}.full-sized-box{position:absolute;bottom:0;left:0;right:0;top:0;padding:15px}.full-sized-box .row-fluid{height:100%}@media (max-width:979px){.full-sized-box{position:static}}:root .full-sized-box,_::-webkit-full-page-media,_:future{position:static}.scrollable{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.input-append .add-on.add-on-limited,.input-prepend .add-on.add-on-limited{overflow-x:hidden;text-overflow:ellipsis;width:inherit}.control-group.error .input-append .fileinput-button,.control-group.error .input-prepend .fileinput-button{border-color:#b94a48}input[type=number]{text-align:right}.progress-text,.progress-text-centered{position:relative}.progress-text .progress-text-back,.progress-text .progress-text-front,.progress-text-centered .progress-text-back,.progress-text-centered .progress-text-front{white-space:nowrap}.progress-text .progress-text-front,.progress-text-centered .progress-text-front{box-sizing:border-box;padding:0 10px;width:100%;display:block}.progress-text .progress-text-back,.progress-text-centered .progress-text-back{position:absolute;font-size:12px;line-height:20px;display:block;box-sizing:border-box;text-align:center;padding:0 10px}.progress-text .bar,.progress-text-centered .bar{position:absolute;overflow:hidden}.progress-text-centered .progress-text-front{position:absolute;font-size:12px;line-height:20px;display:block;text-align:center;color:#fff}.progress-text-centered .progress-text-back{width:100%} \ No newline at end of file diff --git a/src/octoprint/static/js/app/main.js b/src/octoprint/static/js/app/main.js index 65c9af31..77eb39f0 100644 --- a/src/octoprint/static/js/app/main.js +++ b/src/octoprint/static/js/app/main.js @@ -348,6 +348,44 @@ $(function() { } }; + ko.bindingHandlers.copyWidth = { + init: function(element, valueAccessor, allBindings, viewModel, bindingContext) { + var node = ko.bindingHandlers.copyWidth._getReferenceNode(element, valueAccessor); + ko.bindingHandlers.copyWidth._setWidth(node, element); + }, + update: function(element, valueAccessor, allBindings, viewModel, bindingContext) { + var node = ko.bindingHandlers.copyWidth._getReferenceNode(element, valueAccessor); + ko.bindingHandlers.copyWidth._setWidth(node, element); + }, + _setWidth: function(node, element) { + var width = node.width(); + if (!width) return; + if ($(element).width() == width) return; + element.style.width = width + "px"; + }, + _getReferenceNode: function(element, valueAccessor) { + var value = ko.utils.unwrapObservable(valueAccessor()); + if (!value) return; + + var parts = value.split(" "); + var node = $(element); + while (parts.length > 0) { + var part = parts.shift(); + if (part == ":parent") { + node = node.parent(); + } else { + var selector = part; + if (parts.length > 0) { + selector += " " + parts.join(" "); + } + node = $(selector, node); + break; + } + } + return node; + } + }; + ko.bindingHandlers.contextMenu = { init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { var val = ko.utils.unwrapObservable(valueAccessor()); diff --git a/src/octoprint/static/less/octoprint.less b/src/octoprint/static/less/octoprint.less index 835b79fc..db585aec 100644 --- a/src/octoprint/static/less/octoprint.less +++ b/src/octoprint/static/less/octoprint.less @@ -1054,3 +1054,55 @@ _::-webkit-full-page-media, _:future, :root .full-sized-box { input[type=number] { text-align: right; } + +// Progress bars with text +// +// .progress-text-front will also need to have the full width of the enclosing +// progress wrapper applied (e.g. via copyWidth knockout binding) + +.progress-text, +.progress-text-centered { + position: relative; + + .progress-text-front, + .progress-text-back { + white-space: nowrap; + } + + .progress-text-front { + box-sizing: border-box; + padding: 0 10px; + width: 100%; + display: block; + } + + .progress-text-back { + position: absolute; + font-size: 12px; + line-height: 20px; + display: block; + box-sizing: border-box; + text-align: center; + padding: 0 10px; + } + + .bar { + position: absolute; + overflow: hidden; + } +} + +.progress-text-centered { + .progress-text-front { + position: absolute; + font-size: 12px; + line-height: 20px; + display: block; + text-align: center; + color: #fff; + } + + .progress-text-back { + width: 100%; + } +} From 0a81e8b1610b6f81881b3bd20b1d2f055ac7aecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 27 Jul 2016 15:05:16 +0200 Subject: [PATCH 18/26] Use centered text in progress bars * print progress shows percentage * upload progress shows what it always showed, but fully centered * GCODE viewer progress shows what it always showed, but fully centered --- src/octoprint/static/js/app/dataupdater.js | 45 +--------- .../static/js/app/viewmodels/files.js | 89 +++++++++++++++++-- .../static/js/app/viewmodels/printerstate.js | 8 ++ src/octoprint/templates/sidebar/files.jinja2 | 7 +- src/octoprint/templates/sidebar/state.jinja2 | 7 +- .../templates/tabs/gcodeviewer.jinja2 | 7 +- 6 files changed, 105 insertions(+), 58 deletions(-) diff --git a/src/octoprint/static/js/app/dataupdater.js b/src/octoprint/static/js/app/dataupdater.js index 061dbae5..ab9096af 100644 --- a/src/octoprint/static/js/app/dataupdater.js +++ b/src/octoprint/static/js/app/dataupdater.js @@ -140,9 +140,6 @@ function DataUpdater(allViewModels) { var data = e.data[prop]; - var gcodeUploadProgress = $("#gcode_upload_progress"); - var gcodeUploadProgressBar = $(".bar", gcodeUploadProgress); - var start = new Date().getTime(); switch (prop) { case "connected": { @@ -214,8 +211,6 @@ function DataUpdater(allViewModels) { break; } case "slicingProgress": { - gcodeUploadProgressBar.text(_.sprintf(gettext("Slicing ... (%(percentage)d%%)"), {percentage: Math.round(data["progress"])})); - _.each(self.allViewModels, function(viewModel) { if (viewModel.hasOwnProperty("onSlicingProgress")) { viewModel.onSlicingProgress(data["slicer"], data["model_path"], data["machinecode_path"], data["progress"]); @@ -226,48 +221,10 @@ function DataUpdater(allViewModels) { case "event": { var type = data["type"]; var payload = data["payload"]; - var html = ""; log.debug("Got event " + type + " with payload: " + JSON.stringify(payload)); - if (type == "SlicingStarted") { - gcodeUploadProgress.addClass("progress-striped").addClass("active"); - gcodeUploadProgressBar.css("width", "100%"); - if (payload.progressAvailable) { - gcodeUploadProgressBar.text(_.sprintf(gettext("Slicing ... (%(percentage)d%%)"), {percentage: 0})); - } else { - gcodeUploadProgressBar.text(gettext("Slicing ...")); - } - } else if (type == "SlicingDone") { - gcodeUploadProgress.removeClass("progress-striped").removeClass("active"); - gcodeUploadProgressBar.css("width", "0%"); - gcodeUploadProgressBar.text(""); - new PNotify({title: gettext("Slicing done"), text: _.sprintf(gettext("Sliced %(stl)s to %(gcode)s, took %(time).2f seconds"), payload), type: "success"}); - } else if (type == "SlicingCancelled") { - gcodeUploadProgress.removeClass("progress-striped").removeClass("active"); - gcodeUploadProgressBar.css("width", "0%"); - gcodeUploadProgressBar.text(""); - } else if (type == "SlicingFailed") { - gcodeUploadProgress.removeClass("progress-striped").removeClass("active"); - gcodeUploadProgressBar.css("width", "0%"); - gcodeUploadProgressBar.text(""); - - html = _.sprintf(gettext("Could not slice %(stl)s to %(gcode)s: %(reason)s"), payload); - new PNotify({title: gettext("Slicing failed"), text: html, type: "error", hide: false}); - } else if (type == "TransferStarted") { - gcodeUploadProgress.addClass("progress-striped").addClass("active"); - gcodeUploadProgressBar.css("width", "100%"); - gcodeUploadProgressBar.text(gettext("Streaming ...")); - } else if (type == "TransferDone") { - gcodeUploadProgress.removeClass("progress-striped").removeClass("active"); - gcodeUploadProgressBar.css("width", "0%"); - gcodeUploadProgressBar.text(""); - new PNotify({ - title: gettext("Streaming done"), - text: _.sprintf(gettext("Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds"), payload), - type: "success" - }); - } else if (type == "PrintCancelled") { + if (type == "PrintCancelled") { if (payload.firmwareError) { new PNotify({ title: gettext("Unhandled communication error"), diff --git a/src/octoprint/static/js/app/viewmodels/files.js b/src/octoprint/static/js/app/viewmodels/files.js index 10107453..ef4ffe4b 100644 --- a/src/octoprint/static/js/app/viewmodels/files.js +++ b/src/octoprint/static/js/app/viewmodels/files.js @@ -58,6 +58,8 @@ $(function() { self.localTarget = undefined; self.sdTarget = undefined; + self.uploadProgressText = ko.observable(); + self._uploadInProgress = false; // initialize list helper @@ -449,10 +451,60 @@ $(function() { self.requestData(); }; + self.onEventSlicingStarted = function(payload) { + self.uploadProgress + .addClass("progress-striped") + .addClass("active"); + self.uploadProgressBar.css("width", "100%"); + if (payload.progressAvailable) { + self.uploadProgressText(_.sprintf(gettext("Slicing ... (%(percentage)d%%)"), {percentage: 0})); + } else { + self.uploadProgressText(gettext("Slicing ...")); + } + }; + + self.onSlicingProgress = function(slicer, modelPath, machinecodePath, progress) { + self.uploadProgressText(_.sprintf(gettext("Slicing ... (%(percentage)d%%)"), {percentage: Math.round(progress)})); + }; + + self.onEventSlicingCancelled = function(payload) { + self.uploadProgress + .removeClass("progress-striped") + .removeClass("active"); + self.uploadProgressBar + .css("width", "0%"); + self.uploadProgressText(""); + }; + self.onEventSlicingDone = function(payload) { + self.uploadProgress + .removeClass("progress-striped") + .removeClass("active"); + self.uploadProgressBar + .css("width", "0%"); + self.uploadProgressText(""); + + new PNotify({ + title: gettext("Slicing done"), + text: _.sprintf(gettext("Sliced %(stl)s to %(gcode)s, took %(time).2f seconds"), payload), + type: "success" + }); + self.requestData(); }; + self.onEventSlicingFailed = function(payload) { + self.uploadProgress + .removeClass("progress-striped") + .removeClass("active"); + self.uploadProgressBar + .css("width", "0%"); + self.uploadProgressText(""); + + var html = _.sprintf(gettext("Could not slice %(stl)s to %(gcode)s: %(reason)s"), payload); + new PNotify({title: gettext("Slicing failed"), text: html, type: "error", hide: false}); + }; + self.onEventMetadataAnalysisFinished = function(payload) { self.requestData(); }; @@ -461,7 +513,29 @@ $(function() { self.requestData(); }; + self.onEventTransferStarted = function(payload) { + self.uploadProgress + .addClass("progress-striped") + .addClass("active"); + self.uploadProgressBar + .css("width", "100%"); + self.uploadProgressText(gettext("Streaming ...")); + }; + self.onEventTransferDone = function(payload) { + self.uploadProgress + .removeClass("progress-striped") + .removeClass("active"); + self.uploadProgressBar + .css("width", "0"); + self.uploadProgressText(""); + + new PNotify({ + title: gettext("Streaming done"), + text: _.sprintf(gettext("Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds"), payload), + type: "success" + }); + self.requestData(payload.remote, "sdcard"); }; @@ -531,8 +605,8 @@ $(function() { .done(function() { if (data.result.done) { self.uploadProgressBar - .css("width", "0%") - .text(""); + .css("width", "0%"); + self.uploadProgressText(""); self.uploadProgress .removeClass("progress-striped") .removeClass("active"); @@ -561,8 +635,8 @@ $(function() { hide: false }); self.uploadProgressBar - .css("width", "0%") - .text(""); + .css("width", "0%"); + self.uploadProgressText(""); self.uploadProgress .removeClass("progress-striped") .removeClass("active"); @@ -576,15 +650,14 @@ $(function() { var progress = parseInt(data.loaded / data.total * 100, 10); self.uploadProgressBar - .css("width", progress + "%") - .text(gettext("Uploading ...")); + .css("width", progress + "%"); + self.uploadProgressText(gettext("Uploading ...")); if (progress >= 100) { self.uploadProgress .addClass("progress-striped") .addClass("active"); - self.uploadProgressBar - .text(gettext("Saving ...")); + self.uploadProgressText(gettext("Saving ...")); } }; diff --git a/src/octoprint/static/js/app/viewmodels/printerstate.js b/src/octoprint/static/js/app/viewmodels/printerstate.js index ddbfc9ac..06d89b04 100644 --- a/src/octoprint/static/js/app/viewmodels/printerstate.js +++ b/src/octoprint/static/js/app/viewmodels/printerstate.js @@ -30,6 +30,7 @@ $(function() { self.filepos = ko.observable(undefined); self.printTime = ko.observable(undefined); self.printTimeLeft = ko.observable(undefined); + self.printTimeLeftOrigin = ko.observable(undefined); self.sd = ko.observable(undefined); self.timelapse = ko.observable(undefined); @@ -88,6 +89,12 @@ $(function() { return 0; return self.progress(); }); + self.progressBarString = ko.pureComputed(function() { + if (!self.progress()) { + return ""; + } + return _.sprintf("%d%%", self.progress()); + }); self.pauseString = ko.pureComputed(function() { if (self.isPaused()) return gettext("Continue"); @@ -191,6 +198,7 @@ $(function() { self.filepos(data.filepos); self.printTime(data.printTime); self.printTimeLeft(data.printTimeLeft); + self.printTimeLeftOrigin(data.printTimeLeftOrigin); }; self._processZData = function(data) { diff --git a/src/octoprint/templates/sidebar/files.jinja2 b/src/octoprint/templates/sidebar/files.jinja2 index e1441c76..772485a8 100644 --- a/src/octoprint/templates/sidebar/files.jinja2 +++ b/src/octoprint/templates/sidebar/files.jinja2 @@ -57,8 +57,11 @@ {% endif %} -
-
+
+ +
+ +
{{ _('Hint: You can also drag and drop files on this page to upload them.') }} diff --git a/src/octoprint/templates/sidebar/state.jinja2 b/src/octoprint/templates/sidebar/state.jinja2 index feff1535..f6168753 100644 --- a/src/octoprint/templates/sidebar/state.jinja2 +++ b/src/octoprint/templates/sidebar/state.jinja2 @@ -9,8 +9,11 @@ {{ _('Print Time Left') }}:
{{ _('Printed') }}:
-
-
+
+ +
+ +
-
-
+
+ +
+ +
From f2ecb96c83b8450b373aed59f769b35bc3ddc3b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 27 Jul 2016 18:38:17 +0200 Subject: [PATCH 19/26] Add indicator of origin of print time left estimate to UI --- src/octoprint/printer/standard.py | 16 ++++--- .../static/js/app/viewmodels/printerstate.js | 44 +++++++++++++++++++ src/octoprint/templates/sidebar/state.jinja2 | 2 +- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py index 727055d3..b71698aa 100644 --- a/src/octoprint/printer/standard.py +++ b/src/octoprint/printer/standard.py @@ -638,11 +638,13 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): cleanedPrintTime = self._comm.getCleanedPrintTime() statisticalTotalPrintTime = None + statisticalTotalPrintTimeType = None if self._selectedFile and "estimatedPrintTime" in self._selectedFile \ and self._selectedFile["estimatedPrintTime"]: statisticalTotalPrintTime = self._selectedFile["estimatedPrintTime"] + statisticalTotalPrintTimeType = self._selectedFile.get("estimatedPrintTimeType", None) - printTimeLeft, printTimeLeftOrigin = self._estimatePrintTimeLeft(progress, printTime, cleanedPrintTime, statisticalTotalPrintTime) + printTimeLeft, printTimeLeftOrigin = self._estimatePrintTimeLeft(progress, printTime, cleanedPrintTime, statisticalTotalPrintTime, statisticalTotalPrintTimeType) if progress is not None: progress_int = int(progress * 100) @@ -656,7 +658,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): printTimeLeft=int(printTimeLeft) if printTimeLeft is not None else None, printTimeLeftOrigin=printTimeLeftOrigin) - def _estimatePrintTimeLeft(self, progress, printTime, cleanedPrintTime, statisticalTotalPrintTime): + def _estimatePrintTimeLeft(self, progress, printTime, cleanedPrintTime, statisticalTotalPrintTime, statisticalTotalPrintTimeType): """ Tries to estimate the print time left for the print job @@ -705,9 +707,11 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): (if detectable). statisticalTotalPrintTime (float or None): Total print time of past prints against same printer profile, or estimated total print time from GCODE analysis. + statisticalTotalPrintTimeType (str or None): Type of statistical print time, either "average" (total time + of former prints) or "analysis" Returns: - (float or None) estimated print time left or None if not proper estimate could be made at all + (2-tuple) estimated print time left or None if not proper estimate could be made at all, origin of estimation """ if progress is None or printTime is None or cleanedPrintTime is None: @@ -722,7 +726,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): if estimatedTotalPrintTime is None: # no estimate yet, we'll use the statistical total totalPrintTime = statisticalTotalPrintTime - printTimeLeftOrigin = "stats" + printTimeLeftOrigin = statisticalTotalPrintTimeType else: if progress < self._timeEstimationStatsWeighingUntil: @@ -730,7 +734,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): sub_progress = progress * (1 / self._timeEstimationStatsWeighingUntil) if sub_progress > 1.0: sub_progress = 1.0 - printTimeLeftOrigin = "mixture" + printTimeLeftOrigin = "mixed-" + statisticalTotalPrintTimeType else: # use only the current estimate sub_progress = 1.0 @@ -855,9 +859,11 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): if averagePrintTime is not None: self._selectedFile["estimatedPrintTime"] = averagePrintTime + self._selectedFile["estimatedPrintTimeType"] = "average" elif estimatedPrintTime is not None: # TODO apply factor which first needs to be tracked! self._selectedFile["estimatedPrintTime"] = estimatedPrintTime + self._selectedFile["estimatedPrintTimeType"] = "analysis" self._stateMonitor.set_job_data({ "file": { diff --git a/src/octoprint/static/js/app/viewmodels/printerstate.js b/src/octoprint/static/js/app/viewmodels/printerstate.js index 06d89b04..8076c7ae 100644 --- a/src/octoprint/static/js/app/viewmodels/printerstate.js +++ b/src/octoprint/static/js/app/viewmodels/printerstate.js @@ -84,6 +84,50 @@ $(function() { return formatFuzzyEstimation(self.printTimeLeft()); } }); + self.printTimeLeftOriginString = ko.pureComputed(function() { + var value = self.printTimeLeftOrigin(); + switch (value) { + case "linear": { + return gettext("Based on a linear approximation (accuracy highly dependent on the model)"); + } + case "analysis": { + return gettext("Based on the estimate from analysis of file (medium accuracy)"); + } + case "mixed-analysis": { + return gettext("Based on a mix of estimate from analysis and calculation (medium accuracy)"); + } + case "average": { + return gettext("Based on the average total of past prints of this model with the same printer profile (usually good accuracy)"); + } + case "mixed-average": { + return gettext("Based on a mix of average total from past prints and calculation (usually good accuracy)"); + } + case "estimate": { + return gettext("Based on the calculated estimate (best accuracy)"); + } + default: { + return ""; + } + } + }); + self.printTimeLeftOriginClass = ko.pureComputed(function() { + var value = self.printTimeLeftOrigin(); + switch (value) { + default: + case "linear": { + return "text-error"; + } + case "analysis": + case "mixed-analysis": { + return "text-warning"; + } + case "average": + case "mixed-average": + case "estimate": { + return "text-success"; + } + } + }); self.progressString = ko.pureComputed(function() { if (!self.progress()) return 0; diff --git a/src/octoprint/templates/sidebar/state.jinja2 b/src/octoprint/templates/sidebar/state.jinja2 index f6168753..d21426cd 100644 --- a/src/octoprint/templates/sidebar/state.jinja2 +++ b/src/octoprint/templates/sidebar/state.jinja2 @@ -6,7 +6,7 @@ {{ _('Approx. Total Print Time') }}:
{{ _('Print Time') }}:
-{{ _('Print Time Left') }}:
+{{ _('Print Time Left') }}:
{{ _('Printed') }}:
From fad2e8f1b881d3ea41f1d4907c840476daf7064d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 27 Jul 2016 18:38:40 +0200 Subject: [PATCH 20/26] Visual distinction of state panel UI clusters --- src/octoprint/static/css/octoprint.css | 2 +- src/octoprint/static/less/octoprint.less | 8 ++++++++ src/octoprint/templates/sidebar/state.jinja2 | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/octoprint/static/css/octoprint.css b/src/octoprint/static/css/octoprint.css index 5d4e5199..ea19e431 100644 --- a/src/octoprint/static/css/octoprint.css +++ b/src/octoprint/static/css/octoprint.css @@ -1 +1 @@ -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn.active,.btn.disabled,.btn:active,.btn:focus,.btn:hover,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn.active,.btn:active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:focus,.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class*=" icon-"],.btn-large [class^=icon-]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class*=" icon-"],.btn-small [class^=icon-]{margin-top:0}.btn-mini [class*=" icon-"],.btn-mini [class^=icon-]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary.active,.btn-primary:active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning.active,.btn-warning:active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger.active,.btn-danger:active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:focus,.btn-success:hover,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success.active,.btn-success:active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:focus,.btn-info:hover,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info.active,.btn-info:active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:focus,.btn-inverse:hover,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse.active,.btn-inverse:active{background-color:#080808 \9}button.btn,input[type=submit].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type=submit].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type=submit].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type=submit].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:focus,.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover{color:#333;text-decoration:none}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.nowrap{white-space:nowrap}.actioncol{text-align:center;white-space:nowrap}.actioncol a{text-decoration:none;color:#000}.actioncol a.disabled{color:#ccc;cursor:default}#navbar .navbar-inner{background-color:#ebebeb;background-image:-moz-linear-gradient(top,#fff,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#ccc));background-image:-webkit-linear-gradient(top,#fff,#ccc);background-image:-o-linear-gradient(top,#fff,#ccc);background-image:linear-gradient(to bottom,#fff,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffcccccc', GradientType=0)}#navbar .navbar-inner .brand,#navbar .navbar-inner .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner .brand .caret,#navbar .navbar-inner .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner .brand:focus .caret,#navbar .navbar-inner .brand:hover .caret,#navbar .navbar-inner .nav>li>a:focus .caret,#navbar .navbar-inner .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open>.dropdown-toggle{background-color:#e0e0e0;background-image:-moz-linear-gradient(top,#ccc,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(top,#ccc,#fff);background-image:-o-linear-gradient(top,#ccc,#fff);background-image:linear-gradient(to bottom,#ccc,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcccccc', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.transparent{background-color:rgba(235,235,235,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(204,204,204,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99cccccc', GradientType=0)}#navbar .navbar-inner.transparent .brand,#navbar .navbar-inner.transparent .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner.transparent .brand .caret,#navbar .navbar-inner.transparent .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner.transparent .brand:focus .caret,#navbar .navbar-inner.transparent .brand:hover .caret,#navbar .navbar-inner.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.transparent .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(224,224,224,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(204,204,204,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99cccccc', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner.red{background-color:#bb645f;background-image:-moz-linear-gradient(top,#e28e8a,#802420);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e28e8a),to(#802420));background-image:-webkit-linear-gradient(top,#e28e8a,#802420);background-image:-o-linear-gradient(top,#e28e8a,#802420);background-image:linear-gradient(to bottom,#e28e8a,#802420);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe28e8a', endColorstr='#ff802420', GradientType=0)}#navbar .navbar-inner.red .brand,#navbar .navbar-inner.red .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red .brand .caret,#navbar .navbar-inner.red .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red .brand:focus .caret,#navbar .navbar-inner.red .brand:hover .caret,#navbar .navbar-inner.red .nav>li>a:focus .caret,#navbar .navbar-inner.red .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open>.dropdown-toggle{background-color:#a74f4a;background-image:-moz-linear-gradient(top,#802420,#e28e8a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#802420),to(#e28e8a));background-image:-webkit-linear-gradient(top,#802420,#e28e8a);background-image:-o-linear-gradient(top,#802420,#e28e8a);background-image:linear-gradient(to bottom,#802420,#e28e8a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff802420', endColorstr='#ffe28e8a', GradientType=0)}#navbar .navbar-inner.red.transparent{background-color:rgba(187,100,95,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(226,142,138,.6)),to(rgba(128,36,32,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99e28e8a', endColorstr='#99802420', GradientType=0)}#navbar .navbar-inner.red.transparent .brand,#navbar .navbar-inner.red.transparent .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red.transparent .brand .caret,#navbar .navbar-inner.red.transparent .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red.transparent .brand:focus .caret,#navbar .navbar-inner.red.transparent .brand:hover .caret,#navbar .navbar-inner.red.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.red.transparent .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(167,79,74,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(128,36,32,.6)),to(rgba(226,142,138,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99802420', endColorstr='#99e28e8a', GradientType=0)}#navbar .navbar-inner.orange{background-color:#e39665;background-image:-moz-linear-gradient(top,#f9c3a0,#c2530c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9c3a0),to(#c2530c));background-image:-webkit-linear-gradient(top,#f9c3a0,#c2530c);background-image:-o-linear-gradient(top,#f9c3a0,#c2530c);background-image:linear-gradient(to bottom,#f9c3a0,#c2530c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9c3a0', endColorstr='#ffc2530c', GradientType=0)}#navbar .navbar-inner.orange .brand,#navbar .navbar-inner.orange .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange .brand .caret,#navbar .navbar-inner.orange .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange .brand:focus .caret,#navbar .navbar-inner.orange .brand:hover .caret,#navbar .navbar-inner.orange .nav>li>a:focus .caret,#navbar .navbar-inner.orange .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open>.dropdown-toggle{background-color:#d88047;background-image:-moz-linear-gradient(top,#c2530c,#f9c3a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2530c),to(#f9c3a0));background-image:-webkit-linear-gradient(top,#c2530c,#f9c3a0);background-image:-o-linear-gradient(top,#c2530c,#f9c3a0);background-image:linear-gradient(to bottom,#c2530c,#f9c3a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2530c', endColorstr='#fff9c3a0', GradientType=0)}#navbar .navbar-inner.orange.transparent{background-color:rgba(227,150,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,195,160,.6)),to(rgba(194,83,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9c3a0', endColorstr='#99c2530c', GradientType=0)}#navbar .navbar-inner.orange.transparent .brand,#navbar .navbar-inner.orange.transparent .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange.transparent .brand .caret,#navbar .navbar-inner.orange.transparent .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange.transparent .brand:focus .caret,#navbar .navbar-inner.orange.transparent .brand:hover .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,128,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,83,12,.6)),to(rgba(249,195,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2530c', endColorstr='#99f9c3a0', GradientType=0)}#navbar .navbar-inner.yellow{background-color:#e3d765;background-image:-moz-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f0a0),to(#c2b00c));background-image:-webkit-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-o-linear-gradient(top,#f9f0a0,#c2b00c);background-image:linear-gradient(to bottom,#f9f0a0,#c2b00c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f0a0', endColorstr='#ffc2b00c', GradientType=0)}#navbar .navbar-inner.yellow .brand,#navbar .navbar-inner.yellow .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow .brand .caret,#navbar .navbar-inner.yellow .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow .brand:focus .caret,#navbar .navbar-inner.yellow .brand:hover .caret,#navbar .navbar-inner.yellow .nav>li>a:focus .caret,#navbar .navbar-inner.yellow .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open>.dropdown-toggle{background-color:#d8ca47;background-image:-moz-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2b00c),to(#f9f0a0));background-image:-webkit-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-o-linear-gradient(top,#c2b00c,#f9f0a0);background-image:linear-gradient(to bottom,#c2b00c,#f9f0a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2b00c', endColorstr='#fff9f0a0', GradientType=0)}#navbar .navbar-inner.yellow.transparent{background-color:rgba(227,215,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,240,160,.6)),to(rgba(194,176,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9f0a0', endColorstr='#99c2b00c', GradientType=0)}#navbar .navbar-inner.yellow.transparent .brand,#navbar .navbar-inner.yellow.transparent .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow.transparent .brand .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow.transparent .brand:focus .caret,#navbar .navbar-inner.yellow.transparent .brand:hover .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,202,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,176,12,.6)),to(rgba(249,240,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2b00c', endColorstr='#99f9f0a0', GradientType=0)}#navbar .navbar-inner.green{background-color:#98f064;background-image:-moz-linear-gradient(top,#c8ffa7,#50da00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8ffa7),to(#50da00));background-image:-webkit-linear-gradient(top,#c8ffa7,#50da00);background-image:-o-linear-gradient(top,#c8ffa7,#50da00);background-image:linear-gradient(to bottom,#c8ffa7,#50da00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8ffa7', endColorstr='#ff50da00', GradientType=0)}#navbar .navbar-inner.green .brand,#navbar .navbar-inner.green .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green .brand .caret,#navbar .navbar-inner.green .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green .brand:focus .caret,#navbar .navbar-inner.green .brand:hover .caret,#navbar .navbar-inner.green .nav>li>a:focus .caret,#navbar .navbar-inner.green .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open>.dropdown-toggle{background-color:#80e943;background-image:-moz-linear-gradient(top,#50da00,#c8ffa7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#50da00),to(#c8ffa7));background-image:-webkit-linear-gradient(top,#50da00,#c8ffa7);background-image:-o-linear-gradient(top,#50da00,#c8ffa7);background-image:linear-gradient(to bottom,#50da00,#c8ffa7);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff50da00', endColorstr='#ffc8ffa7', GradientType=0)}#navbar .navbar-inner.green.transparent{background-color:rgba(152,240,100,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,255,167,.6)),to(rgba(80,218,0,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8ffa7', endColorstr='#9950da00', GradientType=0)}#navbar .navbar-inner.green.transparent .brand,#navbar .navbar-inner.green.transparent .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green.transparent .brand .caret,#navbar .navbar-inner.green.transparent .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green.transparent .brand:focus .caret,#navbar .navbar-inner.green.transparent .brand:hover .caret,#navbar .navbar-inner.green.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.green.transparent .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,233,67,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,218,0,.6)),to(rgba(200,255,167,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9950da00', endColorstr='#99c8ffa7', GradientType=0)}#navbar .navbar-inner.blue{background-color:#2e63cc;background-image:-moz-linear-gradient(top,#4d88ff,#002b80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4d88ff),to(#002b80));background-image:-webkit-linear-gradient(top,#4d88ff,#002b80);background-image:-o-linear-gradient(top,#4d88ff,#002b80);background-image:linear-gradient(to bottom,#4d88ff,#002b80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d88ff', endColorstr='#ff002b80', GradientType=0)}#navbar .navbar-inner.blue .brand,#navbar .navbar-inner.blue .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue .brand .caret,#navbar .navbar-inner.blue .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue .brand:focus .caret,#navbar .navbar-inner.blue .brand:hover .caret,#navbar .navbar-inner.blue .nav>li>a:focus .caret,#navbar .navbar-inner.blue .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open>.dropdown-toggle{background-color:#1f50b3;background-image:-moz-linear-gradient(top,#002b80,#4d88ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#002b80),to(#4d88ff));background-image:-webkit-linear-gradient(top,#002b80,#4d88ff);background-image:-o-linear-gradient(top,#002b80,#4d88ff);background-image:linear-gradient(to bottom,#002b80,#4d88ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff002b80', endColorstr='#ff4d88ff', GradientType=0)}#navbar .navbar-inner.blue.transparent{background-color:rgba(46,99,204,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(77,136,255,.6)),to(rgba(0,43,128,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#994d88ff', endColorstr='#99002b80', GradientType=0)}#navbar .navbar-inner.blue.transparent .brand,#navbar .navbar-inner.blue.transparent .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue.transparent .brand .caret,#navbar .navbar-inner.blue.transparent .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue.transparent .brand:focus .caret,#navbar .navbar-inner.blue.transparent .brand:hover .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(31,80,179,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(0,43,128,.6)),to(rgba(77,136,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99002b80', endColorstr='#994d88ff', GradientType=0)}#navbar .navbar-inner.violet{background-color:#9864f0;background-image:-moz-linear-gradient(top,#c8a7ff,#5000da);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8a7ff),to(#5000da));background-image:-webkit-linear-gradient(top,#c8a7ff,#5000da);background-image:-o-linear-gradient(top,#c8a7ff,#5000da);background-image:linear-gradient(to bottom,#c8a7ff,#5000da);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8a7ff', endColorstr='#ff5000da', GradientType=0)}#navbar .navbar-inner.violet .brand,#navbar .navbar-inner.violet .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet .brand .caret,#navbar .navbar-inner.violet .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet .brand:focus .caret,#navbar .navbar-inner.violet .brand:hover .caret,#navbar .navbar-inner.violet .nav>li>a:focus .caret,#navbar .navbar-inner.violet .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open>.dropdown-toggle{background-color:#8043e9;background-image:-moz-linear-gradient(top,#5000da,#c8a7ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5000da),to(#c8a7ff));background-image:-webkit-linear-gradient(top,#5000da,#c8a7ff);background-image:-o-linear-gradient(top,#5000da,#c8a7ff);background-image:linear-gradient(to bottom,#5000da,#c8a7ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5000da', endColorstr='#ffc8a7ff', GradientType=0)}#navbar .navbar-inner.violet.transparent{background-color:rgba(152,100,240,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,167,255,.6)),to(rgba(80,0,218,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8a7ff', endColorstr='#995000da', GradientType=0)}#navbar .navbar-inner.violet.transparent .brand,#navbar .navbar-inner.violet.transparent .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet.transparent .brand .caret,#navbar .navbar-inner.violet.transparent .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet.transparent .brand:focus .caret,#navbar .navbar-inner.violet.transparent .brand:hover .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,67,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,0,218,.6)),to(rgba(200,167,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#995000da', endColorstr='#99c8a7ff', GradientType=0)}#navbar .navbar-inner.black{background-color:#4f4f4f;background-image:-moz-linear-gradient(top,#787878,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#787878),to(#121212));background-image:-webkit-linear-gradient(top,#787878,#121212);background-image:-o-linear-gradient(top,#787878,#121212);background-image:linear-gradient(to bottom,#787878,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff787878', endColorstr='#ff121212', GradientType=0)}#navbar .navbar-inner.black .brand,#navbar .navbar-inner.black .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black .brand .caret,#navbar .navbar-inner.black .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black .brand:focus .caret,#navbar .navbar-inner.black .brand:hover .caret,#navbar .navbar-inner.black .nav>li>a:focus .caret,#navbar .navbar-inner.black .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open>.dropdown-toggle{background-color:#3b3b3b;background-image:-moz-linear-gradient(top,#121212,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#787878));background-image:-webkit-linear-gradient(top,#121212,#787878);background-image:-o-linear-gradient(top,#121212,#787878);background-image:linear-gradient(to bottom,#121212,#787878);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212', endColorstr='#ff787878', GradientType=0)}#navbar .navbar-inner.black.transparent{background-color:rgba(79,79,79,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(120,120,120,.6)),to(rgba(18,18,18,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99787878', endColorstr='#99121212', GradientType=0)}#navbar .navbar-inner.black.transparent .brand,#navbar .navbar-inner.black.transparent .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black.transparent .brand .caret,#navbar .navbar-inner.black.transparent .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black.transparent .brand:focus .caret,#navbar .navbar-inner.black.transparent .brand:hover .caret,#navbar .navbar-inner.black.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.black.transparent .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(59,59,59,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(18,18,18,.6)),to(rgba(120,120,120,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99121212', endColorstr='#99787878', GradientType=0)}#navbar .navbar-inner.white{background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#fff,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#fff,#c8c8c8);background-image:-o-linear-gradient(top,#fff,#c8c8c8);background-image:linear-gradient(to bottom,#fff,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffc8c8c8', GradientType=0)}#navbar .navbar-inner.white .brand,#navbar .navbar-inner.white .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white .brand .caret,#navbar .navbar-inner.white .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white .brand:focus .caret,#navbar .navbar-inner.white .brand:hover .caret,#navbar .navbar-inner.white .nav>li>a:focus .caret,#navbar .navbar-inner.white .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open>.dropdown-toggle{background-color:#dedede;background-image:-moz-linear-gradient(top,#c8c8c8,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8c8c8),to(#fff));background-image:-webkit-linear-gradient(top,#c8c8c8,#fff);background-image:-o-linear-gradient(top,#c8c8c8,#fff);background-image:linear-gradient(to bottom,#c8c8c8,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8c8c8', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.white.transparent{background-color:rgba(233,233,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(200,200,200,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99c8c8c8', GradientType=0)}#navbar .navbar-inner.white.transparent .brand,#navbar .navbar-inner.white.transparent .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white.transparent .brand .caret,#navbar .navbar-inner.white.transparent .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white.transparent .brand:focus .caret,#navbar .navbar-inner.white.transparent .brand:hover .caret,#navbar .navbar-inner.white.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.white.transparent .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(222,222,222,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,200,200,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8c8c8', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner .brand span{background-size:20px 20px;background-position:left center;padding-left:24px;background-repeat:no-repeat}.octoprint-container{margin-top:20px}.octoprint-container .tab-content{padding:9px 15px;border-left:1px solid #DDD;border-right:1px solid #DDD;border-bottom:1px solid #DDD;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.octoprint-container .nav{margin-bottom:0}.octoprint-container .tab-content h1{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #E5E5E5;font-weight:400}.octoprint-container .accordion-heading .accordion-heading-button{float:right}.octoprint-container .accordion-heading .accordion-heading-button a{display:inline-block;padding:8px 15px;font-size:14px;line-height:20px;color:#000;text-decoration:none;background:0 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.octoprint-container .accordion-heading a.accordion-toggle{display:inline-block}.octoprint-container .accordion-heading [class*=" icon-"],.octoprint-container .accordion-heading [class^=icon-]{color:#000}.print-control .btn{padding-left:4px;padding-right:4px}.upload-buttons .btn{margin-right:0}table{table-layout:fixed}table .popover-title{text-overflow:ellipsis;word-break:break-all}table td,table th{overflow:hidden}table td.gcode_files_name,table th.gcode_files_name{text-overflow:ellipsis;text-align:left;white-space:nowrap}table td.gcode_files_action,table th.gcode_files_action{width:90px;text-align:center;white-space:nowrap}table td.gcode_files_action a,table th.gcode_files_action a{text-decoration:none;color:#000}table td.gcode_files_action a.disabled,table th.gcode_files_action a.disabled{color:#ccc;cursor:default}table td.timelapse_files_name,table td.timelapse_unrendered_name,table th.timelapse_files_name,table th.timelapse_unrendered_name{text-overflow:ellipsis;text-align:left}table td.timelapse_files_size,table td.timelapse_unrendered_size,table th.timelapse_files_size,table th.timelapse_unrendered_size{text-align:right;width:55px}table td.timelapse_unrendered_count,table th.timelapse_unrendered_count{text-align:right;width:45px}table td.timelapse_files_action,table td.timelapse_unrendered_action,table th.timelapse_files_action,table th.timelapse_unrendered_action{width:45px;text-align:center;white-space:nowrap}table td.timelapse_files_action a,table td.timelapse_unrendered_action a,table th.timelapse_files_action a,table th.timelapse_unrendered_action a{text-decoration:none;color:#000}table td.timelapse_files_action a.disabled,table td.timelapse_unrendered_action a.disabled,table th.timelapse_files_action a.disabled,table th.timelapse_unrendered_action a.disabled{color:#ccc;cursor:default}table td.settings_users_name,table th.settings_users_name{text-overflow:ellipsis;text-align:left}table td.settings_users_active,table td.settings_users_admin,table th.settings_users_active,table th.settings_users_admin{text-align:center;width:55px}table td.settings_users_actions,table th.settings_users_actions{width:60px;text-align:center;white-space:nowrap}table td.settings_users_actions a,table th.settings_users_actions a{text-decoration:none;color:#000}table td.settings_users_actions a.disabled,table th.settings_users_actions a.disabled{color:#ccc;cursor:default}table td.settings_logs_name,table th.settings_logs_name{text-overflow:ellipsis;text-align:left}table td.settings_logs_size,table th.settings_logs_size{text-align:right;width:70px}table td.settings_logs_date,table th.settings_logs_date{text-align:left;width:130px}table td.settings_logs_action,table th.settings_logs_action{width:70px;text-align:center;white-space:nowrap}table td.settings_logs_action a,table th.settings_logs_action a{text-decoration:none;color:#000}table td.settings_logs_action a.disabled,table th.settings_logs_action a.disabled{color:#ccc;cursor:default}table td.settings_printerProfiles_profiles_name,table th.settings_printerProfiles_profiles_name{text-overflow:ellipsis;text-align:left}table td.settings_printerProfiles_profiles_model,table th.settings_printerProfiles_profiles_model{text-align:left;width:250px}table td.settings_printerProfiles_profiles_action,table th.settings_printerProfiles_profiles_action{width:80px;text-align:center;white-space:nowrap}table td.settings_printerProfiles_profiles_action a,table th.settings_printerProfiles_profiles_action a{text-decoration:none;color:#000}table td.settings_printerProfiles_profiles_action a.disabled,table th.settings_printerProfiles_profiles_action a.disabled{color:#ccc;cursor:default}#temperature-graph{height:350px;width:100%;background-image:url(../img/graph-background.png);background-position:center;background-repeat:no-repeat}.tab-content,.tab-pane{overflow:visible}.tempInput{width:50px}#speed_fill,#speed_innerWall,#speed_outerWall,#speed_support,#temp_newBedTemp,#temp_newTemp,#webcam_timelapse_fps,#webcam_timelapse_interval,#webcam_timelapse_postRoll{text-align:right}ul.dropdown-menu li a{cursor:pointer}#connection_baudrates,#connection_ports,#connection_printers{width:100%}#offline_overlay,#reloadui_overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:none}#offline_overlay{z-index:10002}#reloadui_overlay{z-index:10001}#offline_overlay_background,#reloadui_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#offline_overlay_wrapper,#reloadui_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#offline_overlay_wrapper .container,#reloadui_overlay_wrapper .container{margin:auto}#webcam_container{width:100%;position:relative;outline:0}#webcam_container .flipH{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1)}#webcam_container .flipV{-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1)}#webcam_container .flipH.flipV{-webkit-transform:scaleX(-1) scaleY(-1);-moz-transform:scaleX(-1) scaleY(-1);-ms-transform:scaleX(-1) scaleY(-1)}#webcam_container .rotate90{transform:rotate(-90deg)}#webcam_container .keycontrol_overlay{position:absolute;left:10px;right:10px;bottom:10px;background:rgba(0,0,0,.5);font-size:85%;color:#fff;padding:0}#webcam_container .keycontrol_overlay kbd{border:1px solid #eee;border-radius:3px;margin-left:2px;margin-right:2px;font-size:90%;padding:2px;min-width:1em}#webcam_container .keycontrol_overlay .keycontrol_overlay_heading{position:relative;padding:10px;font-weight:700}#webcam_container .keycontrol_overlay .keycontrol_overlay_column{position:relative;width:45%;padding:10px;float:left}#files .gcode_files{padding-right:7px}#files .gcode_files .entry{padding:5px;line-height:20px;border-bottom:1px solid #ddd;position:relative}#files .gcode_files .entry:hover{background-color:#f5f5f5}#files .gcode_files .entry .title{text-overflow:ellipsis;word-break:break-all}#files .gcode_files .entry .additionalInfo,#files .gcode_files .entry .size,#files .gcode_files .entry .uploaded{font-size:85%;color:#999}#files .gcode_files .entry .action-buttons{position:absolute;bottom:5px;right:5px}#files .gcode_files .entry .additionalInfo{padding-bottom:22px}@keyframes highlightframes{0%{background:#ff0}100%{background:0 0}}#files .gcode_files .entry.highlight{animation:highlightframes 2s}#files .upload-buttons{margin-top:10px}#files .form-search{text-align:center;margin-bottom:5px!important}#control{overflow:hidden}#control .jog-panel{float:left;margin-right:19px}#control h1{text-align:left}#control .jog-panel>div{text-align:center}#control .jog-panel>div.distance{text-align:left}#control .jog-panel .slider{margin-bottom:10px}#control .box{width:30px;height:30px;margin-right:10px;margin-bottom:10px;padding-left:8px}#control .control-box{display:block;height:30px;margin-bottom:10px}#control .btn-group{margin-bottom:10px}#control .btn-group.distance>.btn{width:43px;padding:3px 0;height:30px}#control .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#control .custom_section h1{cursor:pointer}#control .custom_section_horizontal>.custom_control{display:inline-block}#control .custom_section_vertical>.custom_control{display:block}#control .custom_control .slider{margin-left:10px;margin-right:10px;margin-bottom:2px}#gcode .progress{width:582px}#gcode .progress .bar{-webkit-transition:width 0s linear;-moz-transition:width 0s linear;-o-transition:width 0s linear;transition:width 0s linear}#gcode .canvas_container{position:relative}#gcode #gcode_layer_slider{position:absolute;right:0;top:0;height:568px;float:right}#gcode #gcode_layer_slider .slider-handle{width:14px;height:14px;margin-left:-3px;margin-top:-7px}#gcode #gcode_command_slider .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#term .terminal{margin-bottom:30px}#term .terminal #terminal-output,#term .terminal #terminal-output-lowfi{min-height:340px;margin-bottom:5px}#term #terminal-sendpanel{text-align:right}#settings_dialog .modal-body #settings_dialog_menu{margin-left:0}#settings_dialog .aboutlink{float:left}#settings_appearance_managelanguagesdialog_emptylist{overflow:hidden;width:100%;height:300px;text-align:center;display:table}#settings_appearance_managelanguagesdialog_emptylist div{display:table-cell;vertical-align:middle}.footer ul{margin:0}.footer ul li{display:inline;margin-left:1em;font-size:85%}.footer ul li:first-child{margin-left:0}.footer ul li a{color:#555}.ui-pnotify .alert a{color:#c09853}.ui-pnotify .alert-danger a,.ui-pnotify .alert-error a{color:#b94a48}.ui-pnotify .alert-success a{color:#468847}.ui-pnotify .alert-info a{color:#3a87ad}.pnotify_additional_info .pnotify_more{font-size:85%}.text-right{text-align:right}.overflow_visible{overflow:visible!important}.border_box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none}textarea.block{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#drop_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;display:none}#drop_overlay.in{display:block}#drop_overlay #drop_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#drop_overlay #drop_overlay_wrapper #drop,#drop_overlay #drop_overlay_wrapper #drop_background{position:absolute;top:0;left:0;margin-left:0;width:100%}#drop_overlay #drop_overlay_wrapper #drop_locally,#drop_overlay #drop_overlay_wrapper #drop_locally_background{position:absolute;top:0;left:50%;margin-left:-50%;width:50%;border-right:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper #drop_sd,#drop_overlay #drop_overlay_wrapper #drop_sd_background{position:absolute;top:0;left:50%;margin-left:0;width:50%;border-left:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper .dropzone{height:100%;z-index:10001;color:#fff;font-size:30px}#drop_overlay #drop_overlay_wrapper .dropzone i{font-size:50px}#drop_overlay #drop_overlay_wrapper .dropzone .text{display:block;text-align:center;line-height:40px;position:absolute;width:100%;bottom:5%;filter:alpha(opacity=100);-moz-opacity:1;-khtml-opacity:1;opacity:1}#drop_overlay #drop_overlay_wrapper .dropzone_background{width:50%;height:100%;background-color:#000;filter:alpha(opacity=25);-moz-opacity:.25;-khtml-opacity:.25;opacity:.25}#drop_overlay #drop_overlay_wrapper .dropzone_background.hover{background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper .dropzone_background.fade{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;opacity:1}.icon-sd-black-14{background:url(../img/icon-sd-black-14.png) 0 3px no-repeat;width:11px;height:17px;display:inline-block!important}.center{float:none;margin-left:auto;margin-right:auto}.ui-pnotify a{text-decoration:underline}.slider .slider-selection{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.slider .slider-selection.active,.slider .slider-selection.disabled,.slider .slider-selection:active,.slider .slider-selection:focus,.slider .slider-selection:hover,.slider .slider-selection[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.slider .slider-selection.active,.slider .slider-selection:active{background-color:#039 \9}.slider.slider-disabled .slider-selection{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-track{background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.slider.slider-disabled .slider-track{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle{display:inline-block;*display:inline;*zoom:1;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);padding:0;margin-bottom:0;opacity:1;filter:alpha(opacity=100)}.slider .slider-handle.active,.slider .slider-handle.disabled,.slider .slider-handle:active,.slider .slider-handle:focus,.slider .slider-handle:hover,.slider .slider-handle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.slider .slider-handle.active,.slider .slider-handle:active{background-color:#ccc \9}.slider .slider-handle:first-child{*margin-left:0}.slider .slider-handle:focus,.slider .slider-handle:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.slider .slider-handle:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.slider .slider-handle.active,.slider .slider-handle:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.slider .slider-handle.disabled,.slider .slider-handle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle.hide{display:none}.slider .slider-handle.round{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.modal.large{width:975px;margin-left:-487px}.full-sized-box{position:absolute;bottom:0;left:0;right:0;top:0;padding:15px}.full-sized-box .row-fluid{height:100%}@media (max-width:979px){.full-sized-box{position:static}}:root .full-sized-box,_::-webkit-full-page-media,_:future{position:static}.scrollable{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.input-append .add-on.add-on-limited,.input-prepend .add-on.add-on-limited{overflow-x:hidden;text-overflow:ellipsis;width:inherit}.control-group.error .input-append .fileinput-button,.control-group.error .input-prepend .fileinput-button{border-color:#b94a48}input[type=number]{text-align:right}.progress-text,.progress-text-centered{position:relative}.progress-text .progress-text-back,.progress-text .progress-text-front,.progress-text-centered .progress-text-back,.progress-text-centered .progress-text-front{white-space:nowrap}.progress-text .progress-text-front,.progress-text-centered .progress-text-front{box-sizing:border-box;padding:0 10px;width:100%;display:block}.progress-text .progress-text-back,.progress-text-centered .progress-text-back{position:absolute;font-size:12px;line-height:20px;display:block;box-sizing:border-box;text-align:center;padding:0 10px}.progress-text .bar,.progress-text-centered .bar{position:absolute;overflow:hidden}.progress-text-centered .progress-text-front{position:absolute;font-size:12px;line-height:20px;display:block;text-align:center;color:#fff}.progress-text-centered .progress-text-back{width:100%} \ No newline at end of file +.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn.active,.btn.disabled,.btn:active,.btn:focus,.btn:hover,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn.active,.btn:active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:focus,.btn:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class*=" icon-"],.btn-large [class^=icon-]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class*=" icon-"],.btn-small [class^=icon-]{margin-top:0}.btn-mini [class*=" icon-"],.btn-mini [class^=icon-]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary.active,.btn-primary:active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning.active,.btn-warning:active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger.active,.btn-danger:active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:focus,.btn-success:hover,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success.active,.btn-success:active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:focus,.btn-info:hover,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info.active,.btn-info:active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:focus,.btn-inverse:hover,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse.active,.btn-inverse:active{background-color:#080808 \9}button.btn,input[type=submit].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type=submit].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type=submit].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type=submit].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:focus,.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover{color:#333;text-decoration:none}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.nowrap{white-space:nowrap}.actioncol{text-align:center;white-space:nowrap}.actioncol a{text-decoration:none;color:#000}.actioncol a.disabled{color:#ccc;cursor:default}#navbar .navbar-inner{background-color:#ebebeb;background-image:-moz-linear-gradient(top,#fff,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#ccc));background-image:-webkit-linear-gradient(top,#fff,#ccc);background-image:-o-linear-gradient(top,#fff,#ccc);background-image:linear-gradient(to bottom,#fff,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffcccccc', GradientType=0)}#navbar .navbar-inner .brand,#navbar .navbar-inner .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner .brand .caret,#navbar .navbar-inner .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner .brand:focus .caret,#navbar .navbar-inner .brand:hover .caret,#navbar .navbar-inner .nav>li>a:focus .caret,#navbar .navbar-inner .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open>.dropdown-toggle{background-color:#e0e0e0;background-image:-moz-linear-gradient(top,#ccc,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(top,#ccc,#fff);background-image:-o-linear-gradient(top,#ccc,#fff);background-image:linear-gradient(to bottom,#ccc,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcccccc', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.transparent{background-color:rgba(235,235,235,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(204,204,204,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(204,204,204,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99cccccc', GradientType=0)}#navbar .navbar-inner.transparent .brand,#navbar .navbar-inner.transparent .nav>li>a{text-shadow:0 1px 0 #ccc;color:#333}#navbar .navbar-inner.transparent .brand .caret,#navbar .navbar-inner.transparent .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner.transparent .brand:focus .caret,#navbar .navbar-inner.transparent .brand:hover .caret,#navbar .navbar-inner.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.transparent .nav>li>a:hover .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(224,224,224,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(204,204,204,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(204,204,204,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99cccccc', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner.red{background-color:#bb645f;background-image:-moz-linear-gradient(top,#e28e8a,#802420);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e28e8a),to(#802420));background-image:-webkit-linear-gradient(top,#e28e8a,#802420);background-image:-o-linear-gradient(top,#e28e8a,#802420);background-image:linear-gradient(to bottom,#e28e8a,#802420);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe28e8a', endColorstr='#ff802420', GradientType=0)}#navbar .navbar-inner.red .brand,#navbar .navbar-inner.red .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red .brand .caret,#navbar .navbar-inner.red .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red .brand:focus .caret,#navbar .navbar-inner.red .brand:hover .caret,#navbar .navbar-inner.red .nav>li>a:focus .caret,#navbar .navbar-inner.red .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open>.dropdown-toggle{background-color:#a74f4a;background-image:-moz-linear-gradient(top,#802420,#e28e8a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#802420),to(#e28e8a));background-image:-webkit-linear-gradient(top,#802420,#e28e8a);background-image:-o-linear-gradient(top,#802420,#e28e8a);background-image:linear-gradient(to bottom,#802420,#e28e8a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff802420', endColorstr='#ffe28e8a', GradientType=0)}#navbar .navbar-inner.red.transparent{background-color:rgba(187,100,95,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(226,142,138,.6)),to(rgba(128,36,32,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(226,142,138,.6),rgba(128,36,32,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99e28e8a', endColorstr='#99802420', GradientType=0)}#navbar .navbar-inner.red.transparent .brand,#navbar .navbar-inner.red.transparent .nav>li>a{text-shadow:0 1px 0 #d86761;color:#f2f2f2}#navbar .navbar-inner.red.transparent .brand .caret,#navbar .navbar-inner.red.transparent .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red.transparent .brand:focus .caret,#navbar .navbar-inner.red.transparent .brand:hover .caret,#navbar .navbar-inner.red.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.red.transparent .nav>li>a:hover .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(167,79,74,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(128,36,32,.6)),to(rgba(226,142,138,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(128,36,32,.6),rgba(226,142,138,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99802420', endColorstr='#99e28e8a', GradientType=0)}#navbar .navbar-inner.orange{background-color:#e39665;background-image:-moz-linear-gradient(top,#f9c3a0,#c2530c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9c3a0),to(#c2530c));background-image:-webkit-linear-gradient(top,#f9c3a0,#c2530c);background-image:-o-linear-gradient(top,#f9c3a0,#c2530c);background-image:linear-gradient(to bottom,#f9c3a0,#c2530c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9c3a0', endColorstr='#ffc2530c', GradientType=0)}#navbar .navbar-inner.orange .brand,#navbar .navbar-inner.orange .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange .brand .caret,#navbar .navbar-inner.orange .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange .brand:focus .caret,#navbar .navbar-inner.orange .brand:hover .caret,#navbar .navbar-inner.orange .nav>li>a:focus .caret,#navbar .navbar-inner.orange .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open>.dropdown-toggle{background-color:#d88047;background-image:-moz-linear-gradient(top,#c2530c,#f9c3a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2530c),to(#f9c3a0));background-image:-webkit-linear-gradient(top,#c2530c,#f9c3a0);background-image:-o-linear-gradient(top,#c2530c,#f9c3a0);background-image:linear-gradient(to bottom,#c2530c,#f9c3a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2530c', endColorstr='#fff9c3a0', GradientType=0)}#navbar .navbar-inner.orange.transparent{background-color:rgba(227,150,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,195,160,.6)),to(rgba(194,83,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,195,160,.6),rgba(194,83,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9c3a0', endColorstr='#99c2530c', GradientType=0)}#navbar .navbar-inner.orange.transparent .brand,#navbar .navbar-inner.orange.transparent .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange.transparent .brand .caret,#navbar .navbar-inner.orange.transparent .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange.transparent .brand:focus .caret,#navbar .navbar-inner.orange.transparent .brand:hover .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:hover .caret{border-bottom-color:#f2d3bf;border-top-color:#f2d3bf}#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,128,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,83,12,.6)),to(rgba(249,195,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,83,12,.6),rgba(249,195,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2530c', endColorstr='#99f9c3a0', GradientType=0)}#navbar .navbar-inner.yellow{background-color:#e3d765;background-image:-moz-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f0a0),to(#c2b00c));background-image:-webkit-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-o-linear-gradient(top,#f9f0a0,#c2b00c);background-image:linear-gradient(to bottom,#f9f0a0,#c2b00c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f0a0', endColorstr='#ffc2b00c', GradientType=0)}#navbar .navbar-inner.yellow .brand,#navbar .navbar-inner.yellow .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow .brand .caret,#navbar .navbar-inner.yellow .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow .brand:focus .caret,#navbar .navbar-inner.yellow .brand:hover .caret,#navbar .navbar-inner.yellow .nav>li>a:focus .caret,#navbar .navbar-inner.yellow .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open>.dropdown-toggle{background-color:#d8ca47;background-image:-moz-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2b00c),to(#f9f0a0));background-image:-webkit-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-o-linear-gradient(top,#c2b00c,#f9f0a0);background-image:linear-gradient(to bottom,#c2b00c,#f9f0a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2b00c', endColorstr='#fff9f0a0', GradientType=0)}#navbar .navbar-inner.yellow.transparent{background-color:rgba(227,215,101,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,240,160,.6)),to(rgba(194,176,12,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(249,240,160,.6),rgba(194,176,12,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9f0a0', endColorstr='#99c2b00c', GradientType=0)}#navbar .navbar-inner.yellow.transparent .brand,#navbar .navbar-inner.yellow.transparent .nav>li>a{text-shadow:0 1px 0 #c2b00c;color:#f2f2f2}#navbar .navbar-inner.yellow.transparent .brand .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a .caret{border-bottom-color:#f2e88d;border-top-color:#f2e88d}#navbar .navbar-inner.yellow.transparent .brand:focus .caret,#navbar .navbar-inner.yellow.transparent .brand:hover .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:hover .caret{border-bottom-color:#f2edbf;border-top-color:#f2edbf}#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.yellow.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(216,202,71,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,176,12,.6)),to(rgba(249,240,160,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(194,176,12,.6),rgba(249,240,160,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2b00c', endColorstr='#99f9f0a0', GradientType=0)}#navbar .navbar-inner.green{background-color:#98f064;background-image:-moz-linear-gradient(top,#c8ffa7,#50da00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8ffa7),to(#50da00));background-image:-webkit-linear-gradient(top,#c8ffa7,#50da00);background-image:-o-linear-gradient(top,#c8ffa7,#50da00);background-image:linear-gradient(to bottom,#c8ffa7,#50da00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8ffa7', endColorstr='#ff50da00', GradientType=0)}#navbar .navbar-inner.green .brand,#navbar .navbar-inner.green .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green .brand .caret,#navbar .navbar-inner.green .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green .brand:focus .caret,#navbar .navbar-inner.green .brand:hover .caret,#navbar .navbar-inner.green .nav>li>a:focus .caret,#navbar .navbar-inner.green .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open>.dropdown-toggle{background-color:#80e943;background-image:-moz-linear-gradient(top,#50da00,#c8ffa7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#50da00),to(#c8ffa7));background-image:-webkit-linear-gradient(top,#50da00,#c8ffa7);background-image:-o-linear-gradient(top,#50da00,#c8ffa7);background-image:linear-gradient(to bottom,#50da00,#c8ffa7);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff50da00', endColorstr='#ffc8ffa7', GradientType=0)}#navbar .navbar-inner.green.transparent{background-color:rgba(152,240,100,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,255,167,.6)),to(rgba(80,218,0,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,255,167,.6),rgba(80,218,0,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8ffa7', endColorstr='#9950da00', GradientType=0)}#navbar .navbar-inner.green.transparent .brand,#navbar .navbar-inner.green.transparent .nav>li>a{text-shadow:0 1px 0 #50da00;color:#333}#navbar .navbar-inner.green.transparent .brand .caret,#navbar .navbar-inner.green.transparent .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green.transparent .brand:focus .caret,#navbar .navbar-inner.green.transparent .brand:hover .caret,#navbar .navbar-inner.green.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.green.transparent .nav>li>a:hover .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,233,67,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,218,0,.6)),to(rgba(200,255,167,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,218,0,.6),rgba(200,255,167,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9950da00', endColorstr='#99c8ffa7', GradientType=0)}#navbar .navbar-inner.blue{background-color:#2e63cc;background-image:-moz-linear-gradient(top,#4d88ff,#002b80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4d88ff),to(#002b80));background-image:-webkit-linear-gradient(top,#4d88ff,#002b80);background-image:-o-linear-gradient(top,#4d88ff,#002b80);background-image:linear-gradient(to bottom,#4d88ff,#002b80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d88ff', endColorstr='#ff002b80', GradientType=0)}#navbar .navbar-inner.blue .brand,#navbar .navbar-inner.blue .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue .brand .caret,#navbar .navbar-inner.blue .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue .brand:focus .caret,#navbar .navbar-inner.blue .brand:hover .caret,#navbar .navbar-inner.blue .nav>li>a:focus .caret,#navbar .navbar-inner.blue .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open>.dropdown-toggle{background-color:#1f50b3;background-image:-moz-linear-gradient(top,#002b80,#4d88ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#002b80),to(#4d88ff));background-image:-webkit-linear-gradient(top,#002b80,#4d88ff);background-image:-o-linear-gradient(top,#002b80,#4d88ff);background-image:linear-gradient(to bottom,#002b80,#4d88ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff002b80', endColorstr='#ff4d88ff', GradientType=0)}#navbar .navbar-inner.blue.transparent{background-color:rgba(46,99,204,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(77,136,255,.6)),to(rgba(0,43,128,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(77,136,255,.6),rgba(0,43,128,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#994d88ff', endColorstr='#99002b80', GradientType=0)}#navbar .navbar-inner.blue.transparent .brand,#navbar .navbar-inner.blue.transparent .nav>li>a{text-shadow:0 1px 0 #1a66ff;color:#f2f2f2}#navbar .navbar-inner.blue.transparent .brand .caret,#navbar .navbar-inner.blue.transparent .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue.transparent .brand:focus .caret,#navbar .navbar-inner.blue.transparent .brand:hover .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:hover .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(31,80,179,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(0,43,128,.6)),to(rgba(77,136,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(0,43,128,.6),rgba(77,136,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99002b80', endColorstr='#994d88ff', GradientType=0)}#navbar .navbar-inner.violet{background-color:#9864f0;background-image:-moz-linear-gradient(top,#c8a7ff,#5000da);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8a7ff),to(#5000da));background-image:-webkit-linear-gradient(top,#c8a7ff,#5000da);background-image:-o-linear-gradient(top,#c8a7ff,#5000da);background-image:linear-gradient(to bottom,#c8a7ff,#5000da);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8a7ff', endColorstr='#ff5000da', GradientType=0)}#navbar .navbar-inner.violet .brand,#navbar .navbar-inner.violet .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet .brand .caret,#navbar .navbar-inner.violet .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet .brand:focus .caret,#navbar .navbar-inner.violet .brand:hover .caret,#navbar .navbar-inner.violet .nav>li>a:focus .caret,#navbar .navbar-inner.violet .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open>.dropdown-toggle{background-color:#8043e9;background-image:-moz-linear-gradient(top,#5000da,#c8a7ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5000da),to(#c8a7ff));background-image:-webkit-linear-gradient(top,#5000da,#c8a7ff);background-image:-o-linear-gradient(top,#5000da,#c8a7ff);background-image:linear-gradient(to bottom,#5000da,#c8a7ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5000da', endColorstr='#ffc8a7ff', GradientType=0)}#navbar .navbar-inner.violet.transparent{background-color:rgba(152,100,240,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,167,255,.6)),to(rgba(80,0,218,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,167,255,.6),rgba(80,0,218,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8a7ff', endColorstr='#995000da', GradientType=0)}#navbar .navbar-inner.violet.transparent .brand,#navbar .navbar-inner.violet.transparent .nav>li>a{text-shadow:0 1px 0 #a774ff;color:#f2f2f2}#navbar .navbar-inner.violet.transparent .brand .caret,#navbar .navbar-inner.violet.transparent .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet.transparent .brand:focus .caret,#navbar .navbar-inner.violet.transparent .brand:hover .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:hover .caret{border-bottom-color:#d3bff5;border-top-color:#d3bff5}#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(128,67,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,0,218,.6)),to(rgba(200,167,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(80,0,218,.6),rgba(200,167,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#995000da', endColorstr='#99c8a7ff', GradientType=0)}#navbar .navbar-inner.black{background-color:#4f4f4f;background-image:-moz-linear-gradient(top,#787878,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#787878),to(#121212));background-image:-webkit-linear-gradient(top,#787878,#121212);background-image:-o-linear-gradient(top,#787878,#121212);background-image:linear-gradient(to bottom,#787878,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff787878', endColorstr='#ff121212', GradientType=0)}#navbar .navbar-inner.black .brand,#navbar .navbar-inner.black .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black .brand .caret,#navbar .navbar-inner.black .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black .brand:focus .caret,#navbar .navbar-inner.black .brand:hover .caret,#navbar .navbar-inner.black .nav>li>a:focus .caret,#navbar .navbar-inner.black .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open>.dropdown-toggle{background-color:#3b3b3b;background-image:-moz-linear-gradient(top,#121212,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#787878));background-image:-webkit-linear-gradient(top,#121212,#787878);background-image:-o-linear-gradient(top,#121212,#787878);background-image:linear-gradient(to bottom,#121212,#787878);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212', endColorstr='#ff787878', GradientType=0)}#navbar .navbar-inner.black.transparent{background-color:rgba(79,79,79,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(120,120,120,.6)),to(rgba(18,18,18,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(120,120,120,.6),rgba(18,18,18,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99787878', endColorstr='#99121212', GradientType=0)}#navbar .navbar-inner.black.transparent .brand,#navbar .navbar-inner.black.transparent .nav>li>a{text-shadow:0 1px 0 #5e5e5e;color:#f2f2f2}#navbar .navbar-inner.black.transparent .brand .caret,#navbar .navbar-inner.black.transparent .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black.transparent .brand:focus .caret,#navbar .navbar-inner.black.transparent .brand:hover .caret,#navbar .navbar-inner.black.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.black.transparent .nav>li>a:hover .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(59,59,59,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(18,18,18,.6)),to(rgba(120,120,120,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(18,18,18,.6),rgba(120,120,120,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99121212', endColorstr='#99787878', GradientType=0)}#navbar .navbar-inner.white{background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#fff,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#fff,#c8c8c8);background-image:-o-linear-gradient(top,#fff,#c8c8c8);background-image:linear-gradient(to bottom,#fff,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffc8c8c8', GradientType=0)}#navbar .navbar-inner.white .brand,#navbar .navbar-inner.white .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white .brand .caret,#navbar .navbar-inner.white .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white .brand:focus .caret,#navbar .navbar-inner.white .brand:hover .caret,#navbar .navbar-inner.white .nav>li>a:focus .caret,#navbar .navbar-inner.white .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open>.dropdown-toggle{background-color:#dedede;background-image:-moz-linear-gradient(top,#c8c8c8,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8c8c8),to(#fff));background-image:-webkit-linear-gradient(top,#c8c8c8,#fff);background-image:-o-linear-gradient(top,#c8c8c8,#fff);background-image:linear-gradient(to bottom,#c8c8c8,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8c8c8', endColorstr='#ffffffff', GradientType=0)}#navbar .navbar-inner.white.transparent{background-color:rgba(233,233,233,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,.6)),to(rgba(200,200,200,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(255,255,255,.6),rgba(200,200,200,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff', endColorstr='#99c8c8c8', GradientType=0)}#navbar .navbar-inner.white.transparent .brand,#navbar .navbar-inner.white.transparent .nav>li>a{text-shadow:0 1px 0 #c8c8c8;color:#333}#navbar .navbar-inner.white.transparent .brand .caret,#navbar .navbar-inner.white.transparent .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white.transparent .brand:focus .caret,#navbar .navbar-inner.white.transparent .brand:hover .caret,#navbar .navbar-inner.white.transparent .nav>li>a:focus .caret,#navbar .navbar-inner.white.transparent .nav>li>a:hover .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open>.dropdown-toggle{background-color:rgba(222,222,222,.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,200,200,.6)),to(rgba(255,255,255,.6))),url(../img/trans-background.png);background-image:-webkit-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:-o-linear-gradient(top,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-image:linear-gradient(to bottom,rgba(200,200,200,.6),rgba(255,255,255,.6)),url(../img/trans-background.png);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8c8c8', endColorstr='#99ffffff', GradientType=0)}#navbar .navbar-inner .brand span{background-size:20px 20px;background-position:left center;padding-left:24px;background-repeat:no-repeat}.octoprint-container{margin-top:20px}.octoprint-container .tab-content{padding:9px 15px;border-left:1px solid #DDD;border-right:1px solid #DDD;border-bottom:1px solid #DDD;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.octoprint-container .nav{margin-bottom:0}.octoprint-container .tab-content h1{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #E5E5E5;font-weight:400}.octoprint-container .accordion-heading .accordion-heading-button{float:right}.octoprint-container .accordion-heading .accordion-heading-button a{display:inline-block;padding:8px 15px;font-size:14px;line-height:20px;color:#000;text-decoration:none;background:0 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.octoprint-container .accordion-heading a.accordion-toggle{display:inline-block}.octoprint-container .accordion-heading [class*=" icon-"],.octoprint-container .accordion-heading [class^=icon-]{color:#000}.print-control .btn{padding-left:4px;padding-right:4px}.upload-buttons .btn{margin-right:0}table{table-layout:fixed}table .popover-title{text-overflow:ellipsis;word-break:break-all}table td,table th{overflow:hidden}table td.gcode_files_name,table th.gcode_files_name{text-overflow:ellipsis;text-align:left;white-space:nowrap}table td.gcode_files_action,table th.gcode_files_action{width:90px;text-align:center;white-space:nowrap}table td.gcode_files_action a,table th.gcode_files_action a{text-decoration:none;color:#000}table td.gcode_files_action a.disabled,table th.gcode_files_action a.disabled{color:#ccc;cursor:default}table td.timelapse_files_name,table td.timelapse_unrendered_name,table th.timelapse_files_name,table th.timelapse_unrendered_name{text-overflow:ellipsis;text-align:left}table td.timelapse_files_size,table td.timelapse_unrendered_size,table th.timelapse_files_size,table th.timelapse_unrendered_size{text-align:right;width:55px}table td.timelapse_unrendered_count,table th.timelapse_unrendered_count{text-align:right;width:45px}table td.timelapse_files_action,table td.timelapse_unrendered_action,table th.timelapse_files_action,table th.timelapse_unrendered_action{width:45px;text-align:center;white-space:nowrap}table td.timelapse_files_action a,table td.timelapse_unrendered_action a,table th.timelapse_files_action a,table th.timelapse_unrendered_action a{text-decoration:none;color:#000}table td.timelapse_files_action a.disabled,table td.timelapse_unrendered_action a.disabled,table th.timelapse_files_action a.disabled,table th.timelapse_unrendered_action a.disabled{color:#ccc;cursor:default}table td.settings_users_name,table th.settings_users_name{text-overflow:ellipsis;text-align:left}table td.settings_users_active,table td.settings_users_admin,table th.settings_users_active,table th.settings_users_admin{text-align:center;width:55px}table td.settings_users_actions,table th.settings_users_actions{width:60px;text-align:center;white-space:nowrap}table td.settings_users_actions a,table th.settings_users_actions a{text-decoration:none;color:#000}table td.settings_users_actions a.disabled,table th.settings_users_actions a.disabled{color:#ccc;cursor:default}table td.settings_logs_name,table th.settings_logs_name{text-overflow:ellipsis;text-align:left}table td.settings_logs_size,table th.settings_logs_size{text-align:right;width:70px}table td.settings_logs_date,table th.settings_logs_date{text-align:left;width:130px}table td.settings_logs_action,table th.settings_logs_action{width:70px;text-align:center;white-space:nowrap}table td.settings_logs_action a,table th.settings_logs_action a{text-decoration:none;color:#000}table td.settings_logs_action a.disabled,table th.settings_logs_action a.disabled{color:#ccc;cursor:default}table td.settings_printerProfiles_profiles_name,table th.settings_printerProfiles_profiles_name{text-overflow:ellipsis;text-align:left}table td.settings_printerProfiles_profiles_model,table th.settings_printerProfiles_profiles_model{text-align:left;width:250px}table td.settings_printerProfiles_profiles_action,table th.settings_printerProfiles_profiles_action{width:80px;text-align:center;white-space:nowrap}table td.settings_printerProfiles_profiles_action a,table th.settings_printerProfiles_profiles_action a{text-decoration:none;color:#000}table td.settings_printerProfiles_profiles_action a.disabled,table th.settings_printerProfiles_profiles_action a.disabled{color:#ccc;cursor:default}#temperature-graph{height:350px;width:100%;background-image:url(../img/graph-background.png);background-position:center;background-repeat:no-repeat}.tab-content,.tab-pane{overflow:visible}.tempInput{width:50px}#speed_fill,#speed_innerWall,#speed_outerWall,#speed_support,#temp_newBedTemp,#temp_newTemp,#webcam_timelapse_fps,#webcam_timelapse_interval,#webcam_timelapse_postRoll{text-align:right}ul.dropdown-menu li a{cursor:pointer}#connection_baudrates,#connection_ports,#connection_printers{width:100%}#offline_overlay,#reloadui_overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:none}#offline_overlay{z-index:10002}#reloadui_overlay{z-index:10001}#offline_overlay_background,#reloadui_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#offline_overlay_wrapper,#reloadui_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#offline_overlay_wrapper .container,#reloadui_overlay_wrapper .container{margin:auto}#webcam_container{width:100%;position:relative;outline:0}#webcam_container .flipH{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1)}#webcam_container .flipV{-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1)}#webcam_container .flipH.flipV{-webkit-transform:scaleX(-1) scaleY(-1);-moz-transform:scaleX(-1) scaleY(-1);-ms-transform:scaleX(-1) scaleY(-1)}#webcam_container .rotate90{transform:rotate(-90deg)}#webcam_container .keycontrol_overlay{position:absolute;left:10px;right:10px;bottom:10px;background:rgba(0,0,0,.5);font-size:85%;color:#fff;padding:0}#webcam_container .keycontrol_overlay kbd{border:1px solid #eee;border-radius:3px;margin-left:2px;margin-right:2px;font-size:90%;padding:2px;min-width:1em}#webcam_container .keycontrol_overlay .keycontrol_overlay_heading{position:relative;padding:10px;font-weight:700}#webcam_container .keycontrol_overlay .keycontrol_overlay_column{position:relative;width:45%;padding:10px;float:left}#state_wrapper hr{margin:5px 0}#files .gcode_files{padding-right:7px}#files .gcode_files .entry{padding:5px;line-height:20px;border-bottom:1px solid #ddd;position:relative}#files .gcode_files .entry:hover{background-color:#f5f5f5}#files .gcode_files .entry .title{text-overflow:ellipsis;word-break:break-all}#files .gcode_files .entry .additionalInfo,#files .gcode_files .entry .size,#files .gcode_files .entry .uploaded{font-size:85%;color:#999}#files .gcode_files .entry .action-buttons{position:absolute;bottom:5px;right:5px}#files .gcode_files .entry .additionalInfo{padding-bottom:22px}@keyframes highlightframes{0%{background:#ff0}100%{background:0 0}}#files .gcode_files .entry.highlight{animation:highlightframes 2s}#files .upload-buttons{margin-top:10px}#files .form-search{text-align:center;margin-bottom:5px!important}#control{overflow:hidden}#control .jog-panel{float:left;margin-right:19px}#control h1{text-align:left}#control .jog-panel>div{text-align:center}#control .jog-panel>div.distance{text-align:left}#control .jog-panel .slider{margin-bottom:10px}#control .box{width:30px;height:30px;margin-right:10px;margin-bottom:10px;padding-left:8px}#control .control-box{display:block;height:30px;margin-bottom:10px}#control .btn-group{margin-bottom:10px}#control .btn-group.distance>.btn{width:43px;padding:3px 0;height:30px}#control .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#control .custom_section h1{cursor:pointer}#control .custom_section_horizontal>.custom_control{display:inline-block}#control .custom_section_vertical>.custom_control{display:block}#control .custom_control .slider{margin-left:10px;margin-right:10px;margin-bottom:2px}#gcode .progress{width:582px}#gcode .progress .bar{-webkit-transition:width 0s linear;-moz-transition:width 0s linear;-o-transition:width 0s linear;transition:width 0s linear}#gcode .canvas_container{position:relative}#gcode #gcode_layer_slider{position:absolute;right:0;top:0;height:568px;float:right}#gcode #gcode_layer_slider .slider-handle{width:14px;height:14px;margin-left:-3px;margin-top:-7px}#gcode #gcode_command_slider .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#term .terminal{margin-bottom:30px}#term .terminal #terminal-output,#term .terminal #terminal-output-lowfi{min-height:340px;margin-bottom:5px}#term #terminal-sendpanel{text-align:right}#settings_dialog .modal-body #settings_dialog_menu{margin-left:0}#settings_dialog .aboutlink{float:left}#settings_appearance_managelanguagesdialog_emptylist{overflow:hidden;width:100%;height:300px;text-align:center;display:table}#settings_appearance_managelanguagesdialog_emptylist div{display:table-cell;vertical-align:middle}.footer ul{margin:0}.footer ul li{display:inline;margin-left:1em;font-size:85%}.footer ul li:first-child{margin-left:0}.footer ul li a{color:#555}.ui-pnotify .alert a{color:#c09853}.ui-pnotify .alert-danger a,.ui-pnotify .alert-error a{color:#b94a48}.ui-pnotify .alert-success a{color:#468847}.ui-pnotify .alert-info a{color:#3a87ad}.pnotify_additional_info .pnotify_more{font-size:85%}.text-right{text-align:right}.overflow_visible{overflow:visible!important}.border_box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none}textarea.block{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#drop_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;display:none}#drop_overlay.in{display:block}#drop_overlay #drop_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#drop_overlay #drop_overlay_wrapper #drop,#drop_overlay #drop_overlay_wrapper #drop_background{position:absolute;top:0;left:0;margin-left:0;width:100%}#drop_overlay #drop_overlay_wrapper #drop_locally,#drop_overlay #drop_overlay_wrapper #drop_locally_background{position:absolute;top:0;left:50%;margin-left:-50%;width:50%;border-right:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper #drop_sd,#drop_overlay #drop_overlay_wrapper #drop_sd_background{position:absolute;top:0;left:50%;margin-left:0;width:50%;border-left:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper .dropzone{height:100%;z-index:10001;color:#fff;font-size:30px}#drop_overlay #drop_overlay_wrapper .dropzone i{font-size:50px}#drop_overlay #drop_overlay_wrapper .dropzone .text{display:block;text-align:center;line-height:40px;position:absolute;width:100%;bottom:5%;filter:alpha(opacity=100);-moz-opacity:1;-khtml-opacity:1;opacity:1}#drop_overlay #drop_overlay_wrapper .dropzone_background{width:50%;height:100%;background-color:#000;filter:alpha(opacity=25);-moz-opacity:.25;-khtml-opacity:.25;opacity:.25}#drop_overlay #drop_overlay_wrapper .dropzone_background.hover{background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper .dropzone_background.fade{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;opacity:1}.icon-sd-black-14{background:url(../img/icon-sd-black-14.png) 0 3px no-repeat;width:11px;height:17px;display:inline-block!important}.center{float:none;margin-left:auto;margin-right:auto}.ui-pnotify a{text-decoration:underline}.slider .slider-selection{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.slider .slider-selection.active,.slider .slider-selection.disabled,.slider .slider-selection:active,.slider .slider-selection:focus,.slider .slider-selection:hover,.slider .slider-selection[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.slider .slider-selection.active,.slider .slider-selection:active{background-color:#039 \9}.slider.slider-disabled .slider-selection{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-track{background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.slider.slider-disabled .slider-track{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle{display:inline-block;*display:inline;*zoom:1;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;*background-color:#e6e6e6;border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);padding:0;margin-bottom:0;opacity:1;filter:alpha(opacity=100)}.slider .slider-handle.active,.slider .slider-handle.disabled,.slider .slider-handle:active,.slider .slider-handle:focus,.slider .slider-handle:hover,.slider .slider-handle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.slider .slider-handle.active,.slider .slider-handle:active{background-color:#ccc \9}.slider .slider-handle:first-child{*margin-left:0}.slider .slider-handle:focus,.slider .slider-handle:hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.slider .slider-handle:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.slider .slider-handle.active,.slider .slider-handle:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.slider .slider-handle.disabled,.slider .slider-handle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle.hide{display:none}.slider .slider-handle.round{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.modal.large{width:975px;margin-left:-487px}.full-sized-box{position:absolute;bottom:0;left:0;right:0;top:0;padding:15px}.full-sized-box .row-fluid{height:100%}@media (max-width:979px){.full-sized-box{position:static}}:root .full-sized-box,_::-webkit-full-page-media,_:future{position:static}.scrollable{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.input-append .add-on.add-on-limited,.input-prepend .add-on.add-on-limited{overflow-x:hidden;text-overflow:ellipsis;width:inherit}.control-group.error .input-append .fileinput-button,.control-group.error .input-prepend .fileinput-button{border-color:#b94a48}input[type=number]{text-align:right}.progress-text,.progress-text-centered{position:relative}.progress-text .progress-text-back,.progress-text .progress-text-front,.progress-text-centered .progress-text-back,.progress-text-centered .progress-text-front{white-space:nowrap}.progress-text .progress-text-front,.progress-text-centered .progress-text-front{box-sizing:border-box;padding:0 10px;width:100%;display:block}.progress-text .progress-text-back,.progress-text-centered .progress-text-back{position:absolute;font-size:12px;line-height:20px;display:block;box-sizing:border-box;text-align:center;padding:0 10px}.progress-text .bar,.progress-text-centered .bar{position:absolute;overflow:hidden}.progress-text-centered .progress-text-front{position:absolute;font-size:12px;line-height:20px;display:block;text-align:center;color:#fff}.progress-text-centered .progress-text-back{width:100%} \ No newline at end of file diff --git a/src/octoprint/static/less/octoprint.less b/src/octoprint/static/less/octoprint.less index db585aec..4e0aec8f 100644 --- a/src/octoprint/static/less/octoprint.less +++ b/src/octoprint/static/less/octoprint.less @@ -513,6 +513,14 @@ ul.dropdown-menu li a { } } +/** State sidebar panel */ + +#state_wrapper { + hr { + margin: 5px 0; + } +} + /** GCODE file manager */ #files { diff --git a/src/octoprint/templates/sidebar/state.jinja2 b/src/octoprint/templates/sidebar/state.jinja2 index d21426cd..b17eb07c 100644 --- a/src/octoprint/templates/sidebar/state.jinja2 +++ b/src/octoprint/templates/sidebar/state.jinja2 @@ -1,10 +1,12 @@ {{ _('Machine State') }}:
+
{{ _('File') }}:  (SD)
{{ _('Timelapse') }}:

{{ _('Approx. Total Print Time') }}:
+
{{ _('Print Time') }}:
{{ _('Print Time Left') }}:
{{ _('Printed') }}:
From f9cb29ac910d7268637c114cd0f3c91f5eae39f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 28 Jul 2016 09:43:41 +0200 Subject: [PATCH 21/26] A bunch of documentation fixes and updates --- docs/api/fileops.rst | 5 +- docs/configuration/config_yaml.rst | 108 ++++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 5 deletions(-) diff --git a/docs/api/fileops.rst b/docs/api/fileops.rst index 136b1a3f..7cadb8c4 100644 --- a/docs/api/fileops.rst +++ b/docs/api/fileops.rst @@ -390,8 +390,9 @@ Issue a file command } - :param target: The target location on which to delete the file, either ``local`` (for OctoPrint's ``uploads`` - folder) or ``sdcard`` for the printer's SD card (if available) + :param target: The target location on which the file to send the command for is located, either + ``local`` (for OctoPrint's ``uploads`` folder) or ``sdcard`` for the printer's SD card + (if available) :param filename: The filename of the file for which to issue the command :json string command: The command to issue for the file, currently only ``select`` is supported :json boolean print: ``select`` and ``slice`` command: Optional, whether to start printing the file directly after selection diff --git a/docs/configuration/config_yaml.rst b/docs/configuration/config_yaml.rst index a0aad14b..7c885e84 100644 --- a/docs/configuration/config_yaml.rst +++ b/docs/configuration/config_yaml.rst @@ -244,6 +244,9 @@ The following settings are only relevant to you if you want to do OctoPrint deve # be fully rerendered on request to / on the server. enabled: true + # Whether to enable the preemptive cache + preemptive: true + # Settings for stylesheet preference. OctoPrint will prefer to use the stylesheet type # specified here. Usually (on a production install) that will be the compiled css (default). # Developers may specify less here too. @@ -260,6 +263,9 @@ The following settings are only relevant to you if you want to do OctoPrint deve # set to false, no minification will take place either. minify: true + # Whether to delete generated web assets on server startup (forcing a regeneration) + clean_on_startup: true + # Settings for the virtual printer virtualPrinter: @@ -321,6 +327,10 @@ The following settings are only relevant to you if you want to do OctoPrint deve # < ok T0:34.3/220.0 T1:23.5/0.0 B:43.2/0.0 repetierStyleTargetTemperature: false + # If enabled, uses repetier style resends, sending multiple resends for the same line + # to make sure nothing gets lost on the line + repetierStyleResends: false + # If enabled, reports the first extruder in M105 responses as T instead of T0 # # True: > M105 @@ -348,9 +358,54 @@ The following settings are only relevant to you if you want to do OctoPrint deve # side will block rxBuffer: 64 - # Size of + # Size of simulated command buffer commandBuffer: 4 + # Whether to support the M112 command with simulated kill + supportM112: true + + # Whether to send messages received via M117 back as "echo:" lines + echoOnM117: true + + # Whether to simulate broken M29 behaviour (missing ok after response) + brokenM29: true + +.. _sec-configuration-config_yaml-estimation: + +Estimation +---------- + +The following settings provide parameters for estimators within OctoPrint. Currently only +the estimation of the left print time during an active job utilizes this section. + +.. code-block:: yaml + + estimation: + # Parameters for the print time estmation during an ongoing print job + printTime: + # Until which percentage to do a weighted mixture of statistical duration (analysis or + # past prints) with the result from the calculated estimate if that's already available. + # Utilized to compensate for the fact that the earlier in a print job, the least accuracy + # even a stable calculated estimate provides. + statsWeighingUntil: 0.5 + + # Range the assumed percentage (based on current estimated statistical, calculated or mixed + # total vs elapsed print time so far) needs to be around the actual percentage for the + # result to be used + validityRange: 0.15 + + # If no estimate could be calculated until this percentage and no statistical data is available, + # use dumb linear estimate + forceDumbFromPercent: 0.3 + + # If no estimate could be calculated until this many minutes into the print and no statistical + # data is available, use dumb linear estimate + forceDumbAfterMin: 30 + + # Average fluctuation between individual calculated estimates to consider in stable range. Seconds + # of difference. + stableThreshold: 60 + .. _sec-configuration-config_yaml-events: Events @@ -454,6 +509,16 @@ Use the following settings to enable or disable OctoPrint features: # Whether to enable the keyboard control feature in the control tab keyboardControl: true + # Whether to actively poll the watched folder (true) or to rely on the OS's file system + # notifications instead (false) + pollWatched: false + + # Whether to ignore identical resends from the printer (true, repetier) or not (false) + ignoreIdenticalResends: false + + # If ignoredIdenticalResends is true, how many consecutive identical resends to ignore + identicalResendsCount: 7 + .. _sec-configuration-config_yaml-folder: Folder @@ -640,8 +705,24 @@ Use the following settings to configure the serial connection to the printer: # Command to send in order to initiate a handshake with the printer. # Defaults to "M110 N0" which simply resets the line numbers in the firmware and which # should be acknowledged with a simple "ok". - helloCommand: - - M110 N0 + helloCommand: M110 N0 + + # Whether to disconnect on errors or not + disconnectOnErrors: true + + # Whether to completely ignore errors from the firmware or not + ignoreErrorsFromFirmware: false + + # Whether to log resends to octoprint.log or not. Invaluable debug tool without performance + # impact, leave on if possible please + logResends: true + + # Whether to support resends without follow-up ok or not + supportResendsWithoutOk: false + + # Whether to "manually" trigger an ok for M29 (a lot of versions of this command are buggy and + # the responds skips on the ok) + triggerOkForM29: true .. _sec-configuration-config_yaml-server: @@ -736,6 +817,27 @@ Use the following settings to configure the server: # Command to shut down the system OctoPrint is running on, defaults to being unset systemShutdownCommand: sudo shutdown -h now + # Settings of when to display what disk space warning + diskspace: + + # Threshold (bytes) after which to consider disk space becoming sparse, + # defaults to 500MB + warning: 63488000 + + # Threshold (bytes) after which to consider disk space becoming critical, + # defaults to 200MB + critical: 209715200 + + # Configuration of the preemptive cache + preemptiveCache: + + # which server paths to exclude from the preemptive cache + exceptions: + - /some/path + + # How many days to leave unused entries in the preemptive cache config + until: 7 + .. note:: From 046536dd70c8d2d4dd8f2599335b0f7efce41b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 28 Jul 2016 11:18:57 +0200 Subject: [PATCH 22/26] If a line is filtered while printing, read next line to continue sending We want to make sure that while printing we always continue sending something, either from the command queue or the printed file. --- src/octoprint/util/comm.py | 44 +++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index e1339e71..e03a126f 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -332,6 +332,10 @@ class MachineCom(object): def __del__(self): self.close() + @property + def _active(self): + return self._monitoring_active and self._send_queue_active + ##~~ internal state management def _changeState(self, newState): @@ -1361,11 +1365,25 @@ class MachineCom(object): self._serial.timeout = settings().getFloat(["serial", "timeout", "communication"]) def _continue_sending(self): - if self._state == self.STATE_PRINTING: - if not self._sendFromQueue() and not self.isSdPrinting(): - self._sendNext() - elif self._state == self.STATE_OPERATIONAL or self._state == self.STATE_PAUSED: - self._sendFromQueue() + while self._active: + + if self._state == self.STATE_OPERATIONAL or self._state == self.STATE_PAUSED or self.isSdPrinting(): + # just send stuff from the command queue and be done with it + return self._sendFromQueue() + + elif self._state == self.STATE_PRINTING: + # we are printing, we really want to send either something from the command + # queue or the next line from our file, so we only return here if we actually DO + # send something + if self._sendFromQueue(): + # we found something in the queue to send + return True + + elif self._sendNext(): + # we sent the next line from the file + return True + + self._logger.debug("No command sent on ok while printing, doing another iteration") def _process_registered_message(self, line, feedback_matcher, feedback_controls, feedback_errors): feedback_match = feedback_matcher.search(line) @@ -1660,10 +1678,20 @@ class MachineCom(object): def _sendNext(self): with self._sendNextLock: - line = self._getNext() - if line is not None: - self._sendCommand(line) + while self._active: + # we loop until we've actually enqueued a line for sending + line = self._getNext() + if line is None: + # end of file, return false + return False + + result = self._sendCommand(line) self._callback.on_comm_progress() + if result: + # line sent, return true + return True + + self._logger.debug("Command \"{}\" from file not enqueued, doing another iteration".format(line)) def _handleResendRequest(self, line): try: From bd352f46582027c6c88615b019d0126dc026ceea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 28 Jul 2016 11:30:23 +0200 Subject: [PATCH 23/26] Make sure to clear_to_send in timeout handling for active resends --- src/octoprint/util/comm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index e03a126f..8fb0bf23 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -1321,7 +1321,7 @@ class MachineCom(object): elif self._resendActive: # resend active, resend same command instead of triggering a new one - message = "Communication timeout while printing and during an active resend, resending same line again to trigger response from printer." + message = "Communication timeout during an active resend, resending same line again to trigger response from printer." self._logger.info(message) self._log(message + " " + general_message) if self._resendSameCommand(): @@ -1779,7 +1779,7 @@ class MachineCom(object): self._handle_ok() def _resendSameCommand(self): - self._resendNextCommand(again=True) + return self._resendNextCommand(again=True) def _resendNextCommand(self, again=False): self._lastCommError = None From f6710065822ab9875443f2fa8a03bb70b5cfb0cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 28 Jul 2016 11:37:27 +0200 Subject: [PATCH 24/26] Use circle instead of info symbol for print time left quality indicator --- src/octoprint/templates/sidebar/state.jinja2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/octoprint/templates/sidebar/state.jinja2 b/src/octoprint/templates/sidebar/state.jinja2 index b17eb07c..a910caee 100644 --- a/src/octoprint/templates/sidebar/state.jinja2 +++ b/src/octoprint/templates/sidebar/state.jinja2 @@ -8,7 +8,7 @@ {{ _('Approx. Total Print Time') }}:

{{ _('Print Time') }}:
-{{ _('Print Time Left') }}:
+{{ _('Print Time Left') }}:
{{ _('Printed') }}:
From 14969e5508b7b66f38abaf0f96bb7dc5b9ebe929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 28 Jul 2016 12:15:22 +0200 Subject: [PATCH 25/26] Preparing release of 1.2.14 --- CHANGELOG.md | 37 ++ SUPPORTERS.md | 25 +- .../translations/de/LC_MESSAGES/messages.mo | Bin 63608 -> 65610 bytes .../translations/de/LC_MESSAGES/messages.po | 394 ++++++++++-------- translations/de/LC_MESSAGES/messages.mo | Bin 63608 -> 65610 bytes translations/de/LC_MESSAGES/messages.po | 346 ++++++++------- translations/messages.pot | 333 ++++++++------- 7 files changed, 646 insertions(+), 489 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c39f0061..ba06b09b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,42 @@ # OctoPrint Changelog +## 1.2.14 (2016-07-28) + +### Improvements + + * [#935](https://github.com/foosel/OctoPrint/issues/935) - Support alternative source file types and target extensions in [SlicerPlugins](http://docs.octoprint.org/en/master/plugins/mixins.html#slicerplugin). + * [#1393](https://github.com/foosel/OctoPrint/issues/1393) - Added dedicated sub commands on the job API to pause and resume a print job (instead of only offering a toggle option). + * Better "upload error" message with a list of supported extensions (instead of hardcoded ones) + * Use fuzzy times for print time estimation from GCODE analysis + * Allow M23 "File opened" response with no filename (RepRapPro) + * Allow intermediary startup page to forward query parameters and fragments from initial call to actual web frontend + * More error resilience when rendering templates (e.g. from plugins) + * Make sure that all bytes of a line to send to the printer have actually been sent + * "Tickle" printer when encountering a communication timeout while idle + * Report `CLOSED`/`CLOSED_WITH_ERROR` states as "Offline" in frontend for more consistency with startup `NONE` state which already was reported as "Offline" + * Another attempt at a saner print time estimation: Force linear (way less accurate) estimate if calculation of more accurate version takes too long, sanity check calculated estimate and use linear estimate if it looks wrong, improved threshold values for calculation. Read [the second half of this post on the mailing list](https://groups.google.com/forum/#!msg/octoprint/WWpm1FCUkAs/X3HomTM5DgAJ) on why accurate print time estimation is so difficult to achieve. + * Display print job progress percentage on progress bar. + * Added an indicator for print time left prediction accuracy and explanation of its origin as tooltip. + * Improved visual distinction of "State" sidebar panel info clusters. + +### Bug Fixes + + * [#1385](https://github.com/foosel/OctoPrint/issues/1385) - Send all non-protocol messages from printer to clients. + * [#1388](https://github.com/foosel/OctoPrint/issues/1388) - Track consecutive timeouts even when idle and disconnect from printer when it's not responding any longer. + * [#1391](https://github.com/foosel/OctoPrint/issues/1391) - Only use the first value from the X-Scheme header for the reverse proxy setup. Otherwise there could be problems when multiple reverse proxies were configured chained together, each adding their own header to the mix. + * [#1407](https://github.com/foosel/OctoPrint/issues/1407) - If a file is uploaded with the "print" flag set to true, make sure to clear that flag after the print job has been triggered so that now all following uploaded or selected files will start printing on their own. + * [#1409](https://github.com/foosel/OctoPrint/issues/1409) - Don't report a communication timeout after a heatup triggered by a print from SD. + * Fixed scrolling to freshly uploaded files, also now highlighting the file entry for better visibility. + * Fixed overeager preemptive caching of invalid protocols. + * Fix modal background of update confirmation not vanishing + * Ensure log entries and messages from printer are sent to frontend already converted to utf-8. Otherwise even one line in the log that can't be converted automatically without error can cause updates from the backend to not arrive. + * Report correct printer state including error strings even after disconnecting + * While printing, be sure to read the next line from file and send that if the current line was filtered + * Small fixes in the GCODE analysis + * Small fixes in the documentation + +([Commits](https://github.com/foosel/OctoPrint/compare/1.2.13...1.2.14)) + ## 1.2.13 (2016-06-16) ### Bug Fixes diff --git a/SUPPORTERS.md b/SUPPORTERS.md index a49b3375..659d13df 100644 --- a/SUPPORTERS.md +++ b/SUPPORTERS.md @@ -7,34 +7,37 @@ thanks to everyone who contributed! ## Patreon Patrons * 3D Moniak - * alephobjects + * alephobjects * Andrew Moorby * Arnljot Arntsen * Aurelio Bernal Ramírez * Bart Zudell * Brad Jackson + * Brad Mooneyham * Brent Fiegle * Brian E. Tyler * Charles Mitchell * Christian Petropolis - * COLLE+McVOY - * CreativeTools + * COLLE+McVOY + * CreativeTools * D Brian Kimmel * DeltaMaker 3D Printers * Doug Johnson * E3D BigBox * Erik de Bruijn * Ernesto Martinez - * Exovite + * Exovite * Frank Sander - * georgeroblesjr + * georgeroblesjr * Gregor Luetolf + * J. Eckert * Jason Galarneau * Joe Korzeniewski * Joshua Gregory * Kaile Riser * Kale Stedman - * Kevin Freeheart + * Kazuhiro Ogura + * Korneel Bullens * Kyle Gress * Makespace Madrid * Mark Lane @@ -43,18 +46,20 @@ thanks to everyone who contributed! * Masayoshi Mitsui * Michael McDargh * Miguel Angel Salmeron - * Mikey + * Mikey * Miles Flavel * Mohammed Khorakiwala * Noe Ruiz * Paul Generes + * Peter Grace * Peter Schmehl + * PRINT3Dforum.com * Roger Strolz * Roy Cortes * Samer Najia - * SD3D + * SD3D * Shane Ekerbicer - * Simon + * Simon Hallam * Stefan Krister * stefi davis * Steven Pearson @@ -63,4 +68,4 @@ thanks to everyone who contributed! * Thomas Sanladerer * Trent Shumay -and 734 more wonderful people pledging on the [Patreon campaign](https://patreon.com/foosel)! \ No newline at end of file +and 844 more wonderful people pledging on the [Patreon campaign](https://patreon.com/foosel)! \ No newline at end of file diff --git a/src/octoprint/translations/de/LC_MESSAGES/messages.mo b/src/octoprint/translations/de/LC_MESSAGES/messages.mo index bcdcf24a1932c6541ee1052faba8d632b66ffdd3..f2444b45ea8003981df7829ff91827dffe646d15 100644 GIT binary patch delta 12704 zcmcK9d3+Sby2kNNNC;~PVc%N>fe0bMVGB#x_eCIxfFhHmlME!2IGG_3g< zOYE2$71|#k^^nCszDUcejrUek>-T@oUSnCeMOfB3?8P%hjV&vM_T~i3I?Q7cO)YCH zevS8We^oQfszAF#bIWRg{ZZ|Ftb$YB_BJ#aVHW1uQYmbJZvWwmZ; zS&!54`PPwXDThxt(PV#Wl#IR;l)u#p70cjKNMAjXkj>_QzNp>b5-?!}wOV zdm|tHJW%MizeOeEIO@gdWCp>?sDbNX18PpK4|`)Ti|^YNqks&2zPIAnoqx#RpLRoe6QF$RjCzMOYnGbS+Rb?un|6fo^*YYN;|^ zZ^3xlx1k1{g?jH1)UH^J8t`3I4Rq*fp6iRsL}(}%8Xyg$u)u9kL`8TPD&@0LDPM$T zaf9nN)PV1y0{H|rp&zg+M)fiS)k5`iEjGktWFjGJEEjrVJgRu6nGdX;ct7orFd8#^ zo5*u8f_4z=VIgWaJd9epWmpo|qXv8xRa5V{evOH=FJO7?|HM9~XgZ>nU=XUqEY!dO zRL4cA8O_3)xB~V3W{km)u@oLc4SW>!-f7h575bXMs-d2%i)9$!YUJK%i5j2-YAJ@I zQaS<^$T(DOQmIf-=O+Aj%6`nfcd-)D!}fjB^!i;(KmqnvjMD) z+>nv%5v8UVDuBUm`+B#1GmhqdCaS~NP#Jg|=TQ`2qK@WU>HQttg=#On&h&R2b?}_R zzu~h($iEJXgF{RWoX2vs<9JJ{uY;Od5^A7!r~_s&DgX~Q#T>i}=VJnHK&|~($XM1H z)cG)Am^sj9q9*!ah>NjYEWnX?7TK!S^{J+a7GQhY&!D#7m#DSZX{8Qopo*ZiQDdgZD{wz26!7b#wEBM zci>%^e*-^6@H8smnWR+%-|spf)$cN_to^^%{opMu!3Q6rX7Dj;h6m7tKcWtfp`%O& zreO=(_hWl}6?w!uje0+oN{yl@M`AkdF*lm3e+~J1u;SU14=}zpoD0q9YpjXo#+bEi zgetDKSP3&wMK%#jAYRMCEhTAIVCrT7lD6sJ)A#okQ*RsHq3sEaA6 z_86>#x1t`LkLq9*s>AiDVtW;<;cirlkGP&d73X=ZiZNr&ZmNr_u@V8vHAgx?`xDLlb+|NYS$Qo3KZ@TV7W#${yfIp!! z8j)oJs)|f3WYy(D4KZH@Z z8WrG+s0nVt>e~OixzO5wgG$lQu904o;yARqUlSE*2h>sA4>fS6+n$8#=OI)^7NZ7! z5nJJU)brn?med+YAdGLtb1?zyVjez(nsM}a^I$nFq0dpn&D{F z%*Ug?3l^XPc?zR(75)vw7}7vTxX{`h!?GBaW6py(RENz`9i^Z$FaZ5H+P%LE_1q`8 z6OW?$dnwl})!V2Ue}LuiYt&Kyb1wNW&qaBkNm(t_0L@VybVfxy3^n7Cs2QhW3g)8T zUxl%_0f*rZRHo|YnM}4u4n3amy zVv6}&F(f01eJ>Z(gVkcHS?fhun)Y(6hO03Sx1rW}FX|ll8ntBS@LH@e&72n^G3q=-7o-1K%RF(I|cud6xn1yxmUQ|abu_UfT z?ShSH<4#njzDE`BSyb_s{=0cD9{bX^G4wnax)$50)` z&NP{-h6hCO;#`1TYTBwFmwCkV(t$#Q9SE>`ZQ36|IG`7c5 znBv~=gORicxb4BHfrg=$VicxfCaU8%QT@H^`T^FWy$=WANgRpYLid=eeGK*D8>o(V zx$O^70e$A){{pu$)o-yYzHlEIBC?lX5Exw@g(dL8qu|A$eJy?CI`3tBiY8T{V zJ)DJYa5a{}uTTRYM`iK?Y9g`AOd!=Tfp#-&g*RXY#<%X}Le=^hHpEq~@1ZjDE7};l z+_amc2JC^V{=ujv%f@I7;1DcAPHk%^j=|n5_>&%2U^2FRlJ)P+MJ^YLbPaC8jTnVf zo-&!3fjaqCpd#Obn&BzbTE;wW&V!2hH`-TY4BmiMaV#oxg|72Z0k3(Q{M%e?=7utG z2pi)GT#U7!p%C#E)RM%nG=a57Wgr>VQBRDOQYf%U^?IP_Wa zuT)Lt20O;ugDOI2m07bK)WFl-_Hrysdjo1|wqa@f6ieY(sKAb)it@DEF8`c)t~#n_ z>f=2)GQ@>uei+rkFIW*TpgO3y+RUs0YQH9+o=Zl(*BzCyRIGrLu^irqn(3pcB7Oq3 zTh`)LxD(ZX=m#z;a1rreW^F5?UhIh~u7Q}3nOGh_!d-Y6_1ufkn}A-%2-;h*0dB*J z_#M{7^Qg?!c)vJahZERjOt)FD$t{-B|3vDuE?+nv<9l5 zmRJu5qXNuBWvmd@?^KM(Sy)#4{|PP>*>kSzQER#d_2Mp6^?!savXiKR&Y%XU{-QaM zY}aJe50_L_KRKw(O+W>9J3fZX(98H%SI$kHTq{wTVN>i+dk8AP$5AtX3bj2~ zqXK&oHNYO!l6{Vz3R=(owF zYPRd6s0Wr|8kT(3Jm*F2|JB$LH(*0Ng$k_hW|QJJs6aZSc0qrP!<$g4_o0?zN{9=s z-5sbG=DO`AsA5}<>R=7(g>5(--$4c5@HO+?cvJ>%K|Oy5YN;MURr?}T&Afox1?y0m z2))6DX7nj4kRwUcIPvc;&t)}m(g8fpgbqXOKA9{drn!J*sC%qC$9?U|@= zx$PLl65GuZPr}|2jE8yJ|8KoXCGtRr9j5pmL<-dU3>)Hnrcoa^p#nLC*W%BpfbE^; zxg^wfyB_uYSgeOLummo}7<>{-;%cnO_|{r3bi!@N>i7lf#k1G|Yrky<=!#d<&O)u} zJ*bWrVkumXDzfKL?{C5~c);~r)N?0MzlhFbNFCMOWm4A+qiJ_UJ=hJk6#a2HdT>9k z!=^az9ruq>tUc4yR54aauc z|2J}>7al@&^dxG{H{dLM1LxrNADb7yMRj!CZI}AQ3{(LXa8p!&$*9y1z$$nnwm?5> zDVAXj<6G;wP(+(iUn<+(cJ!yF7RsS!Tn}qw6VyPxP#veD0vd;ta2l#s&Y%J)^%*B5 zCth`|K|6&#to}w~NH3;yp_v!qHF!TN!ZoOaX$NX;54-ojM+F>tz!XtwRK}`f7rYu3 zUi$!x`}Gc+`;Vgf*@`#gRbQFUr{QthXR&Go|5yBLb8<$1LqT)DWrzz87fVnbl=#;C z7tEV+IPEaD!qP|0|61*YWZ#;A^Kkfg<|o^C*q3(e@6CT^3t>0fZ{s?Q`++*c?br^d zA2UC}LL0ak#f?%wnl(ztwM6<7>VDo&rdW2MmgIfZnjSzE-#<}HRQ`lHaO$9{KLxMF zA=nfrql)htjK(e4U;BRt7m3`c`mTAW}*UG ziS=+ZD$s*C6o19mIN%p^AWg>_+W$+r&=LAd@eK|VtV{a{CSlA!O^5BU673tX7Up1c zoQbNPmr$Ab95sO-Q4{zlHo(%SOpzvHS=yZ><6C{*8^duRZ4d6i)i@c8e&sJ>JcYCH zyVE9++s>GQXQR&am#`{sMs3%7Cn_@o zF&W38)^t8r$E`R6_oIq0?VQ67eiZ&r5BBs;^&cYGO+FQAtK*^Zr?m*M0zvATJF>nPVd z(ay`XJrf+iC(E$|c>zz3o$1fZwevj%0XyIC^#uxSk1xYc_vD1qgE{U{!GfSChas}^ z@-pm;<6f?3ry!vC9Mh@C=gFB=;Qg(~-#g58GQ7du%XOu|O?;t?0TS`0;n56a(`oVa z>_TrKyLh$*o?OSw!0}^VrZ>m28~?k=H5_v-j*N8w7JuV3rym))%v|-xZ;ut{?zd?Y znHlxZ(|e&)%ZPA~&aXtZo#4swW|*gnBhT|WS`j)epxcQ7$5+7O79`sZ8~@&FQV{lb zUlb9p+Ou?YII&+w*^p;qqMgojPI@rloj{_zxlUe?waW;yhFNw_9{=(OeLgkP^Kx@p z(*kSY6<;gNR<^tuInKX*NJUaJK)-s@o69O*8c6z_h;EfT7TBgkO7}8>*s6$h#hqvm z%<~g{wnr6f3T4ijBD+l>&rWkFHy@7-a{^SVouq$dcndsfIZoo0$F?tyt;zg9^xxoO z|HYeyG+b#6h5MIt2+tngC_21jRHca6U?4vjuzRrvKB_qU$>?(>%MSJAbH|@s=<$c& zOY0X|V_1*kx+$>JCfR;RTa$&)_XM)TRh(aBX11#wGb)(n_hx3!>GDjKaQDYoa@cqsKlL8Wv>i?xzkB95 zKD+B5Po3U`81!b1cf0{R`}JkMtbkn*@c75u6F5Z%>cq*hJ!!>f!ykI&Lk^z|dZt7R z(zAWuKp@APp3Mk7JV7Vqw>gxuJiaVPqxbL!)5nj?ODnL097cMpo8xzQD@Z*z_T~9= zJvolQ(DAZsvVxp9mxT3KV-HIw=0K5p@dVi|blkQ0km9hp+(@~Kl98|6zdNJ!?0=op zm8O*8WwRH!$>JO%lNli=*Di2!(v%L(-SL|v?0+{|1(RkH<#3ePmrR!ft>7>6)Uh}h zmpuP_YMkPadT^?H?Z%f)NciZIVG-f$mM)A=DL&sEmQ+t`W~Q2or|h?TYRLi)2NTQ8 zF%bBdb8h6*5s~5Sl{HI-AAEjsx#Dw7poAmd%H7e7(eB8EYJiFWWh6(~4FHSb!{W(;t$7}~`r_k%?i&$Btd&k#QpP6!Y ztA{U@O#N(7k`wK&Z0jWID^Nt*IkDAKQBXTB+pBc>+ynK`lL`GX?N^))N$E=li-H^l zzKs7|$f5s3%>ToXFI~wi20Z9Lo8)lP##7PZE?Wjg#B~i8WO>q@4DFNRGylG=)k;+u z>f~Q?>^tG5Z*PiB;M_0XPApwMm3{H(&$X}1^blW0hTkdB>FxN!p54_;hG%?uW4UnF N7gOWH$4=Z8_20FU;VJ+C delta 10704 zcmaLc30&31-pBDlHU&gP#lVFlxgZFlCZeghf#$AgS1~ofqmT*)2QyJmW@_a^Y0FJb zaeL5Av(9yEb8Asc&9rW*nPq0#W>#L!rTh6Z|69-VdY;$Q>)zfobLKzuo8Qd*57429 z02_nwIic-rt!el=qn;yra#`|F<-&5fDiXUy}MNuQW_W74VTBp7p^ZmScGc^l`q zGG-C&1CorXMg3H=F-`G1R6U}#G4;@es;6R@F!$d{E1Wl83U-_Kn3L2#TXxkptj^qY=HYvL#7L0Q&!bs}VQ4=mgJ@*Xi^smHacocO8 z?(1p$O+#g3HfsDQQCqdfse3CaD8iknl;oQOlwn2rrsGf&qUPOc@S^Y{a-+#>iS?HAH0kjcn4}_?_&&}LmjSLs7%!F zZ3B!&O&pJUt^)>Re+Z{HQHNwRYT~`9fKH+Y z`Wb`q25Q9teT;b&8{%kOkLl=tmwm7F#Aeh-V;asuulD$L3X1dqDv+bt7*C*5_6uqP zKQ>M)jYefG9u+`))PP-3<4tuwe;7lkm!r0B84ki%k>g}S`jLMX2KKWlT7n8>xl>=` z)HmTM+FwBp7~bDzA{w9JaHODK!S4labubzxS$kb2=Acop^DNE%H3br|{% zwkx^^wFL#JmCZn<{1H^Y<){EQV=LT=P4GM>VDJ!o2HGM`rZ?(+@pr6&C$Ku6!F%z7 zm%>O2eF&e6VAh~gd;$4BF;`I6F(u2Mf&Qog+^BwqSPN%j7%p;LhE-<>LuudawC{3! z2esAS;}kT|C#aQOzzn>M+M2XscAy!k2_D7>EJvlb0&8O>YQSBn3ExEB_d}?0&!W!K zcc^i$A-m}{LBs9JhN4n55j9|`Q=gAo$&;voo^@P<>bDu|;%=w?1o~6|92L+xRKVY0 z4qn4#9Cfz>VgDbe(1wO*Q7J!&+7kc2*#SmN4p}bd(LP~>J;m=KZ(GxV&QIbPY>Jmq z?~8ibc56~lXQdm~!O5sIGaG9#zgbHm5;tQs?!g#5iCW2TsKa;-m2y9>f>K-^>tS8g zzzL{R-4%6xM>+NB*ogYGsD9f}&mTmu2K))-?~-V_^9?}~~z+i@Cd;Ac=1 zZ$jCRwVzK?6)d zWuOcLupHarQ>X_HpjLbe6~GTT6|Z3tP8n}kdKT610{ZK7)Rx{vWwh=DJ6|KL$^0gs zf>xG_T5%@o6*(0Z$Q%sBNAV6^j6t{`wIzp80ey~*@jKLbA^CQk7}OTEz+y~w+Bc$C z9k)|>AKyU@xU|6T(FW8?wxR;shf4WTRI0y0W$X$ngCY0XiRz)oX^INGBUZ9{|25E38WiDb%)+gxlm$$*D{X*WVH1Z#akkTb0z;{v!m5;`0=k9@pynhScpNH# z)~H*MhADX0B=WD6Pp5%xG%q08GZB;Rk4n>!b7WQ`+h_a>?K}QHY(~8t)xHf$o@rQQ ze-D_8s&7WtVxp$l_SvZRji~lW@BR7?yLmVtxDb`X z5r*3;VWq@cYUf{B=i zEwLPH;V#sG2k}lkip?=}mc1QqQJ;4}otZAE@rL0L9FJXbC-%mFVIxc@?GeiTX#U@r zhCJ*R0nm8WsLJz)-Z{qVfiTF{o8W@ zG;vSVIJxKzrZAC$QdWWrWG-qY3sIl@P=UPWe0~W1s2_9c$DR5~r+yl>*XOW3{)#Oy zVXn>aP~>aC6wD?6Z73Y3Ar=3?+c0&WonR0updqLMN1zT>0S00T2H=CJKxd&+J`eTk zeG=90Y1E3BJMHVR8ubnH$iF&nq9F)hLhbE#`24mc#cH9J1y$vd$j!t{Jm%_W`G84OF_~WFA&;~DHK|Jckhv+Le zW)JQ2p0HcedxwI^?3`di>*-^?uFH{AJX4z zhEaHthHTWp!7J_0f}yCDG{Z=|6G!7f)Mn!MoQF#7{iu~ZgbMUAOu$vx4iBL+aSL^L z!&lqyj9AAEtn1~2i4L*0UHYwXHi#YWUW zLj`gj6>#gd_L_G^ZP{S->fUElxC1Al_G~rkO}G)2kv)!|qXM~wE(}>`SC)wJ)H`DZ zx^Wl=t+xSCPz#%b8fWo(@*hZH84bEN71$9E;Xn-dFMC?EP=PJQBwUU|@E~%K zO@m5%xVE6SVjITcdrtjF)Pw;WY=$FH8ECeF{415MX;5TosKeINso#z2n1gyjO~f6z z2DPWz8}0KGQJM6ho}Y(W*mI~eunMc=OQ`2|Vmu!7Ivp;f-tpC5uq&;FI>q%-D@w#B z*c~-N9%|sJs6C#C!T2ib%j(*q&n_^$oii$7> zXJZJiK&_w>^}W6m8{!A3t@{CW*jjA1?Ww5evrqvSVi3+k&Y0KCrJ#scpa$B8x_%#` zBD{8=#$Ie)TdT-QoLr}LN8?`0VQ1i^fVBP=a6ryQZ>-Yw0 zW&cDC^b^*^YpB42Um{p+fd%*$>cy12)gHQqs0_Y@{qO`TK-bH5<%y`<&=wmpzv)0h z6AVXXA`g|S85o8OQGq;%U2!ccGhd?mUBs#kVGHX1udt1nh}r1DzIYVXFUDsBxgEV~ zNN^h3;WX-!qyMuYaK67>dr+v#``TT#D&I{kHb+24{=QMba4Iar1n_!%lwx4&vl zLVex=bMZM;zZw$W{4{F?O9FDnO3W{has^cwG1_Iu&4@9G`OCm;MTh!snz;Nt~%EU<2 zii%Kylp)v4JcfD|S2*?GPyvR$X&2y)rl5#gq9$sCnkWs`u^(!sBTy6Nqb8b#TG8XE zfL5R;T#ZWkPHc`byKSJ|F`fEg?1WEXsqX)K6trjE_i$(Zm=KGoFWqa*-RQs19;R$0 z>t;PR!<_y0aLq>r@&YE}>!^UgLG`FbUN^6*W#*)I$1W5RP)%a}Sb#4K#%Y zU8^$Gg9~vJKIPQA9kK)W!3x@kpq{&o4e=&wYhvEBw!_BM`=chDhzg(>lW{gG@U8EW z|8W!!(9j!`-nRjiq9UJ(dT;?M6U(p$Zblul9T#2(59xQ2QXYNa2bR{9gF-xbvJ;YaNs zIHFKnn~5&WcIw_T3hihpN3Co>>K-3P4fGZ2y4=8;82f=;Q4;EQWTKuMftnx}b%>`r zpD#ge(K?L4y{Pd&L<07jZz-hFa0xYF%VTz+J5hT)2+J`Wm*Pd#N@sm&2bznjuRu+- z78U3otc^#o7M?}jnoHOQgN|zp*#9&NO4R_=K*O;!-s9At!$|5CsFnIq6TN|&=p<_3 zZ%`|{g%4uA6ZUMBqXJlg&3VDSh`N@?KVm%QH$PC&ga5)h82+(+b;e;`>UW_I)fiL& z526B|<9xmV6?g@PVzpLRp`Y5{l6&B2>MK4a|1Bx}PQ%}@=}G(F z`DS1X>Yrdd>Q7ixp(Reo3QWKTr)_&Cs{IXAd)jAqoID&$eK+d!SYDGq<1&n5D;9oE z{#((o_AEb{;s=<6>0j6ZR$~_Ro2ZNo`O@B&N}Nyq6sBR`Ir|D;fzMDc`^x?Z7J1(O ziDncIpnW~|z+Z3&rh32T?o;>?HPD6&_D8BOFq?YvH+HWc!|i@df@**IqCE?jFogQ= zSRVtwvxl(}YOC5|6YPn)4Q@=t2T%+5uB8x7;R6iBi`Wk@VKR39-tOr{)EV)h1}a0{ zibbdtSD+4+`GI!<497U!g7xqi#^ME3pus;@{VCULVkxwzp%`7b0Ts|ejKFhF{a4hR zF8n9^hlnK9fMZaHa2D#tvjkh?7StI!gS9Z|l3hR)Y5|R~sqTMk3gI*i!%)m~EOIQv z0kqG@L--NS#0pN*FWC69eL+Q1Q6Otj6K}`rcm{*<0!HCaPCe*X7Q*}{oPs)}<89a* zmFjzuEjJUK&kLOT{Z73EBlx@wJK;i1#CK8S{DN~Z>^FM|pTLgPPhv9Gy~6%$f}Ru< zKn7~S0jNxjaoX?00P4l46+M7DbPu6FE@~8?JdYcEnu{x8x_!GRNy67jqiH%A(3@* zi%LDFyZ-GOl;FJO<(}qo7nT$h6}sY*C*&24bH}-gify^7u-m6pum&=zn(AgOo~hPb;?-f7n)Z(*X}Sjm^0b!JJoMusPD0n z%>rv=xjmkO!U-j2X<5r?-y35B{Cvm8UJvq}9-mRo*Q4Oafa*o1#d&Um@+B3zLzliV zy+{0iR_k$%D=5h;DlBy8dEDcYT^Ys2Ma7+5&EnlEv@G#0e(;HKU(}=R1KOr0rKGvq zwCR-6E-|HTN=nG!K}kd1Qwy}_q+U55cPCfdls0twv)>)QnG4hEHrl@;*IjI?{{3f? zJtn(!LUFeu_?f}qjIoc?H;A%y!5~4JZR&pKyOvft0pOMO(u!s+{Lbp z|0CgQuS!2DSGjbu%Uw|DR=WS6r*Xa{rHg>ipf@h+z6^JA8YtKOXRJiroFU diff --git a/src/octoprint/translations/de/LC_MESSAGES/messages.po b/src/octoprint/translations/de/LC_MESSAGES/messages.po index 1aaf2389..93701c1b 100644 --- a/src/octoprint/translations/de/LC_MESSAGES/messages.po +++ b/src/octoprint/translations/de/LC_MESSAGES/messages.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: OctoPrint\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2016-06-08 11:03+0200\n" -"PO-Revision-Date: 2016-06-08 11:04+0100\n" +"POT-Creation-Date: 2016-07-28 11:50+0200\n" +"PO-Revision-Date: 2016-07-28 12:03+0100\n" "Last-Translator: Gina Häußge \n" "Language: de\n" "Language-Team: German (http://www.transifex.com/projects/p/octoprint/language/de/)\n" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 2.2.0\n" "X-Generator: Poedit 1.6.8\n" -#: src/octoprint/plugins/announcements/__init__.py:85 +#: src/octoprint/plugins/announcements/__init__.py:89 #: src/octoprint/plugins/announcements/templates/announcements.jinja2:4 #: src/octoprint/plugins/announcements/templates/announcements_navbar.jinja2:1 msgid "Announcements" @@ -56,7 +56,6 @@ msgstr "Zuletzt gelesen" #: src/octoprint/plugins/announcements/templates/announcements.jinja2:43 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:87 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:197 -#: src/octoprint/templates/dialogs/about.jinja2:51 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:96 msgid "Close" msgstr "Schließen" @@ -200,7 +199,6 @@ msgstr "" " Tools wie z.B. Repetier Host.\n" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:121 -#: src/octoprint/templates/dialogs/usersettings.jinja2:46 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:80 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:109 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:151 @@ -209,7 +207,6 @@ msgid "Abort" msgstr "Abbrechen" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:122 -#: src/octoprint/templates/dialogs/usersettings.jinja2:47 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:81 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:110 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:152 @@ -479,7 +476,6 @@ msgstr "Gebundled" #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:48 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:129 -#: src/octoprint/templates/index.jinja2:118 msgid "Homepage" msgstr "Homepage" @@ -620,15 +616,13 @@ msgstr "Repository-Cache TTL" #: src/octoprint/plugins/softwareupdate/templates/softwareupdate.jinja2:26 #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:101 #: src/octoprint/templates/dialogs/confirmation.jinja2:11 -#: src/octoprint/templates/dialogs/settings.jinja2:52 #: src/octoprint/templates/dialogs/slicing.jinja2:50 -#: src/octoprint/templates/sidebar/state.jinja2:19 +#: src/octoprint/templates/sidebar/state.jinja2:24 msgid "Cancel" msgstr "Abbruch" #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:240 #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:102 -#: src/octoprint/templates/dialogs/settings.jinja2:53 msgid "Save" msgstr "Speichern" @@ -905,7 +899,7 @@ msgid "GCode Viewer" msgstr "GCode Viewer" #: src/octoprint/server/views.py:146 -#: src/octoprint/templates/sidebar/state.jinja2:3 +#: src/octoprint/templates/sidebar/state.jinja2:4 msgid "Timelapse" msgstr "Zeitraffer" @@ -976,75 +970,34 @@ msgstr "Zugriff" msgid "Interface" msgstr "Interface" -#: src/octoprint/static/js/app/dataupdater.js:92 -#: src/octoprint/static/js/app/dataupdater.js:127 +#: src/octoprint/static/js/app/dataupdater.js:96 +#: src/octoprint/static/js/app/dataupdater.js:131 #: src/octoprint/static/js/app/helpers.js:451 #: src/octoprint/templates/overlays/offline.jinja2:6 msgid "Server is offline" msgstr "Der Server ist offline" -#: src/octoprint/static/js/app/dataupdater.js:93 +#: src/octoprint/static/js/app/dataupdater.js:97 msgid "The server appears to be offline, at least I'm not getting any response from it. I'll try to reconnect automatically over the next couple of minutes, however you are welcome to try a manual reconnect anytime using the button below." msgstr "Der Server scheint offline zu sein, zumindest kann ich mich nicht mit ihm verbinden. Ich werde in den nächsten Minuten versuchen mich erneut zu verbinden, aber Du kannst mittels des folgenden Buttons auch jederzeit einen manuellen Verbindungsversuch anstoßen." -#: src/octoprint/static/js/app/dataupdater.js:128 +#: src/octoprint/static/js/app/dataupdater.js:132 msgid "The server appears to be offline, at least I'm not getting any response from it. I could not reconnect automatically, but you may try a manual reconnect using the button below." msgstr "Der Server scheint offline zu sein, zumindest kann ich mich nicht mit ihm verbinden. Ich konnte mich nicht automatisch neu verbinden, aber Du kannst mittels des folgenden Buttons einen manuellen Verbindungsversuch anstoßen." -#: src/octoprint/static/js/app/dataupdater.js:206 -#: src/octoprint/static/js/app/dataupdater.js:226 -#, python-format -msgid "Slicing ... (%(percentage)d%%)" -msgstr "Slice ... (%(percentage)d%%)" - -#: src/octoprint/static/js/app/dataupdater.js:228 -msgid "Slicing ..." -msgstr "Slice ..." - -#: src/octoprint/static/js/app/dataupdater.js:234 -msgid "Slicing done" -msgstr "Slicing abgeschlossen" - -#: src/octoprint/static/js/app/dataupdater.js:234 -#, python-format -msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" -msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden" - -#: src/octoprint/static/js/app/dataupdater.js:244 -#, python-format -msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" -msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s" - -#: src/octoprint/static/js/app/dataupdater.js:245 -msgid "Slicing failed" -msgstr "Slicing fehlgeschlagen" - -#: src/octoprint/static/js/app/dataupdater.js:249 -msgid "Streaming ..." -msgstr "Streaming ..." - -#: src/octoprint/static/js/app/dataupdater.js:255 -msgid "Streaming done" -msgstr "Streaming abgeschlossen" - -#: src/octoprint/static/js/app/dataupdater.js:256 -#, python-format -msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" -msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" - -#: src/octoprint/static/js/app/dataupdater.js:262 -#: src/octoprint/static/js/app/dataupdater.js:270 +#: src/octoprint/static/js/app/dataupdater.js:230 +#: src/octoprint/static/js/app/dataupdater.js:238 msgid "Unhandled communication error" msgstr "Unbehandelter Kommunikationsfehler" -#: src/octoprint/static/js/app/dataupdater.js:263 +#: src/octoprint/static/js/app/dataupdater.js:231 #, python-format msgid "There was an unhandled error while talking to the printer. Due to that the ongoing print job was cancelled. Error: %(firmwareError)s" msgstr "Es gab einen unbehandelten Fehler bei der Kommunikation mit dem Drucker. Daher wurder der laufende Druckauftrag abgebrochen. Fehler: %(firmwareError)s" -#: src/octoprint/static/js/app/dataupdater.js:271 -#, python-format -msgid "The was an unhandled error while talking to the printer. Due to that OctoPrint disconnected. Error: %(error)s" +#: src/octoprint/static/js/app/dataupdater.js:239 +#, fuzzy, python-format +msgid "There was an unhandled error while talking to the printer. Due to that OctoPrint disconnected. Error: %(error)s" msgstr "Es gab einen unbehandelten Fehler bei der Kommunikation mit dem Drucker. Daher hat OctoPrint die Verbindung getrennt. Fehler: %(error)s" #: src/octoprint/static/js/app/helpers.js:372 @@ -1119,15 +1072,15 @@ msgid "Disconnect" msgstr "Trennen" #: src/octoprint/static/js/app/viewmodels/control.js:65 -#: src/octoprint/static/js/app/viewmodels/files.js:329 -#: src/octoprint/static/js/app/viewmodels/gcode.js:465 -#: src/octoprint/static/js/app/viewmodels/printerstate.js:177 -#: src/octoprint/static/js/app/viewmodels/temperature.js:56 +#: src/octoprint/static/js/app/viewmodels/files.js:348 +#: src/octoprint/static/js/app/viewmodels/gcode.js:471 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:228 +#: src/octoprint/static/js/app/viewmodels/temperature.js:58 msgid "Tool" msgstr "Werkzeug" #: src/octoprint/static/js/app/viewmodels/control.js:71 -#: src/octoprint/static/js/app/viewmodels/temperature.js:67 +#: src/octoprint/static/js/app/viewmodels/temperature.js:69 msgid "Hotend" msgstr "Hotend" @@ -1143,32 +1096,74 @@ msgstr "Dein verfügbarer freier Plattenplatz wird langsam knapp." msgid "Your current disk usage." msgstr "Dein aktuell verfügbarer freier Plattenplatz." -#: src/octoprint/static/js/app/viewmodels/files.js:324 -#: src/octoprint/static/js/app/viewmodels/files.js:329 +#: src/octoprint/static/js/app/viewmodels/files.js:343 +#: src/octoprint/static/js/app/viewmodels/files.js:348 msgid "Filament" msgstr "Filament" -#: src/octoprint/static/js/app/viewmodels/files.js:333 +#: src/octoprint/static/js/app/viewmodels/files.js:352 msgid "Estimated Print Time" msgstr "Geschätzte Druckdauer" -#: src/octoprint/static/js/app/viewmodels/files.js:336 +#: src/octoprint/static/js/app/viewmodels/files.js:355 msgid "Last Printed" msgstr "Zuletzt gedruckt" -#: src/octoprint/static/js/app/viewmodels/files.js:338 +#: src/octoprint/static/js/app/viewmodels/files.js:357 msgid "Last Print Time" msgstr "Letzte Druckdauer" -#: src/octoprint/static/js/app/viewmodels/files.js:520 -msgid "Could not upload the file. Make sure that it is a GCODE file and has the extension \".gcode\" or \".gco\" or that it is an STL file with the extension \".stl\"." -msgstr "Konnte die Datei nicht hochladen. Bitte stelle sicher, dass es sich um eine GCODE-Datei mit der Extension \".gcode\" oder \".gco\" oder um eine STL-Datei mit der Extension \".stl\" handelt." +#: src/octoprint/static/js/app/viewmodels/files.js:460 +#: src/octoprint/static/js/app/viewmodels/files.js:467 +#, python-format +msgid "Slicing ... (%(percentage)d%%)" +msgstr "Slice ... (%(percentage)d%%)" -#: src/octoprint/static/js/app/viewmodels/files.js:541 +#: src/octoprint/static/js/app/viewmodels/files.js:462 +msgid "Slicing ..." +msgstr "Slice ..." + +#: src/octoprint/static/js/app/viewmodels/files.js:488 +msgid "Slicing done" +msgstr "Slicing abgeschlossen" + +#: src/octoprint/static/js/app/viewmodels/files.js:489 +#, python-format +msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" +msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden" + +#: src/octoprint/static/js/app/viewmodels/files.js:504 +#, python-format +msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" +msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s" + +#: src/octoprint/static/js/app/viewmodels/files.js:505 +msgid "Slicing failed" +msgstr "Slicing fehlgeschlagen" + +#: src/octoprint/static/js/app/viewmodels/files.js:522 +msgid "Streaming ..." +msgstr "Streaming ..." + +#: src/octoprint/static/js/app/viewmodels/files.js:534 +msgid "Streaming done" +msgstr "Streaming abgeschlossen" + +#: src/octoprint/static/js/app/viewmodels/files.js:535 +#, python-format +msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" +msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" + +#: src/octoprint/static/js/app/viewmodels/files.js:627 +#, python-format +msgid "Could not upload the file. Make sure that it is a valid file with one of these extensions: %(extensions)s" +msgstr "Konnte die Datei nicht hochladen. Bitte stelle sicher, dass es sich um eine valide Datei mit einer dieser Erweiterungen ist: %(extensions)s" + +#: src/octoprint/static/js/app/viewmodels/files.js:654 msgid "Uploading ..." msgstr "Uploade ..." -#: src/octoprint/static/js/app/viewmodels/files.js:548 +#: src/octoprint/static/js/app/viewmodels/files.js:660 msgid "Saving ..." msgstr "Speichere ..." @@ -1188,52 +1183,52 @@ msgstr "Analysiere..." msgid "Analyzed" msgstr "Analysiert" -#: src/octoprint/static/js/app/viewmodels/gcode.js:431 +#: src/octoprint/static/js/app/viewmodels/gcode.js:437 msgid "Model size" msgstr "Modelgröße" -#: src/octoprint/static/js/app/viewmodels/gcode.js:432 +#: src/octoprint/static/js/app/viewmodels/gcode.js:438 msgid "Estimated total print time" msgstr "Geschätzte Gesamtdruckdauer" -#: src/octoprint/static/js/app/viewmodels/gcode.js:433 +#: src/octoprint/static/js/app/viewmodels/gcode.js:439 msgid "Estimated layer height" msgstr "Geschätzte Schichthöhe" -#: src/octoprint/static/js/app/viewmodels/gcode.js:433 +#: src/octoprint/static/js/app/viewmodels/gcode.js:439 msgid "mm" msgstr "mm" -#: src/octoprint/static/js/app/viewmodels/gcode.js:434 +#: src/octoprint/static/js/app/viewmodels/gcode.js:440 msgid "Layer count" msgstr "Schichtanzahl" -#: src/octoprint/static/js/app/viewmodels/gcode.js:434 +#: src/octoprint/static/js/app/viewmodels/gcode.js:440 msgid "printed" msgstr "gedruckt" -#: src/octoprint/static/js/app/viewmodels/gcode.js:434 +#: src/octoprint/static/js/app/viewmodels/gcode.js:440 msgid "visited" msgstr "besucht" -#: src/octoprint/static/js/app/viewmodels/gcode.js:457 +#: src/octoprint/static/js/app/viewmodels/gcode.js:463 msgid "Layer number" msgstr "Schichtnummer" -#: src/octoprint/static/js/app/viewmodels/gcode.js:458 +#: src/octoprint/static/js/app/viewmodels/gcode.js:464 msgid "Layer height" msgstr "Schichthöhe" -#: src/octoprint/static/js/app/viewmodels/gcode.js:459 +#: src/octoprint/static/js/app/viewmodels/gcode.js:465 msgid "GCODE commands in layer" msgstr "GCODE Befehle in Schicht" -#: src/octoprint/static/js/app/viewmodels/gcode.js:462 -#: src/octoprint/static/js/app/viewmodels/gcode.js:465 +#: src/octoprint/static/js/app/viewmodels/gcode.js:468 +#: src/octoprint/static/js/app/viewmodels/gcode.js:471 msgid "Filament used by layer" msgstr "Genutztes Filament in Schicht" -#: src/octoprint/static/js/app/viewmodels/gcode.js:469 +#: src/octoprint/static/js/app/viewmodels/gcode.js:475 msgid "Print time for layer" msgstr "Druckdauer für Schicht" @@ -1371,52 +1366,76 @@ msgstr "Druckerprofil hinzufügen" msgid "Edit Printer Profile \"%(name)s\"" msgstr "Druckerprofile \"%(name)s\" bearbeiten" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:44 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:45 msgid "Restarts the print job from the beginning" msgstr "Started den Druckjob von vorne" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:45 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:46 msgid "Starts the print job" msgstr "Startet den Druckjob" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:46 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:47 msgid "Resumes the print job" msgstr "Setzt den Druckjob fort" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:47 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:48 msgid "Pauses the print job" msgstr "Pausiert den Druckjob" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:80 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:81 msgid "Calculating..." msgstr "Wird ermittelt..." -#: src/octoprint/static/js/app/viewmodels/printerstate.js:93 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:91 +msgid "Based on a linear approximation (accuracy highly dependent on the model)" +msgstr "Basiert auf einer linearen Approximation (Genauigkeit hängt stark vom Modell ab)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:94 +msgid "Based on the estimate from analysis of file (medium accuracy)" +msgstr "Basiert auf der Schätzung der Analyse der Datei (mittlere Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:97 +msgid "Based on a mix of estimate from analysis and calculation (medium accuracy)" +msgstr "Basiert auf einem Mix der Schätzung aus der Analyse und der Berechnung (mittlere Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:100 +msgid "Based on the average total of past prints of this model with the same printer profile (usually good accuracy)" +msgstr "Basiert auf der durchschnittlichen Dauer vergangener Druckjobs dieses Modells mit dem selben Druckerprofil (normalerweise gute Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:103 +msgid "Based on a mix of average total from past prints and calculation (usually good accuracy)" +msgstr "Basiert auf einem Mix der durschnittlichen Dauer vergangener Druckjobs und der Berechnung (normalerweise gute Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:106 +msgid "Based on the calculated estimate (best accuracy)" +msgstr "Basiert auf der berechneten Schätzung (beste Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:144 msgid "Continue" msgstr "Fortsetzen" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:95 -#: src/octoprint/templates/sidebar/state.jinja2:18 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:146 +#: src/octoprint/templates/sidebar/state.jinja2:23 msgid "Pause" msgstr "Pause" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:106 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:157 #: src/octoprint/templates/tabs/timelapse.jinja2:11 msgid "On Z Change" msgstr "Bei Ebenenwechsel" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:108 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:159 #: src/octoprint/templates/tabs/timelapse.jinja2:10 msgid "Timed" msgstr "Nach Zeit" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:108 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:159 #: src/octoprint/templates/tabs/timelapse.jinja2:25 #: src/octoprint/templates/tabs/timelapse.jinja2:32 msgid "sec" msgstr "Sek" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:216 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:268 msgid "This will restart the print job from the beginning." msgstr "Der Druckjob wird zurückgesetzt und von vorne begonnen." @@ -1434,43 +1453,43 @@ msgstr "weiß" msgid "Autodetect from browser" msgstr "Automatisch vom Browser erkennen" -#: src/octoprint/static/js/app/viewmodels/slicing.js:31 +#: src/octoprint/static/js/app/viewmodels/slicing.js:104 msgid "Do nothing" msgstr "Nichts machen" -#: src/octoprint/static/js/app/viewmodels/slicing.js:32 +#: src/octoprint/static/js/app/viewmodels/slicing.js:105 msgid "Select for printing" msgstr "Zum Drucken auswählen" -#: src/octoprint/static/js/app/viewmodels/slicing.js:33 +#: src/octoprint/static/js/app/viewmodels/slicing.js:106 msgid "Start printing" msgstr "Drucken" -#: src/octoprint/static/js/app/viewmodels/slicing.js:45 +#: src/octoprint/static/js/app/viewmodels/slicing.js:118 #, python-format msgid "Slicing %(filename)s" msgstr "Slice %(filename)s" #: src/octoprint/static/js/app/viewmodels/temperature.js:23 -#: src/octoprint/static/js/app/viewmodels/temperature.js:74 +#: src/octoprint/static/js/app/viewmodels/temperature.js:76 #: src/octoprint/templates/dialogs/settings/temperatures.jinja2:16 msgid "Bed" msgstr "Bett" -#: src/octoprint/static/js/app/viewmodels/temperature.js:112 +#: src/octoprint/static/js/app/viewmodels/temperature.js:115 msgid "just now" msgstr "gerade eben" -#: src/octoprint/static/js/app/viewmodels/temperature.js:114 +#: src/octoprint/static/js/app/viewmodels/temperature.js:117 msgid "min" msgstr "Min" -#: src/octoprint/static/js/app/viewmodels/temperature.js:253 +#: src/octoprint/static/js/app/viewmodels/temperature.js:256 #: src/octoprint/templates/tabs/temperature.jinja2:11 msgid "Actual" msgstr "Ist" -#: src/octoprint/static/js/app/viewmodels/temperature.js:258 +#: src/octoprint/static/js/app/viewmodels/temperature.js:261 #: src/octoprint/templates/tabs/temperature.jinja2:12 msgid "Target" msgstr "Soll" @@ -1554,31 +1573,6 @@ msgstr "Neue Zeitrafferaufnahme %(movie_prefix)s wurde fertig gerendert" msgid "Site default" msgstr "Seitenvoreinstellung" -#: src/octoprint/templates/index.jinja2:115 -msgid "Version" -msgstr "Version" - -#: src/octoprint/templates/index.jinja2:119 -msgid "Sourcecode" -msgstr "Quellcode" - -#: src/octoprint/templates/index.jinja2:120 -msgid "Documentation" -msgstr "Dokumentation" - -#: src/octoprint/templates/index.jinja2:121 -msgid "Bugs and Requests" -msgstr "Bugs und Requests" - -#: src/octoprint/templates/index.jinja2:122 -msgid "About" -msgstr "Über" - -#: src/octoprint/templates/dialogs/about.jinja2:4 -#: src/octoprint/templates/dialogs/settings.jinja2:51 -msgid "About OctoPrint" -msgstr "Über OctoPrint" - #: src/octoprint/templates/dialogs/confirmation.jinja2:4 msgid "Are you sure?" msgstr "Bist Du sicher?" @@ -1674,10 +1668,6 @@ msgstr "Zugangsbeschränkung deaktivieren" msgid "Keep Access Control Enabled" msgstr "Zugangsbeschränkung aktiviert lassen" -#: src/octoprint/templates/dialogs/settings.jinja2:4 -msgid "OctoPrint Settings" -msgstr "OctoPrint Einstellungen" - #: src/octoprint/templates/dialogs/slicing.jinja2:8 msgid "Slicing is currently disabled since no slicer has been configured yet. Please configure a slicer under \"Settings\"." msgstr "Slicing ist aktuell deaktiviert da noch kein Slicer konfiguriert wurde. Bitte konfiguriere einen Slicer unter \"Settings\"." @@ -1712,8 +1702,8 @@ msgid "Select a printer profile..." msgstr "Wähle ein Druckerprofil..." #: src/octoprint/templates/dialogs/slicing.jinja2:32 -msgid "GCode Filename" -msgstr "GCode Dateiname" +msgid "Output Filename" +msgstr "Ausgabedateiname" #: src/octoprint/templates/dialogs/slicing.jinja2:41 msgid "After slicing..." @@ -1724,11 +1714,6 @@ msgstr "Nach dem Slicing..." msgid "Slice" msgstr "Slicen" -#: src/octoprint/templates/dialogs/usersettings.jinja2:4 -#: src/octoprint/templates/navbar/login.jinja2:16 -msgid "User Settings" -msgstr "Nutzereinstellungen" - #: src/octoprint/templates/dialogs/about/about.jinja2:3 msgid "The snappy web interface for your 3D printer" msgstr "The snappy web interface for your 3D printer" @@ -1922,31 +1907,39 @@ msgid "Wait for start on connect" msgstr "Bei der Verbindung auf start warten" #: src/octoprint/templates/dialogs/settings/features.jinja2:40 +msgid "Select SD files by relative path" +msgstr "SD Dateien per relativem Pfad addressieren" + +#: src/octoprint/templates/dialogs/settings/features.jinja2:40 +msgid "RepRap Firmware" +msgstr "RepRap Firmware" + +#: src/octoprint/templates/dialogs/settings/features.jinja2:47 msgid "Always assume SD card is present" msgstr "Immer davon ausgehen, dass eine SD-Karte vorhanden ist" -#: src/octoprint/templates/dialogs/settings/features.jinja2:40 #: src/octoprint/templates/dialogs/settings/features.jinja2:47 #: src/octoprint/templates/dialogs/settings/features.jinja2:54 #: src/octoprint/templates/dialogs/settings/features.jinja2:61 #: src/octoprint/templates/dialogs/settings/features.jinja2:68 +#: src/octoprint/templates/dialogs/settings/features.jinja2:75 msgid "Repetier" msgstr "Repetier" -#: src/octoprint/templates/dialogs/settings/features.jinja2:47 +#: src/octoprint/templates/dialogs/settings/features.jinja2:54 msgid "Send a checksum with every command" msgstr "Eine Prüfsumme mit jedem Befehl senden" -#: src/octoprint/templates/dialogs/settings/features.jinja2:54 +#: src/octoprint/templates/dialogs/settings/features.jinja2:61 msgid "Ignore consecutive resend requests for the same line" msgstr "Aufeinanderfolgende Resend Requests für die selbe Zeilennummer ignorieren" -#: src/octoprint/templates/dialogs/settings/features.jinja2:61 +#: src/octoprint/templates/dialogs/settings/features.jinja2:68 #, python-format msgid "Support TargetExtr%%n/TargetBed target temperature format" msgstr "TargetExtr%%n/TargetBed Zieltemperaturformat unterstützen" -#: src/octoprint/templates/dialogs/settings/features.jinja2:68 +#: src/octoprint/templates/dialogs/settings/features.jinja2:75 msgid "Disable detection of external heatups" msgstr "Detektierung externer Aufheizvorgänge deaktivieren" @@ -1985,7 +1978,7 @@ msgstr "Falls der freie Plattenplatz unter diese Schwellwerte fallen sollte wird #: src/octoprint/templates/dialogs/settings/folders.jinja2:47 #: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:69 #: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:90 -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:66 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:69 #: src/octoprint/templates/tabs/timelapse.jinja2:13 msgid "Warning" msgstr "Warnung" @@ -2261,6 +2254,30 @@ msgstr "Viele Marlin < v1.1.0" msgid "Simulate an additional `ok` for resend requests" msgstr "Zusätzliches `ok` für Resendrequests simulieren" +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:129 +msgid "Maximum consecutive communication timeouts while idle. More than this and the printer will be considered to be gone. Set to 0 to disable." +msgstr "Maximale Anzahl aufeinanderfolgender Communication Timeouts im Idlezustand. Mehr als das und es wird angenommen, dass der Drucker offline ist. Auf 0 setzen um das zu verhindern." + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:130 +msgid "Max. consecutive timeouts while idle" +msgstr "Max. aufeinanderfolgende Timeouts wenn idle" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:135 +msgid "Maximum consecutive communication timeouts while printing. More than this and the printer will be considered to be gone. Set to 0 to disable." +msgstr "Maximale Anzahl aufeinanderfolgender Communication Timeouts beim Drucken. Mehr als das und es wird angenommen, dass der Drucker offline ist. Auf 0 setzen um das zu verhindern." + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:136 +msgid "Max. consecutive timeouts while printing" +msgstr "Max. aufeinanderfolgende Timeouts beim Drucken" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:141 +msgid "Maximum consecutive communication timeouts while a long running command is active. More than this and the printer will be considered to be gone. Set to 0 to disable." +msgstr "Maximale Anzahl aufeinanderfolgender Communication Timeouts wenn ein lang laufender Befehl aktiv ist. Mehr als das und es wird angenommen, dass der Drucker offline ist. Auf 0 setzen um das zu verhindern." + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:142 +msgid "Max. consecutive timeouts during long running commands" +msgstr "Max. aufeinanderfolgende Timeouts während lang laufender Befehle" + #: src/octoprint/templates/dialogs/settings/server.jinja2:2 msgid "Commands" msgstr "Befehle" @@ -2385,6 +2402,10 @@ msgstr "Änderungen der Oberflächensprache werden erst nach einem Neuladen der msgid "Remember me" msgstr "Login merken" +#: src/octoprint/templates/navbar/login.jinja2:16 +msgid "User Settings" +msgstr "Nutzereinstellungen" + #: src/octoprint/templates/navbar/login.jinja2:17 msgid "Logout" msgstr "Logout" @@ -2465,7 +2486,7 @@ msgstr "Frei" msgid "Total" msgstr "Gesamt" -#: src/octoprint/templates/sidebar/files.jinja2:64 +#: src/octoprint/templates/sidebar/files.jinja2:67 msgid "Hint: You can also drag and drop files on this page to upload them." msgstr "Hinweis: Du kannst auch Dateien auf diese Seite ziehen um sie hochzuladen." @@ -2529,39 +2550,39 @@ msgstr "SD-Karte auswerfen" msgid "Machine State" msgstr "Druckerstatus" -#: src/octoprint/templates/sidebar/state.jinja2:2 +#: src/octoprint/templates/sidebar/state.jinja2:3 msgid "File" msgstr "Datei" -#: src/octoprint/templates/sidebar/state.jinja2:7 +#: src/octoprint/templates/sidebar/state.jinja2:8 msgid "Approx. Total Print Time" msgstr "Ungefähre Druckdauer" -#: src/octoprint/templates/sidebar/state.jinja2:8 +#: src/octoprint/templates/sidebar/state.jinja2:10 msgid "Print Time" msgstr "Druckdauer" -#: src/octoprint/templates/sidebar/state.jinja2:9 +#: src/octoprint/templates/sidebar/state.jinja2:11 msgid "Print Time Left" msgstr "Verbleibende Druckdauer" -#: src/octoprint/templates/sidebar/state.jinja2:10 +#: src/octoprint/templates/sidebar/state.jinja2:12 msgid "Printed" msgstr "Gedruckt" -#: src/octoprint/templates/sidebar/state.jinja2:17 +#: src/octoprint/templates/sidebar/state.jinja2:22 msgid "Restart" msgstr "Restart" -#: src/octoprint/templates/sidebar/state.jinja2:17 +#: src/octoprint/templates/sidebar/state.jinja2:22 msgid "Print" msgstr "Drucken" -#: src/octoprint/templates/sidebar/state.jinja2:18 +#: src/octoprint/templates/sidebar/state.jinja2:23 msgid "Resume" msgstr "Weiter" -#: src/octoprint/templates/sidebar/state.jinja2:19 +#: src/octoprint/templates/sidebar/state.jinja2:24 msgid "Cancels the print job" msgstr "Bricht den Druckjob ab" @@ -2637,51 +2658,51 @@ msgstr "Lüfter an" msgid "Fan off" msgstr "Lüfter aus" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:14 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:17 msgid "Model info" msgstr "Modelinformationen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:21 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:24 msgid "Renderer options" msgstr "Rendereroptionen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:25 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:28 msgid "Sync with job progress" msgstr "Job mit Fortschritt synchronisieren" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:30 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:33 msgid "Center viewport on model" msgstr "Ausschnitt auf Modell zentrieren" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:33 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:36 msgid "Zoom in on model" msgstr "Auf Model zoomen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:39 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:42 msgid "Show moves" msgstr "Bewegungen zeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:42 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:45 msgid "Show retracts" msgstr "Retracts zeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:48 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:51 msgid "Also show previous layer" msgstr "Auch vorherige Schicht anzeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:51 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:54 msgid "Also show next layer" msgstr "Auch nächste Schicht anzeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:56 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:59 msgid "Reload" msgstr "Neu laden" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:62 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:65 msgid "Note that the time estimates in this tab are calculated by the GCODE viewer in your browser and might differ from the values calculated by the server that are displayed in the \"State\" and \"Files\" panels in the sidebar due to slightly different implementations." msgstr "Beachte, dass die geschätzten Zeiten in diesem Tab durch den GCODE Viewer in Deinem Browser berechnet werden und sich von den durch den Server berechneten Werten unterscheiden können, die im \"Status\" und \"Dateien\" Bereich der Seitenleiste angezeigt werden. Die Ursache hierfür sind leicht unterschiedliche Implementierungen." -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:67 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:70 msgid "" "

\n" " You've selected for printing which has a size of\n" @@ -2703,7 +2724,7 @@ msgstr "" " Bist Du sicher, dass du die Datei trotzdem visualisieren willst?\n" "

" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:78 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:81 #, python-format msgid "Yes, please visualize %(name)s regardless of its size" msgstr "Ja, bitte visualisiere %(name)s unabhängig seiner Größe" @@ -2927,3 +2948,24 @@ msgstr "Zeitrafferaufnahme rendern" #~ msgid "Show Announcements..." #~ msgstr "Ankündigungen anzeigen..." + +#~ msgid "Version" +#~ msgstr "Version" + +#~ msgid "Sourcecode" +#~ msgstr "Quellcode" + +#~ msgid "Documentation" +#~ msgstr "Dokumentation" + +#~ msgid "Bugs and Requests" +#~ msgstr "Bugs und Requests" + +#~ msgid "About" +#~ msgstr "Über" + +#~ msgid "About OctoPrint" +#~ msgstr "Über OctoPrint" + +#~ msgid "OctoPrint Settings" +#~ msgstr "OctoPrint Einstellungen" diff --git a/translations/de/LC_MESSAGES/messages.mo b/translations/de/LC_MESSAGES/messages.mo index bcdcf24a1932c6541ee1052faba8d632b66ffdd3..f2444b45ea8003981df7829ff91827dffe646d15 100644 GIT binary patch delta 12704 zcmcK9d3+Sby2kNNNC;~PVc%N>fe0bMVGB#x_eCIxfFhHmlME!2IGG_3g< zOYE2$71|#k^^nCszDUcejrUek>-T@oUSnCeMOfB3?8P%hjV&vM_T~i3I?Q7cO)YCH zevS8We^oQfszAF#bIWRg{ZZ|Ftb$YB_BJ#aVHW1uQYmbJZvWwmZ; zS&!54`PPwXDThxt(PV#Wl#IR;l)u#p70cjKNMAjXkj>_QzNp>b5-?!}wOV zdm|tHJW%MizeOeEIO@gdWCp>?sDbNX18PpK4|`)Ti|^YNqks&2zPIAnoqx#RpLRoe6QF$RjCzMOYnGbS+Rb?un|6fo^*YYN;|^ zZ^3xlx1k1{g?jH1)UH^J8t`3I4Rq*fp6iRsL}(}%8Xyg$u)u9kL`8TPD&@0LDPM$T zaf9nN)PV1y0{H|rp&zg+M)fiS)k5`iEjGktWFjGJEEjrVJgRu6nGdX;ct7orFd8#^ zo5*u8f_4z=VIgWaJd9epWmpo|qXv8xRa5V{evOH=FJO7?|HM9~XgZ>nU=XUqEY!dO zRL4cA8O_3)xB~V3W{km)u@oLc4SW>!-f7h575bXMs-d2%i)9$!YUJK%i5j2-YAJ@I zQaS<^$T(DOQmIf-=O+Aj%6`nfcd-)D!}fjB^!i;(KmqnvjMD) z+>nv%5v8UVDuBUm`+B#1GmhqdCaS~NP#Jg|=TQ`2qK@WU>HQttg=#On&h&R2b?}_R zzu~h($iEJXgF{RWoX2vs<9JJ{uY;Od5^A7!r~_s&DgX~Q#T>i}=VJnHK&|~($XM1H z)cG)Am^sj9q9*!ah>NjYEWnX?7TK!S^{J+a7GQhY&!D#7m#DSZX{8Qopo*ZiQDdgZD{wz26!7b#wEBM zci>%^e*-^6@H8smnWR+%-|spf)$cN_to^^%{opMu!3Q6rX7Dj;h6m7tKcWtfp`%O& zreO=(_hWl}6?w!uje0+oN{yl@M`AkdF*lm3e+~J1u;SU14=}zpoD0q9YpjXo#+bEi zgetDKSP3&wMK%#jAYRMCEhTAIVCrT7lD6sJ)A#okQ*RsHq3sEaA6 z_86>#x1t`LkLq9*s>AiDVtW;<;cirlkGP&d73X=ZiZNr&ZmNr_u@V8vHAgx?`xDLlb+|NYS$Qo3KZ@TV7W#${yfIp!! z8j)oJs)|f3WYy(D4KZH@Z z8WrG+s0nVt>e~OixzO5wgG$lQu904o;yARqUlSE*2h>sA4>fS6+n$8#=OI)^7NZ7! z5nJJU)brn?med+YAdGLtb1?zyVjez(nsM}a^I$nFq0dpn&D{F z%*Ug?3l^XPc?zR(75)vw7}7vTxX{`h!?GBaW6py(RENz`9i^Z$FaZ5H+P%LE_1q`8 z6OW?$dnwl})!V2Ue}LuiYt&Kyb1wNW&qaBkNm(t_0L@VybVfxy3^n7Cs2QhW3g)8T zUxl%_0f*rZRHo|YnM}4u4n3amy zVv6}&F(f01eJ>Z(gVkcHS?fhun)Y(6hO03Sx1rW}FX|ll8ntBS@LH@e&72n^G3q=-7o-1K%RF(I|cud6xn1yxmUQ|abu_UfT z?ShSH<4#njzDE`BSyb_s{=0cD9{bX^G4wnax)$50)` z&NP{-h6hCO;#`1TYTBwFmwCkV(t$#Q9SE>`ZQ36|IG`7c5 znBv~=gORicxb4BHfrg=$VicxfCaU8%QT@H^`T^FWy$=WANgRpYLid=eeGK*D8>o(V zx$O^70e$A){{pu$)o-yYzHlEIBC?lX5Exw@g(dL8qu|A$eJy?CI`3tBiY8T{V zJ)DJYa5a{}uTTRYM`iK?Y9g`AOd!=Tfp#-&g*RXY#<%X}Le=^hHpEq~@1ZjDE7};l z+_amc2JC^V{=ujv%f@I7;1DcAPHk%^j=|n5_>&%2U^2FRlJ)P+MJ^YLbPaC8jTnVf zo-&!3fjaqCpd#Obn&BzbTE;wW&V!2hH`-TY4BmiMaV#oxg|72Z0k3(Q{M%e?=7utG z2pi)GT#U7!p%C#E)RM%nG=a57Wgr>VQBRDOQYf%U^?IP_Wa zuT)Lt20O;ugDOI2m07bK)WFl-_Hrysdjo1|wqa@f6ieY(sKAb)it@DEF8`c)t~#n_ z>f=2)GQ@>uei+rkFIW*TpgO3y+RUs0YQH9+o=Zl(*BzCyRIGrLu^irqn(3pcB7Oq3 zTh`)LxD(ZX=m#z;a1rreW^F5?UhIh~u7Q}3nOGh_!d-Y6_1ufkn}A-%2-;h*0dB*J z_#M{7^Qg?!c)vJahZERjOt)FD$t{-B|3vDuE?+nv<9l5 zmRJu5qXNuBWvmd@?^KM(Sy)#4{|PP>*>kSzQER#d_2Mp6^?!savXiKR&Y%XU{-QaM zY}aJe50_L_KRKw(O+W>9J3fZX(98H%SI$kHTq{wTVN>i+dk8AP$5AtX3bj2~ zqXK&oHNYO!l6{Vz3R=(owF zYPRd6s0Wr|8kT(3Jm*F2|JB$LH(*0Ng$k_hW|QJJs6aZSc0qrP!<$g4_o0?zN{9=s z-5sbG=DO`AsA5}<>R=7(g>5(--$4c5@HO+?cvJ>%K|Oy5YN;MURr?}T&Afox1?y0m z2))6DX7nj4kRwUcIPvc;&t)}m(g8fpgbqXOKA9{drn!J*sC%qC$9?U|@= zx$PLl65GuZPr}|2jE8yJ|8KoXCGtRr9j5pmL<-dU3>)Hnrcoa^p#nLC*W%BpfbE^; zxg^wfyB_uYSgeOLummo}7<>{-;%cnO_|{r3bi!@N>i7lf#k1G|Yrky<=!#d<&O)u} zJ*bWrVkumXDzfKL?{C5~c);~r)N?0MzlhFbNFCMOWm4A+qiJ_UJ=hJk6#a2HdT>9k z!=^az9ruq>tUc4yR54aauc z|2J}>7al@&^dxG{H{dLM1LxrNADb7yMRj!CZI}AQ3{(LXa8p!&$*9y1z$$nnwm?5> zDVAXj<6G;wP(+(iUn<+(cJ!yF7RsS!Tn}qw6VyPxP#veD0vd;ta2l#s&Y%J)^%*B5 zCth`|K|6&#to}w~NH3;yp_v!qHF!TN!ZoOaX$NX;54-ojM+F>tz!XtwRK}`f7rYu3 zUi$!x`}Gc+`;Vgf*@`#gRbQFUr{QthXR&Go|5yBLb8<$1LqT)DWrzz87fVnbl=#;C z7tEV+IPEaD!qP|0|61*YWZ#;A^Kkfg<|o^C*q3(e@6CT^3t>0fZ{s?Q`++*c?br^d zA2UC}LL0ak#f?%wnl(ztwM6<7>VDo&rdW2MmgIfZnjSzE-#<}HRQ`lHaO$9{KLxMF zA=nfrql)htjK(e4U;BRt7m3`c`mTAW}*UG ziS=+ZD$s*C6o19mIN%p^AWg>_+W$+r&=LAd@eK|VtV{a{CSlA!O^5BU673tX7Up1c zoQbNPmr$Ab95sO-Q4{zlHo(%SOpzvHS=yZ><6C{*8^duRZ4d6i)i@c8e&sJ>JcYCH zyVE9++s>GQXQR&am#`{sMs3%7Cn_@o zF&W38)^t8r$E`R6_oIq0?VQ67eiZ&r5BBs;^&cYGO+FQAtK*^Zr?m*M0zvATJF>nPVd z(ay`XJrf+iC(E$|c>zz3o$1fZwevj%0XyIC^#uxSk1xYc_vD1qgE{U{!GfSChas}^ z@-pm;<6f?3ry!vC9Mh@C=gFB=;Qg(~-#g58GQ7du%XOu|O?;t?0TS`0;n56a(`oVa z>_TrKyLh$*o?OSw!0}^VrZ>m28~?k=H5_v-j*N8w7JuV3rym))%v|-xZ;ut{?zd?Y znHlxZ(|e&)%ZPA~&aXtZo#4swW|*gnBhT|WS`j)epxcQ7$5+7O79`sZ8~@&FQV{lb zUlb9p+Ou?YII&+w*^p;qqMgojPI@rloj{_zxlUe?waW;yhFNw_9{=(OeLgkP^Kx@p z(*kSY6<;gNR<^tuInKX*NJUaJK)-s@o69O*8c6z_h;EfT7TBgkO7}8>*s6$h#hqvm z%<~g{wnr6f3T4ijBD+l>&rWkFHy@7-a{^SVouq$dcndsfIZoo0$F?tyt;zg9^xxoO z|HYeyG+b#6h5MIt2+tngC_21jRHca6U?4vjuzRrvKB_qU$>?(>%MSJAbH|@s=<$c& zOY0X|V_1*kx+$>JCfR;RTa$&)_XM)TRh(aBX11#wGb)(n_hx3!>GDjKaQDYoa@cqsKlL8Wv>i?xzkB95 zKD+B5Po3U`81!b1cf0{R`}JkMtbkn*@c75u6F5Z%>cq*hJ!!>f!ykI&Lk^z|dZt7R z(zAWuKp@APp3Mk7JV7Vqw>gxuJiaVPqxbL!)5nj?ODnL097cMpo8xzQD@Z*z_T~9= zJvolQ(DAZsvVxp9mxT3KV-HIw=0K5p@dVi|blkQ0km9hp+(@~Kl98|6zdNJ!?0=op zm8O*8WwRH!$>JO%lNli=*Di2!(v%L(-SL|v?0+{|1(RkH<#3ePmrR!ft>7>6)Uh}h zmpuP_YMkPadT^?H?Z%f)NciZIVG-f$mM)A=DL&sEmQ+t`W~Q2or|h?TYRLi)2NTQ8 zF%bBdb8h6*5s~5Sl{HI-AAEjsx#Dw7poAmd%H7e7(eB8EYJiFWWh6(~4FHSb!{W(;t$7}~`r_k%?i&$Btd&k#QpP6!Y ztA{U@O#N(7k`wK&Z0jWID^Nt*IkDAKQBXTB+pBc>+ynK`lL`GX?N^))N$E=li-H^l zzKs7|$f5s3%>ToXFI~wi20Z9Lo8)lP##7PZE?Wjg#B~i8WO>q@4DFNRGylG=)k;+u z>f~Q?>^tG5Z*PiB;M_0XPApwMm3{H(&$X}1^blW0hTkdB>FxN!p54_;hG%?uW4UnF N7gOWH$4=Z8_20FU;VJ+C delta 10704 zcmaLc30&31-pBDlHU&gP#lVFlxgZFlCZeghf#$AgS1~ofqmT*)2QyJmW@_a^Y0FJb zaeL5Av(9yEb8Asc&9rW*nPq0#W>#L!rTh6Z|69-VdY;$Q>)zfobLKzuo8Qd*57429 z02_nwIic-rt!el=qn;yra#`|F<-&5fDiXUy}MNuQW_W74VTBp7p^ZmScGc^l`q zGG-C&1CorXMg3H=F-`G1R6U}#G4;@es;6R@F!$d{E1Wl83U-_Kn3L2#TXxkptj^qY=HYvL#7L0Q&!bs}VQ4=mgJ@*Xi^smHacocO8 z?(1p$O+#g3HfsDQQCqdfse3CaD8iknl;oQOlwn2rrsGf&qUPOc@S^Y{a-+#>iS?HAH0kjcn4}_?_&&}LmjSLs7%!F zZ3B!&O&pJUt^)>Re+Z{HQHNwRYT~`9fKH+Y z`Wb`q25Q9teT;b&8{%kOkLl=tmwm7F#Aeh-V;asuulD$L3X1dqDv+bt7*C*5_6uqP zKQ>M)jYefG9u+`))PP-3<4tuwe;7lkm!r0B84ki%k>g}S`jLMX2KKWlT7n8>xl>=` z)HmTM+FwBp7~bDzA{w9JaHODK!S4labubzxS$kb2=Acop^DNE%H3br|{% zwkx^^wFL#JmCZn<{1H^Y<){EQV=LT=P4GM>VDJ!o2HGM`rZ?(+@pr6&C$Ku6!F%z7 zm%>O2eF&e6VAh~gd;$4BF;`I6F(u2Mf&Qog+^BwqSPN%j7%p;LhE-<>LuudawC{3! z2esAS;}kT|C#aQOzzn>M+M2XscAy!k2_D7>EJvlb0&8O>YQSBn3ExEB_d}?0&!W!K zcc^i$A-m}{LBs9JhN4n55j9|`Q=gAo$&;voo^@P<>bDu|;%=w?1o~6|92L+xRKVY0 z4qn4#9Cfz>VgDbe(1wO*Q7J!&+7kc2*#SmN4p}bd(LP~>J;m=KZ(GxV&QIbPY>Jmq z?~8ibc56~lXQdm~!O5sIGaG9#zgbHm5;tQs?!g#5iCW2TsKa;-m2y9>f>K-^>tS8g zzzL{R-4%6xM>+NB*ogYGsD9f}&mTmu2K))-?~-V_^9?}~~z+i@Cd;Ac=1 zZ$jCRwVzK?6)d zWuOcLupHarQ>X_HpjLbe6~GTT6|Z3tP8n}kdKT610{ZK7)Rx{vWwh=DJ6|KL$^0gs zf>xG_T5%@o6*(0Z$Q%sBNAV6^j6t{`wIzp80ey~*@jKLbA^CQk7}OTEz+y~w+Bc$C z9k)|>AKyU@xU|6T(FW8?wxR;shf4WTRI0y0W$X$ngCY0XiRz)oX^INGBUZ9{|25E38WiDb%)+gxlm$$*D{X*WVH1Z#akkTb0z;{v!m5;`0=k9@pynhScpNH# z)~H*MhADX0B=WD6Pp5%xG%q08GZB;Rk4n>!b7WQ`+h_a>?K}QHY(~8t)xHf$o@rQQ ze-D_8s&7WtVxp$l_SvZRji~lW@BR7?yLmVtxDb`X z5r*3;VWq@cYUf{B=i zEwLPH;V#sG2k}lkip?=}mc1QqQJ;4}otZAE@rL0L9FJXbC-%mFVIxc@?GeiTX#U@r zhCJ*R0nm8WsLJz)-Z{qVfiTF{o8W@ zG;vSVIJxKzrZAC$QdWWrWG-qY3sIl@P=UPWe0~W1s2_9c$DR5~r+yl>*XOW3{)#Oy zVXn>aP~>aC6wD?6Z73Y3Ar=3?+c0&WonR0updqLMN1zT>0S00T2H=CJKxd&+J`eTk zeG=90Y1E3BJMHVR8ubnH$iF&nq9F)hLhbE#`24mc#cH9J1y$vd$j!t{Jm%_W`G84OF_~WFA&;~DHK|Jckhv+Le zW)JQ2p0HcedxwI^?3`di>*-^?uFH{AJX4z zhEaHthHTWp!7J_0f}yCDG{Z=|6G!7f)Mn!MoQF#7{iu~ZgbMUAOu$vx4iBL+aSL^L z!&lqyj9AAEtn1~2i4L*0UHYwXHi#YWUW zLj`gj6>#gd_L_G^ZP{S->fUElxC1Al_G~rkO}G)2kv)!|qXM~wE(}>`SC)wJ)H`DZ zx^Wl=t+xSCPz#%b8fWo(@*hZH84bEN71$9E;Xn-dFMC?EP=PJQBwUU|@E~%K zO@m5%xVE6SVjITcdrtjF)Pw;WY=$FH8ECeF{415MX;5TosKeINso#z2n1gyjO~f6z z2DPWz8}0KGQJM6ho}Y(W*mI~eunMc=OQ`2|Vmu!7Ivp;f-tpC5uq&;FI>q%-D@w#B z*c~-N9%|sJs6C#C!T2ib%j(*q&n_^$oii$7> zXJZJiK&_w>^}W6m8{!A3t@{CW*jjA1?Ww5evrqvSVi3+k&Y0KCrJ#scpa$B8x_%#` zBD{8=#$Ie)TdT-QoLr}LN8?`0VQ1i^fVBP=a6ryQZ>-Yw0 zW&cDC^b^*^YpB42Um{p+fd%*$>cy12)gHQqs0_Y@{qO`TK-bH5<%y`<&=wmpzv)0h z6AVXXA`g|S85o8OQGq;%U2!ccGhd?mUBs#kVGHX1udt1nh}r1DzIYVXFUDsBxgEV~ zNN^h3;WX-!qyMuYaK67>dr+v#``TT#D&I{kHb+24{=QMba4Iar1n_!%lwx4&vl zLVex=bMZM;zZw$W{4{F?O9FDnO3W{has^cwG1_Iu&4@9G`OCm;MTh!snz;Nt~%EU<2 zii%Kylp)v4JcfD|S2*?GPyvR$X&2y)rl5#gq9$sCnkWs`u^(!sBTy6Nqb8b#TG8XE zfL5R;T#ZWkPHc`byKSJ|F`fEg?1WEXsqX)K6trjE_i$(Zm=KGoFWqa*-RQs19;R$0 z>t;PR!<_y0aLq>r@&YE}>!^UgLG`FbUN^6*W#*)I$1W5RP)%a}Sb#4K#%Y zU8^$Gg9~vJKIPQA9kK)W!3x@kpq{&o4e=&wYhvEBw!_BM`=chDhzg(>lW{gG@U8EW z|8W!!(9j!`-nRjiq9UJ(dT;?M6U(p$Zblul9T#2(59xQ2QXYNa2bR{9gF-xbvJ;YaNs zIHFKnn~5&WcIw_T3hihpN3Co>>K-3P4fGZ2y4=8;82f=;Q4;EQWTKuMftnx}b%>`r zpD#ge(K?L4y{Pd&L<07jZz-hFa0xYF%VTz+J5hT)2+J`Wm*Pd#N@sm&2bznjuRu+- z78U3otc^#o7M?}jnoHOQgN|zp*#9&NO4R_=K*O;!-s9At!$|5CsFnIq6TN|&=p<_3 zZ%`|{g%4uA6ZUMBqXJlg&3VDSh`N@?KVm%QH$PC&ga5)h82+(+b;e;`>UW_I)fiL& z526B|<9xmV6?g@PVzpLRp`Y5{l6&B2>MK4a|1Bx}PQ%}@=}G(F z`DS1X>Yrdd>Q7ixp(Reo3QWKTr)_&Cs{IXAd)jAqoID&$eK+d!SYDGq<1&n5D;9oE z{#((o_AEb{;s=<6>0j6ZR$~_Ro2ZNo`O@B&N}Nyq6sBR`Ir|D;fzMDc`^x?Z7J1(O ziDncIpnW~|z+Z3&rh32T?o;>?HPD6&_D8BOFq?YvH+HWc!|i@df@**IqCE?jFogQ= zSRVtwvxl(}YOC5|6YPn)4Q@=t2T%+5uB8x7;R6iBi`Wk@VKR39-tOr{)EV)h1}a0{ zibbdtSD+4+`GI!<497U!g7xqi#^ME3pus;@{VCULVkxwzp%`7b0Ts|ejKFhF{a4hR zF8n9^hlnK9fMZaHa2D#tvjkh?7StI!gS9Z|l3hR)Y5|R~sqTMk3gI*i!%)m~EOIQv z0kqG@L--NS#0pN*FWC69eL+Q1Q6Otj6K}`rcm{*<0!HCaPCe*X7Q*}{oPs)}<89a* zmFjzuEjJUK&kLOT{Z73EBlx@wJK;i1#CK8S{DN~Z>^FM|pTLgPPhv9Gy~6%$f}Ru< zKn7~S0jNxjaoX?00P4l46+M7DbPu6FE@~8?JdYcEnu{x8x_!GRNy67jqiH%A(3@* zi%LDFyZ-GOl;FJO<(}qo7nT$h6}sY*C*&24bH}-gify^7u-m6pum&=zn(AgOo~hPb;?-f7n)Z(*X}Sjm^0b!JJoMusPD0n z%>rv=xjmkO!U-j2X<5r?-y35B{Cvm8UJvq}9-mRo*Q4Oafa*o1#d&Um@+B3zLzliV zy+{0iR_k$%D=5h;DlBy8dEDcYT^Ys2Ma7+5&EnlEv@G#0e(;HKU(}=R1KOr0rKGvq zwCR-6E-|HTN=nG!K}kd1Qwy}_q+U55cPCfdls0twv)>)QnG4hEHrl@;*IjI?{{3f? zJtn(!LUFeu_?f}qjIoc?H;A%y!5~4JZR&pKyOvft0pOMO(u!s+{Lbp z|0CgQuS!2DSGjbu%Uw|DR=WS6r*Xa{rHg>ipf@h+z6^JA8YtKOXRJiroFU diff --git a/translations/de/LC_MESSAGES/messages.po b/translations/de/LC_MESSAGES/messages.po index 42e8da64..93701c1b 100644 --- a/translations/de/LC_MESSAGES/messages.po +++ b/translations/de/LC_MESSAGES/messages.po @@ -5,18 +5,19 @@ # msgid "" msgstr "" -"Project-Id-Version: OctoPrint\n" +"Project-Id-Version: OctoPrint\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2016-06-16 12:18+0200\n" -"PO-Revision-Date: 2016-06-08 11:04+0100\n" +"POT-Creation-Date: 2016-07-28 11:50+0200\n" +"PO-Revision-Date: 2016-07-28 12:03+0100\n" "Last-Translator: Gina Häußge \n" "Language: de\n" "Language-Team: German (http://www.transifex.com/projects/p/octoprint/language/de/)\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.2.0\n" +"X-Generator: Poedit 1.6.8\n" #: src/octoprint/plugins/announcements/__init__.py:89 #: src/octoprint/plugins/announcements/templates/announcements.jinja2:4 @@ -55,7 +56,6 @@ msgstr "Zuletzt gelesen" #: src/octoprint/plugins/announcements/templates/announcements.jinja2:43 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:87 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:197 -#: src/octoprint/templates/dialogs/about.jinja2:51 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:96 msgid "Close" msgstr "Schließen" @@ -199,7 +199,6 @@ msgstr "" " Tools wie z.B. Repetier Host.\n" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:121 -#: src/octoprint/templates/dialogs/usersettings.jinja2:46 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:80 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:109 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:151 @@ -208,7 +207,6 @@ msgid "Abort" msgstr "Abbrechen" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:122 -#: src/octoprint/templates/dialogs/usersettings.jinja2:47 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:81 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:110 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:152 @@ -478,7 +476,6 @@ msgstr "Gebundled" #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:48 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:129 -#: src/octoprint/templates/index.jinja2:118 msgid "Homepage" msgstr "Homepage" @@ -619,15 +616,13 @@ msgstr "Repository-Cache TTL" #: src/octoprint/plugins/softwareupdate/templates/softwareupdate.jinja2:26 #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:101 #: src/octoprint/templates/dialogs/confirmation.jinja2:11 -#: src/octoprint/templates/dialogs/settings.jinja2:52 #: src/octoprint/templates/dialogs/slicing.jinja2:50 -#: src/octoprint/templates/sidebar/state.jinja2:19 +#: src/octoprint/templates/sidebar/state.jinja2:24 msgid "Cancel" msgstr "Abbruch" #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:240 #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:102 -#: src/octoprint/templates/dialogs/settings.jinja2:53 msgid "Save" msgstr "Speichern" @@ -904,7 +899,7 @@ msgid "GCode Viewer" msgstr "GCode Viewer" #: src/octoprint/server/views.py:146 -#: src/octoprint/templates/sidebar/state.jinja2:3 +#: src/octoprint/templates/sidebar/state.jinja2:4 msgid "Timelapse" msgstr "Zeitraffer" @@ -990,60 +985,19 @@ msgstr "Der Server scheint offline zu sein, zumindest kann ich mich nicht mit ih msgid "The server appears to be offline, at least I'm not getting any response from it. I could not reconnect automatically, but you may try a manual reconnect using the button below." msgstr "Der Server scheint offline zu sein, zumindest kann ich mich nicht mit ihm verbinden. Ich konnte mich nicht automatisch neu verbinden, aber Du kannst mittels des folgenden Buttons einen manuellen Verbindungsversuch anstoßen." -#: src/octoprint/static/js/app/dataupdater.js:217 -#: src/octoprint/static/js/app/dataupdater.js:237 -#, python-format -msgid "Slicing ... (%(percentage)d%%)" -msgstr "Slice ... (%(percentage)d%%)" - -#: src/octoprint/static/js/app/dataupdater.js:239 -msgid "Slicing ..." -msgstr "Slice ..." - -#: src/octoprint/static/js/app/dataupdater.js:245 -msgid "Slicing done" -msgstr "Slicing abgeschlossen" - -#: src/octoprint/static/js/app/dataupdater.js:245 -#, python-format -msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" -msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden" - -#: src/octoprint/static/js/app/dataupdater.js:255 -#, python-format -msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" -msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s" - -#: src/octoprint/static/js/app/dataupdater.js:256 -msgid "Slicing failed" -msgstr "Slicing fehlgeschlagen" - -#: src/octoprint/static/js/app/dataupdater.js:260 -msgid "Streaming ..." -msgstr "Streaming ..." - -#: src/octoprint/static/js/app/dataupdater.js:266 -msgid "Streaming done" -msgstr "Streaming abgeschlossen" - -#: src/octoprint/static/js/app/dataupdater.js:267 -#, python-format -msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" -msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" - -#: src/octoprint/static/js/app/dataupdater.js:273 -#: src/octoprint/static/js/app/dataupdater.js:281 +#: src/octoprint/static/js/app/dataupdater.js:230 +#: src/octoprint/static/js/app/dataupdater.js:238 msgid "Unhandled communication error" msgstr "Unbehandelter Kommunikationsfehler" -#: src/octoprint/static/js/app/dataupdater.js:274 +#: src/octoprint/static/js/app/dataupdater.js:231 #, python-format msgid "There was an unhandled error while talking to the printer. Due to that the ongoing print job was cancelled. Error: %(firmwareError)s" msgstr "Es gab einen unbehandelten Fehler bei der Kommunikation mit dem Drucker. Daher wurder der laufende Druckauftrag abgebrochen. Fehler: %(firmwareError)s" -#: src/octoprint/static/js/app/dataupdater.js:282 -#, python-format -msgid "The was an unhandled error while talking to the printer. Due to that OctoPrint disconnected. Error: %(error)s" +#: src/octoprint/static/js/app/dataupdater.js:239 +#, fuzzy, python-format +msgid "There was an unhandled error while talking to the printer. Due to that OctoPrint disconnected. Error: %(error)s" msgstr "Es gab einen unbehandelten Fehler bei der Kommunikation mit dem Drucker. Daher hat OctoPrint die Verbindung getrennt. Fehler: %(error)s" #: src/octoprint/static/js/app/helpers.js:372 @@ -1118,9 +1072,9 @@ msgid "Disconnect" msgstr "Trennen" #: src/octoprint/static/js/app/viewmodels/control.js:65 -#: src/octoprint/static/js/app/viewmodels/files.js:329 +#: src/octoprint/static/js/app/viewmodels/files.js:348 #: src/octoprint/static/js/app/viewmodels/gcode.js:471 -#: src/octoprint/static/js/app/viewmodels/printerstate.js:177 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:228 #: src/octoprint/static/js/app/viewmodels/temperature.js:58 msgid "Tool" msgstr "Werkzeug" @@ -1142,32 +1096,74 @@ msgstr "Dein verfügbarer freier Plattenplatz wird langsam knapp." msgid "Your current disk usage." msgstr "Dein aktuell verfügbarer freier Plattenplatz." -#: src/octoprint/static/js/app/viewmodels/files.js:324 -#: src/octoprint/static/js/app/viewmodels/files.js:329 +#: src/octoprint/static/js/app/viewmodels/files.js:343 +#: src/octoprint/static/js/app/viewmodels/files.js:348 msgid "Filament" msgstr "Filament" -#: src/octoprint/static/js/app/viewmodels/files.js:333 +#: src/octoprint/static/js/app/viewmodels/files.js:352 msgid "Estimated Print Time" msgstr "Geschätzte Druckdauer" -#: src/octoprint/static/js/app/viewmodels/files.js:336 +#: src/octoprint/static/js/app/viewmodels/files.js:355 msgid "Last Printed" msgstr "Zuletzt gedruckt" -#: src/octoprint/static/js/app/viewmodels/files.js:338 +#: src/octoprint/static/js/app/viewmodels/files.js:357 msgid "Last Print Time" msgstr "Letzte Druckdauer" -#: src/octoprint/static/js/app/viewmodels/files.js:515 -msgid "Could not upload the file. Make sure that it is a GCODE file and has the extension \".gcode\" or \".gco\" or that it is an STL file with the extension \".stl\"." -msgstr "Konnte die Datei nicht hochladen. Bitte stelle sicher, dass es sich um eine GCODE-Datei mit der Extension \".gcode\" oder \".gco\" oder um eine STL-Datei mit der Extension \".stl\" handelt." +#: src/octoprint/static/js/app/viewmodels/files.js:460 +#: src/octoprint/static/js/app/viewmodels/files.js:467 +#, python-format +msgid "Slicing ... (%(percentage)d%%)" +msgstr "Slice ... (%(percentage)d%%)" -#: src/octoprint/static/js/app/viewmodels/files.js:536 +#: src/octoprint/static/js/app/viewmodels/files.js:462 +msgid "Slicing ..." +msgstr "Slice ..." + +#: src/octoprint/static/js/app/viewmodels/files.js:488 +msgid "Slicing done" +msgstr "Slicing abgeschlossen" + +#: src/octoprint/static/js/app/viewmodels/files.js:489 +#, python-format +msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" +msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden" + +#: src/octoprint/static/js/app/viewmodels/files.js:504 +#, python-format +msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" +msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s" + +#: src/octoprint/static/js/app/viewmodels/files.js:505 +msgid "Slicing failed" +msgstr "Slicing fehlgeschlagen" + +#: src/octoprint/static/js/app/viewmodels/files.js:522 +msgid "Streaming ..." +msgstr "Streaming ..." + +#: src/octoprint/static/js/app/viewmodels/files.js:534 +msgid "Streaming done" +msgstr "Streaming abgeschlossen" + +#: src/octoprint/static/js/app/viewmodels/files.js:535 +#, python-format +msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" +msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" + +#: src/octoprint/static/js/app/viewmodels/files.js:627 +#, python-format +msgid "Could not upload the file. Make sure that it is a valid file with one of these extensions: %(extensions)s" +msgstr "Konnte die Datei nicht hochladen. Bitte stelle sicher, dass es sich um eine valide Datei mit einer dieser Erweiterungen ist: %(extensions)s" + +#: src/octoprint/static/js/app/viewmodels/files.js:654 msgid "Uploading ..." msgstr "Uploade ..." -#: src/octoprint/static/js/app/viewmodels/files.js:543 +#: src/octoprint/static/js/app/viewmodels/files.js:660 msgid "Saving ..." msgstr "Speichere ..." @@ -1370,52 +1366,76 @@ msgstr "Druckerprofil hinzufügen" msgid "Edit Printer Profile \"%(name)s\"" msgstr "Druckerprofile \"%(name)s\" bearbeiten" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:44 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:45 msgid "Restarts the print job from the beginning" msgstr "Started den Druckjob von vorne" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:45 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:46 msgid "Starts the print job" msgstr "Startet den Druckjob" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:46 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:47 msgid "Resumes the print job" msgstr "Setzt den Druckjob fort" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:47 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:48 msgid "Pauses the print job" msgstr "Pausiert den Druckjob" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:80 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:81 msgid "Calculating..." msgstr "Wird ermittelt..." -#: src/octoprint/static/js/app/viewmodels/printerstate.js:93 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:91 +msgid "Based on a linear approximation (accuracy highly dependent on the model)" +msgstr "Basiert auf einer linearen Approximation (Genauigkeit hängt stark vom Modell ab)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:94 +msgid "Based on the estimate from analysis of file (medium accuracy)" +msgstr "Basiert auf der Schätzung der Analyse der Datei (mittlere Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:97 +msgid "Based on a mix of estimate from analysis and calculation (medium accuracy)" +msgstr "Basiert auf einem Mix der Schätzung aus der Analyse und der Berechnung (mittlere Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:100 +msgid "Based on the average total of past prints of this model with the same printer profile (usually good accuracy)" +msgstr "Basiert auf der durchschnittlichen Dauer vergangener Druckjobs dieses Modells mit dem selben Druckerprofil (normalerweise gute Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:103 +msgid "Based on a mix of average total from past prints and calculation (usually good accuracy)" +msgstr "Basiert auf einem Mix der durschnittlichen Dauer vergangener Druckjobs und der Berechnung (normalerweise gute Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:106 +msgid "Based on the calculated estimate (best accuracy)" +msgstr "Basiert auf der berechneten Schätzung (beste Genauigkeit)" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:144 msgid "Continue" msgstr "Fortsetzen" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:95 -#: src/octoprint/templates/sidebar/state.jinja2:18 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:146 +#: src/octoprint/templates/sidebar/state.jinja2:23 msgid "Pause" msgstr "Pause" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:106 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:157 #: src/octoprint/templates/tabs/timelapse.jinja2:11 msgid "On Z Change" msgstr "Bei Ebenenwechsel" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:108 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:159 #: src/octoprint/templates/tabs/timelapse.jinja2:10 msgid "Timed" msgstr "Nach Zeit" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:108 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:159 #: src/octoprint/templates/tabs/timelapse.jinja2:25 #: src/octoprint/templates/tabs/timelapse.jinja2:32 msgid "sec" msgstr "Sek" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:216 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:268 msgid "This will restart the print job from the beginning." msgstr "Der Druckjob wird zurückgesetzt und von vorne begonnen." @@ -1433,19 +1453,19 @@ msgstr "weiß" msgid "Autodetect from browser" msgstr "Automatisch vom Browser erkennen" -#: src/octoprint/static/js/app/viewmodels/slicing.js:31 +#: src/octoprint/static/js/app/viewmodels/slicing.js:104 msgid "Do nothing" msgstr "Nichts machen" -#: src/octoprint/static/js/app/viewmodels/slicing.js:32 +#: src/octoprint/static/js/app/viewmodels/slicing.js:105 msgid "Select for printing" msgstr "Zum Drucken auswählen" -#: src/octoprint/static/js/app/viewmodels/slicing.js:33 +#: src/octoprint/static/js/app/viewmodels/slicing.js:106 msgid "Start printing" msgstr "Drucken" -#: src/octoprint/static/js/app/viewmodels/slicing.js:45 +#: src/octoprint/static/js/app/viewmodels/slicing.js:118 #, python-format msgid "Slicing %(filename)s" msgstr "Slice %(filename)s" @@ -1553,31 +1573,6 @@ msgstr "Neue Zeitrafferaufnahme %(movie_prefix)s wurde fertig gerendert" msgid "Site default" msgstr "Seitenvoreinstellung" -#: src/octoprint/templates/index.jinja2:115 -msgid "Version" -msgstr "Version" - -#: src/octoprint/templates/index.jinja2:119 -msgid "Sourcecode" -msgstr "Quellcode" - -#: src/octoprint/templates/index.jinja2:120 -msgid "Documentation" -msgstr "Dokumentation" - -#: src/octoprint/templates/index.jinja2:121 -msgid "Bugs and Requests" -msgstr "Bugs und Requests" - -#: src/octoprint/templates/index.jinja2:122 -msgid "About" -msgstr "Über" - -#: src/octoprint/templates/dialogs/about.jinja2:4 -#: src/octoprint/templates/dialogs/settings.jinja2:51 -msgid "About OctoPrint" -msgstr "Über OctoPrint" - #: src/octoprint/templates/dialogs/confirmation.jinja2:4 msgid "Are you sure?" msgstr "Bist Du sicher?" @@ -1673,10 +1668,6 @@ msgstr "Zugangsbeschränkung deaktivieren" msgid "Keep Access Control Enabled" msgstr "Zugangsbeschränkung aktiviert lassen" -#: src/octoprint/templates/dialogs/settings.jinja2:4 -msgid "OctoPrint Settings" -msgstr "OctoPrint Einstellungen" - #: src/octoprint/templates/dialogs/slicing.jinja2:8 msgid "Slicing is currently disabled since no slicer has been configured yet. Please configure a slicer under \"Settings\"." msgstr "Slicing ist aktuell deaktiviert da noch kein Slicer konfiguriert wurde. Bitte konfiguriere einen Slicer unter \"Settings\"." @@ -1711,8 +1702,8 @@ msgid "Select a printer profile..." msgstr "Wähle ein Druckerprofil..." #: src/octoprint/templates/dialogs/slicing.jinja2:32 -msgid "GCode Filename" -msgstr "GCode Dateiname" +msgid "Output Filename" +msgstr "Ausgabedateiname" #: src/octoprint/templates/dialogs/slicing.jinja2:41 msgid "After slicing..." @@ -1723,11 +1714,6 @@ msgstr "Nach dem Slicing..." msgid "Slice" msgstr "Slicen" -#: src/octoprint/templates/dialogs/usersettings.jinja2:4 -#: src/octoprint/templates/navbar/login.jinja2:16 -msgid "User Settings" -msgstr "Nutzereinstellungen" - #: src/octoprint/templates/dialogs/about/about.jinja2:3 msgid "The snappy web interface for your 3D printer" msgstr "The snappy web interface for your 3D printer" @@ -1921,31 +1907,39 @@ msgid "Wait for start on connect" msgstr "Bei der Verbindung auf start warten" #: src/octoprint/templates/dialogs/settings/features.jinja2:40 +msgid "Select SD files by relative path" +msgstr "SD Dateien per relativem Pfad addressieren" + +#: src/octoprint/templates/dialogs/settings/features.jinja2:40 +msgid "RepRap Firmware" +msgstr "RepRap Firmware" + +#: src/octoprint/templates/dialogs/settings/features.jinja2:47 msgid "Always assume SD card is present" msgstr "Immer davon ausgehen, dass eine SD-Karte vorhanden ist" -#: src/octoprint/templates/dialogs/settings/features.jinja2:40 #: src/octoprint/templates/dialogs/settings/features.jinja2:47 #: src/octoprint/templates/dialogs/settings/features.jinja2:54 #: src/octoprint/templates/dialogs/settings/features.jinja2:61 #: src/octoprint/templates/dialogs/settings/features.jinja2:68 +#: src/octoprint/templates/dialogs/settings/features.jinja2:75 msgid "Repetier" msgstr "Repetier" -#: src/octoprint/templates/dialogs/settings/features.jinja2:47 +#: src/octoprint/templates/dialogs/settings/features.jinja2:54 msgid "Send a checksum with every command" msgstr "Eine Prüfsumme mit jedem Befehl senden" -#: src/octoprint/templates/dialogs/settings/features.jinja2:54 +#: src/octoprint/templates/dialogs/settings/features.jinja2:61 msgid "Ignore consecutive resend requests for the same line" msgstr "Aufeinanderfolgende Resend Requests für die selbe Zeilennummer ignorieren" -#: src/octoprint/templates/dialogs/settings/features.jinja2:61 +#: src/octoprint/templates/dialogs/settings/features.jinja2:68 #, python-format msgid "Support TargetExtr%%n/TargetBed target temperature format" msgstr "TargetExtr%%n/TargetBed Zieltemperaturformat unterstützen" -#: src/octoprint/templates/dialogs/settings/features.jinja2:68 +#: src/octoprint/templates/dialogs/settings/features.jinja2:75 msgid "Disable detection of external heatups" msgstr "Detektierung externer Aufheizvorgänge deaktivieren" @@ -1984,7 +1978,7 @@ msgstr "Falls der freie Plattenplatz unter diese Schwellwerte fallen sollte wird #: src/octoprint/templates/dialogs/settings/folders.jinja2:47 #: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:69 #: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:90 -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:66 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:69 #: src/octoprint/templates/tabs/timelapse.jinja2:13 msgid "Warning" msgstr "Warnung" @@ -2260,6 +2254,30 @@ msgstr "Viele Marlin < v1.1.0" msgid "Simulate an additional `ok` for resend requests" msgstr "Zusätzliches `ok` für Resendrequests simulieren" +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:129 +msgid "Maximum consecutive communication timeouts while idle. More than this and the printer will be considered to be gone. Set to 0 to disable." +msgstr "Maximale Anzahl aufeinanderfolgender Communication Timeouts im Idlezustand. Mehr als das und es wird angenommen, dass der Drucker offline ist. Auf 0 setzen um das zu verhindern." + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:130 +msgid "Max. consecutive timeouts while idle" +msgstr "Max. aufeinanderfolgende Timeouts wenn idle" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:135 +msgid "Maximum consecutive communication timeouts while printing. More than this and the printer will be considered to be gone. Set to 0 to disable." +msgstr "Maximale Anzahl aufeinanderfolgender Communication Timeouts beim Drucken. Mehr als das und es wird angenommen, dass der Drucker offline ist. Auf 0 setzen um das zu verhindern." + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:136 +msgid "Max. consecutive timeouts while printing" +msgstr "Max. aufeinanderfolgende Timeouts beim Drucken" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:141 +msgid "Maximum consecutive communication timeouts while a long running command is active. More than this and the printer will be considered to be gone. Set to 0 to disable." +msgstr "Maximale Anzahl aufeinanderfolgender Communication Timeouts wenn ein lang laufender Befehl aktiv ist. Mehr als das und es wird angenommen, dass der Drucker offline ist. Auf 0 setzen um das zu verhindern." + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:142 +msgid "Max. consecutive timeouts during long running commands" +msgstr "Max. aufeinanderfolgende Timeouts während lang laufender Befehle" + #: src/octoprint/templates/dialogs/settings/server.jinja2:2 msgid "Commands" msgstr "Befehle" @@ -2384,6 +2402,10 @@ msgstr "Änderungen der Oberflächensprache werden erst nach einem Neuladen der msgid "Remember me" msgstr "Login merken" +#: src/octoprint/templates/navbar/login.jinja2:16 +msgid "User Settings" +msgstr "Nutzereinstellungen" + #: src/octoprint/templates/navbar/login.jinja2:17 msgid "Logout" msgstr "Logout" @@ -2464,7 +2486,7 @@ msgstr "Frei" msgid "Total" msgstr "Gesamt" -#: src/octoprint/templates/sidebar/files.jinja2:64 +#: src/octoprint/templates/sidebar/files.jinja2:67 msgid "Hint: You can also drag and drop files on this page to upload them." msgstr "Hinweis: Du kannst auch Dateien auf diese Seite ziehen um sie hochzuladen." @@ -2528,39 +2550,39 @@ msgstr "SD-Karte auswerfen" msgid "Machine State" msgstr "Druckerstatus" -#: src/octoprint/templates/sidebar/state.jinja2:2 +#: src/octoprint/templates/sidebar/state.jinja2:3 msgid "File" msgstr "Datei" -#: src/octoprint/templates/sidebar/state.jinja2:7 +#: src/octoprint/templates/sidebar/state.jinja2:8 msgid "Approx. Total Print Time" msgstr "Ungefähre Druckdauer" -#: src/octoprint/templates/sidebar/state.jinja2:8 +#: src/octoprint/templates/sidebar/state.jinja2:10 msgid "Print Time" msgstr "Druckdauer" -#: src/octoprint/templates/sidebar/state.jinja2:9 +#: src/octoprint/templates/sidebar/state.jinja2:11 msgid "Print Time Left" msgstr "Verbleibende Druckdauer" -#: src/octoprint/templates/sidebar/state.jinja2:10 +#: src/octoprint/templates/sidebar/state.jinja2:12 msgid "Printed" msgstr "Gedruckt" -#: src/octoprint/templates/sidebar/state.jinja2:17 +#: src/octoprint/templates/sidebar/state.jinja2:22 msgid "Restart" msgstr "Restart" -#: src/octoprint/templates/sidebar/state.jinja2:17 +#: src/octoprint/templates/sidebar/state.jinja2:22 msgid "Print" msgstr "Drucken" -#: src/octoprint/templates/sidebar/state.jinja2:18 +#: src/octoprint/templates/sidebar/state.jinja2:23 msgid "Resume" msgstr "Weiter" -#: src/octoprint/templates/sidebar/state.jinja2:19 +#: src/octoprint/templates/sidebar/state.jinja2:24 msgid "Cancels the print job" msgstr "Bricht den Druckjob ab" @@ -2636,51 +2658,51 @@ msgstr "Lüfter an" msgid "Fan off" msgstr "Lüfter aus" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:14 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:17 msgid "Model info" msgstr "Modelinformationen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:21 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:24 msgid "Renderer options" msgstr "Rendereroptionen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:25 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:28 msgid "Sync with job progress" msgstr "Job mit Fortschritt synchronisieren" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:30 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:33 msgid "Center viewport on model" msgstr "Ausschnitt auf Modell zentrieren" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:33 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:36 msgid "Zoom in on model" msgstr "Auf Model zoomen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:39 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:42 msgid "Show moves" msgstr "Bewegungen zeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:42 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:45 msgid "Show retracts" msgstr "Retracts zeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:48 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:51 msgid "Also show previous layer" msgstr "Auch vorherige Schicht anzeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:51 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:54 msgid "Also show next layer" msgstr "Auch nächste Schicht anzeigen" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:56 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:59 msgid "Reload" msgstr "Neu laden" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:62 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:65 msgid "Note that the time estimates in this tab are calculated by the GCODE viewer in your browser and might differ from the values calculated by the server that are displayed in the \"State\" and \"Files\" panels in the sidebar due to slightly different implementations." msgstr "Beachte, dass die geschätzten Zeiten in diesem Tab durch den GCODE Viewer in Deinem Browser berechnet werden und sich von den durch den Server berechneten Werten unterscheiden können, die im \"Status\" und \"Dateien\" Bereich der Seitenleiste angezeigt werden. Die Ursache hierfür sind leicht unterschiedliche Implementierungen." -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:67 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:70 msgid "" "

\n" " You've selected for printing which has a size of\n" @@ -2702,7 +2724,7 @@ msgstr "" " Bist Du sicher, dass du die Datei trotzdem visualisieren willst?\n" "

" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:78 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:81 #, python-format msgid "Yes, please visualize %(name)s regardless of its size" msgstr "Ja, bitte visualisiere %(name)s unabhängig seiner Größe" @@ -2927,3 +2949,23 @@ msgstr "Zeitrafferaufnahme rendern" #~ msgid "Show Announcements..." #~ msgstr "Ankündigungen anzeigen..." +#~ msgid "Version" +#~ msgstr "Version" + +#~ msgid "Sourcecode" +#~ msgstr "Quellcode" + +#~ msgid "Documentation" +#~ msgstr "Dokumentation" + +#~ msgid "Bugs and Requests" +#~ msgstr "Bugs und Requests" + +#~ msgid "About" +#~ msgstr "Über" + +#~ msgid "About OctoPrint" +#~ msgstr "Über OctoPrint" + +#~ msgid "OctoPrint Settings" +#~ msgstr "OctoPrint Einstellungen" diff --git a/translations/messages.pot b/translations/messages.pot index 36190803..99b9051c 100644 --- a/translations/messages.pot +++ b/translations/messages.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OctoPrint 1.2.13.dev7+g6c20e58\n" +"Project-Id-Version: OctoPrint 1.2.14.dev70+gf671006\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2016-06-16 12:18+0200\n" +"POT-Creation-Date: 2016-07-28 11:50+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -54,7 +54,6 @@ msgstr "" #: src/octoprint/plugins/announcements/templates/announcements.jinja2:43 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:87 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:197 -#: src/octoprint/templates/dialogs/about.jinja2:51 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:96 msgid "Close" msgstr "" @@ -194,7 +193,6 @@ msgid "" msgstr "" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:121 -#: src/octoprint/templates/dialogs/usersettings.jinja2:46 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:80 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:109 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:151 @@ -203,7 +201,6 @@ msgid "Abort" msgstr "" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:122 -#: src/octoprint/templates/dialogs/usersettings.jinja2:47 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:81 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:110 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:152 @@ -507,7 +504,6 @@ msgstr "" #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:48 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:129 -#: src/octoprint/templates/index.jinja2:118 msgid "Homepage" msgstr "" @@ -661,15 +657,13 @@ msgstr "" #: src/octoprint/plugins/softwareupdate/templates/softwareupdate.jinja2:26 #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:101 #: src/octoprint/templates/dialogs/confirmation.jinja2:11 -#: src/octoprint/templates/dialogs/settings.jinja2:52 #: src/octoprint/templates/dialogs/slicing.jinja2:50 -#: src/octoprint/templates/sidebar/state.jinja2:19 +#: src/octoprint/templates/sidebar/state.jinja2:24 msgid "Cancel" msgstr "" #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:240 #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:102 -#: src/octoprint/templates/dialogs/settings.jinja2:53 msgid "Save" msgstr "" @@ -974,7 +968,7 @@ msgid "GCode Viewer" msgstr "" #: src/octoprint/server/views.py:146 -#: src/octoprint/templates/sidebar/state.jinja2:3 +#: src/octoprint/templates/sidebar/state.jinja2:4 msgid "Timelapse" msgstr "" @@ -1067,63 +1061,22 @@ msgid "" "may try a manual reconnect using the button below." msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:217 -#: src/octoprint/static/js/app/dataupdater.js:237 -#, python-format -msgid "Slicing ... (%(percentage)d%%)" -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:239 -msgid "Slicing ..." -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:245 -msgid "Slicing done" -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:245 -#, python-format -msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:255 -#, python-format -msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:256 -msgid "Slicing failed" -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:260 -msgid "Streaming ..." -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:266 -msgid "Streaming done" -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:267 -#, python-format -msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" -msgstr "" - -#: src/octoprint/static/js/app/dataupdater.js:273 -#: src/octoprint/static/js/app/dataupdater.js:281 +#: src/octoprint/static/js/app/dataupdater.js:230 +#: src/octoprint/static/js/app/dataupdater.js:238 msgid "Unhandled communication error" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:274 +#: src/octoprint/static/js/app/dataupdater.js:231 #, python-format msgid "" "There was an unhandled error while talking to the printer. Due to that " "the ongoing print job was cancelled. Error: %(firmwareError)s" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:282 +#: src/octoprint/static/js/app/dataupdater.js:239 #, python-format msgid "" -"The was an unhandled error while talking to the printer. Due to that " +"There was an unhandled error while talking to the printer. Due to that " "OctoPrint disconnected. Error: %(error)s" msgstr "" @@ -1199,9 +1152,9 @@ msgid "Disconnect" msgstr "" #: src/octoprint/static/js/app/viewmodels/control.js:65 -#: src/octoprint/static/js/app/viewmodels/files.js:329 +#: src/octoprint/static/js/app/viewmodels/files.js:348 #: src/octoprint/static/js/app/viewmodels/gcode.js:471 -#: src/octoprint/static/js/app/viewmodels/printerstate.js:177 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:228 #: src/octoprint/static/js/app/viewmodels/temperature.js:58 msgid "Tool" msgstr "" @@ -1223,35 +1176,76 @@ msgstr "" msgid "Your current disk usage." msgstr "" -#: src/octoprint/static/js/app/viewmodels/files.js:324 -#: src/octoprint/static/js/app/viewmodels/files.js:329 +#: src/octoprint/static/js/app/viewmodels/files.js:343 +#: src/octoprint/static/js/app/viewmodels/files.js:348 msgid "Filament" msgstr "" -#: src/octoprint/static/js/app/viewmodels/files.js:333 +#: src/octoprint/static/js/app/viewmodels/files.js:352 msgid "Estimated Print Time" msgstr "" -#: src/octoprint/static/js/app/viewmodels/files.js:336 +#: src/octoprint/static/js/app/viewmodels/files.js:355 msgid "Last Printed" msgstr "" -#: src/octoprint/static/js/app/viewmodels/files.js:338 +#: src/octoprint/static/js/app/viewmodels/files.js:357 msgid "Last Print Time" msgstr "" -#: src/octoprint/static/js/app/viewmodels/files.js:515 -msgid "" -"Could not upload the file. Make sure that it is a GCODE file and has the " -"extension \".gcode\" or \".gco\" or that it is an STL file with the " -"extension \".stl\"." +#: src/octoprint/static/js/app/viewmodels/files.js:460 +#: src/octoprint/static/js/app/viewmodels/files.js:467 +#, python-format +msgid "Slicing ... (%(percentage)d%%)" msgstr "" -#: src/octoprint/static/js/app/viewmodels/files.js:536 +#: src/octoprint/static/js/app/viewmodels/files.js:462 +msgid "Slicing ..." +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:488 +msgid "Slicing done" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:489 +#, python-format +msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:504 +#, python-format +msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:505 +msgid "Slicing failed" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:522 +msgid "Streaming ..." +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:534 +msgid "Streaming done" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:535 +#, python-format +msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:627 +#, python-format +msgid "" +"Could not upload the file. Make sure that it is a valid file with one of " +"these extensions: %(extensions)s" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/files.js:654 msgid "Uploading ..." msgstr "" -#: src/octoprint/static/js/app/viewmodels/files.js:543 +#: src/octoprint/static/js/app/viewmodels/files.js:660 msgid "Saving ..." msgstr "" @@ -1463,52 +1457,80 @@ msgstr "" msgid "Edit Printer Profile \"%(name)s\"" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:44 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:45 msgid "Restarts the print job from the beginning" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:45 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:46 msgid "Starts the print job" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:46 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:47 msgid "Resumes the print job" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:47 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:48 msgid "Pauses the print job" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:80 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:81 msgid "Calculating..." msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:93 -msgid "Continue" +#: src/octoprint/static/js/app/viewmodels/printerstate.js:91 +msgid "Based on a linear approximation (accuracy highly dependent on the model)" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:95 -#: src/octoprint/templates/sidebar/state.jinja2:18 -msgid "Pause" +#: src/octoprint/static/js/app/viewmodels/printerstate.js:94 +msgid "Based on the estimate from analysis of file (medium accuracy)" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:97 +msgid "Based on a mix of estimate from analysis and calculation (medium accuracy)" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:100 +msgid "" +"Based on the average total of past prints of this model with the same " +"printer profile (usually good accuracy)" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:103 +msgid "" +"Based on a mix of average total from past prints and calculation (usually" +" good accuracy)" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerstate.js:106 +msgid "Based on the calculated estimate (best accuracy)" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:144 +msgid "Continue" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:146 +#: src/octoprint/templates/sidebar/state.jinja2:23 +msgid "Pause" +msgstr "" + +#: src/octoprint/static/js/app/viewmodels/printerstate.js:157 #: src/octoprint/templates/tabs/timelapse.jinja2:11 msgid "On Z Change" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:108 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:159 #: src/octoprint/templates/tabs/timelapse.jinja2:10 msgid "Timed" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:108 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:159 #: src/octoprint/templates/tabs/timelapse.jinja2:25 #: src/octoprint/templates/tabs/timelapse.jinja2:32 msgid "sec" msgstr "" -#: src/octoprint/static/js/app/viewmodels/printerstate.js:216 +#: src/octoprint/static/js/app/viewmodels/printerstate.js:268 msgid "This will restart the print job from the beginning." msgstr "" @@ -1526,19 +1548,19 @@ msgstr "" msgid "Autodetect from browser" msgstr "" -#: src/octoprint/static/js/app/viewmodels/slicing.js:31 +#: src/octoprint/static/js/app/viewmodels/slicing.js:104 msgid "Do nothing" msgstr "" -#: src/octoprint/static/js/app/viewmodels/slicing.js:32 +#: src/octoprint/static/js/app/viewmodels/slicing.js:105 msgid "Select for printing" msgstr "" -#: src/octoprint/static/js/app/viewmodels/slicing.js:33 +#: src/octoprint/static/js/app/viewmodels/slicing.js:106 msgid "Start printing" msgstr "" -#: src/octoprint/static/js/app/viewmodels/slicing.js:45 +#: src/octoprint/static/js/app/viewmodels/slicing.js:118 #, python-format msgid "Slicing %(filename)s" msgstr "" @@ -1658,31 +1680,6 @@ msgstr "" msgid "Site default" msgstr "" -#: src/octoprint/templates/index.jinja2:115 -msgid "Version" -msgstr "" - -#: src/octoprint/templates/index.jinja2:119 -msgid "Sourcecode" -msgstr "" - -#: src/octoprint/templates/index.jinja2:120 -msgid "Documentation" -msgstr "" - -#: src/octoprint/templates/index.jinja2:121 -msgid "Bugs and Requests" -msgstr "" - -#: src/octoprint/templates/index.jinja2:122 -msgid "About" -msgstr "" - -#: src/octoprint/templates/dialogs/about.jinja2:4 -#: src/octoprint/templates/dialogs/settings.jinja2:51 -msgid "About OctoPrint" -msgstr "" - #: src/octoprint/templates/dialogs/confirmation.jinja2:4 msgid "Are you sure?" msgstr "" @@ -1767,10 +1764,6 @@ msgstr "" msgid "Keep Access Control Enabled" msgstr "" -#: src/octoprint/templates/dialogs/settings.jinja2:4 -msgid "OctoPrint Settings" -msgstr "" - #: src/octoprint/templates/dialogs/slicing.jinja2:8 msgid "" "Slicing is currently disabled since no slicer has been configured yet. " @@ -1810,7 +1803,7 @@ msgid "Select a printer profile..." msgstr "" #: src/octoprint/templates/dialogs/slicing.jinja2:32 -msgid "GCode Filename" +msgid "Output Filename" msgstr "" #: src/octoprint/templates/dialogs/slicing.jinja2:41 @@ -1822,11 +1815,6 @@ msgstr "" msgid "Slice" msgstr "" -#: src/octoprint/templates/dialogs/usersettings.jinja2:4 -#: src/octoprint/templates/navbar/login.jinja2:16 -msgid "User Settings" -msgstr "" - #: src/octoprint/templates/dialogs/about/about.jinja2:3 msgid "The snappy web interface for your 3D printer" msgstr "" @@ -2030,33 +2018,41 @@ msgid "Wait for start on connect" msgstr "" #: src/octoprint/templates/dialogs/settings/features.jinja2:40 -msgid "Always assume SD card is present" +msgid "Select SD files by relative path" msgstr "" #: src/octoprint/templates/dialogs/settings/features.jinja2:40 +msgid "RepRap Firmware" +msgstr "" + +#: src/octoprint/templates/dialogs/settings/features.jinja2:47 +msgid "Always assume SD card is present" +msgstr "" + #: src/octoprint/templates/dialogs/settings/features.jinja2:47 #: src/octoprint/templates/dialogs/settings/features.jinja2:54 #: src/octoprint/templates/dialogs/settings/features.jinja2:61 #: src/octoprint/templates/dialogs/settings/features.jinja2:68 +#: src/octoprint/templates/dialogs/settings/features.jinja2:75 msgid "Repetier" msgstr "" -#: src/octoprint/templates/dialogs/settings/features.jinja2:47 +#: src/octoprint/templates/dialogs/settings/features.jinja2:54 msgid "Send a checksum with every command" msgstr "" -#: src/octoprint/templates/dialogs/settings/features.jinja2:54 +#: src/octoprint/templates/dialogs/settings/features.jinja2:61 msgid "Ignore consecutive resend requests for the same line" msgstr "" -#: src/octoprint/templates/dialogs/settings/features.jinja2:61 +#: src/octoprint/templates/dialogs/settings/features.jinja2:68 #, python-format msgid "" "Support TargetExtr%%n/TargetBed target " "temperature format" msgstr "" -#: src/octoprint/templates/dialogs/settings/features.jinja2:68 +#: src/octoprint/templates/dialogs/settings/features.jinja2:75 msgid "Disable detection of external heatups" msgstr "" @@ -2099,7 +2095,7 @@ msgstr "" #: src/octoprint/templates/dialogs/settings/folders.jinja2:47 #: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:69 #: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:90 -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:66 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:69 #: src/octoprint/templates/tabs/timelapse.jinja2:13 msgid "Warning" msgstr "" @@ -2417,6 +2413,37 @@ msgstr "" msgid "Simulate an additional `ok` for resend requests" msgstr "" +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:129 +msgid "" +"Maximum consecutive communication timeouts while idle. More than this and" +" the printer will be considered to be gone. Set to 0 to disable." +msgstr "" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:130 +msgid "Max. consecutive timeouts while idle" +msgstr "" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:135 +msgid "" +"Maximum consecutive communication timeouts while printing. More than this" +" and the printer will be considered to be gone. Set to 0 to disable." +msgstr "" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:136 +msgid "Max. consecutive timeouts while printing" +msgstr "" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:141 +msgid "" +"Maximum consecutive communication timeouts while a long running command " +"is active. More than this and the printer will be considered to be gone. " +"Set to 0 to disable." +msgstr "" + +#: src/octoprint/templates/dialogs/settings/serialconnection.jinja2:142 +msgid "Max. consecutive timeouts during long running commands" +msgstr "" + #: src/octoprint/templates/dialogs/settings/server.jinja2:2 msgid "Commands" msgstr "" @@ -2545,6 +2572,10 @@ msgstr "" msgid "Remember me" msgstr "" +#: src/octoprint/templates/navbar/login.jinja2:16 +msgid "User Settings" +msgstr "" + #: src/octoprint/templates/navbar/login.jinja2:17 msgid "Logout" msgstr "" @@ -2629,7 +2660,7 @@ msgstr "" msgid "Total" msgstr "" -#: src/octoprint/templates/sidebar/files.jinja2:64 +#: src/octoprint/templates/sidebar/files.jinja2:67 msgid "Hint: You can also drag and drop files on this page to upload them." msgstr "" @@ -2693,39 +2724,39 @@ msgstr "" msgid "Machine State" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:2 +#: src/octoprint/templates/sidebar/state.jinja2:3 msgid "File" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:7 +#: src/octoprint/templates/sidebar/state.jinja2:8 msgid "Approx. Total Print Time" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:8 +#: src/octoprint/templates/sidebar/state.jinja2:10 msgid "Print Time" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:9 +#: src/octoprint/templates/sidebar/state.jinja2:11 msgid "Print Time Left" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:10 +#: src/octoprint/templates/sidebar/state.jinja2:12 msgid "Printed" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:17 +#: src/octoprint/templates/sidebar/state.jinja2:22 msgid "Restart" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:17 +#: src/octoprint/templates/sidebar/state.jinja2:22 msgid "Print" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:18 +#: src/octoprint/templates/sidebar/state.jinja2:23 msgid "Resume" msgstr "" -#: src/octoprint/templates/sidebar/state.jinja2:19 +#: src/octoprint/templates/sidebar/state.jinja2:24 msgid "Cancels the print job" msgstr "" @@ -2803,47 +2834,47 @@ msgstr "" msgid "Fan off" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:14 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:17 msgid "Model info" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:21 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:24 msgid "Renderer options" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:25 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:28 msgid "Sync with job progress" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:30 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:33 msgid "Center viewport on model" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:33 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:36 msgid "Zoom in on model" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:39 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:42 msgid "Show moves" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:42 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:45 msgid "Show retracts" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:48 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:51 msgid "Also show previous layer" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:51 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:54 msgid "Also show next layer" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:56 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:59 msgid "Reload" msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:62 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:65 msgid "" "Note that the time estimates in this tab are calculated by the GCODE " "viewer in your browser and might differ from the values calculated by the" @@ -2851,7 +2882,7 @@ msgid "" "sidebar due to slightly different implementations." msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:67 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:70 msgid "" "

\n" " You've selected " msgstr "" -#: src/octoprint/templates/tabs/gcodeviewer.jinja2:78 +#: src/octoprint/templates/tabs/gcodeviewer.jinja2:81 #, python-format msgid "Yes, please visualize %(name)s regardless of its size" msgstr "" From e76a3ea54ff747c29ea2845fe8d4ccf72acd6868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 28 Jul 2016 14:30:21 +0200 Subject: [PATCH 26/26] maintenance is now 1.2.15.dev --- .versioneer-lookup | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.versioneer-lookup b/.versioneer-lookup index 3d72f7f7..a86a359d 100644 --- a/.versioneer-lookup +++ b/.versioneer-lookup @@ -16,11 +16,11 @@ rc HEAD \(detached.* -# maintenance is currently the branch for preparation of maintenance release 1.2.14 +# maintenance is currently the branch for preparation of maintenance release 1.2.15 # so are any fix/... and improve/... branches -maintenance 1.2.14 cb2e0d449f607bbc89c7ad13c983a0cf11bbfdee pep440-dev -fix/.* 1.2.14 cb2e0d449f607bbc89c7ad13c983a0cf11bbfdee pep440-dev -improve/.* 1.2.14 cb2e0d449f607bbc89c7ad13c983a0cf11bbfdee pep440-dev +maintenance 1.2.15 14969e5508b7b66f38abaf0f96bb7dc5b9ebe929 pep440-dev +fix/.* 1.2.15 14969e5508b7b66f38abaf0f96bb7dc5b9ebe929 pep440-dev +improve/.* 1.2.15 14969e5508b7b66f38abaf0f96bb7dc5b9ebe929 pep440-dev # every other branch is a development branch and thus gets resolved to 1.3.0-dev for now .* 1.3.0 198d3450d94be1a2 pep440-dev