text:
/*****************
* Drawing mixins *
*****************/
/* GLOBALS */
stage {
  font-size: 10pt;
  color: #d8dee9; }

/* WIDGETS */
/* Buttons */
.button {
  color: #d8dee9;
  background-color: #232831;
  box-shadow: none;
  border: 1px solid #1f232b;
  text-shadow: 0 1px black;
  icon-shadow: 0 1px black;
  border-radius: 4px;
  border-width: 0;
  padding: 4px 32px; }
  .button:focus {
    color: #4c566a;
    text-shadow: 0 1px black;
    icon-shadow: 0 1px black;
    box-shadow: none;
    border: 1px solid #1f232b; }
  .button:insensitive {
    color: #838995;
    background-color: rgba(64, 70, 82, 0.66);
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
    border: none;
    text-shadow: none;
    icon-shadow: none; }
  .button:active {
    color: #4c566a;
    background-color: rgba(46, 52, 64, 0.95);
    border: 1px solid #1f232b;
    text-shadow: none;
    icon-shadow: none; }
  .button:hover {
    color: #4c566a;
    background-color: rgba(50, 57, 70, 0.95);
    border: 1px solid #1f232b;
    text-shadow: 0 1px black;
    icon-shadow: 0 1px black; }

.modal-dialog-linked-button {
  padding: 10px;
  border: 1px solid #1f232b;
  color: #d8dee9;
  background: #232831;
  text-shadow: none;
  icon-shadow: none;
  box-shadow: none; }
  .modal-dialog-linked-button:insensitive {
    color: #838995;
    background-color: rgba(64, 70, 82, 0.66);
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
    border: none;
    text-shadow: none;
    icon-shadow: none; }
  .modal-dialog-linked-button:active {
    color: #4c566a;
    background-color: rgba(46, 52, 64, 0.95);
    border: 1px solid #1f232b;
    text-shadow: none;
    icon-shadow: none; }
  .modal-dialog-linked-button:focus {
    color: #4c566a;
    text-shadow: 0 1px black;
    icon-shadow: 0 1px black;
    box-shadow: none;
    border: 1px solid #1f232b; }
    .modal-dialog-linked-button:focus:hover {
      color: #4c566a;
      text-shadow: 0 1px black;
      icon-shadow: 0 1px black;
      box-shadow: none;
      border: 1px solid #1f232b; }
  .modal-dialog-linked-button:hover {
    color: #4c566a;
    background-color: rgba(50, 57, 70, 0.95);
    border: 1px solid #1f232b;
    text-shadow: 0 1px black;
    icon-shadow: 0 1px black; }
  .modal-dialog-linked-button:first-child {
    border-radius: 0px 0px 0px 2px; }
  .modal-dialog-linked-button:last-child {
    border-radius: 0px 0px 2px 0px; }
  .modal-dialog-linked-button:first-child:last-child {
    border-radius: 0px 0px 2px 2px; }

/* Entries */
StEntry {
  background-color: #4e586d;
  border-color: #1f232b;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
  border-radius: 2px;
  padding: 4px;
  border-width: 0;
  color: #d8dee9;
  selection-background-color: #4c566a;
  selected-color: #d8dee9; }
  StEntry:focus {
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
  StEntry:insensitive {
    color: #838995;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
  StEntry StIcon.capslock-warning {
    icon-size: 16px;
    warning-color: #c3674a;
    padding: 0 4px; }

/* Scrollbars */
StScrollView.vfade {
  -st-vfade-offset: 68px; }

StScrollView.hfade {
  -st-hfade-offset: 68px; }

StScrollBar {
  padding: 0; }
  StScrollView StScrollBar {
    min-width: 14px;
    min-height: 14px; }
  StScrollBar StBin#trough {
    border-radius: 0;
    background-color: transparent; }
  StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
    border-radius: 8px;
    background-color: #505662;
    margin: 3px; }
    StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
      background-color: #b6bcc7; }
    StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
      background-color: #4c566a; }

/* Slider */
.slider {
  height: 1em;
  color: #d8dee9;
  border-color: black;
  -slider-height: 0.3em;
  -slider-background-color: #4e586d;
  -slider-border-color: black;
  -slider-active-background-color: #4c566a;
  -slider-active-border-color: #a3be8c;
  -slider-border-width: 0;
  -slider-handle-radius: 6px;
  -barlevel-height: 0.3em;
  -barlevel-background-color: #4e586d;
  -barlevel-border-color: black;
  -barlevel-active-background-color: #4c566a;
  -barlevel-active-border-color: #a3be8c;
  -barlevel-border-width: 0;
  -barlevel-handle-radius: 6px;
  -barlevel-overdrive-color: #4c566a;
  -barlevel-overdrive-border-color: transparent;
  -barlevel-overdrive-separator-width: 0px; }

/* Check Boxes */
.check-box StBoxLayout {
  spacing: .8em; }

.check-box StBin {
  width: 24px;
  height: 22px;
  background-image: url("assets/checkbox-off.svg"); }

.check-box:focus, .check-box:hover StBin {
  background-image: url("assets/checkbox-off-focused.svg"); }

.check-box:checked StBin {
  background-image: url("assets/checkbox.svg"); }

.check-box:focus:checked StBin {
  background-image: url("assets/checkbox-focused.svg"); }

/* Switches */
.toggle-switch {
  width: 65px;
  height: 22px;
  background-size: contain;
  background-image: url("assets/toggle-off.svg"); }
  .toggle-switch:checked {
    background-image: url("assets/toggle-on.svg"); }

.toggle-switch-us {
  background-image: url("assets/toggle-off.svg"); }
  .toggle-switch-us:checked {
    background-image: url("assets/toggle-on.svg"); }

.toggle-switch-intl {
  background-image: url("assets/toggle-off.svg"); }
  .toggle-switch-intl:checked {
    background-image: url("assets/toggle-on.svg"); }

/* links */
.shell-link {
  color: #88c0d0; }
  .shell-link:hover {
    color: #add3de; }

/* Modal Dialogs */
.headline {
  font-size: 110%; }

.lightbox {
  background-color: black; }

.flashspot {
  background-color: white; }

.modal-dialog {
  border: none;
  border-radius: 2px;
  color: #d8dee9;
  background-color: rgba(35, 40, 49, 0.95);
  box-shadow: 0 2px 4px 2px rgba(0, 0, 0, 0.2); }
  .modal-dialog .modal-dialog-content-box {
    padding: 24px; }
  .modal-dialog .run-dialog-entry {
    width: 20em;
    margin-bottom: 6px; }
  .modal-dialog .run-dialog-error-box {
    color: #b84f59;
    padding-top: 16px;
    spacing: 6px; }
  .modal-dialog .run-dialog-button-box {
    padding-top: 1em; }
  .modal-dialog .run-dialog-label {
    font-size: 11pt;
    font-weight: bold;
    color: #b7c2d7;
    padding-bottom: .4em; }
  .modal-dialog .run-dialog-description {
    color: #d8dee9; }

.mount-dialog-subject,
.end-session-dialog-subject {
  font-size: 13pt; }

/* Message Dialog */
.message-dialog-main-layout {
  padding: 12px 20px 0;
  spacing: 12px; }

.message-dialog-content {
  max-width: 28em;
  spacing: 20px; }

.message-dialog-icon {
  min-width: 48px;
  icon-size: 48px; }

.message-dialog-title {
  font-weight: bold; }

.message-dialog-subtitle {
  color: #58709d;
  font-weight: bold; }

/* End Session Dialog */
.end-session-dialog {
  spacing: 42px;
  border: none; }
  .end-session-dialog .modal-dialog-linked-button:last-child {
    background: #b84f59; }
    .end-session-dialog .modal-dialog-linked-button:last-child:hover, .end-session-dialog .modal-dialog-linked-button:last-child:focus {
      background: #bc5a63;
      color: #fff; }

.end-session-dialog-list {
  padding-top: 20px; }

.end-session-dialog-layout {
  padding-left: 17px; }
  .end-session-dialog-layout:rtl {
    padding-right: 17px; }

.end-session-dialog-description {
  width: 28em;
  padding-bottom: 10px; }
  .end-session-dialog-description:rtl {
    text-align: right; }

.end-session-dialog-warning {
  width: 28em;
  color: #c3674a;
  padding-top: 6px; }
  .end-session-dialog-warning:rtl {
    text-align: right; }

.end-session-dialog-logout-icon {
  border-radius: 3px;
  width: 48px;
  height: 48px;
  background-size: contain; }

.end-session-dialog-shutdown-icon {
  color: #b84f59;
  width: 48px;
  height: 48px; }

.end-session-dialog-inhibitor-layout {
  spacing: 16px;
  max-height: 200px;
  padding-right: 65px;
  padding-left: 65px; }

.end-session-dialog-session-list,
.end-session-dialog-app-list {
  spacing: 1em; }

.end-session-dialog-list-header {
  font-weight: bold; }
  .end-session-dialog-list-header:rtl {
    text-align: right; }

.end-session-dialog-app-list-item,
.end-session-dialog-session-list-item {
  spacing: 1em; }

.end-session-dialog-app-list-item-name,
.end-session-dialog-session-list-item-name {
  font-weight: bold; }

.end-session-dialog-app-list-item-description {
  color: #c8d0e0;
  font-size: 10pt; }

/* ShellMountOperation Dialogs */
.shell-mount-operation-icon {
  icon-size: 48px; }

.mount-dialog {
  spacing: 24px; }
  .mount-dialog .message-dialog-title {
    padding-top: 10px;
    padding-left: 17px;
    padding-bottom: 6px;
    max-width: 34em; }
  .mount-dialog .message-dialog-title:rtl {
    padding-left: 0px;
    padding-right: 17px; }
  .mount-dialog .message-dialog-body {
    padding-left: 17px;
    width: 28em; }
  .mount-dialog .message-dialog-body:rtl {
    padding-left: 0px;
    padding-right: 17px; }

.mount-dialog-app-list {
  max-height: 200px;
  padding-top: 24px;
  padding-left: 49px;
  padding-right: 32px; }

.mount-dialog-app-list:rtl {
  padding-right: 49px;
  padding-left: 32px; }

.mount-dialog-app-list-item {
  color: #b7c2d7; }
  .mount-dialog-app-list-item:hover {
    color: #d8dee9; }
  .mount-dialog-app-list-item:ltr {
    padding-right: 1em; }
  .mount-dialog-app-list-item:rtl {
    padding-left: 1em; }

.mount-dialog-app-list-item-icon:ltr {
  padding-right: 17px; }

.mount-dialog-app-list-item-icon:rtl {
  padding-left: 17px; }

.mount-dialog-app-list-item-name {
  font-size: 10pt; }

/* Password or Authentication Dialog */
.prompt-dialog {
  width: 34em;
  border: none;
  border-radius: 2px; }
  .prompt-dialog .message-dialog-main-layout {
    spacing: 24px;
    padding: 10px; }
  .prompt-dialog .message-dialog-content {
    spacing: 16px; }
  .prompt-dialog .message-dialog-title {
    color: #8699bb; }

.prompt-dialog-description:rtl {
  text-align: right; }

.prompt-dialog-password-box {
  spacing: 1em;
  padding-bottom: 1em; }

.prompt-dialog-error-label {
  font-size: 10pt;
  color: #b84f59;
  padding-bottom: 8px; }

.prompt-dialog-info-label {
  font-size: 10pt;
  padding-bottom: 8px; }

.hidden {
  color: rgba(0, 0, 0, 0); }

.prompt-dialog-null-label {
  font-size: 10pt;
  padding-bottom: 8px; }

/* Polkit Dialog */
.polkit-dialog-user-layout {
  padding-left: 10px;
  spacing: 10px; }
  .polkit-dialog-user-layout:rtl {
    padding-left: 0px;
    padding-right: 10px; }

.polkit-dialog-user-root-label {
  color: #c3674a; }

.polkit-dialog-user-icon {
  border-radius: 3px;
  background-size: contain;
  width: 48px;
  height: 48px; }

/* Audio selection dialog */
.audio-device-selection-dialog {
  spacing: 30px; }

.audio-selection-content {
  spacing: 20px;
  padding: 24px; }

.audio-selection-title {
  font-weight: bold;
  text-align: center; }

.audio-selection-box {
  spacing: 20px; }

.audio-selection-device {
  border: 1px solid #d8dee9;
  border-radius: 12px; }
  .audio-selection-device:active, .audio-selection-device:hover, .audio-selection-device:focus {
    background-color: #4c566a; }

.audio-selection-device-box {
  padding: 20px;
  spacing: 20px; }

.audio-selection-device-icon {
  icon-size: 64px; }

/* Access Dialog */
.access-dialog {
  spacing: 30px; }

/* Geolocation Dialog */
.geolocation-dialog {
  spacing: 30px; }

/* Extension Dialog */
.extension-dialog .message-dialog-main-layout {
  spacing: 24px;
  padding: 10px; }

.extension-dialog .message-dialog-title {
  color: #8699bb; }

/* Inhibit-Shortcuts Dialog */
.inhibit-shortcuts-dialog {
  spacing: 30px; }

/* Network Agent Dialog */
.network-dialog-secret-table {
  spacing-rows: 15px;
  spacing-columns: 1em; }

.keyring-dialog-control-table {
  spacing-rows: 15px;
  spacing-columns: 1em; }

/* Popovers/Menus */
.popup-menu {
  min-width: 15em;
  background-color: transparent;
  color: #d8dee9; }
  .popup-menu .popup-sub-menu {
    background-color: rgba(0, 0, 0, 0.2);
    box-shadow: 0 2px 4px 2px rgba(0, 0, 0, 0.2); }
  .popup-menu .popup-menu-content {
    padding: 16px 0; }
  .popup-menu .popup-menu-item {
    spacing: 6px;
    padding: 6px; }
    .popup-menu .popup-menu-item:ltr {
      padding-right: 1.75em;
      padding-left: 0; }
    .popup-menu .popup-menu-item:rtl {
      padding-right: 0;
      padding-left: 1.75em; }
    .popup-menu .popup-menu-item:checked {
      background-color: rgba(76, 86, 106, 0.9);
      color: #d8dee9;
      box-shadow: inset 0 1px 0px #2a2f3a;
      font-weight: bold; }
      .popup-menu .popup-menu-item:checked:hover {
        background-color: rgba(76, 86, 106, 0.9);
        color: #d8dee9; }
    .popup-menu .popup-menu-item.selected {
      background-color: rgba(216, 222, 233, 0.1);
      color: #d8dee9; }
    .popup-menu .popup-menu-item:active {
      background-color: #4c566a;
      color: #d8dee9; }
    .popup-menu .popup-menu-item:insensitive {
      color: rgba(216, 222, 233, 0.5); }
  .popup-menu .popup-inactive-menu-item {
    color: #d8dee9; }
    .popup-menu .popup-inactive-menu-item:insensitive {
      color: rgba(216, 222, 233, 0.5); }
  .popup-menu.panel-menu {
    -boxpointer-gap: 4px;
    margin-bottom: 1.75em; }

.popup-menu-ornament {
  text-align: right;
  width: 1.2em; }

.popup-menu-boxpointer,
.candidate-popup-boxpointer {
  -arrow-border-radius: 5px;
  -arrow-background-color: #2e3440;
  -arrow-border-width: 1px;
  -arrow-border-color: #1f232b;
  -arrow-base: 24px;
  -arrow-rise: 11px;
  -arrow-box-shadow: 0 1px 3px black; }

.popup-separator-menu-item-separator {
  height: 1px;
  margin: 6px 64px;
  background-color: transparent;
  border-color: transparent;
  border-bottom-width: 1px;
  border-bottom-style: solid; }

.popup-sub-menu .popup-separator-menu-item .popup-separator-menu-item-separator {
  margin: 0 64px 0 32px;
  background: transparent; }

.background-menu {
  -boxpointer-gap: 4px;
  -arrow-rise: 0px; }

/* fallback menu
- odd thing for styling App menu when apparently not running under shell. Light Adwaita styled
  app menu inside the main app window itself rather than the top bar
*/
/* OSD */
.osd-window {
  text-align: center;
  font-weight: bold;
  spacing: 1em;
  margin: 32px;
  min-width: 64px;
  min-height: 64px; }
  .osd-window .osd-monitor-label {
    font-size: 3em; }
  .osd-window .level {
    height: 0.4em;
    border-radius: 0.3em;
    color: #d8dee9;
    border: 1px solid #1f232b;
    -barlevel-height: 0.4em;
    -barlevel-background-color: rgba(3, 4, 5, 0.5);
    -barlevel-active-background-color: #4c566a;
    -barlevel-overdrive-color: #bf616a;
    -barlevel-overdrive-separator-width: 0.2em; }
  .osd-window .level-bar {
    background-color: #4c566a;
    border-radius: 0.3em; }

/* Pad OSD */
.pad-osd-window {
  padding: 32px;
  background-color: rgba(0, 0, 0, 0.8); }
  .pad-osd-window .pad-osd-title-box {
    spacing: 12px; }
  .pad-osd-window .pad-osd-title-menu-box {
    spacing: 6px; }

.combo-box-label {
  width: 15em; }

/* App Switcher */
.switcher-popup {
  padding: 8px;
  spacing: 16px; }

.switcher-list-item-container {
  spacing: 8px; }

.switcher-list .item-box {
  padding: 8px;
  border-radius: 4px; }

.switcher-list .item-box:outlined {
  padding: 6px;
  border: 2px solid #0a0b0e; }

.switcher-list .item-box:selected {
  background-color: #4c566a;
  color: #d8dee9; }

.switcher-list .thumbnail-box {
  padding: 2px;
  spacing: 4px; }

.switcher-list .thumbnail {
  width: 256px; }

.switcher-list .separator {
  width: 1px;
  background: #1f232b; }

.switcher-arrow {
  border-color: rgba(0, 0, 0, 0);
  color: rgba(216, 222, 233, 0.8); }
  .switcher-arrow:highlighted {
    color: #d8dee9; }

.input-source-switcher-symbol {
  font-size: 34pt;
  width: 96px;
  height: 96px; }

/* Window Cycler */
.cycler-highlight {
  border: 5px solid #4c566a; }

/* Workspace Switcher */
.workspace-switcher-group {
  padding: 12px; }

.workspace-switcher {
  background: transparent;
  border: 0px;
  border-radius: 0px;
  padding: 0px;
  spacing: 8px; }

.ws-switcher-active-up, .ws-switcher-active-down {
  height: 50px;
  background-color: #4c566a;
  color: #d8dee9;
  background-size: 32px;
  border-radius: 8px; }

.ws-switcher-active-up {
  background-image: url("assets/ws-switch-arrow-up.png"); }

.ws-switcher-active-down {
  background-image: url("assets/ws-switch-arrow-down.png"); }

.ws-switcher-box {
  height: 50px;
  border: 1px solid rgba(216, 222, 233, 0.1);
  background: rgba(25, 28, 34, 0.95);
  border-radius: 8px; }

.osd-window,
.resize-popup,
.switcher-list, .workspace-switcher-container {
  color: #d8dee9;
  background-color: rgba(46, 52, 64, 0.95);
  border: 1px solid #1f232b;
  box-shadow: 0px 0px 5px #1f232b;
  border-radius: 5px;
  padding: 12px; }

/* Tiled window previews */
.tile-preview {
  background-color: rgba(76, 86, 106, 0.5);
  border: 1px solid #4c566a; }

.tile-preview-left.on-primary {
  border-radius: 2px 2px 0 0; }

.tile-preview-right.on-primary {
  border-radius: 0 2px 0 0; }

.tile-preview-left.tile-preview-right.on-primary {
  border-radius: 2px 2px 0 0; }

/* TOP BAR */
#panel {
  background-gradient-direction: none;
  background-color: #1d2128;
  /* transition from solid to transparent */
  transition-duration: 500ms;
  font-weight: bold;
  height: 1.86em;
  padding: 0px 0px; }
  #panel.unlock-screen, #panel.login-screen, #panel.lock-screen {
    background-color: transparent; }
  #panel #panelLeft, #panel #panelCenter {
    spacing: 4px; }
  #panel .panel-corner {
    -panel-corner-radius: 0px;
    -panel-corner-background-color: rgba(0, 0, 0, 0.2);
    -panel-corner-border-width: 2px;
    -panel-corner-border-color: transparent; }
    #panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
      -panel-corner-border-color: #576279; }
    #panel .panel-corner.lock-screen, #panel .panel-corner.login-screen, #panel .panel-corner.unlock-screen {
      -panel-corner-radius: 0;
      -panel-corner-background-color: transparent;
      -panel-corner-border-color: transparent; }
  #panel .panel-button {
    -natural-hpadding: 12px;
    -minimum-hpadding: 6px;
    font-weight: bold;
    color: #d8dee9;
    transition-duration: 100ms; }
    #panel .panel-button .app-menu-icon {
      -st-icon-style: symbolic;
      margin-left: 4px;
      margin-right: 4px; }
    #panel .panel-button:hover {
      background: #323946;
      color: #f9fafb; }
    #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
      background: #4c566a;
      box-shadow: inset 0 -2px 0px #576279;
      color: #fff; }
    #panel .panel-button .system-status-icon {
      icon-size: 1.09em;
      padding: 0 5px; }
    .unlock-screen #panel .panel-button,
    .login-screen #panel .panel-button,
    .lock-screen #panel .panel-button {
      color: #f9fafb; }
      .unlock-screen #panel .panel-button:focus, .unlock-screen #panel .panel-button:hover, .unlock-screen #panel .panel-button:active,
      .login-screen #panel .panel-button:focus,
      .login-screen #panel .panel-button:hover,
      .login-screen #panel .panel-button:active,
      .lock-screen #panel .panel-button:focus,
      .lock-screen #panel .panel-button:hover,
      .lock-screen #panel .panel-button:active {
        color: #f9fafb; }
    #panel .panel-button.clock-display:active, #panel .panel-button.clock-display:overview, #panel .panel-button.clock-display:focus, #panel .panel-button.clock-display:checked {
      box-shadow: none; }
      #panel .panel-button.clock-display:active .clock, #panel .panel-button.clock-display:overview .clock, #panel .panel-button.clock-display:focus .clock, #panel .panel-button.clock-display:checked .clock {
        box-shadow: none; }
  #panel .panel-status-indicators-box,
  #panel .panel-status-menu-box {
    spacing: 2px; }
  #panel .power-status.panel-status-indicators-box {
    spacing: 0; }
  #panel .screencast-indicator {
    color: #c3674a; }
  #panel.solid {
    background-color: #1d2128;
    /* transition from transparent to solid */
    transition-duration: 300ms; }
    #panel.solid .panel-corner {
      -panel-corner-background-color: black; }
    #panel.solid .system-status-icon,
    #panel.solid .app-menu-icon > StIcon,
    #panel.solid .popup-menu-arrow {
      icon-shadow: none; }

#calendarArea {
  padding: 0.75em 1.0em; }

.calendar {
  margin-bottom: 1em; }

.calendar, .world-clocks-button, .weather-button, .events-button {
  background: transparent;
  border: none; }

.calendar,
.datemenu-today-button,
.datemenu-displays-box,
.message-list-sections {
  margin: 0 1.5em; }

.datemenu-calendar-column {
  spacing: 0.5em; }

.datemenu-displays-section {
  padding-bottom: 3em; }

.datemenu-displays-box {
  spacing: 1em; }

.datemenu-calendar-column {
  border: 0 solid transparent; }
  .datemenu-calendar-column:ltr {
    border-left-width: 1px; }
  .datemenu-calendar-column:rtl {
    border-right-width: 1px; }

.datemenu-today-button,
.world-clocks-button,
.weather-button,
.events-section-title,
.message-list-section-title,
.events-button {
  border-radius: 4px;
  color: #d8dee9;
  padding: .4em; }

.message-list-section-list:ltr {
  padding-left: .4em; }

.message-list-section-list:rtl {
  padding-right: .4em; }

.datemenu-today-button:hover, .datemenu-today-button:focus,
.world-clocks-button:hover,
.world-clocks-button:focus,
.weather-button:hover,
.weather-button:focus,
.events-section-title:hover,
.events-section-title:focus,
.message-list-section-title:hover,
.message-list-section-title:focus,
.events-button:hover,
.events-button:focus {
  background-color: #39404f; }

.datemenu-today-button:active,
.world-clocks-button:active,
.weather-button:active,
.events-section-title:active,
.message-list-section-title:active,
.events-button:active {
  color: #e8ecf2;
  background-color: #4c566a; }

.datemenu-today-button .date-label {
  font-size: 1.5em; }

.world-clocks-header,
.weather-header,
.events-section-title,
.message-list-section-title,
.events-title {
  color: #58709d;
  font-weight: bold; }

.events-button .event-time {
  color: #cbd3e2; }

.world-clocks-grid {
  spacing-rows: 0.4em; }

.weather-box {
  spacing: 0.4em; }

.calendar-month-label {
  color: #c8d0e0;
  font-weight: bold;
  padding: 8px 0; }

.pager-button {
  color: white;
  background-color: transparent;
  width: 32px;
  border-radius: 4px; }
  .pager-button:hover, .pager-button:focus {
    background-color: rgba(216, 222, 233, 0.05); }
  .pager-button:active {
    background-color: rgba(46, 52, 64, 0.05); }

.calendar-change-month-back {
  background-image: url("assets/calendar-arrow-left.svg"); }
  .calendar-change-month-back:rtl {
    background-image: url("assets/calendar-arrow-right.svg"); }

.calendar-change-month-forward {
  background-image: url("assets/calendar-arrow-right.svg"); }
  .calendar-change-month-forward:rtl {
    background-image: url("assets/calendar-arrow-left.svg"); }

.calendar-day-base {
  font-size: 80%;
  text-align: center;
  width: 2.4em;
  height: 2.4em;
  padding: 0.1em;
  margin: 2px;
  border-radius: 1.4em;
  color: #d8dee9; }
  .calendar-day-base:hover, .calendar-day-base:focus {
    background-color: #39404f; }
  .calendar-day-base:active, .calendar-day-base:selected {
    color: #e8ecf2;
    background-color: #4c566a;
    border-color: transparent; }
  .calendar-day-base.calendar-day-heading {
    color: #58709d;
    margin-top: 1em;
    font-size: 70%; }

.calendar-day {
  border-width: 0; }

.calendar-day-top {
  border-top-width: 1px; }

.calendar-day-left {
  border-left-width: 1px; }

.calendar-nonwork-day {
  color: #838995; }

.calendar-today {
  font-weight: bold;
  border: 1px solid rgba(31, 35, 43, 0.5); }

.calendar-day-with-events {
  color: #f9fafb;
  font-weight: bold;
  background-image: url("assets/calendar-today.svg"); }

.calendar-other-month-day {
  color: #838995;
  opacity: 0.5; }

.calendar-week-number {
  font-size: 70%;
  font-weight: bold;
  width: 2.3em;
  height: 1.8em;
  border-radius: 2px;
  padding: 0.5em 0 0;
  margin: 6px;
  background-color: rgba(216, 222, 233, 0.3);
  color: #2e3440; }

/* Message list */
.message-list {
  width: 31.5em; }
  .message-list .message-title, .message-list .message-content, .message-list .message-body {
    color: #c8d0e0; }

.message-list-clear-button.button {
  border: 1px solid #1f232b;
  box-shadow: none;
  margin: 1.5em 1.5em 0; }
  .message-list-clear-button.button:hover, .message-list-clear-button.button:focus {
    background-color: #39404f; }

.message-list-sections {
  spacing: 1em; }

.message-list-section,
.message-list-section-list {
  spacing: 0.4em; }

.message-list-section-close > StIcon {
  icon-size: 16px;
  border-radius: 16px;
  padding: 8px;
  color: #d8dee9;
  background-color: transparent; }

.message-list-section-close:hover > StIcon,
.message-list-section-close:focus > StIcon .message-list-section-close:active > StIcon {
  color: #bf616a;
  background: transparent; }

.message {
  border: 1px solid #1f232b;
  border-radius: 3px;
  background: #2d323e;
  box-shadow: none; }
  .message:hover, .message:focus {
    background-color: #323946;
    box-shadow: 3px 0px 0px 0px #4c566a inset; }

.message-icon-bin {
  padding: 10px 3px 10px 10px; }
  .message-icon-bin:rtl {
    padding: 10px 10px 10px 3px; }

.message-icon-bin > StIcon {
  icon-size: 16px;
  -st-icon-style: symbolic; }

.message-secondary-bin {
  padding: 0 12px; }

.message-secondary-bin > .event-time {
  color: #a7b5cd;
  font-size: 0.7em;
  /* HACK: the label should be baseline-aligned with a 1em label,
                     fake this with some bottom padding */
  padding-bottom: 0.13em; }

.message-secondary-bin > StIcon {
  icon-size: 16px; }

.message-content {
  padding: 10px; }
  .message-content *:hover > StIcon,
  .message-content *:focus > StIcon {
    color: #bf616a; }

.message-media-control {
  padding: 12px;
  color: #97a7c4; }
  .message-media-control:last-child:ltr {
    padding-right: 18px; }
  .message-media-control:last-child:rtl {
    padding-left: 18px; }
  .message-media-control:hover {
    color: #d8dee9; }
  .message-media-control:insensitive {
    color: #58709d; }

.media-message-cover-icon {
  icon-size: 48px !important; }
  .media-message-cover-icon.fallback {
    color: #434c5e;
    background-color: #2e3440;
    border: 2px solid #2e3440;
    border-radius: 2px;
    icon-size: 16px;
    padding: 8px; }

/* Weather */
.weather-button .weather-header {
  color: #b7c2d7;
  font-weight: bold; }
  .weather-button .weather-header.location {
    font-weight: normal; }

.weather-button .weather-forecast-time {
  color: #b7c2d7;
  font-feature-settings: "tnum";
  font-weight: normal;
  padding-top: 0.2em;
  padding-bottom: 0.4em; }

.weather-button .weather-forecast-temp {
  font-weight: bold; }

.system-switch-user-submenu-icon.user-icon {
  icon-size: 20px;
  padding: 0 2px; }

.system-switch-user-submenu-icon.default-icon {
  icon-size: 16px;
  padding: 0 4px; }

#appMenu {
  spinner-image: url("assets/process-working.svg");
  spacing: 4px; }
  #appMenu .label-shadow {
    color: transparent; }

.aggregate-menu {
  min-width: 21em; }
  .aggregate-menu .popup-menu-icon {
    padding: 0 4px; }

.system-menu-action {
  color: #d8dee9;
  border-radius: 32px;
  /* wish we could do 50% */
  border: 1px solid #1f232b;
  background: #282d37;
  padding: 13px; }
  .system-menu-action:hover, .system-menu-action:focus {
    border: 1px solid #4c566a;
    color: #4c566a;
    background: transparent; }
  .system-menu-action:active {
    background-color: #373e4c;
    color: #d8dee9; }
  .system-menu-action > StIcon {
    icon-size: 16px; }

.ripple-box {
  width: 52px;
  height: 52px;
  background-image: url("assets/corner-ripple-ltr.png");
  background-size: contain; }

.ripple-box:rtl {
  background-image: url("assets/corner-ripple-rtl.png"); }

.popup-menu-arrow {
  width: 16px;
  height: 16px; }

.popup-menu-icon {
  icon-size: 1.09em; }

.window-close {
  background-color: transparent;
  background-image: url("assets/close-window.svg");
  background-size: 32px;
  border: none;
  box-shadow: none;
  color: transparent;
  height: 32px;
  width: 32px; }

.window-close {
  -shell-close-overlap: 16px; }
  .window-close:rtl {
    -st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); }

/* NETWORK DIALOGS */
.nm-dialog {
  max-height: 34em;
  min-height: 31em;
  min-width: 32em; }

.nm-dialog-content {
  spacing: 20px;
  padding: 24px; }

.nm-dialog-header-hbox {
  spacing: 10px; }

.nm-dialog-airplane-box {
  spacing: 12px; }

.nm-dialog-airplane-headline {
  font-weight: bold;
  text-align: center; }

.nm-dialog-airplane-text {
  color: #d8dee9; }

.nm-dialog-header-icon {
  icon-size: 32px; }

.nm-dialog-scroll-view {
  border: 2px solid #1f232b;
  background: transparent; }

.nm-dialog-header {
  font-weight: bold; }

.nm-dialog-item {
  font-size: 110%;
  border-bottom: 1px solid #1f232b;
  padding: 12px;
  spacing: 20px; }

.nm-dialog-item:selected {
  background-color: #4c566a;
  color: #d8dee9; }

.nm-dialog-icons {
  spacing: .5em; }

.nm-dialog-icon {
  icon-size: 16px; }

.no-networks-label {
  color: #999999; }

.no-networks-box {
  spacing: 12px; }

/* OVERVIEW */
#overview {
  spacing: 24px; }

.overview-controls {
  padding-bottom: 32px; }

.window-picker {
  -horizontal-spacing: 16px;
  -vertical-spacing: 16px;
  padding: 0 16px 16px; }
  .window-picker.external-monitor {
    padding: 16px; }

.window-clone-border {
  border: 4px solid rgba(76, 86, 106, 0.3);
  border-radius: 0px;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.3); }

.window-caption {
  spacing: 20px;
  color: #d8dee9;
  background-color: rgba(46, 52, 64, 0.65);
  border-radius: 2px;
  padding: 4px 8px; }

.search-entry {
  width: 320px;
  padding: 9px;
  border-radius: 2px;
  border: none;
  color: #d8dee9;
  background-color: rgba(46, 52, 64, 0.6);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
  .search-entry:focus {
    border-width: 0;
    color: #d8dee9;
    background-color: rgba(46, 52, 64, 0.8);
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); }
  .search-entry .search-entry-icon {
    icon-size: 1em;
    padding: 0 4px;
    color: rgba(216, 222, 233, 0.7); }
  .search-entry:hover, .search-entry:focus {
    background-color: rgba(46, 52, 64, 0.8); }
    .search-entry:hover .search-entry-icon, .search-entry:focus .search-entry-icon {
      color: #d8dee9; }

#searchResultsBin {
  max-width: 1000px; }

#searchResultsContent {
  padding-left: 20px;
  padding-right: 20px;
  spacing: 16px; }

.search-section {
  spacing: 16px; }

.search-section-content {
  background-color: transparent;
  border-radius: 0;
  border: none;
  box-shadow: none;
  spacing: 32px; }

.list-search-results {
  spacing: 3px; }

.search-section-separator {
  height: 2px;
  background-color: rgba(255, 255, 255, 0.2); }

.list-search-result-content {
  spacing: 30px; }

.list-search-result-title {
  color: #e8ecf2;
  spacing: 12px; }

.list-search-result-description {
  color: rgba(255, 255, 255, 0.5); }

.list-search-provider-details {
  width: 150px;
  color: #e8ecf2;
  margin-top: 0.24em; }

.list-search-provider-content {
  spacing: 20px; }

.search-provider-icon {
  padding: 15px; }

/* DASHBOARD */
#dash {
  font-size: 9pt;
  color: #d8dee9;
  background-color: #1d2128;
  padding: 6px 0;
  border: 1px solid #1f232b;
  border-left: 0px;
  border-radius: 0px 5px 5px 0px; }
  #dash:rtl {
    border-radius: 9px 0 0 9px; }
  #dash .placeholder {
    background-image: url("assets/dash-placeholder.svg");
    background-size: contain;
    height: 24px; }
  #dash .empty-dash-drop-target {
    width: 24px;
    height: 24px; }

.dash-item-container > StWidget {
  padding: 4px 8px; }

.dash-label {
  border-radius: 7px;
  padding: 4px 12px;
  color: #d8dee9;
  background-color: #1d2128;
  text-align: center;
  -x-offset: 8px; }

/* App Vault/Grid */
.icon-grid {
  spacing: 30px;
  -shell-grid-horizontal-item-size: 136px;
  -shell-grid-vertical-item-size: 136px; }
  .icon-grid .overview-icon {
    icon-size: 96px; }

.system-action-icon {
  background-color: black;
  color: white;
  border-radius: 99px;
  icon-size: 48px; }

.app-view-controls {
  padding-bottom: 32px; }

.app-view-control {
  padding: 4px 32px; }
  .app-view-control:checked {
    color: #4c566a;
    background-color: rgba(46, 52, 64, 0.95);
    border: 1px solid #1f232b;
    text-shadow: none;
    icon-shadow: none; }
  .app-view-control:first-child {
    border-right-width: 0;
    border-radius: 3px 0 0 3px; }
  .app-view-control:last-child {
    border-radius: 0 3px 3px 0; }

.search-provider-icon:active, .search-provider-icon:checked,
.list-search-result:active,
.list-search-result:checked {
  background-color: rgba(25, 28, 34, 0.85); }

.search-provider-icon:focus, .search-provider-icon:selected, .search-provider-icon:hover,
.list-search-result:focus,
.list-search-result:selected,
.list-search-result:hover {
  background-color: rgba(46, 52, 64, 0.3);
  transition-duration: 200ms; }

.app-well-app,
.app-well-app.app-folder,
.show-apps,
.grid-search-result {
  border: none; }
  .app-well-app:active .overview-icon,
  .app-well-app:checked .overview-icon,
  .app-well-app.app-folder:active .overview-icon,
  .app-well-app.app-folder:checked .overview-icon,
  .show-apps:active .overview-icon,
  .show-apps:checked .overview-icon,
  .grid-search-result:active .overview-icon,
  .grid-search-result:checked .overview-icon {
    background-color: rgba(31, 35, 43, 0.85);
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
    color: #d8dee9; }
  .app-well-app:hover .overview-icon,
  .app-well-app:focus .overview-icon,
  .app-well-app:selected .overview-icon,
  .app-well-app.app-folder:hover .overview-icon,
  .app-well-app.app-folder:focus .overview-icon,
  .app-well-app.app-folder:selected .overview-icon,
  .show-apps:hover .overview-icon,
  .show-apps:focus .overview-icon,
  .show-apps:selected .overview-icon,
  .grid-search-result:hover .overview-icon,
  .grid-search-result:focus .overview-icon,
  .grid-search-result:selected .overview-icon {
    background-color: rgba(46, 52, 64, 0.5);
    transition-duration: 0ms;
    border-image: none;
    background-image: none; }

.app-well-app-running-dot {
  width: 4px;
  height: 4px;
  background-color: #4c566a;
  border-radius: 10px !important;
  box-shadow: 0px 0px 5px 4px rgba(76, 86, 106, 0.8);
  margin-bottom: 0px; }

.search-provider-icon,
.list-search-result, .app-well-app .overview-icon,
.app-well-app.app-folder .overview-icon,
.show-apps .overview-icon,
.grid-search-result .overview-icon {
  color: #d8dee9;
  border-radius: 2px;
  padding: 7px 6px;
  border: none;
  transition-duration: 100ms;
  text-align: center;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }

.app-well-app.app-folder > .overview-icon {
  background-color: rgba(46, 52, 64, 0.35); }

.show-apps .show-apps-icon {
  color: #d8dee9; }

.show-apps:checked .show-apps-icon,
.show-apps:focus .show-apps-icon {
  color: #d8dee9;
  transition-duration: 100ms; }

.app-folder-popup {
  -arrow-border-radius: 8px;
  -arrow-background-color: rgba(46, 52, 64, 0.5);
  -arrow-base: 24px;
  -arrow-rise: 11px; }

.app-folder-popup-bin {
  padding: 5px;
  background: rgba(46, 52, 64, 0.5); }

.app-folder-icon {
  padding: 5px;
  spacing-rows: 5px;
  spacing-columns: 5px; }

.page-indicator {
  padding: 15px 20px; }
  .page-indicator .page-indicator-icon {
    width: 12px;
    height: 12px;
    border-radius: 12px;
    background-image: none;
    background-color: rgba(255, 255, 255, 0.3); }
  .page-indicator:hover .page-indicator-icon {
    background-image: none;
    background-color: rgba(255, 255, 255, 0.5); }
  .page-indicator:active .page-indicator-icon {
    background-image: none;
    background-color: rgba(255, 255, 255, 0.7); }
  .page-indicator:checked .page-indicator-icon {
    background-image: none;
    background-color: #FFFFFF;
    transition-duration: 0s; }

.app-well-app > .overview-icon.overview-icon-with-label,
.grid-search-result .overview-icon.overview-icon-with-label {
  padding: 10px 8px 5px 8px;
  spacing: 4px; }

.workspace-thumbnails {
  visible-width: 32px;
  spacing: 11px;
  padding: 8px;
  border-radius: 0; }
  .workspace-thumbnails:rtl {
    border-radius: 0; }

.workspace-thumbnail-indicator {
  border: 4px solid rgba(76, 86, 106, 0.8);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
  padding: 0; }

.search-display > StBoxLayout,
.all-apps,
.frequent-apps > StBoxLayout {
  padding: 0px 88px 10px 88px; }

.workspace-thumbnails {
  color: #d8dee9;
  background-color: transparent;
  border: none; }

.search-statustext, .no-frequent-applications-label {
  font-size: 2em;
  font-weight: bold;
  color: #d8dee9; }

/* NOTIFICATIONS & MESSAGE TRAY */
.url-highlighter {
  link-color: #616e88; }

.notification-banner {
  font-size: 11pt;
  width: 34em;
  margin: 5px;
  border-radius: 3px;
  color: #d8dee9;
  background-color: #2e3440;
  border: 1px solid #1f232b;
  box-shadow: 0 1px 4px black; }
  .notification-banner:hover {
    background-color: rgba(46, 52, 64, 0.96); }
  .notification-banner:focus {
    background-color: rgba(46, 52, 64, 0.96); }
  .notification-banner * {
    color: #d8dee9; }
  .notification-banner .notification-icon {
    padding: 5px; }
  .notification-banner .notification-content {
    padding: 5px;
    spacing: 5px; }
  .notification-banner .secondary-icon {
    icon-size: 1.09em; }
  .notification-banner .notification-actions {
    background-color: #2a2f3a;
    padding-top: 2px;
    spacing: 1px; }
  .notification-banner .notification-button {
    padding: 5px;
    background-color: rgba(46, 52, 64, 0.9);
    box-shadow: none; }
    .notification-banner .notification-button:first-child {
      border-radius: 0 0 0 3px; }
    .notification-banner .notification-button:last-child {
      border-radius: 0 0 3px 0; }
    .notification-banner .notification-button:hover, .notification-banner .notification-buttonfocus {
      background-color: #2a2f3a;
      color: #4c566a; }

.summary-source-counter {
  font-size: 10pt;
  font-weight: bold;
  height: 1.6em;
  width: 1.6em;
  -shell-counter-overlap-x: 3px;
  -shell-counter-overlap-y: 3px;
  background-color: #4c566a;
  color: #d8dee9;
  border: 2px solid #d8dee9;
  box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5);
  border-radius: 0.9em; }

.secondary-icon {
  icon-size: 1.09em; }

.chat-body {
  spacing: 5px; }

.chat-response {
  margin: 5px; }

.chat-log-message {
  color: #b7c2d7; }

.chat-new-group {
  padding-top: 1em; }

.chat-received {
  padding-left: 4px; }
  .chat-received:rtl {
    padding-left: 0px;
    padding-right: 4px; }

.chat-sent {
  padding-left: 18pt;
  color: #a7b5cd; }
  .chat-sent:rtl {
    padding-left: 0;
    padding-right: 18pt; }

.chat-meta-message {
  padding-left: 4px;
  font-size: 9pt;
  font-weight: bold;
  color: #97a7c4; }
  .chat-meta-message:rtl {
    padding-left: 0;
    padding-right: 4px; }

.hotplug-transient-box {
  spacing: 6px;
  padding: 2px 72px 2px 12px; }

.hotplug-notification-item {
  padding: 2px 10px; }
  .hotplug-notification-item:focus {
    padding: 1px 71px 1px 11px; }

.hotplug-notification-item-icon {
  icon-size: 24px;
  padding: 2px 5px; }

.hotplug-resident-box {
  spacing: 8px; }

.hotplug-resident-mount {
  spacing: 8px;
  border-radius: 4px; }
  .hotplug-resident-mount:hover {
    background-color: rgba(46, 52, 64, 0.3); }

.hotplug-resident-mount-label {
  color: inherit;
  padding-left: 6px; }

.hotplug-resident-mount-icon {
  icon-size: 24px;
  padding-left: 6px; }

.hotplug-resident-eject-icon {
  icon-size: 16px; }

.hotplug-resident-eject-button {
  padding: 7px;
  border-radius: 5px;
  color: pink; }

/* Eeeky things */
.magnifier-zoom-region {
  border: 2px solid #4c566a; }
  .magnifier-zoom-region.full-screen {
    border-width: 0; }

/* On-screen Keyboard */
#keyboard {
  background-color: rgba(46, 52, 64, 0.65); }

.keyboard-layout {
  spacing: 10px;
  padding: 10px; }

.keyboard-row {
  spacing: 15px; }

.keyboard-key {
  color: #d8dee9;
  background-color: #232831;
  box-shadow: none;
  border: 1px solid #1f232b;
  text-shadow: 0 1px black;
  icon-shadow: 0 1px black;
  background-color: #2e3440;
  min-height: 2em;
  min-width: 2em;
  font-size: 14pt;
  font-weight: bold;
  border-radius: 5px; }
  .keyboard-key:focus {
    color: #4c566a;
    text-shadow: 0 1px black;
    icon-shadow: 0 1px black;
    box-shadow: none;
    border: 1px solid #1f232b; }
  .keyboard-key:hover, .keyboard-key:checked {
    color: #4c566a;
    background-color: rgba(50, 57, 70, 0.95);
    border: 1px solid #1f232b;
    text-shadow: 0 1px black;
    icon-shadow: 0 1px black; }
  .keyboard-key:active {
    color: #4c566a;
    background-color: rgba(46, 52, 64, 0.95);
    border: 1px solid #1f232b;
    text-shadow: none;
    icon-shadow: none; }
  .keyboard-key:grayed {
    background-color: rgba(46, 52, 64, 0.95);
    color: #d8dee9;
    border-color: rgba(0, 0, 0, 0.7); }

.keyboard-subkeys {
  color: white;
  padding: 5px;
  -arrow-border-radius: 10px;
  -arrow-background-color: rgba(46, 52, 64, 0.65);
  -arrow-border-width: 2px;
  -arrow-border-color: #d8dee9;
  -arrow-base: 20px;
  -arrow-rise: 10px;
  -boxpointer-gap: 5px; }

.candidate-popup-content {
  padding: 0.5em;
  spacing: 0.3em; }

.candidate-index {
  padding: 0 0.5em 0 0;
  color: #b7c2d7; }

.candidate-box {
  padding: 0.3em 0.5em 0.3em 0.5em;
  border-radius: 4px; }
  .candidate-box:selected, .candidate-box:hover {
    background-color: #4c566a;
    color: #d8dee9; }

.candidate-page-button-box {
  height: 2em; }
  .vertical .candidate-page-button-box {
    padding-top: 0.5em; }
  .horizontal .candidate-page-button-box {
    padding-left: 0.5em; }

.candidate-page-button {
  padding: 4px; }

.candidate-page-button-previous {
  border-radius: 4px 0px 0px 4px;
  border-right-width: 0; }

.candidate-page-button-next {
  border-radius: 0px 4px 4px 0px; }

.candidate-page-button-icon {
  icon-size: 1em; }

/* Auth Dialogs & Screen Shield */
.framed-user-icon {
  background-size: contain;
  border: 2px solid #d8dee9;
  color: #d8dee9;
  border-radius: 3px; }
  .framed-user-icon:hover {
    border-color: white;
    color: white; }

.login-dialog-banner-view {
  padding-top: 24px;
  max-width: 23em; }

.login-dialog {
  border: none;
  background-color: transparent; }
  .login-dialog .modal-dialog-button-box {
    spacing: 3px; }
  .login-dialog .modal-dialog-button {
    padding: 3px 18px; }
    .login-dialog .modal-dialog-button:default {
      color: #d8dee9;
      background-color: #232831;
      box-shadow: none;
      border: 1px solid #1f232b;
      text-shadow: 0 1px black;
      icon-shadow: 0 1px black; }
      .login-dialog .modal-dialog-button:default:hover, .login-dialog .modal-dialog-button:default:focus {
        color: #4c566a;
        background-color: rgba(76, 86, 106, 0.7);
        border: 1px solid #1f232b;
        text-shadow: 0 1px black;
        icon-shadow: 0 1px black; }
      .login-dialog .modal-dialog-button:default:active {
        color: #4c566a;
        background-color: #4c566a;
        border: 1px solid #1f232b;
        text-shadow: none;
        icon-shadow: none; }
      .login-dialog .modal-dialog-button:default:insensitive {
        color: #838995;
        background-color: rgba(64, 70, 82, 0.66);
        box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
        border: none;
        text-shadow: none;
        icon-shadow: none; }

.login-dialog-logo-bin {
  padding: 24px 0px; }

.login-dialog-banner {
  color: #b7c2d7; }

.login-dialog-button-box {
  spacing: 5px; }

.login-dialog-message-warning {
  color: #c3674a; }

.login-dialog-message-hint {
  padding-top: 0;
  padding-bottom: 20px; }

.login-dialog-user-selection-box {
  padding: 100px 0px; }

.login-dialog-not-listed-label {
  padding-left: 2px; }
  .login-dialog-not-listed-button:focus .login-dialog-not-listed-label,
  .login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
    color: #d8dee9; }

.login-dialog-not-listed-label {
  font-size: 90%;
  font-weight: bold;
  color: #768bb2;
  padding-top: 1em; }

.login-dialog-user-list-view {
  -st-vfade-offset: 1em; }

.login-dialog-user-list {
  spacing: 12px;
  padding: .2em;
  width: 23em; }
  .login-dialog-user-list:expanded .login-dialog-user-list-item:selected {
    background-color: #4c566a;
    color: #d8dee9; }
  .login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
    border-right: 2px solid #4c566a; }

.login-dialog-user-list-item {
  border-radius: 5px;
  padding: .2em;
  color: #768bb2; }
  .login-dialog-user-list-item:ltr {
    padding-right: 1em; }
  .login-dialog-user-list-item:rtl {
    padding-left: 1em; }
  .login-dialog-user-list-item .login-dialog-timed-login-indicator {
    height: 2px;
    margin: 2px 0 0 0;
    background-color: #d8dee9; }
  .login-dialog-user-list-item:focus .login-dialog-timed-login-indicator {
    background-color: #d8dee9; }

.login-dialog-username,
.user-widget-label {
  color: #d8dee9;
  font-size: 120%;
  font-weight: bold;
  text-align: left;
  padding-left: 15px; }

.user-widget-label:ltr {
  padding-left: 18px; }

.user-widget-label:rtl {
  padding-right: 18px; }

.login-dialog-prompt-layout {
  padding-top: 24px;
  padding-bottom: 12px;
  spacing: 8px;
  width: 23em; }

.login-dialog-prompt-label {
  color: #97a7c4;
  font-size: 110%;
  padding-top: 1em; }

.login-dialog-session-list-button StIcon {
  icon-size: 1.25em; }

.login-dialog-session-list-button {
  color: #768bb2; }
  .login-dialog-session-list-button:hover, .login-dialog-session-list-button:focus {
    color: #d8dee9; }
  .login-dialog-session-list-button:active {
    color: #46597c; }

.screen-shield-arrows {
  padding-bottom: 3em; }

.screen-shield-arrows Gjs_Arrow {
  color: white;
  width: 80px;
  height: 48px;
  -arrow-thickness: 12px;
  -arrow-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); }

.screen-shield-clock {
  color: white;
  text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.6);
  font-weight: bold;
  text-align: center;
  padding-bottom: 1.5em; }

.screen-shield-clock-time {
  font-size: 72pt;
  text-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4); }

.screen-shield-clock-date {
  font-size: 28pt; }

.screen-shield-notifications-container {
  spacing: 6px;
  width: 30em;
  background-color: transparent;
  max-height: 500px; }
  .screen-shield-notifications-container .summary-notification-stack-scrollview {
    padding-top: 0;
    padding-bottom: 0; }
  .screen-shield-notifications-container .notification,
  .screen-shield-notifications-container .screen-shield-notification-source {
    padding: 12px 6px;
    border: 1px solid #d8dee9;
    background-color: rgba(46, 52, 64, 0.45);
    color: #d8dee9;
    border-radius: 4px; }
  .screen-shield-notifications-container .notification {
    margin-right: 15px; }

.screen-shield-notification-label {
  font-weight: bold;
  padding: 0px 0px 0px 12px; }

.screen-shield-notification-count-text {
  padding: 0px 0px 0px 12px; }

#panel.lock-screen {
  background-color: rgba(46, 52, 64, 0.45); }

.screen-shield-background {
  background: black;
  box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.4); }

#lockDialogGroup {
  background: #2e3436 url(resource:///org/gnome/shell/theme/noise-texture.png);
  background-repeat: repeat; }

#screenShieldNotifications StButton#vhandle, #screenShieldNotifications StButton#hhandle {
  background-color: rgba(46, 52, 64, 0.3); }
  #screenShieldNotifications StButton#vhandle:hover, #screenShieldNotifications StButton#vhandle:focus, #screenShieldNotifications StButton#hhandle:hover, #screenShieldNotifications StButton#hhandle:focus {
    background-color: rgba(46, 52, 64, 0.5); }
  #screenShieldNotifications StButton#vhandle:active, #screenShieldNotifications StButton#hhandle:active {
    background-color: rgba(76, 86, 106, 0.5); }

#LookingGlassDialog {
  background-color: rgba(0, 0, 0, 0.8);
  spacing: 4px;
  padding: 4px;
  border: 2px solid grey;
  border-radius: 4px; }
  #LookingGlassDialog > #Toolbar {
    border: 1px solid grey;
    border-radius: 4px; }
  #LookingGlassDialog .labels {
    spacing: 4px; }
  #LookingGlassDialog .notebook-tab {
    -natural-hpadding: 12px;
    -minimum-hpadding: 6px;
    font-weight: bold;
    color: #ccc;
    transition-duration: 100ms;
    padding-left: .3em;
    padding-right: .3em; }
    #LookingGlassDialog .notebook-tab:hover {
      color: white;
      text-shadow: black 0px 2px 2px; }
    #LookingGlassDialog .notebook-tab:selected {
      border-bottom-width: 2px;
      border-color: #576279;
      color: white;
      text-shadow: black 0px 2px 2px; }
  #LookingGlassDialog StBoxLayout#EvalBox {
    padding: 4px;
    spacing: 4px; }
  #LookingGlassDialog StBoxLayout#ResultsArea {
    spacing: 4px; }

.lg-dialog StEntry {
  selection-background-color: #bbbbbb;
  selected-color: #333333; }

.lg-dialog .shell-link {
  color: #999999; }
  .lg-dialog .shell-link:hover {
    color: #dddddd; }

.lg-completions-text {
  font-size: .9em;
  font-style: italic; }

.lg-obj-inspector-title {
  spacing: 4px; }

.lg-obj-inspector-button {
  border: 1px solid gray;
  padding: 4px;
  border-radius: 4px; }
  .lg-obj-inspector-button:hover {
    border: 1px solid #ffffff; }

#lookingGlassExtensions {
  padding: 4px; }

.lg-extensions-list {
  padding: 4px;
  spacing: 6px; }

.lg-extension {
  border: 1px solid #6f6f6f;
  border-radius: 4px;
  padding: 4px; }

.lg-extension-name {
  font-weight: bold; }

.lg-extension-meta {
  spacing: 6px; }

#LookingGlassPropertyInspector {
  background: rgba(0, 0, 0, 0.8);
  border: 2px solid grey;
  border-radius: 4px;
  padding: 6px; }

.openweather-current-summarybox,
.openweather-forecast-icon,
.openweather-current-databox-captions,
.openweather-current-databox-values,
.openweather-current-icon,
.openweather-forecast-summary,
.openweather-forecast-temperature {
  background: transparent; }

.openweather-current-databox-captions, .openweather-forecast-day {
  color: #4c566a; }


text:
define(['angular', 'socketio'], function(angular, SocketIO) {

    'use strict';
    var controllers = angular.module('controllers', []);

    controllers.controller("AlertCtrl", ['$scope', function($scope) {
        $scope.isHidden = false;
        $scope.showAlert = function() {
            $(".alert-box-message").html(arguments[0].message)
            $(".alert-box-title").html(arguments[0].title)
            $scope.isHidden = !$scope.isHidden;
            if(App.isiPad) $('#sendMessage').blur();
        }
    }]);

    controllers.controller('AppController', ['$rootScope',
        function ($rootScope) {
            $rootScope.$on('socketMessage', function(event, args) {
                switch (args.data.event) {
                    case 'chatMessage':
                        if (Prerial.Config.User.chid !== args.data.user.chid) {
                            var user = Prerial.Config.TestChatList[args.data.user.profile.email];
                            var name = user.profile.firstname + ' ' + user.profile.lastname;
                            var liItem = $('

').append(name + ': ' + args.data.message);
                            $('#chat_display_holder ul').append(liItem);
                            $('.modeChat').click();
                            $rootScope.$emit('handleEmit', {event: 'chatToolbarContact', data: args.data.user});
                        }
                        break;
                    case 'setPresence':
                        var presence = Prerial.Config.User['presence'];
                        App.chat.conversations.Websocket.send({ 'event': 'updatePresence', 'chid': Prerial.Config.User.chid, 'data': Prerial.Config.User });
                        break;
                    case 'updatePresence':
                        if (Prerial.Config.User.chid !== args.data.chid) {
                            args.data = args.data;
                            args.event = 'updatePresence';
                        }
                        break;
                }
                $rootScope.$broadcast(args.event, args.data);
            });
            $rootScope.$on('handleEmit', function(event, args) {
                if(args.event === 'loginUser'){
                    $rootScope.user = args.data;
                }
                if(args.event === 'getLoginUser'){
                    args.data = $rootScope.user;
                    args.event = 'setLoginUser';
                }
                $rootScope.$broadcast(args.event, args.data);
            });
            $(window).on('unload', function(){
                Prerial.Config.User.presence = 'offline';
                App.chat.conversations.Websocket.send({ 'event': 'updatePresence', 'chid': Prerial.Config.User.chid, 'data': Prerial.Config.User });
            });
            $(window).on('beforeunload', function(){
                Prerial.Config.User.presence = 'offline';
                App.chat.conversations.Websocket.send({ 'event': 'updatePresence', 'chid': Prerial.Config.User.chid, 'data': Prerial.Config.User });
            });
    }]);

    controllers.controller('chatController', ['$scope',
      function ($scope) {
        $scope.onKeyUp = function ($event) {
            if($event.keyCode === 13){

                if(App.chat.conversations.active !== null){
                    var presence = angular.element('#chat_toolbar').scope().getPresence();
                    if(presence !== 'online'){
                        angular.element(document.body).scope().showAlert({'title':'Chat', 'message':'Selected Contact is not Online'});
    //                    alert('Selected Contact is not Online');
                        return;
                    }
                }else{
                    angular.element(document.body).scope().showAlert({'title':'Chat', 'message':'Please select Contact'});
                    //alert('Please select Contact');
                    return;
                }
                App.chat.conversations.Websocket.send({'event': 'chatMessage', 'user': Prerial.Config.User, 'message':$('#sendMessage').val()});
                var liItem = $('

').append('Me: ' + $('#sendMessage').val());
                $('#chat_display_holder ul').append(liItem);
                $('#sendMessage').val('').blur();
            }
        };
    }]);

    controllers.controller('videoController', ['$scope',
      function ($scope) {
        $scope.startVideoCall = function(){
            alert('Video coming soon');
        };
        $scope.$watch('sharedObj.type', function(){
            if($scope.sharedObj.type === 'video'){
                $scope.startVideoCall();
            }
        });
    }]);

    controllers.controller('phoneController', ['$scope',
      function ($scope) {
        $scope.startAudioCall = function(){
            alert('Audio coming soon');
        };
        $scope.$watch('sharedObj.type', function(){
            if($scope.sharedObj.type === 'audio'){
                $scope.startAudioCall();
            }
        });
    }]);

    controllers.controller('workAreaController', ['$scope',
      function ($scope) {
        var sharedObj = {
            type: 'foo'
        };
        $scope.sharedObj = sharedObj;
        $scope.startVideo = function () {
            $scope.sharedObj.type = 'video';
        };
        $scope.startAudio = function () {
            $scope.sharedObj.type = 'audio';
        };
    }]);

    controllers.controller('contactsCtrl', ['$scope', '$http',
      function ($scope, $http) {
        $scope.userstr = 1;
            $scope.$on('updatePresence', function(event, args) {
                angular.element('#user_'+args.data.chid).scope().contact.presence = args.data.presence;
                $scope.$apply();
            });
            $scope.$on('setLoginUser', function(event, args) {
                if(args === undefined) args = {name: "John Doe",user: "1",value: "john.doe@citi.com"};
                $scope.userstr = args.user;
                $scope.userContact = Prerial.Config.User = Prerial.Config.TestChatList[args.value];
                $scope.$emit('handleEmit', {event: 'userContactContact', data: $scope.userContact});
                $http.get('data/chatContactList00' + $scope.userstr + '.js').success(function(data) {
                    $scope.contacts = data;
                    $scope.$emit('handleEmit', {event: 'setContacts', data: data});
                });
            });
            $scope.setContact = function(cont, event) {
                $(".contact-list").removeClass('hilited');
                $(event.target)[0].tagName === 'li'? $(event.target).addClass('hilited') : $(event.target).closest('li').addClass('hilited');
                $scope.$emit('handleEmit', {event: 'chatToolbarContact', data: cont});
            };
            $scope.$emit('handleEmit', {event: 'getLoginUser', data: ''});
    }]);

    controllers.controller('chatToolbarCtrl', ['$scope','$timeout',
        function ($scope, $timeout) {
            $scope.contacts = [];
            $scope.$on('setContacts', function(event, args) {
                $scope.contacts = args;
            });
            $scope.$on('chatToolbarContact', function(event, args) {
                var presence = args.presence;
                args.presence = 'offline';
                $scope.contact = args;
                $scope.mainImageUrl = args.avatar;
                App.chat.conversations.active = args.profile.email;
                $timeout(function(){
                    args.presence = presence;
                    $scope.contact = args;
                },500)
            });
            $scope.getPresence = function() {
                return $scope.contact.presence;
            };
    }])

    controllers.controller('userContactCtrl', ['$scope',
        function ($scope) {
            $scope.$on('userContactContact', function(event, args) {
                $scope.contact = args;
                Prerial.Config.User['presence'] = 'online';
/*
                App.chat.conversations.Websocket = new WebSocket({
                    url: 'https://chat.firebaseIO.com/prerial/',
                    userid: Prerial.Config.User['chid'],
                    onmessage: function(data){
                        $scope.$emit('socketMessage', {data: data});
                    },
                    useStatus: true
                });
*/
                App.chat.conversations.Websocket = new NodeWebSocket({
                    websocket: SocketIO,
                    evt:'message',
                    onmessage:     function(data){
                        $scope.$emit('socketMessage', {data: data});
//                        App.eventManager.trigger("serverMessage", { data: data });
                    },
//                    $('#messages').append($('
').text(data.type));},
//                    url: 'https://chat.firebaseIO.com/prerial/',
                    userid: Prerial.Config.User['chid'],
                    useStatus: true
                });
                App.chat.conversations.Websocket.send({'event': 'setPresence', 'chid': Prerial.Config.User['chid'], 'presence':'online'});
            });
    }]);

    controllers.controller('LoginCtrl', ['$scope', '$rootScope', '$location', '$timeout', '$compile',
        function ($scope, $rootScope, $location, $timeout, $compile) {
            $scope.users = Prerial.Config.LoginData;
            $rootScope.globals.currentUser = $scope.users[0];
            $scope.myUser = $scope.users[0];
            $scope.setContact = function(cont) {
                $location.path('/');
                $scope.$emit('handleEmit', {event: 'loginUser', data: cont});
                $timeout(function(){
                    $("#btn-video-add").hide()
                    $('#btn-audio-add').hide();
                    $('#comcenter').width(710);
                    $(window).resize();
                },1000)
            };
    }]);

    return controllers;
});

redpajama_set_name: RedPajamaGithub


text:
package xyz.acmer.entity.system;

import javax.persistence.*;

/**
 * 机器人用户表
 * 为没有绑定相关OJ账号的用户提供提交代码服务
 * Created by hypo on 16-2-26.
 */
@Entity
@Table(name = "bot_account")
public class BotAccount {

    private Integer id;
    private String loginName;
    private String password;
    private OjCode ojCode;

    public BotAccount() {
    }

    public BotAccount(String loginName, String password, OjCode ojCode) {
        this.loginName = loginName;
        this.password = password;
        this.ojCode = ojCode;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "loginname", nullable = false, length = 20)
    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    @Column(name = "password", nullable = false)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @ManyToOne
    @JoinColumn(name = "oj_id")
    public OjCode getOjCode() {
        return ojCode;
    }

    public void setOjCode(OjCode ojCode) {
        this.ojCode = ojCode;
    }
}


text:
static unsigned char running;
static float cpuLoadPercentage;
static unsigned int runCnt = 0u;

float getCpuLoadPercentage(void)
{
	return cpuLoadPercentage;
}

float getCpuLoadMaxPercentage(void)
{
	unsigned int cpuMaxLoad = 0u;

	getGameParam(GAME_PARAM_MAX_CPU_LOAD, &cpuMaxLoad);

	float cpuMaxLoadPercentage = (float)(cpuMaxLoad / (CPU_LOAD_MULTIPLIER));

	return cpuMaxLoadPercentage;
}

void gameMain()
{
	running = 1u;

	initGameState();

	uint64_t timeBefore = 0u;
	uint64_t timeAfter =  0u;
	double timeDiff =   0u;

	while(1u == running)
	{
		timeBefore = getGameMicroSecTime();

		GameState currState;
		getGameState(&currState);

		switch(currState)
		{
			case GAME_SYS_INIT:
			{
				initGameInput();
				initGameParam();
				setGameState(GAME_SYS_SETUP_COMPLETE);
			}
			break;

			case GAME_SYS_SETUP_COMPLETE:
			{
				setGameState(GAME_SNAKE_INIT);
			}
			break;

			case GAME_CONFIGURE_RUNNING:
			{
				gameConfigureRun();
			}
			break;

			case GAME_SNAKE_INIT:
			{
				initSnake();
				setGameState(GAME_SNAKE_RUNNING);
			}
			break;

			case GAME_SNAKE_RUNNING:
			{
				snakeRun();
			}
			break;

			case GAME_QUIT:
			{
				running = 0u;
				(void) printf("\n");
			}
			break;

			default:
			break;
		}

		if(0u == runCnt % ((FRAMES_PER_SECOND) * (GAME_PARAM_WRITE_CYCLE)))
		{
			gameParamRun();
		}

		timeAfter = getGameMicroSecTime();
		timeDiff = timeAfter - timeBefore;

		useconds_t toSleep = (SECOND_IN_USECONDS) / (FRAMES_PER_SECOND);

		cpuLoadPercentage = (PERCENTAGE_MULTIPLIER) * (timeDiff / toSleep);
		unsigned int cpuMaxLoad = 0u;
		getGameParam(GAME_PARAM_MAX_CPU_LOAD, &cpuMaxLoad);
		if((unsigned int)(cpuLoadPercentage * (CPU_LOAD_MULTIPLIER)) > cpuMaxLoad)
		{
			cpuMaxLoad = (unsigned int)(cpuLoadPercentage * (CPU_LOAD_MULTIPLIER));

			setGameParam(GAME_PARAM_MAX_CPU_LOAD, cpuMaxLoad);
		}

		if(toSleep - timeDiff >= 0)
		{
			toSleep -= timeDiff;
		}

		usleep(toSleep);

		runCnt = (runCnt + 1u) % ((FRAMES_PER_SECOND) * (GAME_SECONDS_TICK_CYCLE));
	}

	deInitGameInput();

	deInitGameParam();
}


text:
/**
 *
 */
package com.perforce.p4java.option.client;

import com.perforce.p4java.impl.generic.core.DefaultParallelSync;
import com.perforce.p4java.server.callback.IParallelCallback;

/**
 * Simple default options object for IClient.syncParallel.
 */
public class ParallelSyncOptions {

	/**
	 * The call back interface for parallel execution.
	 */
	private IParallelCallback callback;
	/**
	 * Specifies the number of files in a batch
	 */
	private int batch = 0;
	/**
	 * Specifies the the number of bytes in a batch
	 */
	private int batchSize = 0;
	/**
	 * Specifies the minimum number of files in a parallel sync
	 */
	private int minimum = 0;
	/**
	 * Specifies the minimum number of bytes in a parallel sync
	 */
	private int minumumSize = 0;
	/**
	 * Specifies the number of independent network connections to be used during parallelisation
	 */
	private int numberOfThreads = 0;

	/**
	 * Default constructor
	 */
	public ParallelSyncOptions() {
	}

	/**
	 * Constructor with the given arguments
	 *
	 * @param batch - number of files in a batch
	 * @param batchSize - number of bytes in a batch
	 * @param minimum - minimum number of files in a parallel sync
	 * @param minumumSize - minimum number of bytes in a parallel sync
	 * @param numberOfThreads - number of independent network connections to be used during parallelisation
	 * @param callback - call back interface for parallel execution
	 */
	public ParallelSyncOptions(int batch, int batchSize, int minimum, int minumumSize, int numberOfThreads,
	                           IParallelCallback callback) {
		this.batch = batch;
		this.batchSize = batchSize;
		this.minimum = minimum;
		this.minumumSize = minumumSize;
		this.numberOfThreads = numberOfThreads;
		this.callback = callback;
	}

	/**
	 * Constructs a ParallelSyncOptions with an instance of an IParallelCallback
	 *
	 * @param callback - call back interface for parallel execution
	 */
	public ParallelSyncOptions(IParallelCallback callback) {
		this.callback = callback;
	}

	/**
	 * @return number of files in a batch
	 */
	public int getBatch() {

		return batch;
	}

	/**
	 * @return number of bytes in a batch
	 */
	public int getBatchSize() {

		return batchSize;
	}

	/**
	 * @return minimum number of files in a parallel sync
	 */
	public int getMinimum() {

		return minimum;
	}

	/**
	 * @return minimum number of bytes in a parallel sync
	 */
	public int getMinumumSize() {

		return minumumSize;
	}

	/**
	 * @return number of independent network connections to be used during parallelisation
	 */
	public int getNumberOfThreads() {

		return numberOfThreads;
	}

	/**
	 * @return call back interface for parallel execution
	 */
	public IParallelCallback getCallback() {
		if (callback == null) {
			callback = new DefaultParallelSync();
		}
		return callback;
	}

	/**
	 * Sets IParallelCallback
	 *
	 * @param callback - call back interface for parallel execution
	 */
	public void setCallback(IParallelCallback callback) {
		this.callback = callback;
	}

	/**
	 * Sets the batch
	 *
	 * @param batch - number of bytes in a batch
	 */
	public void setBatch(int batch) {
		this.batch = batch;
	}

	/**
	 * Sets the batch size
	 *
	 * @param batchSize - number of bytes in a batch
	 */
	public void setBatchSize(int batchSize) {
		this.batchSize = batchSize;
	}

	/**
	 * Sets minimum
	 *
	 * @param minimum - minimum number of files in a parallel sync
	 */
	public void setMinimum(int minimum) {
		this.minimum = minimum;
	}

	/**
	 * Sets minimum
	 *
	 * @param minumumSize - minimum number of bytes in a parallel sync
	 */
	public void setMinumumSize(int minumumSize) {
		this.minumumSize = minumumSize;
	}

	/**
	 * Sets number of threads
	 *
	 * @param numberOfThreads - number of independent network connections to be used during parallelisation
	 */
	public void setNumberOfThreads(int numberOfThreads) {
		this.numberOfThreads = numberOfThreads;
	}
}


text:
package site.huozhu.home.repository;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import site.huozhu.home.domain.folder.FolderDO;

/**
 * Created by chuanxue.mcx on 2017/1/3.
 */
@Repository
@Mapper
public interface FolderMapper {

    Long save(FolderDO folderDO);

    void saveFavFolder(Long userId, Long folderId);

    int updatePwd(FolderDO folderDO);

    void deleteFavFolder(Long userId, Long folderId);

    void deleteMyFolder(Long folderId);

    int selectFolderFavedCount(Long folderId);

    FolderDO selectById(Long id);

    List<FolderDO> selectByOwner(Long userId, long start, long limit);

    List<FolderDO> selectTopsByOwner(Long userId, long start, long limit);

    List<FolderDO> selectByParentFolder(Long folderId, long start, long limit);

    List<FolderDO> selectFavFolder(Long userId, long start, long limit);

}


text:
<?php

namespace StateMachineBundle\Tests;

use ProxyManager\Factory\LazyLoadingValueHolderFactory;
use StateMachine\Exception\StateMachineException;
use StateMachine\History\HistoryCollection;
use StateMachineBundle\StateMachine\StateMachineManager;
use StateMachineBundle\Tests\Entity\ChildOrder;
use StateMachineBundle\Tests\Entity\Order;
use StateMachineBundle\Tests\Listeners\MockListener;
use Symfony\Component\DependencyInjection\ContainerInterface;

class StateMachineManagerTest extends \PHPUnit_Framework_TestCase
{
    public function testGetUndefinedStateMachine()
    {
        $this->expectException(StateMachineException::class);
        $factory = $this->getFactory();
        $factory->get(new Order(1));
    }

    public function testGetStateMachine()
    {
        $definition = $this->getDefinition();

        $factory = $this->getFactory();
        $factory->register($definition);
        $stateMachine = $factory->get(new Order(1));
        $stateMachine->boot();

        $this->assertEquals('new', $stateMachine->getCurrentState()->getName());
        $this->assertEquals(1, count($stateMachine->getTransitions()['new->cancelled']->getPostTransitions()));
        $this->assertEquals(1, count($stateMachine->getTransitions()['new->cancelled']->getPostCommits()));
        $this->assertEquals(1, count($stateMachine->getTransitions()['new->cancelled']->getPreTransitions()));
        $this->assertEquals('order_statemachine', $stateMachine->getName());
    }

    public function testClassWithStatefulParent()
    {
        $definition = [
            'object' => [
                'class' => "StateMachineBundle\Tests\Entity\Order",
                'property' => 'state',
            ],
            'version' => 1,
            'id' => 'order_statemachine',
            'history_class' => "StateMachineBundle\Tests\Entity\History",
            'options' => ['flush' => true],
            'states' => [
                'new' => [
                    'type' => 'initial',
                ],
                'cancelled' => [
                    'type' => 'normal',
                ],
                'originating' => [
                    'type' => 'normal',
                ],
                'committed' => [
                    'type' => 'normal',
                ],
                'error' => [
                    'type' => 'normal',
                ],
                'paid' => [
                    'type' => 'final',
                ],
            ],
            'transitions' => [],
            'guards' => [],
            'pre_transitions' => [],
            'post_transitions' => [],
            'post_commits' => [],
        ];

        $factory = $this->getFactory();
        $factory->register($definition);
        $stateMachine = $factory->get(new ChildOrder(1));
        $stateMachine->boot();
        $this->assertEquals('new', $stateMachine->getCurrentState()->getName());
    }

    public function testGetAllDefinitions()
    {
        $definition = $this->getDefinition();
        $version = $definition['version'];
        $factory = $this->getFactory();
        $factory->register($definition);
        $definitions = $factory->getDefinitions();
        $this->assertEquals($definition, reset($definitions)[$version]);
    }

    public function testRegisterDefinitionTwice()
    {
        $this->expectException(StateMachineException::class);
        $this->expectExceptionMessage(
            'Cannot register statemachine\'s same class, with same version for more than one time, class: StateMachineBundle\Tests\Entity\Order'
        );
        $definition = $this->getDefinition();
        $factory = $this->getFactory();
        $factory->register($definition);
        $factory->register($definition);
    }

    public function testGetOneDefinition()
    {
        $definition = $this->getDefinition();
        $version = $definition['version'];
        $factory = $this->getFactory();
        $factory->register($definition);
        $definition = $factory->getDefinition('order_statemachine', $version);
        $this->assertEquals('order_statemachine', $definition['id']);
    }

    public function testGetOneNotFoundDefinition()
    {
        $this->expectException(StateMachineException::class);
        $definition = $this->getDefinition();
        $factory = $this->getFactory();
        $factory->register($definition);
        $factory->getDefinition('not_found_statemachine');
    }

    public function testClearEmpty()
    {
        $definition = $this->getDefinition();

        $historyManagerMock = $this->getMockBuilder('StateMachine\History\HistoryManagerInterface')
            ->setMethods(['load', 'add'])
            ->getMock();

        $historyManagerMock->expects($this->any())
            ->method('load')
            ->willReturn(new HistoryCollection());

        $entityManagerMock = $this->getMockBuilder('Doctrine\ORM\EntityManager')
            ->disableOriginalConstructor()
            ->getMock();
        $containerMock = $this->createMock(ContainerInterface::class);
        $containerMock->method('get')
            ->willReturn(new MockListener());

        $doctrineMock = $this->getMockBuilder('\Doctrine\Bundle\DoctrineBundle\Registry')
            ->disableOriginalConstructor()
            ->getMock();

        $doctrineMock->method('getManagerForClass')
            ->willReturn($entityManagerMock);

        $lazyLoadingFactory = $this->getMockBuilder('ProxyManager\Factory\LazyLoadingValueHolderFactory')
            ->getMock();
        $lazyLoadingFactory->expects($this->exactly(1))
            ->method('createProxy');

        $factory = new StateMachineManager($historyManagerMock, $doctrineMock, $lazyLoadingFactory);

        $factory->setContainer($containerMock);

        $factory->register($definition);
        $order = new Order(1);
        $factory->get($order);
        $factory->get($order);
    }

    public function testClearWithEntities()
    {
        $definition = $this->getDefinition();

        $historyManagerMock = $this->getMockBuilder('StateMachine\History\HistoryManagerInterface')
            ->setMethods(['load', 'add'])
            ->getMock();

        $historyManagerMock->expects($this->any())
            ->method('load')
            ->willReturn(new HistoryCollection());

        $entityManagerMock = $this->getMockBuilder('Doctrine\ORM\EntityManager')
            ->disableOriginalConstructor()
            ->getMock();
        $containerMock = $this->createMock(ContainerInterface::class);
        $containerMock->method('get')
            ->willReturn(new MockListener());

        $doctrineMock = $this->getMockBuilder('\Doctrine\Bundle\DoctrineBundle\Registry')
            ->disableOriginalConstructor()
            ->getMock();

        $doctrineMock->method('getManagerForClass')
            ->willReturn($entityManagerMock);

        $lazyLoadingFactory = $this->getMockBuilder('ProxyManager\Factory\LazyLoadingValueHolderFactory')
            ->getMock();
        $lazyLoadingFactory->expects($this->exactly(2))
            ->method('createProxy');

        $factory = new StateMachineManager($historyManagerMock, $doctrineMock, $lazyLoadingFactory);

        $factory->setContainer($containerMock);

        $factory->register($definition);
        $factory->get(new Order(1));
        $factory->clear();
        $factory->get(new Order(1));
    }

    private function getFactory()
    {
        $historyManagerMock = $this->getMockBuilder('StateMachine\History\HistoryManagerInterface')
            ->setMethods(['load', 'add'])
            ->getMock();

        $historyManagerMock->expects($this->any())
            ->method('load')
            ->willReturn(new HistoryCollection());

        $entityManagerMock = $this->getMockBuilder('Doctrine\ORM\EntityManager')
            ->disableOriginalConstructor()
            ->getMock();
        $containerMock = $this->createMock(ContainerInterface::class);
        $containerMock->method('get')
            ->willReturn(new MockListener());

        $doctrineMock = $this->getMockBuilder('\Doctrine\Bundle\DoctrineBundle\Registry')
            ->disableOriginalConstructor()
            ->getMock();

        $doctrineMock->method('getManagerForClass')
            ->willReturn($entityManagerMock);

        $factory = new StateMachineManager($historyManagerMock, $doctrineMock, new LazyLoadingValueHolderFactory());

        return $factory->setContainer($containerMock);
    }

    private function getDefinition()
    {
        return [
            'version' => 1,
            'id' => 'order_statemachine',
            'object' => [
                'class' => "StateMachineBundle\Tests\Entity\Order",
                'property' => 'state',
            ],
            'history_class' => "StateMachineBundle\Tests\Entity\History",
            'options' => ['flush' => true],
            'states' => [
                'new' => [
                    'type' => 'initial',
                ],
                'cancelled' => [
                    'type' => 'normal',
                ],
                'originating' => [
                    'type' => 'normal',
                ],
                'committed' => [
                    'type' => 'normal',
                ],
                'error' => [
                    'type' => 'normal',
                ],
                'paid' => [
                    'type' => 'final',
                ],
            ],
            'transitions' => [
                't1' => [
                    'from' => [],
                    'to' => [
                        0 => 'cancelled',
                    ],
                ],
            ],
            'guards' => [
                0 => [
                    'callback' => 'test_callback',
                    'method' => 'callbackMethod',
                    'from' => 'new',
                    'to' => 'cancelled',
                ],
            ],
            'pre_transitions' => [
                0 => [
                    'callback' => 'test_callback',
                    'method' => 'callbackMethod_pre',
                    'from' => 'new',
                    'to' => 'cancelled',
                ],
            ],
            'post_transitions' => [
                0 => [
                    'callback' => 'test_callback',
                    'method' => 'callbackMethod_post',
                    'from' => ['new', 'originating'],
                    'to' => 'cancelled',
                ],
            ],
            'post_commits' => [
                0 => [
                    'callback' => 'test_callback',
                    'method' => 'callbackMethod_post_commit',
                    'from' => ['new', 'originating'],
                    'to' => 'cancelled',
                ],
            ],
        ];
    }
}


text:
<?php

namespace IndieWeb;

use BarnabyWalters\Mf2 as M;
use Guzzle;
use Mf2;

/**
 * Discover Original Post
 *
 * Given a URL, discover the URL which can be considered the "original" version. If an error
 * occurs, $url will be null. Otherwise, $url will always be a string, even if it's exactly
 * the same string as the one passed to the function. Example:
 *
 *     list($url, $err) = IndieWeb\discoverOriginalPost('https://twitter.com/BarnabyWalters/status/423465842148671488');
 *     if ($err !== null) {
 *       // handle error
 *     }
 *     // do something with $url
 *
 * @param string $url
 * @param Guzzle\Http\Client $client = null Optionally a Guzzle client to use for requests.
 * @return [$url, Exception $err]
 */
function discoverOriginalPost($url, Guzzle\Http\Client $client = null) {

	ob_start();
	$url = web_address_to_uri($url, true);
	ob_end_clean();

	if ($client === null)
		$client = new Guzzle\Http\Client();

	try {
		$content = $client->get($url)->send()->getBody(true);
	} catch (Guzzle\Common\Exception\GuzzleException $e) {
		return [null, $e];
	}

	// TODO: follow steps 1 and 2 of iwc.com/original-post-discovery

	if (parse_url($url, PHP_URL_HOST) == 'twitter.com'):
		$originalPostUrl = originalPostUrlFromTwitter($content);
	else:
		$originalPostUrl = null;
	endif;

	// Check that the document at $originalPostUrl links to $url
	try {
		$response = $client->get($originalPostUrl)->send();
	} catch (Guzzle\Common\Exception\GuzzleException $e) {
		return [null, $e];
	}

	$originalPostUrl = $response->getEffectiveUrl();

	if (!stristr($response->getContentType(), 'html'))
		return [null, new Exception("Document at '{$originalPostUrl}' was not transmitted as text/html")];

	$originalPostMf = Mf2\parse($response->getBody(true), $originalPostUrl);

	// Check that $url is linked to as rel-syndication or u-syndication at $originalPostUrl
	if (isset($originalPostMf['rels']) and in_array($url, $originalPostMf['rels']['syndication'])):
		return [$response->getEffectiveUrl(), null];
	elseif (count(M\findMicroformatsByProperty($originalPostMf, 'syndication', $url)) !== 0):
		return [$response->getEffectiveUrl(), null];
	else:
		// resolve syndication URLs to see if any syndication URLs resolve to $url
		$mfWithSyndication = M\findMicroformatsByCallable($originalPostMf, function ($mf) {
			return M\hasProp($mf, 'syndication');
		});
		$mfSyndicationUrls = array_reduce($mfWithSyndication, function ($all, $mf) {
			return array_merge($all, M\getPlaintextArray($mf, 'syndication'));
		}, []);

		$allRels = array_unique(array_merge($originalPostMf['rels']['syndication'], $mfSyndicationUrls));

		$responses = $client->get(array_map(function ($synUrl) use ($client) { return $client->get($synUrl); }, $allRels));

		foreach ($responses as $response) {
			if ($response->getEffectiveUrl() === $url) {
				return [$response->getEffectiveUrl(), null];
			}
		}
	endif;

	return [$url, null];
}

function cleanString($str) {
	// Replace non breaking spaces with normal spaces
	$str = str_replace(mb_convert_encoding(' ', 'UTF-8', 'HTML-ENTITIES'), ' ', $str);

	$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
	$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
	$str = preg_replace('~\p{C}+~u', '', $str);
	$str = preg_replace(['~\r\n?~', '~[^\P{C}\t\n]+~u'], ["\n", ''], $str);

	$str = preg_replace(
		'/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
		'|(?<=^|[\x00-\x7F])[\x80-\xBF]+'.
		'|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
		'|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
		'|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/',
		'�', $str);

	$str = preg_replace(
		'/\xE0[\x80-\x9F][\x80-\xBF]'.
		'|\xED[\xA0-\xBF][\x80-\xBF]/S',
		'?',
		$str);

	$str = preg_replace_callback('/[\p{So}\p{Cf}\p{Co}\p{Cs}\p{Cn}]/u', function ($string) {
		$result = array();

		foreach ((array) $string as $char) {
			$codepoint = unpack('N', iconv('UTF-8', 'UCS-4BE', $char));
			if (is_array($codepoint) && array_key_exists(1, $codepoint))
				$result[] = sprintf('U+%04X', $codepoint[1]);
		}

		return implode('', $result);
	}, $str);

	return $str;
}

function originalPostUrlFromTwitter($html) {
	$mfs = Mf2\Shim\parseTwitter($html);

	$hEntries = M\findMicroformatsByType($mfs, 'h-entry');

	if (empty($hEntries))
		return null;

	$content = M\getPlaintext($hEntries[0], 'content');
	$content = stripHashtags($content);

	if (getTrailingUrl($content))
		return getTrailingUrl($content);

	if (getUrlFromPermashortid($content))
		return getUrlFromPermashortid($content);
}

function stripHashtags($content) {
	return trim(preg_replace('/#[a-zA-Z0-9]+/i', '', $content));
}

function getTrailingUrl($content) {
	$parts = explode(' ', $content);
	$lastSegment = array_pop($parts);

	if (parse_url($lastSegment, PHP_URL_HOST)) {
		$url = $lastSegment;
	} elseif ($lastSegment[0] == '(' and parse_url(trim($lastSegment, '()'), PHP_URL_HOST)) {
		$url = trim($lastSegment, '()');
	}

	if (isset($url)) {
		ob_start();
		$url = web_address_to_uri($url, true);
		ob_end_clean();

		return trim(cleanString($url));
	}

	return null;
}

function getUrlFromPermashortid($content) {
	$parts = explode(' ', $content);
	$last = array_pop($parts);
	$penultimate = array_pop($parts);
	$cite = $penultimate . ' ' . $last;

	if ($cite[0] == '(' and $cite[strlen($cite) - 1] == ')') {
		$domain = 'http://' . explode(' ', trim($cite, '()'))[0];
		$path =  explode(' ', trim($cite, '()'))[1];

		if (!parse_url($domain, PHP_URL_HOST))
			return null;

		return trim($domain . '/' . $path);
	}

	return null;
}