| /* Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file */ |
| /* for details. All rights reserved. Use of this source code is governed by a */ |
| /* BSD-style license that can be found in the LICENSE file. */ |
| |
| @include "../../view/resources/view.css" |
| |
| @include "../../touch/resources/touch.css" |
| |
| html { |
| height: 100%; |
| width: 100%; |
| } |
| |
| body { |
| background: white; |
| font-weight: normal; |
| font-family: arial,sans-serif; |
| font-size: 13px; |
| margin: 0 0 0 0; |
| height: 100%; |
| width: 100%; |
| color: #222; |
| overflow: hidden; |
| -webkit-tap-highlight-color: rgba(0,0,0,0); |
| } |
| |
| h1 { |
| font-family: arial,sans-serif; |
| font-size: 36px; |
| color: #72c3f2; |
| text-align: center; |
| margin-bottom: 0; |
| } |
| |
| h2 { |
| font-size: 16px; |
| font-weight: normal; |
| text-overflow: ellipsis; |
| text-wrap: none; |
| white-space: nowrap; |
| } |
| |
| button { |
| vertical-align: top; |
| } |
| |
| /* Remove the blue outer glow from focused divs. */ |
| div { |
| outline: none; |
| } |
| |
| input { |
| resize: none; |
| border: inset #aaa 1px; |
| margin: 2px; |
| padding: 1px 2px 2px 2px; |
| overflow: hidden; |
| white-space: nowrap; |
| } |
| |
| .sm-root.hidden { |
| -webkit-transform: translate3d(0, 40px, 0); |
| } |
| |
| input:focus { |
| border: solid #88f 2px; |
| outline: none; |
| margin: 1px; |
| } |
| |
| .front-view { |
| background: white; |
| overflow: hidden; |
| } |
| |
| .bottom-view { |
| position: absolute; |
| left: 0; |
| top: 51px; |
| bottom: 0; |
| } |
| |
| .top-view { |
| position: absolute; |
| left: 0; |
| right: 0; |
| z-index: 30; |
| overflow: hidden; |
| -webkit-transition-duration: 0.45s; |
| } |
| |
| .query { |
| position: absolute; |
| -webkit-transition-duration: 0.45s; |
| top: 0; |
| width: 257px; |
| bottom: 0; |
| background: white; |
| border-left: 1px solid #F5F5F5; |
| border-right: 1px solid #F5F5F5; |
| } |
| |
| .query.sel { |
| z-index: 29 !important; |
| border-left: 1px solid #D2D2D2; |
| border-right: 1px solid #D2D2D2; |
| visibility: visible !important; |
| opacity: 1 !important; |
| } |
| |
| .query h2 { |
| color: #1155CC; |
| padding: 20px 16px 16px 16px; |
| left: 0; |
| right: 0; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| margin: 0; |
| box-sizing: border-box; |
| ms-box-sizing: border-box; |
| -webkit-box-sizing: border-box; |
| z-index: 10; |
| position: absolute; |
| font: bold 14px Arial, sans-serif; |
| } |
| |
| .query-name-shadow { |
| position: absolute; |
| left: 0; |
| right: 0; |
| height: 15px; |
| top: 39px; |
| background: -webkit-gradient(linear, left bottom, left top, from(rgba(255,255,255,0)), to(rgba(255,255,255, 1))); |
| overflow: hidden; |
| z-index: 3; |
| } |
| |
| .section-view { |
| -webkit-transition-property: -webkit-transform, opacity; |
| -webkit-transition-duration: 0.45s; |
| opacity: 0.6; |
| position: absolute; |
| left: 0; |
| right: 0; |
| top: 51px; |
| bottom: 0; |
| overflow: hidden; |
| } |
| |
| .loading-section { |
| position: absolute; |
| left: 0; |
| right: 0; |
| top: 0; |
| bottom: 0; |
| } |
| |
| .touch-scrollbar { |
| position: absolute; |
| background: #888; |
| opacity: 0.4; |
| -webkit-transition-property: opacity; |
| -webkit-transition-duration: 0.3s; |
| z-index: 1000; |
| } |
| |
| .touch-scrollbar.drag, |
| .touch-scrollbar:hover { |
| opacity: 0.8; |
| } |
| |
| .story-section { |
| margin-left: 0; |
| margin-right: 0; |
| left: 0; |
| right: 0; |
| top: 39px; |
| bottom: 0; |
| overflow: hidden; |
| position: absolute; |
| } |
| |
| .story { |
| position: absolute; |
| left: 0; |
| right: 0; |
| box-sizing: border-box; |
| ms-box-sizing: border-box; |
| -webkit-box-sizing: border-box; |
| margin: 0; |
| border: 1px solid #F5F5F5; |
| line-height: 18px; |
| /* This is needed when there is no caption. Since the other elements are |
| absolutely positioned, the story will collapse to nothing without this. */ |
| min-height: 92px; |
| } |
| |
| .story:active, |
| .story.sel { |
| box-shadow:inset 4px 0 4px -2px #4d90f0; |
| -webkit-box-shadow:inset 4px 0 4px -2px #4d90f0; |
| } |
| |
| .story img { |
| position: absolute; |
| width: 57px; |
| height: 57px; |
| z-index: 20; |
| -webkit-transition-property: opacity; |
| -webkit-transition-duration: 0.45s; |
| |
| opacity: 0.6; |
| } |
| |
| .snippet, |
| .story .title { |
| white-space: nowrap; |
| text-overflow: ellipsis; |
| overflow: hidden; |
| } |
| |
| .snippet { |
| margin-top: -5px; |
| font: normal 13px arial,sans-serif; |
| line-height: 18px; |
| opacity: 0.6; |
| } |
| |
| .story .title { |
| font-weight: bold; |
| margin-left: 75px; |
| line-height: 18px; |
| /* TODO(rnystrom): The following prevents it from running over the byline, but |
| it cuts off part of the title if it's longer than two lines. */ |
| height: 38px; |
| opacity: 0.6; |
| } |
| |
| .story.no-thumb .title, |
| .story.no-thumb .byline { |
| left: 16px; |
| } |
| |
| .story-shadow { |
| position: absolute; |
| left: 2px; |
| right: 2px; |
| height: 31px; |
| top: -32px; |
| overflow: hidden; |
| z-index: 2; |
| } |
| |
| .story .byline, |
| .story .dateline { |
| color: #999; |
| font-size: 12px; |
| line-height: 18px; |
| } |
| |
| .story .dateline { |
| position: relative; |
| top: -18px; |
| } |
| |
| /* TODO(jacobr): handle intersection with byline better... */ |
| .story .dateline { |
| text-align: right; |
| opacity: 0.6; |
| line-height: 18px; |
| } |
| |
| .story .byline { |
| margin-left: 75px; |
| text-overflow: ellipsis; |
| white-space: nowrap; |
| opacity: 0.6; |
| display: inline-box; |
| } |
| |
| /* TODO(jacobr): this is backwards. we should have a read classname instead */ |
| .story.story-unread .dateline, |
| .story.story-unread .text, |
| .story.story-unread .title, |
| .story.story-unread .byline, |
| .story.story-unread img, |
| .story.story-unread .caption { |
| opacity: 1; |
| } |
| |
| .story .text { |
| top: 3px; |
| height: 90px; |
| opacity: 0.6; |
| } |
| |
| .story { |
| position: absolute; |
| left: 0; |
| right: 0; |
| padding: 16px; |
| overflow: hidden; |
| } |
| |
| .story-view { |
| position: absolute; |
| left: 260px; |
| right: 0; |
| top: 51px; |
| bottom: 0; |
| line-height: 18px; |
| overflow: hidden; |
| |
| -webkit-animation-timing-function: ease-in; |
| -webkit-transition-duration: 0.45s; |
| -webkit-text-size-adjust: none; |
| } |
| |
| .paged-column { |
| position: absolute; |
| top: 100px; |
| left: 20px; |
| bottom: 45px; /* so it doesn't overlap with the page-number */ |
| right: 20px; |
| } |
| |
| .page-number { |
| position: absolute; |
| z-index: 1; |
| right: -40px; |
| bottom: -40px; |
| padding-left: 0px; |
| padding-top: 0px; |
| padding-right: 50px; |
| padding-bottom: 50px; |
| background: white; |
| box-shadow: -16px -16px 24px white; |
| -webkit-box-shadow: -16px -16px 24px white; |
| font-size: 16px; |
| color: rgba(0, 0, 0, 0.5); |
| text-align: center; |
| /* prevent accidental text selection if user clicks fast */ |
| -webkit-user-select: none; |
| } |
| |
| .page-number-left, .page-number-right { |
| min-width: 25px; /* for bigger click area */ |
| font-size: 22px; |
| font-weight: bold; |
| } |
| |
| .page-number-label { |
| min-width: 60px; |
| } |
| |
| .story-content { |
| -webkit-column-width: 300px; |
| -webkit-column-gap: 26px; /* 2em */ |
| } |
| |
| /* |
| * Styles to get the right look for images in the column layout. |
| * |
| * These are set to "!important" to replace any styles in the HTML. |
| * TODO(jmesserly): ideally the server would strip style="" from img tags, then |
| * we wouldn't need the !important. |
| */ |
| .story-content img { |
| /* Set maximum width so the image shrinks to fit the column. */ |
| max-width: 100% !important; |
| /* |
| * Set maximum height so the image wont't wrap between columns. |
| * TODO(jmesserly): figure out why we can't use 100% here; it seems like |
| * 100% is being interpreted as bigger than the column height. |
| */ |
| max-height: 70% !important; |
| |
| /* Set width and height to auto to preserve aspect ratio. */ |
| width: auto !important; |
| height: auto !important; |
| } |
| |
| .story-content a { |
| color: #15C; |
| } |
| |
| .story-content a:visited { |
| color: #61c; |
| } |
| |
| .story-image { |
| margin: 10px; |
| width: 200px; |
| } |
| |
| .story-text-view { |
| padding: 20px; |
| left: 0; |
| right: 0; |
| top: 0; |
| bottom: 0; |
| position: absolute; |
| overflow: hidden; |
| } |
| |
| .story-text-view { |
| box-sizing: border-box; |
| ms-box-sizing: border-box; |
| -webkit-box-sizing: border-box; |
| -moz-box-sizing: border-box; |
| } |
| |
| .story-text-view .story-header { |
| margin-bottom: 10px; |
| padding-bottom: 2px; |
| border-bottom: 1px solid #d2d2d2; |
| font-weight: bold; |
| } |
| |
| .story-text-view .story-header .story-title { |
| font-weight: bold; |
| color: #15C; |
| font-size: 18px; |
| margin-bottom: 5px; |
| text-overflow: ellipsis; |
| text-wrap: none; |
| white-space: nowrap; |
| width: 100%; |
| display: block; |
| overflow: hidden; |
| } |
| |
| .story-title:link, .story-title:visited { |
| text-decoration: none; |
| } |
| |
| .story-title:hover { |
| text-decoration: underline; |
| } |
| |
| .story-text-view .story-header .story-byline { |
| font-weight: bold; |
| color: #333; |
| font-size: 15px; |
| padding-top: 3px; |
| padding-bottom: 3px; |
| text-overflow: ellipsis; |
| text-wrap: none; |
| white-space: nowrap; |
| } |
| |
| .story-text-view .story-header .story-dateline { |
| font-weight: normal; |
| color: #999; |
| font-size: 12px; |
| padding-top: 3px; |
| padding-bottom: 3px; |
| text-overflow: ellipsis; |
| text-wrap: none; |
| white-space: nowrap; |
| } |
| |
| .header-view { |
| height: 54px; |
| z-index: 2; |
| overflow: hidden; |
| position: relative; |
| background-color: #F5F5F5; |
| border-bottom: 1px solid #d2d2d2; |
| } |
| |
| .app-title { |
| font-size: 20px; |
| color: #484848; |
| padding-left: 22px; |
| padding-top: 0; |
| padding-bottom: 10px; |
| position: absolute; |
| left: 0; |
| top: 17px; |
| cursor: pointer; |
| |
| -webkit-transition-property: left; |
| -webkit-transition-duration: 0.45s; |
| } |
| |
| .app-title.in-story { |
| left: 50px; |
| } |
| |
| /* The arrow that is used as a back button on the story page. */ |
| .back-arrow { |
| background-image: url('back-21.png'); |
| width: 10px; |
| height: 15px; |
| margin: 10px 15px; |
| position: absolute; |
| left: -100px; |
| |
| -webkit-transition-property: left; |
| -webkit-transition-duration: 0.45s; |
| } |
| |
| .back-arrow.in-story { |
| left: 0; |
| } |
| |
| .config { |
| background-image: url('settings-21.png'); |
| position: absolute; |
| right: 120px; |
| |
| -webkit-transition-property: right; |
| -webkit-transition-duration: 0.45s; |
| } |
| |
| .config.in-story { |
| right: -60px; |
| } |
| |
| .refresh { |
| background-image: url('refresh-21.png'); |
| right: 60px; |
| position: absolute; |
| |
| -webkit-transition-property: right; |
| -webkit-transition-duration: 0.45s; |
| } |
| |
| .refresh.in-story { |
| right: -160px; |
| } |
| |
| #dart-logo { |
| height: 21px; |
| padding-left: 25px; |
| background: url('Dart_Logo_21.png') no-repeat; |
| } |
| |
| .info-button { |
| background: url('info.svg'); |
| background-size: 55%; |
| margin: 13px; |
| position: absolute; |
| right: 0; |
| |
| -webkit-transition-property: right; |
| -webkit-transition-duration: 0.45s; |
| } |
| |
| .info-button.in-story { |
| right: -260px; |
| } |
| |
| .new-window-button { |
| background-image: url('externallink.svg'); |
| background-size: 100% 100%; |
| width: 24px; |
| height: 24px; |
| top: 43px; |
| right: 220px; |
| position: absolute; |
| } |
| |
| .web-back-button, |
| .web-forward-button { |
| width: 24px; |
| height: 24px; |
| top: 43px; |
| position: absolute; |
| } |
| |
| .web-back-button { |
| background-image: url('lefttriangle.svg'); |
| right: 302px; |
| } |
| |
| .web-forward-button { |
| background-image: url('righttriangle.svg'); |
| right: 260px; |
| } |
| |
| .web-view-button, .text-view-button { |
| width: 80px; |
| height: 24px; |
| top: 45px; |
| border: solid 1px #D9D9D9; |
| background: -webkit-gradient(linear,left top,left bottom,from(whiteSmoke),to(#F1F1F1)); |
| font-size: 13px; |
| position: absolute; |
| text-align: center; |
| } |
| |
| .web-view-button { |
| right: 40px; |
| } |
| |
| .text-view-button { |
| right: 120px; |
| } |
| |
| .web-view-button.active, .text-view-button.active { |
| background: -webkit-gradient(linear,left top,left bottom,from(#EEE),to(#E0E0E0)); |
| border-color: #BBB; |
| box-shadow: inset 0 1px 5px #ccc; |
| -moz-box-shadow: inset 0 1px 5px #ccc; |
| -webkit-box-shadow: inset 0 1px 5px #ccc; |
| } |
| |
| /* TODO(eub): refactor this to apply to all standard buttons? */ |
| .config, |
| .refresh, |
| .info-button, |
| .back-arrow { |
| opacity: 0.5; |
| border: 1px solid #C8C8C8; |
| color: #444; |
| border-radius: 2px; |
| width: 47px; |
| height: 29px; |
| margin: 12px; |
| background-position: center; |
| background-repeat: no-repeat; |
| } |
| |
| .config:hover, |
| .refresh:hover, |
| .info-button:hover, |
| .back-arrow:hover { |
| opacity: 1; |
| box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); |
| -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); |
| } |
| |
| button, |
| .button, |
| .sm-item { |
| cursor: pointer; |
| } |
| |
| .sm-root { |
| border-bottom: none; |
| background-color: transparent; |
| -webkit-box-shadow: none; |
| height: 44px; |
| overflow: hidden; |
| position: absolute; |
| top: 16px; |
| left: 120px; |
| z-index: 3; |
| } |
| |
| .data-source-view { |
| left: 0; |
| right: 0; |
| top: 0; |
| bottom: 0; |
| position: absolute; |
| } |
| |
| .data-source-view > div { |
| height: 100%; |
| position: relative; |
| } |
| |
| .sm-item-box { |
| -webkit-box-pack: start; |
| } |
| |
| .sm-triangle { |
| width: 22px; |
| border: none; |
| top: 14px; |
| height: 15px; |
| background-image: url('sliderarrow.svg'); |
| } |
| |
| .sm-item.sel { |
| color: #d14836; |
| } |
| |
| .sm-item { |
| font: 16px arial,sans-serif; |
| text-transform: none; |
| color: #484848; |
| } |
| |
| /* TODO(eub): Kennedy GMail button:active is actually a blue outline, |
| of all things. */ |
| .button:active, |
| .sm-item:active { |
| opacity: 0.5; |
| } |
| |
| /* dialog view */ |
| |
| .dialog-modal { |
| width: 100%; |
| height: 100%; |
| display: -webkit-box; |
| -webkit-box-align: center; |
| -webkit-box-pack: center; |
| background-color: rgba(200, 200, 200, 0.6); |
| z-index: 40; |
| position: absolute; |
| } |
| |
| .dialog { |
| border: 1px solid #CCC; |
| width: 250px; |
| padding: 20px; |
| background-color: white; |
| box-shadow: -1px 3px 3px rgba(0, 0, 0, 0.1); |
| -webkit-box-shadow: -1px 3px 3px rgba(0, 0, 0, 0.1); |
| } |
| |
| .dialog-title-area { |
| font-size: 19px; |
| padding: 0 0 10px 0; |
| } |
| |
| .dialog-title { |
| vertical-align: middle; |
| } |
| |
| .dialog-body { |
| color: black; |
| padding: 10px 0 0 0; |
| } |
| |
| /* TODO(terry): Better than floats for this simple dialog? */ |
| .done-button { |
| float: right; |
| } |
| |
| .hidden-story { |
| -webkit-animation-timing-function: ease-in; |
| opacity: 0; |
| } |
| |
| .header-background { |
| background: black; |
| width: 100%; |
| } |
| |
| #appSplash .header { |
| height: 54px; |
| z-index: 2; |
| overflow: hidden; |
| position: relative; |
| background-color: #F5F5F5; |
| border-bottom: 1px solid #d2d2d2; |
| } |
| |
| #appSplash .title { |
| font-size: 20px; |
| color: #484848; |
| padding-left: 22px; |
| padding-top: 0; |
| padding-bottom: 10px; |
| position: absolute; |
| left: 0; |
| top: 15px; |
| } |
| |
| #appSplash .splash { |
| font-size: 24px; |
| position: absolute; |
| top: 173px; |
| bottom: 0; |
| left: 0; |
| right: 0; |
| text-align: center; |
| } |
| |
| #appSplash .footer { |
| font-size: 10px; |
| color: rgba(0, 0, 0, 0.6); |
| position: absolute; |
| left: 5px; |
| bottom: 5px; |
| } |
| |
| #appSplash .footer A:link,A:visited { |
| text-decoration: none; |
| color: rgba(0, 0, 0, 0.6); |
| } |
| |
| #appSplash .footer A:hover { |
| text-decoration: underline; |
| color: rgba(0, 0, 0, 0.6); |
| } |
| |
| #appSplash { |
| position: absolute; |
| left: 0; |
| right: 0; |
| top: 0; |
| bottom: 0; |
| /* Put in front of UI. UI will load behind it then remove this to avoid |
| a visible flicker. */ |
| z-index: 50; |
| background: #fff; |
| } |
| |
| @-webkit-keyframes pulsate { |
| 0% { |
| -webkit-transform: translate3d(0, 0, 0) scale(1.0); |
| } |
| 50% { |
| -webkit-transform: scale(1.5) translate3d(0, 20px, 0); |
| } |
| 100% { |
| -webkit-transform: translate3d(0, 0, 0) translate3d(0, 0, 0); |
| } |
| } |
| |
| #appSplash .splashImg { |
| position: absolute; |
| left: 140px; |
| /* We put the image on a div instead of just using an img so that the image |
| URL can live in the CSS, where update.py knows to find it. */ |
| width: 640px; |
| height: 480px; |
| background-image: url('pigeons-jumpinjimmyjava-white90pct-q70.jpg'); |
| |
| -webkit-animation-name: pulsate; |
| -webkit-animation-iteration-count: infinite; |
| -webkit-animation-timing-function: ease-in-out; |
| -webkit-animation-duration: 5s; |
| } |
| |
| .section-view.hide-all-queries .data-source-view .query, |
| .section-view.hide-all-queries .page-number { |
| opacity: 0; |
| } |
| |
| .transparent { |
| opacity: 0; |
| } |
| |
| .query { |
| width: 297px; |
| } |
| |
| .story-view { |
| left: 300px; |
| } |
| |
| .story-shadow { |
| background: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0)), to(rgba(255,255,255, 1)), color-stop(0.7, rgba(255,255,255, 1))); |
| } |