browser/base/content/browser.css

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

michael@0 1 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 4
michael@0 5 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
michael@0 6 @namespace html url("http://www.w3.org/1999/xhtml");
michael@0 7 @namespace svg url("http://www.w3.org/2000/svg");
michael@0 8
michael@0 9 #main-window:not([chromehidden~="toolbar"]) {
michael@0 10 %ifdef XP_MACOSX
michael@0 11 min-width: 335px;
michael@0 12 %else
michael@0 13 min-width: 300px;
michael@0 14 %endif
michael@0 15 }
michael@0 16
michael@0 17 #main-window[customize-entered] {
michael@0 18 min-width: -moz-fit-content;
michael@0 19 }
michael@0 20
michael@0 21 searchbar {
michael@0 22 -moz-binding: url("chrome://browser/content/search/search.xml#searchbar");
michael@0 23 }
michael@0 24
michael@0 25 .browserStack > browser[remote="true"] {
michael@0 26 -moz-binding: url("chrome://global/content/bindings/remote-browser.xml#remote-browser");
michael@0 27 }
michael@0 28
michael@0 29 toolbar[customizable="true"] {
michael@0 30 -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar");
michael@0 31 }
michael@0 32
michael@0 33 %ifdef XP_MACOSX
michael@0 34 #toolbar-menubar {
michael@0 35 -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-menubar-stub");
michael@0 36 }
michael@0 37
michael@0 38 toolbar[customizable="true"]:not([nowindowdrag="true"]) {
michael@0 39 -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
michael@0 40 }
michael@0 41 %endif
michael@0 42
michael@0 43 #toolbar-menubar[autohide="true"] {
michael@0 44 -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-menubar-autohide");
michael@0 45 }
michael@0 46
michael@0 47 #addon-bar {
michael@0 48 -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#addonbar-delegating");
michael@0 49 visibility: visible;
michael@0 50 margin: 0;
michael@0 51 height: 0 !important;
michael@0 52 overflow: hidden;
michael@0 53 padding: 0;
michael@0 54 border: 0 none;
michael@0 55 }
michael@0 56
michael@0 57 #addonbar-closebutton {
michael@0 58 visibility: visible;
michael@0 59 height: 0 !important;
michael@0 60 }
michael@0 61
michael@0 62 #status-bar {
michael@0 63 height: 0 !important;
michael@0 64 -moz-binding: none;
michael@0 65 padding: 0;
michael@0 66 margin: 0;
michael@0 67 }
michael@0 68
michael@0 69 panelmultiview {
michael@0 70 -moz-binding: url("chrome://browser/content/customizableui/panelUI.xml#panelmultiview");
michael@0 71 }
michael@0 72
michael@0 73 panelview {
michael@0 74 -moz-binding: url("chrome://browser/content/customizableui/panelUI.xml#panelview");
michael@0 75 -moz-box-orient: vertical;
michael@0 76 }
michael@0 77
michael@0 78 .panel-mainview {
michael@0 79 transition: transform 150ms;
michael@0 80 }
michael@0 81
michael@0 82 panelview:not([mainview]):not([current]) {
michael@0 83 display: none;
michael@0 84 }
michael@0 85
michael@0 86 tabbrowser {
michael@0 87 -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser");
michael@0 88 }
michael@0 89
michael@0 90 .tabbrowser-tabs {
michael@0 91 -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-tabs");
michael@0 92 }
michael@0 93
michael@0 94 #tabbrowser-tabs:not([overflow="true"]) ~ #alltabs-button,
michael@0 95 #tabbrowser-tabs:not([overflow="true"]) + #new-tab-button,
michael@0 96 #tabbrowser-tabs[overflow="true"] > .tabbrowser-arrowscrollbox > .tabs-newtab-button,
michael@0 97 #TabsToolbar[currentset]:not([currentset*="tabbrowser-tabs,new-tab-button"]) > #tabbrowser-tabs > .tabbrowser-arrowscrollbox > .tabs-newtab-button,
michael@0 98 #TabsToolbar[customizing="true"] > #tabbrowser-tabs > .tabbrowser-arrowscrollbox > .tabs-newtab-button {
michael@0 99 visibility: collapse;
michael@0 100 }
michael@0 101
michael@0 102 #tabbrowser-tabs:not([overflow="true"])[using-closing-tabs-spacer] ~ #alltabs-button {
michael@0 103 visibility: hidden; /* temporary space to keep a tab's close button under the cursor */
michael@0 104 }
michael@0 105
michael@0 106 .tabbrowser-tab {
michael@0 107 -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-tab");
michael@0 108 }
michael@0 109
michael@0 110 .tabbrowser-tab:not([pinned]) {
michael@0 111 -moz-box-flex: 100;
michael@0 112 max-width: 210px;
michael@0 113 min-width: 100px;
michael@0 114 width: 0;
michael@0 115 transition: min-width 200ms ease-out,
michael@0 116 max-width 230ms ease-out;
michael@0 117 }
michael@0 118
michael@0 119 .tabbrowser-tab:not([pinned]):not([fadein]) {
michael@0 120 max-width: 0.1px;
michael@0 121 min-width: 0.1px;
michael@0 122 visibility: hidden;
michael@0 123 }
michael@0 124
michael@0 125 .tab-close-button,
michael@0 126 .tab-background {
michael@0 127 /* Explicitly set the visibility to override the value (collapsed)
michael@0 128 * we inherit from #TabsToolbar[collapsed] upon opening a browser window. */
michael@0 129 visibility: visible;
michael@0 130 }
michael@0 131
michael@0 132 .tab-close-button[fadein],
michael@0 133 .tab-background[fadein] {
michael@0 134 /* This transition is only wanted for opening tabs. */
michael@0 135 transition: visibility 0ms 25ms;
michael@0 136 }
michael@0 137
michael@0 138 .tab-close-button:not([fadein]),
michael@0 139 .tab-background:not([fadein]) {
michael@0 140 visibility: hidden;
michael@0 141 }
michael@0 142
michael@0 143 .tab-label:not([fadein]),
michael@0 144 .tab-throbber:not([fadein]),
michael@0 145 .tab-icon-image:not([fadein]) {
michael@0 146 display: none;
michael@0 147 }
michael@0 148
michael@0 149 .tabbrowser-tabs[positionpinnedtabs] > .tabbrowser-tab[pinned] {
michael@0 150 position: fixed !important;
michael@0 151 display: block; /* position:fixed already does this (bug 579776), but let's be explicit */
michael@0 152 }
michael@0 153
michael@0 154 .tabbrowser-tabs[movingtab] > .tabbrowser-tab[selected] {
michael@0 155 position: relative;
michael@0 156 z-index: 2;
michael@0 157 pointer-events: none; /* avoid blocking dragover events on scroll buttons */
michael@0 158 }
michael@0 159
michael@0 160 .tabbrowser-tabs[movingtab] > .tabbrowser-tab[fadein]:not([selected]) {
michael@0 161 transition: transform 200ms ease-out;
michael@0 162 }
michael@0 163
michael@0 164 #alltabs-popup {
michael@0 165 -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-alltabs-popup");
michael@0 166 }
michael@0 167
michael@0 168 toolbar[printpreview="true"] {
michael@0 169 -moz-binding: url("chrome://global/content/printPreviewBindings.xml#printpreviewtoolbar");
michael@0 170 }
michael@0 171
michael@0 172 toolbar[overflowable] > .customization-target {
michael@0 173 overflow: hidden;
michael@0 174 }
michael@0 175
michael@0 176 toolbar:not([overflowing]) > .overflow-button,
michael@0 177 toolbar[customizing] > .overflow-button {
michael@0 178 display: none;
michael@0 179 }
michael@0 180
michael@0 181 %ifdef CAN_DRAW_IN_TITLEBAR
michael@0 182 #main-window:not([chromemargin]) > #titlebar,
michael@0 183 #main-window[inFullscreen] > #titlebar,
michael@0 184 #main-window[inFullscreen] .titlebar-placeholder,
michael@0 185 #main-window:not([tabsintitlebar]) .titlebar-placeholder {
michael@0 186 display: none;
michael@0 187 }
michael@0 188
michael@0 189 #titlebar {
michael@0 190 -moz-binding: url("chrome://global/content/bindings/general.xml#windowdragbox");
michael@0 191 }
michael@0 192
michael@0 193 #titlebar-spacer {
michael@0 194 pointer-events: none;
michael@0 195 }
michael@0 196
michael@0 197 #main-window[tabsintitlebar] #titlebar-buttonbox {
michael@0 198 position: relative;
michael@0 199 }
michael@0 200
michael@0 201 #titlebar-buttonbox {
michael@0 202 -moz-appearance: -moz-window-button-box;
michael@0 203 }
michael@0 204
michael@0 205 %ifdef XP_MACOSX
michael@0 206 #titlebar-fullscreen-button {
michael@0 207 -moz-appearance: -moz-mac-fullscreen-button;
michael@0 208 }
michael@0 209
michael@0 210 /* Because these buttons don't move, they should always be aligned the same,
michael@0 211 * left and right were deprecated, so we have to do work to get it to mean that: */
michael@0 212 #titlebar-buttonbox-container:-moz-locale-dir(ltr) {
michael@0 213 -moz-box-align: start;
michael@0 214 }
michael@0 215
michael@0 216 #titlebar-buttonbox-container:-moz-locale-dir(rtl) {
michael@0 217 -moz-box-align: end;
michael@0 218 }
michael@0 219
michael@0 220 /* Fullscreen and caption buttons don't move with RTL on OS X so override the automatic ordering. */
michael@0 221 #titlebar-secondary-buttonbox:-moz-locale-dir(ltr),
michael@0 222 #titlebar-buttonbox-container:-moz-locale-dir(rtl),
michael@0 223 .titlebar-placeholder[type="fullscreen-button"]:-moz-locale-dir(ltr),
michael@0 224 .titlebar-placeholder[type="caption-buttons"]:-moz-locale-dir(rtl) {
michael@0 225 -moz-box-ordinal-group: 1000;
michael@0 226 }
michael@0 227
michael@0 228 #titlebar-secondary-buttonbox:-moz-locale-dir(rtl),
michael@0 229 #titlebar-buttonbox-container:-moz-locale-dir(ltr),
michael@0 230 .titlebar-placeholder[type="caption-buttons"]:-moz-locale-dir(ltr),
michael@0 231 .titlebar-placeholder[type="fullscreen-button"]:-moz-locale-dir(rtl) {
michael@0 232 -moz-box-ordinal-group: 0;
michael@0 233 }
michael@0 234 %else
michael@0 235 /* On non-OSX, these should be start-aligned */
michael@0 236 #titlebar-buttonbox-container {
michael@0 237 -moz-box-align: start;
michael@0 238 }
michael@0 239 %endif
michael@0 240
michael@0 241 %if !defined(MOZ_WIDGET_GTK) && !defined(MOZ_WIDGET_QT)
michael@0 242 #TabsToolbar > .private-browsing-indicator {
michael@0 243 -moz-box-ordinal-group: 1000;
michael@0 244 }
michael@0 245 %endif
michael@0 246
michael@0 247 %ifdef XP_WIN
michael@0 248 #main-window[sizemode="maximized"] #titlebar-buttonbox {
michael@0 249 -moz-appearance: -moz-window-button-box-maximized;
michael@0 250 }
michael@0 251 %endif
michael@0 252
michael@0 253 %endif
michael@0 254
michael@0 255 /* Rules to help integrate SDK widgets */
michael@0 256 toolbaritem[sdkstylewidget="true"] > toolbarbutton,
michael@0 257 toolbarpaletteitem > toolbaritem[sdkstylewidget="true"] > iframe,
michael@0 258 toolbarpaletteitem > toolbaritem[sdkstylewidget="true"] > .toolbarbutton-text {
michael@0 259 display: none;
michael@0 260 }
michael@0 261
michael@0 262 toolbarpaletteitem:-moz-any([place="palette"], [place="panel"]) > toolbaritem[sdkstylewidget="true"] > toolbarbutton {
michael@0 263 display: -moz-box;
michael@0 264 }
michael@0 265
michael@0 266 toolbarpaletteitem > toolbaritem[sdkstylewidget="true"][cui-areatype="toolbar"] > .toolbarbutton-text {
michael@0 267 display: -moz-box;
michael@0 268 }
michael@0 269
michael@0 270 toolbarpaletteitem[removable="false"] {
michael@0 271 opacity: 0.5;
michael@0 272 cursor: default;
michael@0 273 }
michael@0 274
michael@0 275 #bookmarks-toolbar-placeholder,
michael@0 276 toolbarpaletteitem > #personal-bookmarks > #PlacesToolbar,
michael@0 277 #personal-bookmarks[cui-areatype="menu-panel"] > #PlacesToolbar,
michael@0 278 #personal-bookmarks[cui-areatype="toolbar"][overflowedItem=true] > #PlacesToolbar {
michael@0 279 display: none;
michael@0 280 }
michael@0 281
michael@0 282 #PlacesToolbarDropIndicatorHolder {
michael@0 283 position: absolute;
michael@0 284 top: 25%;
michael@0 285 }
michael@0 286
michael@0 287 toolbarpaletteitem > #personal-bookmarks > #bookmarks-toolbar-placeholder,
michael@0 288 #personal-bookmarks[cui-areatype="menu-panel"] > #bookmarks-toolbar-placeholder,
michael@0 289 #personal-bookmarks[cui-areatype="toolbar"][overflowedItem=true] > #bookmarks-toolbar-placeholder {
michael@0 290 display: -moz-box;
michael@0 291 }
michael@0 292
michael@0 293 toolbar:not(#TabsToolbar) > #wrapper-personal-bookmarks,
michael@0 294 toolbar:not(#TabsToolbar) > #personal-bookmarks {
michael@0 295 -moz-box-flex: 1;
michael@0 296 }
michael@0 297
michael@0 298 #zoom-controls[cui-areatype="toolbar"]:not([overflowedItem=true]) > #zoom-reset-button > .toolbarbutton-text {
michael@0 299 display: -moz-box;
michael@0 300 }
michael@0 301
michael@0 302 #urlbar-reload-button:not([displaystop]) + #urlbar-stop-button,
michael@0 303 #urlbar-reload-button[displaystop] {
michael@0 304 visibility: collapse;
michael@0 305 }
michael@0 306
michael@0 307 #PanelUI-feeds > .feed-toolbarbutton:-moz-locale-dir(rtl) {
michael@0 308 direction: rtl;
michael@0 309 }
michael@0 310
michael@0 311 #panelMenu_bookmarksMenu > .bookmark-item {
michael@0 312 max-width: none;
michael@0 313 }
michael@0 314
michael@0 315 #urlbar-container {
michael@0 316 min-width: 50ch;
michael@0 317 }
michael@0 318
michael@0 319 #search-container {
michael@0 320 min-width: 25ch;
michael@0 321 }
michael@0 322
michael@0 323 #urlbar,
michael@0 324 .searchbar-textbox {
michael@0 325 /* Setting a width and min-width to let the location & search bars maintain
michael@0 326 a constant width in case they haven't be resized manually. (bug 965772) */
michael@0 327 width: 1px;
michael@0 328 min-width: 1px;
michael@0 329 }
michael@0 330
michael@0 331 #main-window:-moz-lwtheme {
michael@0 332 background-repeat: no-repeat;
michael@0 333 background-position: top right;
michael@0 334 }
michael@0 335
michael@0 336 %ifdef XP_MACOSX
michael@0 337 #main-window[inFullscreen="true"] {
michael@0 338 padding-top: 0; /* override drawintitlebar="true" */
michael@0 339 }
michael@0 340 %endif
michael@0 341
michael@0 342 #browser-bottombox[lwthemefooter="true"] {
michael@0 343 background-repeat: no-repeat;
michael@0 344 background-position: bottom left;
michael@0 345 }
michael@0 346
michael@0 347 .menuitem-tooltip {
michael@0 348 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#menuitem-tooltip");
michael@0 349 }
michael@0 350
michael@0 351 .menuitem-iconic-tooltip,
michael@0 352 .menuitem-tooltip[type="checkbox"],
michael@0 353 .menuitem-tooltip[type="radio"] {
michael@0 354 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#menuitem-iconic-tooltip");
michael@0 355 }
michael@0 356
michael@0 357 /* Hide menu elements intended for keyboard access support */
michael@0 358 #main-menubar[openedwithkey=false] .show-only-for-keyboard {
michael@0 359 display: none;
michael@0 360 }
michael@0 361
michael@0 362 /* ::::: location bar ::::: */
michael@0 363 #urlbar {
michael@0 364 -moz-binding: url(chrome://browser/content/urlbarBindings.xml#urlbar);
michael@0 365 }
michael@0 366
michael@0 367 .ac-url-text:-moz-locale-dir(rtl),
michael@0 368 .ac-title:-moz-locale-dir(rtl) > description {
michael@0 369 direction: ltr !important;
michael@0 370 }
michael@0 371
michael@0 372 /* For results that are actions, their description text is shown instead of
michael@0 373 the URL - this needs to follow the locale's direction, unlike URLs. */
michael@0 374 panel:not([noactions]) > richlistbox > richlistitem[type~="action"]:-moz-locale-dir(rtl) > .ac-url-box {
michael@0 375 direction: rtl;
michael@0 376 }
michael@0 377
michael@0 378 panel[noactions] > richlistbox > richlistitem[type~="action"] > .ac-url-box > .ac-url > .ac-action-text,
michael@0 379 panel[noactions] > richlistbox > richlistitem[type~="action"] > .ac-url-box > .ac-action-icon {
michael@0 380 visibility: collapse;
michael@0 381 }
michael@0 382
michael@0 383 panel[noactions] > richlistbox > richlistitem[type~="action"] > .ac-url-box > .ac-url > .ac-url-text {
michael@0 384 visibility: visible;
michael@0 385 }
michael@0 386
michael@0 387 #urlbar:not([actiontype]) > #urlbar-display-box {
michael@0 388 display: none;
michael@0 389 }
michael@0 390
michael@0 391 #PopupAutoComplete {
michael@0 392 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#browser-autocomplete-result-popup");
michael@0 393 }
michael@0 394
michael@0 395 #PopupAutoCompleteRichResult {
michael@0 396 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#urlbar-rich-result-popup");
michael@0 397 }
michael@0 398
michael@0 399 #urlbar[pageproxystate="invalid"] > #urlbar-icons > .urlbar-icon,
michael@0 400 #urlbar[pageproxystate="invalid"][focused="true"] > #urlbar-go-button ~ toolbarbutton,
michael@0 401 #urlbar[pageproxystate="valid"] > #urlbar-go-button,
michael@0 402 #urlbar:not([focused="true"]) > #urlbar-go-button {
michael@0 403 visibility: collapse;
michael@0 404 }
michael@0 405
michael@0 406 #urlbar[pageproxystate="invalid"] > #identity-box > #identity-icon-labels {
michael@0 407 visibility: collapse;
michael@0 408 }
michael@0 409
michael@0 410 #urlbar[pageproxystate="invalid"] > #identity-box {
michael@0 411 pointer-events: none;
michael@0 412 }
michael@0 413
michael@0 414 #identity-icon-labels {
michael@0 415 max-width: 18em;
michael@0 416 }
michael@0 417 @media (max-width: 700px) {
michael@0 418 #urlbar-container {
michael@0 419 min-width: 45ch;
michael@0 420 }
michael@0 421 #identity-icon-labels {
michael@0 422 max-width: 70px;
michael@0 423 }
michael@0 424 }
michael@0 425 @media (max-width: 600px) {
michael@0 426 #urlbar-container {
michael@0 427 min-width: 40ch;
michael@0 428 }
michael@0 429 #identity-icon-labels {
michael@0 430 max-width: 60px;
michael@0 431 }
michael@0 432 }
michael@0 433 @media (max-width: 500px) {
michael@0 434 #urlbar-container {
michael@0 435 min-width: 35ch;
michael@0 436 }
michael@0 437 #identity-icon-labels {
michael@0 438 max-width: 50px;
michael@0 439 }
michael@0 440 }
michael@0 441 @media (max-width: 400px) {
michael@0 442 #urlbar-container {
michael@0 443 min-width: 28ch;
michael@0 444 }
michael@0 445 #identity-icon-labels {
michael@0 446 max-width: 40px;
michael@0 447 }
michael@0 448 }
michael@0 449
michael@0 450 #identity-icon-country-label {
michael@0 451 direction: ltr;
michael@0 452 }
michael@0 453
michael@0 454 #identity-box.verifiedIdentity > #identity-icon-labels > #identity-icon-label {
michael@0 455 -moz-margin-end: 0.25em !important;
michael@0 456 }
michael@0 457
michael@0 458 #main-window[customizing] :-moz-any(#urlbar, .searchbar-textbox) > .autocomplete-textbox-container > .textbox-input-box {
michael@0 459 visibility: hidden;
michael@0 460 }
michael@0 461
michael@0 462 /* ::::: Unified Back-/Forward Button ::::: */
michael@0 463 #back-button > .toolbarbutton-menu-dropmarker,
michael@0 464 #forward-button > .toolbarbutton-menu-dropmarker {
michael@0 465 display: none;
michael@0 466 }
michael@0 467 .unified-nav-current {
michael@0 468 font-weight: bold;
michael@0 469 }
michael@0 470
michael@0 471 toolbarbutton.bookmark-item {
michael@0 472 max-width: 13em;
michael@0 473 }
michael@0 474
michael@0 475 #editBMPanel_tagsSelector {
michael@0 476 /* override default listbox width from xul.css */
michael@0 477 width: auto;
michael@0 478 }
michael@0 479
michael@0 480 /* The star doesn't make sense as text */
michael@0 481 toolbar[mode="text"] #bookmarks-menu-button > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
michael@0 482 display: -moz-box !important;
michael@0 483 }
michael@0 484 toolbar[mode="text"] #bookmarks-menu-button > .toolbarbutton-menubutton-button > .toolbarbutton-text,
michael@0 485 toolbar[mode="full"] #bookmarks-menu-button.bookmark-item > .toolbarbutton-menubutton-button > .toolbarbutton-text {
michael@0 486 display: none;
michael@0 487 }
michael@0 488
michael@0 489 menupopup[emptyplacesresult="true"] > .hide-if-empty-places-result {
michael@0 490 display: none;
michael@0 491 }
michael@0 492
michael@0 493 menuitem.spell-suggestion {
michael@0 494 font-weight: bold;
michael@0 495 }
michael@0 496
michael@0 497 /* apply Fitts' law to the notification bar's close button */
michael@0 498 window[sizemode="maximized"] #content .notification-inner {
michael@0 499 border-right: 0px !important;
michael@0 500 }
michael@0 501
michael@0 502 /* Hide extension toolbars that neglected to set the proper class */
michael@0 503 window[chromehidden~="location"][chromehidden~="toolbar"] toolbar:not(.chromeclass-menubar),
michael@0 504 window[chromehidden~="toolbar"] toolbar:not(.toolbar-primary):not(.chromeclass-menubar) {
michael@0 505 display: none;
michael@0 506 }
michael@0 507
michael@0 508 #navigator-toolbox ,
michael@0 509 #mainPopupSet {
michael@0 510 min-width: 1px;
michael@0 511 }
michael@0 512
michael@0 513 %ifdef MOZ_SERVICES_SYNC
michael@0 514 /* Sync notification UI */
michael@0 515 #sync-notifications {
michael@0 516 -moz-binding: url("chrome://browser/content/sync/notification.xml#notificationbox");
michael@0 517 overflow-y: visible !important;
michael@0 518 }
michael@0 519
michael@0 520 #sync-notifications notification {
michael@0 521 -moz-binding: url("chrome://browser/content/sync/notification.xml#notification");
michael@0 522 }
michael@0 523 %endif
michael@0 524
michael@0 525 /* History Swipe Animation */
michael@0 526
michael@0 527 #historySwipeAnimationContainer {
michael@0 528 overflow: hidden;
michael@0 529 }
michael@0 530
michael@0 531 #historySwipeAnimationPreviousPage,
michael@0 532 #historySwipeAnimationCurrentPage,
michael@0 533 #historySwipeAnimationNextPage {
michael@0 534 background: none top left no-repeat white;
michael@0 535 }
michael@0 536
michael@0 537 #historySwipeAnimationPreviousPage {
michael@0 538 background-image: -moz-element(#historySwipeAnimationPreviousPageSnapshot);
michael@0 539 }
michael@0 540
michael@0 541 #historySwipeAnimationCurrentPage {
michael@0 542 background-image: -moz-element(#historySwipeAnimationCurrentPageSnapshot);
michael@0 543 }
michael@0 544
michael@0 545 #historySwipeAnimationNextPage {
michael@0 546 background-image: -moz-element(#historySwipeAnimationNextPageSnapshot);
michael@0 547 }
michael@0 548
michael@0 549 /* Identity UI */
michael@0 550 #identity-popup-content-box:not(.chromeUI) > #identity-popup-brandName,
michael@0 551 #identity-popup-content-box:not(.chromeUI) > #identity-popup-chromeLabel,
michael@0 552 #identity-popup-content-box.chromeUI > .identity-popup-label:not(#identity-popup-brandName):not(#identity-popup-chromeLabel),
michael@0 553 #identity-popup-content-box.chromeUI > .identity-popup-description,
michael@0 554 #identity-popup.chromeUI > #identity-popup-button-container,
michael@0 555 #identity-popup-content-box.unknownIdentity > #identity-popup-connectedToLabel ,
michael@0 556 #identity-popup-content-box.unknownIdentity > #identity-popup-runByLabel ,
michael@0 557 #identity-popup-content-box.unknownIdentity > #identity-popup-content-host ,
michael@0 558 #identity-popup-content-box.unknownIdentity > #identity-popup-content-owner ,
michael@0 559 #identity-popup-content-box.verifiedIdentity > #identity-popup-connectedToLabel2 ,
michael@0 560 #identity-popup-content-box.verifiedDomain > #identity-popup-connectedToLabel2 {
michael@0 561 display: none;
michael@0 562 }
michael@0 563
michael@0 564 /* Full Screen UI */
michael@0 565
michael@0 566 #fullscr-toggler {
michael@0 567 height: 1px;
michael@0 568 background: black;
michael@0 569 }
michael@0 570
michael@0 571 #full-screen-warning-container {
michael@0 572 position: fixed;
michael@0 573 top: 0;
michael@0 574 left: 0;
michael@0 575 width: 100%;
michael@0 576 height: 100%;
michael@0 577 z-index: 2147483647 !important;
michael@0 578 }
michael@0 579
michael@0 580 #full-screen-warning-container[fade-warning-out] {
michael@0 581 transition-property: opacity !important;
michael@0 582 transition-duration: 500ms !important;
michael@0 583 opacity: 0.0;
michael@0 584 }
michael@0 585
michael@0 586 /* When the modal fullscreen approval UI is showing, don't allow interaction
michael@0 587 with the page, but when we're just showing the warning upon entering
michael@0 588 fullscreen on an already approved page, do allow interaction with the page.
michael@0 589 */
michael@0 590 #full-screen-warning-container:not([obscure-browser]) {
michael@0 591 pointer-events: none;
michael@0 592 }
michael@0 593
michael@0 594 #full-screen-warning-message {
michael@0 595 /* We must specify a max-width, otherwise word-wrap:break-word doesn't
michael@0 596 work in descendant <description> and <label> elements. Bug 630864. */
michael@0 597 max-width: 800px;
michael@0 598 }
michael@0 599
michael@0 600 #full-screen-domain-text,
michael@0 601 #full-screen-remember-decision > .checkbox-label-box > .checkbox-label {
michael@0 602 word-wrap: break-word;
michael@0 603 /* We must specify a min-width, otherwise word-wrap:break-word doesn't work. Bug 630864. */
michael@0 604 min-width: 1px;
michael@0 605 }
michael@0 606
michael@0 607 /* ::::: Ctrl-Tab Panel ::::: */
michael@0 608
michael@0 609 .ctrlTab-preview > html|img,
michael@0 610 .ctrlTab-preview > html|canvas {
michael@0 611 min-width: inherit;
michael@0 612 max-width: inherit;
michael@0 613 min-height: inherit;
michael@0 614 max-height: inherit;
michael@0 615 }
michael@0 616
michael@0 617 .ctrlTab-favicon-container {
michael@0 618 -moz-box-align: start;
michael@0 619 %ifdef XP_MACOSX
michael@0 620 -moz-box-pack: end;
michael@0 621 %else
michael@0 622 -moz-box-pack: start;
michael@0 623 %endif
michael@0 624 }
michael@0 625
michael@0 626 .ctrlTab-favicon {
michael@0 627 width: 16px;
michael@0 628 height: 16px;
michael@0 629 }
michael@0 630
michael@0 631 .ctrlTab-preview {
michael@0 632 -moz-binding: url("chrome://browser/content/browser-tabPreviews.xml#ctrlTab-preview");
michael@0 633 }
michael@0 634
michael@0 635
michael@0 636 /* notification anchors should only be visible when their associated
michael@0 637 notifications are */
michael@0 638 .notification-anchor-icon {
michael@0 639 -moz-user-focus: normal;
michael@0 640 }
michael@0 641
michael@0 642 .notification-anchor-icon:not([showing]) {
michael@0 643 display: none;
michael@0 644 }
michael@0 645
michael@0 646 #notification-popup .text-link.custom-link {
michael@0 647 -moz-binding: url("chrome://global/content/bindings/text.xml#text-label");
michael@0 648 text-decoration: none;
michael@0 649 }
michael@0 650
michael@0 651 #invalid-form-popup > description {
michael@0 652 max-width: 280px;
michael@0 653 }
michael@0 654
michael@0 655 #addon-progress-notification {
michael@0 656 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#addon-progress-notification");
michael@0 657 }
michael@0 658
michael@0 659 #identity-request-notification {
michael@0 660 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#identity-request-notification");
michael@0 661 }
michael@0 662
michael@0 663 #click-to-play-plugins-notification {
michael@0 664 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#click-to-play-plugins-notification");
michael@0 665 }
michael@0 666
michael@0 667 .plugin-popupnotification-centeritem {
michael@0 668 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#plugin-popupnotification-center-item");
michael@0 669 }
michael@0 670
michael@0 671 browser[tabmodalPromptShowing] {
michael@0 672 -moz-user-focus: none !important;
michael@0 673 }
michael@0 674
michael@0 675 /* Status panel */
michael@0 676
michael@0 677 statuspanel {
michael@0 678 -moz-binding: url("chrome://browser/content/tabbrowser.xml#statuspanel");
michael@0 679 position: fixed;
michael@0 680 margin-top: -3em;
michael@0 681 max-width: calc(100% - 5px);
michael@0 682 pointer-events: none;
michael@0 683 }
michael@0 684
michael@0 685 statuspanel:-moz-locale-dir(ltr)[mirror],
michael@0 686 statuspanel:-moz-locale-dir(rtl):not([mirror]) {
michael@0 687 left: auto;
michael@0 688 right: 0;
michael@0 689 }
michael@0 690
michael@0 691 statuspanel[sizelimit] {
michael@0 692 max-width: 50%;
michael@0 693 }
michael@0 694
michael@0 695 statuspanel[type=status] {
michael@0 696 min-width: 23em;
michael@0 697 }
michael@0 698
michael@0 699 @media all and (max-width: 800px) {
michael@0 700 statuspanel[type=status] {
michael@0 701 min-width: 33%;
michael@0 702 }
michael@0 703 }
michael@0 704
michael@0 705 statuspanel[type=overLink] {
michael@0 706 transition: opacity 120ms ease-out;
michael@0 707 direction: ltr;
michael@0 708 }
michael@0 709
michael@0 710 statuspanel[inactive] {
michael@0 711 transition: none;
michael@0 712 opacity: 0;
michael@0 713 }
michael@0 714
michael@0 715 statuspanel[inactive][previoustype=overLink] {
michael@0 716 transition: opacity 200ms ease-out;
michael@0 717 }
michael@0 718
michael@0 719 .statuspanel-inner {
michael@0 720 height: 3em;
michael@0 721 width: 100%;
michael@0 722 -moz-box-align: end;
michael@0 723 }
michael@0 724
michael@0 725 .panel-inner-arrowcontentfooter[footertype="promobox"] {
michael@0 726 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#promobox");
michael@0 727 }
michael@0 728
michael@0 729 /* tabview menus */
michael@0 730 .tabview-menuitem {
michael@0 731 max-width: 32em;
michael@0 732 }
michael@0 733
michael@0 734 /* highlighter */
michael@0 735 %include highlighter.css
michael@0 736
michael@0 737 /* gcli */
michael@0 738
michael@0 739 html|*#gcli-tooltip-frame,
michael@0 740 html|*#gcli-output-frame,
michael@0 741 #gcli-output,
michael@0 742 #gcli-tooltip {
michael@0 743 overflow-x: hidden;
michael@0 744 }
michael@0 745
michael@0 746 .gclitoolbar-input-node,
michael@0 747 .gclitoolbar-complete-node {
michael@0 748 direction: ltr;
michael@0 749 }
michael@0 750
michael@0 751 #developer-toolbar-toolbox-button[error-count] > .toolbarbutton-icon {
michael@0 752 display: none;
michael@0 753 }
michael@0 754
michael@0 755 #developer-toolbar-toolbox-button[error-count]:before {
michael@0 756 content: attr(error-count);
michael@0 757 display: -moz-box;
michael@0 758 -moz-box-pack: center;
michael@0 759 }
michael@0 760
michael@0 761 /* Responsive Mode */
michael@0 762
michael@0 763 .browserContainer[responsivemode] {
michael@0 764 overflow: auto;
michael@0 765 }
michael@0 766
michael@0 767 .devtools-responsiveui-toolbar:-moz-locale-dir(rtl) {
michael@0 768 -moz-box-pack: end;
michael@0 769 }
michael@0 770
michael@0 771 .browserStack[responsivemode] {
michael@0 772 transition-duration: 200ms;
michael@0 773 transition-timing-function: linear;
michael@0 774 }
michael@0 775
michael@0 776 .browserStack[responsivemode] {
michael@0 777 transition-property: min-width, max-width, min-height, max-height;
michael@0 778 }
michael@0 779
michael@0 780 .browserStack[responsivemode][notransition] {
michael@0 781 transition: none;
michael@0 782 }
michael@0 783
michael@0 784 .toolbarbutton-badge[badge]:not([badge=""])::after {
michael@0 785 content: attr(badge);
michael@0 786 }
michael@0 787
michael@0 788 toolbarbutton[type="badged"] {
michael@0 789 -moz-binding: url("chrome://browser/content/urlbarBindings.xml#toolbarbutton-badged");
michael@0 790 }
michael@0 791
michael@0 792 toolbarbutton[type="socialmark"] {
michael@0 793 -moz-binding: url("chrome://browser/content/socialmarks.xml#toolbarbutton-marks");
michael@0 794 }
michael@0 795
michael@0 796 toolbarbutton[type="badged"] > .toolbarbutton-badge-container > .toolbarbutton-icon,
michael@0 797 toolbarbutton[type="socialmark"] > .toolbarbutton-icon {
michael@0 798 max-width: 16px;
michael@0 799 }
michael@0 800 toolbarpaletteitem[place="palette"] > toolbarbutton[type="badged"] > .toolbarbutton-badge-container > .toolbarbutton-icon {
michael@0 801 max-width: 32px;
michael@0 802 }
michael@0 803
michael@0 804 panelview > .social-panel-frame {
michael@0 805 width: auto;
michael@0 806 height: auto;
michael@0 807 }
michael@0 808
michael@0 809 /* Translation */
michael@0 810 notification[value="translation"] {
michael@0 811 -moz-binding: url("chrome://browser/content/translation-infobar.xml#translationbar");
michael@0 812 }
michael@0 813
michael@0 814 /* Social */
michael@0 815 /* Note the chatbox 'width' values are duplicated in socialchat.xml */
michael@0 816 chatbox {
michael@0 817 -moz-binding: url("chrome://browser/content/socialchat.xml#chatbox");
michael@0 818 transition: height 150ms ease-out, width 150ms ease-out;
michael@0 819 height: 285px;
michael@0 820 width: 260px; /* CHAT_WIDTH_OPEN in socialchat.xml */
michael@0 821 }
michael@0 822
michael@0 823 chatbox[minimized="true"] {
michael@0 824 width: 160px;
michael@0 825 height: 20px; /* CHAT_WIDTH_MINIMIZED in socialchat.xml */
michael@0 826 }
michael@0 827
michael@0 828 chatbar {
michael@0 829 -moz-binding: url("chrome://browser/content/socialchat.xml#chatbar");
michael@0 830 height: 0;
michael@0 831 max-height: 0;
michael@0 832 }
michael@0 833
michael@0 834 /** See bug 872317 for why the following rule is necessary. */
michael@0 835
michael@0 836 #downloads-button {
michael@0 837 -moz-binding: url("chrome://browser/content/downloads/download.xml#download-toolbarbutton");
michael@0 838 }
michael@0 839
michael@0 840 /*** Visibility of downloads indicator controls ***/
michael@0 841
michael@0 842 /* Bug 924050: If we've loaded the indicator, for now we hide it in the menu panel,
michael@0 843 and just show the icon. This is a hack to side-step very weird layout bugs that
michael@0 844 seem to be caused by the indicator stack interacting with the menu panel. */
michael@0 845 #downloads-button[indicator]:not([cui-areatype="menu-panel"]) > image.toolbarbutton-icon,
michael@0 846 #downloads-button[indicator][cui-areatype="menu-panel"] > #downloads-indicator-anchor {
michael@0 847 display: none;
michael@0 848 }
michael@0 849
michael@0 850 toolbarpaletteitem[place="palette"] > #downloads-button[indicator] > image.toolbarbutton-icon {
michael@0 851 display: -moz-box;
michael@0 852 }
michael@0 853
michael@0 854 toolbarpaletteitem[place="palette"] > #downloads-button[indicator] > stack.toolbarbutton-icon {
michael@0 855 display: none;
michael@0 856 }
michael@0 857
michael@0 858 #downloads-button:-moz-any([progress], [counter], [paused]) #downloads-indicator-icon,
michael@0 859 #downloads-button:not(:-moz-any([progress], [counter], [paused]))
michael@0 860 #downloads-indicator-progress-area
michael@0 861 {
michael@0 862 visibility: hidden;
michael@0 863 }
michael@0 864
michael@0 865 /* Hacks for toolbar full and text modes, until bug 573329 removes them */
michael@0 866
michael@0 867 toolbar[mode="text"] > #downloads-button {
michael@0 868 display: -moz-box;
michael@0 869 -moz-box-orient: vertical;
michael@0 870 -moz-box-pack: center;
michael@0 871 }
michael@0 872
michael@0 873 toolbar[mode="text"] > #downloads-button > .toolbarbutton-text {
michael@0 874 -moz-box-ordinal-group: 1;
michael@0 875 }
michael@0 876
michael@0 877 toolbar[mode="text"] > #downloads-button > .toolbarbutton-icon {
michael@0 878 display: -moz-box;
michael@0 879 -moz-box-ordinal-group: 2;
michael@0 880 visibility: collapse;
michael@0 881 }
michael@0 882
michael@0 883 /* full screen chat window support */
michael@0 884 chatbar:-moz-full-screen-ancestor,
michael@0 885 chatbox:-moz-full-screen-ancestor {
michael@0 886 border: none;
michael@0 887 position: fixed !important;
michael@0 888 top: 0 !important;
michael@0 889 left: 0 !important;
michael@0 890 right: 0 !important;
michael@0 891 bottom: 0 !important;
michael@0 892 width: 100% !important;
michael@0 893 height: 100% !important;
michael@0 894 margin: 0 !important;
michael@0 895 min-width: 0 !important;
michael@0 896 max-width: none !important;
michael@0 897 min-height: 0 !important;
michael@0 898 max-height: none !important;
michael@0 899 box-sizing: border-box !important;
michael@0 900 }
michael@0 901
michael@0 902 /* hide chat chrome when chat is fullscreen */
michael@0 903 chatbox:-moz-full-screen-ancestor > .chat-titlebar {
michael@0 904 display: none;
michael@0 905 }
michael@0 906
michael@0 907 /* hide chatbar if browser tab is fullscreen */
michael@0 908 *:-moz-full-screen-ancestor chatbar:not(:-moz-full-screen-ancestor) {
michael@0 909 display: none;
michael@0 910 }
michael@0 911
michael@0 912 /* hide sidebar when fullscreen */
michael@0 913 *:-moz-full-screen-ancestor #social-sidebar-box:not(:-moz-full-screen-ancestor) {
michael@0 914 display: none;
michael@0 915 }
michael@0 916
michael@0 917 /* Combobox dropdown renderer */
michael@0 918 #ContentSelectDropdown {
michael@0 919 max-height: 400px;
michael@0 920 }
michael@0 921
michael@0 922 .contentSelectDropdown-optgroup {
michael@0 923 font-weight: bold;
michael@0 924 /* color: menutext used to overwrite the disabled color */
michael@0 925 color: menutext;
michael@0 926 }
michael@0 927
michael@0 928 .contentSelectDropdown-ingroup {
michael@0 929 -moz-margin-start: 2em;
michael@0 930 }
michael@0 931
michael@0 932 /* Give this menupopup an arrow panel styling */
michael@0 933 #BMB_bookmarksPopup {
michael@0 934 -moz-appearance: none;
michael@0 935 -moz-binding: url("chrome://browser/content/places/menu.xml#places-popup-arrow");
michael@0 936 background: transparent;
michael@0 937 border: none;
michael@0 938 transition: opacity 300ms;
michael@0 939 /* The popup inherits -moz-image-region from the button, must reset it */
michael@0 940 -moz-image-region: auto;
michael@0 941 }
michael@0 942
michael@0 943 /* Customize mode */
michael@0 944 #navigator-toolbox,
michael@0 945 #browser-bottombox,
michael@0 946 #content-deck {
michael@0 947 transition-property: margin-left, margin-right;
michael@0 948 transition-duration: 200ms;
michael@0 949 transition-timing-function: linear;
michael@0 950 }
michael@0 951
michael@0 952 #tab-view-deck[fastcustomizeanimation] #navigator-toolbox,
michael@0 953 #tab-view-deck[fastcustomizeanimation] #content-deck {
michael@0 954 transition-duration: 1ms;
michael@0 955 transition-timing-function: linear;
michael@0 956 }
michael@0 957
michael@0 958 #PanelUI-contents > .panel-customization-placeholder > .panel-customization-placeholder-child {
michael@0 959 list-style-image: none;
michael@0 960 }
michael@0 961
michael@0 962 #customization-panelHolder {
michael@0 963 overflow-y: hidden;
michael@0 964 }
michael@0 965
michael@0 966 #customization-panelWrapper,
michael@0 967 #customization-panelWrapper > .panel-arrowcontent {
michael@0 968 -moz-box-flex: 1;
michael@0 969 }
michael@0 970
michael@0 971 #customization-panelWrapper > .panel-arrowcontent {
michael@0 972 padding: 0 !important;
michael@0 973 overflow: hidden;
michael@0 974 }
michael@0 975
michael@0 976 #customization-panelHolder > #PanelUI-mainView {
michael@0 977 display: flex;
michael@0 978 flex-direction: column;
michael@0 979 /* Hack alert - by manually setting the preferred height to 0, we convince
michael@0 980 #PanelUI-mainView to shrink when the window gets smaller in customization
michael@0 981 mode. Not sure why that is - might have to do with our intermingling of
michael@0 982 XUL flex, and CSS3 Flexbox. */
michael@0 983 height: 0;
michael@0 984 }
michael@0 985
michael@0 986 #customization-panelHolder > #PanelUI-mainView > #PanelUI-contents-scroller {
michael@0 987 display: flex;
michael@0 988 flex: auto;
michael@0 989 flex-direction: column;
michael@0 990 }
michael@0 991
michael@0 992 #customization-panel-container {
michael@0 993 overflow-y: auto;
michael@0 994 }
michael@0 995
michael@0 996 toolbarpaletteitem[dragover] {
michael@0 997 border-left-color: transparent;
michael@0 998 border-right-color: transparent;
michael@0 999 }
michael@0 1000
michael@0 1001 #customization-palette:not([hidden]) {
michael@0 1002 display: block;
michael@0 1003 overflow: auto;
michael@0 1004 min-height: 3em;
michael@0 1005 }
michael@0 1006
michael@0 1007 #customization-toolbar-visibility-button > .box-inherit > .button-menu-dropmarker {
michael@0 1008 display: -moz-box;
michael@0 1009 }
michael@0 1010
michael@0 1011 toolbarpaletteitem[place="palette"] {
michael@0 1012 width: 10em;
michael@0 1013 height: calc(40px + 2em);
michael@0 1014 margin-bottom: 5px;
michael@0 1015 overflow: hidden;
michael@0 1016 display: inline-block;
michael@0 1017 }
michael@0 1018
michael@0 1019 toolbarpaletteitem[place="palette"][hidden] {
michael@0 1020 display: none;
michael@0 1021 }
michael@0 1022
michael@0 1023 #customization-palette .toolbarpaletteitem-box {
michael@0 1024 -moz-box-pack: center;
michael@0 1025 -moz-box-flex: 1;
michael@0 1026 width: 10em;
michael@0 1027 max-width: 10em;
michael@0 1028 }
michael@0 1029
michael@0 1030 /* UI Tour */
michael@0 1031
michael@0 1032 @keyframes uitour-wobble {
michael@0 1033 from {
michael@0 1034 transform: rotate(0deg) translateX(3px) rotate(0deg);
michael@0 1035 }
michael@0 1036 50% {
michael@0 1037 transform: rotate(360deg) translateX(3px) rotate(-360deg);
michael@0 1038 }
michael@0 1039 to {
michael@0 1040 transform: rotate(720deg) translateX(0px) rotate(-720deg);
michael@0 1041 }
michael@0 1042 }
michael@0 1043
michael@0 1044 @keyframes uitour-zoom {
michael@0 1045 from {
michael@0 1046 transform: scale(0.8);
michael@0 1047 }
michael@0 1048 50% {
michael@0 1049 transform: scale(1.0);
michael@0 1050 }
michael@0 1051 to {
michael@0 1052 transform: scale(0.8);
michael@0 1053 }
michael@0 1054 }
michael@0 1055
michael@0 1056 @keyframes uitour-color {
michael@0 1057 from {
michael@0 1058 border-color: #5B9CD9;
michael@0 1059 }
michael@0 1060 50% {
michael@0 1061 border-color: #FF0000;
michael@0 1062 }
michael@0 1063 to {
michael@0 1064 border-color: #5B9CD9;
michael@0 1065 }
michael@0 1066 }
michael@0 1067
michael@0 1068 #UITourHighlightContainer,
michael@0 1069 #UITourHighlight {
michael@0 1070 pointer-events: none;
michael@0 1071 }
michael@0 1072
michael@0 1073 #UITourHighlight[active] {
michael@0 1074 animation-delay: 2s;
michael@0 1075 animation-fill-mode: forwards;
michael@0 1076 animation-iteration-count: infinite;
michael@0 1077 animation-timing-function: linear;
michael@0 1078 }
michael@0 1079
michael@0 1080 #UITourHighlight[active="wobble"] {
michael@0 1081 animation-name: uitour-wobble;
michael@0 1082 animation-delay: 0s;
michael@0 1083 animation-duration: 1.5s;
michael@0 1084 animation-iteration-count: 1;
michael@0 1085 }
michael@0 1086 #UITourHighlight[active="zoom"] {
michael@0 1087 animation-name: uitour-zoom;
michael@0 1088 animation-duration: 1s;
michael@0 1089 }
michael@0 1090 #UITourHighlight[active="color"] {
michael@0 1091 animation-name: uitour-color;
michael@0 1092 animation-duration: 2s;
michael@0 1093 }

mercurial