text:
html * { margin: 0; }

/* GENERAL */
a, input     { outline: none; }
p            { padding: 10px 0; }
img          { border: none; }
.titlebar a:link, .titlebar a:visited, .titlebar a:hover { color: #FFF !important; }
.titlebar                 { background-color: #000; color: #FFF; padding: 0 0 0 14px; height: 75px; clear: both; min-width: 831px; }
.prod .titlebar,
.prod .titlebar .search,
.prod .titlebar .ticket,
.prod .titlebar .region     { background-color: #E9231B; }

.titlebar .header span      { font-size: 42px; font-weight: 400; font-family: helvetica, verdana, arial, sans-serif; margin-right: 16px; line-height: 70px; }
.titlebar .mainHeader       { font-size: 18px; font-weight: 400; font-family: helvetica, verdana, arial, sans-serif;
                              height: 40px; width: 122px; text-indent: -9999px; float: left; padding: 28px 28px 0 6px;
                              background: url(../images/asgard-title-red.png) transparent no-repeat 7px 15px; }
.prod .titlebar .mainHeader { background-image: url(../images/asgard-title-black.png); }
.titlebar img.logo          { float: left; margin-right: 14px; margin-top: 8px; height: 58px; width: 58px; }
.titlebar .header           { float: left; height: 75px; }
.titlebar .header a         { float: left; }
.titlebar .region           { float: left; margin: 0 10px 0 0; }
.titlebar .region form      { float: left; display: inline-block; vertical-align: top; }
.titlebar .region img       { float: left; display: inline-block; height: 45px; }
.titlebar .region select    { width: 90px; }

.titlebar .region,
.titlebar .search,
.titlebar .ticket             { padding: 3px 7px 0 8px; background-color: #000; border-radius: 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; }
.titlebar .ticket             { float: right; }
.titlebar .search input       { width: 160px; }
.titlebar .search input:focus { width: 200px; }
.ticket input[name=ticket]    { width: 80px; }

.global .region { max-width: 400px; margin-right: 30px; float: left; }

.spinner       { padding: 5px; position: absolute; right: 0; }
.diagnostics p { padding: 0; }
body           { background: #FFF; color: #333; font: 11px verdana, arial, helvetica, sans-serif; }
ul             { padding-left: 15px; }
input.hidden   { visibility: hidden; }
select         { padding: 2px 2px 2px 0; max-width: 400px; }
input:focus,  select:focus, textarea:focus { border: 1px solid #006DBA; }
a:link, a:visited, a:hover       { font-weight: bold; text-decoration: none; }
span.fakeLink, a:link, a:visited { color: #006DBA; }
span.fakeLink:hover, a:hover     { color: #00263F; }
span.fakeLink                    { cursor: pointer; font-weight: bold; }

input, select, textarea, button div { background-color: #FCFCFC; border: 1px solid #CCC; font: 11px verdana, arial, helvetica, sans-serif; margin: 2px 0; padding: 2px 4px; }

.numbers                         { white-space: nowrap; }
.numbers select                  {              margin-right: 10px; }
.numbers input[type=text]        { width: 30px; margin-right: 10px; }
.numbersInline input[type=text]  { width: 30px;  }
.numbers input:last-child        {              margin-right:    0; }
input.number                     { width: 36px;  }
.numbers input.string[type=text] { width: auto;  }
.fastPropertyValue               { width: 500px; }
.longInput input[type=text]      { width: 500px; }
.longInput textarea              { width: 500px; }
.bigValue                        { max-width: 500px; word-wrap: break-word; }

.inlineInputs input             { margin-right: 10px; }
.inlineInputs input:last-child  { margin-right: 0; }

span.label                      { background-color: #999999; border-radius: 3px; padding: 4px; font-weight: bold; margin-right: 2px; font-size: 9px; letter-spacing: 1px }
span.label a                    { color: #ffffff }
span.label a:hover              { text-decoration: underline }

/* NAVIGATION MENU */
.nav      { border-color: #AAA; padding: 0;          border-style: solid; border-width: 1px 0; float: left; width: 100%; min-width: 838px; }
.nav li   { border-color: #AAA; padding: 0 0 10px 0; border-style: solid; border-width: 0 1px 0 0; font-size: 10px; margin: 0; white-space: nowrap; display: block; float: left; height: 25px; position: relative; z-index: 2; }
.nav li a { padding: 10px 11px 11px 39px; background-position: 9px 5px; background-repeat: no-repeat; display: block; line-height: 14px; min-height: 14px; color: #333; }
.dropdown { background:       url("../images/downarrowdark.gif") no-repeat scroll 98% 92% transparent; }
.nav, th  { color: #333; }
.nav, th  { background-image: -moz-linear-gradient(center bottom, #DDD 0%, white 50%); }
.nav, th  { background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #DDD), color-stop(0.5, white)); }

.nav li ul          { background-color: #EAEAEA; padding: 0; display: none; position: absolute; margin-left: -1px; }
.nav li:hover       { background-color: #D8E6FF; }
.nav li:hover ul          { display: block; }
.nav li ul li       { border-color: #AAA; border-width: 0 1px 1px 1px; border-style: solid; float: none; }
.nav li ul li:first-child { border-top-width: 1px; }

/* NAV ICONS */
.nav .home                { background-image: url(../images/tango/24/actions/go-home.png);                }
.nav .applications        { background-image: url(../images/tango/24/mimetypes/package-x-generic.png);    }
.nav .stacks              { background-image: url(../images/tango/24/tools/stack.png);                    }
.nav .users               { background-image: url(../images/tango/24/apps/system-users.png);              }
.nav .fastProperties      { background-image: url(../images/tango/24/categories/lightning.png);           }
.nav .hostedZones         { background-image: url(../images/tango/24/apps/internet-web-browser.png);      }
.nav .images              { background-image: url(../images/tango/24/mimetypes/image-x-generic.png);      }
.nav .securityGroups      { background-image: url(../images/tango/24/status/secure.png);                  }
.nav .launchConfigs       { background-image: url(../images/tango/24/actions/launch.png);                 }
.nav .cluster             { background-image: url(../images/tango/24/status/network-cluster.png);         }
.nav .autoScaling         { background-image: url(../images/tango/24/status/network-disconnect.png);      }
.nav .spotInstanceRequest { background-image: url(../images/tango/24/tools/draw-ink.png);                 }
.nav .scalingPolicy       { background-image: url(../images/tango/24/tools/resize.png);                   }
.nav .scheduledAction     { background-image: url(../images/tango/24/actions/appointment-new.png);        }
.nav .alarm               { background-image: url(../images/tango/24/status/alarm.png);                   }
.nav .loadBalancers       { background-image: url(../images/tango/24/emblems/emblem-balance.png);         }
.nav .instances           { background-image: url(../images/tango/24/devices/video-display.png);          }
.nav .instanceTypes       { background-image: url(../images/tango/24/categories/applications-games.png);  }
.nav .simpleDb            { background-image: url(../images/tango/24/devices/database-simple.png);        }
.nav .topic               { background-image: url(../images/tango/24/apps/preferences-desktop-sound.png); }
.nav .queue               { background-image: url(../images/tango/24/actions/queue.png);                  }
.nav .reservations        { background-image: url(../images/tango/24/mimetypes/x-office-calendar.png);    }
.nav .tasks               { background-image: url(../images/tango/24/actions/edit-paste.png);             }
.nav .volumes             { background-image: url(../images/tango/24/devices/media-floppy.png);           }
.nav .volumeSnapshot      { background-image: url(../images/tango/24/devices/snapshot.png);               }
.nav .rdsInstances        { background-image: url(../images/tango/24/devices/database.png);               }
.nav .dbSecurity          { background-image: url(../images/tango/24/devices/database-lock.png);          }
.nav .dbSnapshot          { background-image: url(../images/tango/24/devices/database-snapshot.png);      }

/* HALLOWEEN ICON OVERRIDES */
.halloween .nav .home          { background-image: url(../images/occasion/halloween/24/Tomb.png);         }
.halloween .nav .users         { background-image: url(../images/occasion/halloween/24/vampire.png);      }
.halloween .nav .launchConfigs { background-image: url(../images/occasion/halloween/24/Vixen.png);        }
.halloween .nav .instanceTypes { background-image: url(../images/occasion/halloween/24/bats.png);         }
.halloween .nav .tasks         { background-image: url(../images/occasion/halloween/24/Boiler.png);       }

/* General page body */
.body       { clear: both; float: left; margin: 0 15px 10px; }
.emphasized { font-weight: bold; }
.clear      { clear: both; }
.initial    { color: #204a87; font-weight: bold; }
.notation   { color: red; font-size: 10px; }

/* LOGIN AREA */
.login, .authentication      { float: right; padding: 10px 15px 0 0; }
.authentication              { background: url("../images/downarrowlight.gif") no-repeat scroll 98% 92% transparent; }
.authentication ul           { padding-top: 5px; display: none; list-style-type: none; position: absolute; }
.authentication ul li        { border-color: #AAA; border-width: 1px; border-style: solid; padding: 3px 10px 3px 5px; }
.authentication:hover ul     { display: block; }
.authentication ul li:hover  { background-color: #888A85; }

/* Actions */
.actions { border: 0; margin-top: 5px; padding: 7px 12px; }

/* MESSAGES AND ERRORS */
.buttons .expiration { display: inline-block; }
.expiration      { background:         url(../images/tango/16/actions/appointment-new.png)      8px 50% no-repeat; margin: 0    0 5px 0; padding: 5px 5px 5px 30px; }
.deleting        { background:         url(../images/tango/16/actions/process-stop.png)         8px 50% no-repeat; margin: 0    0 5px 0; padding: 5px 5px 5px 30px; }
.suspendProcess  { background:         url(../images/tango/16/actions/media-playback-pause.png) 8px 50% no-repeat; margin: 0    0 5px 0; padding: 5px 5px 5px 30px; }
.message         { background: #F3F8FC url(../images/skin/information.png)                      8px 50% no-repeat; margin: 10px 0 5px 0; padding: 5px 5px 5px 30px; border: 1px solid #B2D1FF; color: #006DBA; }
div.subtitle     { background: #F3F8FC url(../images/skin/information.png)                      8px 50% no-repeat; margin: 10px 0 5px 0; padding: 5px 5px 5px 30px; border: 1px solid #B2D1FF; color: #006DBA; }
div.errors       { background: #FFF3F3; border: 1px solid red; color: #CC0000; margin: 10px 0 5px 0; padding: 5px 0 5px 0; }
div.errors ul    { list-style: none; padding: 0; }
div.errors li    { background: url(../images/skin/exclamation.png) 8px 0 no-repeat; line-height: 16px; padding-left: 30px; padding-right: 7px; }
td.errors select { border: 1px solid red; }
td.errors input  { border: 1px solid red; }
label.error      { padding-left: .5em; }
input.error      { background-color: #ffc; }
.danger          { color: red; font-weight: bold; font-size: 12px; }
.error           { color: red; }
.warning         { color: #D2691E; }
p.warning        { margin: 5px 0; }
td.inService     { color: blue; }
td.outOfService  { color: red; }
td.health              { padding: 6px 0 0 8px; }
td.health a            { display: none; height: 16px; width: 16px; }
td.pass a, td.fail a   { display: block; background: transparent no-repeat; }
td.pass a              { background-image: url(../images/tango/16/status/weather-clear.png); }
td.fail a              { background-image: url(../images/tango/16/status/weather-storm.png); }
td.tags                { max-width: 150px !important; }
div.pass, div.fail, div.incomplete, div.empty   { display: block; background: transparent no-repeat; padding: 2px 2px 2px 35px; }
div.pass               { background-image: url(../images/tango/24/status/weather-clear.png); }
div.fail               { background-image: url(../images/tango/24/status/weather-storm.png); }
div.incomplete         { background-image: url(../images/tango/24/status/weather-few-clouds.png); }
div.empty              { background-image: url(../images/tango/24/status/weather-clear-night.png); }
td.lazy img            { display: none; }
tr.waiting td.lazy img { display: inline; }

/* Availability Zones with Tango color palette, alternating warm and cool */
.zoneA { color: #5c3566; }
.zoneB { color: #ce5c00; }
.zoneC { color: #4e9a06  }
.zoneD { color: #a40000; }
.zoneE { color: #204a87; }
.zoneF { color: #c4a000; }
.zoneG { color: #888a85; }

/* TABLES */
table, fieldset             { border: 1px solid #DDD; }
fieldset table              { border: none; }
table                       { width: 100%; }
tr.prop table, table.narrow { width: auto; }
tr                          { border: 0; }
td, th                      { font-size: 11px; font-family: verdana, arial, helvetica, sans-serif; line-height: 11px; padding: 5px 6px; text-align: left; }
td.date                     { white-space: nowrap; }
table.sortable th           { cursor: pointer; }
th                          { font-size: 11px; font-weight: bold; line-height: 17px; padding: 2px 6px; white-space: nowrap; }
th.wrappable                { white-space: normal; }
th a:link, th a:visited, th a:hover { color: #333; display: block; font-size: 10px; text-decoration: none; width: 100%; }
th.asc a, th.desc a         { background-position: right; background-repeat: no-repeat; }
th.asc a                    { background-image: url(../images/skin/sorted_asc.gif);  }
th.desc a                   { background-image: url(../images/skin/sorted_desc.gif); }
.list                       { float: left; }
.list tr.odd                { background: #F5F5F5; }
.list tr.even               { background: white; }
.list td                    { vertical-align: top; line-height: 19px; }
.list td.truncate           { max-width: 200px; overflow: hidden; }
.list td.app a              { max-width: 122px; word-wrap: break-word; }
.list td.email              { max-width: 150px; word-wrap: break-word; }
.list td.owner              { max-width: 150px; word-wrap: break-word; }
.list td.serviceKey         { max-width:  60px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }
.list td.variables          { max-width: 100px; word-wrap: break-word; }
.list td.autoScaling a      { max-width: 130px; word-wrap: break-word; }
.list td.cluster a          { max-width: 130px; word-wrap: break-word; }
.list td.launchConfig a     { max-width: 100px; word-wrap: break-word; font-size: 9px; }
.list td.loadBalancer a     { max-width: 100px; word-wrap: break-word; }
.list td.ami a              { max-width: 200px; word-wrap: break-word; }
.list td.ami                { max-width: 200px; word-wrap: break-word; }
.list td.propKey a          { max-width: 260px; word-wrap: break-word; }
.list td.availabilityZone   { white-space: nowrap; }
.list td.lbPolicies         { max-width: 182px; }
.list td.description        { max-width:  76px; }
.list td.storage            { max-width:  70px; }
.list td.cpu                { max-width: 130px; }
.list td.group-row          { font-size: 18px; font-style: italic; color: #cccccc; background-color: #ffffff; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; }
.list td.group-row:hover    { background-color: #ffffff; }
.instanceType td.family     { max-width:  60px; }
.instanceType td.group      { max-width: 110px; }
.instanceType td.size       { max-width:  73px; }
.list td.architecture       { max-width:  50px; }
.instanceType td.netPerf    { max-width:  56px; }
.list .longValues ul        { padding-left: 0; list-style-type: none;  }
.list .longValues li        { padding-left: 10px; text-indent: -10px;  } /* Hanging indent */
.list .activities td.details          { max-width: 300px;                        }
.list .fastProperties .var            { max-width:  60px; word-wrap: break-word; white-space: normal; }
.list .fastProperties .propKey        { max-width: 400px; word-wrap: break-word; }
.list .fastProperties .propValue      { max-width: 200px; word-wrap: break-word; }
.list .fastProperties .region         { max-width:  90px; word-wrap: break-word; }
.list .fastProperties .stack          { max-width:  80px; word-wrap: break-word; }
.list .fastProperties .updatedBy      { max-width:  80px; word-wrap: break-word; }
.list .fastProperties .sourceOfUpdate { max-width:  50px; word-wrap: break-word; }
.list .fastProperties table.scopeAttribs td { border-bottom: 1px dotted #DDD; }
.resourceRecordSets td                       { max-width:  80px; word-wrap: break-word; white-space: normal; }
.resourceRecordSets td.resourceRecordSetName { max-width: 180px; }
.resourceRecordSets td.resourceRecords       { max-width: 180px; }
.resourceRecordSets td.resourceRecordSetId   { max-width: 120px; }
.resourceRecordSets td.aliasTarget           { max-width: 100px; }

.list td:first-of-type:last-of-type { min-width: 500px; } /* filter might wrap without this */

/* HEADINGS */
caption { font-size: 16px; text-align: left; }
h1      { font-size: 16px; }
h2      { font-size: 14px; }
h3      { font-size: 13px; }
h3 img  { vertical-align: middle; padding-left: 7px; padding-bottom: 6px; }
h1, h2, h3, caption { color: #3C617C; font-weight: normal; margin: .8em 0 .8em 0; line-height: normal; }

/* LIST */
.list table, table.list        { border-collapse: collapse;                                            }
.list th, .list td             { border-left: 1px solid #DDD; max-width: 800px; word-wrap: break-word; }
.list th:hover, .list tr:hover { background: #D8EFFF; }
ul.links    { padding-left: 0; }
ul.links li { list-style: none; }

/* TABLE FOOTERS */
.list + footer, .list > footer {
    clear: both; border: 1px solid #DDD; border-top: 0; color: #666; font-size: 10px; overflow: hidden; padding: 10px 3px;
    background-image: -moz-linear-gradient(center bottom, #DDD 0%, white 80%);
    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #DDD), color-stop(0.8, white));
}

/* DIALOG */
.dialog table { padding: 5px 0; }
table td.name { vertical-align: top; }
tr.headers td { vertical-align: bottom; }
.prop { padding: 5px; }
.prop .name  { text-align: left; width:  1%; white-space: nowrap; padding-top: 11px; }
.prop .value { text-align: left; width: 99%; }
form .compoundName table        { width: auto; }
form .compoundName .guide       { float: left; }
form .compoundName .preview     { float: left; margin: .8em; }
form .compoundName .envVars     { float: right; clear: right; display: none; margin-top: 20px; }
form .compoundName .envVars pre { border: 1px solid #CCC; padding: 8px; }
form .compoundName .preview .nameText { background-color: #EEF8FF; color: #092448; border: 1px solid #CCC; padding: 4px 8px; font-size: 24px; }

form .compoundName select           { max-width: 110px; }
form .compoundName input[type=text] { width: 60px; }
form .compoundName input.short      { width: 30px; }
form .compoundName div.filter       { display: block; }
form .compoundName ul { margin: auto; margin: 10px 0 13px; }
form .compoundName li { margin: auto; margin-left: 15px; }
form .compoundName td input + div   { color: #333; white-space: nowrap; }
form .compoundName td input + div span { color: #999; }

/* STANDARD ACTION BUTTONS */
div.buttons, th.buttons { color: #444; background: #FFF; border: 1px solid #DDD; font-size: 10px; overflow: hidden; padding: 0 3px; clear: both; }
div.buttons, th.buttons { background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #E4E4E4), color-stop(0.4, white)); }
div.buttons, th.buttons { background-image: -moz-linear-gradient(center bottom, #E4E4E4 0%, white 40%); }
.buttons button div, .buttons a  {
    color: #333; cursor: pointer; font-size: 10px; font-weight: bold; margin: 1px; overflow: visible; display: inline-block;
    line-height: 14px; border-style: solid; border-color: #DDD #BBB #BBB #DDD; border-width: 1px 2px 2px 1px;
    background: none no-repeat scroll 5px 50% #FFF; white-space: nowrap; padding: 6px 6px 6px 32px;
    border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px;
}

.buttons button:hover  div, .buttons a:hover  { background-color: #D8E6FF !important; border-color: #C2D2EF #A7BBDF #A7BBDF #C2D2EF; color: #00263F; }
.buttons button:active div, .buttons a:active { background-color: #6299C5 !important; border-color: #6299C5 #8BBBDF #8BBBDF #6299C5; color: #FFF;    }

.buttons button.publish div, .buttons a.publish   { background-image: url(../images/tango/24/actions/mail-message-new.png);                          }
.buttons button:disabled div, .buttons a:disabled { cursor: default; filter: alpha(opacity=50); opacity: 0.5; -moz-opacity: 0.50; background-color: inherit !important; border-color: inherit; color: inherit; }
.buttons button:disabled                          { cursor: default; }
.buttons button                               { padding: 0; margin: 0; border: 0; cursor: pointer; background: none; }
.buttons h3                                   { display: inline; font-size: 11px; padding: 0 3px 0 10px; }
.buttons button.initListFilter                { float: right; }
.buttons button.initListFilter div            { background-image: url(../images/tango/24/actions/system-search.png);                             }
.buttons button.create div, .buttons a.create { background-image: url(../images/tango/24/actions/list-add.png);                                  }
.buttons button.stop div, a.stop              { background-image: url(../images/tango/24/actions/process-stop.png);                              }
.buttons a.edit                               { background-image: url(../images/tango/24/categories/preferences-system.png); padding-left: 34px; }
.buttons a.clean                              { background-image: url(../images/tango/24/actions/edit-clear.png);                                }
.buttons a.clone                              { background-image: url(../images/tango/24/tools/draw-clone.png);                                  }
.buttons button.push div, .buttons a.push     { background-image: url(../images/tango/24/actions/go-next.png);                                   }
button.pushRolling div, a.pushRolling         { background-image: url(../images/tango/24/actions/push-rolling.png);          padding-left: 35px; }
button.pushReplace div, a.pushReplace         { background-image: url(../images/tango/24/status/network-cluster.png);        padding-left: 35px; }
button.resize div, a.resize                   { background-image: url(../images/tango/24/actions/view-fullscreen.png);                           }
.buttons button.promote div                   { background-image: url(../images/tango/24/apps/internet-web-browser.png);                         }
.buttons a.newLaunch                          { background-image: url(../images/tango/24/actions/launch-new.png);                                }
.buttons button.trafficEnable div             { background-image: url(../images/tango/24/status/traffic-enable.png);                             }
.buttons button.trafficDisable div            { background-image: url(../images/tango/24/status/traffic-disable.png);                            }
.buttons button.removeBalance div             { background-image: url(../images/tango/24/emblems/emblem-balance-remove.png);                     }
.buttons button.instanceBalance div           { background-image: url(../images/tango/24/emblems/emblem-balance-screen.png);                     }
.buttons a.attachElastic                      { background-image: url(../images/tango/24/actions/lasso-screen.png);                              }
.buttons button.securityEdit div              { background-image: url(../images/tango/24/status/secure-preferences.png);     padding-left: 33px; }
.buttons a.cli                                { background-image: url(../images/tango/24/apps/utilities-terminal.png);       padding-left: 35px; }
.buttons a.userData                           { background-image: url(../images/tango/24/actions/document-properties.png);                       }
.buttons button.takeSnapshot div              { background-image: url(../images/tango/24/devices/camera-photo.png);                              }
.buttons button.shutdown div                  { background-image: url(../images/tango/24/actions/system-shutdown.png);                           }
.buttons button.restore div                   { background-image: url(../images/tango/24/actions/edit-undo.png);                                 }
.buttons button.elastic div                   { background-image: url(../images/tango/24/tools/select-lasso.png);                                }
.buttons button.save div                      { background-image: url(../images/tango/24/actions/document-save.png);                             }
.buttons button.deploy div                    { background-image: url(../images/tango/24/tools/deploy.png);                                      }
.buttons a.deploy                             { background-image: url(../images/tango/24/tools/deploy.png);                                       }
.buttons button.schedule div                  { background-image: url(../images/tango/24/actions/appointment-new.png);                           }
.buttons button.outOfService div              { background-image: url(../images/tango/24/status/weather-clear-night.png);                        }
.buttons button.inService div                 { background-image: url(../images/tango/24/status/weather-clear.png);                              }
.buttons button.delete div                    { background-image: url(../images/tango/24/places/user-trash.png);                                 }
.buttons button.delete                        { display: none; } /* Hide dangerous button until JavaScript validation is ready */
.buttons input[type=text]                     { border: 1px solid #CCC; cursor: auto; }
.buttons a.disabled                           { pointer-events: none; cursor: not-allowed; opacity: .65;}

/* SMALL ACTION BUTTONS */
.subitems .buttons .count                     { padding: 0 15px; }
.subitems .buttons button div, .subitems .buttons a { line-height: 8px; padding: 5px 5px 5px 26px; background: transparent no-repeat 5px 50%; }
.subitems .buttons button.removeBalance div   { background-image:  url(../images/tango/16/emblems/emblem-balance-remove.png); }
.subitems .buttons button.instanceBalance div { background-image:  url(../images/tango/16/emblems/emblem-balance-screen.png); }
.subitems .buttons button.outOfService div    { background-image:  url(../images/tango/16/status/weather-clear-night.png);    }
.subitems .buttons button.inService div       { background-image:  url(../images/tango/16/status/weather-clear.png);          }
.subitems .buttons a.monitor                  { background-image:  url(../images/tango/16/apps/utilities-system-monitor.png); }
.subitems .buttons a.create                   { background-image:  url(../images/tango/16/actions/list-add.png);              }
.subitems .buttons button.stop div            { background-image:  url(../images/tango/16/actions/process-stop.png);          }
.subitems .buttons button.delete div          { background-image:  url(../images/tango/16/places/user-trash.png);             }
.subitems .buttons button.terminateMany       { display: none; } /* Hide dangerous button until JavaScript validation is ready */

/* ICONS FOR STANDARD TEXT LINKS */
a.application         { padding:  2px 2px  2px 26px; background: url(../images/tango/16/mimetypes/package-x-generic.png)         transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.stack               { padding:  2px 2px  2px 26px; background: url(../images/tango/16/tools/stack.png)                         transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.fastProperty        { padding:  2px 2px  2px 26px; background: url(../images/tango/16/categories/lightning.png)                transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.autoScaling         { padding:  2px 2px  2px 26px; background: url(../images/tango/16/status/network-idle.png)                 transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.cluster             { padding:  2px 2px  2px 26px; background: url(../images/tango/16/status/network-cluster.png)              transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.launchConfiguration { padding:  2px 2px  2px 26px; background: url(../images/tango/16/actions/launch.png)                      transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.scalingPolicy       { padding:  2px 2px  2px 26px; background: url(../images/tango/16/tools/resize.png)                        transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.scheduledAction     { padding:  2px 2px  2px 26px; background: url(../images/tango/16/actions/appointment-new.png)             transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.activities          { padding:  2px 2px  2px 26px; background: url(../images/tango/16/categories/applications-multimedia.png)  transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.alarm               { padding:  2px 2px  2px 26px; background: url(../images/tango/16/status/alarm.png)                        transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.spotInstanceRequest { padding:  2px 2px  2px 26px; background: url(../images/tango/16/tools/draw-ink.png        )              transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.instance            { padding:  2px 2px  2px 26px; background: url(../images/tango/16/devices/video-display.png )              transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; white-space: nowrap; }
a.user                { padding:  2px 2px  2px 26px; background: url(../images/tango/16/apps/system-users.png )                  transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.hostedZone          { padding:  2px 2px  2px 26px; background: url(../images/tango/16/apps/internet-web-browser.png )          transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.loadBalancer        { padding:  2px 2px  2px 26px; background: url(../images/tango/16/emblems/emblem-balance.png)              transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.image               { padding:  2px 2px  2px 26px; background: url(../images/tango/16/mimetypes/image-x-generic.png)           transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
.security             { padding:  2px 2px  2px 26px; background: url(../images/tango/16/status/secure.png)                       transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.domain              { padding:  2px 2px  2px 26px; background: url(../images/tango/16/devices/database-simple.png)             transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.queue               { padding:  2px 2px  2px 26px; background: url(../images/tango/16/actions/queue.png)                       transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.topic               { padding:  2px 2px  2px 26px; background: url(../images/tango/16/apps/preferences-desktop-multimedia.png) transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.volume              { padding:  2px 2px  2px 26px; background: url(../images/tango/16/devices/media-floppy.png)                transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.snapshot            { padding:  2px 2px  2px 26px; background: url(../images/tango/16/devices/snapshot.png)                    transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.rdsInstance         { padding:  2px 2px  2px 26px; background: url(../images/tango/16/devices/database.png)                    transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.dbSecurity          { padding:  2px 2px  2px 26px; background: url(../images/tango/16/devices/database-lock.png)               transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.dbSnapshot          { padding:  2px 2px  2px 26px; background: url(../images/tango/16/devices/database-snapshot.png)           transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.chaosMonkey         { padding:  2px 2px  2px 26px; background: url(../images/tango/16/emotes/face-monkey.png)                  transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.task                { padding:  2px 2px  2px 24px; background: url(../images/tango/16/actions/edit-paste.png)                  transparent no-repeat 3px 1px; display: inline-block; line-height: 17px; min-height: 17px; }
a.deployment          { padding:  2px 2px  2px 24px; background: url(../images/tango/16/tools/deploy.png)                        transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.builds              { padding:  2px 2px  2px 22px; background: url(../images/builds.png)                                       transparent no-repeat 5px 1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.mail                { padding:  2px 2px  2px 22px; background: url(../images/tango/16/actions/mail-message-new.png)            transparent no-repeat 0   1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.jira                { padding:  2px 2px  2px 22px; background: url(../images/jira.png)                                         transparent no-repeat 0   1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.docs                { padding:  2px 2px  2px 22px; background: url(../images/tango/16/apps/help-browser.png)                   transparent no-repeat 0   1px; display: inline-block; line-height: 16px; min-height: 16px; }
a.more                { padding:    0 2px    0 17px; background: url(../images/tango/16/actions/list-add.png)                    transparent no-repeat 0   50%; display: inline-block; line-height: 16px; min-height: 16px; }
a.fewer               { padding:    0 2px    0 22px; background: url(../images/tango/16/actions/list-remove.png)                 transparent no-repeat 0   50%; line-height: 16px; }
th.tiny               { max-width: 13px; padding: 2px 3px; }

/* ICONS FOR HEADER TEXT LINKS */
h1 a.autoScaling      { padding-left: 32px; background-image: url(../images/tango/24/status/network-idle.png);  }

.tiny caption            { padding: 12px 0 3px 0; margin: 0; font-size: 12px; }
.tiny, .tiny td, .tiny a { font-size: 9px; }
.groupReplacingPush .tiny span.toggle { padding: 2px 2px 4px 21px; background-position: 0 0; }
.tiny a.image            { padding: 2px 2px 4px 18px; background-position: 0 50%; }
.tiny a.instance         { padding: 2px 9px 2px 18px; background-position: 0 50%; white-space: nowrap; }
.list .tiny a.instance   { padding-right: 0; }

.tiny a.loadBalancer     { padding: 2px 2px 2px 18px; background-position: 0 50%; }
.tiny a.builds           { padding: 3px 2px 2px 18px; background-position: 0 50%; }
.tiny th, .tiny td       { padding: 4px 2px; }
.advancedItems td        { padding: 0 2px 13px 8px; max-width: 1px; }

.homeWrapper                    { margin: 0 20px; }
.homeWrapper .section           { margin: 20px 0; }
.homeWrapper td                 { vertical-align: top; }
.homeWrapper .widget            { vertical-align: top; margin-right: 70px; float: left; }
.homeWrapper .widget:last-child { margin-right: 0; }
.homeWrapper ul                 { padding-left: 0; }
.homeWrapper li                 { list-style: none; padding: 5px 0; }
.buttons div.filter             { float: right; margin-right: 10px; padding: 5px 0 0 6px; }
.buttons input[name=updatedBy]       { width: 60px; }
.buttons input[name=updatedBy]:focus { width: 130px; }
div.filter                      { display: inline-block; vertical-align: top; padding-left: 6px; }
div.filter input:focus          { border-color: #8BBBDF; }
.buttons div.filter input       { width: 150px; }
div.filter input                { border: 1px solid #CCC; background-color: #EEF8FF; color: #092448; width: 60px; margin-right: 8px; }
.instanceJump input[type=text]  { border: 1px solid #CCC; width: 80px; margin: 0 4px; }

/* ICON REFERENCE */
.icons { width: 700px; padding: 5px 0; }
.icon  { padding: 3px; }

/* OTHER */
.tagKey,
.subProperties label                     { color: #999; }
.subProperties label:not(:first-of-type) { padding-left: 6px; }
.inconsistent .appVersion, .inconsistent .appVersion a { color: red; }
.count              { padding-right: 15px; }
label.choice        { padding-right: 15px; }
.environment li a   { padding: 4px 5px 5px 5px; display: block; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; }
.environment a.test { background-color: black;   color: white !important; text-shadow: 2px 2px 1px #E9231B; border: 1px solid #666; }
.environment a.prod { background-color: #E9231B; color: white !important; text-shadow: 2px 2px 1px black;   border: 1px solid #666; }
.externalLinks li a { padding:  2px 2px  2px 22px; background: transparent no-repeat 0 1px; display: inline-block; line-height: 16px; min-height: 16px; }

/* SECURITY GROUPS */
table.securityGroups { width: auto; }
td.checkbox          { text-align: center; }

div.deployment { margin-bottom: 800px; }
.deployment input[type="radio"] { margin: 3px !important; }
.deployment div label { font-weight: normal }
.deployment .well { margin: 5px; }
.deployment .row { margin: 3px; }
.deployment div h3 { margin-top: 0 }

.deploymentOptions div.step { margin: 5px 0; width: 600px; }
.deploymentOptions div.step input, .deploymentOptions div.step select { margin: 3px !important; }
.deploymentOptions div.step h4 { padding: 0 35px; margin: 0; display: inline-block; background: no-repeat; height: 25px; }
.deploymentOptions div.step .panel-heading { padding: 5px; }
.deploymentOptions div.step .panel-body { padding: 5px; line-height: 22px; }
.deploymentOptions div.step div.removeStep { padding: 8px; margin: 2px; float: right; display: inline-block; background: no-repeat url(../images/tango/16/places/user-trash.png); cursor: pointer; }
.deploymentOptions div.step div.waiting { padding: 8px; margin: 2px; float: right; display: inline-block; background: no-repeat url(../images/spinner.gif); }

.deploymentOptions div.step h4.createAsg            { background-image: url(../images/tango/24/status/network-idle.png) }
.deploymentOptions div.step h4.wait                 { background-image: url(../images/tango/24/actions/appointment-new.png); }
.deploymentOptions div.step h4.judgment             { background-image: url(../images/tango/24/actions/appointment-new.png); }
.deploymentOptions div.step h4.scaling              { background-image: url(../images/tango/24/tools/resize.png); }
.deploymentOptions div.step h4.disableAsg           { background-image: url(../images/tango/24/status/traffic-disable.png); }
.deploymentOptions div.step h4.enableAsg            { background-image: url(../images/tango/24/status/traffic-enable.png); }
.deploymentOptions div.step h4.cleanUp              { background-image: url(../images/tango/24/actions/edit-clear.png); }
.deploymentOptions div.step h4.addStep              { background-image: url(../images/tango/24/places/start-here.png); }

.deployment .container .row { margin: 10px 0; }
.deployment .logMessage { margin: 0; padding: 0; line-height: 12px; }
.deployment .selectedValues div { margin: 0 4px 4px 0; padding: 3px; border: 1px solid #999; background-color: #fff; display: inline-block; }

.steps button.btn { padding: 0 10px; margin: 0 2px; height: 22px; }
.steps button.insert { padding: 0 200px; }
.steps .buttonPanel { text-align: center; width: 600px; background: no-repeat; }
.steps .buttonPanel button { padding: 0 30px; background: no-repeat; background-position: 4px 2px; }
.steps .buttonPanel button.proceed  { background-image: url(../images/tango/16/actions/media-seek-backward.png); }
.steps .buttonPanel button.rollback { background-image: url(../images/tango/16/actions/media-playback-start.png); }

.animate-repeat.ng-move,
.animate-repeat.ng-enter,
.animate-repeat.ng-leave {
    transition: all linear 0.5s;
}

.animate-repeat.ng-leave.ng-leave-active,
.animate-repeat.ng-move,
.animate-repeat.ng-enter {
    opacity:0;
    max-height:0;
}

.animate-repeat.ng-leave,
.animate-repeat.ng-move.ng-move-active,
.animate-repeat.ng-enter.ng-enter-active {
    opacity:1;
    max-height:100px;
}

/* GROUP REPLACING PUSH */
.cluster h3            {                  margin-bottom: 8px; }
.cluster ul.tasks      { padding-left: 0; margin-bottom: 10px; list-style-type: none; }
.groupReplacingPush    { padding: 0;      margin: 0; clear: both; }
.groupReplacingPush li.clusterAsgForm { padding: 10px;   margin-right: 14px; margin-bottom: 14px; display: inline-block; float: left; max-width: 340px; border-style: solid; border-color: #CCC #999 #999 #CCC; border-width: 1px 2px 2px 1px; }
.cluster div.intro          { float: left; margin-right: 40px; width: 100%}
.cluster table.reservations { float: left; margin-bottom: 14px; width: auto; }
.groupReplacingPush .batchResizeContainer { display: none; padding: 0 8px; }
.groupReplacingPush li.disabledGroup,
.groupReplacingPush li.disabledGroup th,
.groupReplacingPush li.disabledGroup div.buttons { background-color: #EBEBEB; background-image: none; }
.groupReplacingPush li.create                    { max-width: 380px; }
.groupReplacingPush li.create table              { width: auto;      }
.groupReplacingPush li h2                        { margin-top: 0;    }
.groupReplacingPush li.create h2:first-of-type   { float: left;      }
.groupReplacingPush li.create span.toggle        { float: right;     }
.groupReplacingPush select                       { max-width: 240px; }
.groupReplacingPush .filter                      { width: 60px;      }
.groupReplacingPush .name                        { white-space: normal; min-width: 86px; }

#showAdvancedOptionsToCreateFastProperty   { margin-left: 230px; }

                   span.toggle       { background: url(../images/tango/16/actions/list-remove.png) transparent no-repeat 0 50%; padding: 0 2px 0 17px; line-height: 16px; }
.hideAdvancedItems span.toggle       { background-image: url(../images/tango/16/actions/list-add.png); }
.hideAdvancedItems .advancedItems,
.hideAdvancedItems .advanced       { display: none; }

.tip .template { display: none; }
.tip img       { margin-left: 4px; cursor: help; }

            .manualDesiredCapacity  { display: none; }
.showManual .dynamicDesiredCapacity { display: none; }
.showManual .manualDesiredCapacity  { display: block; }

div.grippie { background: #EEEEEE url(../images/grippie.png) no-repeat scroll center 2px; border: 1px solid #DDDDDD; border-top-width: 0; cursor: s-resize; height: 9px; overflow: hidden; }
.resizable-textarea textarea { display: block; margin-bottom: 0; width: 95%; height: 20%; }

.messageForIeUsers              { padding: 10px; color: blue; font-size: 13px; font-weight: bold; background-color: white; }
.chromeFrameInstallDefaultStyle { width: 96%; height: 90%; border: 5px solid blue; z-index: 1000; left: 410px; top: 360px; }

.concealed                   { display: none      }
.customOrExistingInput div   { line-height: 22px; }

.securityGroupsSelect select { min-width: 120px;    }
.select2-container a         { font-weight: normal; }

/* Prevent wrapping due to width of Windows/Linux scrollbars */
.select2-drop .select2-results .select2-result-label { padding-right: 15px; }

/*
 #
 # Opentip v2.4.6
 #
 # More info at [www.opentip.org](http://www.opentip.org)
 #
 # Copyright (c) 2012, Matias Meno
 # Graphics by Tjandra Mayerhold
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
 # in the Software without restriction, including without limitation the rights
 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 # copies of the Software, and to permit persons to whom the Software is
 # furnished to do so, subject to the following conditions:
 #
 # The above copyright notice and this permission notice shall be included in
 # all copies or substantial portions of the Software.
 #
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 #
 */
.opentip-container,
.opentip-container * {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
.opentip-container {
    position: absolute;
    max-width: 300px;
    z-index: 100;
    -webkit-transition: -webkit-transform 1s ease-in-out;
    -moz-transition: -moz-transform 1s ease-in-out;
    -o-transition: -o-transform 1s ease-in-out;
    -ms-transition: -ms-transform 1s ease-in-out;
    transition: transform 1s ease-in-out;
    pointer-events: none;
    -webkit-transform: translateX(0) translateY(0);
    -moz-transform: translateX(0) translateY(0);
    -o-transform: translateX(0) translateY(0);
    -ms-transform: translateX(0) translateY(0);
    transform: translateX(0) translateY(0);
}
.opentip-container.ot-fixed.ot-hidden.stem-top.stem-center,
.opentip-container.ot-fixed.ot-going-to-show.stem-top.stem-center,
.opentip-container.ot-fixed.ot-hiding.stem-top.stem-center {
    -webkit-transform: translateY(-5px);
    -moz-transform: translateY(-5px);
    -o-transform: translateY(-5px);
    -ms-transform: translateY(-5px);
    transform: translateY(-5px);
}
.opentip-container.ot-fixed.ot-hidden.stem-top.stem-right,
.opentip-container.ot-fixed.ot-going-to-show.stem-top.stem-right,
.opentip-container.ot-fixed.ot-hiding.stem-top.stem-right {
    -webkit-transform: translateY(-5px) translateX(5px);
    -moz-transform: translateY(-5px) translateX(5px);
    -o-transform: translateY(-5px) translateX(5px);
    -ms-transform: translateY(-5px) translateX(5px);
    transform: translateY(-5px) translateX(5px);
}
.opentip-container.ot-fixed.ot-hidden.stem-middle.stem-right,
.opentip-container.ot-fixed.ot-going-to-show.stem-middle.stem-right,
.opentip-container.ot-fixed.ot-hiding.stem-middle.stem-right {
    -webkit-transform: translateX(5px);
    -moz-transform: translateX(5px);
    -o-transform: translateX(5px);
    -ms-transform: translateX(5px);
    transform: translateX(5px);
}
.opentip-container.ot-fixed.ot-hidden.stem-bottom.stem-right,
.opentip-container.ot-fixed.ot-going-to-show.stem-bottom.stem-right,
.opentip-container.ot-fixed.ot-hiding.stem-bottom.stem-right {
    -webkit-transform: translateY(5px) translateX(5px);
    -moz-transform: translateY(5px) translateX(5px);
    -o-transform: translateY(5px) translateX(5px);
    -ms-transform: translateY(5px) translateX(5px);
    transform: translateY(5px) translateX(5px);
}
.opentip-container.ot-fixed.ot-hidden.stem-bottom.stem-center,
.opentip-container.ot-fixed.ot-going-to-show.stem-bottom.stem-center,
.opentip-container.ot-fixed.ot-hiding.stem-bottom.stem-center {
    -webkit-transform: translateY(5px);
    -moz-transform: translateY(5px);
    -o-transform: translateY(5px);
    -ms-transform: translateY(5px);
    transform: translateY(5px);
}
.opentip-container.ot-fixed.ot-hidden.stem-bottom.stem-left,
.opentip-container.ot-fixed.ot-going-to-show.stem-bottom.stem-left,
.opentip-container.ot-fixed.ot-hiding.stem-bottom.stem-left {
    -webkit-transform: translateY(5px) translateX(-5px);
    -moz-transform: translateY(5px) translateX(-5px);
    -o-transform: translateY(5px) translateX(-5px);
    -ms-transform: translateY(5px) translateX(-5px);
    transform: translateY(5px) translateX(-5px);
}
.opentip-container.ot-fixed.ot-hidden.stem-middle.stem-left,
.opentip-container.ot-fixed.ot-going-to-show.stem-middle.stem-left,
.opentip-container.ot-fixed.ot-hiding.stem-middle.stem-left {
    -webkit-transform: translateX(-5px);
    -moz-transform: translateX(-5px);
    -o-transform: translateX(-5px);
    -ms-transform: translateX(-5px);
    transform: translateX(-5px);
}
.opentip-container.ot-fixed.ot-hidden.stem-top.stem-left,
.opentip-container.ot-fixed.ot-going-to-show.stem-top.stem-left,
.opentip-container.ot-fixed.ot-hiding.stem-top.stem-left {
    -webkit-transform: translateY(-5px) translateX(-5px);
    -moz-transform: translateY(-5px) translateX(-5px);
    -o-transform: translateY(-5px) translateX(-5px);
    -ms-transform: translateY(-5px) translateX(-5px);
    transform: translateY(-5px) translateX(-5px);
}
.opentip-container.ot-fixed .opentip {
    pointer-events: auto;
}
.opentip-container.ot-hidden {
    display: none;
}
.opentip-container .opentip {
    position: relative;
    font-size: 13px;
    line-height: 120%;
    padding: 9px 14px;
    color: #4f4b47;
    text-shadow: -1px -1px 0px rgba(255,255,255,0.2);
}
.opentip-container .opentip .header {
    margin: 0;
    padding: 0;
}
.opentip-container .opentip .ot-close {
    pointer-events: auto;
    display: block;
    position: absolute;
    top: -12px;
    left: 60px;
    color: rgba(0,0,0,0.5);
    background: rgba(0,0,0,0);
    text-decoration: none;
}
.opentip-container .opentip .ot-close span {
    display: none;
}
.opentip-container .opentip .ot-loading-indicator {
    display: none;
}
.opentip-container.ot-loading .ot-loading-indicator {
    width: 30px;
    height: 30px;
    font-size: 30px;
    line-height: 30px;
    font-weight: bold;
    display: block;
}
.opentip-container.ot-loading .ot-loading-indicator span {
    display: block;
    -webkit-animation: otloading 2s linear infinite;
    -moz-animation: otloading 2s linear infinite;
    -o-animation: otloading 2s linear infinite;
    -ms-animation: otloading 2s linear infinite;
    animation: otloading 2s linear infinite;
    text-align: center;
}
.opentip-container.style-dark .opentip,
.opentip-container.style-alert .opentip {
    color: #f8f8f8;
    text-shadow: 1px 1px 0px rgba(0,0,0,0.2);
}
.opentip-container.style-glass .opentip {
    padding: 15px 25px;
    color: #317cc5;
    text-shadow: 1px 1px 8px rgba(0,94,153,0.3);
}
.opentip-container.ot-hide-effect-fade {
    -webkit-transition: -webkit-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    -moz-transition: -moz-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    -o-transition: -o-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    -ms-transition: -ms-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    transition: transform 0.5s ease-in-out, opacity 1s ease-in-out;
    opacity: 1;
    -ms-filter: none;
    filter: none;
}
.opentip-container.ot-hide-effect-fade.ot-hiding {
    opacity: 0;
    filter: alpha(opacity=0);
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
}
.opentip-container.ot-show-effect-appear.ot-going-to-show,
.opentip-container.ot-show-effect-appear.ot-showing {
    -webkit-transition: -webkit-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    -moz-transition: -moz-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    -o-transition: -o-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    -ms-transition: -ms-transform 0.5s ease-in-out, opacity 1s ease-in-out;
    transition: transform 0.5s ease-in-out, opacity 1s ease-in-out;
}
.opentip-container.ot-show-effect-appear.ot-going-to-show {
    opacity: 0;
    filter: alpha(opacity=0);
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
}
.opentip-container.ot-show-effect-appear.ot-showing {
    opacity: 1;
    -ms-filter: none;
    filter: none;
}
.opentip-container.ot-show-effect-appear.ot-visible {
    opacity: 1;
    -ms-filter: none;
    filter: none;
}
@-moz-keyframes otloading {
    0% {
        -webkit-transform: rotate(0deg);
        -moz-transform: rotate(0deg);
        -o-transform: rotate(0deg);
        -ms-transform: rotate(0deg);
        transform: rotate(0deg);
    }

    100% {
        -webkit-transform: rotate(360deg);
        -moz-transform: rotate(360deg);
        -o-transform: rotate(360deg);
        -ms-transform: rotate(360deg);
        transform: rotate(360deg);
    }
}
@-webkit-keyframes otloading {
    0% {
        -webkit-transform: rotate(0deg);
        -moz-transform: rotate(0deg);
        -o-transform: rotate(0deg);
        -ms-transform: rotate(0deg);
        transform: rotate(0deg);
    }

    100% {
        -webkit-transform: rotate(360deg);
        -moz-transform: rotate(360deg);
        -o-transform: rotate(360deg);
        -ms-transform: rotate(360deg);
        transform: rotate(360deg);
    }
}
@-o-keyframes otloading {
    0% {
        -webkit-transform: rotate(0deg);
        -moz-transform: rotate(0deg);
        -o-transform: rotate(0deg);
        -ms-transform: rotate(0deg);
        transform: rotate(0deg);
    }

    100% {
        -webkit-transform: rotate(360deg);
        -moz-transform: rotate(360deg);
        -o-transform: rotate(360deg);
        -ms-transform: rotate(360deg);
        transform: rotate(360deg);
    }
}
@-ms-keyframes otloading {
    0% {
        -webkit-transform: rotate(0deg);
        -moz-transform: rotate(0deg);
        -o-transform: rotate(0deg);
        -ms-transform: rotate(0deg);
        transform: rotate(0deg);
    }

    100% {
        -webkit-transform: rotate(360deg);
        -moz-transform: rotate(360deg);
        -o-transform: rotate(360deg);
        -ms-transform: rotate(360deg);
        transform: rotate(360deg);
    }
}
@keyframes otloading {
    0% {
        -webkit-transform: rotate(0deg);
        -moz-transform: rotate(0deg);
        -o-transform: rotate(0deg);
        -ms-transform: rotate(0deg);
        transform: rotate(0deg);
    }

    100% {
        -webkit-transform: rotate(360deg);
        -moz-transform: rotate(360deg);
        -o-transform: rotate(360deg);
        -ms-transform: rotate(360deg);
        transform: rotate(360deg);
    }
}


text:
@interface ShiftCell : UITableViewCell

@end

redpajama_set_name: RedPajamaGithub


text:
<?php

/**
 * @file
 * Contains \Drupal\hal\Normalizer\NormalizerBase.
 */

namespace Drupal\hal\Normalizer;

use Drupal\serialization\Normalizer\NormalizerBase as SerializationNormalizerBase;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;

/**
 * Base class for Normalizers.
 */
abstract class NormalizerBase extends SerializationNormalizerBase implements DenormalizerInterface {

  /**
   * The formats that the Normalizer can handle.
   *
   * @var array
   */
  protected $formats = array('hal_json');

  /**
   * {@inheritdoc}
   */
  public function supportsNormalization($data, $format = NULL) {
    return in_array($format, $this->formats) && parent::supportsNormalization($data, $format);
  }

  /**
   * {@inheritdoc}
   */
  public function supportsDenormalization($data, $type, $format = NULL) {
    if (in_array($format, $this->formats) && (class_exists($this->supportedInterfaceOrClass) || interface_exists($this->supportedInterfaceOrClass))) {
      $target = new \ReflectionClass($type);
      $supported = new \ReflectionClass($this->supportedInterfaceOrClass);
      if ($supported->isInterface()) {
        return $target->implementsInterface($this->supportedInterfaceOrClass);
      }
      else {
        return ($target->getName() == $this->supportedInterfaceOrClass || $target->isSubclassOf($this->supportedInterfaceOrClass));
      }
    }

    return FALSE;
  }

}


text:
<?php
// GENERATED CODE -- DO NOT EDIT!

// Original file comments:
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
namespace Google\Cloud\AccessApproval\V1;

/**
 * This API allows a customer to manage accesses to cloud resources by
 * Google personnel. It defines the following resource model:
 *
 * - The API has a collection of
 *   [ApprovalRequest][google.cloud.accessapproval.v1.ApprovalRequest]
 *   resources, named `approvalRequests/{approval_request_id}`
 * - The API has top-level settings per Project/Folder/Organization, named
 *   `accessApprovalSettings`
 *
 * The service also periodically emails a list of recipients, defined at the
 * Project/Folder/Organization level in the accessApprovalSettings, when there
 * is a pending ApprovalRequest for them to act on. The ApprovalRequests can
 * also optionally be published to a Cloud Pub/Sub topic owned by the customer
 * (for Beta, the Pub/Sub setup is managed manually).
 *
 * ApprovalRequests can be approved or dismissed. Google personel can only
 * access the indicated resource or resources if the request is approved
 * (subject to some exclusions:
 * https://cloud.google.com/access-approval/docs/overview#exclusions).
 *
 * Note: Using Access Approval functionality will mean that Google may not be
 * able to meet the SLAs for your chosen products, as any support response times
 * may be dramatically increased. As such the SLAs do not apply to any service
 * disruption to the extent impacted by Customer's use of Access Approval. Do
 * not enable Access Approval for projects where you may require high service
 * availability and rapid response by Google Cloud Support.
 *
 * After a request is approved or dismissed, no further action may be taken on
 * it. Requests with the requested_expiration in the past or with no activity
 * for 14 days are considered dismissed. When an approval expires, the request
 * is considered dismissed.
 *
 * If a request is not approved or dismissed, we call it pending.
 */
class AccessApprovalGrpcClient extends \Grpc\BaseStub {

    /**
     * @param string $hostname hostname
     * @param array $opts channel options
     * @param \Grpc\Channel $channel (optional) re-use channel object
     */
    public function __construct($hostname, $opts, $channel = null) {
        parent::__construct($hostname, $opts, $channel);
    }

    /**
     * Lists approval requests associated with a project, folder, or organization.
     * Approval requests can be filtered by state (pending, active, dismissed).
     * The order is reverse chronological.
     * @param \Google\Cloud\AccessApproval\V1\ListApprovalRequestsMessage $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function ListApprovalRequests(\Google\Cloud\AccessApproval\V1\ListApprovalRequestsMessage $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/google.cloud.accessapproval.v1.AccessApproval/ListApprovalRequests',
        $argument,
        ['\Google\Cloud\AccessApproval\V1\ListApprovalRequestsResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Gets an approval request. Returns NOT_FOUND if the request does not exist.
     * @param \Google\Cloud\AccessApproval\V1\GetApprovalRequestMessage $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetApprovalRequest(\Google\Cloud\AccessApproval\V1\GetApprovalRequestMessage $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/google.cloud.accessapproval.v1.AccessApproval/GetApprovalRequest',
        $argument,
        ['\Google\Cloud\AccessApproval\V1\ApprovalRequest', 'decode'],
        $metadata, $options);
    }

    /**
     * Approves a request and returns the updated ApprovalRequest.
     *
     * Returns NOT_FOUND if the request does not exist. Returns
     * FAILED_PRECONDITION if the request exists but is not in a pending state.
     * @param \Google\Cloud\AccessApproval\V1\ApproveApprovalRequestMessage $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function ApproveApprovalRequest(\Google\Cloud\AccessApproval\V1\ApproveApprovalRequestMessage $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/google.cloud.accessapproval.v1.AccessApproval/ApproveApprovalRequest',
        $argument,
        ['\Google\Cloud\AccessApproval\V1\ApprovalRequest', 'decode'],
        $metadata, $options);
    }

    /**
     * Dismisses a request. Returns the updated ApprovalRequest.
     *
     * NOTE: This does not deny access to the resource if another request has been
     * made and approved. It is equivalent in effect to ignoring the request
     * altogether.
     *
     * Returns NOT_FOUND if the request does not exist.
     *
     * Returns FAILED_PRECONDITION if the request exists but is not in a pending
     * state.
     * @param \Google\Cloud\AccessApproval\V1\DismissApprovalRequestMessage $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DismissApprovalRequest(\Google\Cloud\AccessApproval\V1\DismissApprovalRequestMessage $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/google.cloud.accessapproval.v1.AccessApproval/DismissApprovalRequest',
        $argument,
        ['\Google\Cloud\AccessApproval\V1\ApprovalRequest', 'decode'],
        $metadata, $options);
    }

    /**
     * Gets the settings associated with a project, folder, or organization.
     * @param \Google\Cloud\AccessApproval\V1\GetAccessApprovalSettingsMessage $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetAccessApprovalSettings(\Google\Cloud\AccessApproval\V1\GetAccessApprovalSettingsMessage $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/google.cloud.accessapproval.v1.AccessApproval/GetAccessApprovalSettings',
        $argument,
        ['\Google\Cloud\AccessApproval\V1\AccessApprovalSettings', 'decode'],
        $metadata, $options);
    }

    /**
     * Updates the settings associated with a project, folder, or organization.
     * Settings to update are determined by the value of field_mask.
     * @param \Google\Cloud\AccessApproval\V1\UpdateAccessApprovalSettingsMessage $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function UpdateAccessApprovalSettings(\Google\Cloud\AccessApproval\V1\UpdateAccessApprovalSettingsMessage $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/google.cloud.accessapproval.v1.AccessApproval/UpdateAccessApprovalSettings',
        $argument,
        ['\Google\Cloud\AccessApproval\V1\AccessApprovalSettings', 'decode'],
        $metadata, $options);
    }

    /**
     * Deletes the settings associated with a project, folder, or organization.
     * This will have the effect of disabling Access Approval for the project,
     * folder, or organization, but only if all ancestors also have Access
     * Approval disabled. If Access Approval is enabled at a higher level of the
     * hierarchy, then Access Approval will still be enabled at this level as
     * the settings are inherited.
     * @param \Google\Cloud\AccessApproval\V1\DeleteAccessApprovalSettingsMessage $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteAccessApprovalSettings(\Google\Cloud\AccessApproval\V1\DeleteAccessApprovalSettingsMessage $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/google.cloud.accessapproval.v1.AccessApproval/DeleteAccessApprovalSettings',
        $argument,
        ['\Google\Protobuf\GPBEmpty', 'decode'],
        $metadata, $options);
    }

}


text:
<?php

namespace GithugServiceTest;

use GithubService\GithubArtaxService\GithubArtaxService;
use GithubService\GithubHydratorRegistry;

/**
 * @group refactoring
 */
class GithubHydratorRegistryTest extends \PHPUnit_Framework_TestCase
{
    function testEmojis()
    {
        $dataMapper = new GithubHydratorRegistry();
        $contents = file_get_contents(__DIR__."/../fixtures/data/githubJSON/EMOJIS.json");
        $data = json_decode($contents, true);
        $emojiList = $dataMapper->instantiateClass('GithubService\Model\EmojiList', $data);
        $this->assertInstanceOf('GithubService\Model\EmojiList', $emojiList);
    }

    public function additionProvider()
    {

        return array(
//            //['ActiveAdminOrgMembership', 'ACTIVE_ADMIN_ORG_MEMBERSHIP'],
//            //['ActiveOrgMemberships', 'ACTIVE_ORG_MEMBERSHIPS '],
//            ['ActiveTeamMembership', 'ACTIVE_TEAM_MEMBERSHIP'],
            // ['AdminStats', 'ADMIN_STATS']
            ['Blob', 'BLOB'],
            ['BlobAfterCreate', 'BLOB_AFTER_CREATE'],
            //['Branch', 'BRANCH'],
            ['Branches', 'BRANCHES'],
            //['CheckMaintenanceStatus', 'CHECK_MAINTENANCE_STATUS'],
            //['CodeSearchV3Results', 'CODE_SEARCH_V3_RESULTS'],
            //['CodeSearchV3ResultsHighlighting', 'CODE_SEARCH_V3_RESULTS_HIGHLIGHTING'],
            //['CombinedStatus', 'COMBINED_STATUS'],
            //['Commit', 'COMMIT'],
            // ['CommitComment', 'COMMIT_COMMENT'],
//Difficult            ['CommitComparison', 'COMMIT_COMPARISON'],
            // ['ConfigStatuses', 'CONFIG_STATUSES'],
//Difficult            ['ContentCrud', 'CONTENT_CRUD'],
            ['Contributor', 'CONTRIBUTOR'],
            ['CreateDownload', 'CREATE_DOWNLOAD'],
            //['CreatedRelease', 'CREATED_RELEASE'],
            ['Deployment', 'DEPLOYMENT'],
            // ['DeploymentStatus', 'DEPLOYMENT_STATUS'],
// DC            ['DirectoryContent', 'DIRECTORY_CONTENT'],
            // ['Download', 'DOWNLOAD'],
            ['EmailSearchResults', 'EMAIL_SEARCH_RESULTS'],
            ['EmojiList', 'EMOJIS'],
            // ['Event', 'EVENT'],
            //['Feeds', 'FEEDS'],
//DC            ['FetchSettings', 'FETCH_SETTINGS'],
//            ['FullCommit', 'FULL_COMMIT'],
            //['FullGist', 'FULL_GIST'],
            //['FullIssue', 'FULL_ISSUE'],
            //['FullIssueEvent', 'FULL_ISSUE_EVENT'],
            //['FullOrg', 'FULL_ORG'],
            //['FullPull', 'FULL_PULL'],
            //['FullRepo', 'FULL_REPO'],
            //['FullTeam', 'FULL_TEAM'],
            //['FullUser', 'FULL_USER'],
            // ['GetAuthorizedSshKeys', 'GET_AUTHORIZED_SSH_KEYS'],
            ['Gist', 'GIST'],
            ['GistComment', 'GIST_COMMENT'],
            ['GistForks', 'GIST_FORKS'],
            // ['GistHistory', 'GIST_HISTORY'],
            //['GitCommit', 'GIT_COMMIT'],
            // ['Gittag', 'GITTAG'],
            //['Hook', 'HOOK'],
            ['IndexingSuccess', 'INDEXING_SUCCESS'],
            ['IssueComment', 'ISSUE_COMMENT'],
            ['IssueEvent', 'ISSUE_EVENT'],
            //['IssueSearchItem', 'ISSUE_SEARCH_ITEM'],
//       TODO - only implement v3?     ['IssueSearchResults', 'ISSUE_SEARCH_RESULTS'],
            ['Licensing', 'LICENSING'],
            ['Meta', 'META'],
            ['OauthAccess', 'OAUTH_ACCESS'],
            //['OauthAccessWithUser', 'OAUTH_ACCESS_WITH_USER'],
//            ['OrgMemberships', 'ORG_MEMBERSHIPS'],
            ['Pages', 'PAGES'],
            ['PagesBuild', 'PAGES_BUILD'],
//            ['PendingOrgMemberships', 'PENDING_ORG_MEMBERSHIPS'],
//DC            ['PrivateOrg', 'PRIVATE_ORG'],
            //['PrivateUser', 'PRIVATE_USER'],
            ['PublicKey', 'PUBLIC_KEY'],
            //['Pull', 'PULL'],
            ['PullComment', 'PULL_COMMENT'],
            ['ReadmeContent', 'README_CONTENT'],
            ['Ref', 'REF'],
            ['Refs', 'REFS'],
            ['RepoSearchItem', 'REPO_SEARCH_ITEM'],
            ['RepoSearchResults', 'REPO_SEARCH_RESULTS'],
            ['RepoStatsCodeFrequency', 'REPO_STATS_CODE_FREQUENCY'],
            ['RepoStatsCommitActivity', 'REPO_STATS_COMMIT_ACTIVITY'],
//DC             ['RepoStatsContributors', 'REPO_STATS_CONTRIBUTORS'],
            // ['RepoStatsParticipation', 'REPO_STATS_PARTICIPATION'],
            ['RepoStatsPunchCard', 'REPO_STATS_PUNCH_CARD'],
            ['RepoSubscription', 'REPO_SUBSCRIPTION'],
            ['SearchRepos', 'SEARCH_REPOS'],
            ['SimplePublicKey', 'SIMPLE_PUBLIC_KEY'],
            ['Status', 'STATUS'],
            ['SubmoduleContent', 'SUBMODULE_CONTENT'],
            ['Subscription', 'SUBSCRIPTION'],
            ['SymlinkContent', 'SYMLINK_CONTENT'],
            ['Tag', 'TAG'],
            //['Team', 'TEAM'],
            ['Template', 'TEMPLATE'],
            //['Thread', 'THREAD'],
            //['Tree', 'TREE'],
            //['TreeNew', 'TREE_NEW'],
            ['UserEmail', 'USER_EMAIL'],
            ['UserEmailList', 'user_email_list'],
            ['UserSearchItem', 'USER_SEARCH_ITEM'],
            //['UserSearchResults', 'USER_SEARCH_RESULTS'], Need to check what is current version
        );
    }

    /**
     * @dataProvider additionProvider
     */
    function testDataParsing($expectedClassname, $dataFile)
    {
        $json = file_get_contents(__DIR__.'/../fixtures/data/githubJSON/'.$dataFile.'.json');
        $className = 'GithubService\Model\\'.$expectedClassname;
        $data = json_decode($json, true);
        $dataMapper = new GithubHydratorRegistry();

        $instance = $dataMapper->instantiateClass($className, $data);
        $this->assertInstanceOf(
            $className,
            $instance
        );
    }
}


text:
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell   #-}

-- | Various product types.
--
module Network.AWS.Wolf.Types.Product where

import Data.Aeson.TH
import Network.AWS.Wolf.Prelude

-- | Conf
--
-- SWF and S3 configuration parameters.
--
data Conf = Conf
  { _cDomain :: Text
    -- ^ SWF domain.
  , _cBucket :: Text
    -- ^ S3 bucket.
  , _cPrefix :: Text
    -- ^ S3 prefix.
  } deriving (Show, Eq)

$(makeLenses ''Conf)
$(deriveJSON spinalOptions ''Conf)

-- | Control
--
newtype Control = Control
  { _cRunUid :: Text
    -- ^ Run uid of workflow.
  } deriving (Show, Eq)

$(makeLenses ''Control)
$(deriveJSON spinalOptions ''Control)

-- | Plan Task
--
-- Work task.
--
data Task = Task
  { _tName    :: Text
    -- ^ Name of task.
  , _tVersion :: Text
    -- ^ Version of task.
  , _tQueue   :: Text
    -- ^ Queue for task.
  } deriving (Show, Eq)

$(makeLenses ''Task)
$(deriveJSON spinalOptions ''Task)

-- | Plan
--
-- Group of tasks.
--
data Plan = Plan
  { _pStart :: Task
    -- ^ Flow task.
  , _pTasks :: [Task]
    -- ^ Worker tasks.
  } deriving (Show, Eq)

$(makeLenses ''Plan)
$(deriveJSON spinalOptions ''Plan)


text:
package com.zfgc.exception.security;

public class ZfgcUnauthorizedException extends ZfgcSecurityException{

	public ZfgcUnauthorizedException() {
		super("You are unauthorized to access this resource.");
	}

}


text:
import re
import sys
import errno
import platform

from . import px_units
from . import px_terminal
from . import px_exec_util

from typing import List
from typing import Tuple
from typing import Optional

PAGE_SIZE_RE = re.compile(r"page size of ([0-9]+) bytes")

# Example input, from "sysctl vm.swapusage":
# "vm.swapusage: total = 2048.00M  used = 562.75M  free = 1485.25M  (encrypted)"
SWAPUSAGE_RE = re.compile(r".*used = ([0-9.]+)M.*")

def get_meminfo() -> str:

    total_ram_bytes, wanted_ram_bytes = _get_ram_numbers()
    percentage = (100.0 * wanted_ram_bytes) / total_ram_bytes

    percentage_string = str(int(round(percentage))) + "%"

    # "80"? I made it up.
    if percentage < 80:
        percentage_string = px_terminal.green(percentage_string)
    elif percentage < 100:
        percentage_string = px_terminal.yellow(percentage_string)
    else:
        percentage_string = px_terminal.red(percentage_string)

    current_ram, max_ram = px_units.bytes_to_strings(wanted_ram_bytes, total_ram_bytes)
    wanted_and_total_string = "".join(
        [
            px_terminal.bold(current_ram),
            " / ",
            px_terminal.bold(max_ram),
        ]
    )

    ram_text = "".join([percentage_string, "  [", wanted_and_total_string, "]"])

    return ram_text

def _get_ram_numbers() -> Tuple[int, int]:
    """
    Returns a tuple containing two numbers:
    * Total amount of RAM installed in the machine (in bytes)
    * Wanted amount of RAM by the system (in bytes)

    If wanted > total it generally implies that we're swapping.
    """
    return_me = _get_ram_numbers_from_proc()
    if return_me is not None:
        return return_me

    return_me = _get_ram_numbers_macos()
    if return_me is not None:
        return return_me

    uname = str(platform.uname())
    platform_s = uname + " Python " + sys.version

    raise IOError("Unable to get memory info " + platform_s)

def _update_from_meminfo(base: Optional[int], line: str, name: str) -> Optional[int]:
    if not line.startswith(name + ":"):
        return base

    just_the_number = line[len(name) + 1 : len(line) - 3]

    return int(just_the_number)

def _get_ram_numbers_from_proc(
    proc_meminfo: str = "/proc/meminfo",
) -> Optional[Tuple[int, int]]:

    total_kb: Optional[int] = None
    available_kb: Optional[int] = None
    free_kb: Optional[int] = None
    buffers_kb: Optional[int] = None
    cached_kb: Optional[int] = None
    swapcached_kb: Optional[int] = None
    swaptotal_kb: Optional[int] = None
    swapfree_kb: Optional[int] = None

    try:
        with open(proc_meminfo, encoding="utf-8") as f:
            for line in f:
                total_kb = _update_from_meminfo(total_kb, line, "MemTotal")
                available_kb = _update_from_meminfo(available_kb, line, "MemAvailable")
                free_kb = _update_from_meminfo(free_kb, line, "MemFree")
                buffers_kb = _update_from_meminfo(buffers_kb, line, "Buffers")
                cached_kb = _update_from_meminfo(cached_kb, line, "Cached")
                swapcached_kb = _update_from_meminfo(swapcached_kb, line, "SwapCached")
                swaptotal_kb = _update_from_meminfo(swaptotal_kb, line, "SwapTotal")
                swapfree_kb = _update_from_meminfo(swapfree_kb, line, "SwapFree")
    except (IOError, OSError) as e:
        if e.errno == errno.ENOENT:
            # /proc/meminfo not found, we're probably not on Linux
            return None

        raise

    if total_kb is None:
        return None
    if swaptotal_kb is None:
        return None
    if swapfree_kb is None:
        return None
    swapused_kb = swaptotal_kb - swapfree_kb

    if available_kb is not None:
        # Use MemAvailable if we can:
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

        ramused_kb = total_kb - available_kb

        return (total_kb * 1024, (swapused_kb + ramused_kb) * 1024)

    if free_kb is None:
        return None
    if buffers_kb is None:
        return None
    if cached_kb is None:
        return None
    if swapcached_kb is None:
        return None

    ramused_kb = total_kb - (free_kb + buffers_kb + cached_kb + swapcached_kb)

    return (total_kb * 1024, (swapused_kb + ramused_kb) * 1024)

def _get_ram_numbers_macos() -> Optional[Tuple[int, int]]:
    vm_stat_lines = _get_vmstat_output_lines()
    if vm_stat_lines is None:
        return None

    vmstat_ram = _get_ram_numbers_from_vm_stat_output(vm_stat_lines)
    if vmstat_ram is None:
        return None

    total_ram_bytes, used_ram_bytes = vmstat_ram

    used_swap_bytes = _get_used_swap_bytes_sysctl()

    return (total_ram_bytes, used_ram_bytes + used_swap_bytes)

def _get_vmstat_output_lines() -> Optional[List[str]]:
    try:
        return px_exec_util.run(["vm_stat"]).splitlines()
    except (IOError, OSError) as e:
        if e.errno == errno.ENOENT:
            # vm_stat not found, we're probably not on OSX
            return None

        raise

def _get_used_swap_bytes_sysctl() -> int:
    stdout = px_exec_util.run(["sysctl", "vm.swapusage"], check_exitcode=True)
    match = SWAPUSAGE_RE.match(stdout.strip())
    if not match:
        raise IOError("No swap usage in 'sysctl vm.swapusage' output: " + stdout)

    return int(float(match.group(1)) * 1024 * 1024)

def _update_if_prefix(base: Optional[int], line: str, prefix: str) -> Optional[int]:
    if not line.startswith(prefix):
        return base

    no_ending_dot = line.rstrip(".")

    return int(no_ending_dot[len(prefix) :])

def _get_ram_numbers_from_vm_stat_output(
    vm_stat_lines: List[str],
) -> Optional[Tuple[int, int]]:

    # List based on https://apple.stackexchange.com/a/196925/182882
    page_size_bytes = None
    pages_free = None
    pages_active = None
    pages_inactive = None
    pages_speculative = None
    pages_wired = None
    pages_anonymous = None
    pages_purgeable = None
    pages_compressed = None  # "Pages occupied by compressor"
    pages_uncompressed = None  # "Pages stored in compressor"

    for line in vm_stat_lines:
        page_size_match = PAGE_SIZE_RE.search(line)
        if page_size_match:
            page_size_bytes = int(page_size_match.group(1))
            continue

        pages_free = _update_if_prefix(pages_free, line, "Pages free:")
        pages_active = _update_if_prefix(pages_active, line, "Pages active:")
        pages_inactive = _update_if_prefix(pages_inactive, line, "Pages inactive:")
        pages_speculative = _update_if_prefix(
            pages_speculative, line, "Pages speculative:"
        )
        pages_wired = _update_if_prefix(pages_wired, line, "Pages wired down:")
        pages_anonymous = _update_if_prefix(pages_anonymous, line, "Anonymous pages:")
        pages_purgeable = _update_if_prefix(pages_purgeable, line, "Pages purgeable:")
        pages_compressed = _update_if_prefix(
            pages_compressed, line, "Pages occupied by compressor:"
        )
        pages_uncompressed = _update_if_prefix(
            pages_uncompressed, line, "Pages stored in compressor:"
        )

    if page_size_bytes is None:
        return None
    if pages_free is None:
        return None
    if pages_active is None:
        return None
    if pages_inactive is None:
        return None
    if pages_speculative is None:
        return None
    if pages_wired is None:
        return None
    if pages_anonymous is None:
        return None
    if pages_purgeable is None:
        return None
    if pages_compressed is None:
        return None
    if pages_uncompressed is None:
        return None

    # In experiments, this has added up well to the amount of physical RAM in my machine
    total_ram_pages = (
        pages_free
        + pages_active
        + pages_inactive
        + pages_speculative
        + pages_wired
        + pages_compressed
    )

    # This matches what the Activity Monitor shows in macOS 10.15.6
    #
    # For anonymous - purgeable: https://stackoverflow.com/a/36721309/473672
    #
    # FIXME: We want to add swapped out pages to this as well, since those also
    # represent a want for pages.
    wanted_ram_pages = (
        pages_anonymous - pages_purgeable + pages_wired + pages_compressed
    )

    total_ram_bytes = total_ram_pages * page_size_bytes
    wanted_ram_bytes = wanted_ram_pages * page_size_bytes

    return (total_ram_bytes, wanted_ram_bytes)


text:
package org.kie.server.client.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.core.MediaType;

import org.apache.commons.lang3.StringUtils;
import org.kie.server.api.commands.CommandScript;
import org.kie.server.api.commands.DescriptorCommand;
import org.kie.server.api.model.KieServerCommand;
import org.kie.server.api.model.ServiceResponse;
import org.kie.server.api.rest.RestURI;
import org.kie.server.client.KieServicesConfiguration;
import org.kie.server.client.UIServicesClient;

import static org.kie.server.api.rest.RestURI.*;

public class UIServicesClientImpl extends AbstractKieServicesClientImpl implements UIServicesClient {

    public UIServicesClientImpl(KieServicesConfiguration config) {
        super(config);
    }

    public UIServicesClientImpl(KieServicesConfiguration config, ClassLoader classLoader) {
        super(config, classLoader);
    }

    @Override
    public String getProcessForm(String containerId, String processId, String language) {
        return getProcessFormByType( containerId, processId, language, ANY_FORM );
    }

    @Override
    public String getProcessFormByType(String containerId, String processId, String language, String formType) {
        return getProcessFormByType( containerId, processId, language, formType, true );
    }

    @Override
    public String getProcessRawForm( String containerId, String processId ) {
        return getProcessFormByType( containerId, processId, null, ANY_FORM, false );
    }

    @Override
    public String getProcessForm(String containerId, String processId) {
        return getProcessFormByType( containerId, processId, ANY_FORM );
    }

    @Override
    public String getProcessFormByType(String containerId, String processId, String formType) {
        return getProcessFormByType( containerId, processId, null, formType, true );
    }

    private String getProcessFormByType(String containerId, String processId, String language, String formType, boolean marshallContent ) {
        if( config.isRest() ) {
            Map<String, Object> valuesMap = new HashMap<String, Object>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.PROCESS_ID, processId);

            StringBuffer params = new StringBuffer();

            params.append( "type=" ).append( formType );
            params.append( "&marshallContent=" ).append( marshallContent );
            boolean filter = false;
            if ( !StringUtils.isEmpty( language ) ) {
                params.append( "&lang=" ).append( language );
                filter = true;
            }
            params.append( "&filter=" ).append( filter );

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), FORM_URI + "/" + PROCESS_FORM_GET_URI, valuesMap) + "?" + params.toString() );

        } else {
            CommandScript script = new CommandScript( Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand( "FormService", "getFormDisplayProcess", new Object[]{containerId, processId, StringUtils.defaultString( language ), !StringUtils.isEmpty( language ), formType } )) );
            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand( script, DescriptorCommand.class.getName(), "BPM-UI", containerId ).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }

    @Override
    public String getTaskForm(String containerId, Long taskId, String language) {
        return getTaskFormByType(containerId, taskId, language, ANY_FORM);
    }

    @Override
    public String getTaskFormAsUser(String containerId, Long taskId, String language, String userId) {
        return getTaskFormByTypeAsUser(containerId, taskId, language, ANY_FORM, userId);
    }

    @Override
    public String getTaskFormByType(String containerId, Long taskId, String language, String formType) {
        return getTaskFormByTypeAsUser(containerId, taskId, language, formType, true, null);
    }

    @Override
    public String getTaskFormByTypeAsUser(String containerId, Long taskId, String language, String formType, String userId) {
        return getTaskFormByTypeAsUser(containerId, taskId, language, formType, true, userId);
    }

    private String getTaskFormByTypeAsUser(String containerId, Long taskId, String language, String formType, boolean marshallContent, String userId) {
        if( config.isRest() ) {
            Map<String, Object> valuesMap = new HashMap<>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.TASK_INSTANCE_ID, taskId);

            String userQuery = StringUtils.isEmpty(userId) ? "" : getUserQueryStr(userId);
            StringBuilder params = new StringBuilder(userQuery);
            if (params.length() == 0) {
                params.append("?");
            } else {
                params.append("&");
            }

            params.append( "type=" ).append( formType );
            params.append( "&marshallContent=" ).append( marshallContent );
            boolean filter = false;
            if ( !StringUtils.isEmpty( language ) ) {
                params.append( "&lang=" ).append( language );
                filter = true;
            }
            params.append( "&filter=" ).append( filter );

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), FORM_URI + "/" + TASK_FORM_GET_URI, valuesMap) + params.toString());

        } else {
            CommandScript script = new CommandScript(Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand("FormService", "getFormDisplayTask",
                            new Object[]{containerId, taskId, StringUtils.defaultString(userId),
                                StringUtils.defaultString(language), !StringUtils.isEmpty(language), formType})));

            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand(script, DescriptorCommand.class.getName(), "BPM-UI", containerId).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }

    @Override
    public String getTaskForm(String containerId, Long taskId) {
        return getTaskFormByType(containerId, taskId, ANY_FORM);
    }

    @Override
    public String getTaskFormByType(String containerId, Long taskId, String formType) {
        return getTaskFormByTypeAsUser(containerId, taskId, null, formType, true, null);
    }

    @Override
    public String getTaskRawForm(String containerId, Long taskId) {
        return getTaskFormByTypeAsUser(containerId, taskId, null, ANY_FORM, false, null);
    }

    @Override
    public String getTaskRawFormAsUser(String containerId, Long taskId, String userId) {
        return getTaskFormByTypeAsUser(containerId, taskId, null, ANY_FORM, false, userId);
    }

    @Override
    public String getProcessImage(String containerId, String processId) {
        if( config.isRest() ) {
            Map<String, Object> valuesMap = new HashMap<String, Object>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.PROCESS_ID, processId);

            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", MediaType.APPLICATION_SVG_XML);

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), IMAGE_URI + "/" + PROCESS_IMG_GET_URI, valuesMap), headers);

        } else {
            CommandScript script = new CommandScript( Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand( "ImageService", "getProcessImage", new Object[]{containerId, processId} )) );
            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand( script, DescriptorCommand.class.getName(), "BPM-UI", containerId ).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }

    @Override
    public String getProcessInstanceImage(String containerId, Long processInstanceId) {
        if( config.isRest() ) {
            Map<String, Object> valuesMap = new HashMap<String, Object>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.PROCESS_INST_ID, processInstanceId);

            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", MediaType.APPLICATION_SVG_XML);

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), IMAGE_URI + "/" + PROCESS_INST_IMG_GET_URI, valuesMap), headers);

        } else {
            CommandScript script = new CommandScript( Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand( "ImageService", "getActiveProcessImage", new Object[]{containerId, processInstanceId} )) );
            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand( script, DescriptorCommand.class.getName(), "BPM-UI", containerId ).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }

    protected String createColorURLParams(String completeNodeColor, String completeNodeBorderColor, String activeNodeBorderColor) {
        List<String> params = new ArrayList<>();
        if(completeNodeColor != null && !completeNodeColor.isEmpty()) {
            params.add(RestURI.SVG_NODE_COMPLETED_COLOR + "=" + encode(completeNodeColor));
        }
        if(completeNodeBorderColor != null && !completeNodeBorderColor.isEmpty()) {
            params.add(RestURI.SVG_NODE_COMPLETED_BORDER_COLOR + "=" + encode(completeNodeBorderColor));
        }
        if(activeNodeBorderColor != null && !activeNodeBorderColor.isEmpty()) {
            params.add(RestURI.SVG_NODE_ACTIVE_COLOR + "=" + encode(activeNodeBorderColor));
        }

        return String.join("&", params);
    }

    @Override
    public String getProcessInstanceImageCustomColor(String containerId, Long processInstanceId, String completeNodeColor,
                                                     String completeNodeBorderColor, String activeNodeBorderColor) {
        if (config.isRest()) {
            Map<String, Object> valuesMap = new HashMap<String, Object>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.PROCESS_INST_ID, processInstanceId);

            String colorURLParams = createColorURLParams(completeNodeColor, completeNodeBorderColor, activeNodeBorderColor);

            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", MediaType.APPLICATION_SVG_XML);

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), IMAGE_URI + "/" + PROCESS_INST_IMG_GET_URI + "?" + colorURLParams,
                          valuesMap), headers);
        } else {
            CommandScript script = new CommandScript(Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand("ImageService",
                                                             "getActiveProcessImage",
                                                             new Object[]{
                                                                     containerId,
                                                                     processInstanceId,
                                                                     StringUtils.defaultString(completeNodeColor),
                                                                     StringUtils.defaultString(completeNodeBorderColor),
                                                                     StringUtils.defaultString(activeNodeBorderColor)})));
            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand(script, DescriptorCommand.class.getName(), "BPM-UI", containerId).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }

    @Override
    public String renderProcessForm(String containerId, String processId) {
        return renderProcessForm(containerId, processId, PATTERNFLY_FORM_RENDERER);
    }

    @Override
    public String renderProcessForm(String containerId, String processId, String renderer) {
        if( config.isRest() ) {
            Map<String, Object> valuesMap = new HashMap<String, Object>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.PROCESS_ID, processId);

            StringBuffer params = new StringBuffer();
            if (renderer != null) {
                params.append("?renderer=").append(renderer);
            }

            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", MediaType.TEXT_HTML);

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), FORM_URI + "/" + PROCESS_FORM_CONTENT_GET_URI + params.toString(), valuesMap), headers);

        } else {
            CommandScript script = new CommandScript( Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand( "FormRendererService", "getProcessRenderedForm", new Object[]{renderer, containerId, processId} )) );
            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand( script, DescriptorCommand.class.getName(), "BPM-UI", containerId ).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }

    @Override
    public String renderCaseForm(String containerId, String caseDefinitionId) {
        return renderCaseForm(containerId, caseDefinitionId, PATTERNFLY_FORM_RENDERER);
    }

    @Override
    public String renderCaseForm(String containerId, String caseDefinitionId, String renderer) {
        if( config.isRest() ) {
            Map<String, Object> valuesMap = new HashMap<String, Object>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.CASE_DEF_ID, caseDefinitionId);

            StringBuffer params = new StringBuffer();
            if (renderer != null) {
                params.append("?renderer=").append(renderer);
            }

            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", MediaType.TEXT_HTML);

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), FORM_URI + "/" + CASE_FORM_CONTENT_GET_URI + params.toString(), valuesMap), headers);

        } else {
            CommandScript script = new CommandScript( Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand( "FormRendererService", "getCaseRenderedForm", new Object[]{renderer, containerId, caseDefinitionId} )) );
            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand( script, DescriptorCommand.class.getName(), "BPM-UI", containerId ).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }

    @Override
    public String renderTaskForm(String containerId, Long taskId) {
        return renderTaskForm(containerId, taskId, PATTERNFLY_FORM_RENDERER);
    }

    @Override
    public String renderTaskForm(String containerId, Long taskId, String renderer) {
        if( config.isRest() ) {
            Map<String, Object> valuesMap = new HashMap<String, Object>();
            valuesMap.put(RestURI.CONTAINER_ID, containerId);
            valuesMap.put(RestURI.TASK_INSTANCE_ID, taskId);

            StringBuffer params = new StringBuffer();
            if (renderer != null) {
                params.append("?renderer=").append(renderer);
            }

            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", MediaType.TEXT_HTML);

            return makeHttpGetRequestAndCreateRawResponse(
                    build(loadBalancer.getUrl(), FORM_URI + "/" + TASK_FORM_CONTENT_GET_URI + params.toString(), valuesMap), headers);

        } else {
            CommandScript script = new CommandScript( Collections.singletonList(
                    (KieServerCommand) new DescriptorCommand( "FormRendererService", "getTaskRenderedForm", new Object[]{renderer, containerId, taskId} )) );
            ServiceResponse<String> response = (ServiceResponse<String>) executeJmsCommand( script, DescriptorCommand.class.getName(), "BPM-UI", containerId ).getResponses().get(0);

            throwExceptionOnFailure(response);
            if (shouldReturnWithNullResponse(response)) {
                return null;
            }
            return response.getResult();
        }
    }
}