code:
<?php

if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
    print "This script must be run from the command line\n";
    exit();
}

define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
define('GNUSOCIAL', true);
define('STATUSNET', true);  // compatibility

require_once INSTALLDIR . '/lib/common.php';

class URLDetectionTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider provider
     *
     */
    public function testProduction($content, $expected)
    {
        $rendered = common_render_text($content);
        // hack!
        $rendered = preg_replace('/id="attachment-\d+"/', 'id="attachment-XXX"', $rendered);
        $this->assertEquals($expected, $rendered);
    }

    static public function provider()
    {
        return array(
                     array('not a link :: no way',
                           'not a link :: no way'),
                     array('link http://www.somesite.com/xyz/35637563@N00/52803365/ link',
                           'link http://www.somesite.com/xyz/35637563@N00/52803365/ link'),
                     array('http://127.0.0.1',
                           'http://127.0.0.1'),
                     array('127.0.0.1',
                           '127.0.0.1'),
                     array('127.0.0.1:99',
                           '127.0.0.1:99'),
                     array('127.0.0.1/Name:test.php',
                           '127.0.0.1/Name:test.php'),
                     array('127.0.0.1/~test',
                           '127.0.0.1/~test'),
                     array('127.0.0.1/+test',
                           '127.0.0.1/+test'),
                     array('127.0.0.1/$test',
                           '127.0.0.1/$test'),
                     array('127.0.0.1/\'test',
                           '127.0.0.1/\'test'),
                     array('127.0.0.1/"test',
                           '127.0.0.1/"test'),
                     array('127.0.0.1/test"test',
                           '127.0.0.1/test"test'),
                     array('127.0.0.1/-test',
                           '127.0.0.1/-test'),
                     array('127.0.0.1/_test',
                           '127.0.0.1/_test'),
                     array('127.0.0.1/!test',
                           '127.0.0.1/!test'),
                     array('127.0.0.1/*test',
                           '127.0.0.1/*test'),
                     array('127.0.0.1/test%20stuff',
                           '127.0.0.1/test%20stuff'),
                     array('http://[::1]:99/test.php',
                           'http://[::1]:99/test.php'),
                     array('http://::1/test.php',
                           'http://::1/test.php'),
                     array('http://::1',
                           'http://::1'),
                     array('2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php',
                           '2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php'),
                     array('[2001:4978:1b5:0:21d:e0ff:fe66:59ab]:99/test.php',
                           '[2001:4978:1b5:0:21d:e0ff:fe66:59ab]:99/test.php'),
                     array('2001:4978:1b5:0:21d:e0ff:fe66:59ab',
                           '2001:4978:1b5:0:21d:e0ff:fe66:59ab'),
                     array('http://127.0.0.1',
                           'http://127.0.0.1'),
                     array('example.com',
                           'example.com'),
                     array('example.com',
                           'example.com'),
                     array('http://example.com',
                           'http://example.com'),
                     array('http://example.com.',
                           'http://example.com.'),
                     array('/var/lib/example.so',
                           '/var/lib/example.so'),
                     array('example',
                           'example'),
                     array('user@example.com',
                           'user@example.com'),
                     array('user_name+other@example.com',
                           'user_name+other@example.com'),
                     array('mailto:user@example.com',
                           'mailto:user@example.com'),
                     array('mailto:user@example.com?subject=test',
                           'mailto:user@example.com?subject=test'),
                     array('xmpp:user@example.com',
                           'xmpp:user@example.com'),
                     array('#example',
                           '# common_canonical_tag('example'))) . '" rel="tag">example'),
                     array('#example.com',
                           '# common_canonical_tag('example.com'))) . '" rel="tag">example.com'),
                     array('#.net',
                           '# common_canonical_tag('.net'))) . '" rel="tag">.net'),
                     array('http://example',
                           'http://example'),
                     array('http://3xampl3',
                           'http://3xampl3'),
                     array('http://example/',
                           'http://example/'),
                     array('http://example/path',
                           'http://example/path'),
                     array('http://example.com',
                           'http://example.com'),
                     array('https://example.com',
                           'https://example.com'),
                     array('ftp://example.com',
                           'ftp://example.com'),
                     array('ftps://example.com',
                           'ftps://example.com'),
                     array('http://user@example.com',
                           'http://user@example.com'),
                     array('http://user:pass@example.com',
                           'http://user:pass@example.com'),
                     array('http://example.com:8080',
                           'http://example.com:8080'),
                     array('http://example.com:8080/test.php',
                           'http://example.com:8080/test.php'),
                     array('example.com:8080/test.php',
                           'example.com:8080/test.php'),
                     array('http://www.example.com',
                           'http://www.example.com'),
                     array('http://example.com/',
                           'http://example.com/'),
                     array('http://example.com/path',
                           'http://example.com/path'),
                     array('http://example.com/path.html',
                           'http://example.com/path.html'),
                     array('http://example.com/path.html#fragment',
                           'http://example.com/path.html#fragment'),
                     array('http://example.com/path.php?foo=bar&bar=foo',
                           'http://example.com/path.php?foo=bar&bar=foo'),
                     array('http://example.com.',
                           'http://example.com.'),
                     array('http://müllärör.de',
                           'http://müllärör.de'),
                     array('http://ﺱﺲﺷ.com',
                           'http://ﺱﺲﺷ.com'),
                     array('http://сделаткартинки.com',
                           'http://сделаткартинки.com'),
                     array('http://tūdaliņ.lv',
                           'http://tūdaliņ.lv'),
                     array('http://brændendekærlighed.com',
                           'http://brændendekærlighed.com'),
                     array('http://あーるいん.com',
                           'http://あーるいん.com'),
                     array('http://예비교사.com',
                           'http://예비교사.com'),
                     array('http://example.com.',
                           'http://example.com.'),
                     array('http://example.com?',
                           'http://example.com?'),
                     array('http://example.com!',
                           'http://example.com!'),
                     array('http://example.com,',
                           'http://example.com,'),
                     array('http://example.com;',
                           'http://example.com;'),
                     array('http://example.com:',
                           'http://example.com:'),
                     array('\'http://example.com\'',
                           '\'http://example.com\''),
                     array('"http://example.com"',
                           '"http://example.com"'),
                     array('"http://example.com/"',
                           '"http://example.com/"'),
                     array('http://example.com',
                           'http://example.com'),
                     array('(http://example.com)',
                           '(http://example.com)'),
                     array('[http://example.com]',
                           '[http://example.com]'),
                     array('<http://example.com>',
                           '<http://example.com>'),
                     array('http://example.com/path/(foo)/bar',
                           'http://example.com/path/(foo)/bar'),
                     array('http://example.com/path/[foo]/bar',
                           'http://example.com/path/[foo]/bar'),
                     array('http://example.com/path/foo/(bar)',
                           'http://example.com/path/foo/(bar)'),
                     //Not a valid url - urls cannot contain unencoded square brackets
                     array('http://example.com/path/foo/[bar]',
                           'http://example.com/path/foo/[bar]'),
                     array('Hey, check out my cool site http://example.com okay?',
                           'Hey, check out my cool site http://example.com okay?'),
                     array('What about parens (e.g. http://example.com/path/foo/(bar))?',
                           'What about parens (e.g. http://example.com/path/foo/(bar))?'),
                     array('What about parens (e.g. http://example.com/path/foo/(bar)?',
                           'What about parens (e.g. http://example.com/path/foo/(bar)?'),
                     array('What about parens (e.g. http://example.com/path/foo/(bar).)?',
                           'What about parens (e.g. http://example.com/path/foo/(bar).)?'),
                     //Not a valid url - urls cannot contain unencoded commas
                     array('What about parens (e.g. http://example.com/path/(foo,bar)?',
                           'What about parens (e.g. http://example.com/path/(foo,bar)?'),
                     array('Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?',
                           'Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?'),
                     array('Unbalanced too (e.g. http://example.com/path/(foo))))/bar)?',
                           'Unbalanced too (e.g. http://example.com/path/(foo))))/bar)?'),
                     array('Unbalanced too (e.g. http://example.com/path/foo/((((bar)?',
                           'Unbalanced too (e.g. http://example.com/path/foo/((((bar)?'),
                     array('Unbalanced too (e.g. http://example.com/path/foo/(bar))))?',
                           'Unbalanced too (e.g. http://example.com/path/foo/(bar))))?'),
                     array('example.com',
                           'example.com'),
                     array('example.org',
                           'example.org'),
                     array('example.co.uk',
                           'example.co.uk'),
                     array('www.example.co.uk',
                           'www.example.co.uk'),
                     array('farm1.images.example.co.uk',
                           'farm1.images.example.co.uk'),
                     array('example.museum',
                           'example.museum'),
                     array('example.travel',
                           'example.travel'),
                     array('example.com.',
                           'example.com.'),
                     array('example.com?',
                           'example.com?'),
                     array('example.com!',
                           'example.com!'),
                     array('example.com,',
                           'example.com,'),
                     array('example.com;',
                           'example.com;'),
                     array('example.com:',
                           'example.com:'),
                     array('\'example.com\'',
                           '\'example.com\''),
                     array('"example.com"',
                           '"example.com"'),
                     array('example.com',
                           'example.com'),
                     array('(example.com)',
                           '(example.com)'),
                     array('[example.com]',
                           '[example.com]'),
                     array('<example.com>',
                           '<example.com>'),
                     array('Hey, check out my cool site example.com okay?',
                           'Hey, check out my cool site example.com okay?'),
                     array('Hey, check out my cool site example.com.I made it.',
                           'Hey, check out my cool site example.com.I made it.'),
                     array('Hey, check out my cool site example.com.Funny thing...',
                           'Hey, check out my cool site example.com.Funny thing...'),
                     array('Hey, check out my cool site example.com.You will love it.',
                           'Hey, check out my cool site example.com.You will love it.'),
                     array('What about parens (e.g. example.com/path/foo/(bar))?',
                           'What about parens (e.g. example.com/path/foo/(bar))?'),
                     array('What about parens (e.g. example.com/path/foo/(bar)?',
                           'What about parens (e.g. example.com/path/foo/(bar)?'),
                     array('What about parens (e.g. example.com/path/foo/(bar).)?',
                           'What about parens (e.g. example.com/path/foo/(bar).)?'),
                     array('What about parens (e.g. example.com/path/(foo,bar)?',
                           'What about parens (e.g. example.com/path/(foo,bar)?'),
                     array('file.ext',
                           'file.ext'),
                     array('file.html',
                           'file.html'),
                     array('file.php',
                           'file.php'),

                     // scheme-less HTTP URLs with @ in the path: http://status.net/open-source/issues/2248
                     array('http://flickr.com/photos/34807140@N05/3838905434',
                           'http://flickr.com/photos/34807140@N05/3838905434'),
                     array('flickr.com/photos/34807140@N05/3838905434',
                           'flickr.com/photos/34807140@N05/3838905434'),
                     );
    }
}


code:
<?php

if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
    print "This script must be run from the command line\n";
    exit();
}

define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
define('GNUSOCIAL', true);
define('STATUSNET', true);  // compatibility

require_once INSTALLDIR . '/lib/common.php';

class UUIDTest extends PHPUnit_Framework_TestCase
{
    public function testGenerate()
    {
        $result = UUID::gen();
        $this->assertRegExp('/^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$/',
                            $result);
        // Check version number
        $this->assertEquals(0x4000, hexdec(substr($result, 14, 4)) & 0xF000);
        $this->assertEquals(0x8000, hexdec(substr($result, 19, 4)) & 0xC000);
    }

    public function testUnique()
    {
        $reps = 100;
        $ids = array();

        for ($i = 0; $i < $reps; $i++) {
            $ids[] = UUID::gen();
        }

        $this->assertEquals(count($ids), count(array_unique($ids)), "UUIDs must be unique");
    }
}

license: mit


code:
<?php

if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
    print "This script must be run from the command line\n";
    exit();
}

define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
define('GNUSOCIAL', true);
define('STATUSNET', true);  // compatibility

require_once INSTALLDIR . '/lib/common.php';

class UserFeedParseTests extends PHPUnit_Framework_TestCase
{
    public function testFeed1()
    {
        global $_testfeed1;
        $dom = DOMDocument::loadXML($_testfeed1);
        $this->assertFalse(empty($dom));

        $entries = $dom->getElementsByTagName('entry');

        $entry1 = $entries->item(0);
        $this->assertFalse(empty($entry1));

        $feedEl = $dom->getElementsByTagName('feed')->item(0);
        $this->assertFalse(empty($feedEl));

        // Test actor (from activity:subject)

        $act1 = new Activity($entry1, $feedEl);
        $this->assertFalse(empty($act1));
        $this->assertFalse(empty($act1->actor));
        $this->assertEquals($act1->actor->type, ActivityObject::PERSON);
        $this->assertEquals($act1->actor->title, 'Zach Copley');
        $this->assertEquals($act1->actor->id, 'http://localhost/statusnet/user/1');
        $this->assertEquals($act1->actor->link, 'http://localhost/statusnet/zach');

        $avatars = $act1->actor->avatarLinks;

        $this->assertEquals(
                $avatars[0]->url,
                'http://localhost/statusnet/theme/default/default-avatar-profile.png'
        );

        $this->assertEquals(
                $avatars[1]->url,
                'http://localhost/statusnet/theme/default/default-avatar-stream.png'
        );

        $this->assertEquals(
                $avatars[2]->url,
                'http://localhost/statusnet/theme/default/default-avatar-mini.png'
        );

        $this->assertEquals($act1->actor->displayName, 'Zach Copley');

        $poco = $act1->actor->poco;
        $this->assertEquals($poco->preferredUsername, 'zach');
        $this->assertEquals($poco->address->formatted, 'El Cerrito, CA');
        $this->assertEquals($poco->urls[0]->type, 'homepage');
        $this->assertEquals($poco->urls[0]->value, 'http://zach.copley.name');
        $this->assertEquals($poco->urls[0]->primary, 'true');
        $this->assertEquals($poco->note, 'Zach Hack Attack');

        // test the post

        //var_export($act1);
        $this->assertEquals($act1->objects[0]->type, 'http://activitystrea.ms/schema/1.0/note');
        $this->assertEquals($act1->objects[0]->title, 'And now for something completely insane...');

        $this->assertEquals($act1->objects[0]->content, 'And now for something completely insane...');
        $this->assertEquals($act1->objects[0]->id, 'http://localhost/statusnet/notice/3');

    }

}

$_testfeed1 = <<<TESTFEED1
<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0">
 <id>http://localhost/statusnet/api/statuses/user_timeline/1.atom</id>
 <title>zach timeline</title>
 <subtitle>Updates from zach on Zach Dev!</subtitle>
 <logo>http://localhost/statusnet/theme/default/default-avatar-profile.png</logo>
 <updated>2010-03-04T01:41:14+00:00</updated>
<author>
 <name>zach</name>
 <uri>http://localhost/statusnet/user/1</uri>

</author>
 <link href="http://localhost/statusnet/zach" rel="alternate" type="text/html"/>
 <link href="http://localhost/statusnet/main/sup#1" rel="http://api.friendfeed.com/2008/03#sup" type="application/json"/>
 <link href="http://localhost/statusnet/main/push/hub" rel="hub"/>
 <link href="http://localhost/statusnet/main/salmon/user/1" rel="http://salmon-protocol.org/ns/salmon-replies"/>
 <link href="http://localhost/statusnet/main/salmon/user/1" rel="http://salmon-protocol.org/ns/salmon-mention"/>
 <link href="http://localhost/statusnet/api/statuses/user_timeline/1.atom" rel="self" type="application/atom+xml"/>
<activity:subject>
 <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
 <id>http://localhost/statusnet/user/1</id>
 <title>Zach Copley</title>
 <link rel="alternate" type="text/html" href="http://localhost/statusnet/zach"/>
 <link rel="avatar" type="image/png" media:width="96" media:height="96" href="http://localhost/statusnet/theme/default/default-avatar-profile.png"/>
 <link rel="avatar" type="image/png" media:width="48" media:height="48" href="http://localhost/statusnet/theme/default/default-avatar-stream.png"/>
 <link rel="avatar" type="image/png" media:width="24" media:height="24" href="http://localhost/statusnet/theme/default/default-avatar-mini.png"/>

<poco:preferredUsername>zach</poco:preferredUsername>
<poco:displayName>Zach Copley</poco:displayName>
<poco:note>Zach Hack Attack</poco:note>
<poco:address>
 <poco:formatted>El Cerrito, CA</poco:formatted>
</poco:address>
<poco:urls>
 <poco:type>homepage</poco:type>
 <poco:value>http://zach.copley.name</poco:value>
 <poco:primary>true</poco:primary>

</poco:urls>
</activity:subject>
<entry>
 <title>And now for something completely insane...</title>
 <link rel="alternate" type="text/html" href="http://localhost/statusnet/notice/3"/>
 <id>http://localhost/statusnet/notice/3</id>
 <published>2010-03-04T01:41:07+00:00</published>
 <updated>2010-03-04T01:41:07+00:00</updated>
 <link rel="ostatus:conversation" href="http://localhost/statusnet/conversation/3"/>
 <content type="html">And now for something completely insane...</content>
</entry>

</feed>
TESTFEED1;


code:
<?php

if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
    print "This script must be run from the command line\n";
    exit();
}

define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
define('GNUSOCIAL', true);
define('STATUSNET', true);  // compatibility

require_once INSTALLDIR . '/lib/common.php';

class UserRightsTest extends PHPUnit_Framework_TestCase
{
    protected $user = null;

    function setUp()
    {
        $user = User::getKV('nickname', 'userrightstestuser');
        if ($user) {
            // Leftover from a broken test run?
            $profile = $user->getProfile();
            $user->delete();
            $profile->delete();
        }
        $this->user = User::register(array('nickname' => 'userrightstestuser'));
        if (!$this->user) {
            throw new Exception("Couldn't register userrightstestuser");
        }
    }

    function tearDown()
    {
        if ($this->user) {
            $profile = $this->user->getProfile();
            $this->user->delete();
            $profile->delete();
        }
    }

    function testInvalidRole()
    {
        $this->assertFalse($this->user->hasRole('invalidrole'));
    }

    function standardRoles()
    {
        return array(array('admin'),
                     array('moderator'));
    }

    /**
     * @dataProvider standardRoles
     *
     */

    function testUngrantedRole($role)
    {
        $this->assertFalse($this->user->hasRole($role));
    }

    /**
     * @dataProvider standardRoles
     *
     */

    function testGrantedRole($role)
    {
        $this->user->grantRole($role);
        $this->assertTrue($this->user->hasRole($role));
    }
}


code:
#!/usr/bin/env php
<?php
/*
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..'));

$shortoptions = 'n:p:';
$longoptions = array('nickname=', 'password=', 'dry-run');

$helptext = <<<END_OF_HELP
USAGE: atompub_test.php [options]

Runs some tests on the AtomPub interface for the site. You must provide
a user account to authenticate as; it will be used to make some test
posts on the site.

Options:
  -n<user>  --nickname=<user>  Nickname of account to post as
  -p<pass>  --password=<pass>  Password for account
  --dry-run                    Skip tests that modify the site (post, delete)

END_OF_HELP;

require_once INSTALLDIR.'/scripts/commandline.inc';

$user = get_option_value('n', 'nickname');
$pass = get_option_value('p', 'password');

if (!$user) {
    die("Must set a user: --nickname=<username>\n");
}
if (!$pass) {
    die("Must set a password: --password=<username>\n");
}

// discover the feed...
// @fixme will this actually work?
$url = common_local_url('ApiTimelineUser', array('format' => 'atom', 'id' => $user));

echo "Collection URL is: $url\n";

$collection = new AtomPubClient($url, $user, $pass);

// confirm the feed has edit links ..... ?

echo "Posting an empty message (should fail)... ";
try {
    $noticeUrl = $collection->post('');
    die("FAILED, succeeded!\n");
} catch (Exception $e) {
    echo "ok\n";
}

echo "Posting an invalid XML message (should fail)... ";
try {
    $noticeUrl = $collection->post('<feed<entry>barf</yomomma>');
    die("FAILED, succeeded!\n");
} catch (Exception $e) {
    echo "ok\n";
}

echo "Posting a valid XML but non-Atom message (should fail)... ";
try {
    $noticeUrl = $collection->post('<feed xmlns="http://notatom.com"><id>arf</id><entry><id>barf</id></entry></feed>');
    die("FAILED, succeeded!\n");
} catch (Exception $e) {
    echo "ok\n";
}

// post!
$rand = mt_rand(0, 99999);
$atom = <<<END_ATOM
<entry xmlns="http://www.w3.org/2005/Atom">
    <title>This is an AtomPub test post title ($rand)</title>
    <content>This is an AtomPub test post content ($rand)</content>
</entry>
END_ATOM;

echo "Posting a new message... ";
$noticeUrl = $collection->post($atom);
echo "ok, got $noticeUrl\n";

echo "Fetching the new notice... ";
$notice = new AtomPubClient($noticeUrl, $user, $pass);
$body = $notice->get();
AtomPubClient::validateAtomEntry($body);
echo "ok\n";

echo "Getting the notice ID URI... ";
$noticeUri = AtomPubClient::entryId($body);
echo "ok: $noticeUri\n";

echo "Confirming new entry points to itself right... ";
$editUrl = AtomPubClient::entryEditURL($body);
if ($editUrl != $noticeUrl) {
    die("Entry lists edit URL as $editUrl, no match!\n");
}
echo "OK\n";

echo "Refetching the collection... ";
$feed = $collection->get();
echo "ok\n";

echo "Confirming new entry is in the feed... ";
$entry = AtomPubClient::getEntryInFeed($feed, $noticeUri);
if (!$entry) {
    die("missing!\n");
}
//  edit URL should match
echo "ok\n";

echo "Editing notice (should fail)... ";
try {
    $notice->put($target, $atom2);
    die("ERROR: editing a notice should have failed.\n");
} catch (Exception $e) {
    echo "ok (failed as expected)\n";
}

echo "Deleting notice... ";
$notice->delete();
echo "ok\n";

echo "Refetching deleted notice to confirm it's gone... ";
try {
    $body = $notice->get();
    var_dump($body);
    die("ERROR: notice should be gone now.\n");
} catch (Exception $e) {
    echo "ok\n";
}

echo "Refetching the collection.. ";
$feed = $collection->get();
echo "ok\n";

echo "Confirming deleted notice is no longer in the feed... ";
$entry = AtomPubClient::getEntryInFeed($feed, $noticeUri);
if ($entry) {
    die("still there!\n");
}
echo "ok\n";

// make subscriptions
// make some posts
// make sure the posts go through or not depending on the subs
// remove subscriptions
// test that they don't go through now

// group memberships too

// make sure we can't post to someone else's feed!
// make sure we can't delete someone else's messages
// make sure we can't create/delete someone else's subscriptions
// make sure we can't create/delete someone else's group memberships


code:
Some very rough test scripts for hitting up the OAuth endpoints.

These instructions assume you understand the basics of how OAuth
works. You may want to read up about it first. Here are some good
resources for learning about OAuth:

    http://hueniverse.com/oauth/
    http://tools.ietf.org/html/rfc5849

To use these scripts (and OAuth in general) first you will need to
register and OAuth client application with your StatusNet instance:

    http://example.status.net/settings/oauthapps

oauth.ini
---------

Using oauth.ini.sample as a guide, put your StatusNet OAuth endpoints
and consumer key and secret in a file called oauth.ini and save it
in the same directory as these scripts.

fetch_temp_creds.php
--------------------

Will fetch a request token, token secret and a URL to authorize the
token.  Once you authorize the request token, you can exchange it
for an access token.

example usage:

    $ php fetch_temp_creds.php
    Request Token
       - oauth_token        = 89d481e376edc622f08da5791e6a4446
       - oauth_token_secret = 6d028bcd1ea125cbed7da2f254219885
    Authorize URL
        http://example.status.net/api/oauth/authorize?oauth_token=89d481e376edc622f08da5791e6a4446

    Now paste the Authorize URL into your browser and authorize your temporary credentials.

fetch_token_creds.php
---------------------

After you have authorized your request token, you will be presented
with a verifier code, or pin, in your browser, which you will need
to get an access token. Make sure you copy it into a text buffer
or write it down or something. Then call fetch_token_credentials.php
to exchange your temporary credentials for real token credentials.

example usage:

    $ php fetch_token_creds.php -t 89d481e376edc622f08da5791e6a4446 -s 6d028bcd1ea125cbed7da2f254219885 -v 305162
    Access Token
       - oauth_token        = 9b354df102d8e2b4621122c85d8d045c
       - oauth_token_secret = 1800a88f1574b47d595214a74e5b1ec5

oauth_verify_credentials.php
----------------------------

Now you should have real token credentials (an OAuth access token)
and you can access protected API resources. This is an example
script that calls /api/account/verify_credentials.xml.

example usage:

    $ php oauth_verify_creds.php -t 80305cd15c5c69834364ac02d7f9178c -s 673e3b2978b1b92c8edbfe172505fee1
    <?xml version="1.0" encoding="UTF-8"?>
    <user xmlns:statusnet="http://status.net/schema/api/1/">
     <id>23</id>
     <name>zach</name>
     <screen_name>zach</screen_name>
     <location></location>
     <description></description>
     <profile_image_url>http://example.status.net/theme/default/default-avatar-stream.png</profile_image_url>
     <url></url>
     <protected>false</protected>
     <followers_count>0</followers_count>
     <profile_background_color></profile_background_color>
     <profile_text_color></profile_text_color>
     <profile_link_color></profile_link_color>
     <profile_sidebar_fill_color></profile_sidebar_fill_color>
     <profile_sidebar_border_color></profile_sidebar_border_color>
     <friends_count>0</friends_count>
     <created_at>Thu Sep 30 23:11:00 +0000 2010</created_at>
     <favourites_count>0</favourites_count>
     <utc_offset>0</utc_offset>
     <time_zone>UTC</time_zone>
     <profile_background_image_url></profile_background_image_url>
     <profile_background_tile>false</profile_background_tile>
     <statuses_count>4</statuses_count>
     <following>true</following>
     <statusnet:blocking>false</statusnet:blocking>
     <notifications>true</notifications>
     <status>
      <text>gar</text>
      <truncated>false</truncated>
      <created_at>Wed Oct 06 23:40:14 +0000 2010</created_at>
      <in_reply_to_status_id></in_reply_to_status_id>
      <source>web</source>
      <id>7</id>
      <in_reply_to_user_id></in_reply_to_user_id>
      <in_reply_to_screen_name></in_reply_to_screen_name>
      <geo></geo>
      <favorited>false</favorited>
      <statusnet:html>gar</statusnet:html>
     </status>
     <statusnet:profile_url>http://example.status.net/statusnet/zach</statusnet:profile_url>
    </user>

oauth_post_notice.php
---------------------

This is another test script that lets you post a notice via OAuth.

example usage:

    $ php oauth_post_notice.php -t 80305cd15c5c69834364ac02d7f9178c -s 673e3b2978b1b92c8edbfe172505fee1 -u 'Test test test...'
    <?xml version="1.0" encoding="UTF-8"?>
    <status xmlns:statusnet="http://status.net/schema/api/1/">
     <text>Test test test...</text>
     <truncated>false</truncated>
     <created_at>Fri Oct 08 02:37:35 +0000 2010</created_at>
     <in_reply_to_status_id></in_reply_to_status_id>
     <source>Banana</source>
     <id>8</id>
     <in_reply_to_user_id></in_reply_to_user_id>
     <in_reply_to_screen_name></in_reply_to_screen_name>
     <geo></geo>
     <favorited>false</favorited>
     <user>
      <id>23</id>
      <name>zach</name>
      <screen_name>zach</screen_name>
      <location></location>
      <description></description>
      <profile_image_url>http://example.status.net/statusnet/theme/default/default-avatar-stream.png</profile_image_url>
      <url></url>
      <protected>false</protected>
      <followers_count>0</followers_count>
      <profile_background_color></profile_background_color>
      <profile_text_color></profile_text_color>
      <profile_link_color></profile_link_color>
      <profile_sidebar_fill_color></profile_sidebar_fill_color>
      <profile_sidebar_border_color></profile_sidebar_border_color>
      <friends_count>0</friends_count>
      <created_at>Thu Sep 30 23:11:00 +0000 2010</created_at>
      <favourites_count>0</favourites_count>
      <utc_offset>0</utc_offset>
      <time_zone>UTC</time_zone>
      <profile_background_image_url></profile_background_image_url>
      <profile_background_tile>false</profile_background_tile>
      <statuses_count>5</statuses_count>
      <following>true</following>
      <statusnet:blocking>false</statusnet:blocking>
      <notifications>true</notifications>
      <statusnet:profile_url>http://example.status.net/statusnet/zach</statusnet:profile_url>
     </user>
     <statusnet:html>Test test test...</statusnet:html>
    </status>

path: tests/oauth/README


code:
#!/usr/bin/env php
<?php
/*
 * StatusNet - a distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..'));

require_once INSTALLDIR . '/scripts/commandline.inc';
require_once INSTALLDIR . '/extlib/OAuth.php';

$ini = parse_ini_file("oauth.ini");

// Check to make sure we have everything we need from the ini file
foreach(array('consumer_key', 'consumer_secret', 'apiroot', 'request_token_url') as $inikey) {
    if (empty($ini[$inikey])) {
        print "You forgot to specify a $inikey in your oauth.ini file.\n";
        exit(1);
    }
}

$consumer = new OAuthConsumer($ini['consumer_key'], $ini['consumer_secret']);
$endpoint = $ini['apiroot'] . $ini['request_token_url'];
$parsed   = parse_url($endpoint);
$params   = array();

parse_str($parsed['query'], $params);
$params['oauth_callback'] = 'oob'; // out-of-band

$hmac_method = new OAuthSignatureMethod_HMAC_SHA1();

try {
    $req = OAuthRequest::from_consumer_and_token(
        $consumer,
        null,
        "POST",
        $endpoint,
        $params
    );
    $req->sign_request($hmac_method, $consumer, NULL);
    $r = httpRequest($endpoint, $req->to_postdata());
} catch (Exception $e) {
    // oh noez
    print $e->getMessage();
    print "\nOAuth Request:\n";
    var_dump($req);
    exit(1);
}

$body       = $r->getBody();
$tokenStuff = array();

parse_str($body, $tokenStuff);

$tok       = $tokenStuff['oauth_token'];
$confirmed = $tokenStuff['oauth_callback_confirmed'];

if (empty($tokenStuff['oauth_token'])
    || empty($tokenStuff['oauth_token_secret'])
    || empty($confirmed)
    || $confirmed != 'true')
{
    print "Error! HTTP response body: $body\n";
    exit(1);
}

$authurl = $ini['apiroot'] . $ini['authorize_url'] . '?oauth_token=' . $tok;

print "Request Token\n";
print '   - oauth_token        = ' . $tokenStuff['oauth_token'] . "\n";
print '   - oauth_token_secret = ' . $tokenStuff['oauth_token_secret'] . "\n";
print "Authorize URL\n    $authurl\n\n";
print "Now paste the Authorize URL into your browser and authorize your temporary credentials.\n";

function httpRequest($endpoint, $poststr)
{
    $request = HTTPClient::start();

    $request->setConfig(
        array(
            'follow_redirects' => true,
	    'connect_timeout' => 120,
	    'timeout' => 120,
	    'ssl_verify_peer' => false,
	    'ssl_verify_host' => false
        )
    );

    // Turn signed request query string back into an array
    parse_str($poststr, $postdata);
    return $request->post($endpoint, null, $postdata);
}


code:
#!/usr/bin/env php
<?php
/*
 * StatusNet - a distributed open-source microblogging tool
 * Copyright (C) 2008, 2009, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..'));

require_once INSTALLDIR . '/extlib/OAuth.php';

$ini = parse_ini_file("oauth.ini");

// Check to make sure we have everything we need from the ini file
foreach(array('consumer_key', 'consumer_secret', 'apiroot', 'access_token_url') as $inikey) {
    if (empty($ini[$inikey])) {
        print "You forgot to specify a $inikey in your oauth.ini file.\n";
        exit(1);
    }
}

$consumer = new OAuthConsumer($ini['consumer_key'], $ini['consumer_secret']);

$endpoint = $ini['apiroot'] . $ini['access_token_url'];

$shortoptions = 't:s:v:';
$longoptions = array('oauth_token=', 'oauth_token_secret=', 'oauth_verifier=');

$helptext = <<<END_OF_ETOKENS_HELP
  fetch_token_creds.php [options]

  Exchange authorized OAuth temporary credentials for token credentials
  (an authorized request token for an access token)

    -t --oauth_token        authorized request token
    -s --oauth_token_secret authorized request token secret
    -v --oauth_verifier     authorized request token verifier

END_OF_ETOKENS_HELP;

require_once INSTALLDIR . '/scripts/commandline.inc';

$token = $secret = $verifier = null;

if (have_option('t', 'oauth_token')) {
    $token = get_option_value('t', 'oauth_token');
}

if (have_option('s', 'oauth_token_secret')) {
    $secret = get_option_value('s', 'oauth_token_secret');
}

if (have_option('v', 'oauth_verifier')) {
    $verifier = get_option_value('v', 'oauth_verifier');
}

if (empty($token)) {
    print "Please specify the request token (--help for help).\n";
    exit(1);
}

if (empty($secret)) {
    print "Please specify the request token secret (--help for help).\n";
    exit(1);
}

if (empty($verifier)) {
    print "Please specify the request token verifier (--help for help).\n";
    exit(1);
}

$rtok   = new OAuthToken($token, $secret);
$parsed = parse_url($endpoint);
parse_str($parsed['query'], $params);

$params['oauth_verifier'] = $verifier; // 1.0a

$hmac_method = new OAuthSignatureMethod_HMAC_SHA1();

try {

    $oauthReq = OAuthRequest::from_consumer_and_token(
        $consumer,
        $rtok,
        "POST",
        $endpoint,
        $params
    );

    $oauthReq->sign_request($hmac_method, $consumer, $rtok);

    $httpReq    = httpRequest($endpoint, $oauthReq->to_postdata());
    $body       = $httpReq->getBody();

} catch (Exception $e) {
    // oh noez
    print $e->getMessage();
    print "\nOAuth Request:\n";
    var_dump($oauthReq);
    exit(1);
}

$tokenStuff = array();
parse_str($body, $tokenStuff);

if (empty($tokenStuff['oauth_token']) || empty($tokenStuff['oauth_token_secret'])) {
    print "Error! HTTP response body: $body\n";
    exit(1);
}

print "Access Token\n";
print '   - oauth_token        = ' . $tokenStuff['oauth_token'] . "\n";
print '   - oauth_token_secret = ' . $tokenStuff['oauth_token_secret'] . "\n";

function httpRequest($endpoint, $poststr)
{
    $request = HTTPClient::start();

    $request->setConfig(
        array(
            'follow_redirects' => true,
	    'connect_timeout'  => 120,
	    'timeout'          => 120,
	    'ssl_verify_peer'  => false,
	    'ssl_verify_host'  => false
	)
    );

    parse_str($poststr, $postdata);
    return $request->post($endpoint, null, $postdata);
}


code:
; Setup OAuth info here
apiroot       = "https://YOURSTATUSNET/api"

request_token_url = "/oauth/request_token"
authorize_url     = "/oauth/authorize"
access_token_url  = "/oauth/access_token"

consumer_key  = "b748968e9bea81a53f3a3c15aa0c686f"
consumer_secret = "5434e18cce05d9e53cdd48029a62fa41"


code:
#!/usr/bin/env php
<?php
/*
 * StatusNet - a distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 **/

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..'));

require_once INSTALLDIR . '/extlib/OAuth.php';

$shortoptions = 't:s:u:';
$longoptions = array('oauth_token=', 'oauth_token_secret=', 'update=');

$helptext = <<<END_OF_VERIFY_HELP
    oauth_post_notice.php [options]
    Update your status via OAuth

    -t --oauth_token        access token
    -s --oauth_token_secret access token secret
    -u --update             status update

END_OF_VERIFY_HELP;

$token        = null;
$token_secret = null;
$update       = null;

require_once INSTALLDIR . '/scripts/commandline.inc';

if (have_option('t', 'oauth_token')) {
    $token = get_option_value('t', 'oauth_token');
}

if (have_option('s', 'oauth_token_secret')) {
    $token_secret = get_option_value('s', 'oauth_token_secret');
}

if (have_option('u', 'update')) {
    $update = get_option_value('u', 'update');
}

if (empty($token)) {
    print "Please specify an access token.\n";
    exit(1);
}

if (empty($token_secret)) {
    print "Please specify an access token secret.\n";
    exit(1);
}

if (empty($update)) {
    print "You forgot to update your status!\n";
    exit(1);
}

$ini      = parse_ini_file("oauth.ini");
$consumer = new OAuthConsumer($ini['consumer_key'], $ini['consumer_secret']);
$endpoint = $ini['apiroot'] . '/statuses/update.xml';

$atok = new OAuthToken($token, $token_secret);

$parsed = parse_url($endpoint);
parse_str($parsed['query'], $params);

$params['status'] = $update;

$hmac_method = new OAuthSignatureMethod_HMAC_SHA1();

try {

    $oauthReq = OAuthRequest::from_consumer_and_token(
        $consumer,
        $atok,
        'POST',
        $endpoint,
        $params
    );

    $oauthReq->sign_request($hmac_method, $consumer, $atok);

    $httpReq = httpRequest($endpoint, $oauthReq->to_postdata());

    print $httpReq->getBody();

} catch (Exception $e) {
    print "Error! . $e->getMessage() . 'HTTP reponse body: " . $httpReq->getBody();
    exit(1);
}

function httpRequest($endpoint, $poststr)
{
    $request = HTTPClient::start();

    $request->setConfig(
        array(
            'follow_redirects' => true,
	    'connect_timeout' => 120,
	    'timeout' => 120,
	    'ssl_verify_peer' => false,
	    'ssl_verify_host' => false
        )
    );

    // Turn signed request query string back into an array
    parse_str($poststr, $postdata);
    return $request->post($endpoint, null, $postdata);
}


code:
#!/usr/bin/env php
<?php
/*
 * StatusNet - a distributed open-source microblogging tool
 * Copyright (C) 2008, 2009, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..'));

require_once INSTALLDIR . '/extlib/OAuth.php';

$shortoptions = 't:s:';
$longoptions = array('oauth_token=', 'oauth_token_secret=');

$helptext = <<<END_OF_VERIFY_HELP
  oauth_verify_creds.php [options]
  Access /api/account/verify_credentials.xml with OAuth

    -t --oauth_token        access token
    -s --oauth_token_secret access token secret

END_OF_VERIFY_HELP;

$token        = null;
$token_secret = null;

require_once INSTALLDIR . '/scripts/commandline.inc';

if (have_option('t', 'oauth_token')) {
    $token = get_option_value('t', 'oauth_token');
}

if (have_option('s', 'oauth_token_secret')) {
    $token_secret = get_option_value('s', 'oauth_token_secret');
}

if (empty($token)) {
    print "Please specify an access token (--help for help).\n";
    exit(1);
}

if (empty($token_secret)) {
    print "Please specify an access token secret (--help for help).\n";
    exit(1);
}

$ini      = parse_ini_file("oauth.ini");
$consumer = new OAuthConsumer($ini['consumer_key'], $ini['consumer_secret']);
$endpoint = $ini['apiroot'] . '/account/verify_credentials.xml';

$atok   = new OAuthToken($token, $token_secret);
$parsed = parse_url($endpoint);

parse_str($parsed['query'], $params);

try {

    $hmac_method = new OAuthSignatureMethod_HMAC_SHA1();

    $oauthReq = OAuthRequest::from_consumer_and_token(
        $consumer,
        $atok,
        "GET",
        $endpoint,
        $params
    );

    $oauthReq->sign_request($hmac_method, $consumer, $atok);

    $httpReq = httpRequest($oauthReq->to_url());

} catch (Exception $e) {
    print "Error! HTTP response body: " . $httpReq->getBody();
    exit(1);
}

print $httpReq->getBody();

function httpRequest($url)
{
    $request = HTTPClient::start();

    $request->setConfig(
        array(
            'follow_redirects' => true,
	    'connect_timeout' => 120,
	    'timeout' => 120,
	    'ssl_verify_peer' => false,
	    'ssl_verify_host' => false
        )
    );

    return $request->get($url);
}


code:
* To use a theme other than neo, add this to config.php:
$config['site']['theme'] = 'yourthemename';

* To use/import the base theme, add this to your theme.ini file:
include=base

* To include an external CSS resource (e.g. for a webfont), add this to the top of your theme.ini file:
external[]="yourexternalURL"

path: theme/README


code:
/** theme: base
 *
 * @package   StatusNet
 * @author    Samantha Doherty <sammy@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
 * @link      http://status.net/
 */

@media screen, projection, tv {

/* general styles and layout */

* {margin: 0; padding: 0; vertical-align: baseline;}
a abbr {border-bottom: 0; cursor: pointer;}
input.submit {cursor: pointer;}
table {border-collapse: collapse;}
ol, ul {list-style-position: inside;}
fieldset {border: none;}
legend {font-weight: bold; font-size: 1.2em;}
input, textarea, select, option {padding: 2px;}
textarea {overflow:auto;}

body {
    background-color: #f2f2f2;
    color: #000;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 14px;
    line-height: 1.6;
}

a {
    text-decoration: none;
    outline: none;
}

a:hover {
    text-decoration: underline;
}

a img {
    border: 0;
    text-decoration: none;
}

h1, h2, h3, h4, h5, h6 {
    font-weight: normal;
    margin-bottom: 15px;
}

h1 {font-size: 2.0em;}
h2 {font-size: 1.6em;}
h3 {font-size: 1.4em;}
h4 {font-size: 1.2em;}
h5 {font-size: 1.1em;}
h6 {font-size: 1em;}

p {
    margin-bottom: 1.4em;
}

.form_notice p, li p, .section p {
    margin-bottom: 0;
}

input, textarea, select, option {
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 1em;
}

select {
    padding-right: 10px;
    padding-bottom: 0px;
    margin-top: -4px;
}

option {
    padding-bottom: 0px;
}

#wrap {
    position: relative;
    width: 960px;
    margin: 0px auto;
    background-color: #fff;
    border-left: 10px solid #fff;
    border-right: 10px solid #fff;
    padding-top: 10px;
}

#header {
    position: relative;
    width: 960px;
    padding: 0px
}

#core {
    position: relative;
    float: left;
    clear: both;
    margin: 0px;
    width: 958px;
    border-top: 5px solid #ccc;
    border-left: 1px solid #ccc;
    border-right: 1px solid #ccc;
}

#aside_primary_wrapper {
    width: 100%;
    float: left;
    overflow: hidden;
    position: relative;
    background-color: #f2f2f2;
}

#content_wrapper  {
    width: 100%;
    float: left;
    position: relative;
    right: 239px;
    background-color: #fff;
    border-right: 1px solid #ccc;
}

#content_inner {
    clear: both;
    display: block;
    position: relative;
}

#site_nav_local_views_wrapper  {
    width: 100%;
    float: left;
    position: relative;
    right: 561px;
    background-color: #f2f2f2;
    border-right: 1px solid #ccc;
}

#site_nav_local_views {
    width: 138px;
    float: left;
    overflow: hidden;
    position: relative;
    left: 800px;
    margin: 0px 0px 20px 0px;
    padding: 22px 10px 40px 10px;
}

#content {
    width: 520px;
    float: left;
    overflow: hidden;
    position: relative;
    left: 801px;
    margin: 0px;
    padding: 20px 20px 40px 20px;
    background-color: #fff;
}

#aside_primary {
    width: 218px;
    float: left;
    overflow: hidden;
    position: relative;
    left: 802px;
    padding: 22px 10px 40px 10px;
    margin: 0px 0px 20px 0px;
}

#footer {
    clear: both;
    position: relative;
    width: 940px;
    background-color: #ccc;
    padding: 10px;
}

/* header elements */

address {
    float: left;
    position: relative;
    margin: -2px 0 3px 0;
    padding: 0px;
    z-index: 99;
}

address a, address img {
    display: block;
}

address img {
    max-width: 158px;
}

address img + .p-name {
    display: none;
}

address .poweredby {
    display: block;
    width: auto;
}

#site_nav_global_primary {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    width: 800px;
    margin: 0px;
    height: 24px;
    line-height: 20px;
}

#site_nav_global_primary ul {
    float: right;
}

#site_nav_global_primary li {
    display: inline;
    margin-right: 10px;
}

#site_nav_global_primary li:last-child {
    margin-right: 0px;
}

#header-search {
    float: right;
    position: relative;
    top: -8px;
    margin-left: 10px;
}

#site_notice {
    margin: 26px 0px 4px 0px;
    padding: 10px;
    background-color: #f2f2f2;
}

#site_notice p {
    margin-bottom: 0px;
}

/* input forms */

.input_forms {
    position: relative;
    margin-bottom: 10px;
    border-bottom: 1px dotted #ccc;
    width: 100%;
}

.input_forms > label {
    float: left;
    margin-right: 1em;
    opacity: 0.6;
}

#input_form_nav {
    float: left;
    margin-bottom: 10px;
    list-style-type: none;
}

#input_form_nav li {
    display: inline;
}

#input_form_nav li a {
    margin-right: 10px;
}

.input_form_nav_tab.current a {
    text-decoration: underline;
}

.input_form {
    position: relative;
    float: left;
    width: 520px;
    padding-bottom: 20px;
    display: none;
}

.input_form.current {
    display: block;
}

.form_notice {
    margin-bottom: 10px;
}

.form_notice fieldset {
    width: auto;
}

.form_notice legend {
    display: none;
}

.form_notice #notice_data-text-label { /* TODO can remove this now? */
    display: none;
}

.form_notice_placeholder .placeholder {
    width: 508px;
    padding: 4px 4px 4px 6px;
    border: 1px solid #a6a6a6;
    z-index: 97;
    font-size: 1em;
    color: #888;
}

.form_notice textarea {
    clear: left;
    float: left;
    position: relative;
    width: 483px;
    height: 42px;
    padding: 6px 5px 18px 5px;
    border: 1px solid #a6a6a6;
    z-index: 97;
    font-size: 1.2em;
}

#form_notice-direct.form_notice textarea {
    width: 508px;
}

.form_notice label.notice_data-attach,
.form_notice input.notice_data-attach {
    position: absolute;
    cursor: pointer;
}
.form_notice label.notice_data-attach {
    top: 0px;
    right: 0px;
    z-index: 96;
    text-indent: -9999px;
    width: 16px;
    height: 16px;
}

.form_notice input.notice_data-attach {
    top: 0;
    right: 0;
    padding:0;
    height:16px;
}

.form_notice .notice_data-geo_wrap label,
.form_notice .notice_data-geo_wrap input {
    position: absolute;
    top: 26px;
    right: 0px;
    cursor: pointer;
    width: 16px;
    height: 16px;
    display: block;
    z-index: 99;
}

.form_notice .notice_data-geo_wrap input {
    visibility:hidden;
}

.form_notice .notice_data-geo_wrap label {
    font-weight:normal;
    font-size:1em;
    margin-bottom:0;
    text-indent:-9999px;
}

.form_notice label {
    opacity: 0.6;
}

.form_notice label:hover {
    opacity: 1;
}

.form_notice input.notice_data-attach {
    opacity: 0;
}

.form_notice .count {
    position: absolute;
    top: 50px;
    right: 32px;
    z-index: 99;
    font-size: 0.8em;
    height: 1em;
    color: #777;
}

.form_notice.warning .count {
    color: #ff0000;
}

#form_notice-direct.form_notice .count {
    top: 84px;
    right: 7px;
}

.form_notice .error,
.form_notice .success,
.form_notice .notice-status {
    position: relative;
    overflow: auto;
    line-height: 1.2em;
    padding: 5px 5px 5px 10px;
    margin: 10px 0px 0px 0px;
    width: 478px;
    border: 1px solid #ccc;
}

.form_notice .error {
    border: 1px solid #d05858;
}

.form_notice .attach-status button.close,
.form_notice .notice-status button.close {
    float:right;
    font-size:0.8em;
}

.input_form .form_settings fieldset {
    margin: 0px;
    padding: 0px;
}

.input_form .form_settings fieldset fieldset {
    width: 400px;
    float: left;
    background: none;
    border: none;
    margin-bottom: 0px;
    padding: 0px;
}

.input_form .form_settings .form_data li {
    position: relative;
    margin-bottom: 12px;
}

.input_form fieldset fieldset label {
    position: absolute;
    top: 0;
    left: 6px;
    float: none;
    text-align: left;
    color: #888;
    cursor: text;
    background: #fff;
}

.input_form .form_settings li input {
    width: 388px;
    margin-left: 0;
    margin-right: 0;
    padding: 4px 5px 4px 5px;
    border: 1px solid #a6a6a6;
    font-size: 1em;
}

.input_form .form_settings li textarea {
    width: 388px;
    margin-left: 0;
    padding: 4px 5px 4px 5px;
    border: 1px solid #a6a6a6;
    z-index: 97;
    font-size: 1em;
}

.input_form .form_settings .form_data p.form_guide {
    margin-left: 5px;
}

.form_notice label[for=to] {
    float: left;
}

.form_notice select[id=to] {
    float:left;
    margin: -4px 0px 10px 10px;
    max-width: 450px;
}

.form_notice .to-selector {
    clear: left;
    padding-top: 15px;
    z-index: 99;
}

.form_settings label[for=notice_to] {
    left: 5px;
    margin-left: 0px;
    margin-right: 10px;
    position: relative;
    clear: left;
    background: none;
}

.checkbox-wrapper {
    padding: 2px;
    margin-left: 10px;
}

.form_notice .checkbox-wrapper {
    display: inline;
    margin-left: 10px;
}

.form_settings .checkbox-wrapper label.checkbox {
    margin-left: 0px;
    margin-top: 6px;
    line-height: 1.2em;
    left: -3px;
    float: none;
}

.checkbox-wrapper #notice_private {
    display:none;
}

.checkbox-wrapper.unchecked label.checkbox {
    padding-left: 20px;
    background: url(../images/icons/lock_open.png) no-repeat 0px 0px;
    opacity: 0.6;
}

.checkbox-wrapper.unchecked label.checkbox:hover {
    opacity: 1;
    cursor: pointer;
}

.checkbox-wrapper.checked label.checkbox {
    padding-left: 20px;
    background: url(../images/icons/lock.png) no-repeat 0px 0px;
    color: red;
    opacity: 1;
}

.checkbox-wrapper.checked label.checkbox:hover {
    cursor: pointer;
}

.form_notice input.submit {
    position: absolute;
    right: 0px;
    margin-top: -1.5em;
    float: left;
    width: 100px;
    padding: 0px;
    z-index: 99;
}

.input_form .form_settings .submit {
    position: relative;
    top: 0;
    right: 0;
    float: right;
    width: 100px;
    height: 26px;
    line-height: 26px;
    padding: 0px 10px;
    margin: 0px;
    z-index: 1;
}

.form_settings {
    clear: both;
}

/* site nav local views */

#site_nav_local_views li {
    display: block;
    margin: 0px 0px 8px 0px;
}

#site_nav_local_views li ul {
    margin-bottom: 20px;
}

#site_nav_local_views a {
    word-wrap: break-word;
}

#site_nav_local_views .current a {
    text-decoration: underline;
}

/* aside primary */

#aside_primary .section {
    position: relative;
    float: left;
    clear: both;
    width: 100%;
    margin-bottom: 20px;
}

/* notices */

#notices_primary {
    padding-top: 3px;
    clear: both;
}

#notices_primary h2 {
    display: none;
}

.notice {
    list-style-type: none;
    margin-bottom: 10px;
    clear: left;
    padding-bottom: 2px;
    line-height: 1.36em;
}

.notice, .profile, .application, #content .peopletag {
    position:relative;
    clear:both;
    float:left;
    width:100%;
}

.notice .p-author {
    margin-right: 8px;
}

.notice .addressees::before {
    content: '\25B8';
}
.notice .addressees, .notice .addressees li {
    display: inline;
}
.notice .addressees > li::before {
    content: ',';
}
.notice .addressees > li:first-child::before {
    content: '';
}

.notice .addressees .group {
    font-style: italic;
}

.p-name {
    overflow: hidden;
}

.notice .p-author {
    font-weight: bold;
}

#core .h-card .u-photo {
    float: left;
    margin-right: 8px;
}

.h-card .u-url, .h-card.u-url {
    text-decoration:none;
}
.h-card .u-url:hover, .h-card.u-url:hover {
    text-decoration:underline;
}

.notice .automatic {
font-style:italic;
}

#showstream h1 {
    display:none;
}

#remoteprofile .notice .h-entry,
#showstream .notice .h-entry,
#remoteprofile .notice .entry-title,
#showstream .notice .entry-title {
    min-height: 1px;
}

#remoteprofile #content .notice .author,
#showstream #content .notice .author {
    display: none;
}

#remoteprofile .notice,
#showstream .notice {
    min-height: 1em;
}

#shownotice .notice .h-entry {
    font-size:2.2em;
    min-height:123px;
    font-size: 1.6em;
    line-height: 1.2em;
}

.notice .e-content {
    margin-left: 56px;
    max-height: 400px;
    overflow-y: auto;
}

.notice-options {
    margin-bottom: 7px;
    margin-top: 12px;
}

.notice-options {
    float: right;
}

.notice-options fieldset {
    border: none;
}

.notice-options legend {
    display: none;
}

.notice-options form, .notice-options a, .notice-options .repeated {
    float: left;
    margin-right: 10px;
}

.notice-options input, .notice-options a, .notice-options .repeated {
    text-indent: -9999px;
    outline:none;
}

.notice-options input.submit, .notice-options a, .notice-options .repeated {
    display: block;
    border: 0;
    height: 16px;
    width: 16px;
}

.notice-options input.submit, .notice-options a {
    opacity: 0.6;
}

.notice-options input.submit:hover, .notice-options a:hover {
    opacity: 1;
}

.notice .attachment {
    position:relative;
    padding-left:16px;
}

.notice .attachment.more, .mode-private .privacy_mode {
text-indent:-9999px;
width:16px;
height:16px;
display:inline-block;
overflow:hidden;
vertical-align:middle;
margin-left:4px;
}

#attachments .attachment,
.notice .attachment.more {
padding-left:0;
}

.notice .attachment img {
position:absolute;
top:18px;
left:0;
z-index:99;
}

#shownotice .notice .attachment img {
position:static;
}

.notice.h-entry .attachments {
    clear: both;
    position: relative;
    top: 1em;
}

.notice.h-entry .attachments .inline-attachment * {
    max-width: 100%;
}
.notice.h-entry .attachments .inline-attachment > a {
    font-size: 0.8em;
    line-height: 16px;
    height: 16px;
}
.notice.h-entry .attachments .inline-attachment > img {
    display: block;
}

#attachments {
clear:both;
float:left;
width:100%;
margin-top:18px;
}
#attachments dt {
font-weight:bold;
font-size:1.3em;
margin-bottom:4px;
}

#attachments ol li {
margin-bottom:18px;
list-style-type:decimal;
float:left;
clear:both;
}

#attachment_view img, #attachment_view .attachment_player {
max-width:480px;
max-height:480px;
}
#attachment_view #oembed_info {
margin-top:11px;
}
#attachment_view #oembed_info dt,
#attachment_view #oembed_info dd {
float:left;
}
#attachment_view #oembed_info dt {
clear:left;
margin-right:11px;
font-weight:bold;
}
#attachment_view #oembed_info dt:after {
content: ":";
}

/* threaded replies */

.threaded-replies {
    clear: both;
    float: left;
    width: 458px;
    margin-left: 55px;
    margin-bottom: 10px;
    padding-right: 2px;
    padding-top: 5px;
    border-left: 3px solid #ECECF2;
    background: #fafafa;
    color: #222;
    font-size: 1em;
}

.threaded-replies:empty {
    display: none;
}

#content .notice .threaded-replies .notice,
#content .notice .threaded-replies .notice-data {
    width: 440px;
    padding-bottom: 1ex;
    padding-top: 1ex;
    border-bottom: 2px dotted #eee;
    line-height: 1.36em;
    margin-top: 0px;
    margin-bottom: 0px;
    margin-left: 10px;
    background: none;
}

#content .notice .threaded-replies .notice.h-entry,
#content .notice .threaded-replies .entry-title {
    min-height: 1px;
}

#content .threaded-replies .notice .p-author .u-photo {
    height: 24px;
    width: 24px;
    top: 12px;
}

#content .threaded-replies .notice.h-entry .e-content {
    margin-left: 32px;
}

.threaded-replies .notice-repeats,
.threaded-replies .notice-faves {
    clear: both;
    font-size: 0.88em;
}
.threaded-replies .notice-faves:before {
    content: "\2665";
    margin-right: 1ex;
}
.threaded-replies .notice-repeats:before {
    content: "\267B";
    margin-right: 1ex;
}

.threaded-replies li {
    list-style-type: none;
}

.threaded-replies .notice-reply-comments {
    margin: 2px 0px 4px 10px;
}

.threaded-replies .placeholder {
    margin: 10px;
    width: 426px;
    padding: 4px 4px 4px 6px;
    border: 1px solid #a6a6a6;
    color: #888;
}

.threaded-replies .notice-reply {
    clear: left;
    position: relative;
    padding: 10px;
    padding-bottom: 44px;
}

.threaded-replies .form_notice textarea {
    width: 395px;
}

.threaded-replies .form_notice label.notice_data-attach {
    top: 10px;
    right: 10px;
}

.threaded-replies .form_notice .notice_data-geo_wrap label,
.threaded-replies .form_notice .notice_data-geo_wrap input {
    top: 36px;
    right: 10px;
}

.threaded-replies .form_notice .count {
    top: 60px;
    right: 50px;
}

.threaded-replies .form_notice input.submit {
    bottom: 0;
}

.threaded-replies .form_notice .error,
.threaded-replies .form_notice .success,
.threaded-replies .form_notice .notice-status {
    width: 390px;
}

.threaded-replies .to-selector {
    display: none;
}

.notice .permalink:after {
    content: ']';
}

.notice .permalink:before {
    content: '[';
}

.notice footer .source + .permalink.external {
    display: none;
}

/* old school conversation style */

#conversation .notices .notices {
    float: left;
    background-color:rgba(200, 200, 200, 0.050);
    margin-left: 15px;
    width: auto;
}

#conversation .notices .notices .notices .notices .notices .notices .notices .notices .notices .notices .notices .notices .notices  {
    background: none;
    margin-left: 0px;
}

/* aside primary specific styles */

.aside .section p,
.aside .section .more {
clear:both;
}

.notice-title {
    display:none;
}

#aside_primary ol.notices {
    list-style-type: none;
    float: left;
    position: relative;
    margin-bottom: 10px;
    width: 100%;
}

#aside_primary .notice .h-card .u-photo {
    height: 24px;
    width: 24px;
    margin-right: 8px;
}
#aside_primary .notice .e-content {
    margin-left: 32px;
}

#export_data li {
    list-style-type:none;
}

#export_data li a {
    display: block;
    padding-left: 30px;
    height: 16px;
    line-height: 16px;
    margin-bottom: 15px;
}

#aside_primary td {
    padding-right: 10px;
    padding-bottom: 10px;
}

.section tbody td {
padding-right:18px;
padding-bottom:11px;
}

#entity_statistics dt,
#entity_statistics dd {
display:inline;
margin-right:11px;
}
#entity_statistics dt:after {
content: ":";
}

.section ul.entities {
    float:left;
    width:100%;
}

.section .entities li {
    list-style-type: none;
    float: left;
    margin-right: 3px;
    margin-bottom: 8px;
    display: inline;
}
.section .entities li .u-photo {
    margin: 0;
}

.tag-cloud {
list-style-type:none;
text-align:center;
}
.aside .tag-cloud {
font-size:0.8em;
word-wrap:break-word;
}
.tag-cloud li {
display:inline;
margin-right:7px;
line-height:1.25;
}

.tag-cloud li:before {
content:'\0009';
}

.aside .tag-cloud li {
line-height:1.5;
}
.tag-cloud li a {
text-decoration:none;
}
#tagcloud.section dt {
text-transform:uppercase;
font-weight:bold;
}
.tag-cloud-1 {
font-size:1em;
}
.tag-cloud-2 {
font-size:1.25em;
}
.tag-cloud-3 {
font-size:1.75em;
}
.tag-cloud-4 {
font-size:2em;
}
.tag-cloud-5 {
font-size:2.25em;
}
.tag-cloud-6 {
font-size:2.75em;
}
.tag-cloud-7 {
font-size:3.25em;
}

#publictagcloud #tagcloud.section dt {
display:none;
}

/* secondary elements */

.error, .success, .notice-status {
    background-color: #F7E8E8;
    padding: 4px 10px;
}
.success, .notice-status {
    background-color: #f2f2f2;
}

#page_notice {
clear:both;
margin-bottom:18px;
}

.e-content .success {
    padding: 6px;
}

.system_notice ul,
.instructions ul {
margin-left:1em;
}
.instructions p,
.instructions ul {
margin-bottom:18px;
}
.help dt {
display:none;
}
.guide {
clear:both;
}

button.close,
button.minimize {
width:16px;
height:16px;
text-indent:-9999px;
padding:0;
border:0;
text-align:center;
font-weight:bold;
cursor:pointer;
}

.dialogbox {
position:absolute;
    top: 0px;
    right: 0px;
z-index:9;
float:none;
padding:11px;
border-style:solid;
border-width:1px;
    background: #fff;
    color: #000;
}

.dialogbox legend {
display:block !important;
margin-right:18px;
margin-bottom:18px;
}

.dialogbox button.close {
position:absolute;
right:3px;
top:3px;
}

.dialogbox .form_guide {
font-weight:normal;
padding:0;
}

.dialogbox .submit_dialogbox {
font-weight:bold;
text-indent:0;
min-width:46px;
}
.dialogbox input {
padding-left:4px;
}
.dialogbox fieldset {
margin-bottom:0;
}

#pagination {
    background-color: #f2f2f2;
    clear: left;
    margin-top: 20px;
    padding: 1%;
    height: 1em;
}

#pagination li {
    display: inline;
}

#pagination .nav_prev {
    float: left;
}

#pagination .nav_next {
    float: right;
}

#wrap form.processing input.submit,
#wrap a.processing,
.dialogbox.processing .submit_dialogbox {
    background: url(../images/icons/icon_processing.gif) no-repeat 47% 47%;
    cursor: wait;
    outline: none;
    text-indent: -9999px;
}

/* footer elements */

#site_nav_global_secondary dt {
    display: none;
}

#site_nav_global_secondary li {
    display: inline;
    margin-right: 20px;
}

#licenses dt {
    display: none;
}

#licenses dd {
    margin-top: 10px;
}

#site_content_license_cc {
margin-bottom:0;
}
#site_content_license_cc img {
display:inline;
vertical-align:top;
margin-right:4px;
}

form ul li {
    list-style-type:none;
    margin:0 0 18px 0;
}

form label.submit {
display:none;
}

.form_settings fieldset {
    margin-top: 10px;
    margin-bottom: 10px;
    border: none;
}

.form_settings fieldset fieldset {
    margin-bottom: 20px;
    padding: 10px;
    padding-top: 10px;
    border-width:1px;
    border-style:solid;
    background:rgba(240, 240, 240, 0.2);
}

.form_settings fieldset fieldset legend {
    line-height:0;
    font-size: 1.4em;
    font-weight: normal;
}

.form_settings input.remove {
margin-left:11px;
}
.form_settings .form_data li {
width:100%;
float:left;
    margin-bottom: 22px;
}
.form_settings .form_data label {
float:left;
}
.form_settings .form_data textarea,
.form_settings .form_data select,
.form_settings .form_data input {
margin-left:1.795%;
float:left;
}

.form_settings .form_data select {
    margin-top: 0px;
}

.form_settings .form_data input.submit,
.form_settings .form_data input.checkbox,
.form_settings .form_data input.radio {
width:auto;
}
.form_settings .form_data textarea {
width:63%;
}

.form_settings .form_data input.submit {
margin-left:0;
}

.form_settings label {
margin-top:2px;
    width: 25%;
    text-align: right;
}

.form_settings input.checkbox, .form_settings input.radio {
    margin-left: 25%;
    margin-top: 3px;
    position: relative;
    left: -14px;
}

.form_settings label.checkbox, .form_settings label.radio {
    width: auto;
    max-width: 60%;
    position: relative;
    left: -25px;
}

.form_settings label.checkbox {
    text-align: left;
    line-height: 1.2em;
}

.form_settings label.radio {
    text-align: left;
    margin: 0px;
}

.form_settings li input.radio {
    clear: left;
}

.form_actions label {
display:none;
}
.form_guide {
font-style:italic;
}

.form_settings #settings_autosubscribe label {
display:inline;
font-weight:bold;
}

#form_settings_profile legend,
#form_login legend,
#form_register legend,
#form_password legend,
#form_settings_avatar legend,
#newgroup legend,
#editgroup legend,
.form_tag_user legend,
#form_remote_subscribe legend,
#form_openid_login legend,
#form_search legend,
#form_invite legend,
#form_notice_delete legend,
#form_password_recover legend,
#form_password_change legend,
.form_entity_block legend,
#form_filter_bytag legend,
#apioauthauthorize_allowdeny,
.form_tag_user_wrap form,
.form_tag_user_wrap label,
.form_tag_user_wrap legend {
display:none;
}

.form_tag_user_wrap {
clear:both;
}

.form_tag_user {
float:left;
width:auto;
}

.form_tag_user input.submit {
width:50px;
}

.form_settings .form_data p.form_guide {
clear:both;
    margin-left: 27%;
margin-bottom:0;
    line-height: 1.2em;
    padding-top: 4px;
}

.form_settings p {
margin-bottom:11px;
}

.form_settings .form_note {
padding:0 7px;
}

.form_settings .form_response {
    margin-top: 10px;
}

.form_settings input {
    margin-right: 20px;
}

#form_search .submit {
margin-left:11px;
}
#form_search .form_data input {
width:auto;
}

.h-entry .e-content .form_settings ul {
margin-left:0;
}

.notice > footer {
    clear: left;
    font-size: 0.8em;
    margin-left: 56px;
}

.notice > footer .timestamp span.p-name {
    display: none;
}

.limited-scope .e-content .timestamp:before {
content:'☠';
font-size:150%;
}

#content .notice-source-activity div.entry-title, .notice-source-activity div.e-content {
    margin-left: 0;
}

#content .notice-source-activity div.entry-title {
    font-style: italic;
    min-height: 0;
}

#content .notice-source-activity .notice div.entry-title {
    font-style: normal;
}

span.rtl {
    display: block;
    direction: rtl;
    text-align: right;
    float: right;
}

#filter_tags ul li,
.entity_send-a-message .form_notice,
.form_settings fieldset fieldset,
.entity_moderation:hover ul,
.entity_role:hover ul,
.dialogbox {
border-color:#DDDDDD;
}

.form_settings input.form_action-primary {
background:none;
}

.form_settings .form_note {
    background-color: #d1f7cb;
}

#form_settings_photo .form_data {
clear:both;
}

#form_settings_avatar li {
width:auto;
}
#form_settings_avatar input {
margin-left:0;
}
#avatar_original,
#avatar_preview {
float:left;
}
#avatar_preview {
margin-left:29px;
}
#avatar_preview_view {
height:96px;
width:96px;
margin-bottom:18px;
overflow:hidden;
}

#settings_attach,
#form_settings_avatar .form_actions {
clear:both;
}

#form_settings_avatar .form_actions {
margin-bottom:0;
}

.entity_profile {
position:relative;
width:73%;
min-height:123px;
float:left;
margin-bottom:18px;
margin-left:0;
overflow:hidden;
}

.entity_profile dt,
#entity_statistics dt {
font-weight:bold;
}
.entity_profile dd {
display:inline;
}

.entity_profile .entity_depiction {
    float:left;
    width:96px;
    margin-right:18px;
    margin-bottom:18px;
    text-align: center;
}

.entity_profile .entity_fn,
.entity_profile .entity_nickname,
.entity_profile .entity_location,
.entity_profile .entity_url,
.entity_profile .entity_note,
.entity_profile .entity_tags,
.entity_profile .entity_aliases,
.entity_profile .entity_statistics {
margin-left:113px;
margin-bottom:4px;
}

.peopletags_edit_button {
cursor:pointer;
border:0;
padding:0;
width:16px;
height:16px;
    position: relative;
    top: -3px;
}

ul.profile_list {
    list-style-type:none;
}

ul.profile_list li {
    margin-bottom: 20px;
}

.profile_list .h-card .u-photo {
    margin-right: 4px;
}
.profile_list .h-card .p-nickname {
    display: block;
}

.entity_profile .entity_nickname,
.entity_profile .entity_fn {
margin-left:0;
}

.entity_profile .p-nickname {
    font-size:1.4em;
}

.entity_profile .p-name {
    font-size: 1.2em;
    clear: left;
}

.entity_profile .p-name:before {
content: "(";
font-weight:normal;
}
.entity_profile .p-name:after {
content: ")";
font-weight:normal;
}
.entity_profile .p-nickname:after,
.entity_profile .p-nickname:before {
content:"";
}
.entity_profile dt,
.entity_profile h2 {
display:none;
}
.entity_profile .role {
margin-left:11px;
font-style:italic;
}

.entity_actions {
float:right;
margin-left:2%;
    margin-bottom: 28px;
min-width:21%;
}

.entity_actions h2 {
display:none;
}
.entity_actions ul {
list-style-type:none;
}
.entity_actions li {
margin-bottom:7px;
}
.entity_actions li:first-child {
border-top:0;
}
.entity_actions fieldset {
border:0;
padding:0;
}
.entity_actions legend {
display:none;
}

.entity_actions input.submit {
display:block;
text-align:left;
width:100%;
}

.entity_actions a, .entity_actions input, .entity_actions p {
    color: #333 !important;
    font-weight: normal;
    line-height: 1.6em;
}

.entity_actions a {
text-decoration:none;
display:block;
    padding: 3px 4px 4px 28px;
}

.entity_actions input {
    padding: 4px 4px 4px 26px;
}

.entity_actions a, .entity_actions p, .entity_actions .entity_subscribe input, .entity_actions .entity_block input, .entity_actions .entity_moderation input, .entity_actions .entity_role input, .entity_actions .entity_nudge input, .entity_actions .entity_delete input, .entity_actions input.submit {
    background-color: #ccc !important;
    border: none;
}

.entity_actions p {
    padding: 2px 4px 4px 28px;
}

.entity_actions a:hover, .entity_actions p:hover, .entity_actions .entity_subscribe input:hover, .entity_actions .entity_block input:hover, .entity_actions .entity_moderation input:hover, .entity_actions .entity_role input:hover, .entity_actions .entity_nudge input:hover, .entity_actions .entity_delete input:hover, .entity_actions input.submit:hover {
    background-color: #f2f2f2 !important;
}

.entity_actions #entity_remote_subscribe a {
    padding-right: 6px;
}

.entity_actions .accept {
margin-bottom:18px;
}

.entity_send-a-message button {
position:absolute;
top:3px;
right:3px;
}

.entity_send-a-message .form_notice {
    width: 410px;
    padding: 10px;
    position: absolute;
    top: 46px;
    right: 10px;
    z-index: 2;
}

.entity_send-a-message .form_notice fieldset {
    width: 410px;
}

.entity_send-a-message .form_notice textarea {
    width: 280px;
}

.entity_send-a-message .form_notice legend {
display:block;
margin-bottom:11px;
    font-weight: normal;
    color: #333 !important;
}

.entity_send-a-message .form_notice label,
.entity_send-a-message .form_notice select {
display:none;
}
.entity_send-a-message .form_notice .submit {
    position: absolute;
    top: 52px;
    right: 0px;
    text-align: center;
}

.entity_moderation,
.entity_role {
position:relative;
}
.entity_moderation p,
.entity_role p {

padding-bottom:2px;
margin-bottom:7px;
}
.entity_moderation ul,
.entity_role ul {
display:none;
}
.entity_moderation:hover ul,
.entity_role:hover ul {
display:block;
width:110%;
padding:11px;
position:absolute;
z-index:1;
border-width:1px;
border-style:solid;
        top: 20px;
        right: 0px;
        background-color: #fff;
}

.entity_tags ul {
list-style-type:none;
display:inline;
}
.entity_tags li {
display:inline;
margin-right:7px;
}
.entity_tags li:before {
content:'\0009';
}
.entity_tags p.error {
clear:both;
}

#filter_tags {
    margin-bottom: 20px;
    padding-bottom: 10px;
    border-bottom: 1px solid #ccc;
    float: left;
}
#filter_tags dt {
display:none;
}
#filter_tags ul {
list-style-type:none;
}
#filter_tags li {
float:left;
margin-left:7px;
padding-left:7px;
border-left-width: 1px;
border-left-style:solid;
}
#filter_tags #filter_tags_all,
#filter_tags #filter_tags_for {
    margin-left: 10px;
border-left:0;
padding-left:0;
}
#filter_tags_all a,
#filter_tags_for a  {
font-weight:bold;
    margin-top: 4px;
float:left;
}

#filter_tags_for a {
margin:0;
}

#filter_tags #form_filter_bymode .form_guide {
display:none;
}

#filter_tags #form_filter_bymode .checkbox {
float:none;
}

#filter_tags #form_filter_bymode legend {
display:none;
}

#filter_tags_item label {
    margin-right: 14px;
    margin-left: 7px;
    padding-top: 4px;
}
#filter_tags_item label,
#filter_tags_item select {
float:left;
}

#filter_tags_item p {
float:left;
clear:both;
margin-left:38px;
}
#filter_tags_item .submit {
position:relative;
top:3px;
left:3px;
}

.profile .entity_profile {
margin-bottom:0;
min-height:60px;
}

.profile .form_group_join legend,
.profile .form_group_leave legend,
.profile .form_user_subscribe legend,
.profile .form_user_unsubscribe legend,
.form_user_add_peopletag legend,
.form_user_remove_peopletag legend {
display:none;
}

.profile .entity_profile .p-name,
.profile .entity_profile .u-url[rel~=contact] {
margin-left:0;
display:inline;
}

.profile .entity_profile .note,
.profile .entity_profile .u-url,
.profile .entity_profile .entity_tags,
.profile .entity_profile .form_subscription_edit {
margin-left:55px;
clear:none;
display:block;
width:auto;
}

.profile_block .group_aliases .group_alias {
    display:inline;
    list-style-type: none;
    font-style: italic;
}

.profile_block .entity_tags dt {
display: inline;
margin-right: 3px;
font-weight: bold;
}

.profile_block .entity_tags dd {
display: inline;
}

.profile .entity_profile .form_subscription_edit {
clear:left;
}

.peopletag {
min-height: 90px;
list-style: none;
}

.peopletag .e-content {
width:auto;
}

.peopletag .tagged-count a:after,
.peopletag .subscriber-count a:after,
.entity_tags dt:after {
content: ':';
}

.peopletag .updated {
display:none;
}
.peopletag .tag a{
font-weight: bold;
}

.peopletag .tag:before {
/* raquo */
content: "\00BB";
}

.peopletag .entity_statistics {
font-size:80%;
}

.profile-lister li {
min-height:30px;
padding:5px;
clear:both;
border-top: 1px #eee solid;
}

.profile-lister {
list-style-type:none;
}

.profile_search_wrap h3 {
float:left;
font-weight:normal;
margin-right:10px;
}

.profile-lister li .u-photo {
display:inline;
margin-right:7px;
margin-bottom:-5px;
}

.profile-lister li .p-name {
font-weight:bold;
}

.profile-lister li .entity_actions {
margin:0;
}

#profile_search_results {
display:block;
border-radius:4px;
max-height:800px;
margin:10px 0;
padding: 5px;
border:1px #ddd solid;
background:#f1f1f1;
}

#profile_search_results.empty {
display: none;
}

.form_peopletag_edit_user_search legend,
.form_peopletag_edit_user_search label,
.form_peopletag_edit_user_search .form_guide {
display:none;
}

.form_peopletag_edit_user_search #field {
height:30px;
}
.form_peopletag_edit_user_search .submit {
width:60px;
}
.form_user_remove_peopletag,
.form_user_add_peopletag {
float:right;
}
.form_user_add_peopletag input.submit,
.form_user_remove_peopletag input.submit {
width:100px;
padding-left:25px;
text-align:left;
}

.profile .entity_profile .form_subscription_edit label {
font-weight:normal;
margin-right:11px;
}

.applications {
margin-bottom:18px;
float:left;
width:100%;
}
.applications li {
list-style-type:none;
}
.application img,
#showapplication .entity_profile img,
.form_data #application_icon img,
#apioauthauthorize .form_data img {
max-width:96px;
max-height:96px;
}
#apioauthauthorize .form_data img {
margin-right:18px;
float:left;
}

.oauth-desktop-mode #wrap {
    min-width: 500px;
}

.oauth-desktop-mode #content {
    width: 480px;
    padding: 6px;
    margin: 4px 0px 0px 4px;
    border-top-left-radius: 7px;
}

.oauth-desktop-mode fieldset {
    margin-bottom: 10px !important;
}

#oauth_pin {
    text-align: center;
    font-size: 3em;
}

#showapplication .entity_profile {
width:68%;
}
#showapplication .entity_profile .entity_fn {
margin-left:0;
}
#showapplication .entity_profile .p-name:before,
#showapplication .entity_profile .p-name:after {
content:'';
}
#showapplication .entity_data {
clear:both;
margin-bottom:18px;
}
#showapplication .entity_data h2 {
display:none;
}
#showapplication .entity_data dd {
font-family:monospace;
font-size:1.3em;
    margin-bottom: 10px;
}
.form_data #application_types label.radio,
.form_data #default_access_types label.radio {
width:14.5%;
}

.mark-top {
    border-top: 1px solid #ccc;
}

#realtime_actions {
    position: relative !important;
    right: -4px !important;
    float: right;
    padding-top: 15px;
    margin-bottom: -8px !important;
}

#realtime_actions li {
    margin-left: 2px !important;
}

#realtime_play, #realtime_pause, #realtime_popup {
    background-image: url(../images/icons/icons-01.gif);
    background-repeat: no-repeat;
    background-color: transparent;
}

#realtime_play {
    background-position: 0 -2308px;
}
#realtime_pause {
    background-position: 0 -2374px;
}
#realtime_popup {
    background-position: 0 -1714px;
}

#realtime_play, #realtime_pause, #realtime_popup {
    opacity: 0.6;
}

#realtime_play:hover, #realtime_pause:hover, #realtime_popup:hover {
    opacity: 1;
}

body.realtime-popup {
    min-width: 100%;
    overflow-x: hidden;
}

.realtime-popup #content {
    padding: 0px !important;
    margin: 0px !important;
    left: 0;
    right: 0;
    width: 100% !important;
    overflow: visible;
}

.realtime-popup #content_inner {
    padding: 5px;
}

.realtime-popup .input_forms {
    top: 0px;
    left: 0px;
    padding: 10px 0px 0px 5px;
}

.realtime-popup .form_notice_placeholder .placeholder {
    width: 445px;
}

.realtime-popup .input_form {
    width: 470px;
}

.realtime-popup .form_notice fieldset {
    width: 430px !important;
}

.realtime-popup .form_notice textarea {
    width: 425px !important;
}

.realtime-popup .form_notice label.notice_data-attach {
    right: 0px !important;
    top: 3px !important;
}

.realtime-popup .form_notice #notice_data-geo_wrap label, .realtime-popup .form_notice #notice_data-geo_wrap input {
    right: 8px !important;
    top: 3px !important;
}

.realtime-popup .form_notice .error,
.realtime-popup .form_notice .success,
.realtime-popup .form_notice .notice-status {
    width: 430px;
}

/* icons */

.form_notice label.notice_data-attach,
#export_data li a.rss,
#export_data li a.atom,
#export_data li a.foaf,
.entity_edit a,
.entity_send-a-message a,
.entity_nudge p,
.form_user_nudge input.submit,
.form_user_block input.submit,
.form_user_unblock input.submit,
.form_group_block input.submit,
.form_group_unblock input.submit,
.form_make_admin input.submit,
.notice .attachment,
.notice-options .notice_reply,
.notice-options form.form_favor input.submit,
.notice-options form.form_disfavor input.submit,
.notice-options .notice_delete,
.notice-options form.form_repeat input.submit,
#new_group a,
#pagination .nav_prev a,
#pagination .nav_next a,
button.close,
.form_group_leave input.submit,
.form_user_unsubscribe input.submit,
.form_group_join input.submit,
.form_user_subscribe input.submit,
.form_remote_authorize input.submit,
.entity_subscribe a,
.entity_moderation p,
.entity_sandbox input.submit,
.entity_silence input.submit,
.entity_delete input.submit,
.entity_role p,
.entity_role_administrator input.submit,
.entity_role_moderator input.submit,
.form_user_remove_peopletag input.submit,
.form_user_add_peopletag input.submit,
.form_peopletag_subscribe input.submit,
.form_peopletag_unsubscribe input.submit,
.notice-options .repeated,
.form_notice label.notice_data-geo,
button.minimize,
.form_reset_key input.submit,
.entity_tag a,
.entity_clear input.submit,
.entity_flag input.submit,
.entity_flag p,
.entity_subscribe input.submit,
#realtime_play,
#realtime_pause,
#realtime_popup,
.peopletags_edit_button,
.mode-private .privacy_mode {
background-image:url(../images/icons/icons-01.gif);
background-repeat:no-repeat;
background-color:transparent;
}

button.close {
background-position:0 -1120px;
}
button.minimize {
background-position:0 -1912px;
}
#export_data li a.rss {
background-position:0 -130px;
}
#export_data li a.atom {
background-position:0 -64px;
}
#export_data li a.foaf {
background-position:0 1px;
}

#export_data li a.json {
background-image:url(../images/icons/activitystreams.png);
background-repeat:no-repeat;
background-color:transparent;
}

.form_group_leave input.submit,
.form_user_unsubscribe input.submit,
.form_user_remove_peopletag input.submit,
.form_peopletag_unsubscribe input.submit {
background-position:5px -1246px;
}
.form_group_join input.submit,
.form_user_subscribe input.submit,
.form_remote_authorize input.submit,
.form_user_add_peopletag input.submit,
.form_peopletag_subscribe input.submit,
.entity_subscribe a {
background-position:5px -1181px;
}
 .peopletags_edit_button {
background-position: 0 -724px;
}

.entity_edit a {
background-position: 5px -719px;
}
.entity_send-a-message a {
background-position: 5px -852px;
}
.entity_nudge p,
.form_user_nudge input.submit {
background-position: 5px -785px;
}
.form_user_block input.submit,
.form_user_unblock input.submit,
.form_group_block input.submit,
.form_group_unblock input.submit {
background-position: 5px -918px;
}
.form_make_admin input.submit {
background-position: 5px -983px;
}
.entity_moderation p {
background-position: 5px -1313px;
}
.entity_sandbox input.submit {
background-position: 5px -1380px;
}
.entity_silence input.submit {
background-position: 5px -1445px;
}
.entity_delete input.submit {
background-position: 5px -1511px;
}
.entity_sandbox .form_user_unsandbox input.submit {
background-position: 5px -2568px;
}
.entity_silence .form_user_unsilence input.submit {
background-position: 5px -2633px;
}
.entity_role p {
background-position: 5px -2436px;
}
.entity_role_administrator .form_user_grantrole input.submit {
background-position: 5px -983px;
}
.entity_role_moderator .form_user_grantrole input.submit {
background-position: 5px -1313px;
}
.entity_role_administrator .form_user_revokerole input.submit {
background-position: 5px -2699px;
}
.entity_role_moderator .form_user_revokerole input.submit {
background-position: 5px -2501px;
}
.form_reset_key input.submit {
background-position: 5px -1973px;
}
.entity_clear input.submit {
background-position: 5px -2039px;
}
.entity_flag input.submit,
.entity_flag p {
background-position: 5px -2105px;
}
.entity_subscribe input.accept {
background-position: 5px -2171px;
}
.entity_subscribe input.reject {
background-position: 5px -2237px;
}
#realtime_play {
background-position: 0 -2308px;
}
#realtime_pause {
background-position: 0 -2374px;
}
#realtime_popup {
background-position: 0 -1714px;
}
.notice .attachment {
background-position:0 -394px;
}
.notice .attachment.more {
background-position:0 -2770px;
}
#attachments .attachment {
background:none;
}
.notice-options .notice_reply {
background-position:0 -592px;
}
.notice-options form.form_favor input.submit {
background-position:0 -460px;
}
.notice-options form.form_disfavor input.submit {
background-position:0 -526px;
}
.notice-options .notice_delete {
background-position:0 -658px;
}
.notice-options .form_repeat.processing {
background-image:none;
}
.notice-options form.form_repeat input.submit {
background-position:0 -1582px;
}
.notice-options .repeated {
background-position:0 -1648px;
}
#new_group a {
background-position:0 -1054px;
}
.form_notice label.notice_data-attach {
    background-position: 0 -328px;
}
.form_notice label.notice_data-geo {
    background-position: 0 -1780px;
}
.form_notice label.notice_data-geo.checked {
    background-position: 0 -1846px;
}

#pagination .nav_prev a {
    padding-top: 8px;
    padding-left: 25px;
    background-position:0 -187px;
}
#pagination .nav_next a {
    padding-top: 9px;
    padding-right: 25px;
    background-position: 115% -252px;
}

#usergroups #new_group {
float: left;
margin-right: 2em;
}
#new_group, #group_search {
margin-bottom:18px;
}
#new_group a {
padding-left:20px;
}

.entity_tags li.mode-private {
color: #829D25;
}
.mode-private .privacy_mode {
background-position: 0px -1978px;
}

/* tag autocomplete */

.ptag-ac-line {
font-weight: normal;
background-color: white;
min-height:30px;
}
.ptag-ac-line:nth-child(odd) {
background-color: #fafafa;
}

.ptag-ac-line-tag {
min-width: 150px;
display: inline-block;
}

.ptag-ac-line .freq {
min-width: 50px;
text-align: right;
float:right;
}

.ptag-ac-line.mode-public .privacy_mode {
display:none;
}

#site_nav_local_views li.extended_menu a {
    display:none;
}

.profile_block_otherprofile_list li {
    display: inline;
    list-style-type: none;
}

}/*end of @media screen, projection, tv*/

@media print {
a:after { background-color:#FFFFFF; }
a:not([href^="#"]):after { content:" <"attr(href)"> "; }
img { border:none; }
p { orphans: 2; widows: 1; }

#site_nav_global_primary,
#site_nav_local_views,
#form_notice,
.pagination,
#site_nav_global_secondary,
.entity_actions,
.notice-options,
#aside_primary,
.form_subscription_edit .submit {
display:none;
}
.timestamp dt, .timestamp dd,
.device dt, .device dd {
display:inline;
}
.profiles li,
.notices li {
margin-bottom:18px;
}

}/*end of @media print*/


code:
/** Universal Ad Package styles:
 * Medium Rectangle 300x250
 * Rectangle        180x150
 * Leaderboard      728x90
 * Wide Skyscraper  160x600
 *
 * @package   StatusNet
 * @author    Sarven Capadisli <csarven@status.net>
 * @copyright 2010 StatusNet, Inc.
 * @license   http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
 * @link      http://status.net/
 */

.ad {
border:1px solid #CCC;
float:left;
}

#ad_medium-rectangle {
width:300px;
height:250px;

margin-left:1.35%;
margin-bottom:18px;
}

#ad_rectangle {
width:180px;
height:150px;

float:none;
clear:both;
margin:0 auto;
margin-bottom:29px;
}

#ad_leaderboard {
width:728px;
height:90px;

margin:0 auto 18px;
float:none;
clear:both;
}

#ad_wide-skyscraper {
width:160px;
height:600px;

float:right;
margin-top:18px;
margin-right:8.25%;
}


code:
/**
 * @author    Paul Jarvis http://code.google.com/p/twotiny/
 * @license   http://dev.perl.org/licenses/ Artistic License/GPL
 * @note
        White left arrow with green background
        White right arrow with green background
        White clip with green background
        White heart with green background
        White reply with green background
        White garbage with green background
        White pencil with green background
        White envelope with green background
        White speech bubble with green background
        White shield with green background
        White asterisk with green background
        White x with green background
        White plus with green background
        White minus with green background
        White skull with green background
        White recycle with green background
        White external with green background
        White key with green background
        White flag with green background
        White checkmark with green background
        White reject with green background
        White play with green background
        White pause with green background
 */

/**
 * @author    Sarven Capadisli <csarven@status.net>
 * @copyright 2008-2010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 * @note
        Green clip with transparent background
        Green heart with white background
        White person with tie with green background
        White sherif badge with green background
        White boxes with green background
        White speech bubble broken with green background
        Green recycle with transparent background
        Green pin with white background
        White pin with green background
        White underscore with green background
        White C with green background
        White magic wand with green background
        Green badge with white background
        Green sandbox with white background
        Green speech bubble broken with white background
        Green person with tie with white background
 */

Created by various authors
* FOAF icon from http://iandavis.com/2006/foaf-icons/ with Public Domain license
* Atom feed icon from http://intertwingly.net/wiki/pie/Icon with Public Domain license
* RSS feed icon from http://www.feedicons.com/ (Mozilla, Microsoft, Matt Brett) with MPL/GPL/LGPL tri-license
* Processing icon from/by Unknown with Unknown license //FIXME
* lock and lock_open icons by Mark James http://www.famfamfam.com/lab/icons/silk/ (Creative Commons Attribution 2.5 License)

path: theme/base/images/icons/README


code:
/** theme: neo-blue
 *
 * @package   StatusNet
 * @author    Samantha Doherty <sammy@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
 * @link      http://status.net/
 */

@media screen, projection, tv {

body {
    background: #7e89a4;
}

#wrap {
    border: none;
    padding: 0px 10px;
    box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
    -moz-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
    -webkit-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
    background: #fff;
}

#header {
    padding-top: 7px;
}

#site_nav_global_primary {
    top: 0px;
    right: -14px;
    padding-top: 5px;
    height: 30px;
    width: 986px;
    box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.7);
    -moz-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.7);
    -webkit-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.7);
    -webkit-border-bottom-left-radius: 4px;
    -moz-border-radius-bottomleft: 4px;
    border-bottom-left-radius: 4px;
    -webkit-border-bottom-right-radius: 4px;
    -moz-border-radius-bottomright: 4px;
    border-bottom-right-radius: 4px;
    z-index: 98;
    border-bottom: 1px solid #fff;
    border-left: 1px solid #516499;
    border-right: 1px solid #516499;
}

#site_nav_global_primary a:hover {
    background: #4c619c;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;
}

#site_notice {
    margin: 45px 0px 0px 0px;
    background-color: #f2f2f2; /* XXX */
}

#core {
    border-top: none;
    margin-top: 3px;
}

.input_forms {
    background-color: #fff;
    left: 0px;
    padding: 18px 0px 0px 0px;
}

}/*end of @media screen, projection, tv*/


code:
address img {
    background: none !important;
}

/* copy of mp-screen.css from neo theme */

body {
    background-image: none;
    min-width: 0;
}

#header {
    padding: 0;
}

#site_nav_global_primary {
    top: 0;
    -webkit-border-top-right-radius: 0px;
    -moz-border-radius-topright: 0px;
    border-top-right-radius: 0px;
    line-height: 16px;
}

#site_nav_global_primary li {
    float: left;
    margin-right: 8px;
}

#site_nav_local_views {
    line-height: 2em;
}

#site_nav_local_views h3 {
    color: #333;
    background: none;
    text-transform: none;
    letter-spacing: 0;
    padding-bottom: 0;
}

#site_nav_local_views li li {
    margin: 0 6px 6px 0;
}

#login #site_nav_local_views li, #register #site_nav_local_views li, #openidlogin #site_nav_local_views li {
    margin: 0 6px 6px 0;
}

#site_nav_local_views a {
    color: #fff;
    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);;
    background: #364a84;
    background: -moz-linear-gradient(top, #7b8dbb , #364a84);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7b8dbb), color-stop(100%,#364a84));
    font-size: 0.9em;
    width: auto;
}

#site_nav_local_views a:hover {
    background: #7b8dbb;
    background: -moz-linear-gradient(top, #364a84 , #7b8dbb);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#364a84), color-stop(100%,#7b8dbb));
}

.input_forms {
    top: -10px;
    padding-right: 0;
}

#input_form_nav li a {
    padding: 0px 4px 1px 4px;
}

.form_notice .count {
    top: 44px;
    left: 276px;
}

#form_notice-direct.form_notice .count {
    top: 74px;
    left: 276px;
}

#event-startdate, #event-starttime, #event-enddate, #event-endtime {
    width: 120px;
    margin-right: 12px;
}

.input_form .form_settings .submit {
    font-size: 1em;
}

.form_notice input.submit {
    font-size: 1em;
}

.question div.question-description {
    max-width: 100% !important;
}

ul.qna-dummy {
    width: 80%;
}

.qna-dummy-placeholder input {
    width: 92%;
}

.question #qna-answer, .qna-full-question #qna-answer {
    width: 220px;
}

.threaded-replies #answer-form fieldset {
    width: 220px;
}

.threaded-replies #qna-answer-submit {
    float: left;
    clear: left;
    position: relative;
    top: 0;
    bottom: 0px;
    left: 0;
    margin-top: 10px;
}

a.company_logo {
    display: none !important;
}