/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (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.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

/*
 * WINDOWS
 */

window {
	background: #FF9; /* pale yellow */
	color: black;
	}

/* only does anything for calendar */
table { width: 100%; }

box#tabs { padding: 1px; }
/*  crash in 
#0  0x40b20926 in nsSelectControlFrame::SetProperty ()
#1  0x40ade441 in nsHTMLSelectElement::SetSelectedIndex ()
#2  0x403d30cf in NS_NewScriptHTMLScriptElement ()
#3  0x40446433 in js_SetProperty ()
box#main { overflow: scroll; }

box#main { overflow: auto; }
*/

/* XXX Interesting... */
/* window { overflow: scroll; } */

window[debug] { background: yellow; }
window[debug] box { background: red; }
window[debug] div { background: green; }

/* XXX: Bug: Problems - increases height; should center the table  - happens
if any margin is auto */
table {
	/* margin: 0 auto; */
	}

td, th {
	line-height: 1;
	padding: 0;
	}

/* XXX Doesn't work: */
box#outer { overflow: scroll; }

/*
 * BUTTONS AND TABS: Used in schedule and pick windows.
 */

/*
#ApptTable { overflow: scroll; }
*/

button, td[class~="button"], td[class~="tab"] {
	text-align: center;
	vertical-align: middle;
	cursor: pointer;
	border: 1px outset #FF9;
	padding: 1px;
	color: black;
	background: #FF9;
	}

td[class~="button"]:active, td[class~="tab"]:active {
	border-style: inset;
	padding: 2px 0px 0px 2px;
	background: #fc3;
	}

td[class~="tab"][class~="disable"] {
	color: #888;
	}

td[class~="tab"][class~="disable"]:active {
	/* back to default */
	background: #FF9;
	}

td[id="DateOutput"], td[id="MonthOutput"] {
	vertical-align: middle;
	text-align: center;
	font-weight: bold;
	}

/*
 * SCHEDULE LIST
 */

/* XXX XUL Bug?? tr[id] without the tbody matches the row in the thead too */
table[class~="data"] tbody[id="ApptTable"] tr {
	cursor: pointer;
	}

/* Problem with bug 5693
table[class~="data"] tbody#ApptTable tr:hover {
	background: #ff0;
	text-decoration: underline; /* really a nonstandard use */
	}
*/

table[class~="data"] th, table[class~="data"] td {
	text-align: left;
	vertical-align: baseline;
	}

/*
 * EVENT ADDER
 */

table#add th {
	text-align: right;
	font-weight: bold;
	}

table#add th:after {
	content: ":";
	}

/*
 * DATE PICKER
 */

/* the numbers in the calendar, including those below */

td[class~="caldate"] {
	cursor: pointer;
	text-align: center;
	border: 1px solid transparent;
	}

/* the number in the calendar for the date now being shown (overrides above) */

td[class~="caldate"][class~="nowshowing"] {
	background: #f90;
	color: black;
	}

/* the number in the calendar for today's date (overrides above) */

td[class~="caldate"][class~="today"] {
	border: 1px solid black;
	/* font-weight: bold; */
	}
