From 6cfb2baad3583f720ac5a09f4c3cc986c92ee907 Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 7 Jan 2011 00:42:00 +0000 Subject: [PATCH 01/28] -9 --- history.txt | 4 ++++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/history.txt b/history.txt index 894223bdd..187b3623a 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,7 @@ +2011-01-07 zzz + * Data Structures: More caching + * i2psnark: Improve request tracking to reduce memory usage + 2011-01-05 zzz * build.xml: Fix findbugs target * Fix some miscellaneous findbugs bugs diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index a6204817e..f2522cd4e 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 8; + public final static long BUILD = 9; /** for example "-test" */ public final static String EXTRA = ""; From 7330e5fef8cf8f763c668b5d71862725ff94f6f6 Mon Sep 17 00:00:00 2001 From: dev Date: Sat, 8 Jan 2011 18:24:16 +0000 Subject: [PATCH 02/28] Added support for new Intel family/model names. Added proper support for using Core2 machines as P4. Added support for identifying SSE 3/4.1/4.2/4A support on CPU. --- .../freenet/support/CPUInformation/CPUID.java | 200 ++++++++++++------ .../support/CPUInformation/CPUInfo.java | 24 ++- 2 files changed, 155 insertions(+), 69 deletions(-) diff --git a/core/java/src/freenet/support/CPUInformation/CPUID.java b/core/java/src/freenet/support/CPUInformation/CPUID.java index 83aa33367..048a49403 100644 --- a/core/java/src/freenet/support/CPUInformation/CPUID.java +++ b/core/java/src/freenet/support/CPUInformation/CPUID.java @@ -1,5 +1,6 @@ /* * Created on Jul 14, 2004 + * Updated on Jan 8, 2011 */ package freenet.support.CPUInformation; @@ -129,11 +130,26 @@ public class CPUID { CPUIDResult c = doCPUID(1); return c.EAX & 0xf; } - private static int getCPUFlags() + private static int getEDXCPUFlags() { CPUIDResult c = doCPUID(1); return c.EDX; } + private static int getECXCPUFlags() + { + CPUIDResult c = doCPUID(1); + return c.ECX; + } + private static int getExtendedEDXCPUFlags() + { + CPUIDResult c = doCPUID(0x80000001); + return c.EDX; + } + private static int getExtendedECXCPUFlags() + { + CPUIDResult c = doCPUID(0x80000001); + return c.ECX; + } //Returns a CPUInfo item for the current type of CPU //If I could I would declare this method in a interface named @@ -163,13 +179,25 @@ public class CPUID { return getCPUVendorID(); } public boolean hasMMX(){ - return (getCPUFlags() & 0x800000) >0; //Bit 23 + return (getEDXCPUFlags() & 0x800000) >0; //EDX Bit 23 } public boolean hasSSE(){ - return (getCPUFlags() & 0x2000000) >0; //Bit 25 + return (getEDXCPUFlags() & 0x2000000) >0; //EDX Bit 25 } public boolean hasSSE2(){ - return (getCPUFlags() & 0x4000000) >0; //Bit 26 + return (getEDXCPUFlags() & 0x4000000) >0; //EDX Bit 26 + } + public boolean hasSSE3(){ + return (getEDXCPUFlags() & 0x1) >0; //ECX Bit 0 + } + public boolean hasSSE41(){ + return (getEDXCPUFlags() & 0x80000) >0; //ECX Bit 19 + } + public boolean hasSSE42(){ + return (getEDXCPUFlags() & 0x100000) >0; //ECX Bit 20 + } + public boolean hasSSE4A(){ + return (getExtendedECXCPUFlags() & 0x40) >0; //Extended ECX Bit 6 } public boolean IsC3Compatible() { return false; } } @@ -301,72 +329,102 @@ public class CPUID { } public boolean IsPentium4Compatible() { - return getCPUFamily() >= 15; + if (getCPUFamily() >= 15){ + return true; + } else if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 10 || getCPUModel() == 13))){ + return true; + } else if (getCPUExtendedModel() == 1 && getCPUFamily() == 6 && getCPUModel() == 10){ + return true; + } else { + return false; + } } public String getCPUModelString() throws UnknownCPUException { - if(getCPUFamily() == 4){ - switch(getCPUModel()){ - case 0: - return "486 DX-25/33"; - case 1: - return "486 DX-50"; - case 2: - return "486 SX"; - case 3: - return "486 DX/2"; - case 4: - return "486 SL"; - case 5: - return "486 SX/2"; - case 7: - return "486 DX/2-WB"; - case 8: - return "486 DX/4"; - case 9: - return "486 DX/4-WB"; - } - } - if(getCPUFamily() == 5){ - switch(getCPUModel()){ - case 0: - return "Pentium 60/66 A-step"; - case 1: - return "Pentium 60/66"; - case 2: - return "Pentium 75 - 200"; - case 3: - return "OverDrive PODP5V83"; - case 4: - return "Pentium MMX"; - case 7: - return "Mobile Pentium 75 - 200"; - case 8: - return "Mobile Pentium MMX"; - } + if (getCPUExtendedModel() == 0){ + if(getCPUFamily() == 4){ + switch(getCPUModel()){ + case 0: + return "486 DX-25/33"; + case 1: + return "486 DX-50"; + case 2: + return "486 SX"; + case 3: + return "486 DX/2"; + case 4: + return "486 SL"; + case 5: + return "486 SX/2"; + case 7: + return "486 DX/2-WB"; + case 8: + return "486 DX/4"; + case 9: + return "486 DX/4-WB"; + } + } + } + if (getCPUExtendedModel() == 0){ + if(getCPUFamily() == 5){ + switch(getCPUModel()){ + case 0: + return "Pentium 60/66 A-step"; + case 1: + return "Pentium 60/66"; + case 2: + return "Pentium 75 - 200"; + case 3: + return "OverDrive PODP5V83"; + case 4: + return "Pentium MMX"; + case 7: + return "Mobile Pentium 75 - 200"; + case 8: + return "Mobile Pentium MMX"; + } + } } if(getCPUFamily() == 6){ - switch(getCPUModel()){ - case 0: - return "Pentium Pro A-step"; - case 1: - return "Pentium Pro"; - case 3: - return "Pentium II (Klamath)"; - case 5: - return "Pentium II (Deschutes), Celeron (Covington), Mobile Pentium II (Dixon)"; - case 6: - return "Mobile Pentium II, Celeron (Mendocino)"; - case 7: - return "Pentium III (Katmai)"; - case 8: - return "Pentium III (Coppermine), Celeron w/SSE"; - case 9: - return "Mobile Pentium III"; - case 10: - return "Pentium III Xeon (Cascades)"; - case 11: - return "Pentium III (130 nm)"; - } + if (getCPUExtendedModel() == 0){ + switch(getCPUModel()){ + case 0: + return "Pentium Pro A-step"; + case 1: + return "Pentium Pro"; + case 3: + return "Pentium II (Klamath)"; + case 5: + return "Pentium II (Deschutes), Celeron (Covington), Mobile Pentium II (Dixon)"; + case 6: + return "Mobile Pentium II, Celeron (Mendocino)"; + case 7: + return "Pentium III (Katmai)"; + case 8: + return "Pentium III (Coppermine), Celeron w/SSE"; + case 9: + return "Mobile Pentium III (Banias)"; + case 10: + return "Pentium III Xeon (Cascades)"; + case 11: + return "Pentium III (130 nm)"; + case 13: + return "Mobile Pentium III (Dothan)"; + case 14: + return "Mobile Core (Yonah)"; + case 15: + return "Core 2 (Conroe)"; + } + } + if (getCPUExtendedModel() == 1){ + switch(getCPUModel()){ + case 10: + return "Core i7"; + case 12: + return "Atom"; + case 13: + return "Xeon MP"; + } + } } if(getCPUFamily() == 7){ switch(getCPUModel()){ @@ -384,6 +442,10 @@ public class CPUID { return "Pentium IV (130 nm)"; case 3: return "Pentium IV (90 nm)"; + case 4: + return "Pentium IV (90 nm)"; + case 6: + return "Pentium IV (65 nm)"; } } if(getCPUExtendedFamily() == 1){ @@ -407,7 +469,7 @@ public class CPUID { System.out.println("CPU Family: " + getCPUFamily()); System.out.println("CPU Model: " + getCPUModel()); System.out.println("CPU Stepping: " + getCPUStepping()); - System.out.println("CPU Flags: " + getCPUFlags()); + System.out.println("CPU Flags: " + getEDXCPUFlags()); CPUInfo c = getInfo(); System.out.println(" **More CPUInfo**"); @@ -415,6 +477,10 @@ public class CPUID { System.out.println(" CPU has MMX: " + c.hasMMX()); System.out.println(" CPU has SSE: " + c.hasSSE()); System.out.println(" CPU has SSE2: " + c.hasSSE2()); + System.out.println(" CPU has SSE3: " + c.hasSSE3()); + System.out.println(" CPU has SSE4.1: " + c.hasSSE41()); + System.out.println(" CPU has SSE4.2: " + c.hasSSE42()); + System.out.println(" CPU has SSE4A: " + c.hasSSE4A()); if(c instanceof IntelCPUInfo){ System.out.println(" **Intel-info**"); System.out.println(" Is pII-compatible: "+((IntelCPUInfo)c).IsPentium2Compatible()); diff --git a/core/java/src/freenet/support/CPUInformation/CPUInfo.java b/core/java/src/freenet/support/CPUInformation/CPUInfo.java index e6b660927..43dfcd8d0 100644 --- a/core/java/src/freenet/support/CPUInformation/CPUInfo.java +++ b/core/java/src/freenet/support/CPUInformation/CPUInfo.java @@ -1,6 +1,6 @@ /* - * Created on Jul 16, 2004 - * + * Created on Jul 14, 2004 + * Updated on Jan 8, 2011 */ package freenet.support.CPUInformation; @@ -42,5 +42,25 @@ public interface CPUInfo */ public boolean hasSSE2(); + /** + * @return true iff the CPU support the SSE3 instruction set. + */ + public boolean hasSSE3(); + + /** + * @return true iff the CPU support the SSE4.1 instruction set. + */ + public boolean hasSSE41(); + + /** + * @return true iff the CPU support the SSE4.2 instruction set. + */ + public boolean hasSSE42(); + + /** + * @return true iff the CPU support the SSE4A instruction set. + */ + public boolean hasSSE4A(); + public boolean IsC3Compatible(); } From 4c172760cc570f0e74438a3b0646bb0b94879563 Mon Sep 17 00:00:00 2001 From: dev Date: Sat, 8 Jan 2011 19:58:04 +0000 Subject: [PATCH 03/28] Corrected some identification code. --- core/java/src/freenet/support/CPUInformation/CPUID.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/src/freenet/support/CPUInformation/CPUID.java b/core/java/src/freenet/support/CPUInformation/CPUID.java index 048a49403..bde7251b5 100644 --- a/core/java/src/freenet/support/CPUInformation/CPUID.java +++ b/core/java/src/freenet/support/CPUInformation/CPUID.java @@ -333,7 +333,7 @@ public class CPUID { return true; } else if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 10 || getCPUModel() == 13))){ return true; - } else if (getCPUExtendedModel() == 1 && getCPUFamily() == 6 && getCPUModel() == 10){ + } else if (getCPUExtendedModel() == 0 && getCPUFamily() == 6 && getCPUModel() == 15){ return true; } else { return false; From 16509e5921ea9a2c3a376944802ee17301c55b47 Mon Sep 17 00:00:00 2001 From: dev Date: Sat, 8 Jan 2011 20:00:36 +0000 Subject: [PATCH 04/28] Better comments --- core/java/src/freenet/support/CPUInformation/CPUID.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/java/src/freenet/support/CPUInformation/CPUID.java b/core/java/src/freenet/support/CPUInformation/CPUID.java index bde7251b5..e3712e4ad 100644 --- a/core/java/src/freenet/support/CPUInformation/CPUID.java +++ b/core/java/src/freenet/support/CPUInformation/CPUID.java @@ -328,11 +328,14 @@ public class CPUID { return getCPUFamily() > 6 || (getCPUFamily() == 6 && getCPUModel() >=7); } public boolean IsPentium4Compatible() - { + { + // P4 if (getCPUFamily() >= 15){ return true; + // Xeon MP (45nm) or Core i7 } else if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 10 || getCPUModel() == 13))){ return true; + // Core 2 Duo } else if (getCPUExtendedModel() == 0 && getCPUFamily() == 6 && getCPUModel() == 15){ return true; } else { From 212c87ffd8b43dfc21af6d8d3570a963f07341c4 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 9 Jan 2011 01:02:17 +0000 Subject: [PATCH 05/28] * DataHelper: Speed up and annotate sortStructures() * RouterInfo: - Don't cache byteified data by default, to save ~1.5 MB - Don't create empty peers Set, to save ~100KB --- core/java/src/net/i2p/data/DataHelper.java | 43 +++++++++++---- core/java/src/net/i2p/data/RouterAddress.java | 7 ++- core/java/src/net/i2p/data/RouterInfo.java | 55 ++++++++++++++----- 3 files changed, 79 insertions(+), 26 deletions(-) diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index bd6bf260d..2e74adce3 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -1040,25 +1041,45 @@ public class DataHelper { } /** - * Sort based on the Hash of the DataStructure + * Sort based on the Hash of the DataStructure. * Warning - relatively slow. - * Only used by RouterInfo - * Why? Just because it has to be consistent so signing will work? + * WARNING - this sort order must be consistent network-wide, so while the order is arbitrary, + * it cannot be changed. + * Why? Just because it has to be consistent so signing will work. * How to spec as returning the same type as the param? + * DEPRECATED - Only used by RouterInfo. */ public static List sortStructures(Collection dataStructures) { if (dataStructures == null) return Collections.EMPTY_LIST; - ArrayList rv = new ArrayList(dataStructures.size()); - TreeMap tm = new TreeMap(); - for (DataStructure struct : dataStructures) { - tm.put(struct.calculateHash().toString(), struct); - } - for (DataStructure struct : tm.values()) { - rv.add(struct); - } + + // This used to use Hash.toString(), which is insane, since a change to toString() + // would break the whole network. Now use Hash.toBase64(). + // Note that the Base64 sort order is NOT the same as the raw byte sort order, + // despite what you may read elsewhere. + + //ArrayList rv = new ArrayList(dataStructures.size()); + //TreeMap tm = new TreeMap(); + //for (DataStructure struct : dataStructures) { + // tm.put(struct.calculateHash().toString(), struct); + //} + //for (DataStructure struct : tm.values()) { + // rv.add(struct); + //} + ArrayList rv = new ArrayList(dataStructures); + Collections.sort(rv, new DataStructureComparator()); return rv; } + /** + * See sortStructures() comments. + * @since 0.8.3 + */ + private static class DataStructureComparator implements Comparator { + public int compare(DataStructure l, DataStructure r) { + return l.calculateHash().toBase64().compareTo(r.calculateHash().toBase64()); + } + } + /** * NOTE: formatDuration2() recommended in most cases for readability */ diff --git a/core/java/src/net/i2p/data/RouterAddress.java b/core/java/src/net/i2p/data/RouterAddress.java index 1b4d6438f..647104574 100644 --- a/core/java/src/net/i2p/data/RouterAddress.java +++ b/core/java/src/net/i2p/data/RouterAddress.java @@ -131,10 +131,13 @@ public class RouterAddress extends DataStructureImpl { && DataHelper.eq(_transportStyle, addr.getTransportStyle()); } - /** the style should be sufficient, for speed */ + /** + * Just use style and hashCode for speed (expiration is always null). + * If we add multiple addresses of the same style, this may need to be changed. + */ @Override public int hashCode() { - return DataHelper.hashCode(_transportStyle); + return DataHelper.hashCode(_transportStyle) ^ _cost; } /** diff --git a/core/java/src/net/i2p/data/RouterInfo.java b/core/java/src/net/i2p/data/RouterInfo.java index 9c6db01f9..b4aae94b1 100644 --- a/core/java/src/net/i2p/data/RouterInfo.java +++ b/core/java/src/net/i2p/data/RouterInfo.java @@ -14,6 +14,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.Iterator; @@ -39,7 +40,8 @@ public class RouterInfo extends DatabaseEntry { private RouterIdentity _identity; private volatile long _published; private final Set _addresses; - private final Set _peers; + /** may be null to save memory, no longer final */ + private Set _peers; private /* FIXME final FIXME */ Properties _options; private volatile boolean _validated; private volatile boolean _isValid; @@ -47,6 +49,10 @@ public class RouterInfo extends DatabaseEntry { private volatile byte _byteified[]; private volatile int _hashCode; private volatile boolean _hashCodeInitialized; + /** should we cache the byte and string versions _byteified ? **/ + private boolean _shouldCache; + /** maybe we should check if we are floodfill? */ + private static final boolean CACHE_ALL = Runtime.getRuntime().maxMemory() > 128*1024*1024l; public static final String PROP_NETWORK_ID = "netId"; public static final String PROP_CAPABILITIES = "caps"; @@ -58,7 +64,6 @@ public class RouterInfo extends DatabaseEntry { public RouterInfo() { _addresses = new HashSet(2); - _peers = new HashSet(0); _options = new OrderedProperties(); } @@ -70,6 +75,7 @@ public class RouterInfo extends DatabaseEntry { setPeers(old.getPeers()); setOptions(old.getOptions()); setSignature(old.getSignature()); + // copy over _byteified? } public long getDate() { @@ -105,6 +111,11 @@ public class RouterInfo extends DatabaseEntry { public void setIdentity(RouterIdentity ident) { _identity = ident; resetCache(); + // We only want to cache the bytes for our own RI, which is frequently written. + // To cache for all RIs doubles the RI memory usage. + // setIdentity() is only called when we are creating our own RI. + // Otherwise, the data is populated with readBytes(). + _shouldCache = true; } /** @@ -159,6 +170,8 @@ public class RouterInfo extends DatabaseEntry { * @deprecated Implemented here but unused elsewhere */ public Set getPeers() { + if (_peers == null) + return Collections.EMPTY_SET; return _peers; } @@ -169,9 +182,15 @@ public class RouterInfo extends DatabaseEntry { * @deprecated Implemented here but unused elsewhere */ public void setPeers(Set peers) { + if (peers == null || peers.isEmpty()) { + _peers = null; + return; + } + if (_peers == null) + _peers = new HashSet(2); synchronized (_peers) { _peers.clear(); - if (peers != null) _peers.addAll(peers); + _peers.addAll(peers); } resetCache(); } @@ -223,7 +242,6 @@ public class RouterInfo extends DatabaseEntry { if (_byteified != null) return _byteified; if (_identity == null) throw new DataFormatException("Router identity isn't set? wtf!"); if (_addresses == null) throw new DataFormatException("Router addressess isn't set? wtf!"); - if (_peers == null) throw new DataFormatException("Router peers isn't set? wtf!"); if (_options == null) throw new DataFormatException("Router options isn't set? wtf!"); long before = Clock.getInstance().now(); @@ -239,6 +257,9 @@ public class RouterInfo extends DatabaseEntry { DataHelper.writeLong(out, 1, sz); Collection addresses = _addresses; if (sz > 1) + // WARNING this sort algorithm cannot be changed, as it must be consistent + // network-wide. The signature is not checked at readin time, but only + // later, and the addresses are stored in a Set, not a List. addresses = (Collection) DataHelper.sortStructures(addresses); for (RouterAddress addr : addresses) { addr.writeBytes(out); @@ -248,12 +269,14 @@ public class RouterInfo extends DatabaseEntry { // answer: they're always empty... they're a placeholder for one particular // method of trusted links, which isn't implemented in the router // at the moment, and may not be later. - // fixme to reduce objects - allow _peers == null - int psz = _peers.size(); + int psz = _peers == null ? 0 : _peers.size(); DataHelper.writeLong(out, 1, psz); if (psz > 0) { Collection peers = _peers; if (psz > 1) + // WARNING this sort algorithm cannot be changed, as it must be consistent + // network-wide. The signature is not checked at readin time, but only + // later, and the hashes are stored in a Set, not a List. peers = (Collection) DataHelper.sortStructures(peers); for (Hash peerHash : peers) { peerHash.writeBytes(out); @@ -266,7 +289,8 @@ public class RouterInfo extends DatabaseEntry { byte data[] = out.toByteArray(); long after = Clock.getInstance().now(); _log.debug("getBytes() took " + (after - before) + "ms"); - _byteified = data; + if (CACHE_ALL || _shouldCache) + _byteified = data; return data; } @@ -466,10 +490,15 @@ public class RouterInfo extends DatabaseEntry { _addresses.add(address); } int numPeers = (int) DataHelper.readLong(in, 1); - for (int i = 0; i < numPeers; i++) { - Hash peerIdentityHash = new Hash(); - peerIdentityHash.readBytes(in); - _peers.add(peerIdentityHash); + if (numPeers == 0) { + _peers = null; + } else { + _peers = new HashSet(numPeers); + for (int i = 0; i < numPeers; i++) { + Hash peerIdentityHash = new Hash(); + peerIdentityHash.readBytes(in); + _peers.add(peerIdentityHash); + } } _options = DataHelper.readProperties(in); _signature = new Signature(); @@ -504,7 +533,7 @@ public class RouterInfo extends DatabaseEntry { && _published == info.getPublished() && DataHelper.eq(_addresses, info.getAddresses()) && DataHelper.eq(_options, info.getOptions()) - && DataHelper.eq(_peers, info.getPeers()); + && DataHelper.eq(getPeers(), info.getPeers()); } @Override @@ -530,7 +559,7 @@ public class RouterInfo extends DatabaseEntry { RouterAddress addr = (RouterAddress) iter.next(); buf.append("\n\t\tAddress: ").append(addr); } - Set peers = _peers; // getPeers() + Set peers = getPeers(); buf.append("\n\tPeers: #: ").append(peers.size()); for (Iterator iter = peers.iterator(); iter.hasNext();) { Hash hash = (Hash) iter.next(); From 9a63be8f6943c46039444c25e2552796ee6e00af Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 9 Jan 2011 01:03:05 +0000 Subject: [PATCH 06/28] * NetDB: Don't rescan netDb directory unless changed, to reduce Hash cache thrash (backport from test4) --- .../KademliaNetworkDatabaseFacade.java | 6 +- .../kademlia/PersistentDataStore.java | 57 +++++++++++-------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 0ae718104..e9e81b542 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -247,7 +247,11 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { _enforceNetId = DEFAULT_ENFORCE_NETID; _kb = new KBucketSet(_context, ri.getIdentity().getHash()); - _ds = new PersistentDataStore(_context, dbDir, this); + try { + _ds = new PersistentDataStore(_context, dbDir, this); + } catch (IOException ioe) { + throw new RuntimeException("Unable to initialize netdb storage", ioe); + } //_ds = new TransientDataStore(); // _exploreKeys = new HashSet(64); _dbDir = dbDir; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java index 429489cf0..064aac520 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java @@ -39,19 +39,22 @@ import net.i2p.util.SecureFileOutputStream; * */ class PersistentDataStore extends TransientDataStore { - private Log _log; - private String _dbDir; - private KademliaNetworkDatabaseFacade _facade; - private Writer _writer; - private ReadJob _readJob; + private final Log _log; + private final File _dbDir; + private final KademliaNetworkDatabaseFacade _facade; + private final Writer _writer; + private final ReadJob _readJob; private boolean _initialized; private final static int READ_DELAY = 60*1000; - public PersistentDataStore(RouterContext ctx, String dbDir, KademliaNetworkDatabaseFacade facade) { + /** + * @param dbDir relative path + */ + public PersistentDataStore(RouterContext ctx, String dbDir, KademliaNetworkDatabaseFacade facade) throws IOException { super(ctx); _log = ctx.logManager().getLog(PersistentDataStore.class); - _dbDir = dbDir; + _dbDir = getDbDir(dbDir); _facade = facade; _readJob = new ReadJob(); _context.jobQueue().addJob(_readJob); @@ -79,7 +82,6 @@ class PersistentDataStore extends TransientDataStore { @Override public void restart() { super.restart(); - _dbDir = _facade.getDbDir(); } @Override @@ -160,8 +162,7 @@ class PersistentDataStore extends TransientDataStore { if (_log.shouldLog(Log.INFO)) _log.info("Removing key " + _key /* , getAddedBy() */); try { - File dbDir = getDbDir(); - removeFile(_key, dbDir); + removeFile(_key, _dbDir); } catch (IOException ioe) { _log.error("Error removing key " + _key, ioe); } @@ -236,7 +237,10 @@ class PersistentDataStore extends TransientDataStore { if (key != null) { if (data != null) { - write(key, data); + // synch with the reader job + synchronized (_dbDir) { + write(key, data); + } data = null; } key = null; @@ -278,7 +282,6 @@ class PersistentDataStore extends TransientDataStore { File dbFile = null; try { String filename = null; - File dbDir = getDbDir(); if (data instanceof LeaseSet) filename = getLeaseSetName(key); @@ -287,7 +290,7 @@ class PersistentDataStore extends TransientDataStore { else throw new IOException("We don't know how to write objects of type " + data.getClass().getName()); - dbFile = new File(dbDir, filename); + dbFile = new File(_dbDir, filename); long dataPublishDate = getPublishDate(data); if (dbFile.lastModified() < dataPublishDate) { // our filesystem is out of date, lets replace it @@ -326,14 +329,26 @@ class PersistentDataStore extends TransientDataStore { /** This is only for manual reseeding? Why bother every 60 sec??? */ private class ReadJob extends JobImpl { private boolean _alreadyWarned; + private long _lastModified; + public ReadJob() { super(PersistentDataStore.this._context); _alreadyWarned = false; } + public String getName() { return "DB Read Job"; } + public void runJob() { - _log.info("Rereading new files"); - readFiles(); + // check directory mod time to save a lot of object churn in scanning all the file names + long lastMod = _dbDir.lastModified(); + if (lastMod > _lastModified) { + _lastModified = lastMod; + _log.info("Rereading new files"); + // synch with the writer job + synchronized (_dbDir) { + readFiles(); + } + } requeue(READ_DELAY); } @@ -343,9 +358,8 @@ class PersistentDataStore extends TransientDataStore { private void readFiles() { int routerCount = 0; - try { - File dbDir = getDbDir(); - File routerInfoFiles[] = dbDir.listFiles(RouterInfoFilter.getInstance()); + + File routerInfoFiles[] = _dbDir.listFiles(RouterInfoFilter.getInstance()); if (routerInfoFiles != null) { routerCount += routerInfoFiles.length; if (routerInfoFiles.length > 5) @@ -360,9 +374,6 @@ class PersistentDataStore extends TransientDataStore { } } } - } catch (IOException ioe) { - _log.error("Error reading files in the db dir", ioe); - } if (!_alreadyWarned) { ReseedChecker.checkReseed(_context, routerCount); @@ -442,8 +453,8 @@ class PersistentDataStore extends TransientDataStore { } - private File getDbDir() throws IOException { - File f = new SecureDirectory(_context.getRouterDir(), _dbDir); + private File getDbDir(String dbDir) throws IOException { + File f = new SecureDirectory(_context.getRouterDir(), dbDir); if (!f.exists()) { boolean created = f.mkdirs(); if (!created) From fd4e4fbc64d665b1f05fc4388a693121f58c006f Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 9 Jan 2011 01:04:06 +0000 Subject: [PATCH 07/28] * Data Structures: More caching improvements, don't cache where we shouldn't --- .../src/net/i2p/crypto/SHA256Generator.java | 11 ++++- .../net/i2p/data/i2np/I2NPMessageImpl.java | 43 +++++++++++++++---- .../i2p/router/tunnel/FragmentHandler.java | 9 ++-- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/core/java/src/net/i2p/crypto/SHA256Generator.java b/core/java/src/net/i2p/crypto/SHA256Generator.java index 8d5b6957b..87955646b 100644 --- a/core/java/src/net/i2p/crypto/SHA256Generator.java +++ b/core/java/src/net/i2p/crypto/SHA256Generator.java @@ -23,13 +23,18 @@ public final class SHA256Generator { return I2PAppContext.getGlobalContext().sha(); } - /** Calculate the SHA-256 has of the source + /** + * Calculate the SHA-256 hash of the source and cache the result. * @param source what to hash * @return hash of the source */ public final Hash calculateHash(byte[] source) { return calculateHash(source, 0, source.length); } + + /** + * Calculate the hash and cache the result. + */ public final Hash calculateHash(byte[] source, int start, int len) { Sha256Standalone digest = acquireGnu(); digest.update(source, start, len); @@ -39,6 +44,10 @@ public final class SHA256Generator { return Hash.create(rv); } + /** + * Use this if you only need the data, not a Hash object. + * Does not cache. + */ public final void calculateHash(byte[] source, int start, int len, byte out[], int outOffset) { Sha256Standalone digest = acquireGnu(); digest.update(source, start, len); diff --git a/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java b/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java index 6b4ab71f4..babf99dae 100644 --- a/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java +++ b/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java @@ -20,6 +20,7 @@ import net.i2p.data.DataHelper; import net.i2p.data.DataStructureImpl; import net.i2p.data.Hash; import net.i2p.util.Log; +import net.i2p.util.SimpleByteCache; /** * Defines the base message implementation. @@ -72,6 +73,7 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM * Read the header, then read the rest into buffer, then call * readMessage in the implemented message type * + *
      *  Specifically:
      *    1 byte type (if caller didn't read already, as specified by the type param
      *    4 byte ID
@@ -79,9 +81,11 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM
      *    2 byte size
      *    1 byte checksum
      *    size bytes of payload (read by readMessage() in implementation)
+     *
* * @param type the message type or -1 if we should read it here * @param buffer temp buffer to use + * @return total length of the message */ public int readBytes(InputStream in, int type, byte buffer[]) throws I2NPMessageException, IOException { try { @@ -110,9 +114,11 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM cur += numRead; } - Hash calc = _context.sha().calculateHash(buffer, 0, size); + byte[] calc = SimpleByteCache.acquire(Hash.HASH_LENGTH); + _context.sha().calculateHash(buffer, 0, size, calc, 0); //boolean eq = calc.equals(h); - boolean eq = DataHelper.eq(checksum, 0, calc.getData(), 0, CHECKSUM_LENGTH); + boolean eq = DataHelper.eq(checksum, 0, calc, 0, CHECKSUM_LENGTH); + SimpleByteCache.release(calc); if (!eq) throw new I2NPMessageException("Hash does not match for " + getClass().getName()); @@ -123,11 +129,29 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM //long time = _context.clock().now() - start; //if (time > 50) // _context.statManager().addRateData("i2np.readTime", time, time); - return size + Hash.HASH_LENGTH + 1 + 4 + DataHelper.DATE_LENGTH; + return CHECKSUM_LENGTH + 1 + 2 + 4 + DataHelper.DATE_LENGTH + size; } catch (DataFormatException dfe) { throw new I2NPMessageException("Error reading the message header", dfe); } } + + /** + * Read the header, then read the rest into buffer, then call + * readMessage in the implemented message type + * + *
+     *  Specifically:
+     *    1 byte type (if caller didn't read already, as specified by the type param
+     *    4 byte ID
+     *    8 byte expiration
+     *    2 byte size
+     *    1 byte checksum
+     *    size bytes of payload (read by readMessage() in implementation)
+     *
+ * + * @param type the message type or -1 if we should read it here + * @return total length of the message + */ public int readBytes(byte data[], int type, int offset) throws I2NPMessageException, IOException { int cur = offset; if (type < 0) { @@ -153,9 +177,10 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM + " cur=" + cur + " wanted=" + size + "]: " + getClass().getName()); - Hash calc = _context.sha().calculateHash(data, cur, size); - //boolean eq = calc.equals(h); - boolean eq = DataHelper.eq(hdata, 0, calc.getData(), 0, CHECKSUM_LENGTH); + byte[] calc = SimpleByteCache.acquire(Hash.HASH_LENGTH); + _context.sha().calculateHash(data, cur, size, calc, 0); + boolean eq = DataHelper.eq(hdata, 0, calc, 0, CHECKSUM_LENGTH); + SimpleByteCache.release(calc); if (!eq) throw new I2NPMessageException("Hash does not match for " + getClass().getName()); @@ -231,7 +256,8 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM try { int writtenLen = writeMessageBody(buffer, prefixLen); int payloadLen = writtenLen - prefixLen; - Hash h = _context.sha().calculateHash(buffer, prefixLen, payloadLen); + byte[] h = SimpleByteCache.acquire(Hash.HASH_LENGTH); + _context.sha().calculateHash(buffer, prefixLen, payloadLen, h, 0); int off = 0; DataHelper.toLong(buffer, off, 1, getType()); @@ -242,7 +268,8 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM off += DataHelper.DATE_LENGTH; DataHelper.toLong(buffer, off, 2, payloadLen); off += 2; - System.arraycopy(h.getData(), 0, buffer, off, CHECKSUM_LENGTH); + System.arraycopy(h, 0, buffer, off, CHECKSUM_LENGTH); + SimpleByteCache.release(h); //long time = _context.clock().now() - start; //if (time > 50) diff --git a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java index 7948c5387..b21ecc48c 100644 --- a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java +++ b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java @@ -15,6 +15,7 @@ import net.i2p.data.i2np.I2NPMessageHandler; import net.i2p.router.RouterContext; import net.i2p.util.ByteCache; import net.i2p.util.Log; +import net.i2p.util.SimpleByteCache; import net.i2p.util.SimpleTimer; /** @@ -241,19 +242,21 @@ public class FragmentHandler { if (_log.shouldLog(Log.DEBUG)) _log.debug("endpoint IV: " + Base64.encode(preV, validLength - HopProcessor.IV_LENGTH, HopProcessor.IV_LENGTH)); - Hash v = _context.sha().calculateHash(preV, 0, validLength); + byte[] v = SimpleByteCache.acquire(Hash.HASH_LENGTH); + _context.sha().calculateHash(preV, 0, validLength, v, 0); _validateCache.release(ba); - boolean eq = DataHelper.eq(v.getData(), 0, preprocessed, offset + HopProcessor.IV_LENGTH, 4); + boolean eq = DataHelper.eq(v, 0, preprocessed, offset + HopProcessor.IV_LENGTH, 4); if (!eq) { if (_log.shouldLog(Log.WARN)) { _log.warn("Corrupt tunnel message - verification fails: " + Base64.encode(preprocessed, offset+HopProcessor.IV_LENGTH, 4) - + " != " + Base64.encode(v.getData(), 0, 4)); + + " != " + Base64.encode(v, 0, 4)); _log.warn("No matching endpoint: # pad bytes: " + (paddingEnd-(HopProcessor.IV_LENGTH+4)-1) + " offset=" + offset + " length=" + length + " paddingEnd=" + paddingEnd + ' ' + Base64.encode(preprocessed, offset, length), new Exception("trace")); } } + SimpleByteCache.release(v); if (eq) { int excessPadding = paddingEnd - (HopProcessor.IV_LENGTH + 4 + 1); From a51ae64e41dd2f6616410b908bb873438712182c Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 9 Jan 2011 01:06:05 +0000 Subject: [PATCH 08/28] build tweak --- build.xml | 2 +- history.txt | 9 +++++++++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/build.xml b/build.xml index 9c8fa4c4f..83676a7c3 100644 --- a/build.xml +++ b/build.xml @@ -755,7 +755,7 @@ - + diff --git a/history.txt b/history.txt index 187b3623a..118de8648 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,12 @@ +2011-01-09 zzz + * DataHelper: Speed up and annotate sortStructures() + * Data Structures: More caching improvements, don't cache where we shouldn't + * NetDB: Don't rescan netDb directory unless changed, + to reduce Hash cache thrash (backport from test4) + * RouterInfo: + - Don't cache byteified data by default, to save ~1.5 MB + - Don't create empty peers Set, to save ~100KB + 2011-01-07 zzz * Data Structures: More caching * i2psnark: Improve request tracking to reduce memory usage diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index f2522cd4e..7ca1a3ec2 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 9; + public final static long BUILD = 10; /** for example "-test" */ public final static String EXTRA = ""; From c6a2e99a0d7fe8a9c5e52c0183a5198e89319b6f Mon Sep 17 00:00:00 2001 From: dev Date: Tue, 11 Jan 2011 17:51:29 +0000 Subject: [PATCH 09/28] Added Intel Atom as (pentium3) as prescribed by the libgmp configure scripts. --- .../freenet/support/CPUInformation/CPUID.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/core/java/src/freenet/support/CPUInformation/CPUID.java b/core/java/src/freenet/support/CPUInformation/CPUID.java index e3712e4ad..d8f8967fb 100644 --- a/core/java/src/freenet/support/CPUInformation/CPUID.java +++ b/core/java/src/freenet/support/CPUInformation/CPUID.java @@ -324,8 +324,16 @@ public class CPUID { return getCPUFamily() > 6 || (getCPUFamily() == 6 && getCPUModel() >=3); } public boolean IsPentium3Compatible() - { - return getCPUFamily() > 6 || (getCPUFamily() == 6 && getCPUModel() >=7); + { + // Atom + if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 10))){ + return true; + // ?? + } else if (getCPUFamily() > 6 || (getCPUFamily() == 6 && getCPUModel() >=7)){ + return true; + } else { + return false; + } } public boolean IsPentium4Compatible() { @@ -417,17 +425,18 @@ public class CPUID { case 15: return "Core 2 (Conroe)"; } - } - if (getCPUExtendedModel() == 1){ - switch(getCPUModel()){ - case 10: - return "Core i7"; - case 12: - return "Atom"; - case 13: - return "Xeon MP"; - } - } + } else { + if (getCPUExtendedModel() == 1){ + switch(getCPUModel()){ + case 10: + return "Core i7"; + case 12: + return "Atom"; + case 13: + return "Xeon MP"; + } + } + } } if(getCPUFamily() == 7){ switch(getCPUModel()){ From 4b85c569033fa391edf8bbb6842a286470e17532 Mon Sep 17 00:00:00 2001 From: z3d Date: Wed, 12 Jan 2011 12:48:16 +0000 Subject: [PATCH 10/28] Console themes: fix news headings. --- .../themes/console/classic/console.css | 14 +- .../resources/themes/console/dark/console.css | 2166 +++++++-------- .../themes/console/light/console.css | 2373 +++++++++-------- .../themes/console/midnight/console.css | 24 +- 4 files changed, 2309 insertions(+), 2268 deletions(-) diff --git a/installer/resources/themes/console/classic/console.css b/installer/resources/themes/console/classic/console.css index 0d301a879..1eed76faf 100644 --- a/installer/resources/themes/console/classic/console.css +++ b/installer/resources/themes/console/classic/console.css @@ -408,7 +408,19 @@ div.news li { } div.news h3 { - text-align: left !important; + background: none !important; + text-align: left; + border: none !important; + border-bottom: 1px dotted !important; + -moz-box-shadow: none; + -hktml-box-shadow: none; + box-shadow: none; + font-size: 10pt !important; + letter-spacing: 0.05em; + text-transform: capitalize !important; + text-shadow: none !important; + padding: 5px 10px 3px; + margin: 10px 10px -7px !important; } div.news p { diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index 8921b88c9..1cf5e3d87 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -1,1083 +1,1083 @@ -/* I2P Theme: Camo aka Dark */ -/* Description: Military Grade. */ -/* Comment: Thanks to Florian Kuhlmann for the hatface images. [ http://www.flickr.com/photos/floriankuhlmann/] -/* Author: dr|z3d */ - -body { - margin: 5px 0px 0 0px; - padding: 0; - text-align: center; - background: #010 url('images/camotile.png') center bottom; - color: #EE9; - font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - -} - -.hide { - display: none; -} - -img { - border: none; -} - -pre { - width: 98%; - overflow-x: scroll; - text-align: left; - font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #EE9; -} - -div.logo { - float: left; - padding: 10px; - text-align: center; - font-color: #EE9; - margin: 0 20px 0 20px; - border: 1px solid #494; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - background: #000; /*url("images/camotile2.png");*/ - width: 185px; - -moz-box-shadow: inset 0px 0px 1px 0px #009; - -khtml-box-shadow: inset 0px 0px 1px 0px #009; - box-shadow: inset 0px 0px 1px 0px #009; -} - -div.logo hr { - color: #494; - background: #494; - height: 1px; - border: 0px solid #494; - margin: 10px 0 5px; -} - -div.toolbar { - margin: 0; - padding: 10px; - font-weight: bold; - background: #000; - border: 1px solid #000; - display: none; -} - -div.toolbar a:link { - border: 1px outset #ddddc0; - padding: 0px 5px 1px 5px; - background: #bbf; - text-decoration: none; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - color: #000; -} - -div.toolbar a:visited { - background: #ddf; -} - -div.toolbar a:hover, button:hover{ - border: 1px solid #f60; - background: #030; - color: #f60; -} - -a:active{ - color: #900; -} - -div.routersummaryouter { - float: left; - width: 200px; - margin: 0 0 10px 5px; - padding: 0; - border: 0; - clear: left;/* fixes a bug in Opera */ - text-align: center; - display: block; -} - -div.routersummary { - width: 173px; - padding: 10px; - text-align: center; - border: 1px solid #494; - background: #000 url(images/camotile2.png); - color: #EE9; - font-size: 8pt; - clear: left;/* fixes a bug in Opera */ - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - float: left; - -moz-box-shadow: 0 1px 5px #000; - -khtml-box-shadow: 0 1px 5px #000; - box-shadow: 0 1px 5px #000; -} - -div.routersummary input[type=text] { - text-align: right !important; - -moz-box-shadow: inset 1px 1px 1px 0px #000; - -khtml-box-shadow: inset 1px 1px 1px 0px #000; - box-shadow: inset 1px 1px 1px 0px #000; -} - -div.routersummary hr { - color: #494; - background: #494; - height: 2px; - border-bottom: 1px solid #494; - margin: 8px -10px 7px -10px; - -moz-box-shadow: inset 0px 1px 1px 1px #000; - -khtml-box-shadow: inset 0px 1px 1px 1px #000; - box-shadow: inset 0px 1px 1px 1px #000; -} - -div.routersummary h3 { - border: 0; - font-size: 9.5pt; - letter-spacing: 0.04em; - margin: -7px -10px -8px -10px; - padding: 3px 0 4px 0 !important; - text-transform: uppercase; - -moz-border-radius: 0; - -khtml-border-radius: 0; - border-radius: 0; - background: #000 url('images/header.png') center center ; - background-image: -moz-linear-gradient(top, bottom, from(#050), to(#030), color-stop(7%, #000), color-stop(100%, #050)); -} - -div.routersummary h4 { - border: 0; - border-bottom: 0 !important; - font-size: 8.5pt; - letter-spacing: 0.02em; - margin: -7px -9px -10px -9px !important; - padding: 6px 3px 9px 3px; - background: #000; - text-transform: capitalize; - text-decoration: none !important; - color: #2b2; - background-image: -moz-linear-gradient(top, bottom, from(#000), to(#050), color-stop(10%, #050), color-stop(100%, #004)); - line-height: 100%; -} - -div.routersummary table { - border: 0; - text-align: center !important; - margin: -5px -7px -5px -8px !important; - width: 188px !important; - overflow: hidden; - font-size: 8pt; - padding: 0 -10px; - background-image: none !important; - background-color: transparent !important; -} - -div.routersummary tr { - background-image: none !important; - background-color: transparent !important; - border: 0 !important; -} - -div.routersummary form { - margin: -6px 0 -7px; -} - -div.routersummary form:first-child { - margin: 6px 0 -4px 0 !important; -} - -div.routersummary p { - padding: 0; -} - -div.refresh { - margin-top: -10px !important; - margin-bottom: -4px !important; - padding: 2px 0 0px 0 !important; -} - -div.routersummary a:link, div.routersummary a:visited { - text-shadow: 1px 1px 1px rgba(0, 16, 0, 0.8); - text-shadow: 0px 0px 2px #101 !important; -} - -div.routersummary a:hover { - text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7); - color: #f60; -} - -div.routersummary td { - padding: 0px 2px 0px 2px; - background-image: none !important; - border: 0 !important; -} - -div routersummary hr:last-child { - margin-top: 5px; - margin-bottom: -5px !important; -} - -div.tunnels { - padding-top: 3px !important; - margin-left: -4px; - text-align: center; -} - -div.tunnels table { - margin: -5px 0 -5px -3px !important; -} - -div.tunnels td { - padding: 1px 0px 1px 0px; -} - -div.tunnels td:first-child { - width: 16px; - text-align: left; - padding-right: 2px; -} - -div.tunnels td:last-child { - text-align: right; - padding-right: 1px; -} - -div.tunnels tr { -/* border: 1px solid #494 !important;*/ -} - -div.warning { - margin: 20px 20px 20px 245px; - padding: 5px 25px 20px 75px; - background: #000; - border: 1px solid #494; - text-align: left; - color: #EE9; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - text-align: justify; - background-image:url("../images/itoopie_sm.png"); - background-position:10px center; - background-repeat:no-repeat; - -moz-box-shadow: inset 0px 0px 0px 1px #f00; - -khtml-box-shadow: inset 0px 0px 0px 1px #f00; - box-shadow: inset 0px 0px 0px 1px #f00; - word-wrap: break-word; -} - -/* console error messages */ - -div.sorry { - margin: -1px 5px 10px 205px; - padding: 20px 20px 20px 75px; - background: #020; - border: 1px solid #494; - -moz-border-radius: 0 0 4px 4px; - -khtml-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; - text-align: justify; - background-image:url("images/errortriangle.png"); - background-position:15px center; - background-repeat:no-repeat; - -moz-box-shadow: inset 0px 0px 0px 1px #d00; - word-wrap: break-word; - font-weight: bold; - color: #EE9; -} - -div.sorry hr { - color: #EE9; - background: #EE9; - height: 1px; - border: 1px solid #EE9; - margin: 10px 0; -} - -div.main { - margin: -1px 5px 5px 205px; - padding: 0 15px 15px 15px; - text-align: left; - color: #EE9; - width: auto; -/* overflow-x: scroll; */ - border: 1px solid #494; - -moz-border-radius: 0 0 4px 4px; - -khtml-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; - background: #000 url(images/scarface.jpg) right bottom no-repeat !important; - min-width: 620px; - -moz-box-shadow: 0 1px 5px #000; -} - -div.main textarea { - background: #000; - color: #EE9; - font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; -} - -div.news { - margin: -1px 5px 0px 205px; - padding: 5px 30px 5px 30px; - border: 1px solid #494; - background: #000; - background: #000 url("images/news.png")no-repeat scroll bottom right; - color: #7b7; -/* border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - -khtml-border-radius: 4px 4px 0 0;*/ - font-size: 7.5pt; - text-align: right; - -moz-box-shadow: 0 1px 5px #000; - -khtml-box-shadow: 0 1px 5px #000; - box-shadow: 0 1px 5px #000; - min-width: 580px; -/* height: 164px; - overflow-y: auto;*/ -} - -div.news li { - text-align: justify; - list-style: url('images/info_dark.png'); - list-style: none; - margin: 0; - padding: 5px 5px 5px 0; - vertical-align: middle; - word-wrap: break-word; - color: #494; - font-weight: bold; - font-size: 9.5pt; - border-bottom: 1px dotted #494; - margin-bottom: 5px; - text-transform: capitalize; -} - -div.news h3 { - text-align: left !important; -} - -div.news h4 { - border-bottom: 1px; - border-bottom-style: dotted; - border-bottom-color: #494; - padding: 0 0 0px 0; - margin: 5px 0 10px 0; - font-size: 10pt; - opacity: 1; - text-transform: capitalize; -} - -div.news h4:first-child { - background: url('../images/itoopbullet.png'); - background-repeat: no-repeat; - background-position: right; -} - -div.news p { - margin-top: -5px; - font-size: 8.5pt; - color: #EE9; - margin-bottom: 0; -} - -div.news p:nth-child(n+1) { - margin-top: 5px; -} - -div.news hr { - margin: 8px 0 3px 0; -} - -div.confignav { - padding: 15px 10px !important; - margin: 15px 0; - background: #000 url('images/header.png') center center repeat-x ; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #494; - font-size: 9.5pt !important; - font-weight: bold !important; - line-height: 160% !important; - -} - -div.configure { -/* padding: 5px 15px 0 15px; - margin: 10px 0px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #494; */ - background: none;/* url(images/camotile2.png);*/ -} - -div.messages { - padding: 10px; - margin: 10px 0 15px 0; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #494; - background: #000 /*url('images/infotile.png') center left no-repeat;*/ - font-weight: bold; - font-size: 9pt; - color: #4f4; -} - -div.messages span.error { - color: #d90; -} - -div.messages span.notice { - font-style: italic; -} - -div.messages li { - text-align: justify !important; - font-weight: bold; - list-style: url(images/warning_dark.png) !important; - margin: 0 5px 0 50px !important; - padding: 0 10px 0 0 !important; - border: 0px !important; -} - -div.graphspanel { - padding: 0; - margin: 15px 0px -15px 0; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; -/* border: 1px solid #494;*/ - background: none;/* url(images/camotile.png);*/ - text-align: center; -} - -div.widepanel h3 { - text-align: left !important; -} - -div.graphspanel form { - text-align: left; - padding: 0 15px 0px 15px; -} - -div.graphspanel hr { - margin: 10px -15px 10px -15px; -} - -div.graphspanel img { - border: 1px solid #494; - padding: 3px; - margin: 5px; - text-align: center !important; - background: #000; - - opacity: 0.8; -} - -div.graphspanel img:hover { - border: 1px solid #000; - padding: 3px; - margin: 5px; - text-align: center !important; - background: #000; - -moz-box-shadow: inset 0px 0px 1px 1px #f60; - -khtml-box-shadow: inset 0px 0px 1px 1px #f60; - box-shadow: inset 0px 0px 1px 1px #f60; - opacity: 1; -} - -table { - border-collapse: collapse; - width: 100%; - border: 1px solid #494; - cell-padding: 1px; - font-size: 7pt; - background: #030; - margin: 1px 0; -} - -table hr { - padding: 0px 0; - color: #494; - background: #494; - border: 0px solid #494; - margin: 0px 0px; - height: 1px; - display: none; -} - -th { - padding: 6px 2px; - color: #EE9; - text-align: center; - font-size: 9pt; - background: #000; /*url('images/tabletitledark.png') repeat-x;*/ - background: #000 url('images/header.png') center center repeat-x ; - border-top: 1px solid #494; - border-bottom: 1px solid #494 !important; - line-height: 110%; -} - -tr { - vertical-align: middle; -} - -tr:nth-child(even) { - background: #010;/* url('images/darkerbluetile.png') !important;*/ - vertical-align: middle; -} - -tr:nth-child(odd) { - background: #000800;/* url('images/darkbluetile.png') !important;*/ - vertical-align: middle; -} -/* -tr:last-child { - background: #004 url('images/lightbluetile.png') !important; - font-weight: bold; - border: 1px solid #494 !important; -} -*/ -td { - padding: 4px 6px; - color: #EE9; - vertical-align: middle; - border-top: 1px inset #494; - border-bottom: 1px outset #494; -} - -td img { - padding: 0 1px 0 2px; -} - -tt { - font: bold 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #FF0; - padding: 0 5px 2px 0; -} - -div.main li { - text-align: left; - list-style: square; - margin: 2px 0px 2px 30px; - padding: 2px 20px 2px 0px; -/* line-height: 150%;*/ - word-wrap: break-word; -} - - -div.main li b { - color: #b70 !important; - letter-spacing: 0.07em; - font-size: 9pt; - text-shadow: 0 1px 1px #700; -} - -.tidylist { - text-align: justify !important; - line-height: 150%; -} - -.tidylist:first-child { -/* padding-top: 5px;*/ -} - -.tidylist:last-child { - padding-bottom: 10px; -} - -.tidylist code { - text-align: left; - font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #dd0; - padding: 1px 2px; - background: #030; - margin: 0 2px; -} - -ol { - display: inline; - margin: 1px 0 0 0; - padding: 1px 0 0 20px; -} - -ul { -/* display: inline; */ - margin: 0; - padding: 0; -} - -code { - text-align: left; - font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #dd0; - padding: 1px 2px; -} - -a:link, h2 a:link{ - color: #494; - text-decoration: none; - font-weight: bold; - word-wrap: break-word; -} - -a:visited{ - color: #7b7; - text-decoration: none; - font-weight: bold; - word-wrap: break-word; -} - -a:hover{ - color: #f60; - text-decoration: underline; - font-weight: bold; - word-wrap: break-word; -} - -.links { - padding-bottom: -2px; - text-align: justify; - margin-top: 10px; - margin-bottom: -10px; -} - -.links li { - list-style-image: url("images/link.png") !important; -} - -.links b{ - color: #b70 !important; - letter-spacing: 0.07em; - font-size: 9.5pt; - line-height: 165%; - text-shadow: 0 1px 1px #700; -} - -p { - text-align: justify; - line-height: 160%; -} - -h1 { - text-align: left; - color: #EE9; - padding: 15px 15px 14px; - margin: 0 5px 0px 205px !important; - font-size: 17pt; - font-weight: bold; - font-style: normal; - text-transform: uppercase; - letter-spacing: 0.15em; - text-shadow: 0px 0px 2px #010; - white-space: normal; - background: #000 url("images/scope.png")no-repeat scroll right top; - background: #000 url("images/bg2.png")no-repeat scroll top right; - background: #000 url('images/header.png') center center; - background-image: -moz-linear-gradient(top, bottom, from(#000), to(#030), color-stop(30%, #000), color-stop(100%, #000)); - border: 1px solid #494; - border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - -khtml-border-radius: 4px 4px 0 0; - line-height: 120%; - min-width: 620px; - -moz-box-shadow: 0 1px 5px #000; - -khtml-box-shadow: 0 1px 5px #000; - box-shadow: 0 1px 5px #000; -} - -h2 { - font-size: 12pt; - color: #EE9; - text-shadow: 0px 0px 2px #010; - letter-spacing: 0.05em; - background: #000 url(images/camotile2.png); - background-image: -moz-linear-gradient(top, bottom, from(#000), to(#030), color-stop(30%, #000), color-stop(100%, #000)); - background: #000 url('images/header.png') center center ; - padding: 10px; - wordwrap: none; - border: 1px solid #494; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - vertical-align: middle; - margin: 15px 0 12px 0 !important; - text-transform: uppercase; - word-wrap: break-word; -} - -h2 a:visited { - color: #191; -} - -h2 a:hover { - color: #f60; - text-shadow: 0px 0px 1px rgba(255, 64, 0, 0.7); -} - -h3 { - border: 1px solid #494; - border-left: 5px solid #494; - padding: 5px 6px; - margin: 12px 0 10px 0; - border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - -khtml-border-radius: 0 4px 4px 0; - background: #000 url(images/camotile.png); - background: #000 url('images/header.png') center center ; - text-transform: uppercase; - text-shadow: 0px 0px 2px #010; -} - -h4 { - border-bottom: 1px; - border-bottom-style: solid; - border-bottom-color: #494; - padding: 0 0 10px 0; - margin: 5px 0 10px 0; - font-size: 11pt; -} - -button, button:visited { - font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px outset #191; - padding: 1px 3px; - text-decoration: none; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - font-size: 8pt; - font-weight: bold; - margin: 2px 3px; - text-align: center; - vertical-align: middle; - min-width: 76px; - -moz-box-shadow: inset 0px 1px 1px 0px #494; - -khtml-box-shadow: inset 0px 1px 1px 0px #191; - box-shadow: inset 0px 1px 1px 0px #191; - background: #000; - color: #494; -} - -button:hover { - border: 1px solid #f60; - -moz-box-shadow: inset 0px 1px 1px 0px #EE9; - -khtml-box-shadow: inset 0px 1px 1px 0px #EE9; - box-shadow: inset 0px 1px 1px 0px #EE9; - background: #000; - color: #f60; -} - -button:active { - border: 1px inset #f60; - background: #f60; - color: #EE9; - -moz-box-shadow: inset 0px 0px 0px 0px #f60; - -khtml-box-shadow: inset 0px 0px 0px 0px #f60; - box-shadow: inset 0px 0px 0px 0px #f60; -} - -.underline { - border-bottom: 1px solid #eeeeff; - padding: 5px 0px 5px 0px; - margin: 0px 0px 10px 0px; -} - -.langbox { - margin: 21px 2px 2px 5px; - padding: 7px 10px 5px 10px; - color: #EE9; - font-size: 7pt; - width: 220px; - text-align: right; - float: right; - vertical-align: middle; -} - -.langbox img { - opacity: 0.5; - -moz-box-shadow: 0 0 1px #000; -} - -.langbox img:hover { - opacity: 1; - -moz-box-shadow: 0 0 1px #f60; -} - -hr { - color: #494; - background: #494; - height: 1px; - border: 0px solid #494; - margin: 20px 0 10px; -} - -hr:last-child { - margin-top: 20px; - margin-bottom: 20px; -} - -sidebarlogo { - text-align: center; -} - -input { - border: 1px outset #5f5; - -moz-box-shadow: inset 0px 1px 1px 0px #373; - -khtml-box-shadow: inset 0px 1px 1px 0px #373; - box-shadow: inset 0px 1px 1px 0px #373; - background: #000; - color: #494; - margin: 5px; - font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - padding: 1px 2px; - text-decoration: none; - min-width: 110px; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; -} - -input:hover { - background: #000; - color: #f60; - border: 1px solid #f60; - -moz-box-shadow: inset 0px 1px 1px 0px #9e9; - -khtml-box-shadow: inset 0px 1px 1px 0px #9e9; - box-shadow: inset 0px 1px 1px 0px #9e9; -} - -input:active { - background: #000; - color: #f30; - border: 1px solid #f30; -} - -input:active { - border: 1px inset #f60; - background: #f60; - color: #EE9; -} - -input[type=text], input[type=password] { - background: #000; - color: #EE9; - margin: 5px 10px; - padding: 4px 2px; - font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px solid #494 !important; - text-decoration: none; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - -moz-box-shadow: inset 1px 1px 1px 0px #000; - -khtml-box-shadow: inset 1px 1px 1px 0px #000; - box-shadow: inset 1px 1px 1px 0px #000; -} - -input[type=text]:active, input[type=text]:hover, input[type=password]:active, input[type=password]:hover { - background: #000; -} - -fieldset { -overflow: hidden; -position: relative; -} - -select { - background: #000; - color: #EE9; - margin: 5px 10px; - border: 1px solid #494; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - min-width: 110px; - font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - padding: 2px; -} - -textarea { - background: #000; - color: #EE9; - padding: 5px; - margin: 10px; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - min-height: 100px; - min-width: 97%; - text-align: left; - border: 1px solid #494; -} - -form {} - -.proxyfooter { - margin: 0 20px 10px 240px; - padding: 20px 25px 20px 75px; - font-color: #f00; - font-size: 7pt; - text-align: right !important; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border: 1px solid #000; - display: none; -} - -.statusnotes { - font-style: italic; - font-size: 8pt; - color: #EE9; - text-align: center; - border: 1px solid #494 !important; -/* border-top: 0px !important;*/ - margin: -3px 0 5px 0; - padding: 7px; - background: #010; - -moz-box-shadow: inset 0px 0px 0px 1px #090; - -khtml-box-shadow: inset 0px 0px 0px 1px #090; - box-shadow: inset 0px 0px 0px 1px #090; -/* background: #000 url('images/header.png') repeat-x center center !important;*/ -} - -div.joblog { -/* margin: 15px 0 15px 0; - padding: 5px 20px 10px 20px !important; - border: 1px solid #494; - background-color: #000; - background: #000; url("images/camotile.png");*/ -/* color: #dfd;*/ - border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - -khtml-border-radius: 4px 4px 0 0; - text-align: justify !important; - overflow-x: auto; /* Opera fix */ - } - -div.main li { - text-align: left; - list-style: square; - margin: 2px 0px 2px 30px; - padding: 2px 20px 2px 0px; -/* line-height: 150%;*/ - word-wrap: break-word; -} - -div.joblog li { - word-wrap: break-word !important; - text-align: justify !important; - line-height: 120% !important; - margin: 2px 0px 2px 30px; - padding: 2px 20px 2px 0px; -} - -div.joblog ul { - word-wrap: break-word !important; - text-align: justify; - margin: 0px 0 10px; -} - -div.joblog li:first-child { - margin-top: 0px; -} - -div.joblog li:last-child { -/* margin-bottom: -25px;*/ -} - -div.joblog form:first-child { - margin-top: 10px; -} - -div.joblog table { - margin-top: 15px; -} - -div.joblog p { - line-height: 130%; -} - -.smallhead { - font-size: 7pt -} - -.mediumtags { - font-size: 9pt; -} - -.optbox { - min-width: 16px !important; - max-width: 16px !important; - width: 16px !important; - min-height: 16px; - max-height: 16px; - height: 16px; - opacity: 1.0; - border: 0; - margin: 5px 5px 5px 10px; - padding: 2px; - overflow: hidden; - position: relative; -} - -.optbox:hover { - min-width: 16px !important; - max-width: 16px !important; - width: 16px !important; - min-height: 16px; - max-height: 16px; - height: 16px; - opacity: 1.0; - border: 0; - margin: 5px 5px 5px 10px; - padding: 2px; -} - -.cells { - border: 1px inset #494; - border-left: 1px outset #494; -} - -.tablefooter tr, .tablefooter td { - background: #000 url('images/header.png') repeat-x center center !important; - border-top: 1px solid #494; - border-bottom: 1px solid #494 !important; - font-size: 7pt; - line-height: 110%; -} - -.formaction { - text-align: right; -} - -div.footnote { - text-align: right; - color: #494; - font-size: 7pt; - margin-bottom: -8px !important; -} - -div.footnote hr{ - margin: 10px 0 5px 0 !important; - color: #494; - background: #494; - height: 1px; - border: 0px solid #494; -} - -.topness { - font-size: 7.5pt; - text-align: right; - margin-top: -5px; - margin-bottom: -5px; - margin-right: 5px; -} +/* I2P Theme: Camo aka Dark */ +/* Description: Military Grade. */ +/* Comment: Thanks to Florian Kuhlmann for the hatface images. [ http://www.flickr.com/photos/floriankuhlmann/] +/* Author: dr|z3d */ + +body { + margin: 5px 0px 0 0px; + padding: 0; + text-align: center; + background: #010 url('images/camotile.png') center bottom; + color: #EE9; + font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + +} + +.hide { + display: none; +} + +img { + border: none; +} + +pre { + width: 98%; + overflow-x: scroll; + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #EE9; +} + +div.logo { + float: left; + padding: 10px; + text-align: center; + font-color: #EE9; + margin: 0 20px 0 20px; + border: 1px solid #494; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + background: #000; /*url("images/camotile2.png");*/ + width: 185px; + -moz-box-shadow: inset 0px 0px 1px 0px #009; + -khtml-box-shadow: inset 0px 0px 1px 0px #009; + box-shadow: inset 0px 0px 1px 0px #009; +} + +div.logo hr { + color: #494; + background: #494; + height: 1px; + border: 0px solid #494; + margin: 10px 0 5px; +} + +div.toolbar { + margin: 0; + padding: 10px; + font-weight: bold; + background: #000; + border: 1px solid #000; + display: none; +} + +div.toolbar a:link { + border: 1px outset #ddddc0; + padding: 0px 5px 1px 5px; + background: #bbf; + text-decoration: none; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + color: #000; +} + +div.toolbar a:visited { + background: #ddf; +} + +div.toolbar a:hover, button:hover{ + border: 1px solid #f60; + background: #030; + color: #f60; +} + +a:active{ + color: #900; +} + +div.routersummaryouter { + float: left; + width: 200px; + margin: 0 0 10px 5px; + padding: 0; + border: 0; + clear: left;/* fixes a bug in Opera */ + text-align: center; + display: block; +} + +div.routersummary { + width: 173px; + padding: 10px; + text-align: center; + border: 1px solid #494; + background: #000 url(images/camotile2.png); + color: #EE9; + font-size: 8pt; + clear: left;/* fixes a bug in Opera */ + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + float: left; + -moz-box-shadow: 0 1px 5px #000; + -khtml-box-shadow: 0 1px 5px #000; + box-shadow: 0 1px 5px #000; +} + +div.routersummary input[type=text] { + text-align: right !important; + -moz-box-shadow: inset 1px 1px 1px 0px #000; + -khtml-box-shadow: inset 1px 1px 1px 0px #000; + box-shadow: inset 1px 1px 1px 0px #000; +} + +div.routersummary hr { + color: #494; + background: #494; + height: 2px; + border-bottom: 1px solid #494; + margin: 8px -10px 7px -10px; + -moz-box-shadow: inset 0px 1px 1px 1px #000; + -khtml-box-shadow: inset 0px 1px 1px 1px #000; + box-shadow: inset 0px 1px 1px 1px #000; +} + +div.routersummary h3 { + border: 0; + font-size: 9.5pt; + letter-spacing: 0.04em; + margin: -7px -10px -8px -10px; + padding: 3px 0 4px 0 !important; + text-transform: uppercase; + -moz-border-radius: 0; + -khtml-border-radius: 0; + border-radius: 0; + background: #000 url('images/header.png') center center ; + background-image: -moz-linear-gradient(top, bottom, from(#050), to(#030), color-stop(7%, #000), color-stop(100%, #050)); +} + +div.routersummary h4 { + border: 0; + border-bottom: 0 !important; + font-size: 8.5pt; + letter-spacing: 0.02em; + margin: -7px -9px -10px -9px !important; + padding: 6px 3px 9px 3px; + background: #000; + text-transform: capitalize; + text-decoration: none !important; + color: #2b2; + background-image: -moz-linear-gradient(top, bottom, from(#000), to(#050), color-stop(10%, #050), color-stop(100%, #004)); + line-height: 100%; +} + +div.routersummary table { + border: 0; + text-align: center !important; + margin: -5px -7px -5px -8px !important; + width: 188px !important; + overflow: hidden; + font-size: 8pt; + padding: 0 -10px; + background-image: none !important; + background-color: transparent !important; +} + +div.routersummary tr { + background-image: none !important; + background-color: transparent !important; + border: 0 !important; +} + +div.routersummary form { + margin: -6px 0 -7px; +} + +div.routersummary form:first-child { + margin: 6px 0 -4px 0 !important; +} + +div.routersummary p { + padding: 0; +} + +div.refresh { + margin-top: -10px !important; + margin-bottom: -4px !important; + padding: 2px 0 0px 0 !important; +} + +div.routersummary a:link, div.routersummary a:visited { + text-shadow: 1px 1px 1px rgba(0, 16, 0, 0.8); + text-shadow: 0px 0px 2px #101 !important; +} + +div.routersummary a:hover { + text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7); + color: #f60; +} + +div.routersummary td { + padding: 0px 2px 0px 2px; + background-image: none !important; + border: 0 !important; +} + +div routersummary hr:last-child { + margin-top: 5px; + margin-bottom: -5px !important; +} + +div.tunnels { + padding-top: 3px !important; + margin-left: -4px; + text-align: center; +} + +div.tunnels table { + margin: -5px 0 -5px -3px !important; +} + +div.tunnels td { + padding: 1px 0px 1px 0px; +} + +div.tunnels td:first-child { + width: 16px; + text-align: left; + padding-right: 2px; +} + +div.tunnels td:last-child { + text-align: right; + padding-right: 1px; +} + +div.tunnels tr { +/* border: 1px solid #494 !important;*/ +} + +div.warning { + margin: 20px 20px 20px 245px; + padding: 5px 25px 20px 75px; + background: #000; + border: 1px solid #494; + text-align: left; + color: #EE9; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + text-align: justify; + background-image:url("../images/itoopie_sm.png"); + background-position:10px center; + background-repeat:no-repeat; + -moz-box-shadow: inset 0px 0px 0px 1px #f00; + -khtml-box-shadow: inset 0px 0px 0px 1px #f00; + box-shadow: inset 0px 0px 0px 1px #f00; + word-wrap: break-word; +} + +/* console error messages */ + +div.sorry { + margin: -1px 5px 10px 205px; + padding: 20px 20px 20px 75px; + background: #020; + border: 1px solid #494; + -moz-border-radius: 0 0 4px 4px; + -khtml-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; + text-align: justify; + background-image:url("images/errortriangle.png"); + background-position:15px center; + background-repeat:no-repeat; + -moz-box-shadow: inset 0px 0px 0px 1px #d00; + word-wrap: break-word; + font-weight: bold; + color: #EE9; +} + +div.sorry hr { + color: #EE9; + background: #EE9; + height: 1px; + border: 1px solid #EE9; + margin: 10px 0; +} + +div.main { + margin: -1px 5px 5px 205px; + padding: 0 15px 15px 15px; + text-align: left; + color: #EE9; + width: auto; +/* overflow-x: scroll; */ + border: 1px solid #494; + -moz-border-radius: 0 0 4px 4px; + -khtml-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; + background: #000 url(images/scarface.jpg) right bottom no-repeat !important; + min-width: 620px; + -moz-box-shadow: 0 1px 5px #000; +} + +div.main textarea { + background: #000; + color: #EE9; + font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; +} + +div.news { + margin: -1px 5px 0px 205px; + padding: 5px 30px 5px 30px; + border: 1px solid #494; + background: #000; + background: #000 url("images/news.png")no-repeat scroll bottom right; + color: #7b7; + font-size: 7.5pt; + text-align: right; + -moz-box-shadow: 0 1px 5px #000; + -khtml-box-shadow: 0 1px 5px #000; + box-shadow: 0 1px 5px #000; + min-width: 590px; +} + +div.news li { + text-align: justify; + list-style: url('images/info_dark.png'); + list-style: none; + margin: 0; + padding: 5px 5px 5px 0; + vertical-align: middle; + word-wrap: break-word; + color: #494; + font-weight: bold; + font-size: 9.5pt; + border-bottom: 1px dotted #494; + margin-bottom: 5px; + text-transform: capitalize; +} + +div.news h3 { + background: none; + text-align: left; + border: none; + padding-left: 0; + padding-top: 2px; + border-bottom: 1px dotted; +} + +div.news h4 { + border-bottom: 1px; + border-bottom-style: dotted; + border-bottom-color: #494; + padding: 0 0 0px 0; + margin: 5px 0 10px 0; + font-size: 10pt; + opacity: 1; + text-transform: capitalize; +} + +div.news h4:first-child { + background: url('../images/itoopbullet.png'); + background-repeat: no-repeat; + background-position: right; +} + +div.news p { + margin-top: -5px; + font-size: 8.5pt; + color: #EE9; + margin-bottom: 0; +} + +div.news p:nth-child(n+1) { + margin-top: 5px; +} + +div.news hr { + margin: 8px 0 3px 0; +} + +div.confignav { + padding: 15px 10px !important; + margin: 15px 0; + background: #000 url('images/header.png') center center repeat-x ; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #494; + font-size: 9.5pt !important; + font-weight: bold !important; + line-height: 160% !important; + +} + +div.configure { +/* padding: 5px 15px 0 15px; + margin: 10px 0px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #494; */ + background: none;/* url(images/camotile2.png);*/ +} + +div.messages { + padding: 10px; + margin: 10px 0 15px 0; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #494; + background: #000 /*url('images/infotile.png') center left no-repeat;*/ + font-weight: bold; + font-size: 9pt; + color: #4f4; +} + +div.messages span.error { + color: #d90; +} + +div.messages span.notice { + font-style: italic; +} + +div.messages li { + text-align: justify !important; + font-weight: bold; + list-style: url(images/warning_dark.png) !important; + margin: 0 5px 0 50px !important; + padding: 0 10px 0 0 !important; + border: 0px !important; +} + +div.graphspanel { + padding: 0; + margin: 15px 0px -15px 0; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; +/* border: 1px solid #494;*/ + background: none;/* url(images/camotile.png);*/ + text-align: center; +} + +div.widepanel h3 { + text-align: left !important; +} + +div.graphspanel form { + text-align: left; + padding: 0 15px 0px 15px; +} + +div.graphspanel hr { + margin: 10px -15px 10px -15px; +} + +div.graphspanel img { + border: 1px solid #494; + padding: 3px; + margin: 5px; + text-align: center !important; + background: #000; + + opacity: 0.8; +} + +div.graphspanel img:hover { + border: 1px solid #000; + padding: 3px; + margin: 5px; + text-align: center !important; + background: #000; + -moz-box-shadow: inset 0px 0px 1px 1px #f60; + -khtml-box-shadow: inset 0px 0px 1px 1px #f60; + box-shadow: inset 0px 0px 1px 1px #f60; + opacity: 1; +} + +table { + border-collapse: collapse; + width: 100%; + border: 1px solid #494; + cell-padding: 1px; + font-size: 7pt; + background: #030; + margin: 1px 0; +} + +table hr { + padding: 0px 0; + color: #494; + background: #494; + border: 0px solid #494; + margin: 0px 0px; + height: 1px; + display: none; +} + +th { + padding: 6px 2px; + color: #EE9; + text-align: center; + font-size: 9pt; + background: #000; /*url('images/tabletitledark.png') repeat-x;*/ + background: #000 url('images/header.png') center center repeat-x ; + border-top: 1px solid #494; + border-bottom: 1px solid #494 !important; + line-height: 110%; +} + +tr { + vertical-align: middle; +} + +tr:nth-child(even) { + background: #010;/* url('images/darkerbluetile.png') !important;*/ + vertical-align: middle; +} + +tr:nth-child(odd) { + background: #000800;/* url('images/darkbluetile.png') !important;*/ + vertical-align: middle; +} +/* +tr:last-child { + background: #004 url('images/lightbluetile.png') !important; + font-weight: bold; + border: 1px solid #494 !important; +} +*/ +td { + padding: 4px 6px; + color: #EE9; + vertical-align: middle; + border-top: 1px inset #494; + border-bottom: 1px outset #494; +} + +td img { + padding: 0 1px 0 2px; +} + +tt { + font: bold 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #FF0; + padding: 0 5px 2px 0; +} + +div.main li { + text-align: left; + list-style: square; + margin: 2px 0px 2px 30px; + padding: 2px 20px 2px 0px; +/* line-height: 150%;*/ + word-wrap: break-word; +} + + +div.main li b { + color: #b70 !important; + letter-spacing: 0.07em; + font-size: 9pt; + text-shadow: 0 1px 1px #700; +} + +.tidylist { + text-align: justify !important; + line-height: 150%; +} + +.tidylist:first-child { +/* padding-top: 5px;*/ +} + +.tidylist:last-child { + padding-bottom: 10px; +} + +.tidylist code { + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #dd0; + padding: 1px 2px; + background: #030; + margin: 0 2px; +} + +ol { + display: inline; + margin: 1px 0 0 0; + padding: 1px 0 0 20px; +} + +ul { +/* display: inline; */ + margin: 0; + padding: 0; +} + +code { + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #dd0; + padding: 1px 2px; +} + +a:link, h2 a:link{ + color: #494; + text-decoration: none; + font-weight: bold; + word-wrap: break-word; +} + +a:visited{ + color: #7b7; + text-decoration: none; + font-weight: bold; + word-wrap: break-word; +} + +a:hover{ + color: #f60; + text-decoration: underline; + font-weight: bold; + word-wrap: break-word; +} + +.links { + padding-bottom: -2px; + text-align: justify; + margin-top: 10px; + margin-bottom: -10px; +} + +.links li { + list-style-image: url("images/link.png") !important; +} + +.links b{ + color: #b70 !important; + letter-spacing: 0.07em; + font-size: 9.5pt; + line-height: 165%; + text-shadow: 0 1px 1px #700; +} + +p { + text-align: justify; + line-height: 160%; +} + +h1 { + text-align: left; + color: #EE9; + padding: 15px 15px 14px; + margin: 0 5px 0px 205px !important; + font-size: 17pt; + font-weight: bold; + font-style: normal; + text-transform: uppercase; + letter-spacing: 0.15em; + text-shadow: 0px 0px 2px #010; + white-space: normal; + background: #000 url("images/scope.png")no-repeat scroll right top; + background: #000 url("images/bg2.png")no-repeat scroll top right; + background: #000 url('images/header.png') center center; + background-image: -moz-linear-gradient(top, bottom, from(#000), to(#030), color-stop(30%, #000), color-stop(100%, #000)); + border: 1px solid #494; + border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + -khtml-border-radius: 4px 4px 0 0; + line-height: 120%; + min-width: 620px; + -moz-box-shadow: 0 1px 5px #000; + -khtml-box-shadow: 0 1px 5px #000; + box-shadow: 0 1px 5px #000; +} + +h2 { + font-size: 12pt; + color: #EE9; + text-shadow: 0px 0px 2px #010; + letter-spacing: 0.05em; + background: #000 url(images/camotile2.png); + background-image: -moz-linear-gradient(top, bottom, from(#000), to(#030), color-stop(30%, #000), color-stop(100%, #000)); + background: #000 url('images/header.png') center center ; + padding: 10px; + wordwrap: none; + border: 1px solid #494; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + vertical-align: middle; + margin: 15px 0 12px 0 !important; + text-transform: uppercase; + word-wrap: break-word; +} + +h2 a:visited { + color: #191; +} + +h2 a:hover { + color: #f60; + text-shadow: 0px 0px 1px rgba(255, 64, 0, 0.7); +} + +h3 { + border: 1px solid #494; + border-left: 5px solid #494; + padding: 5px 6px; + margin: 12px 0 10px 0; + border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + -khtml-border-radius: 0 4px 4px 0; + background: #000 url(images/camotile.png); + background: #000 url('images/header.png') center center ; + text-transform: uppercase; + text-shadow: 0px 0px 2px #010; +} + +h4 { + border-bottom: 1px; + border-bottom-style: solid; + border-bottom-color: #494; + padding: 0 0 10px 0; + margin: 5px 0 10px 0; + font-size: 11pt; +} + +button, button:visited { + font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + border: 1px outset #191; + padding: 1px 3px; + text-decoration: none; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + font-size: 8pt; + font-weight: bold; + margin: 2px 3px; + text-align: center; + vertical-align: middle; + min-width: 76px; + -moz-box-shadow: inset 0px 1px 1px 0px #494; + -khtml-box-shadow: inset 0px 1px 1px 0px #191; + box-shadow: inset 0px 1px 1px 0px #191; + background: #000; + color: #494; +} + +button:hover { + border: 1px solid #f60; + -moz-box-shadow: inset 0px 1px 1px 0px #EE9; + -khtml-box-shadow: inset 0px 1px 1px 0px #EE9; + box-shadow: inset 0px 1px 1px 0px #EE9; + background: #000; + color: #f60; +} + +button:active { + border: 1px inset #f60; + background: #f60; + color: #EE9; + -moz-box-shadow: inset 0px 0px 0px 0px #f60; + -khtml-box-shadow: inset 0px 0px 0px 0px #f60; + box-shadow: inset 0px 0px 0px 0px #f60; +} + +.underline { + border-bottom: 1px solid #eeeeff; + padding: 5px 0px 5px 0px; + margin: 0px 0px 10px 0px; +} + +.langbox { + margin: 21px 2px 2px 5px; + padding: 7px 10px 5px 10px; + color: #EE9; + font-size: 7pt; + width: 220px; + text-align: right; + float: right; + vertical-align: middle; +} + +.langbox img { + opacity: 0.5; + -moz-box-shadow: 0 0 1px #000; +} + +.langbox img:hover { + opacity: 1; + -moz-box-shadow: 0 0 1px #f60; +} + +hr { + color: #494; + background: #494; + height: 1px; + border: 0px solid #494; + margin: 20px 0 10px; +} + +hr:last-child { + margin-top: 20px; + margin-bottom: 20px; +} + +sidebarlogo { + text-align: center; +} + +input { + border: 1px outset #5f5; + -moz-box-shadow: inset 0px 1px 1px 0px #373; + -khtml-box-shadow: inset 0px 1px 1px 0px #373; + box-shadow: inset 0px 1px 1px 0px #373; + background: #000; + color: #494; + margin: 5px; + font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + padding: 1px 2px; + text-decoration: none; + min-width: 110px; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; +} + +input:hover { + background: #000; + color: #f60; + border: 1px solid #f60; + -moz-box-shadow: inset 0px 1px 1px 0px #9e9; + -khtml-box-shadow: inset 0px 1px 1px 0px #9e9; + box-shadow: inset 0px 1px 1px 0px #9e9; +} + +input:active { + background: #000; + color: #f30; + border: 1px solid #f30; +} + +input:active { + border: 1px inset #f60; + background: #f60; + color: #EE9; +} + +input[type=text] { + background: #000; + color: #EE9; + margin: 5px 10px; + padding: 4px 2px; + font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + border: 1px solid #494 !important; + text-decoration: none; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + -moz-box-shadow: inset 1px 1px 1px 0px #000; + -khtml-box-shadow: inset 1px 1px 1px 0px #000; + box-shadow: inset 1px 1px 1px 0px #000; +} + +input[type=text]:active, input[type=text]:hover { + background: #000; +} + +fieldset { +overflow: hidden; +position: relative; +} + +select { + background: #000; + color: #EE9; + margin: 5px 10px; + border: 1px solid #494; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + min-width: 110px; + font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + padding: 2px; +} + +textarea { + background: #000; + color: #EE9; + padding: 5px; + margin: 10px; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + min-height: 100px; + min-width: 97%; + text-align: left; + border: 1px solid #494; +} + +form {} + +.proxyfooter { + margin: 0 20px 10px 240px; + padding: 20px 25px 20px 75px; + font-color: #f00; + font-size: 7pt; + text-align: right !important; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border: 1px solid #000; + display: none; +} + +.statusnotes { + font-style: italic; + font-size: 8pt; + color: #EE9; + text-align: center; + border: 1px solid #494 !important; +/* border-top: 0px !important;*/ + margin: -3px 0 5px 0; + padding: 7px; + background: #010; + -moz-box-shadow: inset 0px 0px 0px 1px #090; + -khtml-box-shadow: inset 0px 0px 0px 1px #090; + box-shadow: inset 0px 0px 0px 1px #090; +/* background: #000 url('images/header.png') repeat-x center center !important;*/ +} + +div.joblog { +/* margin: 15px 0 15px 0; + padding: 5px 20px 10px 20px !important; + border: 1px solid #494; + background-color: #000; + background: #000; url("images/camotile.png");*/ +/* color: #dfd;*/ + border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + -khtml-border-radius: 4px 4px 0 0; + text-align: justify !important; + overflow-x: auto; /* Opera fix */ + } + +div.main li { + text-align: left; + list-style: square; + margin: 2px 0px 2px 30px; + padding: 2px 20px 2px 0px; +/* line-height: 150%;*/ + word-wrap: break-word; +} + +div.joblog li { + word-wrap: break-word !important; + text-align: justify !important; + line-height: 120% !important; + margin: 2px 0px 2px 30px; + padding: 2px 20px 2px 0px; +} + +div.joblog ul { + word-wrap: break-word !important; + text-align: justify; + margin: 0px 0 10px; +} + +div.joblog li:first-child { + margin-top: 0px; +} + +div.joblog li:last-child { +/* margin-bottom: -25px;*/ +} + +div.joblog form:first-child { + margin-top: 10px; +} + +div.joblog table { + margin-top: 15px; +} + +div.joblog p { + line-height: 130%; +} + +.smallhead { + font-size: 7pt +} + +.mediumtags { + font-size: 9pt; +} + +.optbox { + min-width: 16px !important; + max-width: 16px !important; + width: 16px !important; + min-height: 16px; + max-height: 16px; + height: 16px; + opacity: 1.0; + border: 0; + margin: 5px 5px 5px 10px; + padding: 2px; + overflow: hidden; + position: relative; +} + +.optbox:hover { + min-width: 16px !important; + max-width: 16px !important; + width: 16px !important; + min-height: 16px; + max-height: 16px; + height: 16px; + opacity: 1.0; + border: 0; + margin: 5px 5px 5px 10px; + padding: 2px; +} + +.cells { + border: 1px inset #494; + border-left: 1px outset #494; +} + +.tablefooter tr, .tablefooter td { + background: #000 url('images/header.png') repeat-x center center !important; + border-top: 1px solid #494; + border-bottom: 1px solid #494 !important; + font-size: 7pt; + line-height: 110%; +} + +.formaction { + text-align: right; +} + +div.footnote { + text-align: right; + color: #494; + font-size: 7pt; + margin-bottom: -8px !important; +} + +div.footnote hr{ + margin: 10px 0 5px 0 !important; + color: #494; + background: #494; + height: 1px; + border: 0px solid #494; +} + +.topness { + font-size: 7.5pt; + text-align: right; + margin-top: -5px; + margin-bottom: -5px; + margin-right: 5px; +} \ No newline at end of file diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index fe8b61cb2..414b2ee6d 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -1,1179 +1,1194 @@ -/* I2P Theme: Light */ -/* Description: Light blue highlights. */ -/* Author: dr|z3d */ - -body { - margin: 10px 0px -10px 10px; - text-align: center; - background: #ffe url('images/snowcamo.png'); - color: #000; - font: 10pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - background: #99f url('images/magic.png') center bottom; -} - -.hide { - display: none; -} - -img { - border: none; -} - -pre { - width: 98%; - overflow: auto; - text-align: left; - font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #333; - margin: 10px; -} - -div.logo { - float: left; - padding: 10px; - text-align: center; - font-color: #fff; - margin: 0 10px; - border: 1px solid #447; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - background: #ffe; /*url('images/lightbluetile.png')*/ - width: 185px; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf; -} - -div.toolbar { - margin: 0; - padding: 10px; - font-weight: bold; - background: #ffe; - border: 1px solid #447; - display: none !important; -} - -div.toolbar a:link { - border: 1px outset #ddddc0; - padding: 0px 5px 1px 5px; - line-height: 250%; - background: #bbf; - text-decoration: none; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - display: none !important; -} - -div.toolbar a:visited { - background: #ffe; -} - -div.toolbar a:hover{ - border: 1px solid #eeffef; - background: #003; - color: #f60; -} - -a:active{ - color: #900; -} - -div.routersummaryouter { - float: left; - width: 200px; - margin: 0 0 10px 0px; - padding: 0; - border: 0; - clear: left;/* fixes a bug in Opera */ - text-align: center !important; - display: block; -} - -div.routersummary { -/* margin: 0px 20px 20px 0px; */ - width: 180px; - padding: 8px 8px 10px 8px; - text-align: center !important; - border: 1px solid #447; - color: #000; - font-size: 8pt; - clear: left;/* fixes a bug in Opera */ - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - background: #ffe url('images/magic.png') center bottom;/* - float: left; -*/ - -moz-box-shadow: inset 0px 0px 1px 1px #bbf; -} - -div.routersummary input[type=text] { - text-align: right !important; -} - -div.routersummary hr { - color: #99f; - background: #99f; - height: 1px; - border-bottom: 1px solid #99f; - margin: 8px -7px 8px -7px; - -moz-box-shadow: inset 0px 1px 1px 1px #fff; - -khtml-box-shadow: inset 0px 0px 1px #fff; - box-shadow: inset 0px 1px 1px 1px #fff; -} - -div routersummary hr:last-child { -} - -div.routersummary h3 { - border: 0; - font-size: 9.5pt; - letter-spacing: 0.04em; - margin: -4px -3px; - padding: 2px 0; - background: #ffe; - text-transform: uppercase; - background: #ffe url('images/header.png') center center repeat-x; - border: 1px solid #99f !important; - -moz-border-radius: 3px; - -khtml-border-radius: 3px; - border-radius: 3px; - -moz-box-shadow: 0px 1px 5px #bbf; -} - -div.routersummary h3 a { - text-decoration: none; -} - -div.routersummary h3:hover { - background: #ffa url('images/header.png') center center repeat-x !important; - text-shadow: 0 0 0; -} - -div.routersummary h4 { - border: 0px solid #fff; - border-bottom: 0 !important; - font-size: 8.5pt; - letter-spacing: 0.02em; - margin: -5px -7px -5px -7px !important; - padding: 3px 3px 5px 3px; - background: #eed url(images/magic.png); - text-transform: capitalize; - text-decoration: none !important; - color: #2b2; - line-height: 105%; -/* text-shadow: 0px 1px 1px #99f;*/ -} - -div.routersummary table { - border: 0; - text-align: center !important; - margin: -7px -5px -6px -5px; - width: 190px !important; - overflow: hidden; - font-size: 8pt; - padding: 0px -10px; - background-image: none !important; - background-color: transparent !important; -} - -div.routersummary tr { - background-image: none !important; - background-color: transparent !important; - border: 0 !important; -} - -div.routersummary td:first-child { - max-width: 90px; - overflow: hidden; -} - -div.routersummary a:hover { - color: #f60; -} - -div.routersummary td { - padding: 1px 3px; - background-image: none !important; - border: 0 !important; -} - -div.tunnels td:first-child { - width: 16px; - text-align: left; - padding-right: 1px; -} - -div.tunnels td:last-child { - text-align: right; - padding-right: 1px; -} - -div.tunnels img, div.tunnels img:hover { - opacity: 1 !important; -} - -div.routersummary img:first-child { - margin-bottom: -2px !important; - opacity: 0.7; -} - -div.routersummary img:hover:first-child { - margin-bottom: -2px !important; - opacity: 1; -} - -div.tunnels { - margin-top: 6px !important; - margin-left: -2px !important; - margin-bottom: 3px !important; - padding-top: 3px !important; -} - -div.tunnels table { - margin: -7px 0 -5px -4px !important; -} - -div.tunnels td, div.tunnels img:first-child { - margin: 0 !important; - text-transform: capitalize; -} - -.tunnels tr { - padding: 4px 0 !important; -} - -div.routersummary form { - margin: -6px 0 -5px 0; -} - -div.routersummary form:last-child { - margin: 6px 0 0 0 !important; - padding: 0; -} - -div.routersummary p { - padding: 0; -} - -div.refresh { - margin-top: -6px !important; - margin-bottom: 0px !important; - padding: 2px 0 0px 0 !important; -} - -/* proxy error messages */ - -div.warning { - margin: 20px 20px 30px 240px; - padding: 5px 25px 20px 75px; - background: #fff; - border: 1px solid #447; - text-align: left; - color: inherit; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - text-align: justify; - background-image:url("../images/itoopie_sm.png"); - background-position:10px center; - background-repeat:no-repeat; - -moz-box-shadow: inset 0px 0px 1px 0px #d00; - word-wrap: break-word; - min-width: 400px; -} - -/* console error messages */ - -div.sorry { - margin: 5px 10px 10px 207px; - padding: 20px 20px 20px 75px; - background: #ffe; - border: 1px solid #447; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - text-align: justify; - background-image: url("images/errortriangle.png"); - background-position: 15px center; - background-repeat: no-repeat; - -moz-box-shadow: inset 0px 0px 0px 1px #d00; - word-wrap: break-word; - font-weight: bold; - color: #531; -} - -div.sorry hr { - color: #531; - background: #531; - height: 1px; - border: 1px solid #531; - margin: 10px 0 15px 0; -} - -div.main { - margin: 10px 10px 20px 207px; - padding: 0 15px 15px 15px; - background: #ffe; - text-align: left; - color: #001; - width: auto; - min-width: 500px; - border: 1px solid #447; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf; - background: #ffe url('images/magic.png') center bottom;} - -div.main hr, hr { - color: #113; - background: #113; - height: 1px; - border: 0px solid #113; - margin: 10px 0; -} - -hr:last-child { - margin-top: 20px !important; -} - -div.main textarea { - background: #ffe; - color: #001; - font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; -} - -div.news { - margin: 0px 10px 5px 207px; - padding: 7px 20px 7px 20px; - border: 1px solid #447; - color: #224; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - text-align: right !important; - font-size: 7.5pt; - line-height: 140%; - -moz-box-shadow: inset 0px 0px 1px 0px #410; - background: #ffe url('images/magic.png') center bottom; - min-width: 480px; -} - -div.news p { - font-size: 9pt; - text-align: justify !important; - line-height: 120%; - margin-top: -7px; - padding: 0 15px; -} - -div.news h3 { - text-align: left !important; -} - -/* -div.news a:link{ - color: #a30; - text-decoration: none; -} - -div.news a:visited{ - color: #930; -} - -div.news a:hover{ - color: #d20; - text-decoration: underline; -} - -div.news a:active{ - color: #c30; -} -*/ - -div.news hr{ - color: #225; - background: #225; - height: 1px; - border: 0px dotted #225; - margin: 10px 0 5px; -/* -moz-box-shadow: 0px -1px 1px 1px #ffe;*/ - opacity: 0.6; -} - -div.news li { - text-align: justify; - list-style: none; - margin: 5px 0 16px 0 !important; - vertical-align: bottom; - border: 1px solid #113; - border-left: 5px solid #113; - padding: 5px 5px; - border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - -khtml-border-radius: 0 4px 4px 0; - font-size: 10pt; - opacity: 1; - background: #ffe url('images/header.png') center center repeat-x; - -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); - -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); - font-weight: bold; - text-transform: capitalize; -} - -div.news li:first-child { - margin-top: 10px !important; -} - -/* -div.news h4 a{ - color: #910 !important; - opacity: 1 !important; -} -*/ - -div.news h4 { - border-bottom: 0px; - padding: 0; - margin: 0 0 -10px 0; - font-size: 11pt; -} - -div.confignav { - padding: 15px 10px !important; - margin: 15px 0 15px 0; - background: #ffe url('images/header.png') center center repeat-x; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #113; - font-size: 9.5pt !important; - font-weight: bold !important; - line-height: 160% !important; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf; - min-width: 400px; -} - -div.configure { -/* padding: 5px 15px 0px 15px !important; - margin: 0px 0px 15px 0; - background: #ffe; url('images/lightbluetile.png') - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #447; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ - min-width: 400px; - margin-bottom: 0px; -} - -div.configure h3, div.graphspanel h3 { - border: 1px solid #113; - border-left: 5px solid #113; - padding: 5px; - margin: 15px 0 15px 0; - border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - -khtml-border-radius: 0 4px 4px 0; - background: #ffe; - text-align: left; -} - -div.graphspanel { -/* padding: 12px; - margin: 10px 0px 25px 0; - background: #ffe url('images/lightbluetile.png'); - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #447; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ - text-align: center !important; - margin: 15px 0px -15px; -} - -div.graphspanel img { - border: 1px solid #447; - padding: 2px; - margin: 6px; - text-align: center !important; - background: #001; - -moz-box-shadow: inset 0px 0px 1px 1px #99f; - opacity: 0.8; -} - -div.graphspanel img:hover { - border: 1px solid #447; - padding: 2px; - margin: 6px; - text-align: center !important; - background: #001; - -moz-box-shadow: inset 0px 0px 2px 1px #f60; - opacity: 1; -} - -div.graphspanel form { - text-align: left; -} - -div.messages { - padding: 10px; - margin: 10px 0 15px 0; - background: #ffe; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #447; - background: #ffe url('images/magic.png'); - font-weight: bold; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf; -} - -div.messages span.error { - color: #d00000; -} - -div.messages span.notice { - font-style: italic; -} - -div.messages li { - text-align: justify !important; - font-weight: bold; - list-style: url(images/warning.png) !important; - margin: 0 10px 0 35px !important; - padding: 5px 10px !important; - border: 0px !important; -} - -table { - border-collapse: collapse; - width: 100%; - border: 1px solid #447; - margin: 1px -15px 5px 0px; - cell-padding: 1px; - font-size: 7pt; - background: #b4c8ff url('images/tabletitlelight.png') repeat-x; - font: 7pt/130% "Lucida Sans Unicode", Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; -} - -table hr { - padding: 0px 0; - color: #99f; - background: #99f; - border: 0px solid #99f; - margin: 0px 0px; - height: 1px; - display: none; -} - -th { - padding: 6px 2px; - color: #000; - background: #ffe url('images/header.png') center center repeat-x; - text-align: center; - font-size: 9pt; - line-height: 110%; - border-bottom: 1px solid #447 !important; - border-top: 1px solid #447 !important; -} - -tr { - vertical-align: middle !important; - align: center; -} - -tr:nth-child(even) { - background: #eef url(images/magic.png); -} - -tr:nth-child(odd) { - background: #fff url(images/magic.png); -} -/* -tr:last-child { - background: #bbf url('images/tabletilelighter.png') !important; - font-weight: bold; - border: 1px solid #002 !important; -} -*/ -td { - padding: 5px 3px; - color: #000; - vertical-align: middle; - border-top: 1px inset #447; - border-bottom: 1px outset #99f; -} - -tt { - font: bold 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #008000; - padding: 1px 5px; -} - -div.main li { - text-align: left; - list-style: square; - margin: 2px 5px 0px 20px; - padding: 1px 10px 1px 10px; - line-height: 150%; - word-wrap: break-word; -} - -div.main li { - text-align: left; - list-style: square; - margin: 2px 20px 0px 40px; - padding: 1px 10px 1px 10px; - line-height: 150%; - word-wrap: break-word; -} - -div.main li b { - color: #514!important; - letter-spacing: 0.01em; - font-size: 9.5pt; - line-height: 170%; -} - -div.main li:first-child { - margin-top: 10px !important; -} -.tidylist { - text-align: justify !important; -} - -.tidylist li:first-child { - margin-top: -10px !important; -} - -.tidylist:last-child { - padding-bottom: 5px; -} - -.tidylist code { - text-align: left; - font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #910; - padding: 2px 3px; - background: #fff; - font-weight: bold; - background: #ffb url('images/magic.png') center bottom; -} - -ol { - - margin: 1px 0 0 5px; - padding: 1px 0 0 20px; -} - -ul { - display: inline; - margin: 0; - padding: 0; -} - -code { - text-align: left; - font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; -} - - -code { - text-align: left; - font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - color: #390; - padding: 2px 3px; - font-weight: bold; -} - -a:link{ - color: #359; - text-decoration: none; - font-weight: bold; - word-wrap: break-word; -} - -a:visited{ - color: #218; - text-decoration: none; - font-weight: bold; -} - -a:hover{ - color: #f60; - text-decoration: underline; - font-weight: bold; -} - -a:active{ - color: #f93; - text-decoration: underline; - font-weight: bold; -} - -.links li { - list-style: url(images/link.png) !important; - padding-bottom: -2px; - text-align: justify; - line-height: 120% !important; - padding-right: -100px !important; -} - -.links li:first-child { - padding-top: 0 !important; -} - -.links li:last-child { - padding-bottom: -15px !important; -} - -.links ul { - margin-top: -5px !important; -} - -p { - text-align: justify; - line-height: 160%; -} - -h1 { - text-align: left; - color: #000; - padding: 10px 15px; - margin: 0 10px 10px 207px; - font: normal bold 16pt/120% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - letter-spacing: 0.15em; - text-transform: uppercase; - text-shadow: 0px 0px 1px #77f; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf; - white-space: normal; - background: #ffe url('images/header.png') center center repeat-x; - border: 1px solid #447; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - min-width: 500px; -} - -h2 { - font-size: 13pt; - color: #000; - letter-spacing: 0.05em; - background: #ffe url('images/header.png') center center repeat-x; - text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5); - padding: 10px 10px; - wordwrap: none; - border: 1px solid #113; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - margin: 15px 0px 15px 0 !important; - -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); - word-wrap: break-word; - opacity: 1; -} - -h2 a:hover { - text-shadow: 0px 0px 1px rgba(255, 255, 72, 0.9); - border-bottom: 1px #ff6600; - padding-bottom: 5px; -} - -h2 img { - opacity: 0.9 !important; -} - -h3 { - border: 1px solid #113; - border-left: 5px solid #113; - padding: 5px 5px 5px 5px; - margin: 12px 0 15px 0; - border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - -khtml-border-radius: 0 4px 4px 0; - background: #ffe url('images/header.png') center center repeat-x !important; - font-size: 11pt; - color: #000; - -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); - opacity: 1; -} - -h4 { - border-bottom: 1px; - border-bottom-style: solid; - border-bottom-color: #447; - padding: 0 0 10px 0; - margin: 5px 0 10px 0; - font-size: 11pt; -} - -button, button:visited{ - font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px outset #999; - padding: 1px 3px; - background: #ffe !important; - text-decoration: none; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - font-size: 8pt; - font-weight: bold; - margin: 0 1px; - text-align: center; - min-width: 80px; - -moz-box-shadow: inset 0px 2px 8px 0px #fff; - -khtml-box-shadow: inset 0px 2px 8px 0px #fff; - box-shadow: inset 0px 2px 8px 0px #fff; - color: #316; -} - -button:hover{ - border: 1px solid #f60; - background: #f60 !important; - color: #fff; - -moz-box-shadow: inset 0px 0px 0px 1px #fff; - -khtml-box-shadow: inset 0px 0px 0px 1px #fff; - box-shadow: inset 0px 0px 0px 1px #fff; -} - -button:active{ - border: 1px solid #f60; - background: #202 !important; - color: #f60; - -moz-box-shadow: inset 0px 0px 0px 1px #f60; - box-shadow: inset 0px 0px 0px 1px #f60; - -khtml-box-shadow: inset 0px 0px 0px 1px #f60; -} - -.underline { - border-bottom: 1px solid #000022; - padding: 5px 0px 5px 0px; - margin: 0px 0px 10px 0px; -} - -.langbox { - margin: 20px 10px 4px 5px; - padding: 8px 5px; - color: #001; - font-size: 7pt; - width: 260px; - text-align: right; - float: right; - valign: middle; - opacity: 1 !important; -} - -.langbox img { - opacity: 0.8 !important; - -moz-box-shadow: 0 0 1px #447; -} - -.langbox img:hover { - opacity: 1 !important; - -moz-box-shadow: 0 0 1px #f60; -} - -input { - background: #ffe; - color: #316; - margin: 5px 10px 5px 10px; - padding: 4px 2px; - font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px solid #447; - text-decoration: none; - min-width: 110px; -} - -input, input:visited { - border: 1px outset #999; - background: #ffe; - color: #316; - margin: 5px; - font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - padding: 1px 2px; - text-decoration: none; - min-width: 110px; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - -moz-box-shadow: inset 0px 2px 8px 0px #fff; - color: #813 - opacity: 1; -} - - -input:hover { - background: #f60; - color: #fff; - border: 1px solid #f60; - opacity: 1.0; - -moz-box-shadow: inset 0px 0px 0px 1px #fff; - -} - -input:active { - background: #002; - color: #f60; - border: 1px solid #f60; - opacity: 1.0; - -moz-box-shadow: inset 0px 0px 0px 1px #f60; -} - -input[type=text], input[type=password] { - background: #ffe; - color: #001; - margin: 5px 10px 5px 10px; - padding: 4px 2px; - font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px solid #447; - text-decoration: none; -} - -submit { - background: #f00; - color: #ffe; - margin: 10px 2px 10px 0; - padding: 2px; - font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - font-weight: bold; - border: 1px solid #447; - text-decoration: none; -} - -input checkbox { - border: 0 !important; -} - -select { - background: #ffe; - color: #003; - margin: 5px 10px 5px 10px; - padding: 4px; - border: 1px solid #447; - min-width: 110px; - font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - text-align: left !important; -} - -textarea { - padding: 5px; - margin: 5px 15px 5px 10px; - background: #ffe; - color: #003; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - min-height: 100px; - min-width: 97%; - border: 1px solid #447; -} - -form {} - -.proxyfooter { - margin: 0 20px 10px 240px; - padding: 20px 25px 20px 75px; - font-color: #f00; - font-size: 7pt; - text-align: right !important; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border: 1px solid #447; - display: none; -} - -.statusnotes { - font-style: italic; - font-size: 8pt; - font-color: #001 !important; - text-align: center; - border: 1px solid #447 !important; - border-top: 0 !important; - margin: -5px 0 5px 0; - padding: 7px; - background: #ffe url('images/magic.png') center bottom; - -moz-box-shadow: inset 0px 0px 2px 1px #ffe; -} - -/* -.joblog { - margin: 15px 0; - padding: 10px 20px !important; - border: 1px solid #447; - background-color: #004; - background: #ffe url('images/lightbluetile.png'); - color: #001; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - text-align: justify; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf; - overflow: auto; - } - - div.joblog:li { - word-wrap: break-word !important; -} - - .joblog:ul { - word-wrap: break-word !important; -} - -.joblog table { - margin-top: 10px; -} -*/ - -div.joblog { -/* margin: 15px 0; - padding: 10px 20px !important; - border: 1px solid #447; - background-color: #004; - background: #ffe; /*url('images/lightbluetile.png') - color: #001; - border-radius: 4px; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - text-align: justify; - -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ - overflow: auto; - border: 0; - margin-top: 5px; - } - -div.joblog i { - color: #050; - font-weight: bold; -} - - div.joblog ul { - word-wrap: break-word !important; - text-align: justify; - line-height: 100% !important; - margin-top: -5px !important; -} - - div.joblog li { - word-wrap: break-word !important; - text-align: justify !important; - line-height: 115% !important; - padding: 0; - font-size: 9pt !important; -} - -div.joblog li:last-child { - margin-bottom: -5px; -} - -div.joblog li:first-child { - margin-top: 10px !important; -} - -div.joblog form:first-child { - margin-top: 10px; -} - -div.joblog table { - margin-top: 15px; -} - -div.joblog p { - line-height: 130%; -} - -div.joblog hr { - margin: 15px 0; -} - -div.joblog h3 { - margin-bottom: 5px; -} - -.smallhead { - font-size: 7pt -} - -.mediumtags { - font-size: 8pt; - font-style: italic; - font-weight: bold; -} - -.optbox { - min-width: 16px !important; - max-width: 16px !important; - width: 16px !important; - min-height: 16px; - max-height: 16px; - height: 16px; - opacity: 1.0; - border: 0; - margin: 5px 5px 5px 10px; - padding: 2px; -} - -.optbox:hover { - min-width: 16px !important; - max-width: 16px !important; - width: 16px !important; - min-height: 16px; - max-height: 16px; - height: 16px; - opacity: 1.0; - border: 0; - margin: 5px 5px 5px 10px; - padding: 2px; -} - -.cells { - border-left: 1px outset #bbf; - border-top: 1px inset #99f !important; - border-bottom: 1px inset #99f !important; -} - -.tablefooter { - background: #b4c8ff url('images/tabletitlelight.png') repeat-x; -} - -.tablefooter tr, .tablefooter td { - background: #ffe url('images/header.png') center center repeat-x; - border-top: 1px solid #447; - border-bottom: 1px solid #447 !important; - padding: 8px 2px !important; - font-size: 7pt; - line-height: 110%; -} - -.formaction { - text-align: right; -} - -div.footnote { - text-align: right; - color: #447; - font-size: 7pt; - margin-bottom: -5px !important; -} - -div.footnote hr{ - margin: 20px 0 5px 0 !important; - color: #447; - background: #447; - height: 1px; - border: 0px solid #447; -} - -.topness { - font-size: 7.5pt; - text-align: right; - margin-top: 0px; - margin-bottom: -18px; - margin-right: 5px; -} +/* I2P Theme: Light */ +/* Description: Light blue highlights. */ +/* Author: dr|z3d */ + +body { + margin: 10px 0px -10px 10px; + text-align: center; + background: #ffe url('images/snowcamo.png'); + color: #000; + font: 10pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + background: #99f url('images/magic.png') center bottom; +} + +.hide { + display: none; +} + +img { + border: none; +} + +pre { + width: 98%; + overflow: auto; + text-align: left; + font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #333; + margin: 10px; +} + +div.logo { + float: left; + padding: 10px; + text-align: center; + font-color: #fff; + margin: 0 10px; + border: 1px solid #447; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + background: #ffe; /*url('images/lightbluetile.png')*/ + width: 185px; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; +} + +div.toolbar { + margin: 0; + padding: 10px; + font-weight: bold; + background: #ffe; + border: 1px solid #447; + display: none !important; +} + +div.toolbar a:link { + border: 1px outset #ddddc0; + padding: 0px 5px 1px 5px; + line-height: 250%; + background: #bbf; + text-decoration: none; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + display: none !important; +} + +div.toolbar a:visited { + background: #ffe; +} + +div.toolbar a:hover{ + border: 1px solid #eeffef; + background: #003; + color: #f60; +} + +a:active{ + color: #900; +} + +div.routersummaryouter { + float: left; + width: 200px; + margin: 0 0 10px 0px; + padding: 0; + border: 0; + clear: left;/* fixes a bug in Opera */ + text-align: center !important; + display: block; +} + +div.routersummary { +/* margin: 0px 20px 20px 0px; */ + width: 180px; + padding: 8px 8px 10px 8px; + text-align: center !important; + border: 1px solid #447; + color: #000; + font-size: 8pt; + clear: left;/* fixes a bug in Opera */ + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + background: #ffe url('images/magic.png') center bottom;/* + float: left; +*/ + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; +} + +div.routersummary input[type=text] { + text-align: right !important; +} + +div.routersummary hr { + color: #99f; + background: #99f; + height: 1px; + border-bottom: 1px solid #99f; + margin: 8px -7px 8px -7px; + -moz-box-shadow: inset 0px 1px 1px 1px #fff; + -khtml-box-shadow: inset 0px 0px 1px #fff; + box-shadow: inset 0px 1px 1px 1px #fff; +} + +div routersummary hr:last-child { +} + +div.routersummary h3 { + border: 0; + font-size: 9.5pt; + letter-spacing: 0.04em; + margin: -4px -3px; + padding: 2px 0; + background: #ffe; + text-transform: uppercase; + background: #ffe url('images/header.png') center center repeat-x; + border: 1px solid #99f !important; + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0px 1px 5px #bbf; +} + +div.routersummary h3 a { + text-decoration: none; +} + +div.routersummary h3:hover { + background: #ffa url('images/header.png') center center repeat-x !important; + text-shadow: 0 0 0; +} + +div.routersummary h4 { + border: 0px solid #fff; + border-bottom: 0 !important; + font-size: 8.5pt; + letter-spacing: 0.02em; + margin: -5px -7px -5px -7px !important; + padding: 3px 3px 5px 3px; + background: #eed url(images/magic.png); + text-transform: capitalize; + text-decoration: none !important; + color: #2b2; + line-height: 105%; +/* text-shadow: 0px 1px 1px #99f;*/ +} + +div.routersummary table { + border: 0; + text-align: center !important; + margin: -7px -5px -6px -5px; + width: 190px !important; + overflow: hidden; + font-size: 8pt; + padding: 0px -10px; + background-image: none !important; + background-color: transparent !important; +} + +div.routersummary tr { + background-image: none !important; + background-color: transparent !important; + border: 0 !important; +} + +div.routersummary td:first-child { + max-width: 90px; + overflow: hidden; +} + +div.routersummary a:hover { + color: #f60; +} + +div.routersummary td { + padding: 1px 3px; + background-image: none !important; + border: 0 !important; +} + +div.tunnels td:first-child { + width: 16px; + text-align: left; + padding-right: 1px; +} + +div.tunnels td:last-child { + text-align: right; + padding-right: 1px; +} + +div.tunnels img, div.tunnels img:hover { + opacity: 1 !important; +} + +div.routersummary img:first-child { + margin-bottom: -2px !important; + opacity: 0.7; +} + +div.routersummary img:hover:first-child { + margin-bottom: -2px !important; + opacity: 1; +} + +div.tunnels { + margin-top: 6px !important; + margin-left: -2px !important; + margin-bottom: 3px !important; + padding-top: 3px !important; +} + +div.tunnels table { + margin: -7px 0 -5px -4px !important; +} + +div.tunnels td, div.tunnels img:first-child { + margin: 0 !important; + text-transform: capitalize; +} + +.tunnels tr { + padding: 4px 0 !important; +} + +div.routersummary form { + margin: -6px 0 -5px 0; +} + +div.routersummary form:last-child { + margin: 6px 0 0 0 !important; + padding: 0; +} + +div.routersummary p { + padding: 0; +} + +div.refresh { + margin-top: -6px !important; + margin-bottom: 0px !important; + padding: 2px 0 0px 0 !important; +} + +/* proxy error messages */ + +div.warning { + margin: 20px 20px 30px 240px; + padding: 5px 25px 20px 75px; + background: #fff; + border: 1px solid #447; + text-align: left; + color: inherit; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + text-align: justify; + background-image:url("../images/itoopie_sm.png"); + background-position:10px center; + background-repeat:no-repeat; + -moz-box-shadow: inset 0px 0px 1px 0px #d00; + word-wrap: break-word; + min-width: 400px; +} + +/* console error messages */ + +div.sorry { + margin: 5px 10px 10px 207px; + padding: 20px 20px 20px 75px; + background: #ffe; + border: 1px solid #447; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + text-align: justify; + background-image: url("images/errortriangle.png"); + background-position: 15px center; + background-repeat: no-repeat; + -moz-box-shadow: inset 0px 0px 0px 1px #d00; + word-wrap: break-word; + font-weight: bold; + color: #531; +} + +div.sorry hr { + color: #531; + background: #531; + height: 1px; + border: 1px solid #531; + margin: 10px 0 15px 0; +} + +div.main { + margin: 10px 10px 20px 207px; + padding: 0 15px 15px 15px; + background: #ffe; + text-align: left; + color: #001; + width: auto; + min-width: 500px; + border: 1px solid #447; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; + background: #ffe url('images/magic.png') center bottom;} + +div.main hr, hr { + color: #113; + background: #113; + height: 1px; + border: 0px solid #113; + margin: 10px 0; +} + +hr:last-child { + margin-top: 20px !important; +} + +div.main textarea { + background: #ffe; + color: #001; + font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; +} + +div.news { + margin: 0px 10px 5px 207px; + padding: 7px 20px 7px 20px; + border: 1px solid #447; + color: #224; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + text-align: right !important; + font-size: 7.5pt; + line-height: 140%; + -moz-box-shadow: inset 0px 0px 1px 0px #410; + background: #ffe url('images/magic.png') center bottom; + min-width: 480px; +} + +div.news p { + font-size: 9pt; + text-align: justify !important; + line-height: 120%; + margin-top: -7px; + padding: 0 15px; +} + +/* +div.news a:link{ + color: #a30; + text-decoration: none; +} + +div.news a:visited{ + color: #930; +} + +div.news a:hover{ + color: #d20; + text-decoration: underline; +} + +div.news a:active{ + color: #c30; +} +*/ + +div.news hr{ + color: #225; + background: #225; + height: 1px; + border: 0px dotted #225; + margin: 10px 0 5px; +/* -moz-box-shadow: 0px -1px 1px 1px #ffe;*/ + opacity: 0.6; +} + +div.news li { + text-align: justify; + list-style: none; + margin: 5px 0 16px 0 !important; + vertical-align: bottom; + border: 1px solid #113; + border-left: 5px solid #113; + padding: 5px 5px; + border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + -khtml-border-radius: 0 4px 4px 0; + font-size: 10pt; + opacity: 1; + background: #ffe url('images/header.png') center center repeat-x; + -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); + -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); + font-weight: bold; + text-transform: capitalize; +} + +div.news li:first-child { + margin-top: 10px !important; +} + +div.news h3 { + background: none !important; + text-align: left; + border: none !important; + padding-left: 0; + padding-top: 0px; + border-bottom: 1px dotted #225 !important; + -moz-box-shadow: none; + -hktml-box-shadow: none; + box-shadow: none; + font-size: 10pt !important; + letter-spacing: 0.05em; + text-transform: capitalize !important; +} + + +/* +div.news h4 a{ + color: #910 !important; + opacity: 1 !important; +} +*/ + +div.news h4 { + border-bottom: 0px; + padding: 0; + margin: 0 0 -10px 0; + font-size: 11pt; +} + +div.confignav { + padding: 15px 10px !important; + margin: 15px 0 15px 0; + background: #ffe url('images/header.png') center center repeat-x; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #113; + font-size: 9.5pt !important; + font-weight: bold !important; + line-height: 160% !important; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; + min-width: 400px; +} + +div.configure { +/* padding: 5px 15px 0px 15px !important; + margin: 0px 0px 15px 0; + background: #ffe; url('images/lightbluetile.png') + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #447; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ + min-width: 400px; + margin-bottom: 0px; +} + +div.configure h3, div.graphspanel h3 { + border: 1px solid #113; + border-left: 5px solid #113; + padding: 5px; + margin: 15px 0 15px 0; + border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + -khtml-border-radius: 0 4px 4px 0; + background: #ffe; + text-align: left; +} + +div.graphspanel { +/* padding: 12px; + margin: 10px 0px 25px 0; + background: #ffe url('images/lightbluetile.png'); + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #447; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ + text-align: center !important; + margin: 15px 0px -15px; +} + +div.graphspanel img { + border: 1px solid #447; + padding: 2px; + margin: 6px; + text-align: center !important; + background: #001; + -moz-box-shadow: inset 0px 0px 1px 1px #99f; + opacity: 0.8; +} + +div.graphspanel img:hover { + border: 1px solid #447; + padding: 2px; + margin: 6px; + text-align: center !important; + background: #001; + -moz-box-shadow: inset 0px 0px 2px 1px #f60; + opacity: 1; +} + +div.graphspanel form { + text-align: left; +} + +div.messages { + padding: 10px; + margin: 10px 0 15px 0; + background: #ffe; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #447; + background: #ffe url('images/magic.png'); + font-weight: bold; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; +} + +div.messages span.error { + color: #d00000; +} + +div.messages span.notice { + font-style: italic; +} + +div.messages li { + text-align: justify !important; + font-weight: bold; + list-style: url(images/warning.png) !important; + margin: 0 10px 0 35px !important; + padding: 5px 10px !important; + border: 0px !important; +} + +table { + border-collapse: collapse; + width: 100%; + border: 1px solid #447; + margin: 1px -15px 5px 0px; + cell-padding: 1px; + font-size: 7pt; + background: #b4c8ff url('images/tabletitlelight.png') repeat-x; + font: 7pt/130% "Lucida Sans Unicode", Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; +} + +table hr { + padding: 0px 0; + color: #99f; + background: #99f; + border: 0px solid #99f; + margin: 0px 0px; + height: 1px; + display: none; +} + +th { + padding: 6px 2px; + color: #000; + background: #ffe url('images/header.png') center center repeat-x; + text-align: center; + font-size: 9pt; + line-height: 110%; + border-bottom: 1px solid #447 !important; + border-top: 1px solid #447 !important; +} + +tr { + vertical-align: middle !important; + align: center; +} + +tr:nth-child(even) { + background: #eef url(images/magic.png); +} + +tr:nth-child(odd) { + background: #fff url(images/magic.png); +} +/* +tr:last-child { + background: #bbf url('images/tabletilelighter.png') !important; + font-weight: bold; + border: 1px solid #002 !important; +} +*/ +td { + padding: 5px 3px; + color: #000; + vertical-align: middle; + border-top: 1px inset #447; + border-bottom: 1px outset #99f; +} + +tt { + font: bold 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #008000; + padding: 1px 5px; +} + +div.main li { + text-align: left; + list-style: square; + margin: 2px 5px 0px 20px; + padding: 1px 10px 1px 10px; + line-height: 150%; + word-wrap: break-word; +} + +div.main li { + text-align: left; + list-style: square; + margin: 2px 20px 0px 40px; + padding: 1px 10px 1px 10px; + line-height: 150%; + word-wrap: break-word; +} + +div.main li b { + color: #514!important; + letter-spacing: 0.01em; + font-size: 9.5pt; + line-height: 170%; +} + +div.main li:first-child { + margin-top: 10px !important; +} +.tidylist { + text-align: justify !important; +} + +.tidylist li:first-child { + margin-top: -10px !important; +} + +.tidylist:last-child { + padding-bottom: 5px; +} + +.tidylist code { + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #910; + padding: 2px 3px; + background: #fff; + font-weight: bold; + background: #ffb url('images/magic.png') center bottom; +} + +ol { + + margin: 1px 0 0 5px; + padding: 1px 0 0 20px; +} + +ul { + display: inline; + margin: 0; + padding: 0; +} + +code { + text-align: left; + font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; +} + + +code { + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #390; + padding: 2px 3px; + font-weight: bold; +} + +a:link{ + color: #359; + text-decoration: none; + font-weight: bold; + word-wrap: break-word; +} + +a:visited{ + color: #218; + text-decoration: none; + font-weight: bold; +} + +a:hover{ + color: #f60; + text-decoration: underline; + font-weight: bold; +} + +a:active{ + color: #f93; + text-decoration: underline; + font-weight: bold; +} + +.links li { + list-style: url(images/link.png) !important; + padding-bottom: -2px; + text-align: justify; + line-height: 120% !important; + padding-right: -100px !important; +} + +.links li:first-child { + padding-top: 0 !important; +} + +.links li:last-child { + padding-bottom: -15px !important; +} + +.links ul { + margin-top: -5px !important; +} + +p { + text-align: justify; + line-height: 160%; +} + +h1 { + text-align: left; + color: #000; + padding: 10px 15px; + margin: 0 10px 10px 207px; + font: normal bold 16pt/120% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + letter-spacing: 0.15em; + text-transform: uppercase; + text-shadow: 0px 0px 1px #77f; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; + white-space: normal; + background: #ffe url('images/header.png') center center repeat-x; + border: 1px solid #447; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + min-width: 500px; +} + +h2 { + font-size: 13pt; + color: #000; + letter-spacing: 0.05em; + background: #ffe url('images/header.png') center center repeat-x; + text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5); + padding: 10px 10px; + wordwrap: none; + border: 1px solid #113; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + margin: 15px 0px 15px 0 !important; + -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); + word-wrap: break-word; + text-transform: uppercase; + opacity: 1; +} + +h2 a:hover { + text-shadow: 0px 0px 1px rgba(255, 255, 72, 0.9); + border-bottom: 1px #ff6600; + padding-bottom: 5px; +} + +h2 img { + opacity: 0.9 !important; +} + +h3 { + border: 1px solid #113; + border-left: 5px solid #113; + padding: 5px 5px 5px 5px; + margin: 12px 0 15px 0; + border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + -khtml-border-radius: 0 4px 4px 0; + background: #ffe url('images/header.png') center center repeat-x !important; + text-transform: uppercase; + text-shadow: 0px 0px 1px #77f; + font-size: 11pt; + color: #000; + -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); + opacity: 1; +} + +h4 { + border-bottom: 1px; + border-bottom-style: solid; + border-bottom-color: #447; + padding: 0 0 10px 0; + margin: 5px 0 10px 0; + font-size: 11pt; +} + +button, button:visited{ + font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + border: 1px outset #999; + padding: 1px 3px; + background: #ffe !important; + text-decoration: none; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + font-size: 8pt; + font-weight: bold; + margin: 0 1px; + text-align: center; + min-width: 80px; + -moz-box-shadow: inset 0px 2px 8px 0px #fff; + -khtml-box-shadow: inset 0px 2px 8px 0px #fff; + box-shadow: inset 0px 2px 8px 0px #fff; + color: #316; +} + +button:hover{ + border: 1px solid #f60; + background: #f60 !important; + color: #fff; + -moz-box-shadow: inset 0px 0px 0px 1px #fff; + -khtml-box-shadow: inset 0px 0px 0px 1px #fff; + box-shadow: inset 0px 0px 0px 1px #fff; +} + +button:active{ + border: 1px solid #f60; + background: #202 !important; + color: #f60; + -moz-box-shadow: inset 0px 0px 0px 1px #f60; + box-shadow: inset 0px 0px 0px 1px #f60; + -khtml-box-shadow: inset 0px 0px 0px 1px #f60; +} + +.underline { + border-bottom: 1px solid #000022; + padding: 5px 0px 5px 0px; + margin: 0px 0px 10px 0px; +} + +.langbox { + margin: 20px 10px 4px 5px; + padding: 8px 5px; + color: #001; + font-size: 7pt; + width: 260px; + text-align: right; + float: right; + valign: middle; + opacity: 1 !important; +} + +.langbox img { + opacity: 0.7 !important; + -moz-box-shadow: 0 0 1px #447; +} + +.langbox img:hover { + opacity: 1 !important; + -moz-box-shadow: 0 0 1px #f60; +} + +input { + background: #ffe; + color: #316; + margin: 5px 10px 5px 10px; + padding: 4px 2px; + font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + border: 1px solid #447; + text-decoration: none; + min-width: 110px; +} + +input, input:visited { + border: 1px outset #999; + background: #ffe; + color: #316; + margin: 5px; + font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + padding: 1px 2px; + text-decoration: none; + min-width: 110px; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + -moz-box-shadow: inset 0px 2px 8px 0px #fff; + color: #813 + opacity: 1; +} + + +input:hover { + background: #f60; + color: #fff; + border: 1px solid #f60; + opacity: 1.0; + -moz-box-shadow: inset 0px 0px 0px 1px #fff; + +} + +input:active { + background: #002; + color: #f60; + border: 1px solid #f60; + opacity: 1.0; + -moz-box-shadow: inset 0px 0px 0px 1px #f60; +} + +input[type=text] { + background: #ffe; + color: #001; + margin: 5px 10px 5px 10px; + padding: 4px 2px; + font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + border: 1px solid #447; + text-decoration: none; +} + +submit { + background: #f00; + color: #ffe; + margin: 10px 2px 10px 0; + padding: 2px; + font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + font-weight: bold; + border: 1px solid #447; + text-decoration: none; +} + +input checkbox { + border: 0 !important; +} + +select { + background: #ffe; + color: #003; + margin: 5px 10px 5px 10px; + padding: 4px; + border: 1px solid #447; + min-width: 110px; + font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + text-align: left !important; +} + +textarea { + padding: 5px; + margin: 5px 15px 5px 10px; + background: #ffe; + color: #003; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + min-height: 100px; + min-width: 97%; + border: 1px solid #447; +} + +form {} + +.proxyfooter { + margin: 0 20px 10px 240px; + padding: 20px 25px 20px 75px; + font-color: #f00; + font-size: 7pt; + text-align: right !important; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border: 1px solid #447; + display: none; +} + +.statusnotes { + font-style: italic; + font-size: 8pt; + font-color: #001 !important; + text-align: center; + border: 1px solid #447 !important; + border-top: 0 !important; + margin: -5px 0 5px 0; + padding: 7px; + background: #ffe url('images/magic.png') center bottom; + -moz-box-shadow: inset 0px 0px 2px 1px #ffe; +} + +/* +.joblog { + margin: 15px 0; + padding: 10px 20px !important; + border: 1px solid #447; + background-color: #004; + background: #ffe url('images/lightbluetile.png'); + color: #001; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + text-align: justify; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; + overflow: auto; + } + + div.joblog:li { + word-wrap: break-word !important; +} + + .joblog:ul { + word-wrap: break-word !important; +} + +.joblog table { + margin-top: 10px; +} +*/ + +div.joblog { +/* margin: 15px 0; + padding: 10px 20px !important; + border: 1px solid #447; + background-color: #004; + background: #ffe; /*url('images/lightbluetile.png') + color: #001; + border-radius: 4px; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + text-align: justify; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ + overflow: auto; + border: 0; + margin-top: 5px; + } + +div.joblog i { + color: #050; + font-weight: bold; +} + + div.joblog ul { + word-wrap: break-word !important; + text-align: justify; + line-height: 100% !important; + margin-top: -5px !important; +} + + div.joblog li { + word-wrap: break-word !important; + text-align: justify !important; + line-height: 115% !important; + padding: 0; + font-size: 9pt !important; +} + +div.joblog li:last-child { + margin-bottom: -5px; +} + +div.joblog li:first-child { + margin-top: 10px !important; +} + +div.joblog form:first-child { + margin-top: 10px; +} + +div.joblog table { + margin-top: 15px; +} + +div.joblog p { + line-height: 130%; +} + +div.joblog hr { + margin: 15px 0; +} + +div.joblog h3 { + margin-bottom: 5px; +} + +.smallhead { + font-size: 7pt +} + +.mediumtags { + font-size: 8pt; + font-style: italic; + font-weight: bold; +} + +.optbox { + min-width: 16px !important; + max-width: 16px !important; + width: 16px !important; + min-height: 16px; + max-height: 16px; + height: 16px; + opacity: 1.0; + border: 0; + margin: 5px 5px 5px 10px; + padding: 2px; +} + +.optbox:hover { + min-width: 16px !important; + max-width: 16px !important; + width: 16px !important; + min-height: 16px; + max-height: 16px; + height: 16px; + opacity: 1.0; + border: 0; + margin: 5px 5px 5px 10px; + padding: 2px; +} + +.cells { + border-left: 1px outset #bbf; + border-top: 1px inset #99f !important; + border-bottom: 1px inset #99f !important; +} + +.tablefooter { + background: #b4c8ff url('images/tabletitlelight.png') repeat-x; +} + +.tablefooter tr, .tablefooter td { + background: #ffe url('images/header.png') center center repeat-x; + border-top: 1px solid #447; + border-bottom: 1px solid #447 !important; + padding: 8px 2px !important; + font-size: 7pt; + line-height: 110%; +} + +.formaction { + text-align: right; +} + +div.footnote { + text-align: right; + color: #447; + font-size: 7pt; + margin-bottom: -5px !important; +} + +div.footnote hr{ + margin: 20px 0 5px 0 !important; + color: #447; + background: #447; + height: 1px; + border: 0px solid #447; +} + +.topness { + font-size: 7.5pt; + text-align: right; + margin-top: 0px; + margin-bottom: -18px; + margin-right: 5px; +} \ No newline at end of file diff --git a/installer/resources/themes/console/midnight/console.css b/installer/resources/themes/console/midnight/console.css index fbb7006f1..75632baf2 100644 --- a/installer/resources/themes/console/midnight/console.css +++ b/installer/resources/themes/console/midnight/console.css @@ -329,7 +329,7 @@ div.main { border-top: 0; text-align: left; color: #eef; - min-width: 570px; + min-width: 590px; /* -moz-border-radius: 0 0 3px 3px; -khtml-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px;*/ @@ -432,13 +432,27 @@ div.news li { } div.news h3 { - text-align: left !important; + background: none !important; + text-align: left; + border: none !important; + padding-left: 0; + padding-top: 0px; + border-bottom: 1px dotted !important; + -moz-box-shadow: none; + -hktml-box-shadow: none; + box-shadow: none; + font-size: 10pt !important; + letter-spacing: 0.05em; + text-transform: uppercase !important; + margin: 15px 10px -5px; + padding: 5px 0 5px; } div.news p { color: #eef; font-size: 9pt; margin-bottom: -10px; + margin-top: 10px; } /* div.news p:first-child { @@ -755,7 +769,7 @@ input { vertical-align: middle; } -input[type=text], input[type=password] { +input[type=text] { margin: 3px 5px 3px 5px; vertical-align: middle; } @@ -765,7 +779,7 @@ select { vertical-align: middle; } -input[type=text], input[type=password] select { +input[type=text], select { background: #001; color: #eef; border: 1px solid #99f; @@ -964,4 +978,4 @@ div.footnote hr{ margin-top: -5px; margin-bottom: -10px; margin-right: 5px; -} +} \ No newline at end of file From 1ad1883d563c1d4d1eaf4df8ff77fcd685f8e623 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 12 Jan 2011 13:27:55 +0000 Subject: [PATCH 11/28] fix hashCode --- core/java/src/net/i2p/data/PrivateKey.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/core/java/src/net/i2p/data/PrivateKey.java b/core/java/src/net/i2p/data/PrivateKey.java index bf415bdc9..5b0a5e4bb 100644 --- a/core/java/src/net/i2p/data/PrivateKey.java +++ b/core/java/src/net/i2p/data/PrivateKey.java @@ -16,6 +16,9 @@ import net.i2p.crypto.KeyGenerator; * A private key is 256byte Integer. The private key represents only the * exponent, not the primes, which are constant and defined in the crypto spec. * + * Note that we use short exponents, so all but the last 28.25 bytes are zero. + * See http://www.i2p2.i2p/how_cryptography for details. + * * @author jrandom */ public class PrivateKey extends SimpleDataStructure { @@ -50,4 +53,24 @@ public class PrivateKey extends SimpleDataStructure { return KeyGenerator.getPublicKey(this); } + /** + * We assume the data has enough randomness in it, so use the last 4 bytes for speed. + * Overridden since we use short exponents, so the first 227 bytes are all zero. + * Not that we are storing PrivateKeys in any Sets or Maps anywhere. + */ + @Override + public int hashCode() { + if (_data == null) + return 0; + int rv = _data[KEYSIZE_BYTES - 4]; + for (int i = 1; i < 4; i++) + rv ^= (_data[i + (KEYSIZE_BYTES - 4)] << (i*8)); + return rv; + } + + @Override + public boolean equals(Object obj) { + if ((obj == null) || !(obj instanceof PrivateKey)) return false; + return DataHelper.eq(_data, ((PrivateKey) obj)._data); + } } From 79bd5f1c116f40d699d0585f87cec17ebd8626d7 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 12 Jan 2011 13:28:32 +0000 Subject: [PATCH 12/28] fix log init problem --- core/java/src/net/i2p/util/LogManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index 49eaf291f..0ca7ef209 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -152,7 +152,9 @@ public class LogManager { if (_writer != null) return; _writer = new LogWriter(this); - Thread t = new I2PThread(_writer, "LogWriter", true); + // NOT an I2PThread, as it contains logging and we end up with problems + Thread t = new Thread(_writer, "LogWriter"); + t.setDaemon(true); t.start(); } From 330f1f341e1539926dd745ad0e4ca28ec3ba922f Mon Sep 17 00:00:00 2001 From: dev Date: Wed, 12 Jan 2011 20:06:22 +0000 Subject: [PATCH 13/28] Fixes to Atom identification. --- .../java/src/freenet/support/CPUInformation/CPUID.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/java/src/freenet/support/CPUInformation/CPUID.java b/core/java/src/freenet/support/CPUInformation/CPUID.java index d8f8967fb..921f497dd 100644 --- a/core/java/src/freenet/support/CPUInformation/CPUID.java +++ b/core/java/src/freenet/support/CPUInformation/CPUID.java @@ -326,10 +326,10 @@ public class CPUID { public boolean IsPentium3Compatible() { // Atom - if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 10))){ + if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 12))){ return true; // ?? - } else if (getCPUFamily() > 6 || (getCPUFamily() == 6 && getCPUModel() >=7)){ + } else if (getCPUExtendedModel() == 0 && (getCPUFamily() > 6 || (getCPUFamily() == 6 && getCPUModel() >=7))){ return true; } else { return false; @@ -337,13 +337,13 @@ public class CPUID { } public boolean IsPentium4Compatible() { - // P4 + // P4 if (getCPUFamily() >= 15){ return true; - // Xeon MP (45nm) or Core i7 + // Xeon MP (45nm) or Core i7 } else if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 10 || getCPUModel() == 13))){ return true; - // Core 2 Duo + // Core 2 Duo } else if (getCPUExtendedModel() == 0 && getCPUFamily() == 6 && getCPUModel() == 15){ return true; } else { From 9e2c063465a49e5cb863590536a13cb609017d0d Mon Sep 17 00:00:00 2001 From: z3d Date: Thu, 13 Jan 2011 04:35:30 +0000 Subject: [PATCH 14/28] Console: tunnelmanager a:link color consistency fix. --- .../themes/console/light/default.css | 773 +++++++++--------- 1 file changed, 389 insertions(+), 384 deletions(-) diff --git a/installer/resources/themes/console/light/default.css b/installer/resources/themes/console/light/default.css index cbe675c2b..d80cf3c1b 100644 --- a/installer/resources/themes/console/light/default.css +++ b/installer/resources/themes/console/light/default.css @@ -1,384 +1,389 @@ -body { - margin: 0px; - padding: 0px; - text-align: center; - font-family: "Lucida Sans Unicode", Verdana, Helvetica, sans-serif; - background: #eef url('images/snowcamo.png'); - color: #001; - font-size: 10pt; -/* we've avoided Tantek Hacks so far, - ** but we can't avoid using the non-w3c method of - ** box rendering. (and therefore one of mozilla's - ** proprietry -moz properties (which hopefully they'll - ** drop soon). - */ - -moz-box-sizing: border-box; - box-sizing: border-box; - background: #99f url(images/magic.png); -} - -div { - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -label { - margin: 0px 4px; - padding: 1px 10px 2px 0px; - float: left; - width: 120px; - height: 24px; - font-weight: normal; - text-align: right; - font-size: 8pt; - font-style: italic; - -moz-box-sizing: border-box; - box-sizing: border-box; - line-height: 120%; - color: #101; -} - -h4 { - font-size: 14px; - font-weight: bold !important; - color: #001; - text-align: center; - border: 1px solid #225; - margin: 5px 0 15px 0; - padding: 5px 10px; - background: #eef url(images/header.png) repeat-x center center; - letter-spacing: 0.08em; - -moz-box-shadow: inset 0px 0px 4px 0px #bbf; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; -} - -a { - text-decoration: none; -} - -form { - margin: 0px; -} - -textarea, input, select, button, a { - -moz-box-sizing: border-box; - box-sizing: border-box; - font-size: 9pt; - float: left; - vertical-align: middle; -} - -button { - float: none; - text-decoration: none; -} - -textarea { - border: 1px solid #9999ff; - color: #001; - background: #ddf; - border: 1px solid #44d; -} - -br { - clear: left; -} - -div.statusNotRunning { - float: left; - width: 68px; - height: 24px; - overflow: hidden; - color: #d00; - background: url('images/console_status_stopped.png') 0 0 no-repeat; - padding-top: 24px; - margin-top: 4px; -} - -div.statusRunning { - float: left; - width: 68px; - height: 24px; - overflow: hidden; - color: #0b0; - background: url('images/console_status_running.png') 0 0 no-repeat; - padding-top: 24px; - margin-top: 4px; -} - -div.statusStarting { - float: left; - width: 68px; - height: 24px; - overflow: hidden; - color: #339933; - background: url('images/console_status_starting.png') 0 0 no-repeat; - padding-top: 24px; - margin-top: 4px; -} - -hr { - display: none; -} - -.separator, .subdivider { - clear: both; - height: 1px; - margin: 1px 0px 1px 0px; - border-bottom: 1px solid #225; -/* - display: none; -*/ -} - -.subdivider { - border-bottom: 1px solid #225; - padding: 5px 0px 0px 0px; -} - -.freetext { - width: 150px; - height: 24px; - border: 1px solid #44d; - padding: 2px; - margin: 4px 0 2px 0px; - font: 10pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; - font-weight: bold; - background: #ddf; - color: #001; - -moz-border-radius: 0 4px 4px 0; - -khtml-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -/* - -moz-box-shadow: inset 0px -1px 1px 0px #fff; -*/ -} - -.control, control:link, control:visited { - margin: 4px 0 0 4px !important; - padding: 2px; - overflow: hidden; - min-width: 60px; - font-weight: bold; - background: #ffe; - color: #001; - border: 1px outset #ddddc0; - text-align: center; - white-space: nowrap; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - margin-top: 8px; - text-decoration: none; -} - -/* -.control:active { - border: 1px inset; - background-color: #003; - color: #f60; - text-decoration: none; -} -*/ -.control:hover, control:visited:hover { - border: 1px solid #eef; - background-color: #f60; - color: #fff !important; - text-decoration: none; -} - -.control:link, control:visited { - margin: 4px 0 0 4px !important; - padding: 2px; - overflow: hidden; - min-width: 60px; - font-weight: bold; - color: #001; - border: 1px outset #ddddc0; - text-align: center; - white-space: nowrap; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - margin-top: 8px; - background: #ffe url(images/header.png) center center repeat:x !important; - text-decoration: none; -} - -.panel { - width: 800px; - margin: 16px auto 16px auto; - overflow: hidden; - text-align: left !important; - font-size: 7pt; - background-color: #fff; - background: url(images/magic.png); - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - border: 1px solid #002; - padding: 10px 20px; - -moz-box-shadow: inset 0px 0px 1px 0px #002; - background: none repeat scroll 0 0 #EEEEFF; - background: #fff url(images/magic.png); - border: 1px solid #444477; - color: #000011; -} - -.panel .footer { - float: right; - padding: 4px; -} - -.toolbox { - float: right; -} - -.rowItem { - width: 750px; - float: left; - margin: 0px; -} - -.comment { - font-weight: bold; - display: block; - padding: 2px 10px 0 20px; - text-align: left; -} - -.text { - height: 24px; - width: 150px; - padding: 0 0 0 2px; - float: left; - margin: 0; - font-size: 9pt !important; - font-weight: bold; -} - -.accessKey { - text-decoration: underline; -} - -#globalOperationsPanel { - background-color: #fff; - border: 1px solid #003; - padding: 5px 20px 11px 10px; - - -moz-box-shadow: inset 0px 0px 0px 1px #f00; - -moz-box-shadow: inset 0px 0px 1px 0px #f60; - background: #fff url(images/magic.png); - border: 1px solid #444477; - color: #613; - -} - -#globalOperationsPanel .control { - min-width: 120px; -} - -#globalOperationsPanel .control:link { - min-width: 120px; -} - - -globalOperationsPanel .control:link { - min-width: 120px; - margin: 4px 0 0 4px !important; - padding: 2px; - overflow: hidden; - font-weight: bold; - background-color: #bbbbff; - color: black; - border: 1px outset #ddddc0; - text-align: center; - white-space: nowrap; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - margin-top: 8px; - background: #ffe url(images/header.png) 0 0 repeat: x !important; -} - - -globalOperationsPanel .control:visited { - min-width: 120px; - margin: 4px 0 0 4px !important; - padding: 2px; - overflow: hidden; - font-weight: bold; - background-color: #ffe; - color: black; - border: 1px outset #ddddc0; - text-align: center; - white-space: nowrap; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - margin-top: 8px; - background: url(images/header.png) 0 0 repeat: x !important; -} - -globalOperationsPanel .control:hover { - min-width: 120px; - margin: 4px 0 0 4px !important; - padding: 2px; - overflow: hidden; - font-weight: bold; - background-color: #003; - color: #f60; - border: 1px outset #fff; - text-align: center; - white-space: nowrap; - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; - margin-top: 8px; - background: url(images/header_on.png) 0 0 repeat: x !important; -} -.header { - -moz-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; -} - -select { - background-color: #eef; - color: #001; - margin: 4px; - font-family: "Lucida Sans Unicode", Verdana, Tahoma, Helvetica, sans-serif; - font-weight: bold; - border: 1px solid #001; - padding: 2px; - min-width: 270px; - font-size: 8pt; - max-height: 24px; -} - -a:link{ - color: #613; - text-decoration: none; - font-weight: bold; - word-wrap: break-word; -} - -a:visited{ - color: #606; - text-decoration: none; - font-weight: bold; -} - -a:hover{ - color: #f60; - text-decoration: underline; - font-weight: bold; -} - -a:active{ - color: #f93; - text-decoration: underline; - font-weight: bold; -} +/* I2P Tunnel Manager Theme: Light */ +/* Description: Light blue highlights. */ +/* Author: dr|z3d */ + +body { + margin: 0px; + padding: 0px; + text-align: center; + font-family: "Lucida Sans Unicode", Verdana, Helvetica, sans-serif; + background: #eef url('images/snowcamo.png'); + color: #001; + font-size: 10pt; +/* we've avoided Tantek Hacks so far, + ** but we can't avoid using the non-w3c method of + ** box rendering. (and therefore one of mozilla's + ** proprietry -moz properties (which hopefully they'll + ** drop soon). + */ + -moz-box-sizing: border-box; + box-sizing: border-box; + background: #99f url(images/magic.png); +} + +div { + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +label { + margin: 0px 4px; + padding: 1px 10px 2px 0px; + float: left; + width: 120px; + height: 24px; + font-weight: normal; + text-align: right; + font-size: 8pt; + font-style: italic; + -moz-box-sizing: border-box; + box-sizing: border-box; + line-height: 120%; + color: #101; +} + +h4 { + font-size: 14px; + font-weight: bold !important; + color: #001; + text-align: center; + border: 1px solid #225; + margin: 5px 0 15px 0; + padding: 5px 10px; + background: #eef url(images/header.png) repeat-x center center; + text-transform: uppercase; + letter-spacing: 0.08em; + -moz-box-shadow: inset 0px 0px 4px 0px #bbf; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; +} + +a { + text-decoration: none; +} + +form { + margin: 0px; +} + +textarea, input, select, button, a { + -moz-box-sizing: border-box; + box-sizing: border-box; + font-size: 9pt; + float: left; + vertical-align: middle; +} + +button { + float: none; + text-decoration: none; +} + +textarea { + border: 1px solid #9999ff; + color: #001; + background: #ddf; + border: 1px solid #44d; +} + +br { + clear: left; +} + +div.statusNotRunning { + float: left; + width: 68px; + height: 24px; + overflow: hidden; + color: #d00; + background: url('images/console_status_stopped.png') 0 0 no-repeat; + padding-top: 24px; + margin-top: 4px; +} + +div.statusRunning { + float: left; + width: 68px; + height: 24px; + overflow: hidden; + color: #0b0; + background: url('images/console_status_running.png') 0 0 no-repeat; + padding-top: 24px; + margin-top: 4px; +} + +div.statusStarting { + float: left; + width: 68px; + height: 24px; + overflow: hidden; + color: #339933; + background: url('images/console_status_starting.png') 0 0 no-repeat; + padding-top: 24px; + margin-top: 4px; +} + +hr { + display: none; +} + +.separator, .subdivider { + clear: both; + height: 1px; + margin: 1px 0px 1px 0px; + border-bottom: 1px solid #225; +/* + display: none; +*/ +} + +.subdivider { + border-bottom: 1px solid #225; + padding: 5px 0px 0px 0px; +} + +.freetext { + width: 150px; + height: 24px; + border: 1px solid #44d; + padding: 2px; + margin: 4px 0 2px 0px; + font: 10pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + font-weight: bold; + background: #ddf; + color: #001; + -moz-border-radius: 0 4px 4px 0; + -khtml-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +/* + -moz-box-shadow: inset 0px -1px 1px 0px #fff; +*/ +} + +.control, control:link, control:visited { + margin: 4px 0 0 4px !important; + padding: 2px; + overflow: hidden; + min-width: 60px; + font-weight: bold; + background: #ffe; + color: #001; + border: 1px outset #ddddc0; + text-align: center; + white-space: nowrap; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + margin-top: 8px; + text-decoration: none; +} + +/* +.control:active { + border: 1px inset; + background-color: #003; + color: #f60; + text-decoration: none; +} +*/ +.control:hover, control:visited:hover { + border: 1px solid #eef; + background-color: #f60; + color: #fff !important; + text-decoration: none; +} + +.control:link, control:visited { + margin: 4px 0 0 4px !important; + padding: 2px; + overflow: hidden; + min-width: 60px; + font-weight: bold; + color: #001; + border: 1px outset #ddddc0; + text-align: center; + white-space: nowrap; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + margin-top: 8px; + background: #ffe url(images/header.png) center center repeat:x !important; + text-decoration: none; +} + +.panel { + width: 800px; + margin: 16px auto 16px auto; + overflow: hidden; + text-align: left !important; + font-size: 7pt; + background-color: #fff; + background: url(images/magic.png); + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + border: 1px solid #002; + padding: 10px 20px; + -moz-box-shadow: inset 0px 0px 1px 0px #002; + background: none repeat scroll 0 0 #EEEEFF; + background: #fff url(images/magic.png); + border: 1px solid #444477; + color: #000011; +} + +.panel .footer { + float: right; + padding: 4px; +} + +.toolbox { + float: right; +} + +.rowItem { + width: 750px; + float: left; + margin: 0px; +} + +.comment { + font-weight: bold; + display: block; + padding: 2px 10px 0 20px; + text-align: left; +} + +.text { + height: 24px; + width: 150px; + padding: 0 0 0 2px; + float: left; + margin: 0; + font-size: 9pt !important; + font-weight: bold; +} + +.accessKey { + text-decoration: underline; +} + +#globalOperationsPanel { + background-color: #fff; + border: 1px solid #003; + padding: 5px 20px 11px 10px; + + -moz-box-shadow: inset 0px 0px 0px 1px #f00; + -moz-box-shadow: inset 0px 0px 1px 0px #f60; + background: #fff url(images/magic.png); + border: 1px solid #444477; + color: #613; + +} + +#globalOperationsPanel .control { + min-width: 120px; +} + +#globalOperationsPanel .control:link { + min-width: 120px; +} + + +globalOperationsPanel .control:link { + min-width: 120px; + margin: 4px 0 0 4px !important; + padding: 2px; + overflow: hidden; + font-weight: bold; + background-color: #bbbbff; + color: black; + border: 1px outset #ddddc0; + text-align: center; + white-space: nowrap; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + margin-top: 8px; + background: #ffe url(images/header.png) 0 0 repeat: x !important; +} + + +globalOperationsPanel .control:visited { + min-width: 120px; + margin: 4px 0 0 4px !important; + padding: 2px; + overflow: hidden; + font-weight: bold; + background-color: #ffe; + color: black; + border: 1px outset #ddddc0; + text-align: center; + white-space: nowrap; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + margin-top: 8px; + background: url(images/header.png) 0 0 repeat: x !important; +} + +globalOperationsPanel .control:hover { + min-width: 120px; + margin: 4px 0 0 4px !important; + padding: 2px; + overflow: hidden; + font-weight: bold; + background-color: #003; + color: #f60; + border: 1px outset #fff; + text-align: center; + white-space: nowrap; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + margin-top: 8px; + background: url(images/header_on.png) 0 0 repeat: x !important; +} +.header { + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; +} + +select { + background-color: #eef; + color: #001; + margin: 4px; + font-family: "Lucida Sans Unicode", Verdana, Tahoma, Helvetica, sans-serif; + font-weight: bold; + border: 1px solid #001; + padding: 2px; + min-width: 270px; + font-size: 8pt; + max-height: 24px; +} + +a:link{ + color: #359; + text-decoration: none; + font-weight: bold; + word-wrap: break-word; +} + +a:visited{ + color: #218; + text-decoration: none; + font-weight: bold; +} + +a:hover{ + color: #f60; + text-decoration: underline; + font-weight: bold; +} + +a:active{ + color: #f93; + text-decoration: underline; + font-weight: bold; +} From 4a85f30bf43d737e8d3056ab320d12af9ce42623 Mon Sep 17 00:00:00 2001 From: z3d Date: Thu, 13 Jan 2011 20:58:12 +0000 Subject: [PATCH 15/28] Light tweaks. --- .../themes/console/light/console.css | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index 414b2ee6d..55082b8b9 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -139,6 +139,7 @@ div.routersummary h3 { -khtml-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0px 1px 5px #bbf; + text-shadow: 0px 0px 1px #77f; } div.routersummary h3 a { @@ -752,13 +753,13 @@ p { h1 { text-align: left; - color: #000; + color: #003; padding: 10px 15px; margin: 0 10px 10px 207px; font: normal bold 16pt/120% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; letter-spacing: 0.15em; text-transform: uppercase; - text-shadow: 0px 0px 1px #77f; + text-shadow: 0px 1px 1px #77f; -moz-box-shadow: inset 0px 0px 1px 1px #bbf; white-space: normal; background: #ffe url('images/header.png') center center repeat-x; @@ -771,18 +772,18 @@ h1 { h2 { font-size: 13pt; - color: #000; - letter-spacing: 0.05em; + color: #003; + letter-spacing: 0.07em; background: #ffe url('images/header.png') center center repeat-x; - text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5); + text-shadow: 0px 1px 1px #77f; padding: 10px 10px; wordwrap: none; - border: 1px solid #113; + border: 1px solid #447; border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; margin: 15px 0px 15px 0 !important; - -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); + -moz-box-shadow: 0 2px 1px 1px rgba(176, 176, 216, 0.4); word-wrap: break-word; text-transform: uppercase; opacity: 1; @@ -799,8 +800,8 @@ h2 img { } h3 { - border: 1px solid #113; - border-left: 5px solid #113; + border: 1px solid #447; + border-left: 5px solid #447; padding: 5px 5px 5px 5px; margin: 12px 0 15px 0; border-radius: 0 4px 4px 0; @@ -808,11 +809,12 @@ h3 { -khtml-border-radius: 0 4px 4px 0; background: #ffe url('images/header.png') center center repeat-x !important; text-transform: uppercase; - text-shadow: 0px 0px 1px #77f; + text-shadow: 0px 1px 1px #77f; font-size: 11pt; - color: #000; - -moz-box-shadow: 0 1px 1px 1px rgba(176, 176, 216, 0.4); + color: #003; + -moz-box-shadow: 0 2px 1px 1px rgba(176, 176, 216, 0.4); opacity: 1; + letter-spacing: 0.07em; } h4 { From 9ea41b6e67abf29abbd109a03ac37e25ac1d06da Mon Sep 17 00:00:00 2001 From: z3d Date: Thu, 13 Jan 2011 21:27:10 +0000 Subject: [PATCH 16/28] More light tweaks. --- installer/resources/themes/console/light/console.css | 1 + 1 file changed, 1 insertion(+) diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index 55082b8b9..0d3dc5bb2 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -436,6 +436,7 @@ div.news h3 { font-size: 10pt !important; letter-spacing: 0.05em; text-transform: capitalize !important; + text-shadow: 0px 0px 0px #77f; } From 1aea5b3decb4177e8f06b630183376204f7aca77 Mon Sep 17 00:00:00 2001 From: z3d Date: Thu, 13 Jan 2011 21:39:04 +0000 Subject: [PATCH 17/28] Additional light tweaks. --- .../resources/themes/console/light/console.css | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index 0d3dc5bb2..f4261ed01 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -439,6 +439,9 @@ div.news h3 { text-shadow: 0px 0px 0px #77f; } +div.news i { + font-style: normal; +} /* div.news h4 a{ @@ -645,7 +648,8 @@ div.main li { } div.main li b { - color: #514!important; + color: #514 !important; + color: #003 !important; letter-spacing: 0.01em; font-size: 9.5pt; line-height: 170%; @@ -671,9 +675,8 @@ div.main li:first-child { font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; color: #910; padding: 2px 3px; - background: #fff; font-weight: bold; - background: #ffb url('images/magic.png') center bottom; +/* background: #ffb url('images/magic.png') center bottom;*/ } ol { @@ -777,7 +780,7 @@ h2 { letter-spacing: 0.07em; background: #ffe url('images/header.png') center center repeat-x; text-shadow: 0px 1px 1px #77f; - padding: 10px 10px; + padding: 10px; wordwrap: none; border: 1px solid #447; border-radius: 4px; @@ -803,7 +806,7 @@ h2 img { h3 { border: 1px solid #447; border-left: 5px solid #447; - padding: 5px 5px 5px 5px; + padding: 5px 5px 5px 10px; margin: 12px 0 15px 0; border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; From dc120847e1cc304b1c7a51341a4bc38347215668 Mon Sep 17 00:00:00 2001 From: z3d Date: Thu, 13 Jan 2011 22:16:43 +0000 Subject: [PATCH 18/28] Readme (en): Clarify "rejecting tunnels". --- installer/resources/readme/readme.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/resources/readme/readme.html b/installer/resources/readme/readme.html index 00667aea2..fec88a435 100644 --- a/installer/resources/readme/readme.html +++ b/installer/resources/readme/readme.html @@ -15,7 +15,7 @@

Welcome to the Invisible Internet

+
  • Network integration
    The first time you start I2P it may take a few minutes to bootstrap (integrate) you into the network and find additional peers to optimize your integration, so please be patient. When I2P starts up, and during normal operation, I2P's tunnel build readiness indicator (immediately above the Local Destinations section in the sidepanel) may tell you that it's "Rejecting Tunnels"; this is normal behavior if seen occasionally and just after I2P starts and should be of no cause for concern! Once green stars are indicated next to your Local Destinations, there is a wide variety of things you can do with I2P, and below we introduce you to some of them.
  • Services on I2P

    Services on I2P